resource.go 31 KB

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