resource.go 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278
  1. package knowledge
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/controllers"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/models/knowledge"
  7. "eta_gn/eta_api/services"
  8. knowledgeServ "eta_gn/eta_api/services/knowledge"
  9. "eta_gn/eta_api/utils"
  10. "fmt"
  11. "html"
  12. "io/ioutil"
  13. "os"
  14. "path"
  15. "strconv"
  16. "strings"
  17. "time"
  18. "github.com/h2non/filetype"
  19. "github.com/rdlucklib/rdluck_tools/paging"
  20. "github.com/tealeg/xlsx"
  21. )
  22. // 分类
  23. type ResourceController struct {
  24. controllers.BaseAuthController
  25. }
  26. // ListReport
  27. // @Title 获取事件列表接口
  28. // @Description 获取事件列表
  29. // @Param PageSize query int true "每页数据条数"
  30. // @Param CurrentIndex query int true "当前页页码,从1开始"
  31. // @Param TimeType query string true "筛选的时间类别:publish_time(发布时间),modify_time(更新时间);approve_time(审批时间)"
  32. // @Param StartDate query string true "开始时间"
  33. // @Param EndDate query string true "结束时间"
  34. // @Param Frequency query string true "频度"
  35. // @Param ClassifyIdFirst query int true "一级分类id"
  36. // @Param ClassifyIdSecond query int true "二级分类id"
  37. // @Param ClassifyIdThird query int true "三级分类id"
  38. // @Param State query int true "状态"
  39. // @Param KeyWord query string true "搜索关键词"
  40. // @Param PublishSort query string true "desc:降序,asc 升序(预留)"
  41. // @Param FilterReportType query string true "筛选事件类型,1:公共研报,2:共享研报,3:我的研报"
  42. // @Param IncludeFile query string true "是否包含文件, no:不包含"
  43. // @Param IsShowMe query string true "只看我, false:全部, true:只看我"
  44. // @Success 200 {object} knowledge.KnowledgeResourceListResp
  45. // @router /resource/list [get]
  46. func (this *ResourceController) List() {
  47. br := new(models.BaseResponse).Init()
  48. defer func() {
  49. this.Data["json"] = br
  50. this.ServeJSON()
  51. }()
  52. pageSize, _ := this.GetInt("PageSize")
  53. currentIndex, _ := this.GetInt("CurrentIndex")
  54. classifyIds := this.GetString("ClassifyIds")
  55. // 添加人
  56. addUserIds, _ := this.GetInt("SysUserIds")
  57. // 标签
  58. tagIds := this.GetString("TagIds")
  59. keyWord := this.GetString("Keyword")
  60. resourceType, _ := this.GetInt("ResourceType")
  61. sourceFrom := this.GetString("SourceFrom")
  62. includeFile := this.GetString("IncludeFile")
  63. IsShowMe, _ := this.GetBool("IsShowMe")
  64. var startSize int
  65. if pageSize <= 0 {
  66. pageSize = utils.PageSize20
  67. }
  68. if currentIndex <= 0 {
  69. currentIndex = 1
  70. }
  71. startSize = utils.StartIndex(currentIndex, pageSize)
  72. var condition string
  73. var pars []interface{}
  74. condition += ` AND resource_type = ? `
  75. pars = append(pars, resourceType)
  76. if includeFile == "no" {
  77. condition += ` AND is_file = ? `
  78. pars = append(pars, 0)
  79. }
  80. if IsShowMe {
  81. condition += ` AND admin_id = ? `
  82. pars = append(pars, this.SysUser.AdminId)
  83. }
  84. if keyWord != "" {
  85. //按照空格划分为关键词数组
  86. keyWordArr := strings.Split(keyWord, " ")
  87. lengthKey := len(keyWordArr)
  88. if lengthKey == 1 {
  89. condition += ` AND (title LIKE ?) `
  90. pars = utils.GetLikeKeywordPars(pars, keyWord, 1)
  91. } else if lengthKey > 1 {
  92. for k, v := range keyWordArr {
  93. if k == 0 {
  94. condition += ` AND (title LIKE ? `
  95. pars = utils.GetLikeKeywordPars(pars, v, 1)
  96. } else if k == lengthKey-1 {
  97. condition += ` OR title LIKE ? ) `
  98. pars = utils.GetLikeKeywordPars(pars, v, 1)
  99. } else {
  100. condition += ` OR title LIKE ? `
  101. pars = utils.GetLikeKeywordPars(pars, v, 1)
  102. }
  103. }
  104. }
  105. }
  106. if sourceFrom != "" {
  107. sourceArr := strings.Split(sourceFrom, ",")
  108. condition += ` AND source_from in (?) `
  109. pars = append(pars, sourceArr)
  110. }
  111. if classifyIds != "" {
  112. //转成数组,并把类型转成int
  113. classifyIdsArr := strings.Split(classifyIds, ",")
  114. var classifyIdsInt []int
  115. for _, v := range classifyIdsArr {
  116. classifyId, _ := strconv.Atoi(v)
  117. classifyIdsInt = append(classifyIdsInt, classifyId)
  118. }
  119. condition += ` AND classify_id in (?) `
  120. pars = append(pars, classifyIdsInt)
  121. }
  122. if addUserIds > 0 {
  123. // 转成数组,并把类型转成int
  124. addUserIdsArr := strings.Split(strconv.Itoa(addUserIds), ",")
  125. var addUserIdsInt []int
  126. for _, v := range addUserIdsArr {
  127. addUserId, _ := strconv.Atoi(v)
  128. addUserIdsInt = append(addUserIdsInt, addUserId)
  129. }
  130. condition += ` AND admin_id in (?) `
  131. pars = append(pars, addUserIdsInt)
  132. }
  133. if tagIds != "" {
  134. //转成数组,并把类型转成int
  135. tagIdsArr := strings.Split(tagIds, ",")
  136. var tagIdsInt []int
  137. for _, v := range tagIdsArr {
  138. tagId, _ := strconv.Atoi(v)
  139. tagIdsInt = append(tagIdsInt, tagId)
  140. }
  141. condition += ` AND tag_id in (?) `
  142. pars = append(pars, tagIdsInt)
  143. }
  144. var err error
  145. var total int
  146. var list []*knowledge.KnowledgeResourceList
  147. // 共享事件需要连表查询,所以需要单独写
  148. total, err = knowledge.GetKnowledgeResourceListCount(condition, pars)
  149. if err != nil {
  150. br.Msg = "获取失败"
  151. br.ErrMsg = "获取失败,Err:" + err.Error()
  152. return
  153. }
  154. listTmp, err := knowledge.GetKnowledgeResourcePageList(condition, pars, startSize, pageSize)
  155. if err != nil {
  156. br.Msg = "获取失败"
  157. br.ErrMsg = "获取失败,Err:" + err.Error()
  158. return
  159. }
  160. // 整理分类ID
  161. classifyFullNameMap := make(map[int]string)
  162. classifyIdsArr := make([]int, 0)
  163. for _, v := range listTmp {
  164. classifyIdsArr = append(classifyIdsArr, v.ClassifyId)
  165. }
  166. // 获取分类列表
  167. classifyList, err := knowledge.GetFullClassifyListByIdList(classifyIdsArr, resourceType)
  168. if err != nil {
  169. br.Msg = "获取失败"
  170. br.ErrMsg = "获取失败,Err:" + err.Error()
  171. return
  172. }
  173. for _, v := range classifyList {
  174. name := v.ClassifyName
  175. if v.ParentName != "" {
  176. name = v.ParentName + "/" + name
  177. }
  178. if v.RootName != "" {
  179. name = v.RootName + "/" + name
  180. }
  181. classifyFullNameMap[v.ClassifyId] = name
  182. }
  183. // 整理标签ID
  184. tagNameMap := make(map[int]string)
  185. tagIdsArr := make([]int, 0)
  186. for _, v := range listTmp {
  187. tagIdsArr = append(tagIdsArr, v.TagId)
  188. }
  189. // 获取标签列表
  190. tagObj := new(knowledge.KnowledgeTag)
  191. tagList, err := tagObj.GetListByIdList(tagIdsArr, resourceType)
  192. if err != nil {
  193. br.Msg = "获取失败"
  194. br.ErrMsg = "获取失败,Err:" + err.Error()
  195. }
  196. for _, v := range tagList {
  197. tagNameMap[v.TagId] = v.TagName
  198. }
  199. for _, v := range listTmp {
  200. var startTime, endTime string
  201. if v.StartTime != nil && !v.StartTime.IsZero() {
  202. startTime = v.StartTime.In(time.Local).Format(utils.FormatDateTime)
  203. if resourceType == knowledge.KnowledgeResourceTypeOpinion || resourceType == knowledge.KnowledgeResourceTypeKnow {
  204. startTime = v.StartTime.In(time.Local).Format(utils.FormatDate)
  205. }
  206. }
  207. if v.EndTime != nil && !v.EndTime.IsZero() {
  208. endTime = v.EndTime.In(time.Local).Format(utils.FormatDateTime)
  209. if resourceType == knowledge.KnowledgeResourceTypeOpinion || resourceType == knowledge.KnowledgeResourceTypeKnow {
  210. endTime = v.EndTime.In(time.Local).Format(utils.FormatDate)
  211. }
  212. }
  213. modifyTime := v.ModifyTime.In(time.Local).Format(utils.FormatDateTime)
  214. createTime := v.CreateTime.In(time.Local).Format(utils.FormatDateTime)
  215. tmp := &knowledge.KnowledgeResourceList{
  216. KnowledgeResourceId: v.KnowledgeResourceId,
  217. ResourceType: v.ResourceType,
  218. ClassifyId: v.ClassifyId,
  219. Title: v.Title,
  220. CreateTime: createTime,
  221. ModifyTime: modifyTime,
  222. State: v.State,
  223. ResourceCode: v.ResourceCode,
  224. AdminId: v.AdminId,
  225. AdminRealName: v.AdminRealName,
  226. SourceFrom: v.SourceFrom,
  227. TagId: v.TagId,
  228. StartTime: startTime,
  229. EndTime: endTime,
  230. }
  231. // todo 编辑状态
  232. /*markStatus, err := services.UpdateReportEditMark(item.Id, 0, this.SysUser.AdminId, 2, this.SysUser.RealName, this.Lang)
  233. if err != nil {
  234. br.Msg = "查询标记状态失败"
  235. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  236. return
  237. }
  238. if markStatus.Status == 0 {
  239. item.CanEdit = true
  240. } else {
  241. item.Editor = markStatus.Editor
  242. }*/
  243. classifyName, ok := classifyFullNameMap[tmp.ClassifyId]
  244. if ok {
  245. tmp.ClassifyFullName = classifyName
  246. }
  247. tagName, ok := tagNameMap[v.TagId]
  248. if ok {
  249. tmp.TagName = tagName
  250. }
  251. list = append(list, tmp)
  252. }
  253. page := paging.GetPaging(currentIndex, pageSize, total)
  254. resp := new(knowledge.KnowledgeResourceListResp)
  255. resp.Paging = page
  256. resp.List = list
  257. br.Ret = 200
  258. br.Success = true
  259. br.Msg = "获取成功"
  260. br.Data = resp
  261. }
  262. // Add
  263. // @Title 新增事件接口
  264. // @Description 新增事件(区分事件类型)
  265. // @Param request body knowledge.AddReq true "type json string"
  266. // @Success 200 {object} knowledge.AddResp
  267. // @router /resource/add [post]
  268. func (this *ResourceController) Add() {
  269. br := new(models.BaseResponse).Init()
  270. defer func() {
  271. this.Data["json"] = br
  272. this.ServeJSON()
  273. }()
  274. sysUser := this.SysUser
  275. if sysUser == nil {
  276. br.Msg = "请登录"
  277. br.ErrMsg = "请登录,SysUser Is Empty"
  278. br.Ret = 408
  279. return
  280. }
  281. var req knowledge.AddReq
  282. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  283. if err != nil {
  284. br.Msg = "参数解析异常!"
  285. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  286. return
  287. }
  288. if req.Title == `` {
  289. br.Msg = "标题不能为空"
  290. br.ErrMsg = "标题不能为空"
  291. br.IsSendEmail = false
  292. return
  293. }
  294. // 判断标题长度,如果超过600个字符则报错
  295. //fmt.Println(len(req.Title))
  296. if len(req.Title) > 600 {
  297. br.Msg = "标题过长"
  298. return
  299. }
  300. if req.ClassifyId <= 0 {
  301. br.Msg = "分类必填"
  302. br.ErrMsg = "分类必填"
  303. br.IsSendEmail = false
  304. return
  305. }
  306. if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
  307. if req.StartTime == "" {
  308. br.Msg = "开始时间必填"
  309. br.ErrMsg = "开始时间必填"
  310. return
  311. }
  312. }
  313. item, err, errMsg := knowledgeServ.AddResource(&req, sysUser)
  314. if err != nil {
  315. br.Msg = "保存失败"
  316. if errMsg != "" {
  317. br.Msg = errMsg
  318. }
  319. br.ErrMsg = "保存失败,Err:" + err.Error()
  320. return
  321. }
  322. resp := new(knowledge.AddResp)
  323. resp.KnowledgeResourceId = item.KnowledgeResourceId
  324. resp.ResourceCode = item.ResourceCode
  325. br.Ret = 200
  326. br.Success = true
  327. br.Msg = "保存成功"
  328. br.Data = resp
  329. }
  330. // Edit
  331. // @Title 编辑事件基础信息接口
  332. // @Description 编辑事件基础信息(不区分事件类型)
  333. // @Param request body knowledge.EditReq true "type json string"
  334. // @Success 200 {object} knowledge.EditResp
  335. // @router /resource/edit [post]
  336. func (this *ResourceController) Edit() {
  337. br := new(models.BaseResponse).Init()
  338. defer func() {
  339. this.Data["json"] = br
  340. this.ServeJSON()
  341. }()
  342. sysUser := this.SysUser
  343. if sysUser == nil {
  344. br.Msg = "请登录"
  345. br.ErrMsg = "请登录,SysUser Is Empty"
  346. br.Ret = 408
  347. return
  348. }
  349. var req knowledge.EditReq
  350. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  351. if err != nil {
  352. br.Msg = "参数解析异常!"
  353. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  354. return
  355. }
  356. if req.KnowledgeResourceId <= 0 {
  357. br.Msg = "请选择事件"
  358. br.ErrMsg = "请选择事件"
  359. return
  360. }
  361. if req.Title == `` {
  362. br.Msg = "标题不能为空"
  363. br.ErrMsg = "标题不能为空"
  364. br.IsSendEmail = false
  365. return
  366. }
  367. if len(req.Title) > 600 {
  368. br.Msg = "标题过长"
  369. return
  370. }
  371. if req.ClassifyId <= 0 {
  372. br.Msg = "分类必填"
  373. br.ErrMsg = "分类必填"
  374. br.IsSendEmail = false
  375. return
  376. }
  377. if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
  378. if req.StartTime == "" {
  379. br.Msg = "开始时间必填"
  380. br.ErrMsg = "开始时间必填"
  381. return
  382. }
  383. }
  384. // todo 更新标记key
  385. /*markStatus, err := services.UpdateReportEditMark(int(req.KnowledgeResourceId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
  386. if err != nil {
  387. br.Msg = err.Error()
  388. return
  389. }
  390. if markStatus.Status == 1 {
  391. br.Msg = markStatus.Msg
  392. //br.Ret = 202 //202 服务器已接受请求,但尚未处理。
  393. return
  394. }*/
  395. resourceObj := new(knowledge.KnowledgeResource)
  396. resourceInfo, e := resourceObj.GetById(int(req.KnowledgeResourceId))
  397. if e != nil {
  398. if utils.IsErrNoRow(e) {
  399. br.Msg = "事件已被删除, 请刷新页面"
  400. return
  401. }
  402. br.Msg = "操作失败"
  403. br.ErrMsg = "获取事件失败, Err: " + e.Error()
  404. return
  405. }
  406. if resourceInfo.ResourceType != req.ResourceType {
  407. br.Msg = "事件类型错误"
  408. return
  409. }
  410. // 编辑事件信息
  411. err, errMsg := knowledgeServ.EditResource(resourceInfo, req, sysUser)
  412. if err != nil {
  413. br.Msg = "保存失败"
  414. if errMsg != "" {
  415. br.Msg = errMsg
  416. }
  417. br.ErrMsg = "保存失败,Err:" + err.Error()
  418. return
  419. }
  420. resp := new(knowledge.EditResp)
  421. resp.KnowledgeResourceId = req.KnowledgeResourceId
  422. resp.ResourceCode = resourceInfo.ResourceCode
  423. br.Ret = 200
  424. br.Success = true
  425. br.Msg = "保存成功"
  426. br.Data = resp
  427. }
  428. // Detail
  429. // @Title 获取事件详情接口
  430. // @Description 获取事件详情
  431. // @Param request body knowledge.KnowledgeResourceDetailReq true "type json string"
  432. // @Success 200 {object} knowledge.KnowledgeResource
  433. // @router /resource/detail [get]
  434. func (this *ResourceController) Detail() {
  435. br := new(models.BaseResponse).Init()
  436. defer func() {
  437. this.Data["json"] = br
  438. this.ServeJSON()
  439. }()
  440. /*var req knowledge.KnowledgeResourceDetailReq
  441. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  442. if err != nil {
  443. br.Msg = "参数解析异常!"
  444. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  445. return
  446. }
  447. if req.KnowledgeResourceId <= 0 {
  448. br.Msg = "参数错误"
  449. return
  450. }*/
  451. knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
  452. if err != nil {
  453. br.Msg = "获取参数失败!"
  454. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  455. return
  456. }
  457. if knowledgeResourceId <= 0 {
  458. br.Msg = "参数错误"
  459. return
  460. }
  461. resourceType, _ := this.GetInt("ResourceType")
  462. resourceObj := new(knowledge.KnowledgeResource)
  463. item, err := resourceObj.GetById(knowledgeResourceId)
  464. if err != nil {
  465. if utils.IsErrNoRow(err) {
  466. br.Msg = "事件已被删除"
  467. return
  468. }
  469. br.Msg = "获取失败"
  470. br.ErrMsg = "获取失败,Err:" + err.Error()
  471. return
  472. }
  473. if item.ResourceType != resourceType {
  474. br.Msg = "事件类型错误"
  475. return
  476. }
  477. item.Content = html.UnescapeString(item.Content)
  478. resp := &knowledge.KnowledgeResourceDetailView{
  479. KnowledgeResource: item,
  480. }
  481. br.Ret = 200
  482. br.Success = true
  483. br.Msg = "获取成功"
  484. br.Data = resp
  485. }
  486. // SaveReportContent
  487. // @Title 保存草稿
  488. // @Description 保存草稿
  489. // @Param request body knowledge.SaveReportContent true "type json string"
  490. // @Success 200 {object} knowledge.KnowledgeResourceAuthorResp
  491. // @router /resource/saveContent [post]
  492. func (this *ResourceController) SaveReportContent() {
  493. br := new(models.BaseResponse).Init()
  494. br.IsSendEmail = false
  495. defer func() {
  496. this.Data["json"] = br
  497. this.ServeJSON()
  498. }()
  499. sysUser := this.SysUser
  500. if sysUser == nil {
  501. br.Msg = "请登录"
  502. br.ErrMsg = "请登录,SysUser Is Empty"
  503. br.Ret = 408
  504. return
  505. }
  506. var req knowledge.SaveReportContent
  507. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  508. if err != nil {
  509. br.Msg = "参数解析异常!"
  510. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  511. return
  512. }
  513. knowledgeResourceId := req.KnowledgeResourceId
  514. //noChangeFlag := req.NoChange
  515. if knowledgeResourceId <= 0 {
  516. resp := new(knowledge.SaveReportContentResp)
  517. resp.KnowledgeResourceId = knowledgeResourceId
  518. br.Ret = 200
  519. br.Success = true
  520. br.Msg = "保存成功"
  521. br.Data = resp
  522. return
  523. }
  524. // 获取事件详情
  525. /*resourceInfo, _ := knowledge.GetReportByknowledgeResourceId(req.KnowledgeResourceId)
  526. if resourceInfo != nil && resourceInfo.State == 2 {
  527. br.Msg = "该事件已发布,不允许编辑"
  528. br.ErrMsg = "该事件已发布,不允许编辑"
  529. br.IsSendEmail = false
  530. return
  531. }
  532. // 标记更新中
  533. {
  534. markStatus, err := services.UpdateReportEditMark(req.KnowledgeResourceId, 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
  535. if err != nil {
  536. br.Msg = err.Error()
  537. return
  538. }
  539. if markStatus.Status == 1 {
  540. br.Msg = markStatus.Msg
  541. return
  542. }
  543. }
  544. // 内容有过修改的话,那么逻辑处理
  545. if noChangeFlag != 1 {
  546. content := req.Content
  547. if content == "" {
  548. content = this.GetString("Content")
  549. }
  550. if content != "" {
  551. e := utils.ContentXssCheck(req.Content)
  552. if e != nil {
  553. br.Msg = "存在非法标签"
  554. br.ErrMsg = "存在非法标签, Err: " + e.Error()
  555. return
  556. }
  557. contentClean, e := services.FilterReportContentBr(req.Content)
  558. if e != nil {
  559. br.Msg = "内容去除前后空格失败"
  560. br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  561. return
  562. }
  563. content = contentClean
  564. contentSub, err := services.GetReportContentSub(content)
  565. if err != nil {
  566. go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
  567. //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  568. }
  569. resourceInfo.Content = html.EscapeString(content)
  570. resourceInfo.ContentSub = html.EscapeString(contentSub)
  571. resourceInfo.ContentStruct = html.EscapeString(req.ContentStruct)
  572. resourceInfo.HeadImg = req.HeadImg
  573. resourceInfo.EndImg = req.EndImg
  574. resourceInfo.CanvasColor = req.CanvasColor
  575. resourceInfo.HeadResourceId = req.HeadResourceId
  576. resourceInfo.EndResourceId = req.EndResourceId
  577. resourceInfo.ModifyTime = time.Now()
  578. resourceInfo.ContentModifyTime = time.Now()
  579. updateCols := []string{"Content", "ContentSub", "ContentStruct", "HeadImg", "EndImg", "CanvasColor", "HeadResourceId", "EndResourceId", "ModifyTime", "ContentModifyTime"}
  580. err = resourceInfo.UpdateReport(updateCols)
  581. if err != nil {
  582. br.Msg = "保存失败"
  583. br.ErrMsg = "保存失败,Err:" + err.Error()
  584. return
  585. }
  586. go knowledge.AddReportSaveLog(knowledgeResourceId, this.SysUser.AdminId, resourceInfo.Content, resourceInfo.ContentSub, resourceInfo.ContentStruct, resourceInfo.CanvasColor, this.SysUser.AdminName, resourceInfo.HeadResourceId, resourceInfo.EndResourceId)
  587. }
  588. }
  589. */
  590. resp := new(knowledge.SaveReportContentResp)
  591. resp.KnowledgeResourceId = knowledgeResourceId
  592. br.Ret = 200
  593. br.Success = true
  594. br.Msg = "保存成功"
  595. br.Data = resp
  596. }
  597. // BaseDetail
  598. // @Title 获取事件基础信息详情接口
  599. // @Description 获取事件基础信息详情接口
  600. // @Param request body knowledge.KnowledgeResourceDetailReq true "type json string"
  601. // @Success 200 {object} knowledge.KnowledgeResource
  602. // @router /resource/detail/base [get]
  603. func (this *ResourceController) BaseDetail() {
  604. br := new(models.BaseResponse).Init()
  605. defer func() {
  606. this.Data["json"] = br
  607. this.ServeJSON()
  608. }()
  609. /*var req knowledge.KnowledgeResourceDetailReq
  610. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  611. if err != nil {
  612. br.Msg = "参数解析异常!"
  613. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  614. return
  615. }
  616. if req.KnowledgeResourceId <= 0 {
  617. br.Msg = "参数错误"
  618. return
  619. }*/
  620. /*knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
  621. if err != nil {
  622. br.Msg = "获取参数失败!"
  623. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  624. return
  625. }
  626. if knowledgeResourceId <= 0 {
  627. br.Msg = "参数错误"
  628. return
  629. }
  630. resourceInfo, err := knowledge.GetReportById(knowledgeResourceId)
  631. if err != nil {
  632. if utils.IsErrNoRow(err) {
  633. br.Msg = "事件已被删除"
  634. return
  635. }
  636. br.Msg = "获取失败"
  637. br.ErrMsg = "获取失败,Err:" + err.Error()
  638. return
  639. }
  640. // 基础信息就不获取章节信息了
  641. chapterList := make([]*knowledge.KnowledgeResourceChapter, 0)
  642. resourceInfo.Content = html.UnescapeString(resourceInfo.Content)
  643. resourceInfo.ContentSub = html.UnescapeString(resourceInfo.ContentSub)
  644. grandAdminList := make([]knowledge.KnowledgeResourceDetailViewAdmin, 0)
  645. permissionList := make([]knowledge.KnowledgeResourceDetailViewPermission, 0)
  646. // 处理事件授权用户列表
  647. {
  648. obj := report.ReportGrant{}
  649. grantList, tmpErr := obj.GetGrantListById(knowledgeResourceId)
  650. if tmpErr != nil {
  651. br.Msg = "获取章节id授权用户列表失败"
  652. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  653. return
  654. }
  655. if len(grantList) > 0 {
  656. grandAdminIdList := make([]int, 0)
  657. for _, v := range grantList {
  658. grandAdminIdList = append(grandAdminIdList, v.AdminId)
  659. }
  660. adminList, tmpErr := system.GetAdminListByIdList(grandAdminIdList)
  661. if tmpErr != nil {
  662. br.Msg = "获取章节id授权用户列表失败"
  663. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  664. return
  665. }
  666. for _, v := range adminList {
  667. grandAdminList = append(grandAdminList, knowledge.KnowledgeResourceDetailViewAdmin{
  668. AdminId: v.AdminId,
  669. AdminName: v.RealName,
  670. })
  671. }
  672. }
  673. }
  674. // 处理章节id关联品种id列表
  675. {
  676. minClassifyId := resourceInfo.ClassifyIdThird
  677. if minClassifyId <= 0 {
  678. minClassifyId = resourceInfo.ClassifyIdSecond
  679. }
  680. if minClassifyId <= 0 {
  681. minClassifyId = resourceInfo.ClassifyIdFirst
  682. }
  683. if minClassifyId <= 0 {
  684. br.Msg = "分类异常"
  685. br.ErrMsg = "分类异常"
  686. return
  687. }
  688. // 获取分类关联的品种id
  689. classifyPermissionList, tmpErr := knowledge.GetPermission(minClassifyId)
  690. if tmpErr != nil {
  691. br.Msg = "获取分类信息失败"
  692. br.ErrMsg = "获取失败,Err:" + tmpErr.Error()
  693. return
  694. }
  695. if len(classifyPermissionList) > 0 {
  696. permissionIdList := make([]int, 0)
  697. for _, v := range classifyPermissionList {
  698. permissionIdList = append(permissionIdList, v.ChartPermissionId)
  699. }
  700. adminList, tmpErr := knowledge.GetChartPermissionByIdList(permissionIdList)
  701. if tmpErr != nil {
  702. br.Msg = "获取章节id授权用户列表失败"
  703. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  704. return
  705. }
  706. for _, v := range adminList {
  707. permissionList = append(permissionList, knowledge.KnowledgeResourceDetailViewPermission{
  708. PermissionId: v.ChartPermissionId,
  709. PermissionName: v.PermissionName,
  710. })
  711. }
  712. }
  713. }
  714. resp := &knowledge.KnowledgeResourceDetailView{
  715. ReportDetail: resourceInfo,
  716. ChapterList: chapterList,
  717. GrandAdminList: grandAdminList,
  718. PermissionList: permissionList,
  719. }
  720. br.Ret = 200
  721. br.Success = true
  722. br.Msg = "获取成功"
  723. br.Data = resp*/
  724. }
  725. // Delete
  726. // @Title 删除事件接口
  727. // @Description 删除事件
  728. // @Param request body knowledge.DeleteReq true "type json string"
  729. // @Success 200 Ret=200 删除成功
  730. // @router /resource/delete [post]
  731. func (this *ResourceController) Delete() {
  732. br := new(models.BaseResponse).Init()
  733. defer func() {
  734. this.Data["json"] = br
  735. this.ServeJSON()
  736. }()
  737. var req knowledge.DeleteReq
  738. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  739. if err != nil {
  740. br.Msg = "参数解析异常!"
  741. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  742. return
  743. }
  744. if req.KnowledgeResourceId <= 0 {
  745. br.Msg = "参数错误"
  746. br.ErrMsg = "参数错误,事件id不可为空"
  747. return
  748. }
  749. resourceObj := new(knowledge.KnowledgeResource)
  750. item, err := resourceObj.GetById(req.KnowledgeResourceId)
  751. if err != nil {
  752. if utils.IsErrNoRow(err) {
  753. br.Msg = "事件不存在"
  754. br.ErrMsg = "事件不存在"
  755. return
  756. }
  757. }
  758. if item.ResourceType != req.ResourceType {
  759. br.Msg = "事件类型不匹配"
  760. return
  761. }
  762. if err = item.Delete(req.KnowledgeResourceId); err != nil {
  763. br.Msg = "删除失败"
  764. br.ErrMsg = "删除事件失败, Err: " + err.Error()
  765. return
  766. }
  767. br.Ret = 200
  768. br.Success = true
  769. br.Msg = "删除成功"
  770. }
  771. // ImportData
  772. // @Title Excel导入事件
  773. // @Description Excel导入事件
  774. // @Param EntryFile query file true "文件"
  775. // @Success 200 Ret=200 录入成功
  776. // @router /resource/import_add [post]
  777. func (c *ResourceController) ImportData() {
  778. br := new(models.BaseResponse).Init()
  779. defer func() {
  780. c.Data["json"] = br
  781. c.ServeJSON()
  782. }()
  783. sysUser := c.SysUser
  784. if sysUser == nil {
  785. br.Msg = "请重新登录"
  786. return
  787. }
  788. resourceType, _ := c.GetInt("ResourceType")
  789. file, _, err := c.GetFile("EntryFile")
  790. if err != nil {
  791. br.Msg = "获取文件失败"
  792. br.ErrMsg = "获取文件失败,Err:" + err.Error()
  793. return
  794. }
  795. path := "./static/knowledge_import_" + strconv.Itoa(resourceType) + "_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  796. defer file.Close()
  797. err = c.SaveToFile("EntryFile", path)
  798. if err != nil {
  799. br.Msg = "文件保存失败"
  800. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  801. return
  802. }
  803. //if utils.RunMode == "debug" {
  804. defer os.Remove(path)
  805. //}
  806. successCount, failCount, err, errMsg := knowledgeServ.ImportResourceData(path, resourceType, sysUser)
  807. if err != nil {
  808. br.Msg = errMsg
  809. br.ErrMsg = err.Error()
  810. return
  811. }
  812. resp := models.EdbdataImportResp{
  813. SuccessCount: successCount,
  814. FailCount: failCount,
  815. }
  816. if failCount > 0 {
  817. if successCount == 0 {
  818. resp.Status = -1
  819. resp.Msg = "导入失败"
  820. } else {
  821. resp.Status = 1
  822. resp.Msg = "存在部分导入失败"
  823. }
  824. } else {
  825. resp.Status = 0
  826. }
  827. br.Msg = "导入成功"
  828. br.Ret = 200
  829. br.Success = true
  830. br.Data = resp
  831. }
  832. // ImportFailListDownload
  833. // @Title 下载失败列表
  834. // @Description 下载失败列表
  835. // @Success 200 {object} models.EdbdataClassifyResp
  836. // @router /resource/download_fail [get]
  837. func (this *ResourceController) ImportFailListDownload() {
  838. br := new(models.BaseResponse).Init()
  839. defer func() {
  840. this.Data["json"] = br
  841. this.ServeJSON()
  842. }()
  843. sysUser := this.SysUser
  844. if sysUser == nil {
  845. br.Msg = "请重新登录"
  846. return
  847. }
  848. resourceType, _ := this.GetInt("ResourceType")
  849. failObj := new(knowledge.KnowledgeImportFail)
  850. item, err := failObj.GetListBySysUserId(sysUser.AdminId, resourceType)
  851. if err != nil {
  852. br.Msg = "获取数据失败"
  853. br.Msg = "获取数据失败,Err:" + err.Error()
  854. return
  855. }
  856. xlsxFile := xlsx.NewFile()
  857. SheetName := "导入失败数据"
  858. if this.Lang == utils.EnLangVersion {
  859. SheetName = "Import Fail List"
  860. }
  861. sheet, err := xlsxFile.AddSheet(SheetName)
  862. if err != nil {
  863. br.Msg = "获取sheet失败"
  864. br.Msg = "获取sheet失败,Err:" + err.Error()
  865. return
  866. }
  867. if resourceType == knowledge.KnowledgeResourceTypeEvent || resourceType == knowledge.KnowledgeResourceTypePolicy {
  868. headRow := sheet.AddRow()
  869. headRow.AddCell().SetValue("开始日期")
  870. headRow.AddCell().SetValue("开始时间")
  871. headRow.AddCell().SetValue("结束日期")
  872. headRow.AddCell().SetValue("结束时间")
  873. headRow.AddCell().SetValue("标题")
  874. headRow.AddCell().SetValue("正文")
  875. headRow.AddCell().SetValue("来源")
  876. headRow.AddCell().SetValue("一级分类")
  877. headRow.AddCell().SetValue("二级分类")
  878. headRow.AddCell().SetValue("三级分类")
  879. headRow.AddCell().SetValue("标签")
  880. headRow.AddCell().SetValue("备注")
  881. for _, v := range item {
  882. row := sheet.AddRow()
  883. row.AddCell().SetValue(v.StartDate)
  884. row.AddCell().SetValue(v.StartTime)
  885. row.AddCell().SetValue(v.EndDate)
  886. row.AddCell().SetValue(v.EndTime)
  887. row.AddCell().SetValue(v.Title)
  888. row.AddCell().SetValue(v.Content)
  889. row.AddCell().SetValue(v.SourceFrom)
  890. row.AddCell().SetValue(v.ClassifyFirst)
  891. row.AddCell().SetValue(v.ClassifySecond)
  892. row.AddCell().SetValue(v.ClassifyThird)
  893. row.AddCell().SetValue(v.Tag)
  894. row.AddCell().SetValue(v.Remark)
  895. }
  896. } else {
  897. headRow := sheet.AddRow()
  898. headRow.AddCell().SetValue("时间")
  899. headRow.AddCell().SetValue("标题")
  900. headRow.AddCell().SetValue("正文")
  901. headRow.AddCell().SetValue("来源")
  902. headRow.AddCell().SetValue("一级分类")
  903. headRow.AddCell().SetValue("二级分类")
  904. headRow.AddCell().SetValue("三级分类")
  905. headRow.AddCell().SetValue("标签")
  906. headRow.AddCell().SetValue("备注")
  907. for _, v := range item {
  908. row := sheet.AddRow()
  909. row.AddCell().SetValue(v.StartDate)
  910. row.AddCell().SetValue(v.Title)
  911. row.AddCell().SetValue(v.Content)
  912. row.AddCell().SetValue(v.SourceFrom)
  913. row.AddCell().SetValue(v.ClassifyFirst)
  914. row.AddCell().SetValue(v.ClassifySecond)
  915. row.AddCell().SetValue(v.ClassifyThird)
  916. row.AddCell().SetValue(v.Tag)
  917. row.AddCell().SetValue(v.Remark)
  918. }
  919. }
  920. fileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  921. savePath := "./static/" + fileName
  922. err = xlsxFile.Save(savePath)
  923. if err != nil {
  924. br.Msg = "文件保存失败"
  925. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  926. return
  927. }
  928. defer func() {
  929. os.Remove(savePath)
  930. }()
  931. finalFileName := "失败列表.xlsx"
  932. if this.Lang == utils.EnLangVersion {
  933. finalFileName = "Failure List.xlsx"
  934. }
  935. this.Ctx.Output.Download(savePath, finalFileName)
  936. }
  937. // ResourceUpload 上传文件
  938. // @Title 上传文件
  939. // @Description 上传文件
  940. // @Param MenuId query int true "目录ID"
  941. // @Param File query file true "文件"
  942. // @Success 200 Ret=200 操作成功
  943. // @router /resource/upload [post]
  944. func (this *ResourceController) ResourceUpload() {
  945. br := new(models.BaseResponse).Init()
  946. defer func() {
  947. if br.ErrMsg == "" {
  948. br.IsSendEmail = false
  949. }
  950. this.Data["json"] = br
  951. this.ServeJSON()
  952. }()
  953. sysUser := this.SysUser
  954. if sysUser == nil {
  955. br.Msg = "请登录"
  956. br.ErrMsg = "请登录,SysUser Is Empty"
  957. br.Ret = 408
  958. return
  959. }
  960. f, h, e := this.GetFile("File")
  961. if e != nil {
  962. br.Msg = "获取资源信息失败"
  963. br.ErrMsg = "获取资源信息失败, Err:" + e.Error()
  964. return
  965. }
  966. defer func() {
  967. _ = f.Close()
  968. }()
  969. // 不依赖于文件扩展名检查文件格式
  970. fileData, e := ioutil.ReadAll(f)
  971. if e != nil {
  972. br.Msg = "上传失败"
  973. br.ErrMsg = "读取文件失败, Err: " + e.Error()
  974. return
  975. }
  976. ext := path.Ext(h.Filename)
  977. //fmt.Println("ext", ext)
  978. kind, _ := filetype.Match(fileData)
  979. //fmt.Println("kind.Extension", kind.Extension)
  980. if ext != ".pdf" && ext != ".ppt" && ext != ".pptx" && ext != ".docx" && ext != ".doc" && kind.Extension != "pdf" && kind.Extension != "ppt" && kind.Extension != "pptx" && kind.Extension != "docx" && kind.Extension != "doc" {
  981. br.Msg = "文件格式有误"
  982. return
  983. }
  984. uploadDir := utils.STATIC_DIR + "hongze/" + time.Now().Format("20060102")
  985. if e = os.MkdirAll(uploadDir, utils.DIR_MOD); e != nil {
  986. br.Msg = "存储目录创建失败"
  987. br.ErrMsg = "存储目录创建失败, Err:" + e.Error()
  988. return
  989. }
  990. ossFileName := utils.GetRandStringNoSpecialChar(28) + ext
  991. filePath := uploadDir + "/" + ossFileName
  992. if e = this.SaveToFile("File", filePath); e != nil {
  993. br.Msg = "文件保存失败"
  994. br.ErrMsg = "文件保存失败, Err:" + e.Error()
  995. return
  996. }
  997. defer func() {
  998. _ = os.Remove(filePath)
  999. }()
  1000. // 上传到阿里云
  1001. ossDir := utils.RESOURCE_DIR + "knowledge_resource/"
  1002. resourceUrl := ``
  1003. savePath := ossDir + time.Now().Format("200601/20060102/") + ossFileName
  1004. ossClient := services.NewOssClient()
  1005. if ossClient == nil {
  1006. br.Msg = "上传失败"
  1007. br.ErrMsg = "初始化OSS服务失败"
  1008. return
  1009. }
  1010. resourceUrl, e = ossClient.UploadFile(ossFileName, filePath, savePath)
  1011. if e != nil {
  1012. br.Msg = "文件上传失败"
  1013. br.ErrMsg = "文件上传失败,Err:" + e.Error()
  1014. return
  1015. }
  1016. resourceItem := &knowledge.UpdateResourceResp{
  1017. FileUrl: resourceUrl,
  1018. }
  1019. br.Msg = "上传成功"
  1020. br.Ret = 200
  1021. br.Success = true
  1022. br.Data = resourceItem
  1023. }
  1024. // GetSourceFrom
  1025. // @Title 获取所有来源
  1026. // @Description 获取所有来源
  1027. // @Success 200 {object} models.EdbdataClassifyResp
  1028. // @router /resource/source_from [get]
  1029. func (this *ResourceController) GetSourceFrom() {
  1030. br := new(models.BaseResponse).Init()
  1031. defer func() {
  1032. this.Data["json"] = br
  1033. this.ServeJSON()
  1034. }()
  1035. sysUser := this.SysUser
  1036. if sysUser == nil {
  1037. br.Msg = "请重新登录"
  1038. return
  1039. }
  1040. resourceType, _ := this.GetInt("ResourceType")
  1041. keyword := this.GetString("Keyword")
  1042. resourceObj := new(knowledge.KnowledgeResource)
  1043. list, err := resourceObj.GetSourceFrom(keyword, resourceType)
  1044. if err != nil {
  1045. br.Msg = "获取数据失败"
  1046. br.Msg = "获取数据失败,Err:" + err.Error()
  1047. return
  1048. }
  1049. resp := new(knowledge.GetSourceFromResp)
  1050. resp.List = list
  1051. br.Ret = 200
  1052. br.Success = true
  1053. br.Msg = "获取成功"
  1054. br.Data = resp
  1055. }
  1056. // GetAdminList
  1057. // @Title 获取所有创建人
  1058. // @Description 获取所有创建人
  1059. // @Success 200 {object} models.EdbdataClassifyResp
  1060. // @router /resource/admins [get]
  1061. func (this *ResourceController) GetAdminList() {
  1062. br := new(models.BaseResponse).Init()
  1063. defer func() {
  1064. this.Data["json"] = br
  1065. this.ServeJSON()
  1066. }()
  1067. sysUser := this.SysUser
  1068. if sysUser == nil {
  1069. br.Msg = "请重新登录"
  1070. return
  1071. }
  1072. resourceType, _ := this.GetInt("ResourceType")
  1073. keyword := this.GetString("Keyword")
  1074. resourceObj := new(knowledge.KnowledgeResource)
  1075. list, err := resourceObj.GetAdmins(keyword, resourceType)
  1076. if err != nil {
  1077. br.Msg = "获取数据失败"
  1078. br.Msg = "获取数据失败,Err:" + err.Error()
  1079. return
  1080. }
  1081. resp := new(knowledge.GetAdminsResp)
  1082. resp.List = list
  1083. br.Ret = 200
  1084. br.Success = true
  1085. br.Msg = "获取成功"
  1086. br.Data = resp
  1087. }
  1088. // TemplateDownload
  1089. // @Title 下载模板
  1090. // @Description 下载模板
  1091. // @Success 200 {object} models.EdbdataClassifyResp
  1092. // @Param ResourceType query int false "来源:1:模板1;2:模板2"
  1093. // @router /resource/template [get]
  1094. func (this *ResourceController) TemplateDownload() {
  1095. br := new(models.BaseResponse).Init()
  1096. defer func() {
  1097. this.Data["json"] = br
  1098. this.ServeJSON()
  1099. }()
  1100. resourceType, _ := this.GetInt("ResourceType")
  1101. downUrl := ""
  1102. fileName := ""
  1103. switch resourceType {
  1104. case 1:
  1105. downUrl = "./static/template/政策库上传模板.xlsx"
  1106. fileName = "政策库上传模板.xlsx"
  1107. case 2:
  1108. downUrl = "./static/template/观点库上传模板.xlsx"
  1109. fileName = "观点库上传模板.xlsx"
  1110. case 3:
  1111. downUrl = "./static/template/知识库上传模板.xlsx"
  1112. fileName = "知识库上传模板.xlsx"
  1113. default:
  1114. downUrl = "./static/template/事件库上传模板.xlsx"
  1115. fileName = "事件库上传模板.xlsx"
  1116. }
  1117. // 判断文件是否存在
  1118. if _, err := os.Stat(downUrl); os.IsNotExist(err) {
  1119. br.Msg = "文件不存在"
  1120. return
  1121. }
  1122. fmt.Println(downUrl, fileName)
  1123. this.Ctx.Output.Download(downUrl, fileName)
  1124. //this.Ctx.Output.Download("./static/数据导入模板.xlsx", "数据导入模板.xlsx")
  1125. br.Ret = 200
  1126. br.Success = true
  1127. br.Msg = "下载成功"
  1128. }
  1129. // BiDashboardResourceList
  1130. // @Title 获取bi看报中的知识资源列表
  1131. // @Description 获取bi看报中的知识资源列表
  1132. // @Success 200 {object} models.EdbdataClassifyResp
  1133. // @Param ResourceType query int true "资源库类型:0:事件库 1:政策库 2:观点库;3:知识库"
  1134. // @Param BiDashboardDetailId query int true "bi看板详情ID"
  1135. // @Param CurrentIndex query int true "当前页码,从1开始"
  1136. // @Param PageSize query int true "每页显示数量"
  1137. // @router /resource/bi_dashboard/list [get]
  1138. func (this *ResourceController) BiDashboardResourceList() {
  1139. br := new(models.BaseResponse).Init()
  1140. defer func() {
  1141. this.Data["json"] = br
  1142. this.ServeJSON()
  1143. }()
  1144. biDashboardDetailId, _ := this.GetInt("BiDashboardDetailId")
  1145. resourceType, _ := this.GetInt("ResourceType")
  1146. currentIndex, _ := this.GetInt("CurrentIndex")
  1147. pageSize, _ := this.GetInt("PageSize")
  1148. resp, msg, err := knowledgeServ.GetKnowledgeResourceList(biDashboardDetailId, resourceType, currentIndex, pageSize)
  1149. if err != nil {
  1150. if msg == "" {
  1151. msg = "获取数据失败"
  1152. }
  1153. br.Msg = msg
  1154. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1155. return
  1156. }
  1157. br.Ret = 200
  1158. br.Success = true
  1159. br.Msg = "获取成功"
  1160. br.Data = resp
  1161. }
  1162. // BiDashboardResourceAdd
  1163. // @Title 将知识资源库添加到bi看板
  1164. // @Description 将知识资源库添加到bi看板
  1165. // @Param request body knowledge.DeleteReq true "type json string"
  1166. // @Success 200 {object} models.EdbdataClassifyResp
  1167. // @router /resource/bi_dashboard/save [post]
  1168. func (this *ResourceController) BiDashboardResourceAdd() {
  1169. br := new(models.BaseResponse).Init()
  1170. defer func() {
  1171. this.Data["json"] = br
  1172. this.ServeJSON()
  1173. }()
  1174. var req knowledge.BiDashboardResourceAddReq
  1175. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  1176. br.Msg = "参数解析失败"
  1177. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  1178. return
  1179. }
  1180. if len(req.KnowledgeResourceList) == 0 {
  1181. br.Msg = "请选择资源"
  1182. return
  1183. }
  1184. err := utils.Rc.Put(utils.CACHE_KEY_BI_DASHBOARD_PREPARE_RESOURCE+strconv.Itoa(this.SysUser.AdminId), req.KnowledgeResourceList, time.Hour*24)
  1185. if err != nil {
  1186. br.Msg = "添加失败"
  1187. br.ErrMsg = "添加失败,Err:" + err.Error()
  1188. return
  1189. }
  1190. br.Msg = "添加成功"
  1191. br.Ret = 200
  1192. br.Success = true
  1193. }