report_selection.go 34 KB

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