summary_manage.go 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638
  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. br.Ret = 200
  309. br.Success = true
  310. br.Msg = "操作成功"
  311. br.IsAddLog = true
  312. }
  313. // @Title 文章的发布与取消发布
  314. // @Description 文章的发布与取消发布接口
  315. // @Param request body cygx.SummaryManageIdRep true "type json string"
  316. // @Success 200 操作成功
  317. // @router /summaryManage/PublishAndCancel [post]
  318. func (this *SummaryManage) PublishAndCancel() {
  319. br := new(models.BaseResponse).Init()
  320. defer func() {
  321. this.Data["json"] = br
  322. this.ServeJSON()
  323. }()
  324. AdminUser := this.SysUser
  325. indexName := utils.IndexName
  326. if AdminUser == nil {
  327. br.Msg = "请登录"
  328. br.ErrMsg = "请登录,用户信息为空"
  329. br.Ret = 408
  330. return
  331. }
  332. var req cygx.SummaryManageIdRep
  333. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  334. if err != nil {
  335. br.Msg = "参数解析异常!"
  336. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  337. return
  338. }
  339. articleId := req.ArticleId
  340. item := new(cygx.CygxArticle)
  341. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  342. if articleInfo == nil {
  343. br.Msg = "操作失败"
  344. br.ErrMsg = "纪要ID错误"
  345. return
  346. }
  347. if errInfo != nil {
  348. br.Msg = "操作失败"
  349. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  350. return
  351. }
  352. item.ArticleId = articleId
  353. item.Title = articleInfo.Title
  354. item.BodyText = articleInfo.BodyText
  355. item.Body = articleInfo.Body
  356. item.PublishDate = articleInfo.PublishDate
  357. item.ExpertBackground = articleInfo.ExpertBackground
  358. item.CategoryId = articleInfo.CategoryId
  359. //item.Annotation, _ = GetReportContentTextSubNew(v.Annotation)
  360. //item.Abstract, _ = GetReportContentTextSubNew(v.Abstract)
  361. if articleInfo.PublishStatus == 0 {
  362. item.PublishStatus = 1
  363. item.AdminId = AdminUser.AdminId
  364. item.AdminName = AdminUser.RealName
  365. services.EsAddOrEditData(item)
  366. go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  367. } else {
  368. item.AdminId = articleInfo.AdminId
  369. item.AdminName = articleInfo.AdminName
  370. item.PublishStatus = 0
  371. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  372. go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  373. }
  374. err = cygx.PublishAndCancel(item)
  375. if err != nil {
  376. br.Msg = "操作失败"
  377. br.ErrMsg = "操作失败,Err:" + err.Error()
  378. return
  379. }
  380. //专项调研类型的报告单独走发送
  381. if articleInfo.SubCategoryName == "专项调研" {
  382. if item.PublishStatus == 1 {
  383. cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
  384. }
  385. } else {
  386. if item.PublishStatus == 1 {
  387. articleIndustrial, _ := cygx.GetIndustrialManagemenDetailByAaticle(articleInfo.ArticleId)
  388. if articleIndustrial.ArticleId > 0 {
  389. go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  390. }
  391. go elastic.AddComprehensiveIndustrialSource("Yx", item.ArticleId) // 查研观向10.6 更新搜索引擎的产业资源包
  392. }
  393. }
  394. go elastic.AddComprehensiveArticle(articleId) // ES添加文章:报告、纪要
  395. br.Ret = 200
  396. br.Success = true
  397. br.Msg = "操作成功"
  398. br.IsAddLog = true
  399. }
  400. // @Title 文章详情
  401. // @Description 获取文章详情接口
  402. // @Param ArticleId query int true "文章ID"
  403. // @Success Ret=200 {object} cygx.SummaryManageEditDetail
  404. // @router /summaryManage/detail [get]
  405. func (this *SummaryManage) Detail() {
  406. br := new(models.BaseResponse).Init()
  407. defer func() {
  408. this.Data["json"] = br
  409. this.ServeJSON()
  410. }()
  411. AdminUser := this.SysUser
  412. if AdminUser == nil {
  413. br.Msg = "请登录"
  414. br.ErrMsg = "请登录,用户信息为空"
  415. br.Ret = 408
  416. return
  417. }
  418. articleId, _ := this.GetInt("ArticleId")
  419. if articleId < 1 {
  420. br.Msg = "请输入文章ID"
  421. return
  422. }
  423. articleInfo, err := cygx.GetArticleIdInfoByreportIdEdit(articleId)
  424. if err != nil {
  425. br.Msg = "文章内容不存在"
  426. br.ErrMsg = "纪要ID错误,Err:" + err.Error()
  427. return
  428. }
  429. detail, _ := cygx.GetArticleDepartmentDateilByDepartmentId(articleInfo.DepartmentId)
  430. industrialList, err := cygx.GetIndustrialArticleGroupManagementList(articleInfo.ArticleId)
  431. if err != nil && err.Error() != utils.ErrNoRow() {
  432. br.Msg = "获取信息失败"
  433. br.ErrMsg = "获取活动关联的产业列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  434. return
  435. }
  436. subjectList, err := cygx.GetSubjectArticleGroupManagementList(articleInfo.ArticleId)
  437. if err != nil && err.Error() != utils.ErrNoRow() {
  438. br.Msg = "获取信息失败"
  439. br.ErrMsg = "获取活动关联的标的列表信息失败,Err:" + err.Error() + "activityId:" + strconv.Itoa(articleInfo.ArticleId)
  440. return
  441. }
  442. articleInfo.ListIndustrial = industrialList
  443. articleInfo.ListSubject = subjectList
  444. resp := cygx.ArticleDetailResp{
  445. ArticleId: articleInfo.ArticleId,
  446. Title: articleInfo.Title,
  447. Abstract: articleInfo.Abstract,
  448. Body: articleInfo.Body,
  449. PublishStatus: articleInfo.PublishStatus,
  450. PublishDate: articleInfo.PublishDate,
  451. CreateDate: articleInfo.CreateDate,
  452. LastUpdatedTime: articleInfo.LastUpdatedTime,
  453. ArticleIdMd5: articleInfo.ArticleIdMd5,
  454. SellerAndMobile: articleInfo.SellerAndMobile,
  455. SubjectName: articleInfo.SubjectName,
  456. IndustryName: articleInfo.IndustryName,
  457. DepartmentId: articleInfo.DepartmentId,
  458. ChartPermissionIds: articleInfo.ChartPermissionIds,
  459. ArticleTypeId: articleInfo.ArticleTypeId,
  460. ArticleTypeName: articleInfo.ArticleTypeName,
  461. ListIndustrial: articleInfo.ListIndustrial,
  462. ListSubject: articleInfo.ListSubject,
  463. ReportLink: articleInfo.ReportLink,
  464. ImgUrl: detail.ImgUrl,
  465. NickName: detail.NickName,
  466. }
  467. br.Ret = 200
  468. br.Success = true
  469. br.Msg = "获取成功"
  470. br.Data = resp
  471. }
  472. // @Title 删除纪要
  473. // @Description 删除纪要接口
  474. // @Param request body cygx.SummaryManageIdRep true "type json string"
  475. // @Success Ret=200
  476. // @router /summaryManage/delete [post]
  477. func (this *SummaryManage) Delete() {
  478. br := new(models.BaseResponse).Init()
  479. defer func() {
  480. this.Data["json"] = br
  481. this.ServeJSON()
  482. }()
  483. sysUser := this.SysUser
  484. indexName := utils.IndexName
  485. if sysUser == nil {
  486. br.Msg = "请登录"
  487. br.ErrMsg = "请登录,SysUser Is Empty"
  488. br.Ret = 408
  489. return
  490. }
  491. var req cygx.SummaryManageIdRep
  492. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  493. if err != nil {
  494. br.Msg = "参数解析异常!"
  495. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  496. return
  497. }
  498. articleId := req.ArticleId
  499. if articleId < 1 {
  500. br.Msg = "请输入产业ID"
  501. return
  502. }
  503. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  504. if articleInfo == nil {
  505. br.Msg = "操作失败"
  506. br.ErrMsg = "纪要ID错误"
  507. return
  508. }
  509. if errInfo != nil {
  510. br.Msg = "操作失败"
  511. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  512. return
  513. }
  514. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  515. err = cygx.DeleteArticleReport(articleInfo.ArticleId)
  516. if err != nil {
  517. br.Msg = "删除信息失败"
  518. br.ErrMsg = "删除信息失败,Err:" + err.Error()
  519. return
  520. }
  521. go cygxService.UpdateResourceData(articleInfo.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  522. br.Ret = 200
  523. br.Success = true
  524. br.Msg = "已删除"
  525. br.IsAddLog = true
  526. }
  527. // @Title 纪要列表
  528. // @Description 获取纪要列表接口
  529. // @Param PageSize query int true "每页数据条数"
  530. // @Param CurrentIndex query int true "当前页页码,从1开始"
  531. // @Param PublishStatus query int true "发布状态 ,0未发布,1已发布,传2查询所有"
  532. // @Param CategoryName query string true "行业名称"
  533. // @Param StartDate query string true "开始时间 ,列如2021-03-06 "
  534. // @Param EndDate query string true "结束时间,列如2021-03-06 "
  535. // @Param KeyWord query string true "搜索关键词"
  536. // @Param Label query string true "搜索报告标签"
  537. // @Param NickName query string true "作者昵称"
  538. // @Param Departmentİd query int false "作者İd"
  539. // @Param ArticleTypeId query int false `"文章类型ID"
  540. // @Success 200 {object} cygx.GetSummaryManageListRep
  541. // @router /summaryManage/list [get]
  542. func (this *SummaryManage) SummaryManageList() {
  543. br := new(models.BaseResponse).Init()
  544. defer func() {
  545. this.Data["json"] = br
  546. this.ServeJSON()
  547. }()
  548. sysUser := this.SysUser
  549. if sysUser == nil {
  550. br.Msg = "请登录"
  551. br.ErrMsg = "请登录,SysUser Is Empty"
  552. return
  553. }
  554. pageSize, _ := this.GetInt("PageSize")
  555. currentIndex, _ := this.GetInt("CurrentIndex")
  556. publishStatus, _ := this.GetInt("PublishStatus")
  557. categoryName := this.GetString("CategoryName")
  558. startDate := this.GetString("StartDate")
  559. endDate := this.GetString("EndDate")
  560. keyWord := this.GetString("KeyWord")
  561. label := this.GetString("Label")
  562. nickName := this.GetString("NickName")
  563. departmentİd, _ := this.GetInt("Departmentİd")
  564. articleTypeId, _ := this.GetInt("ArticleTypeId")
  565. resp := new(cygx.GetSummaryManageListRep)
  566. var startSize int
  567. if pageSize <= 0 {
  568. pageSize = utils.PageSize20
  569. }
  570. if currentIndex <= 0 {
  571. currentIndex = 1
  572. }
  573. startSize = utils.StartIndex(currentIndex, pageSize)
  574. var condition string
  575. var pars []interface{}
  576. condition += ` WHERE art.article_type_id >0 `
  577. if articleTypeId > 0 {
  578. condition += ` AND art.article_type_id = ` + strconv.Itoa(articleTypeId)
  579. }
  580. if keyWord != "" {
  581. condition += ` AND (art.title LIKE '%` + keyWord + `%' ) `
  582. }
  583. if nickName != "" {
  584. condition += ` AND (art.seller_and_mobile LIKE '%` + nickName + `%' ) `
  585. }
  586. if departmentİd > 0 {
  587. condition += ` AND art.department_id = ` + strconv.Itoa(departmentİd)
  588. }
  589. //行业名称
  590. if categoryName != "" {
  591. condition += ` AND art.category_name LIKE '%` + categoryName + `%' `
  592. }
  593. if startDate != "" {
  594. condition += ` AND art.publish_date >= ` + "'" + startDate + " 00:00:00'"
  595. }
  596. if endDate != "" {
  597. condition += ` AND art.publish_date <= ` + "'" + endDate + " 23:59:59'"
  598. }
  599. if startDate != "" || endDate != "" {
  600. condition += ` AND art.publish_status =1 `
  601. }
  602. if publishStatus == 0 || publishStatus == 1 {
  603. condition += ` AND art.publish_status = ` + strconv.Itoa(publishStatus)
  604. }
  605. //如果标签列表不为空则作以下关联搜索
  606. if label != "" {
  607. managementIds, err := cygx.GetManagementIdsByNameLike(label)
  608. if err != nil {
  609. br.Msg = "获取信息失败"
  610. br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
  611. return
  612. }
  613. subjectIds, err := cygx.GetIndustrialSubjectIdsByNameLike(label)
  614. if err != nil {
  615. br.Msg = "获取信息失败"
  616. br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
  617. return
  618. }
  619. var articleIdmanagement string
  620. var articleIdsubject string
  621. var articleIds string
  622. if managementIds != "" {
  623. articleIdmanagement, err = cygx.GetArticleIdsByIndustrialManagementId(managementIds)
  624. if err != nil {
  625. br.Msg = "获取信息失败"
  626. br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
  627. return
  628. }
  629. }
  630. if subjectIds != "" {
  631. articleIdsubject, err = cygx.GetArticleIdsBySubjectId(subjectIds)
  632. if err != nil {
  633. br.Msg = "获取信息失败"
  634. br.ErrMsg = "获取活动ID信息失败,Err:" + err.Error()
  635. return
  636. }
  637. }
  638. if articleIdmanagement != "" && articleIdsubject != "" {
  639. articleIds = articleIdmanagement + "," + articleIdsubject
  640. } else if articleIdmanagement != "" && articleIdsubject == "" {
  641. articleIds = articleIdmanagement
  642. } else if articleIdmanagement == "" && articleIdsubject != "" {
  643. articleIds = articleIdsubject
  644. }
  645. if articleIds != "" {
  646. condition += ` AND art.article_id IN (` + articleIds + `)`
  647. } else {
  648. // 如果标签关联的报告为空,那么就直接返回空
  649. page := paging.GetPaging(currentIndex, pageSize, 0)
  650. resp.List = make([]*cygx.CygxArticleList, 0)
  651. resp.Paging = page
  652. br.Ret = 200
  653. br.Success = true
  654. br.Msg = "获取成功"
  655. br.Data = resp
  656. return
  657. }
  658. }
  659. total, err := cygx.GetASummaryManageCount(condition, pars)
  660. if err != nil {
  661. br.Msg = "获取失败"
  662. br.ErrMsg = "获取失败,Err:" + err.Error()
  663. return
  664. }
  665. condition += ` GROUP BY art.article_id `
  666. condition += ` ORDER BY art.publish_date DESC `
  667. list, errList := cygx.GetSummaryManageList(condition, pars, startSize, pageSize)
  668. if errList != nil {
  669. br.Msg = "获取失败"
  670. br.ErrMsg = "获取失败,Err:" + errList.Error()
  671. return
  672. }
  673. var articleIdStr string
  674. for _, v := range list {
  675. articleIdStr += strconv.Itoa(v.ArticleId) + ","
  676. }
  677. articleIdStr = strings.TrimRight(articleIdStr, ",")
  678. // 查研观向7.4-报告关联多个产业
  679. mapIndustrial := make(map[int]string)
  680. mapSubject := make(map[string]string)
  681. if articleIdStr != "" {
  682. industrialList, err := cygx.GetIndustrialArticleGroupListByarticleIds(articleIdStr)
  683. if err != nil {
  684. br.Msg = "获取失败"
  685. br.ErrMsg = "获取失败,GetIndustrialArticleGroupListByarticleIds Err:" + err.Error()
  686. return
  687. }
  688. subjectList, err := cygx.GetSubjectArticleGroupListByarticleIds(articleIdStr)
  689. if err != nil {
  690. br.Msg = "获取失败"
  691. br.ErrMsg = "获取失败,GetSubjectArticleGroupListByarticleIds Err:" + err.Error()
  692. return
  693. }
  694. //合并活动对应的多个标的
  695. for _, v := range subjectList {
  696. mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)] += v.SubjectName + "/"
  697. }
  698. //活动对应的产业
  699. for _, v := range industrialList {
  700. var labelSubject string
  701. labelSubject = mapSubject[fmt.Sprint(v.ArticleId, "_", v.IndustrialManagementId)]
  702. if labelSubject != "" {
  703. mapIndustrial[v.ArticleId] += v.IndustryName + "--" + strings.TrimRight(labelSubject, "/") + ","
  704. } else {
  705. mapIndustrial[v.ArticleId] += v.IndustryName + ","
  706. }
  707. }
  708. }
  709. for k, v := range list {
  710. if v.PublishStatus == 0 {
  711. list[k].PublishDate = ""
  712. } else {
  713. list[k].PublishDate = utils.TimeRemoveHms2(v.PublishDate)
  714. }
  715. if mapIndustrial[v.ArticleId] != "" {
  716. list[k].IndustryName = strings.TrimRight(mapIndustrial[v.ArticleId], ",")
  717. }
  718. }
  719. page := paging.GetPaging(currentIndex, pageSize, total)
  720. resp.List = list
  721. resp.Paging = page
  722. br.Ret = 200
  723. br.Success = true
  724. br.Msg = "获取成功"
  725. br.Data = resp
  726. }
  727. // @Title 敏捷搜索关键词的列表
  728. // @Description 获取敏捷搜索关键词的列表接口
  729. // @Success 200 {object} cygx.SummaryFastsearchKeywordsListResp
  730. // @router /summaryManage/fastSearchKeWord [get]
  731. func (this *SummaryManage) FastSearch() {
  732. br := new(models.BaseResponse).Init()
  733. defer func() {
  734. this.Data["json"] = br
  735. this.ServeJSON()
  736. }()
  737. AdminUser := this.SysUser
  738. if AdminUser == nil {
  739. br.Msg = "请登录"
  740. br.ErrMsg = "请登录,用户信息为空"
  741. br.Ret = 408
  742. return
  743. }
  744. resp := new(cygx.SummaryFastsearchKeywordsListResp)
  745. list, err := cygx.GetSummaryFastsearchKeywordsList()
  746. if err != nil {
  747. br.Msg = "获取失败"
  748. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  749. return
  750. }
  751. resp.List = list
  752. br.Ret = 200
  753. br.Success = true
  754. br.Msg = "获取成功"
  755. br.Data = resp
  756. }
  757. // @Title 新增和修改敏捷搜索关键词的列表
  758. // @Description 新增和修改敏捷搜索关键词的列表接口
  759. // @Param request body cygx.SummaryFastsearchKeywordsResp true "type json string"
  760. // @Success Ret=200
  761. // @router /summaryManage/editFastSearchKeWord [post]
  762. func (this *SummaryManage) EditFastSearch() {
  763. br := new(models.BaseResponse).Init()
  764. defer func() {
  765. this.Data["json"] = br
  766. this.ServeJSON()
  767. }()
  768. AdminUser := this.SysUser
  769. if AdminUser == nil {
  770. br.Msg = "请登录"
  771. br.ErrMsg = "请登录,用户信息为空"
  772. br.Ret = 408
  773. return
  774. }
  775. req := new(cygx.SummaryFastsearchKeywordsResp)
  776. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  777. if err != nil {
  778. br.Msg = "参数解析异常!"
  779. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  780. return
  781. }
  782. keyWord := req.KeyWord
  783. slicekeyWord := strings.Split(keyWord, ",")
  784. var items []*cygx.CygxSummaryFastsearchKeywords
  785. for _, v := range slicekeyWord {
  786. var item = new(cygx.CygxSummaryFastsearchKeywords)
  787. item.CreateTime = time.Now()
  788. item.KeyWord = v
  789. items = append(items, item)
  790. fmt.Println(v)
  791. }
  792. _, err = cygx.AddSummaryFastsearchKeywords(items)
  793. if err != nil {
  794. br.Msg = "操作失败"
  795. br.ErrMsg = "操作失败,Err:" + err.Error()
  796. return
  797. }
  798. br.Ret = 200
  799. br.Success = true
  800. br.Msg = "操作成功"
  801. }
  802. // @Title 永续客户是否展示
  803. // @Description 获取永续客户是否展示详情接口
  804. // @Success 200 {object} cygx.SummaryFastsearchKeywordsListResp
  805. // @router /summaryManage/sustainableDetail [get]
  806. func (this *SummaryManage) Sustainable() {
  807. br := new(models.BaseResponse).Init()
  808. defer func() {
  809. this.Data["json"] = br
  810. this.ServeJSON()
  811. }()
  812. AdminUser := this.SysUser
  813. if AdminUser == nil {
  814. br.Msg = "请登录"
  815. br.ErrMsg = "请登录,用户信息为空"
  816. br.Ret = 408
  817. return
  818. }
  819. detail, err := cygx.GetCygxConfigDetail()
  820. if err != nil {
  821. br.Msg = "获取失败"
  822. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  823. return
  824. }
  825. if detail.ConfigValue == "1" {
  826. detail.OperationButton = true
  827. }
  828. br.Ret = 200
  829. br.Success = true
  830. br.Msg = "获取成功"
  831. br.Data = detail
  832. }
  833. // @Title 修改永续客户是否展示
  834. // @Description 修改永续客户是否展示接口
  835. // @Success Ret=200
  836. // @router /summaryManage/sustainableEdit [post]
  837. func (this *SummaryManage) EditSustainable() {
  838. br := new(models.BaseResponse).Init()
  839. defer func() {
  840. this.Data["json"] = br
  841. this.ServeJSON()
  842. }()
  843. AdminUser := this.SysUser
  844. if AdminUser == nil {
  845. br.Msg = "请登录"
  846. br.ErrMsg = "请登录,SysUser Is Empty"
  847. br.Ret = 408
  848. return
  849. }
  850. var newValue int
  851. detail, err := cygx.GetCygxConfigDetail()
  852. if err != nil {
  853. br.Msg = "获取失败"
  854. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  855. return
  856. }
  857. if detail.ConfigValue == "1" {
  858. newValue = 0
  859. } else {
  860. newValue = 1
  861. }
  862. err = cygx.CygxConfigUpdate(newValue)
  863. if err != nil {
  864. br.Msg = "操作失败"
  865. br.ErrMsg = "操作失败,Err:" + err.Error()
  866. return
  867. }
  868. br.Ret = 200
  869. br.Success = true
  870. br.Msg = "操作成功"
  871. }
  872. // @Title 提问列表详情
  873. // @Description 获取提问列表详情接口
  874. // @Param ArticleId query int true "文章ID"
  875. // @Success 200 {object} cygx.ActivityHelpAskListResp
  876. // @router /summaryManage/askList [get]
  877. func (this *SummaryManage) AskList() {
  878. br := new(models.BaseResponse).Init()
  879. defer func() {
  880. this.Data["json"] = br
  881. this.ServeJSON()
  882. }()
  883. sysUser := this.SysUser
  884. if sysUser == nil {
  885. br.Msg = "请登录"
  886. br.ErrMsg = "请登录,SysUser Is Empty"
  887. return
  888. }
  889. articleId, _ := this.GetInt("ArticleId")
  890. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  891. if articleInfo == nil {
  892. br.Msg = "操作失败"
  893. br.ErrMsg = "报告ID错误"
  894. return
  895. }
  896. list, err := cygx.GetArticleAskList(articleInfo.ArticleId)
  897. resp := new(cygx.ArticleAskListResp)
  898. if err != nil {
  899. br.Msg = "获取失败"
  900. br.ErrMsg = "获取失败,Err:" + err.Error()
  901. return
  902. }
  903. resp.List = list
  904. br.Ret = 200
  905. br.Success = true
  906. br.Msg = "获取成功"
  907. br.Data = resp
  908. }
  909. // @Title 提问详情excel表格下载
  910. // @Description 提问详情excel表格下载接口
  911. // @Param SummaryManageId query int true "纪要ID"
  912. // @Success 200 导出成功
  913. // @router /summaryManage/askListExport [get]
  914. func (this *SummaryManage) AskListExport() {
  915. br := new(models.BaseResponse).Init()
  916. defer func() {
  917. this.Data["json"] = br
  918. this.ServeJSON()
  919. }()
  920. sysUser := this.SysUser
  921. if sysUser == nil {
  922. br.Msg = "请登录"
  923. br.ErrMsg = "请登录,SysUser Is Empty"
  924. return
  925. }
  926. articleId, _ := this.GetInt("ArticleId")
  927. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  928. if articleInfo == nil {
  929. br.Msg = "操作失败"
  930. br.ErrMsg = "报告ID错误"
  931. return
  932. }
  933. list, err := cygx.GetArticleAskList(articleInfo.ArticleId)
  934. if err != nil {
  935. br.Msg = "获取失败"
  936. br.ErrMsg = "获取失败,Err:" + err.Error()
  937. return
  938. }
  939. //创建excel
  940. dir, err := os.Executable()
  941. exPath := filepath.Dir(dir)
  942. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  943. xlsxFile := xlsx.NewFile()
  944. if err != nil {
  945. br.Msg = "生成文件失败"
  946. br.ErrMsg = "生成文件失败"
  947. return
  948. }
  949. style := xlsx.NewStyle()
  950. alignment := xlsx.Alignment{
  951. Horizontal: "center",
  952. Vertical: "center",
  953. WrapText: true,
  954. }
  955. style.Alignment = alignment
  956. style.ApplyAlignment = true
  957. sheet, err := xlsxFile.AddSheet("名单")
  958. if err != nil {
  959. br.Msg = "新增Sheet失败"
  960. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  961. return
  962. }
  963. //标头
  964. rowTitle := sheet.AddRow()
  965. cellA := rowTitle.AddCell()
  966. cellA.Value = "姓名"
  967. cellB := rowTitle.AddCell()
  968. cellB.Value = "公司名称"
  969. cellC := rowTitle.AddCell()
  970. cellC.Value = "问题"
  971. cellD := rowTitle.AddCell()
  972. cellD.Value = "提交时间"
  973. for _, item := range list {
  974. row := sheet.AddRow()
  975. cellA := row.AddCell()
  976. cellA.Value = item.RealName
  977. cellB := row.AddCell()
  978. cellB.Value = item.CompanyName
  979. cellC := row.AddCell()
  980. cellC.Value = item.Content
  981. cellD := row.AddCell()
  982. cellD.Value = item.CreateTime
  983. }
  984. err = xlsxFile.Save(downLoadnFilePath)
  985. if err != nil {
  986. br.Msg = "保存文件失败"
  987. br.ErrMsg = "保存文件失败"
  988. return
  989. }
  990. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  991. downloadFileName := "问题列表" + randStr + ".xlsx"
  992. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  993. defer func() {
  994. os.Remove(downLoadnFilePath)
  995. }()
  996. br.Success = true
  997. br.Ret = 200
  998. br.Msg = "导出成功"
  999. }
  1000. // @Title 作者关注详情
  1001. // @Description 获取作者关注详情列表接口
  1002. // @Param DepartmentId query int true "作者ID"
  1003. // @Success 200 {object} cygx.GetFailSignupListRep
  1004. // @router /summaryManage/department/followList [get]
  1005. func (this *SummaryManage) FepartmentfollowList() {
  1006. br := new(models.BaseResponse).Init()
  1007. defer func() {
  1008. this.Data["json"] = br
  1009. this.ServeJSON()
  1010. }()
  1011. sysUser := this.SysUser
  1012. if sysUser == nil {
  1013. br.Msg = "请登录"
  1014. br.ErrMsg = "请登录,SysUser Is Empty"
  1015. return
  1016. }
  1017. departmentId, _ := this.GetInt("DepartmentId")
  1018. detail, _ := cygx.GetArticleDepartmentDateilById(departmentId)
  1019. if detail == nil {
  1020. br.Msg = "作者不存在"
  1021. br.ErrMsg = "获取信息失败,Err:DepartmentId:" + strconv.Itoa(departmentId)
  1022. return
  1023. }
  1024. list, err := cygx.GetCygxDepartmentFllowList(departmentId)
  1025. resp := new(cygx.CygxDepartmentFllowRep)
  1026. if err != nil {
  1027. br.Msg = "获取失败"
  1028. br.ErrMsg = "获取列表失败,Err:" + err.Error()
  1029. return
  1030. }
  1031. resp.NickName = detail.Content
  1032. resp.FllowNum = len(list)
  1033. resp.List = list
  1034. br.Ret = 200
  1035. br.Success = true
  1036. br.Msg = "获取成功"
  1037. br.Data = resp
  1038. }
  1039. // @Title 文章收藏详情
  1040. // @Description 获取文章收藏详情列表接口
  1041. // @Param ArticleId query int true "文章ID"
  1042. // @Success 200 {object} cygx.GetFailSignupListRep
  1043. // @router /summaryManage/articleCollection [get]
  1044. func (this *SummaryManage) ArticleCollection() {
  1045. br := new(models.BaseResponse).Init()
  1046. defer func() {
  1047. this.Data["json"] = br
  1048. this.ServeJSON()
  1049. }()
  1050. sysUser := this.SysUser
  1051. if sysUser == nil {
  1052. br.Msg = "请登录"
  1053. br.ErrMsg = "请登录,SysUser Is Empty"
  1054. return
  1055. }
  1056. articleId, _ := this.GetInt("ArticleId")
  1057. _, err := cygx.GetArticleIdInfoByArticleId(articleId)
  1058. if err != nil {
  1059. br.Msg = "报告不存在"
  1060. br.ErrMsg = "查询失败,Err:" + err.Error() + strconv.Itoa(articleId)
  1061. return
  1062. }
  1063. list, err := cygx.GetCygxArticleCollectionList(articleId)
  1064. if err != nil {
  1065. br.Msg = "获取失败"
  1066. br.ErrMsg = "获取列表失败,Err:" + err.Error()
  1067. return
  1068. }
  1069. br.Ret = 200
  1070. br.Success = true
  1071. br.Msg = "获取成功"
  1072. br.Data = list
  1073. }
  1074. // @Title 阅读明细下载
  1075. // @Description 获取阅读明细下载接口
  1076. // @Param ArticleId query int true "文章ID"
  1077. // @Success 200 导出成功
  1078. // @router /summaryManage/articleHistoryExport [get]
  1079. func (this *SummaryManage) ArticleHistoryExport() {
  1080. br := new(models.BaseResponse).Init()
  1081. defer func() {
  1082. this.Data["json"] = br
  1083. this.ServeJSON()
  1084. }()
  1085. AdminUser := this.SysUser
  1086. if AdminUser == nil {
  1087. br.Msg = "请登录"
  1088. br.ErrMsg = "请登录,SysUser Is Empty"
  1089. return
  1090. }
  1091. articleId, _ := this.GetInt("ArticleId")
  1092. articleInfo, err := cygx.GetArticleIdInfoByArticleId(articleId)
  1093. if err != nil {
  1094. br.Msg = "报告不存在"
  1095. br.ErrMsg = "查询失败,Err:" + err.Error() + strconv.Itoa(articleId)
  1096. return
  1097. }
  1098. resp := new(cygx.CanDownload)
  1099. adminInfo, errAdmin := system.GetSysUserById(AdminUser.AdminId)
  1100. if errAdmin != nil {
  1101. br.Msg = "获取失败"
  1102. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  1103. return
  1104. }
  1105. if adminInfo.Role == "admin" || adminInfo.Role == "researcher" || adminInfo.RealName == "汪洋" {
  1106. resp.IsCanDownload = true
  1107. }
  1108. var condition string
  1109. if resp.IsCanDownload == false {
  1110. if adminInfo.RoleTypeCode == "rai_group" {
  1111. //组长查看本组所有组员
  1112. condition = ` AND h.company_id IN (SELECT company_id FROM user_seller_relation WHERE seller_id IN (SELECT admin_id FROM admin WHERE group_id = (SELECT group_id FROM admin WHERE admin_id = ` + strconv.Itoa(AdminUser.AdminId) + ` ) ) GROUP BY company_id) `
  1113. } else {
  1114. //组员查看自己
  1115. condition = ` AND h.company_id IN (SELECT company_id FROM user_seller_relation WHERE seller_id = ` + strconv.Itoa(AdminUser.AdminId) + ` GROUP BY company_id) `
  1116. }
  1117. }
  1118. mapMobileSellWithUser := make(map[string]string)
  1119. if condition != "" {
  1120. mobileList, err := cygx.GetSellerUserMobileList(condition)
  1121. if err != nil && err.Error() != utils.ErrNoRow() {
  1122. br.Msg = "获取失败"
  1123. br.ErrMsg = "获取策略品台数据失败,Err:" + err.Error()
  1124. return
  1125. }
  1126. if len(mobileList) > 0 {
  1127. for _, v := range mobileList {
  1128. mapMobileSellWithUser[v.Mobile] = v.Mobile
  1129. }
  1130. }
  1131. }
  1132. condition += ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则
  1133. list, err := cygx.GetArticleHistoryList(articleId, condition)
  1134. if err != nil {
  1135. br.Msg = "获取失败"
  1136. br.ErrMsg = "获取失败,Err:" + err.Error()
  1137. return
  1138. }
  1139. listClPv, err := cygx.GetCygxCelueArticleHistoryRecordPvAll(strconv.Itoa(articleId))
  1140. if err != nil && err.Error() != utils.ErrNoRow() {
  1141. br.Msg = "获取失败"
  1142. br.ErrMsg = "获取策略品台数据失败,Err:" + err.Error()
  1143. return
  1144. }
  1145. var mobilesCl string
  1146. if len(listClPv) > 0 {
  1147. for _, v := range listClPv {
  1148. if v.Mobile != "" {
  1149. mobilesCl += v.Mobile + ","
  1150. }
  1151. }
  1152. }
  1153. mapMobileCompany := make(map[string]string)
  1154. mapMobileSellName := make(map[string]string)
  1155. mobilesCl = strings.TrimRight(mobilesCl, ",")
  1156. if mobilesCl != "" {
  1157. listClCompanyName, err := cygx.GetCygxCelueArticleComapnyName(mobilesCl)
  1158. if err != nil && err.Error() != utils.ErrNoRow() {
  1159. br.Msg = "获取失败"
  1160. br.ErrMsg = "获取策略品台关联查研观向的用户信息失败,Err:" + err.Error()
  1161. return
  1162. }
  1163. if len(listClCompanyName) > 0 {
  1164. for _, v := range listClCompanyName {
  1165. mapMobileCompany[v.Mobile] = v.CompanyName
  1166. mapMobileSellName[v.Mobile] = v.RealName
  1167. }
  1168. }
  1169. }
  1170. for k, v := range listClPv {
  1171. if v.Mobile != "" {
  1172. if mapMobileCompany[v.Mobile] != "" {
  1173. listClPv[k].CompanyName = mapMobileCompany[v.Mobile]
  1174. }
  1175. if mapMobileSellName[v.Mobile] != "" {
  1176. listClPv[k].SellerName = mapMobileSellName[v.Mobile]
  1177. }
  1178. }
  1179. }
  1180. var listClPvPower []*cygx.ArticleHistoryRep
  1181. if len(mapMobileSellWithUser) != 0 {
  1182. for _, v := range listClPv {
  1183. if mapMobileSellWithUser[v.Mobile] != "" {
  1184. listClPvPower = append(listClPvPower, v)
  1185. }
  1186. }
  1187. } else {
  1188. listClPvPower = listClPv
  1189. }
  1190. //创建excel
  1191. dir, err := os.Executable()
  1192. exPath := filepath.Dir(dir)
  1193. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1194. xlsxFile := xlsx.NewFile()
  1195. if err != nil {
  1196. br.Msg = "生成文件失败"
  1197. br.ErrMsg = "生成文件失败"
  1198. return
  1199. }
  1200. style := xlsx.NewStyle()
  1201. alignment := xlsx.Alignment{
  1202. Horizontal: "center",
  1203. Vertical: "center",
  1204. WrapText: true,
  1205. }
  1206. style.Alignment = alignment
  1207. style.ApplyAlignment = true
  1208. for pidIndex := 0; pidIndex <= 1; pidIndex++ {
  1209. var sheetName string
  1210. var listDate []*cygx.ArticleHistoryRep
  1211. if pidIndex == 0 {
  1212. sheetName = "查研观向"
  1213. listDate = list
  1214. } else {
  1215. sheetName = "策略平台"
  1216. listDate = listClPvPower
  1217. }
  1218. sheet, err := xlsxFile.AddSheet(sheetName)
  1219. if err != nil {
  1220. br.Msg = "新增Sheet失败"
  1221. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1222. return
  1223. }
  1224. //标头
  1225. rowTitle := sheet.AddRow()
  1226. cellA := rowTitle.AddCell()
  1227. cellA.Value = "姓名"
  1228. cellB := rowTitle.AddCell()
  1229. cellB.Value = "手机号"
  1230. cellC := rowTitle.AddCell()
  1231. cellC.Value = "公司名称"
  1232. cellD := rowTitle.AddCell()
  1233. cellD.Value = "所属权益销售"
  1234. cellE := rowTitle.AddCell()
  1235. cellE.Value = "阅读时长(秒)"
  1236. cellF := rowTitle.AddCell()
  1237. cellF.Value = "阅读时间"
  1238. for _, item := range listDate {
  1239. row := sheet.AddRow()
  1240. cellA := row.AddCell()
  1241. cellA.Value = item.RealName
  1242. cellB := row.AddCell()
  1243. cellB.Value = item.Mobile
  1244. cellC := row.AddCell()
  1245. cellC.Value = item.CompanyName
  1246. cellD := row.AddCell()
  1247. cellD.Value = item.SellerName
  1248. cellE := row.AddCell()
  1249. cellE.Value = item.StopTime
  1250. cellF := row.AddCell()
  1251. cellF.Value = item.CreateTime
  1252. }
  1253. }
  1254. err = xlsxFile.Save(downLoadnFilePath)
  1255. if err != nil {
  1256. br.Msg = "保存文件失败"
  1257. br.ErrMsg = "保存文件失败"
  1258. return
  1259. }
  1260. //randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1261. downloadFileName := articleInfo.Title + ".xlsx"
  1262. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1263. defer func() {
  1264. os.Remove(downLoadnFilePath)
  1265. }()
  1266. br.Success = true
  1267. br.Ret = 200
  1268. br.Msg = "导出成功"
  1269. }
  1270. // @Title 文章类型列表
  1271. // @Description 文章类型列表接口
  1272. // @Success 200 {object} cygx.ArticleTypeListResp
  1273. // @router /summaryManage/articleType/list [get]
  1274. func (this *ActivityTypeCoAntroller) ArticleTypeList() {
  1275. br := new(models.BaseResponse).Init()
  1276. defer func() {
  1277. this.Data["json"] = br
  1278. this.ServeJSON()
  1279. }()
  1280. sysUser := this.SysUser
  1281. if sysUser == nil {
  1282. br.Msg = "请登录"
  1283. br.ErrMsg = "请登录,SysUser Is Empty"
  1284. br.Ret = 408
  1285. return
  1286. }
  1287. resp := new(cygx.ArticleTypeListResp)
  1288. list, err := cygx.GetCygxArticleTypeList()
  1289. if err != nil {
  1290. br.Msg = "获取失败"
  1291. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1292. return
  1293. }
  1294. typelist, err := cygx.GetArticleTypeAndAbstract()
  1295. if err != nil {
  1296. br.Msg = "获取失败"
  1297. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1298. return
  1299. }
  1300. resp.AbstractList = typelist
  1301. resp.List = list
  1302. br.Ret = 200
  1303. br.Success = true
  1304. br.Msg = "获取成功"
  1305. br.Data = resp
  1306. }
  1307. // @Title 新增文章类型
  1308. // @Description 新增文章类型接口
  1309. // @Param request body cygx.CygxArticleReq true "type json string"
  1310. // @Success Ret=200
  1311. // @router /summaryManage/articleType/add [post]
  1312. func (this *SummaryManage) ArticleTypeListAdd() {
  1313. br := new(models.BaseResponse).Init()
  1314. defer func() {
  1315. this.Data["json"] = br
  1316. this.ServeJSON()
  1317. }()
  1318. AdminUser := this.SysUser
  1319. if AdminUser == nil {
  1320. br.Msg = "请登录"
  1321. br.ErrMsg = "请登录,用户信息为空"
  1322. br.Ret = 408
  1323. return
  1324. }
  1325. req := new(cygx.CygxArticleReq)
  1326. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1327. if err != nil {
  1328. br.Msg = "参数解析异常!"
  1329. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1330. return
  1331. }
  1332. name := req.ArticleTypeName
  1333. if name == "" {
  1334. br.Msg = "内容不能为空!"
  1335. return
  1336. }
  1337. var condition string
  1338. condition = ` AND article_type_name = '` + name + `'`
  1339. count, err := cygx.GetCygxArticleTypeCount(condition)
  1340. if err != nil {
  1341. br.Msg = "操作失败!"
  1342. br.ErrMsg = "获取数量失败,Err:" + err.Error()
  1343. return
  1344. }
  1345. if count > 0 {
  1346. br.Msg = "该类型已存在,请重新填写!"
  1347. return
  1348. }
  1349. count, err = cygx.GetCygxArticleTypeCount("")
  1350. if err != nil {
  1351. br.Msg = "操作失败!"
  1352. br.ErrMsg = "获取已添加的数量失败,Err:" + err.Error()
  1353. return
  1354. }
  1355. item := new(cygx.CygxArticleType)
  1356. item.ArticleTypeName = name
  1357. item.YanxPermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN + name
  1358. item.IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
  1359. item.IcoLinkM = "https://hzstatic.hzinsights.com/static/temp/20220707202207/20220707/FEvPxfalkGKllLIlBMKumm47zhEx.png"
  1360. item.YanxPermissionId = 1001 + count // id 数量从一千开始计算
  1361. item.CreateTime = time.Now()
  1362. item.ModifyTime = time.Now()
  1363. _, err = cygx.AddCygxArticleType(item)
  1364. if err != nil {
  1365. br.Msg = "操作失败"
  1366. br.ErrMsg = "操作失败,Err:" + err.Error()
  1367. return
  1368. }
  1369. br.Ret = 200
  1370. br.Success = true
  1371. br.Msg = "操作成功"
  1372. br.IsAddLog = true
  1373. }
  1374. // @Title 留言列表详情
  1375. // @Description 获取留言列表详情接口
  1376. // @Param ArticleId query int true "文章ID"
  1377. // @Success 200 {object} cygx.ArticleCommentListResp
  1378. // @router /summaryManage/commentList [get]
  1379. func (this *SummaryManage) CommentList() {
  1380. br := new(models.BaseResponse).Init()
  1381. defer func() {
  1382. this.Data["json"] = br
  1383. this.ServeJSON()
  1384. }()
  1385. sysUser := this.SysUser
  1386. if sysUser == nil {
  1387. br.Msg = "请登录"
  1388. br.ErrMsg = "请登录,SysUser Is Empty"
  1389. return
  1390. }
  1391. articleId, _ := this.GetInt("ArticleId")
  1392. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1393. if articleInfo == nil {
  1394. br.Msg = "操作失败"
  1395. br.ErrMsg = "报告ID错误"
  1396. return
  1397. }
  1398. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1399. resp := new(cygx.ArticleCommentListResp)
  1400. if err != nil {
  1401. br.Msg = "获取留言失败"
  1402. br.ErrMsg = "获取留言失败,Err:" + err.Error()
  1403. return
  1404. }
  1405. resp.List = list
  1406. br.Ret = 200
  1407. br.Success = true
  1408. br.Msg = "获取成功"
  1409. br.Data = resp
  1410. }
  1411. // @Title 提问详情excel表格下载
  1412. // @Description 提问详情excel表格下载接口
  1413. // @Param SummaryManageId query int true "纪要ID"
  1414. // @Success 200 导出成功
  1415. // @router /summaryManage/commentListExport [get]
  1416. func (this *SummaryManage) CommentListExport() {
  1417. br := new(models.BaseResponse).Init()
  1418. defer func() {
  1419. this.Data["json"] = br
  1420. this.ServeJSON()
  1421. }()
  1422. sysUser := this.SysUser
  1423. if sysUser == nil {
  1424. br.Msg = "请登录"
  1425. br.ErrMsg = "请登录,SysUser Is Empty"
  1426. return
  1427. }
  1428. articleId, _ := this.GetInt("ArticleId")
  1429. articleInfo, _ := cygx.GetArticleIdInfoByArticleId(articleId)
  1430. if articleInfo == nil {
  1431. br.Msg = "操作失败"
  1432. br.ErrMsg = "报告ID错误"
  1433. return
  1434. }
  1435. list, err := cygx.GetArticleCommentList(articleInfo.ArticleId)
  1436. if err != nil {
  1437. br.Msg = "获取失败"
  1438. br.ErrMsg = "获取失败,Err:" + err.Error()
  1439. return
  1440. }
  1441. //创建excel
  1442. dir, err := os.Executable()
  1443. exPath := filepath.Dir(dir)
  1444. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  1445. xlsxFile := xlsx.NewFile()
  1446. if err != nil {
  1447. br.Msg = "生成文件失败"
  1448. br.ErrMsg = "生成文件失败"
  1449. return
  1450. }
  1451. style := xlsx.NewStyle()
  1452. alignment := xlsx.Alignment{
  1453. Horizontal: "center",
  1454. Vertical: "center",
  1455. WrapText: true,
  1456. }
  1457. style.Alignment = alignment
  1458. style.ApplyAlignment = true
  1459. sheet, err := xlsxFile.AddSheet("名单")
  1460. if err != nil {
  1461. br.Msg = "新增Sheet失败"
  1462. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  1463. return
  1464. }
  1465. //标头
  1466. rowTitle := sheet.AddRow()
  1467. cellA := rowTitle.AddCell()
  1468. cellA.Value = "姓名"
  1469. cellB := rowTitle.AddCell()
  1470. cellB.Value = "公司名称"
  1471. cellC := rowTitle.AddCell()
  1472. cellC.Value = "留言"
  1473. cellD := rowTitle.AddCell()
  1474. cellD.Value = "提交时间"
  1475. for _, item := range list {
  1476. row := sheet.AddRow()
  1477. cellA := row.AddCell()
  1478. cellA.Value = item.RealName
  1479. cellB := row.AddCell()
  1480. cellB.Value = item.CompanyName
  1481. cellC := row.AddCell()
  1482. cellC.Value = item.Content
  1483. cellD := row.AddCell()
  1484. cellD.Value = item.CreateTime
  1485. }
  1486. err = xlsxFile.Save(downLoadnFilePath)
  1487. if err != nil {
  1488. br.Msg = "保存文件失败"
  1489. br.ErrMsg = "保存文件失败"
  1490. return
  1491. }
  1492. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  1493. downloadFileName := "留言列表" + randStr + ".xlsx"
  1494. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  1495. defer func() {
  1496. os.Remove(downLoadnFilePath)
  1497. }()
  1498. br.Success = true
  1499. br.Ret = 200
  1500. br.Msg = "导出成功"
  1501. }
  1502. // @Title 文章的见范围修改
  1503. // @Description 文章的见范围修改接口
  1504. // @Param request body cygx.SummaryManageIdRep true "type json string"
  1505. // @Success 200 操作成功
  1506. // @router /summaryManage/visibleRange [post]
  1507. func (this *SummaryManage) VisibleRange() {
  1508. br := new(models.BaseResponse).Init()
  1509. defer func() {
  1510. this.Data["json"] = br
  1511. this.ServeJSON()
  1512. }()
  1513. AdminUser := this.SysUser
  1514. indexName := utils.IndexName
  1515. if AdminUser == nil {
  1516. br.Msg = "请登录"
  1517. br.ErrMsg = "请登录,用户信息为空"
  1518. br.Ret = 408
  1519. return
  1520. }
  1521. var req cygx.SummaryManageIdRep
  1522. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1523. if err != nil {
  1524. br.Msg = "参数解析异常!"
  1525. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1526. return
  1527. }
  1528. articleId := req.ArticleId
  1529. item := new(cygx.CygxArticle)
  1530. articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
  1531. if articleInfo == nil {
  1532. br.Msg = "操作失败"
  1533. br.ErrMsg = "纪要ID错误"
  1534. return
  1535. }
  1536. if errInfo != nil {
  1537. br.Msg = "操作失败"
  1538. br.ErrMsg = "操作失败,Err:" + errInfo.Error()
  1539. return
  1540. }
  1541. item.ArticleId = articleId
  1542. item.Title = articleInfo.Title
  1543. item.BodyText = articleInfo.BodyText
  1544. item.Body = articleInfo.Body
  1545. item.PublishDate = articleInfo.PublishDate
  1546. item.ExpertBackground = articleInfo.ExpertBackground
  1547. item.CategoryId = articleInfo.CategoryId
  1548. if articleInfo.VisibleRange == 0 {
  1549. item.VisibleRange = 1
  1550. item.AdminId = AdminUser.AdminId
  1551. item.AdminName = AdminUser.RealName
  1552. services.EsAddOrEditData(item)
  1553. go cygxService.UpdateResourceData(item.ArticleId, "article", "add", time.Now().Format(utils.FormatDateTime))
  1554. } else {
  1555. item.AdminId = articleInfo.AdminId
  1556. item.AdminName = articleInfo.AdminName
  1557. item.PublishStatus = 0
  1558. services.EsDeleteData(indexName, strconv.Itoa(articleInfo.ArticleId))
  1559. go cygxService.UpdateResourceData(item.ArticleId, "article", "delete", time.Now().Format(utils.FormatDateTime))
  1560. }
  1561. err = cygx.ArticleVisibleRange(item)
  1562. if err != nil {
  1563. br.Msg = "操作失败"
  1564. br.ErrMsg = "操作失败,Err:" + err.Error()
  1565. return
  1566. }
  1567. //专项调研类型的报告单独走发送
  1568. if articleInfo.SubCategoryName == "专项调研" {
  1569. if item.PublishStatus == 1 {
  1570. cygxService.SendWxMsgWithCygxActivitySpecialArticle(item.ArticleId)
  1571. }
  1572. } else {
  1573. if item.PublishStatus == 1 {
  1574. articleIndustrial, _ := cygx.GetIndustrialManagemenDetailByAaticle(articleInfo.ArticleId)
  1575. if articleIndustrial.ArticleId > 0 {
  1576. go cygxService.DoArticleOnenIdWxTemplateMsg(articleId, 1)
  1577. }
  1578. }
  1579. }
  1580. br.Ret = 200
  1581. br.Success = true
  1582. br.Msg = "操作成功"
  1583. br.IsAddLog = true
  1584. }