report_selection.go 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  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. cygxService "hongze/hz_crm_api/services/cygx"
  12. "hongze/hz_crm_api/utils"
  13. "os"
  14. "path/filepath"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. // 报告精选
  20. type ReportSelectionController struct {
  21. controllers.BaseAuthController
  22. }
  23. // @Title 报告精选内容的保存与发布
  24. // @Description 报告精选内容的保存与发布接口
  25. // @Param request body cygx.AddCygxReportSelection true "type json string"
  26. // @Success 200 操作成功
  27. // @router /reportSelection/PreserveAndPublish [post]
  28. func (this *ReportSelectionController) PreserveAndPublish() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. AdminUser := this.SysUser
  35. if AdminUser == nil {
  36. br.Msg = "请登录"
  37. br.ErrMsg = "请登录,用户信息为空"
  38. br.Ret = 408
  39. return
  40. }
  41. var req cygx.AddCygxReportSelection
  42. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  43. if err != nil {
  44. br.Msg = "参数解析异常!"
  45. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  46. return
  47. }
  48. if req.AddType != "1" && req.AddType != "2" {
  49. br.Msg = "请选择正确的添加方式!"
  50. return
  51. }
  52. if req.AddType == "2" && req.InheritPeriods == "" {
  53. br.Msg = "请选择继承第几期!"
  54. return
  55. }
  56. list := req.List
  57. listChartSummary := req.ListChartSummary
  58. reportLink := req.ReportLink
  59. if len(list) < 1 {
  60. br.Msg = "产业资源内容不可为空!"
  61. return
  62. }
  63. if len(listChartSummary) < 1 {
  64. br.Msg = "行业核心逻辑汇总不能为空!"
  65. return
  66. }
  67. if reportLink == "" {
  68. br.Msg = "详细报告链接,不能为空!"
  69. return
  70. }
  71. articleIdLink, err := cygxService.GetReportLinkToArticleid(reportLink)
  72. if err != nil {
  73. br.Msg = "操作失败"
  74. br.ErrMsg = "解析报告链接ID失败,Err:" + err.Error()
  75. return
  76. }
  77. if articleIdLink == 0 {
  78. br.Msg = "详细报告链接格式错误"
  79. br.ErrMsg = "解析报告链接ID失败,报告链接:" + reportLink
  80. return
  81. }
  82. var items []*cygx.CygxReportSelectionLog
  83. var itemsChart []*cygx.CygxReportSelectionChartLog
  84. condition := ` AND have_publish = 1 `
  85. var pars []interface{}
  86. total, err := cygx.GetCygxReportSelection(condition, pars)
  87. if err != nil {
  88. br.Msg = "获取失败"
  89. br.ErrMsg = "获取失败,Err:" + err.Error()
  90. return
  91. }
  92. itemCrs := new(cygx.CygxReportSelection)
  93. itemCrs.AdminId = AdminUser.AdminId
  94. itemCrs.AdminName = AdminUser.RealName
  95. itemCrs.Title = req.Title
  96. itemCrs.Department = req.Department
  97. itemCrs.AddType = req.AddType
  98. itemCrs.PublishStatus = req.DoType
  99. if req.DoType == 1 {
  100. itemCrs.HavePublish = 1
  101. itemCrs.Periods = strconv.Itoa(total + 1)
  102. }
  103. itemCrs.PublishDate = utils.StrTimeToTime(req.PublishDate + " 00:00:00")
  104. itemCrs.CreateTime = time.Now()
  105. itemCrs.LastUpdatedTime = time.Now()
  106. itemCrs.InheritPeriods = req.InheritPeriods
  107. itemCrs.ProductDescription = req.ProductDescription
  108. itemCrs.UpdateDescription = req.UpdateDescription
  109. itemCrs.ReportLink = req.ReportLink
  110. itemCrs.FocusOn = cygxService.GetRichtext(req.FocusOn)
  111. itemCrs.MarketStrategy = cygxService.GetRichtext(req.MarketStrategy)
  112. for _, v := range list {
  113. item := new(cygx.CygxReportSelectionLog)
  114. item.ChartPermissionId = v.ChartPermissionId
  115. item.CreateTime = time.Now()
  116. item.Body = cygxService.GetRichtext(v.Body)
  117. item.IndustrialSubjectId = v.IndustrialSubjectId
  118. item.SubjectName = v.IndustrialSubjectName
  119. item.IndustrialManagementId = v.IndustrialManagementId
  120. item.OverviewArticleId = v.OverviewArticleId
  121. item.IsNew = v.IsNew
  122. if len(v.CompanyLabel) > 0 {
  123. item.CompanyLabel = cygxService.ArticleComPanyLabelToStr(v.CompanyLabel)
  124. }
  125. items = append(items, item)
  126. }
  127. for _, v := range listChartSummary {
  128. item := new(cygx.CygxReportSelectionChartLog)
  129. item.ChartPermissionId = v.ChartPermissionId
  130. item.CreateTime = time.Now()
  131. item.Body = cygxService.GetRichtext(v.BodyChartSummary)
  132. itemsChart = append(itemsChart, item)
  133. }
  134. if req.ArticleId == 0 {
  135. articleId, err := cygx.AddCygxReportSelectionOrm(itemCrs, items, itemsChart)
  136. if err != nil {
  137. br.Msg = "操作失败"
  138. br.ErrMsg = "发布失败,Err:" + err.Error()
  139. return
  140. }
  141. req.ArticleId = int(articleId)
  142. } else {
  143. detail, err := cygx.GetCygxReportSelectionInfoById(req.ArticleId)
  144. if err != nil {
  145. br.Msg = "内容不存在"
  146. br.ErrMsg = "操作失败,Err:" + err.Error()
  147. return
  148. }
  149. if itemCrs.PublishStatus == 0 {
  150. itemCrs.PublishStatus = detail.PublishStatus
  151. itemCrs.AdminId = detail.AdminId
  152. itemCrs.AdminName = detail.AdminName
  153. }
  154. if detail.HavePublish == 1 {
  155. itemCrs.Periods = detail.Periods
  156. itemCrs.HavePublish = detail.HavePublish
  157. }
  158. itemCrs.ArticleId = req.ArticleId
  159. _, err = cygx.UpdateCygxReportSelectionOrm(itemCrs, items, itemsChart)
  160. if err != nil {
  161. br.Msg = "操作失败"
  162. br.ErrMsg = "发布失败,Err:" + err.Error()
  163. return
  164. }
  165. }
  166. //if req.DoType == 1 {
  167. //cygxService.DoThisWeekLastWeekWxTemplateMsg(itemCrs.Title, itemCrs.PublishDate.Format(utils.FormatDateTime), itemCrs.ProductDescription, req.ArticleId, 1)
  168. //}
  169. br.Ret = 200
  170. br.Success = true
  171. br.Msg = "操作成功"
  172. br.IsAddLog = true
  173. }
  174. // @Title 删除报告精选内容
  175. // @Description 删除报告精选内容接口
  176. // @Param request body cygx.ResearchSummaryId true "type json string"
  177. // @Success Ret=200
  178. // @router /reportSelection/delete [post]
  179. func (this *ReportSelectionController) Delete() {
  180. br := new(models.BaseResponse).Init()
  181. defer func() {
  182. this.Data["json"] = br
  183. this.ServeJSON()
  184. }()
  185. AdminUser := this.SysUser
  186. if AdminUser == nil {
  187. br.Msg = "请登录"
  188. br.ErrMsg = "请登录,SysUser Is Empty"
  189. br.Ret = 408
  190. return
  191. }
  192. var req cygx.ResearchSummaryId
  193. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  194. if err != nil {
  195. br.Msg = "参数解析异常!"
  196. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  197. return
  198. }
  199. articleId := req.ArticleId
  200. detail, err := cygx.GetCygxReportSelectionInfoById(articleId)
  201. if err != nil {
  202. br.Msg = "内容不存在"
  203. br.ErrMsg = "操作失败,Err:" + err.Error()
  204. return
  205. }
  206. if detail.HavePublish != 0 {
  207. br.Msg = "删除失败"
  208. br.ErrMsg = "已经存在期数无法删除"
  209. return
  210. }
  211. err = cygx.DeleteCygxReportSelection(articleId)
  212. if err != nil {
  213. br.Msg = "删除信息失败"
  214. br.ErrMsg = "删除信息失败,Err:" + err.Error()
  215. return
  216. }
  217. br.Ret = 200
  218. br.Success = true
  219. br.Msg = "已删除"
  220. br.IsAddLog = true
  221. }
  222. // @Title 报告精选内容详情
  223. // @Description 报告精选内容详情接口
  224. // @Param ArticleId query int true "报告Id"
  225. // @Param Periods query string true "期数Id"
  226. // @Success Ret=200 {object} cygx.DetailCygxReportSelectionRep
  227. // @router /reportSelection/detail [get]
  228. func (this *ReportSelectionController) Detail() {
  229. br := new(models.BaseResponse).Init()
  230. defer func() {
  231. this.Data["json"] = br
  232. this.ServeJSON()
  233. }()
  234. AdminUser := this.SysUser
  235. if AdminUser == nil {
  236. br.Msg = "请登录"
  237. br.ErrMsg = "请登录,用户信息为空"
  238. br.Ret = 408
  239. return
  240. }
  241. var errArt error
  242. detail := new(cygx.CygxReportSelectionRep)
  243. articleId, _ := this.GetInt("ArticleId")
  244. periods := this.GetString("Periods")
  245. if articleId > 0 && periods == "" {
  246. detail, errArt = cygx.GetCygxReportSelectionInfoById(articleId)
  247. if errArt != nil {
  248. br.Msg = "内容不存在"
  249. br.ErrMsg = "内容不存在,Err:" + errArt.Error()
  250. return
  251. }
  252. } else {
  253. detail, errArt = cygx.GetCygxReportSelectionInfoByPeriods(periods)
  254. if errArt != nil {
  255. br.Msg = "内容不存在"
  256. br.ErrMsg = "内容不存在通过期数获取详情错误,Err:" + errArt.Error() + "期数:" + periods
  257. return
  258. }
  259. }
  260. articleId = detail.ArticleId
  261. resp := new(cygx.DetailCygxReportSelectionRep)
  262. resp.ArticleId = detail.ArticleId
  263. resp.AddType = detail.AddType
  264. resp.InheritPeriods = detail.InheritPeriods
  265. resp.Title = detail.Title
  266. resp.Department = detail.Department
  267. resp.PublishStatus = detail.PublishStatus
  268. resp.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format("2006-01-02")
  269. resp.ProductDescription = detail.ProductDescription
  270. resp.UpdateDescription = detail.UpdateDescription
  271. resp.FocusOn = detail.FocusOn
  272. resp.MarketStrategy = detail.MarketStrategy
  273. resp.ReportLink = detail.ReportLink
  274. if detail.InheritPeriods != "" {
  275. resp.InheritPeriodsName = "第" + detail.InheritPeriods + "期"
  276. }
  277. var condition string
  278. condition = ` AND chart_permission_id IN (19,20,21,22) `
  279. listMore, err := cygx.GetChartPermissionDetail(condition)
  280. var list []*cygx.CygxReportSelectionChart
  281. //排序方式修改
  282. permissionNameList := []cygx.CygxChartPermissionName{}
  283. //获取行业核心逻辑汇总
  284. listChartLog, err := cygx.GetCygxReportSelectionChartLogRepList(articleId)
  285. if err != nil {
  286. br.Msg = "获取失败"
  287. br.ErrMsg = "获取失败,Err:" + err.Error()
  288. return
  289. }
  290. mapChartLog := make(map[string]string)
  291. for _, v := range listChartLog {
  292. mapChartLog[v.ChartPermissionName] = v.BodyChartSummary
  293. permissionNameList = append(permissionNameList, cygx.CygxChartPermissionName{v.ChartPermissionName})
  294. }
  295. for _, v := range permissionNameList {
  296. for _, v2 := range listMore {
  297. if v.ChartPermissionName == v2.ChartPermissionName {
  298. item := new(cygx.CygxReportSelectionChart)
  299. item.ChartPermissionName = v2.ChartPermissionName
  300. item.ChartPermissionId = v2.ChartPermissionId
  301. //item.List = make([]string, 0)
  302. list = append(list, item)
  303. }
  304. }
  305. }
  306. //获取关联的文章信息
  307. mapArticle := make(map[int]string)
  308. listSelectionLog, err := cygx.GetReportSelectionlogListAll(articleId)
  309. if err != nil {
  310. br.Msg = "获取失败"
  311. br.ErrMsg = "GetReportSelectionlogListAll,Err:" + err.Error()
  312. return
  313. }
  314. articleStockMap, _ := cygxService.GetArticleStockMap()
  315. var overviewArticleIdArr []int
  316. for _, v := range listSelectionLog {
  317. if v.OverviewArticleId > 0 {
  318. overviewArticleIdArr = append(overviewArticleIdArr, v.OverviewArticleId)
  319. }
  320. }
  321. for _, v := range articleStockMap {
  322. overviewArticleIdArr = append(overviewArticleIdArr, v)
  323. }
  324. lenActivityIds := len(overviewArticleIdArr)
  325. if lenActivityIds > 0 {
  326. var pars []interface{}
  327. conditionArticle := ` AND article_id IN (` + utils.GetOrmInReplace(lenActivityIds) + `) `
  328. pars = append(pars, overviewArticleIdArr)
  329. articleList, err := cygx.GetCygxArticleList(conditionArticle, pars, 0, lenActivityIds)
  330. if err != nil {
  331. br.Msg = "获取失败"
  332. br.ErrMsg = "GetCygxArticleList,Err:" + err.Error()
  333. return
  334. }
  335. for _, v := range articleList {
  336. mapArticle[v.ArticleId] = v.Title
  337. }
  338. }
  339. //获取标的关联的日志
  340. for k, v := range list {
  341. listSon, err := cygx.GetCygxReportSelectionLogRepListSon(articleId, v.ChartPermissionId)
  342. if err != nil {
  343. br.Msg = "获取失败"
  344. br.ErrMsg = "获取子分类失败,Err:" + err.Error()
  345. return
  346. }
  347. for kIndustrial, vIndustrial := range listSon {
  348. //如果报告精选关联的产业被删除了 则做以下处理
  349. //if vIndustrial.IndustrialManagementName == "" {
  350. industrialNames, err := cygx.GetindustrialManagementNamesBySubjectName(vIndustrial.IndustrialSubjectName, vIndustrial.ChartPermissionId)
  351. if err != nil {
  352. br.Msg = "获取失败!"
  353. br.ErrMsg = "获取删除删除之后的产业失败,Err:" + err.Error() + vIndustrial.IndustrialSubjectId
  354. return
  355. }
  356. if vIndustrial.Label != "" {
  357. vIndustrial.CompanyLabel = strings.Split(vIndustrial.Label, "{|}")
  358. }
  359. listSon[kIndustrial].IndustrialManagementName = industrialNames
  360. listSon[kIndustrial].OverviewArticleId = articleStockMap[vIndustrial.IndustrialSubjectName]
  361. listSon[kIndustrial].OverviewArticleTitle = mapArticle[listSon[kIndustrial].OverviewArticleId]
  362. if periods != "" {
  363. listSon[kIndustrial].IsNew = 0
  364. }
  365. }
  366. list[k].List = listSon
  367. list[k].BodyChartSummary = mapChartLog[v.ChartPermissionName]
  368. }
  369. resp.List = list
  370. br.Ret = 200
  371. br.Success = true
  372. br.Msg = "获取成功"
  373. br.Data = resp
  374. }
  375. // @Title 报告精选列表
  376. // @Description 获取报告精选列表接口
  377. // @Param PageSize query int true "每页数据条数"
  378. // @Param CurrentIndex query int true "当前页页码,从1开始"
  379. // @Param PublishStatus query int false "发布状态 ,1未发布,1已发布,传2查询所有"
  380. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  381. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  382. // @Success 200 {object} cygx.CygxReportSelectionListRep
  383. // @router /reportSelection/list [get]
  384. func (this *ReportSelectionController) List() {
  385. br := new(models.BaseResponse).Init()
  386. defer func() {
  387. this.Data["json"] = br
  388. this.ServeJSON()
  389. }()
  390. AdminUser := this.SysUser
  391. if AdminUser == nil {
  392. br.Msg = "请登录"
  393. br.ErrMsg = "请登录,SysUser Is Empty"
  394. return
  395. }
  396. pageSize, _ := this.GetInt("PageSize")
  397. currentIndex, _ := this.GetInt("CurrentIndex")
  398. publishStatus, _ := this.GetInt("PublishStatus")
  399. startDate := this.GetString("StartDate")
  400. endDate := this.GetString("EndDate")
  401. var startSize int
  402. if pageSize <= 0 {
  403. pageSize = utils.PageSize20
  404. }
  405. if currentIndex <= 0 {
  406. currentIndex = 1
  407. }
  408. startSize = utils.StartIndex(currentIndex, pageSize)
  409. var condition string
  410. var pars []interface{}
  411. if startDate != "" {
  412. condition += ` AND rs.publish_date >= ` + "'" + startDate + " 00:00:00'"
  413. }
  414. if endDate != "" {
  415. condition += ` AND rs.publish_date <= ` + "'" + endDate + " 23:59:59'"
  416. }
  417. if publishStatus == 0 || publishStatus == 1 {
  418. condition += ` AND rs.publish_status = ` + strconv.Itoa(publishStatus)
  419. }
  420. total, err := cygx.GetCygxReportSelection(condition, pars)
  421. if err != nil {
  422. br.Msg = "获取失败"
  423. br.ErrMsg = "获取失败,Err:" + err.Error()
  424. return
  425. }
  426. list, err := cygx.GetReportSelectionList(condition, pars, startSize, pageSize)
  427. if err != nil {
  428. br.Msg = "获取失败"
  429. br.ErrMsg = "获取失败,Err:" + err.Error()
  430. return
  431. }
  432. for k, v := range list {
  433. if v.Periods != "" && v.Periods != "0" {
  434. list[k].Periods = "第" + v.Periods + "期"
  435. } else {
  436. list[k].Periods = ""
  437. }
  438. list[k].PublishDate = utils.StrTimeToTime(v.PublishDate).Format("2006-01-02")
  439. }
  440. page := paging.GetPaging(currentIndex, pageSize, total)
  441. resp := new(cygx.CygxReportSelectionListRep)
  442. resp.List = list
  443. resp.Paging = page
  444. br.Ret = 200
  445. br.Success = true
  446. br.Msg = "获取成功"
  447. br.Data = resp
  448. }
  449. // @Title 报告精选的发布与取消发布
  450. // @Description 报告精选的发布与取消发布接口
  451. // @Param request body cygx.ResearchSummaryId true "type json string"
  452. // @Success 200 操作成功
  453. // @router /reportSelection/PublishAndCancel [post]
  454. func (this *ReportSelectionController) PublishAndCancel() {
  455. br := new(models.BaseResponse).Init()
  456. defer func() {
  457. this.Data["json"] = br
  458. this.ServeJSON()
  459. }()
  460. AdminUser := this.SysUser
  461. if AdminUser == nil {
  462. br.Msg = "请登录"
  463. br.ErrMsg = "请登录,用户信息为空"
  464. br.Ret = 408
  465. return
  466. }
  467. var req cygx.ResearchSummaryId
  468. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  469. if err != nil {
  470. br.Msg = "参数解析异常!"
  471. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  472. return
  473. }
  474. articleId := req.ArticleId
  475. detail, err := cygx.GetCygxReportSelectionInfoById(articleId)
  476. if err != nil {
  477. br.Msg = "内容不存在"
  478. br.ErrMsg = "操作失败,Err:" + err.Error()
  479. return
  480. }
  481. item := new(cygx.CygxReportSelectionRep)
  482. item.ArticleId = articleId
  483. if detail.PublishStatus == 0 {
  484. item.PublishStatus = 1
  485. item.AdminId = AdminUser.AdminId
  486. item.AdminName = AdminUser.RealName
  487. //cygxService.DoThisWeekLastWeekWxTemplateMsg(detail.Title, detail.PublishDate, detail.ProductDescription, req.ArticleId, 1)
  488. } else {
  489. item.AdminId = detail.AdminId
  490. item.AdminName = detail.AdminName
  491. item.PublishStatus = 0
  492. }
  493. if detail.HavePublish == 0 {
  494. condition := ` AND have_publish = 1 `
  495. var pars []interface{}
  496. total, err := cygx.GetCygxReportSelection(condition, pars)
  497. if err != nil {
  498. br.Msg = "获取失败"
  499. br.ErrMsg = "获取失败,Err:" + err.Error()
  500. return
  501. }
  502. item.Periods = strconv.Itoa(total + 1)
  503. } else {
  504. item.Periods = detail.Periods
  505. }
  506. err = cygx.ReportSelectionPublishAndCancel(item)
  507. if err != nil {
  508. br.Msg = "操作失败"
  509. br.ErrMsg = "操作失败,Err:" + err.Error()
  510. return
  511. }
  512. br.Ret = 200
  513. br.Success = true
  514. br.Msg = "操作成功"
  515. br.IsAddLog = true
  516. }
  517. // @Title 报告精选初始模板
  518. // @Description 报告精选初始模板接口
  519. // @Success Ret=200 {object} cygx.CygxRSlChartPermissionIcoTmpList
  520. // @router /reportSelection/detailTemplate [get]
  521. func (this *ReportSelectionController) DetailTemplate() {
  522. br := new(models.BaseResponse).Init()
  523. defer func() {
  524. this.Data["json"] = br
  525. this.ServeJSON()
  526. }()
  527. AdminUser := this.SysUser
  528. if AdminUser == nil {
  529. br.Msg = "请登录"
  530. br.ErrMsg = "请登录,用户信息为空"
  531. br.Ret = 408
  532. return
  533. }
  534. resp := new(cygx.CygxRSlChartPermissionIcoTmpList)
  535. var condition string
  536. var list []*cygx.CygxRSlChartPermissionIcoTmp
  537. condition = ` AND chart_permission_id IN (19,20,21,22) `
  538. listMore, err := cygx.GetChartPermissionIcoNew(condition)
  539. if err != nil {
  540. br.Msg = "获取失败"
  541. br.ErrMsg = "获取失败,Err:" + err.Error()
  542. return
  543. }
  544. //排序方式修改
  545. permissionNameList := []cygx.CygxChartPermissionName{{ChartPermissionName: "消费"}, {ChartPermissionName: "医药"}, {ChartPermissionName: "科技"}, {ChartPermissionName: "智造"}}
  546. for _, v := range permissionNameList {
  547. for _, v2 := range listMore {
  548. if v.ChartPermissionName == v2.ChartPermissionName {
  549. item := new(cygx.CygxRSlChartPermissionIcoTmp)
  550. item.ChartPermissionName = v2.ChartPermissionName
  551. item.ChartPermissionSort = v2.ChartPermissionSort
  552. item.ChartPermissionId = v2.ChartPermissionId
  553. item.IcoLink = v2.IcoLink
  554. item.List = make([]string, 0)
  555. list = append(list, item)
  556. }
  557. }
  558. }
  559. resp.List = list
  560. br.Ret = 200
  561. br.Success = true
  562. br.Msg = "获取成功"
  563. br.Data = resp
  564. }
  565. // @Title 期数列表
  566. // @Description 获取期数列表接口
  567. // @Param PageSize query int true "每页数据条数"
  568. // @Param CurrentIndex query int true "当前页页码,从1开始"
  569. // @Success 200 {object} cygx.CygxReportSelectionPeriodsListRep
  570. // @router /reportSelection/listPeriods [get]
  571. func (this *ReportSelectionController) ListPeriods() {
  572. br := new(models.BaseResponse).Init()
  573. defer func() {
  574. this.Data["json"] = br
  575. this.ServeJSON()
  576. }()
  577. AdminUser := this.SysUser
  578. if AdminUser == nil {
  579. br.Msg = "请登录"
  580. br.ErrMsg = "请登录,SysUser Is Empty"
  581. return
  582. }
  583. pageSize, _ := this.GetInt("PageSize")
  584. currentIndex, _ := this.GetInt("CurrentIndex")
  585. var startSize int
  586. if pageSize <= 0 {
  587. pageSize = 1000
  588. }
  589. if currentIndex <= 0 {
  590. currentIndex = 1
  591. }
  592. startSize = utils.StartIndex(currentIndex, pageSize)
  593. var condition string
  594. var pars []interface{}
  595. total, err := cygx.GetCygxReportSelection(condition, pars)
  596. if err != nil {
  597. br.Msg = "获取失败"
  598. br.ErrMsg = "获取失败,Err:" + err.Error()
  599. return
  600. }
  601. list, err := cygx.GetReportSelectionListPeriods(condition, pars, startSize, pageSize)
  602. if err != nil {
  603. br.Msg = "获取失败"
  604. br.ErrMsg = "获取失败,Err:" + err.Error()
  605. return
  606. }
  607. for k, v := range list {
  608. if v.Periods != "" {
  609. list[k].InheritPeriodsName = "第" + v.Periods + "期"
  610. }
  611. }
  612. page := paging.GetPaging(currentIndex, pageSize, total)
  613. resp := new(cygx.CygxReportSelectionPeriodsListRep)
  614. resp.List = list
  615. resp.Paging = page
  616. br.Ret = 200
  617. br.Success = true
  618. br.Msg = "获取成功"
  619. br.Data = resp
  620. }
  621. // @Title 阅读明细下载
  622. // @Description 获取阅读明细下载接口
  623. // @Param ArticleId query int true "文章ID"
  624. // @Param Source query int true "来源 1:报告精选、2:路演精华、3:本周研究汇总、4:上周纪要汇总"
  625. // @Success 200 导出成功
  626. // @router /reportSelection/articleHistoryExport [get]
  627. func (this *ReportSelectionController) ArticleHistoryExport() {
  628. br := new(models.BaseResponse).Init()
  629. defer func() {
  630. this.Data["json"] = br
  631. this.ServeJSON()
  632. }()
  633. AdminUser := this.SysUser
  634. if AdminUser == nil {
  635. br.Msg = "请登录"
  636. br.ErrMsg = "请登录,SysUser Is Empty"
  637. return
  638. }
  639. articleId, _ := this.GetInt("ArticleId")
  640. source, _ := this.GetInt("Source")
  641. resp := new(cygx.CanDownload)
  642. adminInfo, errAdmin := system.GetSysUserById(AdminUser.AdminId)
  643. if errAdmin != nil {
  644. br.Msg = "获取失败"
  645. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  646. return
  647. }
  648. if adminInfo.Role == "admin" || adminInfo.Role == "researcher" || adminInfo.RealName == "汪洋" {
  649. resp.IsCanDownload = true
  650. }
  651. var condition string
  652. if resp.IsCanDownload == false {
  653. if adminInfo.RoleTypeCode == "rai_group" {
  654. //组长查看本组所有组员
  655. 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) `
  656. } else {
  657. //组员查看自己
  658. condition = ` AND h.company_id IN (SELECT company_id FROM user_seller_relation WHERE seller_id = ` + strconv.Itoa(AdminUser.AdminId) + ` GROUP BY company_id) `
  659. }
  660. }
  661. condition += ` AND h.company_id != ` + strconv.Itoa(utils.HZ_COMPANY_ID) // 过滤弘则来源
  662. var list []*cygx.ArticleHistoryRep
  663. var err error
  664. var table string
  665. //"来源 1:报告精选、2:路演精华、3:本周研究汇总、4:上周纪要汇总"
  666. //报告类型,bgjx:报告精选、bzyjhz:本周研究汇总、szjyhz:上周纪要汇总
  667. if source != 2 {
  668. if source == 1 {
  669. table = "cygx_report_selection"
  670. condition += ` AND h.report_type = 'bgjx'`
  671. } else if source == 3 {
  672. table = "cygx_research_summary"
  673. condition += ` AND h.report_type = 'bzyjhz'`
  674. } else {
  675. table = "cygx_minutes_summary"
  676. condition += ` AND h.report_type = 'szjyhz'`
  677. }
  678. list, err = cygx.GetReportSelectionHistoryList(articleId, condition)
  679. if err != nil {
  680. br.Msg = "获取失败"
  681. br.ErrMsg = "获取失败,Err:" + err.Error()
  682. return
  683. }
  684. } else {
  685. table = "cygx_article"
  686. list, err = cygx.GetArticleHistoryListOld(articleId, condition)
  687. if err != nil {
  688. br.Msg = "获取失败"
  689. br.ErrMsg = "获取失败,Err:" + err.Error()
  690. return
  691. }
  692. }
  693. //根据不同类型获取不同报告的详情
  694. articleInfo, err := cygx.GetArticleInfoByIdAndTable(table, articleId)
  695. if err != nil {
  696. br.Msg = "获取失败"
  697. br.ErrMsg = "获取报告详情失败,Err:" + err.Error()
  698. return
  699. }
  700. fmt.Println(articleInfo)
  701. //
  702. //创建excel
  703. dir, err := os.Executable()
  704. exPath := filepath.Dir(dir)
  705. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  706. xlsxFile := xlsx.NewFile()
  707. if err != nil {
  708. br.Msg = "生成文件失败"
  709. br.ErrMsg = "生成文件失败"
  710. return
  711. }
  712. style := xlsx.NewStyle()
  713. alignment := xlsx.Alignment{
  714. Horizontal: "center",
  715. Vertical: "center",
  716. WrapText: true,
  717. }
  718. style.Alignment = alignment
  719. style.ApplyAlignment = true
  720. sheet, err := xlsxFile.AddSheet("名单")
  721. if err != nil {
  722. br.Msg = "新增Sheet失败"
  723. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  724. return
  725. }
  726. //标头
  727. rowTitle := sheet.AddRow()
  728. cellA := rowTitle.AddCell()
  729. cellA.Value = "姓名"
  730. cellB := rowTitle.AddCell()
  731. cellB.Value = "手机号"
  732. cellC := rowTitle.AddCell()
  733. cellC.Value = "公司名称"
  734. cellD := rowTitle.AddCell()
  735. cellD.Value = "所属权益销售"
  736. cellF := rowTitle.AddCell()
  737. cellF.Value = "阅读时间"
  738. for _, item := range list {
  739. row := sheet.AddRow()
  740. cellA := row.AddCell()
  741. cellA.Value = item.RealName
  742. cellB := row.AddCell()
  743. cellB.Value = item.Mobile
  744. cellC := row.AddCell()
  745. cellC.Value = item.CompanyName
  746. cellD := row.AddCell()
  747. cellD.Value = item.SellerName
  748. cellF := row.AddCell()
  749. cellF.Value = item.CreateTime
  750. }
  751. err = xlsxFile.Save(downLoadnFilePath)
  752. if err != nil {
  753. br.Msg = "保存文件失败"
  754. br.ErrMsg = "保存文件失败"
  755. return
  756. }
  757. //randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  758. downloadFileName := articleInfo.Title + ".xlsx"
  759. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  760. defer func() {
  761. //os.Remove(downLoadnFilePath)
  762. }()
  763. br.Success = true
  764. br.Ret = 200
  765. br.Msg = "导出成功"
  766. }
  767. // @Title 通过标的ID获取相关连的产文章信息
  768. // @Description 通过标的ID获取相关连的产文章信息接口
  769. // @Param IndustrialSubjectId query int true "标的id "
  770. // @Success 200 {object} cygx.OverviewArticle
  771. // @router /reportSelection/getArticle [get]
  772. func (this *ReportSelectionController) GetArticle() {
  773. br := new(models.BaseResponse).Init()
  774. defer func() {
  775. this.Data["json"] = br
  776. this.ServeJSON()
  777. }()
  778. AdminUser := this.SysUser
  779. if AdminUser == nil {
  780. br.Msg = "请登录"
  781. br.ErrMsg = "请登录,SysUser Is Empty"
  782. return
  783. }
  784. industrialSubjectId, _ := this.GetInt("IndustrialSubjectId")
  785. if industrialSubjectId < 1 {
  786. br.Msg = "请输入标的ID"
  787. return
  788. }
  789. detailSubjecj, err := cygx.GetIndustrialSubjectDetailById(industrialSubjectId)
  790. if err != nil && err.Error() != utils.ErrNoRow() {
  791. br.Msg = "获取信息失败"
  792. br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
  793. return
  794. }
  795. resp := new(cygx.OverviewArticle)
  796. if detailSubjecj != nil {
  797. var pars []interface{}
  798. conditionArticle := ` AND type_name = '综述报告' AND stock LIKE ? `
  799. subjectName := "%" + detailSubjecj.SubjectName + "%"
  800. pars = append(pars, subjectName)
  801. articleList, err := cygx.GetCygxArticleList(conditionArticle, pars, 0, 10)
  802. if err != nil {
  803. br.Msg = "获取失败"
  804. br.ErrMsg = "GetCygxArticleList,Err:" + err.Error()
  805. return
  806. }
  807. //一对一精准匹配
  808. for _, v := range articleList {
  809. sliceSubjects := strings.Split(v.Stock, "/")
  810. if len(sliceSubjects) > 0 {
  811. for _, vSubject := range sliceSubjects {
  812. sliceKuohao := strings.Split(vSubject, "(") //过滤括号
  813. sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
  814. subject := sliceXiahuaxian[0]
  815. if subject == detailSubjecj.SubjectName {
  816. resp.ArticleId = v.ArticleId
  817. resp.Title = v.Title
  818. continue
  819. }
  820. }
  821. }
  822. }
  823. }
  824. br.Ret = 200
  825. br.Success = true
  826. br.Msg = "获取成功"
  827. br.Data = resp
  828. }
  829. // @Title 报告精选的可见范围修改
  830. // @Description 报告精选的可见范围修改接口
  831. // @Param request body cygx.ResearchSummaryId true "type json string"
  832. // @Success 200 操作成功
  833. // @router /reportSelection/visibleRange [post]
  834. func (this *ReportSelectionController) VisibleRange() {
  835. br := new(models.BaseResponse).Init()
  836. defer func() {
  837. this.Data["json"] = br
  838. this.ServeJSON()
  839. }()
  840. AdminUser := this.SysUser
  841. if AdminUser == nil {
  842. br.Msg = "请登录"
  843. br.ErrMsg = "请登录,用户信息为空"
  844. br.Ret = 408
  845. return
  846. }
  847. var req cygx.ResearchSummaryId
  848. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  849. if err != nil {
  850. br.Msg = "参数解析异常!"
  851. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  852. return
  853. }
  854. articleId := req.ArticleId
  855. detail, err := cygx.GetCygxReportSelectionInfoById(articleId)
  856. if err != nil {
  857. br.Msg = "内容不存在"
  858. br.ErrMsg = "操作失败,Err:" + err.Error()
  859. return
  860. }
  861. item := new(cygx.CygxReportSelectionRep)
  862. item.ArticleId = articleId
  863. if detail.VisibleRange == 0 {
  864. item.VisibleRange = 1
  865. item.AdminId = AdminUser.AdminId
  866. item.AdminName = AdminUser.RealName
  867. if detail.IsSendWxMsg == 0 {
  868. cygxService.DoThisWeekLastWeekWxTemplateMsg(detail.Title, detail.PublishDate, detail.ProductDescription, req.ArticleId, 1)
  869. }
  870. } else {
  871. item.AdminId = detail.AdminId
  872. item.AdminName = detail.AdminName
  873. item.VisibleRange = 0
  874. }
  875. err = cygx.ReportSelectionVisibleRange(item)
  876. if err != nil {
  877. br.Msg = "操作失败"
  878. br.ErrMsg = "操作失败,Err:" + err.Error()
  879. return
  880. }
  881. cygxService.UpdateReportSelectionResourceData(articleId) //首页最新页面数据逻辑处理 V11.1.1
  882. br.Ret = 200
  883. br.Success = true
  884. br.Msg = "操作成功"
  885. br.IsAddLog = true
  886. }
  887. // @Title 报告精选内容详情
  888. // @Description 报告精选内容详情接口
  889. // @Param ArticleId query int true "报告Id"
  890. // @Success Ret=200 {object} cygx.DetailCygxReportSelectionRep
  891. // @router /reportSelection/history [get]
  892. func (this *ReportSelectionController) History() {
  893. br := new(models.BaseResponse).Init()
  894. defer func() {
  895. this.Data["json"] = br
  896. this.ServeJSON()
  897. }()
  898. AdminUser := this.SysUser
  899. if AdminUser == nil {
  900. br.Msg = "请登录"
  901. br.ErrMsg = "请登录,用户信息为空"
  902. br.Ret = 408
  903. return
  904. }
  905. var errArt error
  906. detail := new(cygx.CygxReportSelectionRep)
  907. articleId, _ := this.GetInt("ArticleId")
  908. detail, errArt = cygx.GetCygxReportSelectionInfoById(articleId)
  909. if errArt != nil {
  910. br.Msg = "内容不存在"
  911. br.ErrMsg = "内容不存在,Err:" + errArt.Error()
  912. return
  913. }
  914. articleId = detail.ArticleId
  915. resp := new(cygx.HistoryReportSelectionRep)
  916. listSelectionLog, err := cygx.GetReportSelectionlogListAll(articleId)
  917. if err != nil {
  918. br.Msg = "获取失败"
  919. br.ErrMsg = "GetReportSelectionlogListAll,Err:" + err.Error()
  920. return
  921. }
  922. //获取标的的点击次数
  923. listSelectionSubjectHistory, err := cygx.GetCygxReportSelectionSubjectHistoryList(articleId)
  924. if err != nil && err.Error() != utils.ErrNoRow() {
  925. br.Msg = "获取失败"
  926. br.ErrMsg = "GetCygxReportSelectionSubjectHistoryList,Err:" + err.Error()
  927. return
  928. }
  929. mapSubjectHistory := make(map[string]int)
  930. for _, v := range listSelectionSubjectHistory {
  931. mapSubjectHistory[v.IndustrialSubjectId]++
  932. }
  933. //排序方式修改
  934. permissionNameList := []*cygx.HistoryReportSelectionChart{{ChartPermissionName: "消费"}, {ChartPermissionName: "医药"}, {ChartPermissionName: "科技"}, {ChartPermissionName: "智造"}}
  935. for _, v := range permissionNameList {
  936. v.List = make([]*cygx.HistoryReportSelectionLogResp, 0)
  937. for _, v2 := range listSelectionLog {
  938. if v.ChartPermissionName == v2.PermissionName {
  939. item := new(cygx.HistoryReportSelectionLogResp)
  940. item.SubjectName = v2.SubjectName
  941. item.IndustrialSubjectId = v2.IndustrialSubjectId
  942. item.Count = mapSubjectHistory[v2.IndustrialSubjectId]
  943. resp.Count += item.Count
  944. v.List = append(v.List, item)
  945. }
  946. }
  947. }
  948. resp.List = permissionNameList
  949. br.Ret = 200
  950. br.Success = true
  951. br.Msg = "获取成功"
  952. br.Data = resp
  953. }