resource.go 46 KB

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