knowledge_resource.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/models"
  5. "eta_gn/eta_api/models/knowledge"
  6. knowledgeServ "eta_gn/eta_api/services/knowledge"
  7. "eta_gn/eta_api/utils"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. "github.com/tealeg/xlsx"
  10. "html"
  11. "os"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 分类
  17. type KnowledgeResourceController struct {
  18. BaseAuthController
  19. }
  20. // ListReport
  21. // @Title 获取事件列表接口
  22. // @Description 获取事件列表
  23. // @Param PageSize query int true "每页数据条数"
  24. // @Param CurrentIndex query int true "当前页页码,从1开始"
  25. // @Param TimeType query string true "筛选的时间类别:publish_time(发布时间),modify_time(更新时间);approve_time(审批时间)"
  26. // @Param StartDate query string true "开始时间"
  27. // @Param EndDate query string true "结束时间"
  28. // @Param Frequency query string true "频度"
  29. // @Param ClassifyIdFirst query int true "一级分类id"
  30. // @Param ClassifyIdSecond query int true "二级分类id"
  31. // @Param ClassifyIdThird query int true "三级分类id"
  32. // @Param State query int true "状态"
  33. // @Param KeyWord query string true "搜索关键词"
  34. // @Param PublishSort query string true "desc:降序,asc 升序(预留)"
  35. // @Param FilterReportType query string true "筛选事件类型,1:公共研报,2:共享研报,3:我的研报"
  36. // @Success 200 {object} knowledge.KnowledgeResourceListResp
  37. // @router /resource/list [get]
  38. func (this *KnowledgeResourceController) List() {
  39. br := new(models.BaseResponse).Init()
  40. defer func() {
  41. this.Data["json"] = br
  42. this.ServeJSON()
  43. }()
  44. pageSize, _ := this.GetInt("PageSize")
  45. currentIndex, _ := this.GetInt("CurrentIndex")
  46. classifyIds := this.GetString("ClassifyIds")
  47. // 添加人
  48. addUserIds, _ := this.GetInt("SysUserIds")
  49. // 标签
  50. tagIds := this.GetString("TagIds")
  51. keyWord := this.GetString("Keyword")
  52. var startSize int
  53. if pageSize <= 0 {
  54. pageSize = utils.PageSize20
  55. }
  56. if currentIndex <= 0 {
  57. currentIndex = 1
  58. }
  59. startSize = utils.StartIndex(currentIndex, pageSize)
  60. var condition string
  61. var pars []interface{}
  62. if keyWord != "" {
  63. condition += ` AND (title LIKE ?) `
  64. pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
  65. }
  66. if classifyIds != "" {
  67. //转成数组,并把类型转成int
  68. classifyIdsArr := strings.Split(classifyIds, ",")
  69. var classifyIdsInt []int
  70. for _, v := range classifyIdsArr {
  71. classifyId, _ := strconv.Atoi(v)
  72. classifyIdsInt = append(classifyIdsInt, classifyId)
  73. }
  74. condition += ` AND classify_id in (?) `
  75. pars = append(pars, classifyIdsInt)
  76. }
  77. if addUserIds > 0 {
  78. // 转成数组,并把类型转成int
  79. addUserIdsArr := strings.Split(strconv.Itoa(addUserIds), ",")
  80. var addUserIdsInt []int
  81. for _, v := range addUserIdsArr {
  82. addUserId, _ := strconv.Atoi(v)
  83. addUserIdsInt = append(addUserIdsInt, addUserId)
  84. }
  85. condition += ` AND admin_id in (?) `
  86. pars = append(pars, addUserIdsInt)
  87. }
  88. if tagIds != "" {
  89. //转成数组,并把类型转成int
  90. tagIdsArr := strings.Split(tagIds, ",")
  91. var tagIdsInt []int
  92. for _, v := range tagIdsArr {
  93. tagId, _ := strconv.Atoi(v)
  94. tagIdsInt = append(tagIdsInt, tagId)
  95. }
  96. condition += ` AND tag_id in (?) `
  97. pars = append(pars, tagIdsInt)
  98. }
  99. var err error
  100. var total int
  101. var list []*knowledge.KnowledgeResourceList
  102. // 共享事件需要连表查询,所以需要单独写
  103. total, err = knowledge.GetKnowledgeResourceListCount(condition, pars)
  104. if err != nil {
  105. br.Msg = "获取失败"
  106. br.ErrMsg = "获取失败,Err:" + err.Error()
  107. return
  108. }
  109. listTmp, err := knowledge.GetKnowledgeResourceList(condition, pars, startSize, pageSize)
  110. if err != nil {
  111. br.Msg = "获取失败"
  112. br.ErrMsg = "获取失败,Err:" + err.Error()
  113. return
  114. }
  115. // 整理分类ID
  116. classifyFullNameMap := make(map[int]string)
  117. classifyIdsArr := make([]int, 0)
  118. for _, v := range listTmp {
  119. classifyIdsArr = append(classifyIdsArr, v.ClassifyId)
  120. }
  121. // 获取分类列表
  122. classifyList, err := knowledge.GetFullClassifyListByIdList(classifyIdsArr)
  123. if err != nil {
  124. br.Msg = "获取失败"
  125. br.ErrMsg = "获取失败,Err:" + err.Error()
  126. return
  127. }
  128. for _, v := range classifyList {
  129. name := v.ClassifyName
  130. if v.ParentName != "" {
  131. name = v.ParentName + "/" + name
  132. }
  133. if v.RootName != "" {
  134. name = v.RootName + "/" + name
  135. }
  136. classifyFullNameMap[v.ClassifyId] = name
  137. }
  138. /* // 整理标签ID
  139. tagNameMap := make(map[int]string)
  140. tagIdsArr := make([]int, 0)
  141. for _, v := range listTmp {
  142. tagIdsArr = append(tagIdsArr, v.TagId)
  143. }
  144. // 获取标签列表
  145. tagList, err := knowledge.GetTagListByIdList(tagIdsArr)
  146. if err != nil {
  147. br.Msg = "获取失败"
  148. br.ErrMsg = "获取失败,Err:" + err.Error()
  149. }*/
  150. for _, v := range listTmp {
  151. var startTime, endTime string
  152. if !v.StartTime.IsZero() {
  153. startTime = v.StartTime.In(time.Local).Format(utils.FormatDateTime)
  154. }
  155. if !v.EndTime.IsZero() {
  156. endTime = v.EndTime.In(time.Local).Format(utils.FormatDateTime)
  157. }
  158. modifyTime := v.ModifyTime.In(time.Local).Format(utils.FormatDateTime)
  159. createTime := v.CreateTime.In(time.Local).Format(utils.FormatDateTime)
  160. tmp := &knowledge.KnowledgeResourceList{
  161. KnowledgeResourceId: v.KnowledgeResourceId,
  162. ResourceType: v.ResourceType,
  163. ClassifyId: v.ClassifyId,
  164. Title: v.Title,
  165. CreateTime: createTime,
  166. ModifyTime: modifyTime,
  167. State: v.State,
  168. ResourceCode: v.ResourceCode,
  169. AdminId: v.AdminId,
  170. AdminRealName: v.AdminRealName,
  171. SourceFrom: v.SourceFrom,
  172. TagId: v.TagId,
  173. StartTime: startTime,
  174. EndTime: endTime,
  175. }
  176. // todo 编辑状态
  177. /*markStatus, err := services.UpdateReportEditMark(item.Id, 0, this.SysUser.AdminId, 2, this.SysUser.RealName, this.Lang)
  178. if err != nil {
  179. br.Msg = "查询标记状态失败"
  180. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  181. return
  182. }
  183. if markStatus.Status == 0 {
  184. item.CanEdit = true
  185. } else {
  186. item.Editor = markStatus.Editor
  187. }*/
  188. classifyName, ok := classifyFullNameMap[tmp.ClassifyId]
  189. if ok {
  190. tmp.ClassifyFullName = classifyName
  191. }
  192. /*tagName, ok := tagNameMap[v.TagId]
  193. if ok {
  194. v.TagName = tagName
  195. */
  196. list = append(list, tmp)
  197. }
  198. page := paging.GetPaging(currentIndex, pageSize, total)
  199. resp := new(knowledge.KnowledgeResourceListResp)
  200. resp.Paging = page
  201. resp.List = list
  202. br.Ret = 200
  203. br.Success = true
  204. br.Msg = "获取成功"
  205. br.Data = resp
  206. }
  207. // Add
  208. // @Title 新增事件接口
  209. // @Description 新增事件(区分事件类型)
  210. // @Param request body knowledge.AddReq true "type json string"
  211. // @Success 200 {object} knowledge.AddResp
  212. // @router /resource/add [post]
  213. func (this *KnowledgeResourceController) Add() {
  214. br := new(models.BaseResponse).Init()
  215. defer func() {
  216. this.Data["json"] = br
  217. this.ServeJSON()
  218. }()
  219. sysUser := this.SysUser
  220. if sysUser == nil {
  221. br.Msg = "请登录"
  222. br.ErrMsg = "请登录,SysUser Is Empty"
  223. br.Ret = 408
  224. return
  225. }
  226. var req knowledge.AddReq
  227. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  228. if err != nil {
  229. br.Msg = "参数解析异常!"
  230. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  231. return
  232. }
  233. if req.Title == `` {
  234. br.Msg = "标题不能为空"
  235. br.ErrMsg = "标题不能为空"
  236. br.IsSendEmail = false
  237. return
  238. }
  239. if req.ClassifyId <= 0 {
  240. br.Msg = "分类必填"
  241. br.ErrMsg = "分类必填"
  242. br.IsSendEmail = false
  243. return
  244. }
  245. if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
  246. if req.StartTime == "" {
  247. br.Msg = "开始时间必填"
  248. br.ErrMsg = "开始时间必填"
  249. return
  250. }
  251. }
  252. item, err, errMsg := knowledgeServ.AddResource(&req, sysUser)
  253. if err != nil {
  254. br.Msg = "保存失败"
  255. if errMsg != "" {
  256. br.Msg = errMsg
  257. }
  258. br.ErrMsg = "保存失败,Err:" + err.Error()
  259. return
  260. }
  261. resp := new(knowledge.AddResp)
  262. resp.KnowledgeResourceId = item.KnowledgeResourceId
  263. resp.ResourceCode = item.ResourceCode
  264. br.Ret = 200
  265. br.Success = true
  266. br.Msg = "保存成功"
  267. br.Data = resp
  268. }
  269. // Edit
  270. // @Title 编辑事件基础信息接口
  271. // @Description 编辑事件基础信息(不区分事件类型)
  272. // @Param request body knowledge.EditReq true "type json string"
  273. // @Success 200 {object} knowledge.EditResp
  274. // @router /resource/edit [post]
  275. func (this *KnowledgeResourceController) Edit() {
  276. br := new(models.BaseResponse).Init()
  277. defer func() {
  278. this.Data["json"] = br
  279. this.ServeJSON()
  280. }()
  281. sysUser := this.SysUser
  282. if sysUser == nil {
  283. br.Msg = "请登录"
  284. br.ErrMsg = "请登录,SysUser Is Empty"
  285. br.Ret = 408
  286. return
  287. }
  288. var req knowledge.EditReq
  289. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  290. if err != nil {
  291. br.Msg = "参数解析异常!"
  292. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  293. return
  294. }
  295. if req.KnowledgeResourceId <= 0 {
  296. br.Msg = "请选择事件"
  297. br.ErrMsg = "请选择事件"
  298. return
  299. }
  300. if req.Title == `` {
  301. br.Msg = "标题不能为空"
  302. br.ErrMsg = "标题不能为空"
  303. br.IsSendEmail = false
  304. return
  305. }
  306. if req.ClassifyId <= 0 {
  307. br.Msg = "分类必填"
  308. br.ErrMsg = "分类必填"
  309. br.IsSendEmail = false
  310. return
  311. }
  312. if req.ResourceType == knowledge.KnowledgeResourceTypeEvent || req.ResourceType == knowledge.KnowledgeResourceTypePolicy {
  313. if req.StartTime == "" {
  314. br.Msg = "开始时间必填"
  315. br.ErrMsg = "开始时间必填"
  316. return
  317. }
  318. }
  319. // todo 更新标记key
  320. /*markStatus, err := services.UpdateReportEditMark(int(req.KnowledgeResourceId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
  321. if err != nil {
  322. br.Msg = err.Error()
  323. return
  324. }
  325. if markStatus.Status == 1 {
  326. br.Msg = markStatus.Msg
  327. //br.Ret = 202 //202 服务器已接受请求,但尚未处理。
  328. return
  329. }*/
  330. resourceObj := new(knowledge.KnowledgeResource)
  331. resourceInfo, e := resourceObj.GetById(int(req.KnowledgeResourceId))
  332. if e != nil {
  333. if utils.IsErrNoRow(e) {
  334. br.Msg = "事件已被删除, 请刷新页面"
  335. return
  336. }
  337. br.Msg = "操作失败"
  338. br.ErrMsg = "获取事件失败, Err: " + e.Error()
  339. return
  340. }
  341. // 编辑事件信息
  342. err, errMsg := knowledgeServ.EditResource(resourceInfo, req, sysUser)
  343. if err != nil {
  344. br.Msg = "保存失败"
  345. if errMsg != "" {
  346. br.Msg = errMsg
  347. }
  348. br.ErrMsg = "保存失败,Err:" + err.Error()
  349. return
  350. }
  351. resp := new(knowledge.EditResp)
  352. resp.KnowledgeResourceId = req.KnowledgeResourceId
  353. resp.ResourceCode = resourceInfo.ResourceCode
  354. br.Ret = 200
  355. br.Success = true
  356. br.Msg = "保存成功"
  357. br.Data = resp
  358. }
  359. // Detail
  360. // @Title 获取事件详情接口
  361. // @Description 获取事件详情
  362. // @Param request body knowledge.KnowledgeResourceDetailReq true "type json string"
  363. // @Success 200 {object} knowledge.KnowledgeResource
  364. // @router /resource/detail [get]
  365. func (this *KnowledgeResourceController) Detail() {
  366. br := new(models.BaseResponse).Init()
  367. defer func() {
  368. this.Data["json"] = br
  369. this.ServeJSON()
  370. }()
  371. /*var req knowledge.KnowledgeResourceDetailReq
  372. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  373. if err != nil {
  374. br.Msg = "参数解析异常!"
  375. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  376. return
  377. }
  378. if req.KnowledgeResourceId <= 0 {
  379. br.Msg = "参数错误"
  380. return
  381. }*/
  382. knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
  383. if err != nil {
  384. br.Msg = "获取参数失败!"
  385. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  386. return
  387. }
  388. if knowledgeResourceId <= 0 {
  389. br.Msg = "参数错误"
  390. return
  391. }
  392. resourceObj := new(knowledge.KnowledgeResource)
  393. item, err := resourceObj.GetById(knowledgeResourceId)
  394. if err != nil {
  395. if utils.IsErrNoRow(err) {
  396. br.Msg = "事件已被删除"
  397. return
  398. }
  399. br.Msg = "获取失败"
  400. br.ErrMsg = "获取失败,Err:" + err.Error()
  401. return
  402. }
  403. item.Content = html.UnescapeString(item.Content)
  404. resp := &knowledge.KnowledgeResourceDetailView{
  405. KnowledgeResource: item,
  406. }
  407. br.Ret = 200
  408. br.Success = true
  409. br.Msg = "获取成功"
  410. br.Data = resp
  411. }
  412. // SaveReportContent
  413. // @Title 保存草稿
  414. // @Description 保存草稿
  415. // @Param request body knowledge.SaveReportContent true "type json string"
  416. // @Success 200 {object} knowledge.KnowledgeResourceAuthorResp
  417. // @router /resource/saveContent [post]
  418. func (this *KnowledgeResourceController) SaveReportContent() {
  419. br := new(models.BaseResponse).Init()
  420. br.IsSendEmail = false
  421. defer func() {
  422. this.Data["json"] = br
  423. this.ServeJSON()
  424. }()
  425. sysUser := this.SysUser
  426. if sysUser == nil {
  427. br.Msg = "请登录"
  428. br.ErrMsg = "请登录,SysUser Is Empty"
  429. br.Ret = 408
  430. return
  431. }
  432. var req knowledge.SaveReportContent
  433. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  434. if err != nil {
  435. br.Msg = "参数解析异常!"
  436. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  437. return
  438. }
  439. knowledgeResourceId := req.KnowledgeResourceId
  440. //noChangeFlag := req.NoChange
  441. if knowledgeResourceId <= 0 {
  442. resp := new(knowledge.SaveReportContentResp)
  443. resp.KnowledgeResourceId = knowledgeResourceId
  444. br.Ret = 200
  445. br.Success = true
  446. br.Msg = "保存成功"
  447. br.Data = resp
  448. return
  449. }
  450. // 获取事件详情
  451. /*resourceInfo, _ := knowledge.GetReportByknowledgeResourceId(req.KnowledgeResourceId)
  452. if resourceInfo != nil && resourceInfo.State == 2 {
  453. br.Msg = "该事件已发布,不允许编辑"
  454. br.ErrMsg = "该事件已发布,不允许编辑"
  455. br.IsSendEmail = false
  456. return
  457. }
  458. // 标记更新中
  459. {
  460. markStatus, err := services.UpdateReportEditMark(req.KnowledgeResourceId, 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
  461. if err != nil {
  462. br.Msg = err.Error()
  463. return
  464. }
  465. if markStatus.Status == 1 {
  466. br.Msg = markStatus.Msg
  467. return
  468. }
  469. }
  470. // 内容有过修改的话,那么逻辑处理
  471. if noChangeFlag != 1 {
  472. content := req.Content
  473. if content == "" {
  474. content = this.GetString("Content")
  475. }
  476. if content != "" {
  477. e := utils.ContentXssCheck(req.Content)
  478. if e != nil {
  479. br.Msg = "存在非法标签"
  480. br.ErrMsg = "存在非法标签, Err: " + e.Error()
  481. return
  482. }
  483. contentClean, e := services.FilterReportContentBr(req.Content)
  484. if e != nil {
  485. br.Msg = "内容去除前后空格失败"
  486. br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  487. return
  488. }
  489. content = contentClean
  490. contentSub, err := services.GetReportContentSub(content)
  491. if err != nil {
  492. go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
  493. //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  494. }
  495. resourceInfo.Content = html.EscapeString(content)
  496. resourceInfo.ContentSub = html.EscapeString(contentSub)
  497. resourceInfo.ContentStruct = html.EscapeString(req.ContentStruct)
  498. resourceInfo.HeadImg = req.HeadImg
  499. resourceInfo.EndImg = req.EndImg
  500. resourceInfo.CanvasColor = req.CanvasColor
  501. resourceInfo.HeadResourceId = req.HeadResourceId
  502. resourceInfo.EndResourceId = req.EndResourceId
  503. resourceInfo.ModifyTime = time.Now()
  504. resourceInfo.ContentModifyTime = time.Now()
  505. updateCols := []string{"Content", "ContentSub", "ContentStruct", "HeadImg", "EndImg", "CanvasColor", "HeadResourceId", "EndResourceId", "ModifyTime", "ContentModifyTime"}
  506. err = resourceInfo.UpdateReport(updateCols)
  507. if err != nil {
  508. br.Msg = "保存失败"
  509. br.ErrMsg = "保存失败,Err:" + err.Error()
  510. return
  511. }
  512. go knowledge.AddReportSaveLog(knowledgeResourceId, this.SysUser.AdminId, resourceInfo.Content, resourceInfo.ContentSub, resourceInfo.ContentStruct, resourceInfo.CanvasColor, this.SysUser.AdminName, resourceInfo.HeadResourceId, resourceInfo.EndResourceId)
  513. }
  514. }
  515. */
  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. }
  523. // BaseDetail
  524. // @Title 获取事件基础信息详情接口
  525. // @Description 获取事件基础信息详情接口
  526. // @Param request body knowledge.KnowledgeResourceDetailReq true "type json string"
  527. // @Success 200 {object} knowledge.KnowledgeResource
  528. // @router /resource/detail/base [get]
  529. func (this *KnowledgeResourceController) BaseDetail() {
  530. br := new(models.BaseResponse).Init()
  531. defer func() {
  532. this.Data["json"] = br
  533. this.ServeJSON()
  534. }()
  535. /*var req knowledge.KnowledgeResourceDetailReq
  536. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  537. if err != nil {
  538. br.Msg = "参数解析异常!"
  539. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  540. return
  541. }
  542. if req.KnowledgeResourceId <= 0 {
  543. br.Msg = "参数错误"
  544. return
  545. }*/
  546. /*knowledgeResourceId, err := this.GetInt("KnowledgeResourceId")
  547. if err != nil {
  548. br.Msg = "获取参数失败!"
  549. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  550. return
  551. }
  552. if knowledgeResourceId <= 0 {
  553. br.Msg = "参数错误"
  554. return
  555. }
  556. resourceInfo, err := knowledge.GetReportById(knowledgeResourceId)
  557. if err != nil {
  558. if utils.IsErrNoRow(err) {
  559. br.Msg = "事件已被删除"
  560. return
  561. }
  562. br.Msg = "获取失败"
  563. br.ErrMsg = "获取失败,Err:" + err.Error()
  564. return
  565. }
  566. // 基础信息就不获取章节信息了
  567. chapterList := make([]*knowledge.KnowledgeResourceChapter, 0)
  568. resourceInfo.Content = html.UnescapeString(resourceInfo.Content)
  569. resourceInfo.ContentSub = html.UnescapeString(resourceInfo.ContentSub)
  570. grandAdminList := make([]knowledge.KnowledgeResourceDetailViewAdmin, 0)
  571. permissionList := make([]knowledge.KnowledgeResourceDetailViewPermission, 0)
  572. // 处理事件授权用户列表
  573. {
  574. obj := report.ReportGrant{}
  575. grantList, tmpErr := obj.GetGrantListById(knowledgeResourceId)
  576. if tmpErr != nil {
  577. br.Msg = "获取章节id授权用户列表失败"
  578. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  579. return
  580. }
  581. if len(grantList) > 0 {
  582. grandAdminIdList := make([]int, 0)
  583. for _, v := range grantList {
  584. grandAdminIdList = append(grandAdminIdList, v.AdminId)
  585. }
  586. adminList, tmpErr := system.GetAdminListByIdList(grandAdminIdList)
  587. if tmpErr != nil {
  588. br.Msg = "获取章节id授权用户列表失败"
  589. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  590. return
  591. }
  592. for _, v := range adminList {
  593. grandAdminList = append(grandAdminList, knowledge.KnowledgeResourceDetailViewAdmin{
  594. AdminId: v.AdminId,
  595. AdminName: v.RealName,
  596. })
  597. }
  598. }
  599. }
  600. // 处理章节id关联品种id列表
  601. {
  602. minClassifyId := resourceInfo.ClassifyIdThird
  603. if minClassifyId <= 0 {
  604. minClassifyId = resourceInfo.ClassifyIdSecond
  605. }
  606. if minClassifyId <= 0 {
  607. minClassifyId = resourceInfo.ClassifyIdFirst
  608. }
  609. if minClassifyId <= 0 {
  610. br.Msg = "分类异常"
  611. br.ErrMsg = "分类异常"
  612. return
  613. }
  614. // 获取分类关联的品种id
  615. classifyPermissionList, tmpErr := knowledge.GetPermission(minClassifyId)
  616. if tmpErr != nil {
  617. br.Msg = "获取分类信息失败"
  618. br.ErrMsg = "获取失败,Err:" + tmpErr.Error()
  619. return
  620. }
  621. if len(classifyPermissionList) > 0 {
  622. permissionIdList := make([]int, 0)
  623. for _, v := range classifyPermissionList {
  624. permissionIdList = append(permissionIdList, v.ChartPermissionId)
  625. }
  626. adminList, tmpErr := knowledge.GetChartPermissionByIdList(permissionIdList)
  627. if tmpErr != nil {
  628. br.Msg = "获取章节id授权用户列表失败"
  629. br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
  630. return
  631. }
  632. for _, v := range adminList {
  633. permissionList = append(permissionList, knowledge.KnowledgeResourceDetailViewPermission{
  634. PermissionId: v.ChartPermissionId,
  635. PermissionName: v.PermissionName,
  636. })
  637. }
  638. }
  639. }
  640. resp := &knowledge.KnowledgeResourceDetailView{
  641. ReportDetail: resourceInfo,
  642. ChapterList: chapterList,
  643. GrandAdminList: grandAdminList,
  644. PermissionList: permissionList,
  645. }
  646. br.Ret = 200
  647. br.Success = true
  648. br.Msg = "获取成功"
  649. br.Data = resp*/
  650. }
  651. // Delete
  652. // @Title 删除事件接口
  653. // @Description 删除事件
  654. // @Param request body knowledge.DeleteReq true "type json string"
  655. // @Success 200 Ret=200 删除成功
  656. // @router /resource/delete [post]
  657. func (this *KnowledgeResourceController) Delete() {
  658. br := new(models.BaseResponse).Init()
  659. defer func() {
  660. this.Data["json"] = br
  661. this.ServeJSON()
  662. }()
  663. var req knowledge.DeleteReq
  664. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  665. if err != nil {
  666. br.Msg = "参数解析异常!"
  667. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  668. return
  669. }
  670. if req.KnowledgeResourceId <= 0 {
  671. br.Msg = "参数错误"
  672. br.ErrMsg = "参数错误,事件id不可为空"
  673. return
  674. }
  675. resourceObj := new(knowledge.KnowledgeResource)
  676. if err = resourceObj.Delete(req.KnowledgeResourceId); err != nil {
  677. br.Msg = "删除失败"
  678. br.ErrMsg = "删除事件失败, Err: " + err.Error()
  679. return
  680. }
  681. br.Ret = 200
  682. br.Success = true
  683. br.Msg = "删除成功"
  684. }
  685. // ImportData
  686. // @Title Excel导入事件
  687. // @Description Excel导入事件
  688. // @Param EntryFile query file true "文件"
  689. // @Success 200 Ret=200 录入成功
  690. // @router /resource/import_add [post]
  691. func (c *KnowledgeResourceController) ImportData() {
  692. br := new(models.BaseResponse).Init()
  693. defer func() {
  694. c.Data["json"] = br
  695. c.ServeJSON()
  696. }()
  697. sysUser := c.SysUser
  698. if sysUser == nil {
  699. br.Msg = "请重新登录"
  700. return
  701. }
  702. resourceType, _ := c.GetInt("ResourceType")
  703. file, _, err := c.GetFile("EntryFile")
  704. if err != nil {
  705. br.Msg = "获取文件失败"
  706. br.ErrMsg = "获取文件失败,Err:" + err.Error()
  707. return
  708. }
  709. path := "./static/知识资源导入_" + strconv.Itoa(resourceType) + "_" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  710. defer file.Close()
  711. err = c.SaveToFile("EntryFile", path)
  712. if err != nil {
  713. br.Msg = "文件保存失败"
  714. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  715. return
  716. }
  717. if utils.RunMode == "debug" {
  718. defer os.Remove(path)
  719. }
  720. successCount, failCount, err, errMsg := knowledgeServ.ImportResourceData(path, resourceType, sysUser)
  721. if err != nil {
  722. br.Msg = errMsg
  723. br.ErrMsg = err.Error()
  724. return
  725. }
  726. resp := models.EdbdataImportResp{
  727. SuccessCount: successCount,
  728. FailCount: failCount,
  729. }
  730. if failCount > 0 {
  731. if successCount == 0 {
  732. resp.Status = -1
  733. resp.Msg = "导入失败"
  734. } else {
  735. resp.Status = 1
  736. resp.Msg = "存在部分导入失败"
  737. }
  738. } else {
  739. resp.Status = 0
  740. }
  741. br.Msg = "导入成功"
  742. br.Ret = 200
  743. br.Success = true
  744. br.Data = resp
  745. }
  746. // ImportFailListDownload
  747. // @Title 下载失败列表
  748. // @Description 下载失败列表
  749. // @Success 200 {object} models.EdbdataClassifyResp
  750. // @router /resource/download_fail [get]
  751. func (this *KnowledgeResourceController) ImportFailListDownload() {
  752. br := new(models.BaseResponse).Init()
  753. defer func() {
  754. this.Data["json"] = br
  755. this.ServeJSON()
  756. }()
  757. sysUser := this.SysUser
  758. if sysUser == nil {
  759. br.Msg = "请重新登录"
  760. return
  761. }
  762. resourceType, _ := this.GetInt("ResourceType")
  763. failObj := new(knowledge.KnowledgeImportFail)
  764. item, err := failObj.GetListBySysUserId(sysUser.AdminId, resourceType)
  765. if err != nil {
  766. br.Msg = "获取数据失败"
  767. br.Msg = "获取数据失败,Err:" + err.Error()
  768. return
  769. }
  770. xlsxFile := xlsx.NewFile()
  771. SheetName := "导入失败数据"
  772. if this.Lang == utils.EnLangVersion {
  773. SheetName = "Import Fail List"
  774. }
  775. sheet, err := xlsxFile.AddSheet(SheetName)
  776. headRow := sheet.AddRow()
  777. headRow.AddCell().SetValue("开始日期")
  778. headRow.AddCell().SetValue("开始时间")
  779. headRow.AddCell().SetValue("结束日期")
  780. headRow.AddCell().SetValue("结束时间")
  781. headRow.AddCell().SetValue("标题")
  782. headRow.AddCell().SetValue("正文")
  783. headRow.AddCell().SetValue("来源")
  784. headRow.AddCell().SetValue("一级分类")
  785. headRow.AddCell().SetValue("二级分类")
  786. headRow.AddCell().SetValue("三级分类")
  787. headRow.AddCell().SetValue("标签")
  788. headRow.AddCell().SetValue("备注")
  789. for _, v := range item {
  790. row := sheet.AddRow()
  791. row.AddCell().SetValue(v.StartDate)
  792. row.AddCell().SetValue(v.StartTime)
  793. row.AddCell().SetValue(v.EndDate)
  794. row.AddCell().SetValue(v.EndTime)
  795. row.AddCell().SetValue(v.Title)
  796. row.AddCell().SetValue(v.Content)
  797. row.AddCell().SetValue(v.SourceFrom)
  798. row.AddCell().SetValue(v.ClassifyFirst)
  799. row.AddCell().SetValue(v.ClassifySecond)
  800. row.AddCell().SetValue(v.ClassifyThird)
  801. row.AddCell().SetValue(v.Tag)
  802. row.AddCell().SetValue(v.Remark)
  803. }
  804. fileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  805. savePath := "./static/" + fileName
  806. err = xlsxFile.Save(savePath)
  807. if err != nil {
  808. br.Msg = "文件保存失败"
  809. br.ErrMsg = "文件保存失败,Err:" + err.Error()
  810. return
  811. }
  812. defer func() {
  813. os.Remove(savePath)
  814. }()
  815. finalFileName := "失败列表.xlsx"
  816. if this.Lang == utils.EnLangVersion {
  817. finalFileName = "Failure List.xlsx"
  818. }
  819. this.Ctx.Output.Download(savePath, finalFileName)
  820. }