report_selection.go 31 KB

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