report_selection.go 32 KB

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