report_selection.go 32 KB

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