summary_manage.go 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "github.com/tealeg/xlsx"
  7. "hongze/hz_crm_api/controllers"
  8. "hongze/hz_crm_api/models"
  9. "hongze/hz_crm_api/models/cygx"
  10. "hongze/hz_crm_api/models/system"
  11. "hongze/hz_crm_api/services"
  12. cygxService "hongze/hz_crm_api/services/cygx"
  13. "hongze/hz_crm_api/services/elastic"
  14. "hongze/hz_crm_api/utils"
  15. "os"
  16. "path/filepath"
  17. "strconv"
  18. "strings"
  19. "time"
  20. )
  21. // 纪要管理
  22. type SummaryManage struct {
  23. controllers.BaseAuthController
  24. }
  25. // @Title 文章内容的保存与发布
  26. // @Description 文章内容的保存与发布接口
  27. // @Param request body cygx.SummaryManageAddRep true "type json string"
  28. // @Success 200 操作成功
  29. // @router /summaryManage/PreserveAndPublish [post]
  30. func (this *SummaryManage) PreserveAndPublish() {
  31. br := new(models.BaseResponse).Init()
  32. defer func() {
  33. this.Data["json"] = br
  34. this.ServeJSON()
  35. }()
  36. AdminUser := this.SysUser
  37. if AdminUser == nil {
  38. br.Msg = "请登录"
  39. br.ErrMsg = "请登录,用户信息为空"
  40. br.Ret = 408
  41. return
  42. }
  43. var req cygx.SummaryManageAddRep
  44. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  45. if err != nil {
  46. br.Msg = "参数解析异常!"
  47. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  48. return
  49. }
  50. if req.Title == "" {
  51. br.Msg = "标题不可为空"
  52. br.ErrMsg = "标题不可为空"
  53. return
  54. }
  55. if req.Abstract == "" {
  56. br.Msg = "摘要不可为空"
  57. br.ErrMsg = "摘要不可为空"
  58. return
  59. }
  60. if req.PublishDate == "" {
  61. br.Msg = "发布时间不可为空"
  62. return
  63. }
  64. var articleIdNew int //最新的文章id
  65. var haveResearch bool
  66. var permissionName string
  67. industryName := req.IndustryName
  68. subjectName := req.SubjectName
  69. publishDate := req.PublishDate
  70. reportLink := req.ReportLink
  71. chartPermissionIds := "31" //31研选
  72. industrialManagementIds := req.IndustrialManagementIds
  73. industrialSubjectIds := req.IndustrialSubjectIds
  74. articleId := req.ArticleId
  75. articleTypeId := req.ArticleTypeId
  76. // 产业ID校验
  77. industryIds := make([]int, 0)
  78. industrialManagementIdList := strings.Split(industrialManagementIds, ",")
  79. for _, v := range industrialManagementIdList {
  80. i, err := strconv.Atoi(v)
  81. if err != nil {
  82. br.Msg = "参数解析异常!"
  83. br.ErrMsg = "产业ID不规范,Err:" + err.Error() + industrialManagementIds
  84. return
  85. }
  86. industryIds = append(industryIds, i)
  87. }
  88. if industrialSubjectIds != "" {
  89. industrialSubjectIdList := strings.Split(industrialSubjectIds, ",")
  90. for _, v := range industrialSubjectIdList {
  91. _, err := strconv.Atoi(v)
  92. if err != nil {
  93. br.Msg = "参数解析异常!"
  94. br.ErrMsg = "标的ID不规范,Err:" + err.Error() + industrialSubjectIds
  95. return
  96. }
  97. }
  98. }
  99. chartPermissionIdsList := strings.Split(chartPermissionIds, ",")
  100. for _, v := range chartPermissionIdsList {
  101. chartPermissionId, err := strconv.Atoi(v)
  102. if err != nil {
  103. br.Msg = "发布失败"
  104. br.ErrMsg = "发布失败,Err:" + err.Error()
  105. return
  106. }
  107. charInfo, errCategory := cygx.GetCategoryInfoById(chartPermissionId)
  108. if errCategory != nil {
  109. br.Msg = "获取品种信息失败"
  110. br.ErrMsg = "获取品种信息失败,Err:" + errCategory.Error()
  111. return
  112. }
  113. if strings.Contains(charInfo.PermissionName, "研选") {
  114. haveResearch = true
  115. }
  116. permissionName += charInfo.PermissionName + ","
  117. }
  118. permissionName = strings.TrimRight(permissionName, ",")
  119. if articleId == 0 {
  120. maxArticleIdArticleInfo, errMax := cygx.GetMaxArticleIdInfo()
  121. if errMax != nil {
  122. br.Msg = "发布失败"
  123. br.ErrMsg = "发布失败,Err:" + errMax.Error()
  124. return
  125. }
  126. if maxArticleIdArticleInfo.ArticleId < utils.SummaryArticleId {
  127. articleIdNew = utils.SummaryArticleId
  128. } else {
  129. articleIdNew = maxArticleIdArticleInfo.ArticleId + 1
  130. }
  131. }
  132. //处理文章类型信息
  133. articleTypeInfo, err := cygx.GetCygxArticleTypeDetailById(articleTypeId)
  134. if err != nil {
  135. br.Msg = "请选择报告类型"
  136. br.ErrMsg = "获取报告类型信息失败,Err:" + err.Error()
  137. return
  138. }
  139. //处理作者内容的格式信息
  140. department := req.SellerAndMobile
  141. itemDepartment := new(cygx.CygxArticleDepartment)
  142. if !strings.Contains(department, "-") {
  143. br.Msg = "作者格式错误"
  144. return
  145. }
  146. slice := strings.Split(department, "-")
  147. if len(slice) < 2 {
  148. br.Msg = "作者格式错误"
  149. return
  150. }
  151. strnum := strings.Index(department, "-")
  152. itemDepartment.NickName = department[0:strnum]
  153. itemDepartment.CreateTime = time.Now()
  154. itemDepartment.Remark = department[strnum+1:]
  155. itemDepartment.Content = req.SellerAndMobile
  156. remarks := itemDepartment.Remark
  157. remarks = strings.Replace(remarks, ",", "", -1)
  158. remarks = strings.Replace(remarks, ",", "", -1)
  159. remarks = strings.Replace(remarks, " ", "", -1)
  160. itemDepartment.Remarks = remarks
  161. total, _ := cygx.GetArticleDepartmentCount(itemDepartment.NickName, itemDepartment.Remarks)
  162. var newDepartmentId int64
  163. if total == 0 {
  164. detail, err := cygx.GetCygxConfigDetailByCode("department_img_url")
  165. if err != nil {
  166. br.Msg = "获取失败"
  167. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  168. return
  169. }
  170. sliceDepart := strings.Split(detail.ConfigValue, "{|}")
  171. totalDepart, err := cygx.GetArticleDepartmentCountAll()
  172. if err != nil {
  173. br.Msg = "获取失败"
  174. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  175. return
  176. }
  177. itemDepartment.ImgUrl = sliceDepart[totalDepart%10]
  178. //避免代码冗余,放弃插入事务处理
  179. newDepartmentId, err = cygx.AddCygxArticleDepartment(itemDepartment)
  180. if err != nil {
  181. br.Msg = "发布失败"
  182. br.ErrMsg = "发布失败作者信息查询错误,Err:" + err.Error()
  183. return
  184. }
  185. } else {
  186. departmentDetail, err := cygx.GetArticleDepartmentDateil(itemDepartment.NickName, itemDepartment.Remarks)
  187. if err != nil {
  188. br.Msg = "发布失败"
  189. br.ErrMsg = "发布失败作者信息查询错误,Err:" + err.Error()
  190. return
  191. }
  192. newDepartmentId = int64(departmentDetail.DepartmentId)
  193. }
  194. expertNumStr, expertContentStr, interviewDateStr, fileLink := cygx.BodyAnalysis(req.Body)
  195. item := new(cygx.CygxArticle)
  196. item.AdminId = AdminUser.AdminId
  197. item.AdminName = AdminUser.RealName
  198. item.Title = req.Title
  199. item.Body = req.Body
  200. item.BodyText, _ = cygxService.GetReportContentTextSubNew(req.Body)
  201. item.Abstract = req.Abstract
  202. item.CategoryName = permissionName
  203. item.ArticleId = articleId
  204. item.CreateDate = time.Now()
  205. item.LastUpdatedTime = time.Now()
  206. if articleTypeInfo.IsSendEs == 1 {
  207. item.IsSummary = 1
  208. } else {
  209. item.IsReport = 1
  210. }
  211. item.Source = 1
  212. item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdNew))
  213. item.UpdateFrequency = "unknow"
  214. item.SellerAndMobile = req.SellerAndMobile
  215. item.ExpertBackground = expertContentStr
  216. item.ExpertNumber = expertNumStr
  217. item.InterviewDate = interviewDateStr
  218. item.FileLink = fileLink
  219. item.ChartPermissionIds = chartPermissionIds
  220. item.DepartmentId = int(newDepartmentId)
  221. item.ArticleTypeId = articleTypeId
  222. item.ArticleTypeName = articleTypeInfo.ArticleTypeName
  223. publishDateSlice := strings.Split(publishDate, " ") //过滤前端传过来的时分秒
  224. item.PublishDate = utils.StrTimeToTime(publishDateSlice[0] + " 00:00:00")
  225. item.ReportLink = reportLink
  226. if haveResearch {
  227. item.Department = "机构投资者"
  228. } else {
  229. item.Department = "弘则权益研究"
  230. br.Msg = "请选择研选行业"
  231. return
  232. }
  233. charInfo, err := cygx.GetCategoryInfoByName(utils.CHART_PERMISSION_NAME_MF_YANXUAN)
  234. if err != nil {
  235. br.Msg = "操作失败"
  236. br.ErrMsg = "获取所属行业信息失败,Err:" + err.Error()
  237. return
  238. }
  239. if req.DoType == 1 {
  240. item.PublishStatus = 1
  241. }
  242. //industrialManagementId, _ := strconv.Atoi(industrialManagementIds)
  243. //industrialDetail, _ := cygx.GetIndustrialManagemenDetailById(industrialManagementId)
  244. var errArt error
  245. if articleId == 0 {
  246. item.ArticleId = articleIdNew
  247. //需求修改纪要的新增与修改与报告一致
  248. _, err := cygx.AddAReportrticle(item, charInfo.ChartPermissionId, industryName, subjectName, itemDepartment, industrialManagementIds, industrialSubjectIds)
  249. errArt = err
  250. if errArt == nil {
  251. //articleInfo, err := cygx.GetArticleIdInfoBySummaryManageIdEdit(int(artNewId))
  252. if err == nil && req.DoType == 1 {
  253. go cygxService.DoArticleOnenIdWxTemplateMsg(articleIdNew, 1)
  254. }
  255. }
  256. } else {
  257. articleInfo, errInfo := cygx.GetArticleIdInfoByArticleId(articleId)
  258. if articleInfo == nil {
  259. br.Msg = "文章不存在"
  260. return
  261. }
  262. if errInfo != nil {
  263. br.Msg = "发布失败"
  264. br.ErrMsg = "发布失败,Err:" + errInfo.Error()
  265. return
  266. }
  267. if item.PublishStatus == 0 {
  268. item.PublishStatus = articleInfo.PublishStatus
  269. }
  270. item.ArticleId = articleId
  271. err := cygx.EditReportrticle(item, charInfo.ChartPermissionId, industryName, subjectName, articleInfo.PublishStatus, itemDepartment, industrialManagementIds, industrialSubjectIds)
  272. errArt = err
  273. if errArt == nil && req.DoType == 1 {
  274. go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  275. }
  276. }
  277. if errArt != nil {
  278. br.Msg = "发布失败"
  279. br.ErrMsg = "发布失败,Err:" + errArt.Error()
  280. return
  281. }
  282. // 查研观向7.4-这里暂时注释掉, 目前article和industry有关联表处理, 此处应该是没有在用了
  283. //var subjectIds string
  284. //subjectIds, _ = cygx.GetSubjectIds(articleId)
  285. //{|1|}表示报告类型,{|2|}表示纪要类型
  286. //cygx.UpdateSubjecIds(subjectIds+"—"+strconv.Itoa(industrialDetail.IndustrialManagementId)+"{|2|}", industrialDetail.IndustrialManagementId, articleId)
  287. if item.PublishStatus == 1 && articleTypeInfo.IsSendEs == 1 {
  288. services.EsAddOrEditData(item)
  289. }
  290. ////同步数据到最新表
  291. //if req.ArticleId == 0 {
  292. // if item.PublishStatus == 1 {
  293. // go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  294. // }
  295. //} else {
  296. // if item.PublishStatus == 1 {
  297. // go cygxService.UpdateResourceData(item.ArticleId, "article", "update", time.Now().Format(utils.FormatDateTime))
  298. // }
  299. // if req.DoType == 1 {
  300. // go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  301. // }
  302. //}
  303. if len(industryIds) > 0 {
  304. go cygxService.UpdateIndustryLayoutTime(industryIds, false) // 查研观向7.4-更新产业布局时间
  305. go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
  306. }
  307. go elastic.AddComprehensiveArticle(item.ArticleId) // ES添加文章:报告、纪要
  308. go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新 cygx_resource_data 表
  309. br.Ret = 200
  310. br.Success = true
  311. br.Msg = "操作成功"
  312. br.IsAddLog = true
  313. }
  314. // @Title 文章的发布与取消发布
  315. // @Description 文章的发布与取消发布接口
  316. // @Param request body cygx.SummaryManageIdRep true "type json string"
  317. // @Success 200 操作成功
  318. // @router /summaryManage/PublishAndCancel [post]
  319. func (this *SummaryManage) PublishAndCancel() {
  320. br := new(models.BaseResponse).Init()
  321. defer func() {
  322. this.Data["json"] = br
  323. this.ServeJSON()
  324. }()
  325. AdminUser := this.SysUser
  326. indexName := utils.IndexName
  327. if AdminUser == nil {
  328. br.Msg = "请登录"
  329. br.ErrMsg = "请登录,用户信息为空"
  330. br.Ret = 408
  331. return
  332. }
  333. var req cygx.SummaryManageIdRep
  334. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  335. if err != nil {
  336. br.Msg = "参数解析异常!"
  337. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  338. return
  339. }
  340. articleId := req.ArticleId
  341. item := new(cygx.CygxArticle)
  342. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  343. if articleInfo == nil {
  344. br.Msg = "操作失败"
  345. br.ErrMsg = "纪要ID错误"
  346. return
  347. }
  348. if errInfo != nil {
  349. br.Msg = "操作失败"
  350. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  351. return
  352. }
  353. item.ArticleId = articleId
  354. item.Title = articleInfo.Title
  355. item.BodyText = articleInfo.BodyText
  356. item.Body = articleInfo.Body
  357. item.PublishDate = articleInfo.PublishDate
  358. item.ExpertBackground = articleInfo.ExpertBackground
  359. item.CategoryId = articleInfo.CategoryId
  360. //item.Annotation, _ = GetReportContentTextSubNew(v.Annotation)
  361. //item.Abstract, _ = GetReportContentTextSubNew(v.Abstract)
  362. if articleInfo.PublishStatus == 0 {
  363. item.PublishStatus = 1
  364. item.AdminId = AdminUser.AdminId
  365. item.AdminName = AdminUser.RealName
  366. services.EsAddOrEditData(item)
  367. //go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  368. } else {
  369. item.AdminId = articleInfo.AdminId
  370. item.AdminName = articleInfo.AdminName
  371. item.PublishStatus = 0
  372. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  373. //go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  374. }
  375. err = cygx.PublishAndCancel(item)
  376. if err != nil {
  377. br.Msg = "操作失败"
  378. br.ErrMsg = "操作失败,Err:" + err.Error()
  379. return
  380. }
  381. //专项调研类型的报告单独走发送
  382. if articleInfo.SubCategoryName == "专项调研" {
  383. if item.PublishStatus == 1 {
  384. cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
  385. }
  386. } else {
  387. if item.PublishStatus == 1 {
  388. articleIndustrial, _ := cygx.GetIndustrialManagemenDetailByAaticle(articleInfo.ArticleId)
  389. if articleIndustrial.ArticleId > 0 {
  390. go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  391. }
  392. go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
  393. }
  394. }
  395. go elastic.AddComprehensiveArticle(articleId) // ES添加文章:报告、纪要
  396. go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新 cygx_resource_data 表
  397. br.Ret = 200
  398. br.Success = true
  399. br.Msg = "操作成功"
  400. br.IsAddLog = true
  401. }
  402. // @Title 文章详情
  403. // @Description 获取文章详情接口
  404. // @Param ArticleId query int true "文章ID"
  405. // @Success Ret=200 {object} cygx.SummaryManageEditDetail
  406. // @router /summaryManage/detail [get]
  407. func (this *SummaryManage) Detail() {
  408. br := new(models.BaseResponse).Init()
  409. defer func() {
  410. this.Data["json"] = br
  411. this.ServeJSON()
  412. }()
  413. AdminUser := this.SysUser
  414. if AdminUser == nil {
  415. br.Msg = "请登录"
  416. br.ErrMsg = "请登录,用户信息为空"
  417. br.Ret = 408
  418. return
  419. }
  420. articleId, _ := this.GetInt("ArticleId")
  421. if articleId < 1 {
  422. br.Msg = "请输入文章ID"
  423. return
  424. }
  425. articleInfo, err := cygx.GetArticleIdInfoByreportIdEdit(articleId)
  426. if err != nil {
  427. br.Msg = "文章内容不存在"
  428. br.ErrMsg = "纪要ID错误,Err:" + err.Error()
  429. return
  430. }
  431. detail, _ := cygx.GetArticleDepartmentDateilByDepartmentId(articleInfo.DepartmentId)
  432. industrialList, err := cygx.GetIndustrialArticleGroupManagementList(articleInfo.ArticleId)
  433. if err != nil && err.Error() != utils.ErrNoRow() {
  434. br.Msg = "获取信息失败"
  435. br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  436. return
  437. }
  438. subjectList, err := cygx.GetSubjectArticleGroupManagementList(articleInfo.ArticleId)
  439. if err != nil && err.Error() != utils.ErrNoRow() {
  440. br.Msg = "获取信息失败"
  441. br.ErrMsg = "获取活动关联的标的列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  442. return
  443. }
  444. articleInfo.ListIndustrial = industrialList
  445. articleInfo.ListSubject = subjectList
  446. resp := cygx.ArticleDetailResp{
  447. ArticleId: articleInfo.ArticleId,
  448. Title: articleInfo.Title,
  449. Abstract: articleInfo.Abstract,
  450. Body: articleInfo.Body,
  451. PublishStatus: articleInfo.PublishStatus,
  452. PublishDate: articleInfo.PublishDate,
  453. CreateDate: articleInfo.CreateDate,
  454. LastUpdatedTime: articleInfo.LastUpdatedTime,
  455. ArticleIdMd5: articleInfo.ArticleIdMd5,
  456. SellerAndMobile: articleInfo.SellerAndMobile,
  457. SubjectName: articleInfo.SubjectName,
  458. IndustryName: articleInfo.IndustryName,
  459. DepartmentId: articleInfo.DepartmentId,
  460. ChartPermissionIds: articleInfo.ChartPermissionIds,
  461. ArticleTypeId: articleInfo.ArticleTypeId,
  462. ArticleTypeName: articleInfo.ArticleTypeName,
  463. ListIndustrial: articleInfo.ListIndustrial,
  464. ListSubject: articleInfo.ListSubject,
  465. ReportLink: articleInfo.ReportLink,
  466. ImgUrl: detail.ImgUrl,
  467. NickName: detail.NickName,
  468. }
  469. br.Ret = 200
  470. br.Success = true
  471. br.Msg = "获取成功"
  472. br.Data = resp
  473. }
  474. // @Title 删除纪要
  475. // @Description 删除纪要接口
  476. // @Param request body cygx.SummaryManageIdRep true "type json string"
  477. // @Success Ret=200
  478. // @router /summaryManage/delete [post]
  479. func (this *SummaryManage) Delete() {
  480. br := new(models.BaseResponse).Init()
  481. defer func() {
  482. this.Data["json"] = br
  483. this.ServeJSON()
  484. }()
  485. sysUser := this.SysUser
  486. indexName := utils.IndexName
  487. if sysUser == nil {
  488. br.Msg = "请登录"
  489. br.ErrMsg = "请登录,SysUser Is Empty"
  490. br.Ret = 408
  491. return
  492. }
  493. var req cygx.SummaryManageIdRep
  494. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  495. if err != nil {
  496. br.Msg = "参数解析异常!"
  497. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  498. return
  499. }
  500. articleId := req.ArticleId
  501. if articleId < 1 {
  502. br.Msg = "请输入产业ID"
  503. return
  504. }
  505. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  506. if articleInfo == nil {
  507. br.Msg = "操作失败"
  508. br.ErrMsg = "纪要ID错误"
  509. return
  510. }
  511. if errInfo != nil {
  512. br.Msg = "操作失败"
  513. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  514. return
  515. }
  516. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  517. err = cygx.DeleteArticleReport(articleInfo.ArticleId)
  518. if err != nil {
  519. br.Msg = "删除信息失败"
  520. br.ErrMsg = "删除信息失败,Err:" + err.Error()
  521. return
  522. }
  523. //go cygxService.UpdateResourceData(articleInfo.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  524. go cygxService.UpdateArticleResourceData(articleInfo.ArticleId) //写入首页最新 cygx_resource_data 表
  525. br.Ret = 200
  526. br.Success = true
  527. br.Msg = "已删除"
  528. br.IsAddLog = true
  529. }
  530. // @Title 纪要列表
  531. // @Description 获取纪要列表接口
  532. // @Param PageSize query int true "每页数据条数"
  533. // @Param CurrentIndex query int true "当前页页码,从1开始"
  534. // @Param PublishStatus query int true "发布状态 ,0未发布,1已发布,传2查询所有"
  535. // @Param CategoryName query string true "行业名称"
  536. // @Param StartDate query string true "开始时间 ,列如2021-03-06 "
  537. // @Param EndDate query string true "结束时间,列如2021-03-06 "
  538. // @Param KeyWord query string true "搜索关键词"
  539. // @Param Label query string true "搜索报告标签"
  540. // @Param NickName query string true "作者昵称"
  541. // @Param Departmentİd query int false "作者İd"
  542. // @Param ArticleTypeId query int false `"文章类型ID"
  543. // @Success 200 {object} cygx.GetSummaryManageListRep
  544. // @router /summaryManage/list [get]
  545. func (this *SummaryManage) SummaryManageList() {
  546. br := new(models.BaseResponse).Init()
  547. defer func() {
  548. this.Data["json"] = br
  549. this.ServeJSON()
  550. }()
  551. sysUser := this.SysUser
  552. if sysUser == nil {
  553. br.Msg = "请登录"
  554. br.ErrMsg = "请登录,SysUser Is Empty"
  555. return
  556. }
  557. pageSize, _ := this.GetInt("PageSize")
  558. currentIndex, _ := this.GetInt("CurrentIndex")
  559. publishStatus, _ := this.GetInt("PublishStatus")
  560. categoryName := this.GetString("CategoryName")
  561. startDate := this.GetString("StartDate")
  562. endDate := this.GetString("EndDate")
  563. keyWord := this.GetString("KeyWord")
  564. label := this.GetString("Label")
  565. nickName := this.GetString("NickName")
  566. departmentİd, _ := this.GetInt("Departmentİd")
  567. articleTypeId, _ := this.GetInt("ArticleTypeId")
  568. resp := new(cygx.GetSummaryManageListRep)
  569. var startSize int
  570. if pageSize <= 0 {
  571. pageSize = utils.PageSize20
  572. }
  573. if currentIndex <= 0 {
  574. currentIndex = 1
  575. }
  576. startSize = utils.StartIndex(currentIndex, pageSize)
  577. var condition string
  578. var pars []interface{}
  579. condition += ` WHERE art.article_type_id >0 `
  580. if articleTypeId > 0 {
  581. condition += ` AND art.article_type_id = ` + strconv.Itoa(articleTypeId)
  582. }
  583. if keyWord != "" {
  584. condition += ` AND (art.title LIKE '%` + keyWord + `%' ) `
  585. }
  586. if nickName != "" {
  587. condition += ` AND (art.seller_and_mobile LIKE '%` + nickName + `%' ) `
  588. }
  589. if departmentİd > 0 {
  590. condition += ` AND art.department_id = ` + strconv.Itoa(departmentİd)
  591. }
  592. //行业名称
  593. if categoryName != "" {
  594. condition += ` AND art.category_name LIKE '%` + categoryName + `%' `
  595. }
  596. if startDate != "" {
  597. condition += ` AND art.publish_date >= ` + "'" + startDate + " 00:00:00'"
  598. }
  599. if endDate != "" {
  600. condition += ` AND art.publish_date <= ` + "'" + endDate + " 23:59:59'"
  601. }
  602. if startDate != "" || endDate != "" {
  603. condition += ` AND art.publish_status =1 `
  604. }
  605. if publishStatus == 0 || publishStatus == 1 {
  606. condition += ` AND art.publish_status = ` + strconv.Itoa(publishStatus)
  607. }
  608. //如果标签列表不为空则作以下关联搜索
  609. if label != "" {
  610. managementIds, err := cygx.GetManagementIdsByNameLike(label)
  611. if err != nil {
  612. br.Msg = "获取信息失败"
  613. br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
  614. return
  615. }
  616. subjectIds, err := cygx.GetIndustrialSubjectIdsByNameLike(label)
  617. if err != nil {
  618. br.Msg = "获取信息失败"
  619. br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
  620. return
  621. }
  622. var articleIdmanagement string
  623. var articleIdsubject string
  624. var articleIds string
  625. if managementIds != "" {
  626. articleIdmanagement, err = cygx.GetArticleIdsByIndustrialManagementId(managementIds)
  627. if err != nil {
  628. br.Msg = "获取信息失败"
  629. br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
  630. return
  631. }
  632. }
  633. if subjectIds != "" {
  634. articleIdsubject, err = cygx.GetArticleIdsBySubjectId(subjectIds)
  635. if err != nil {
  636. br.Msg = "获取信息失败"
  637. br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
  638. return
  639. }
  640. }
  641. if articleIdmanagement != "" && articleIdsubject != "" {
  642. articleIds = articleIdmanagement + "," + articleIdsubject
  643. } else if articleIdmanagement != "" && articleIdsubject == "" {
  644. articleIds = articleIdmanagement
  645. } else if articleIdmanagement == "" && articleIdsubject != "" {
  646. articleIds = articleIdsubject
  647. }
  648. if articleIds != "" {
  649. condition += ` AND art.article_id IN (` + articleIds + `)`
  650. } else {
  651. // 如果标签关联的报告为空,那么就直接返回空
  652. page := paging.GetPaging(currentIndex, pageSize, 0)
  653. resp.List = make([]*cygx.CygxArticleList, 0)
  654. resp.Paging = page
  655. br.Ret = 200
  656. br.Success = true
  657. br.Msg = "获取成功"
  658. br.Data = resp
  659. return
  660. }
  661. }
  662. total, err := cygx.GetASummaryManageCount(condition, pars)
  663. if err != nil {
  664. br.Msg = "获取失败"
  665. br.ErrMsg = "获取失败,Err:" + err.Error()
  666. return
  667. }
  668. condition += ` GROUP BY art.article_id `
  669. condition += ` ORDER BY art.publish_date DESC `
  670. list, errList := cygx.GetSummaryManageList(condition, pars, startSize, pageSize)
  671. if errList != nil {
  672. br.Msg = "获取失败"
  673. br.ErrMsg = "获取失败,Err:" + errList.Error()
  674. return
  675. }
  676. var articleIdStr string
  677. for _, v := range list {
  678. articleIdStr += strconv.Itoa(v.ArticleId) + ","
  679. }
  680. articleIdStr = strings.TrimRight(articleIdStr, ",")
  681. // 查研观向7.4-报告关联多个产业
  682. mapIndustrial := make(map[int]string)
  683. mapSubject := make(map[string]string)
  684. if articleIdStr != "" {
  685. industrialList, err := cygx.GetIndustrialArticleGroupListByarticleIds(articleIdStr)
  686. if err != nil {
  687. br.Msg = "获取失败"
  688. br.ErrMsg = "获取失败,GetIndustrialArticleGroupListByarticleIds Err:" + err.Error()
  689. return
  690. }
  691. subjectList, err := cygx.GetSubjectArticleGroupListByarticleIds(articleIdStr)
  692. if err != nil {
  693. br.Msg = "获取失败"
  694. br.ErrMsg = "获取失败,GetSubjectArticleGroupListByarticleIds Err:" + err.Error()
  695. return
  696. }
  697. //合并活动对应的多个标的
  698. for _, v := range subjectList {
  699. mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)] += v.SubjectName + "/"
  700. }
  701. //活动对应的产业
  702. for _, v := range industrialList {
  703. var labelSubject string
  704. labelSubject = mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)]
  705. if labelSubject != "" {
  706. mapIndustrial[v.ArticleId] += v.IndustryName + "--" + strings.TrimRight(labelSubject, "/") + ","
  707. } else {
  708. mapIndustrial[v.ArticleId] += v.IndustryName + ","
  709. }
  710. }
  711. }
  712. for k, v := range list {
  713. if v.PublishStatus == 0 {
  714. list[k].PublishDate = ""
  715. } else {
  716. list[k].PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  717. }
  718. if mapIndustrial[v.ArticleId] != "" {
  719. list[k].IndustryName = strings.TrimRight(mapIndustrial[v.ArticleId], ",")
  720. }
  721. }
  722. page := paging.GetPaging(currentIndex, pageSize, total)
  723. resp.List = list
  724. resp.Paging = page
  725. br.Ret = 200
  726. br.Success = true
  727. br.Msg = "获取成功"
  728. br.Data = resp
  729. }
  730. // @Title 敏捷搜索关键词的列表
  731. // @Description 获取敏捷搜索关键词的列表接口
  732. // @Success 200 {object} cygx.SummaryFastsearchKeywordsListResp
  733. // @router /summaryManage/fastSearchKeWord [get]
  734. func (this *SummaryManage) FastSearch() {
  735. br := new(models.BaseResponse).Init()
  736. defer func() {
  737. this.Data["json"] = br
  738. this.ServeJSON()
  739. }()
  740. AdminUser := this.SysUser
  741. if AdminUser == nil {
  742. br.Msg = "请登录"
  743. br.ErrMsg = "请登录,用户信息为空"
  744. br.Ret = 408
  745. return
  746. }
  747. resp := new(cygx.SummaryFastsearchKeywordsListResp)
  748. list, err := cygx.GetSummaryFastsearchKeywordsList()
  749. if err != nil {
  750. br.Msg = "获取失败"
  751. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  752. return
  753. }
  754. resp.List = list
  755. br.Ret = 200
  756. br.Success = true
  757. br.Msg = "获取成功"
  758. br.Data = resp
  759. }
  760. // @Title 新增和修改敏捷搜索关键词的列表
  761. // @Description 新增和修改敏捷搜索关键词的列表接口
  762. // @Param request body cygx.SummaryFastsearchKeywordsResp true "type json string"
  763. // @Success Ret=200
  764. // @router /summaryManage/editFastSearchKeWord [post]
  765. func (this *SummaryManage) EditFastSearch() {
  766. br := new(models.BaseResponse).Init()
  767. defer func() {
  768. this.Data["json"] = br
  769. this.ServeJSON()
  770. }()
  771. AdminUser := this.SysUser
  772. if AdminUser == nil {
  773. br.Msg = "请登录"
  774. br.ErrMsg = "请登录,用户信息为空"
  775. br.Ret = 408
  776. return
  777. }
  778. req := new(cygx.SummaryFastsearchKeywordsResp)
  779. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  780. if err != nil {
  781. br.Msg = "参数解析异常!"
  782. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  783. return
  784. }
  785. keyWord := req.KeyWord
  786. slicekeyWord := strings.Split(keyWord, ",")
  787. var items []*cygx.CygxSummaryFastsearchKeywords
  788. for _, v := range slicekeyWord {
  789. var item = new(cygx.CygxSummaryFastsearchKeywords)
  790. item.CreateTime = time.Now()
  791. item.KeyWord = v
  792. items = append(items, item)
  793. fmt.Println(v)
  794. }
  795. _, err = cygx.AddSummaryFastsearchKeywords(items)
  796. if err != nil {
  797. br.Msg = "操作失败"
  798. br.ErrMsg = "操作失败,Err:" + err.Error()
  799. return
  800. }
  801. br.Ret = 200
  802. br.Success = true
  803. br.Msg = "操作成功"
  804. }
  805. // @Title 永续客户是否展示
  806. // @Description 获取永续客户是否展示详情接口
  807. // @Success 200 {object} cygx.SummaryFastsearchKeywordsListResp
  808. // @router /summaryManage/sustainableDetail [get]
  809. func (this *SummaryManage) Sustainable() {
  810. br := new(models.BaseResponse).Init()
  811. defer func() {
  812. this.Data["json"] = br
  813. this.ServeJSON()
  814. }()
  815. AdminUser := this.SysUser
  816. if AdminUser == nil {
  817. br.Msg = "请登录"
  818. br.ErrMsg = "请登录,用户信息为空"
  819. br.Ret = 408
  820. return
  821. }
  822. detail, err := cygx.GetCygxConfigDetail()
  823. if err != nil {
  824. br.Msg = "获取失败"
  825. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  826. return
  827. }
  828. if detail.ConfigValue == "1" {
  829. detail.OperationButton = true
  830. }
  831. br.Ret = 200
  832. br.Success = true
  833. br.Msg = "获取成功"
  834. br.Data = detail
  835. }
  836. // @Title 修改永续客户是否展示
  837. // @Description 修改永续客户是否展示接口
  838. // @Success Ret=200
  839. // @router /summaryManage/sustainableEdit [post]
  840. func (this *SummaryManage) EditSustainable() {
  841. br := new(models.BaseResponse).Init()
  842. defer func() {
  843. this.Data["json"] = br
  844. this.ServeJSON()
  845. }()
  846. AdminUser := this.SysUser
  847. if AdminUser == nil {
  848. br.Msg = "请登录"
  849. br.ErrMsg = "请登录,SysUser Is Empty"
  850. br.Ret = 408
  851. return
  852. }
  853. var newValue int
  854. detail, err := cygx.GetCygxConfigDetail()
  855. if err != nil {
  856. br.Msg = "获取失败"
  857. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  858. return
  859. }
  860. if detail.ConfigValue == "1" {
  861. newValue = 0
  862. } else {
  863. newValue = 1
  864. }
  865. err = cygx.CygxConfigUpdate(newValue)
  866. if err != nil {
  867. br.Msg = "操作失败"
  868. br.ErrMsg = "操作失败,Err:" + err.Error()
  869. return
  870. }
  871. br.Ret = 200
  872. br.Success = true
  873. br.Msg = "操作成功"
  874. }
  875. // @Title 提问列表详情
  876. // @Description 获取提问列表详情接口
  877. // @Param ArticleId query int true "文章ID"
  878. // @Success 200 {object} cygx.ActivityHelpAskListResp
  879. // @router /summaryManage/askList [get]
  880. func (this *SummaryManage) AskList() {
  881. br := new(models.BaseResponse).Init()
  882. defer func() {
  883. this.Data["json"] = br
  884. this.ServeJSON()
  885. }()
  886. sysUser := this.SysUser
  887. if sysUser == nil {
  888. br.Msg = "请登录"
  889. br.ErrMsg = "请登录,SysUser Is Empty"
  890. return
  891. }
  892. articleId, _ := this.GetInt("ArticleId")
  893. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  894. if articleInfo == nil {
  895. br.Msg = "操作失败"
  896. br.ErrMsg = "报告ID错误"
  897. return
  898. }
  899. list, err := cygx.GetArticleAskList(articleInfo.ArticleId)
  900. resp := new(cygx.ArticleAskListResp)
  901. if err != nil {
  902. br.Msg = "获取失败"
  903. br.ErrMsg = "获取失败,Err:" + err.Error()
  904. return
  905. }
  906. resp.List = list
  907. br.Ret = 200
  908. br.Success = true
  909. br.Msg = "获取成功"
  910. br.Data = resp
  911. }
  912. // @Title 提问详情excel表格下载
  913. // @Description 提问详情excel表格下载接口
  914. // @Param SummaryManageId query int true "纪要ID"
  915. // @Success 200 导出成功
  916. // @router /summaryManage/askListExport [get]
  917. func (this *SummaryManage) AskListExport() {
  918. br := new(models.BaseResponse).Init()
  919. defer func() {
  920. this.Data["json"] = br
  921. this.ServeJSON()
  922. }()
  923. sysUser := this.SysUser
  924. if sysUser == nil {
  925. br.Msg = "请登录"
  926. br.ErrMsg = "请登录,SysUser Is Empty"
  927. return
  928. }
  929. articleId, _ := this.GetInt("ArticleId")
  930. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  931. if articleInfo == nil {
  932. br.Msg = "操作失败"
  933. br.ErrMsg = "报告ID错误"
  934. return
  935. }
  936. list, err := cygx.GetArticleAskList(articleInfo.ArticleId)
  937. if err != nil {
  938. br.Msg = "获取失败"
  939. br.ErrMsg = "获取失败,Err:" + err.Error()
  940. return
  941. }
  942. //创建excel
  943. dir, err := os.Executable()
  944. exPath := filepath.Dir(dir)
  945. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  946. xlsxFile := xlsx.NewFile()
  947. if err != nil {
  948. br.Msg = "生成文件失败"
  949. br.ErrMsg = "生成文件失败"
  950. return
  951. }
  952. style := xlsx.NewStyle()
  953. alignment := xlsx.Alignment{
  954. Horizontal: "center",
  955. Vertical: "center",
  956. WrapText: true,
  957. }
  958. style.Alignment = alignment
  959. style.ApplyAlignment = true
  960. sheet, err := xlsxFile.AddSheet("名单")
  961. if err != nil {
  962. br.Msg = "新增Sheet失败"
  963. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  964. return
  965. }
  966. //标头
  967. rowTitle := sheet.AddRow()
  968. cellA := rowTitle.AddCell()
  969. cellA.Value = "姓名"
  970. cellB := rowTitle.AddCell()
  971. cellB.Value = "公司名称"
  972. cellC := rowTitle.AddCell()
  973. cellC.Value = "问题"
  974. cellD := rowTitle.AddCell()
  975. cellD.Value = "提交时间"
  976. for _, item := range list {
  977. row := sheet.AddRow()
  978. cellA := row.AddCell()
  979. cellA.Value = item.RealName
  980. cellB := row.AddCell()
  981. cellB.Value = item.CompanyName
  982. cellC := row.AddCell()
  983. cellC.Value = item.Content
  984. cellD := row.AddCell()
  985. cellD.Value = item.CreateTime
  986. }
  987. err = xlsxFile.Save(downLoadnFilePath)
  988. if err != nil {
  989. br.Msg = "保存文件失败"
  990. br.ErrMsg = "保存文件失败"
  991. return
  992. }
  993. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  994. downloadFileName := "问题列表" + randStr + ".xlsx"
  995. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  996. defer func() {
  997. os.Remove(downLoadnFilePath)
  998. }()
  999. br.Success = true
  1000. br.Ret = 200
  1001. br.Msg = "导出成功"
  1002. }
  1003. // @Title 作者关注详情
  1004. // @Description 获取作者关注详情列表接口
  1005. // @Param DepartmentId query int true "作者ID"
  1006. // @Success 200 {object} cygx.GetFailSignupListRep
  1007. // @router /summaryManage/department/followList [get]
  1008. func (this *SummaryManage) FepartmentfollowList() {
  1009. br := new(models.BaseResponse).Init()
  1010. defer func() {
  1011. this.Data["json"] = br
  1012. this.ServeJSON()
  1013. }()
  1014. sysUser := this.SysUser
  1015. if sysUser == nil {
  1016. br.Msg = "请登录"
  1017. br.ErrMsg = "请登录,SysUser Is Empty"
  1018. return
  1019. }
  1020. departmentId, _ := this.GetInt("DepartmentId")
  1021. detail, _ := cygx.GetArticleDepartmentDateilById(departmentId)
  1022. if detail == nil {
  1023. br.Msg = "作者不存在"
  1024. br.ErrMsg = "获取信息失败,Err:DepartmentId:" + strconv.Itoa(departmentId)
  1025. return
  1026. }
  1027. list, err := cygx.GetCygxDepartmentFllowList(departmentId)
  1028. resp := new(cygx.CygxDepartmentFllowRep)
  1029. if err != nil {
  1030. br.Msg = "获取失败"
  1031. br.ErrMsg = "获取列表失败,Err:" + err.Error()
  1032. return
  1033. }
  1034. resp.NickName = detail.Content
  1035. resp.FllowNum = len(list)
  1036. resp.List = list
  1037. br.Ret = 200
  1038. br.Success = true
  1039. br.Msg = "获取成功"
  1040. br.Data = resp
  1041. }
  1042. // @Title 文章收藏详情
  1043. // @Description 获取文章收藏详情列表接口
  1044. // @Param ArticleId query int true "文章ID"
  1045. // @Success 200 {object} cygx.GetFailSignupListRep
  1046. // @router /summaryManage/articleCollection [get]
  1047. func (this *SummaryManage) ArticleCollection() {
  1048. br := new(models.BaseResponse).Init()
  1049. defer func() {
  1050. this.Data["json"] = br
  1051. this.ServeJSON()
  1052. }()
  1053. sysUser := this.SysUser
  1054. if sysUser == nil {
  1055. br.Msg = "请登录"
  1056. br.ErrMsg = "请登录,SysUser Is Empty"
  1057. return
  1058. }
  1059. articleId, _ := this.GetInt("ArticleId")
  1060. _, err := cygx.GetArticleIdInfoByArticleId(articleId)
  1061. if err != nil {
  1062. br.Msg = "报告不存在"
  1063. br.ErrMsg = "查询失败,Err:" + err.Error() + strconv.Itoa(articleId)
  1064. return
  1065. }
  1066. list, err := cygx.GetCygxArticleCollectionList(articleId)
  1067. if err != nil {
  1068. br.Msg = "获取失败"
  1069. br.ErrMsg = "获取列表失败,Err:" + err.Error()
  1070. return
  1071. }
  1072. br.Ret = 200
  1073. br.Success = true
  1074. br.Msg = "获取成功"
  1075. br.Data = list
  1076. }
  1077. // @Title 阅读明细下载
  1078. // @Description 获取阅读明细下载接口
  1079. // @Param ArticleId query int true "文章ID"
  1080. // @Success 200 导出成功
  1081. // @router /summaryManage/articleHistoryExport [get]
  1082. func (this *SummaryManage) ArticleHistoryExport() {
  1083. br := new(models.BaseResponse).Init()
  1084. defer func() {
  1085. this.Data["json"] = br
  1086. this.ServeJSON()
  1087. }()
  1088. AdminUser := this.SysUser
  1089. if AdminUser == nil {
  1090. br.Msg = "请登录"
  1091. br.ErrMsg = "请登录,SysUser Is Empty"
  1092. return
  1093. }
  1094. articleId, _ := this.GetInt("ArticleId")
  1095. articleInfo, err := cygx.GetArticleIdInfoByArticleId(articleId)
  1096. if err != nil {
  1097. br.Msg = "报告不存在"
  1098. br.ErrMsg = "查询失败,Err:" + err.Error() + strconv.Itoa(articleId)
  1099. return
  1100. }
  1101. resp := new(cygx.CanDownload)
  1102. adminInfo, errAdmin := system.GetSysUserById(AdminUser.AdminId)
  1103. if errAdmin != nil {
  1104. br.Msg = "获取失败"
  1105. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  1106. return
  1107. }
  1108. if adminInfo.Role == "admin" || adminInfo.Role == "researcher" || adminInfo.RealName == "汪洋" {
  1109. resp.IsCanDownload = true
  1110. }
  1111. var condition string
  1112. if resp.IsCanDownload == false {
  1113. //权益申请销售只能看到自己名下的客户的申请
  1114. companyIds, err := cygxService.GetAdminLookUserCompanyIds(AdminUser)
  1115. if err != nil {
  1116. br.Msg = "获取失败"
  1117. br.ErrMsg = "获取失败,GetAdminLookUserCompanyIds Err:" + err.Error()
  1118. return
  1119. }
  1120. var companyIdstr []string
  1121. for _, v := range companyIds {
  1122. companyIdstr = append(companyIdstr, strconv.Itoa(v))
  1123. }
  1124. condition = ` AND h.company_id IN (` + strings.Join(companyIdstr, ",") + `) `
  1125. }
  1126. mapMobileSellWithUser := make(map[string]string)
  1127. if condition != "" {
  1128. mobileList, err := cygx.GetSellerUserMobileList(condition)
  1129. if err != nil && err.Error() != utils.ErrNoRow() {
  1130. br.Msg = "获取失败"
  1131. br.ErrMsg = "获取策略品台数据失败,Err:" + err.Error()
  1132. return
  1133. }
  1134. if len(mobileList) > 0 {
  1135. for _, v := range mobileList {
  1136. mapMobileSellWithUser[v.Mobile] = v.Mobile
  1137. }
  1138. }
  1139. }
  1140. condition += ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  1141. list, err := cygx.GetArticleHistoryList(articleId, condition)
  1142. if err != nil {
  1143. br.Msg = "获取失败"
  1144. br.ErrMsg = "获取失败,Err:" + err.Error()
  1145. return
  1146. }
  1147. listClPv, err := cygx.GetCygxCelueArticleHistoryRecordPvAll(strconv.Itoa(articleId))
  1148. if err != nil && err.Error() != utils.ErrNoRow() {
  1149. br.Msg = "获取失败"
  1150. br.ErrMsg = "获取策略品台数据失败,Err:" + err.Error()
  1151. return
  1152. }
  1153. var mobilesCl string
  1154. if len(listClPv) > 0 {
  1155. for _, v := range listClPv {
  1156. if v.Mobile != "" {
  1157. mobilesCl += v.Mobile + ","
  1158. }
  1159. }
  1160. }
  1161. mapMobileCompany := make(map[string]string)
  1162. mapMobileSellName := make(map[string]string)
  1163. mobilesCl = strings.TrimRight(mobilesCl, ",")
  1164. if mobilesCl != "" {
  1165. listClCompanyName, err := cygx.GetCygxCelueArticleComapnyName(mobilesCl)
  1166. if err != nil && err.Error() != utils.ErrNoRow() {
  1167. br.Msg = "获取失败"
  1168. br.ErrMsg = "获取策略品台关联查研观向的用户信息失败,Err:" + err.Error()
  1169. return
  1170. }
  1171. if len(listClCompanyName) > 0 {
  1172. for _, v := range listClCompanyName {
  1173. mapMobileCompany[v.Mobile] = v.CompanyName
  1174. mapMobileSellName[v.Mobile] = v.RealName
  1175. }
  1176. }
  1177. }
  1178. for k, v := range listClPv {
  1179. if v.Mobile != "" {
  1180. if mapMobileCompany[v.Mobile] != "" {
  1181. listClPv[k].CompanyName = mapMobileCompany[v.Mobile]
  1182. }
  1183. if mapMobileSellName[v.Mobile] != "" {
  1184. listClPv[k].SellerName = mapMobileSellName[v.Mobile]
  1185. }
  1186. }
  1187. }
  1188. var listClPvPower []*cygx.ArticleHistoryRep
  1189. if len(mapMobileSellWithUser) != 0 {
  1190. for _, v := range listClPv {
  1191. if mapMobileSellWithUser[v.Mobile] != "" {
  1192. listClPvPower = append(listClPvPower, v)
  1193. }
  1194. }
  1195. } else {
  1196. listClPvPower = listClPv
  1197. }
  1198. //创建excel
  1199. dir, err := os.Executable()
  1200. exPath := filepath.Dir(dir)
  1201. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1202. xlsxFile := xlsx.NewFile()
  1203. if err != nil {
  1204. br.Msg = "生成文件失败"
  1205. br.ErrMsg = "生成文件失败"
  1206. return
  1207. }
  1208. style := xlsx.NewStyle()
  1209. alignment := xlsx.Alignment{
  1210. Horizontal: "center",
  1211. Vertical: "center",
  1212. WrapText: true,
  1213. }
  1214. style.Alignment = alignment
  1215. style.ApplyAlignment = true
  1216. for pidIndex := 0; pidIndex <= 1; pidIndex++ {
  1217. var sheetName string
  1218. var listDate []*cygx.ArticleHistoryRep
  1219. if pidIndex == 0 {
  1220. sheetName = "查研观向"
  1221. listDate = list
  1222. } else {
  1223. sheetName = "策略平台"
  1224. listDate = listClPvPower
  1225. }
  1226. sheet, err := xlsxFile.AddSheet(sheetName)
  1227. if err != nil {
  1228. br.Msg = "新增Sheet失败"
  1229. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1230. return
  1231. }
  1232. //标头
  1233. rowTitle := sheet.AddRow()
  1234. cellA := rowTitle.AddCell()
  1235. cellA.Value = "姓名"
  1236. cellB := rowTitle.AddCell()
  1237. cellB.Value = "手机号"
  1238. cellC := rowTitle.AddCell()
  1239. cellC.Value = "公司名称"
  1240. cellD := rowTitle.AddCell()
  1241. cellD.Value = "所属权益销售"
  1242. cellE := rowTitle.AddCell()
  1243. cellE.Value = "阅读时长(秒)"
  1244. cellF := rowTitle.AddCell()
  1245. cellF.Value = "阅读时间"
  1246. for _, item := range listDate {
  1247. row := sheet.AddRow()
  1248. cellA := row.AddCell()
  1249. cellA.Value = item.RealName
  1250. cellB := row.AddCell()
  1251. cellB.Value = item.Mobile
  1252. cellC := row.AddCell()
  1253. cellC.Value = item.CompanyName
  1254. cellD := row.AddCell()
  1255. cellD.Value = item.SellerName
  1256. cellE := row.AddCell()
  1257. cellE.Value = item.StopTime
  1258. cellF := row.AddCell()
  1259. cellF.Value = item.CreateTime
  1260. }
  1261. }
  1262. err = xlsxFile.Save(downLoadnFilePath)
  1263. if err != nil {
  1264. br.Msg = "保存文件失败"
  1265. br.ErrMsg = "保存文件失败"
  1266. return
  1267. }
  1268. //randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1269. downloadFileName := articleInfo.Title + ".xlsx"
  1270. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1271. defer func() {
  1272. os.Remove(downLoadnFilePath)
  1273. }()
  1274. br.Success = true
  1275. br.Ret = 200
  1276. br.Msg = "导出成功"
  1277. }
  1278. // @Title 文章类型列表
  1279. // @Description 文章类型列表接口
  1280. // @Success 200 {object} cygx.ArticleTypeListResp
  1281. // @router /summaryManage/articleType/list [get]
  1282. func (this *ActivityTypeCoAntroller) ArticleTypeList() {
  1283. br := new(models.BaseResponse).Init()
  1284. defer func() {
  1285. this.Data["json"] = br
  1286. this.ServeJSON()
  1287. }()
  1288. sysUser := this.SysUser
  1289. if sysUser == nil {
  1290. br.Msg = "请登录"
  1291. br.ErrMsg = "请登录,SysUser Is Empty"
  1292. br.Ret = 408
  1293. return
  1294. }
  1295. resp := new(cygx.ArticleTypeListResp)
  1296. list, err := cygx.GetCygxArticleTypeList()
  1297. if err != nil {
  1298. br.Msg = "获取失败"
  1299. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1300. return
  1301. }
  1302. typelist, err := cygx.GetArticleTypeAndAbstract()
  1303. if err != nil {
  1304. br.Msg = "获取失败"
  1305. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1306. return
  1307. }
  1308. resp.AbstractList = typelist
  1309. resp.List = list
  1310. br.Ret = 200
  1311. br.Success = true
  1312. br.Msg = "获取成功"
  1313. br.Data = resp
  1314. }
  1315. // @Title 新增文章类型
  1316. // @Description 新增文章类型接口
  1317. // @Param request body cygx.CygxArticleReq true "type json string"
  1318. // @Success Ret=200
  1319. // @router /summaryManage/articleType/add [post]
  1320. func (this *SummaryManage) ArticleTypeListAdd() {
  1321. br := new(models.BaseResponse).Init()
  1322. defer func() {
  1323. this.Data["json"] = br
  1324. this.ServeJSON()
  1325. }()
  1326. AdminUser := this.SysUser
  1327. if AdminUser == nil {
  1328. br.Msg = "请登录"
  1329. br.ErrMsg = "请登录,用户信息为空"
  1330. br.Ret = 408
  1331. return
  1332. }
  1333. req := new(cygx.CygxArticleReq)
  1334. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1335. if err != nil {
  1336. br.Msg = "参数解析异常!"
  1337. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1338. return
  1339. }
  1340. name := req.ArticleTypeName
  1341. if name == "" {
  1342. br.Msg = "内容不能为空!"
  1343. return
  1344. }
  1345. var condition string
  1346. condition = ` AND article_type_name = '` + name + `'`
  1347. count, err := cygx.GetCygxArticleTypeCount(condition)
  1348. if err != nil {
  1349. br.Msg = "操作失败!"
  1350. br.ErrMsg = "获取数量失败,Err:" + err.Error()
  1351. return
  1352. }
  1353. if count > 0 {
  1354. br.Msg = "该类型已存在,请重新填写!"
  1355. return
  1356. }
  1357. count, err = cygx.GetCygxArticleTypeCount("")
  1358. if err != nil {
  1359. br.Msg = "操作失败!"
  1360. br.ErrMsg = "获取已添加的数量失败,Err:" + err.Error()
  1361. return
  1362. }
  1363. item := new(cygx.CygxArticleType)
  1364. item.ArticleTypeName = name
  1365. item.YanxPermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN + name
  1366. item.IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
  1367. item.IcoLinkM = "https://hzstatic.hzinsights.com/static/temp/20220707202207/20220707/FEvPxfalkGKllLIlBMKumm47zhEx.png"
  1368. item.YanxPermissionId = 1001 + count // id 数量从一千开始计算
  1369. item.CreateTime = time.Now()
  1370. item.ModifyTime = time.Now()
  1371. _, err = cygx.AddCygxArticleType(item)
  1372. if err != nil {
  1373. br.Msg = "操作失败"
  1374. br.ErrMsg = "操作失败,Err:" + err.Error()
  1375. return
  1376. }
  1377. br.Ret = 200
  1378. br.Success = true
  1379. br.Msg = "操作成功"
  1380. br.IsAddLog = true
  1381. }
  1382. // @Title 留言列表详情
  1383. // @Description 获取留言列表详情接口
  1384. // @Param ArticleId query int true "文章ID"
  1385. // @Success 200 {object} cygx.ArticleCommentListResp
  1386. // @router /summaryManage/commentList [get]
  1387. func (this *SummaryManage) CommentList() {
  1388. br := new(models.BaseResponse).Init()
  1389. defer func() {
  1390. this.Data["json"] = br
  1391. this.ServeJSON()
  1392. }()
  1393. sysUser := this.SysUser
  1394. if sysUser == nil {
  1395. br.Msg = "请登录"
  1396. br.ErrMsg = "请登录,SysUser Is Empty"
  1397. return
  1398. }
  1399. articleId, _ := this.GetInt("ArticleId")
  1400. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1401. if articleInfo == nil {
  1402. br.Msg = "操作失败"
  1403. br.ErrMsg = "报告ID错误"
  1404. return
  1405. }
  1406. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1407. resp := new(cygx.ArticleCommentListResp)
  1408. if err != nil {
  1409. br.Msg = "获取留言失败"
  1410. br.ErrMsg = "获取留言失败,Err:" + err.Error()
  1411. return
  1412. }
  1413. resp.List = list
  1414. br.Ret = 200
  1415. br.Success = true
  1416. br.Msg = "获取成功"
  1417. br.Data = resp
  1418. }
  1419. // @Title 提问详情excel表格下载
  1420. // @Description 提问详情excel表格下载接口
  1421. // @Param SummaryManageId query int true "纪要ID"
  1422. // @Success 200 导出成功
  1423. // @router /summaryManage/commentListExport [get]
  1424. func (this *SummaryManage) CommentListExport() {
  1425. br := new(models.BaseResponse).Init()
  1426. defer func() {
  1427. this.Data["json"] = br
  1428. this.ServeJSON()
  1429. }()
  1430. sysUser := this.SysUser
  1431. if sysUser == nil {
  1432. br.Msg = "请登录"
  1433. br.ErrMsg = "请登录,SysUser Is Empty"
  1434. return
  1435. }
  1436. articleId, _ := this.GetInt("ArticleId")
  1437. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1438. if articleInfo == nil {
  1439. br.Msg = "操作失败"
  1440. br.ErrMsg = "报告ID错误"
  1441. return
  1442. }
  1443. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1444. if err != nil {
  1445. br.Msg = "获取失败"
  1446. br.ErrMsg = "获取失败,Err:" + err.Error()
  1447. return
  1448. }
  1449. //创建excel
  1450. dir, err := os.Executable()
  1451. exPath := filepath.Dir(dir)
  1452. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1453. xlsxFile := xlsx.NewFile()
  1454. if err != nil {
  1455. br.Msg = "生成文件失败"
  1456. br.ErrMsg = "生成文件失败"
  1457. return
  1458. }
  1459. style := xlsx.NewStyle()
  1460. alignment := xlsx.Alignment{
  1461. Horizontal: "center",
  1462. Vertical: "center",
  1463. WrapText: true,
  1464. }
  1465. style.Alignment = alignment
  1466. style.ApplyAlignment = true
  1467. sheet, err := xlsxFile.AddSheet("名单")
  1468. if err != nil {
  1469. br.Msg = "新增Sheet失败"
  1470. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1471. return
  1472. }
  1473. //标头
  1474. rowTitle := sheet.AddRow()
  1475. cellA := rowTitle.AddCell()
  1476. cellA.Value = "姓名"
  1477. cellB := rowTitle.AddCell()
  1478. cellB.Value = "公司名称"
  1479. cellC := rowTitle.AddCell()
  1480. cellC.Value = "留言"
  1481. cellD := rowTitle.AddCell()
  1482. cellD.Value = "提交时间"
  1483. for _, item := range list {
  1484. row := sheet.AddRow()
  1485. cellA := row.AddCell()
  1486. cellA.Value = item.RealName
  1487. cellB := row.AddCell()
  1488. cellB.Value = item.CompanyName
  1489. cellC := row.AddCell()
  1490. cellC.Value = item.Content
  1491. cellD := row.AddCell()
  1492. cellD.Value = item.CreateTime
  1493. }
  1494. err = xlsxFile.Save(downLoadnFilePath)
  1495. if err != nil {
  1496. br.Msg = "保存文件失败"
  1497. br.ErrMsg = "保存文件失败"
  1498. return
  1499. }
  1500. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1501. downloadFileName := "留言列表" + randStr + ".xlsx"
  1502. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1503. defer func() {
  1504. os.Remove(downLoadnFilePath)
  1505. }()
  1506. br.Success = true
  1507. br.Ret = 200
  1508. br.Msg = "导出成功"
  1509. }
  1510. // @Title 文章的见范围修改
  1511. // @Description 文章的见范围修改接口
  1512. // @Param request body cygx.SummaryManageIdRep true "type json string"
  1513. // @Success 200 操作成功
  1514. // @router /summaryManage/visibleRange [post]
  1515. func (this *SummaryManage) VisibleRange() {
  1516. br := new(models.BaseResponse).Init()
  1517. defer func() {
  1518. this.Data["json"] = br
  1519. this.ServeJSON()
  1520. }()
  1521. AdminUser := this.SysUser
  1522. indexName := utils.IndexName
  1523. if AdminUser == nil {
  1524. br.Msg = "请登录"
  1525. br.ErrMsg = "请登录,用户信息为空"
  1526. br.Ret = 408
  1527. return
  1528. }
  1529. var req cygx.SummaryManageIdRep
  1530. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1531. if err != nil {
  1532. br.Msg = "参数解析异常!"
  1533. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1534. return
  1535. }
  1536. articleId := req.ArticleId
  1537. item := new(cygx.CygxArticle)
  1538. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  1539. if articleInfo == nil {
  1540. br.Msg = "操作失败"
  1541. br.ErrMsg = "纪要ID错误"
  1542. return
  1543. }
  1544. if errInfo != nil {
  1545. br.Msg = "操作失败"
  1546. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  1547. return
  1548. }
  1549. item.ArticleId = articleId
  1550. item.Title = articleInfo.Title
  1551. item.BodyText = articleInfo.BodyText
  1552. item.Body = articleInfo.Body
  1553. item.PublishDate = articleInfo.PublishDate
  1554. item.ExpertBackground = articleInfo.ExpertBackground
  1555. item.CategoryId = articleInfo.CategoryId
  1556. if articleInfo.VisibleRange == 0 {
  1557. item.VisibleRange = 1
  1558. item.AdminId = AdminUser.AdminId
  1559. item.AdminName = AdminUser.RealName
  1560. services.EsAddOrEditData(item)
  1561. //go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  1562. } else {
  1563. item.AdminId = articleInfo.AdminId
  1564. item.AdminName = articleInfo.AdminName
  1565. item.PublishStatus = 0
  1566. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  1567. //go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  1568. }
  1569. err = cygx.ArticleVisibleRange(item)
  1570. if err != nil {
  1571. br.Msg = "操作失败"
  1572. br.ErrMsg = "操作失败,Err:" + err.Error()
  1573. return
  1574. }
  1575. //专项调研类型的报告单独走发送
  1576. if articleInfo.SubCategoryName == "专项调研" {
  1577. if item.PublishStatus == 1 {
  1578. cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
  1579. }
  1580. } else {
  1581. if item.PublishStatus == 1 {
  1582. articleIndustrial, _ := cygx.GetIndustrialManagemenDetailByAaticle(articleInfo.ArticleId)
  1583. if articleIndustrial.ArticleId > 0 {
  1584. go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  1585. }
  1586. }
  1587. }
  1588. go cygxService.UpdateArticleResourceData(item.ArticleId) //写入首页最新 cygx_resource_data 表
  1589. br.Ret = 200
  1590. br.Success = true
  1591. br.Msg = "操作成功"
  1592. br.IsAddLog = true
  1593. }