knowledge_resource.go 29 KB

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