report.go 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268
  1. package english_report
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "eta/eta_mobile/controllers"
  7. "eta/eta_mobile/models"
  8. "eta/eta_mobile/models/company"
  9. "eta/eta_mobile/services"
  10. "eta/eta_mobile/services/alarm_msg"
  11. "eta/eta_mobile/utils"
  12. "html"
  13. "sort"
  14. "strconv"
  15. "strings"
  16. "time"
  17. )
  18. // EnglishReportController 研报活动模块
  19. type EnglishReportController struct {
  20. controllers.BaseAuthController
  21. }
  22. // @Title 新增报告接口
  23. // @Description 新增报告
  24. // @Param request body models.AddEnglishReportReq true "type json string"
  25. // @Success 200 {object} models.AddEnglishReportResp
  26. // @router /add [post]
  27. func (this *EnglishReportController) Add() {
  28. br := new(models.BaseResponse).Init()
  29. defer func() {
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. sysUser := this.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. var req models.AddEnglishReportReq
  41. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  42. if err != nil {
  43. br.Msg = "参数解析异常!"
  44. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  45. return
  46. }
  47. if req.Content == "" {
  48. br.Msg = "请输入内容"
  49. return
  50. }
  51. if req.Overview == "" {
  52. br.Msg = "请输入overview"
  53. return
  54. }
  55. if req.Abstract == "" {
  56. br.Msg = "请输入摘要"
  57. return
  58. }
  59. var contentSub string
  60. if req.Content != "" {
  61. content, e := services.FilterReportContentBr(req.Content)
  62. if e != nil {
  63. br.Msg = "内容去除前后空格失败"
  64. br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  65. return
  66. }
  67. req.Content = content
  68. contentSub, err = services.GetReportContentSub(req.Content)
  69. if err != nil {
  70. go alarm_msg.SendAlarmMsg("ContentSub 失败,Err:"+err.Error(), 3)
  71. //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  72. }
  73. }
  74. maxStage, err := models.GetEnglishReportStage(req.ClassifyIdFirst, req.ClassifyIdSecond)
  75. if err != nil {
  76. br.Msg = "期数获取失败!"
  77. br.ErrMsg = "期数获取失败,Err:" + err.Error()
  78. return
  79. }
  80. item := new(models.EnglishReport)
  81. item.AddType = req.AddType
  82. item.ClassifyIdFirst = req.ClassifyIdFirst
  83. item.ClassifyNameFirst = req.ClassifyNameFirst
  84. item.ClassifyIdSecond = req.ClassifyIdSecond
  85. item.ClassifyNameSecond = req.ClassifyNameSecond
  86. item.Title = req.Title
  87. item.Abstract = req.Abstract
  88. item.Author = req.Author
  89. item.Frequency = req.Frequency
  90. item.State = req.State
  91. item.Content = html.EscapeString(req.Content)
  92. item.Stage = maxStage + 1
  93. item.ContentSub = html.EscapeString(contentSub)
  94. item.CreateTime = req.CreateTime
  95. item.ModifyTime = time.Now()
  96. item.Overview = req.Overview
  97. item.AdminId = sysUser.AdminId
  98. item.AdminRealName = sysUser.RealName
  99. newReportId, err := models.AddEnglishReport(item)
  100. if err != nil {
  101. br.Msg = "保存失败"
  102. br.ErrMsg = "保存失败,Err:" + err.Error()
  103. return
  104. }
  105. reportCode := utils.MD5(strconv.Itoa(int(newReportId)))
  106. //修改唯一编码
  107. {
  108. go models.ModifyEnglishReportCode(newReportId, reportCode)
  109. }
  110. resp := new(models.AddEnglishReportResp)
  111. resp.ReportId = newReportId
  112. resp.ReportCode = reportCode
  113. br.Ret = 200
  114. br.Success = true
  115. br.Msg = "保存成功"
  116. br.Data = resp
  117. }
  118. // @Title 编辑报告接口
  119. // @Description 编辑报告
  120. // @Param request body models.EditEnglishReportReq true "type json string"
  121. // @Success 200 {object} models.EditEnglishReportResp
  122. // @router /edit [post]
  123. func (this *EnglishReportController) Edit() {
  124. br := new(models.BaseResponse).Init()
  125. defer func() {
  126. this.Data["json"] = br
  127. this.ServeJSON()
  128. }()
  129. sysUser := this.SysUser
  130. if sysUser == nil {
  131. br.Msg = "请登录"
  132. br.ErrMsg = "请登录,SysUser Is Empty"
  133. br.Ret = 408
  134. return
  135. }
  136. var req models.EditEnglishReportReq
  137. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  138. if err != nil {
  139. br.Msg = "参数解析异常!"
  140. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  141. return
  142. }
  143. if req.Content == "" {
  144. br.Msg = "请输入内容"
  145. return
  146. }
  147. if req.Overview == "" {
  148. br.Msg = "请输入overview"
  149. return
  150. }
  151. if req.Abstract == "" {
  152. br.Msg = "请输入摘要"
  153. return
  154. }
  155. markStatus, err := services.UpdateEnReportEditMark(int(req.ReportId), sysUser.AdminId, 1, sysUser.RealName)
  156. if err != nil {
  157. br.Msg = err.Error()
  158. return
  159. }
  160. if markStatus.Status == 1 {
  161. br.Msg = markStatus.Msg
  162. return
  163. }
  164. var contentSub string
  165. if req.Content != "" {
  166. content, e := services.FilterReportContentBr(req.Content)
  167. if e != nil {
  168. br.Msg = "内容去除前后空格失败"
  169. br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  170. return
  171. }
  172. req.Content = content
  173. contentSub, err = services.GetReportContentSub(req.Content)
  174. if err != nil {
  175. go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
  176. //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  177. }
  178. }
  179. var stage int
  180. report, _ := models.GetEnglishReportById(int(req.ReportId))
  181. if report != nil {
  182. if report.ClassifyNameFirst != req.ClassifyNameFirst || report.ClassifyNameSecond != req.ClassifyNameSecond {
  183. maxStage, _ := models.GetEnglishReportStageEdit(req.ClassifyIdFirst, req.ClassifyIdSecond, int(req.ReportId))
  184. maxStage = maxStage + 1
  185. stage = maxStage
  186. } else {
  187. stage = report.Stage
  188. }
  189. }
  190. item := new(models.EnglishReport)
  191. item.ClassifyIdFirst = req.ClassifyIdFirst
  192. item.ClassifyNameFirst = req.ClassifyNameFirst
  193. item.ClassifyIdSecond = req.ClassifyIdSecond
  194. item.ClassifyNameSecond = req.ClassifyNameSecond
  195. item.Title = req.Title
  196. item.Abstract = req.Abstract
  197. item.Author = req.Author
  198. item.Frequency = req.Frequency
  199. item.State = req.State
  200. item.Stage = stage
  201. item.Content = html.EscapeString(req.Content)
  202. item.ContentSub = html.EscapeString(contentSub)
  203. item.CreateTime = req.CreateTime
  204. item.Overview = req.Overview
  205. err = models.EditEnglishReport(item, req.ReportId)
  206. if err != nil {
  207. br.Msg = "保存失败"
  208. br.ErrMsg = "保存失败,Err:" + err.Error()
  209. return
  210. }
  211. reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
  212. resp := new(models.EditEnglishReportResp)
  213. resp.ReportId = req.ReportId
  214. resp.ReportCode = reportCode
  215. br.Ret = 200
  216. br.Success = true
  217. br.Msg = "保存成功"
  218. br.Data = resp
  219. }
  220. // @Title 获取报告详情接口
  221. // @Description 获取报告详情
  222. // @Param request body models.ReportDetailReq true "type json string"
  223. // @Success 200 {object} models.EnglishReportDetailView
  224. // @router /detail [get]
  225. func (this *EnglishReportController) Detail() {
  226. br := new(models.BaseResponse).Init()
  227. defer func() {
  228. this.Data["json"] = br
  229. this.ServeJSON()
  230. }()
  231. sysUser := this.SysUser
  232. if sysUser == nil {
  233. br.Msg = "请登录"
  234. br.ErrMsg = "请登录,SysUser Is Empty"
  235. br.Ret = 408
  236. return
  237. }
  238. reportId, err := this.GetInt("ReportId")
  239. if err != nil {
  240. br.Msg = "获取参数失败!"
  241. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  242. return
  243. }
  244. if reportId <= 0 {
  245. br.Msg = "参数错误"
  246. return
  247. }
  248. item, err := models.GetEnglishReportById(reportId)
  249. if err != nil {
  250. br.Msg = "获取失败"
  251. br.ErrMsg = "获取失败,Err:" + err.Error()
  252. return
  253. }
  254. item.Content = html.UnescapeString(item.Content)
  255. item.ContentSub = html.UnescapeString(item.ContentSub)
  256. // 获取邮件配置-是否有权限群发
  257. conf := new(models.EnglishReportEmailConf)
  258. authKey := "english_report_email_conf"
  259. confAuth, e := company.GetConfigDetailByCode(authKey)
  260. if e != nil {
  261. br.Msg = "获取失败"
  262. br.ErrMsg = "获取群发邮件权限失败, Err: " + e.Error()
  263. return
  264. }
  265. if confAuth.ConfigValue == "" {
  266. br.Msg = "获取失败"
  267. br.ErrMsg = "群发邮件配置为空"
  268. return
  269. }
  270. if e := json.Unmarshal([]byte(confAuth.ConfigValue), &conf); e != nil {
  271. br.Msg = "获取失败"
  272. br.ErrMsg = "群发邮件配置有误"
  273. return
  274. }
  275. authOk := false
  276. authArr := strings.Split(conf.SendAuthGroup, ",")
  277. if utils.InArrayByStr(authArr, sysUser.RoleTypeCode) {
  278. authOk = true
  279. }
  280. item.EmailAuth = authOk
  281. // 是否有群发邮件失败的记录,标记红点
  282. failList, e := models.GetEnglishReportEmailLogFailList(0)
  283. if e != nil {
  284. br.Msg = "获取失败"
  285. br.ErrMsg = "获取群发邮件记录失败, Err: " + e.Error()
  286. return
  287. }
  288. failMap := make(map[int]bool, 0)
  289. for i := range failList {
  290. failMap[failList[i].ReportId] = true
  291. }
  292. item.EmailHasFail = failMap[item.Id]
  293. br.Ret = 200
  294. br.Success = true
  295. br.Msg = "获取成功"
  296. br.Data = item
  297. }
  298. // ListReport
  299. // @Title 获取报告列表接口
  300. // @Description 获取报告列表
  301. // @Param PageSize query int true "每页数据条数"
  302. // @Param CurrentIndex query int true "当前页页码,从1开始"
  303. // @Param TimeType query string true "筛选的时间类别:publish_time(发布时间),modify_time(更新时间)"
  304. // @Param StartDate query string true "开始时间"
  305. // @Param EndDate query string true "结束时间"
  306. // @Param Frequency query string true "频度"
  307. // @Param ClassifyNameFirst query string true "一级分类名称"
  308. // @Param ClassifyNameSecond query string true "二级分类名称"
  309. // @Param State query int true "状态"
  310. // @Param KeyWord query string true "搜索关键词"
  311. // @Param PublishSort query string true "desc:降序,asc 升序(预留)"
  312. // @Param CompanyType query string false "产品类型,枚举值:'ficc','权益';不传默认返回全部"
  313. // @Success 200 {object} models.ReportListResp
  314. // @router /list [get]
  315. func (this *EnglishReportController) ListReport() {
  316. br := new(models.BaseResponse).Init()
  317. defer func() {
  318. this.Data["json"] = br
  319. this.ServeJSON()
  320. }()
  321. sysUser := this.SysUser
  322. if sysUser == nil {
  323. br.Msg = "请登录"
  324. br.ErrMsg = "请登录,SysUser Is Empty"
  325. br.Ret = 408
  326. return
  327. }
  328. pageSize, _ := this.GetInt("PageSize")
  329. currentIndex, _ := this.GetInt("CurrentIndex")
  330. timeType := this.GetString("TimeType")
  331. startDate := this.GetString("StartDate")
  332. endDate := this.GetString("EndDate")
  333. frequency := this.GetString("Frequency")
  334. classifyNameFirst := this.GetString("ClassifyNameFirst")
  335. classifyNameSecond := this.GetString("ClassifyNameSecond")
  336. state, _ := this.GetInt("State")
  337. keyWord := this.GetString("KeyWord")
  338. companyType := this.GetString("CompanyType")
  339. // 群发邮件状态筛选
  340. emailState, _ := this.GetInt("EmailState")
  341. var startSize int
  342. if pageSize <= 0 {
  343. pageSize = utils.PageSize20
  344. }
  345. if currentIndex <= 0 {
  346. currentIndex = 1
  347. }
  348. startSize = utils.StartIndex(currentIndex, pageSize)
  349. var condition string
  350. var pars []interface{}
  351. if keyWord != "" {
  352. condition += ` AND (title LIKE '%` + keyWord + `%' OR author LIKE '%` + keyWord + `%' ) `
  353. }
  354. if timeType == "" {
  355. timeType = "publish_time"
  356. }
  357. if timeType != "publish_time" && timeType != "modify_time" {
  358. br.Msg = "请选择正确的时间"
  359. br.ErrMsg = "请选择正确的时间"
  360. return
  361. }
  362. if startDate != "" {
  363. condition += ` AND ` + timeType + ` >= ? `
  364. pars = append(pars, startDate)
  365. }
  366. if endDate != "" {
  367. condition += ` AND ` + timeType + ` <= ? `
  368. pars = append(pars, endDate)
  369. }
  370. if frequency != "" {
  371. condition += ` AND frequency = ? `
  372. pars = append(pars, frequency)
  373. }
  374. if classifyNameFirst != "" {
  375. condition += ` AND classify_name_first = ? `
  376. pars = append(pars, classifyNameFirst)
  377. }
  378. if classifyNameSecond != "" {
  379. condition += ` AND classify_name_second = ? `
  380. pars = append(pars, classifyNameSecond)
  381. }
  382. if state > 0 {
  383. condition += ` AND state = ? `
  384. pars = append(pars, state)
  385. }
  386. // 未群发邮件(包含推送邮件失败的)
  387. if emailState == 1 {
  388. failIds, e := models.GetHasFailEmailLogReportIds()
  389. if e != nil {
  390. br.Msg = "获取失败"
  391. br.ErrMsg = "获取存在邮件推送失败记录的英文报告IDs失败, Err:" + e.Error()
  392. return
  393. }
  394. condition += ` AND email_state = 0`
  395. if len(failIds) > 0 {
  396. condition += ` OR id IN (` + utils.GetOrmInReplace(len(failIds)) + `)`
  397. pars = append(pars, failIds)
  398. }
  399. }
  400. // 已群发邮件
  401. if emailState == 2 {
  402. successIds, e := models.GetSuccessEmailLogReportIds()
  403. if e != nil {
  404. br.Msg = "获取失败"
  405. br.ErrMsg = "获取邮件推送记录均为成功的英文报告IDs失败, Err:" + e.Error()
  406. return
  407. }
  408. condition += ` AND email_state = 1`
  409. if len(successIds) > 0 {
  410. condition += ` AND id IN (` + utils.GetOrmInReplace(len(successIds)) + `)`
  411. pars = append(pars, successIds)
  412. }
  413. }
  414. total, err := models.GetEnglishReportListCount(condition, pars, companyType)
  415. if err != nil {
  416. br.Msg = "获取失败"
  417. br.ErrMsg = "获取失败,Err:" + err.Error()
  418. return
  419. }
  420. list, err := models.GetEnglishReportList(condition, pars, companyType, startSize, pageSize)
  421. if err != nil {
  422. br.Msg = "获取失败"
  423. br.ErrMsg = "获取失败,Err:" + err.Error()
  424. return
  425. }
  426. // 获取邮件配置-是否有权限群发
  427. conf := new(models.EnglishReportEmailConf)
  428. authKey := "english_report_email_conf"
  429. confAuth, e := company.GetConfigDetailByCode(authKey)
  430. if e != nil {
  431. br.Msg = "获取失败"
  432. br.ErrMsg = "获取群发邮件权限失败, Err: " + e.Error()
  433. return
  434. }
  435. if confAuth.ConfigValue == "" {
  436. br.Msg = "获取失败"
  437. br.ErrMsg = "群发邮件配置为空"
  438. return
  439. }
  440. if e := json.Unmarshal([]byte(confAuth.ConfigValue), &conf); e != nil {
  441. br.Msg = "获取失败"
  442. br.ErrMsg = "群发邮件配置有误"
  443. return
  444. }
  445. authOk := false
  446. authArr := strings.Split(conf.SendAuthGroup, ",")
  447. if utils.InArrayByStr(authArr, sysUser.RoleTypeCode) {
  448. authOk = true
  449. }
  450. // 是否有群发邮件失败的记录,标记红点
  451. failList, e := models.GetEnglishReportEmailLogFailList(0)
  452. if e != nil {
  453. br.Msg = "获取失败"
  454. br.ErrMsg = "获取群发邮件记录失败, Err: " + e.Error()
  455. return
  456. }
  457. failMap := make(map[int]bool, 0)
  458. for i := range failList {
  459. failMap[failList[i].ReportId] = true
  460. }
  461. for _, item := range list {
  462. if item.State == 2 {
  463. item.ShareUrl = "https://share.hzinsights.com/reportEn?code=" + item.ReportCode
  464. }
  465. item.EmailAuth = authOk
  466. item.EmailHasFail = failMap[item.Id]
  467. // 邮箱PV大于0的时候, 不展示最初版本的PV
  468. if item.PvEmail > 0 {
  469. item.Pv = 0
  470. }
  471. /*key := fmt.Sprint(`crm:enReport:edit:`, item.Id)
  472. opUserId, _ := utils.Rc.RedisInt(key)
  473. //如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
  474. if opUserId <= 0 || (opUserId == this.SysUser.AdminId) {
  475. item.CanEdit = true
  476. } else {
  477. adminInfo, errAdmin := system.GetSysUserById(opUserId)
  478. if errAdmin != nil {
  479. br.Msg = "获取失败"
  480. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  481. return
  482. }
  483. item.Editor = adminInfo.RealName
  484. }*/
  485. markStatus, err := services.UpdateEnReportEditMark(item.Id, this.SysUser.AdminId, 2, this.SysUser.RealName)
  486. if err != nil {
  487. br.Msg = "查询标记状态失败"
  488. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  489. return
  490. }
  491. if markStatus.Status == 0 {
  492. item.CanEdit = true
  493. } else {
  494. item.Editor = markStatus.Editor
  495. }
  496. }
  497. page := paging.GetPaging(currentIndex, pageSize, total)
  498. resp := new(models.EnglishReportListResp)
  499. resp.Paging = page
  500. resp.List = list
  501. br.Ret = 200
  502. br.Success = true
  503. br.Msg = "获取成功"
  504. br.Data = resp
  505. }
  506. // @Title 获取分类列表
  507. // @Description 获取分类列表
  508. // @Param PageSize query int true "每页数据条数"
  509. // @Param CurrentIndex query int true "当前页页码,从1开始"
  510. // @Param KeyWord query string true "检索关键词"
  511. // @Param CompanyType query string false "产品类型,枚举值:'ficc','权益';不传默认返回全部"
  512. // @Success 200 {object} models.EnglishClassifyListResp
  513. // @router /classify/list [get]
  514. func (this *EnglishReportController) ListClassify() {
  515. br := new(models.BaseResponse).Init()
  516. defer func() {
  517. this.Data["json"] = br
  518. this.ServeJSON()
  519. }()
  520. pageSize, _ := this.GetInt("PageSize")
  521. currentIndex, _ := this.GetInt("CurrentIndex")
  522. keyWord := this.GetString("KeyWord")
  523. classifyType, _ := this.GetInt("ClassifyType", 0)
  524. var startSize int
  525. if pageSize <= 0 {
  526. pageSize = utils.PageSize20
  527. }
  528. if currentIndex <= 0 {
  529. currentIndex = 1
  530. }
  531. startSize = utils.StartIndex(currentIndex, pageSize)
  532. page := paging.GetPaging(currentIndex, pageSize, 0)
  533. resp := new(models.EnglishClassifyListResp)
  534. list, err := models.GetEnglishClassifyList(startSize, pageSize, keyWord, classifyType)
  535. if err != nil {
  536. br.Msg = "获取失败"
  537. br.ErrMsg = "获取失败,Err:" + err.Error()
  538. return
  539. }
  540. total, err := models.GetEnglishClassifyListCount(keyWord, classifyType)
  541. if err != nil {
  542. br.Msg = "获取失败"
  543. br.ErrMsg = "获取失败,Err:" + err.Error()
  544. return
  545. }
  546. if total == 0 {
  547. resp.List = make([]*models.EnglishClassifyList, 0)
  548. resp.Paging = page
  549. br.Data = resp
  550. br.Ret = 200
  551. br.Success = true
  552. br.Msg = "获取成功"
  553. return
  554. }
  555. var parentIds []int
  556. for _, v := range list {
  557. parentIds = append(parentIds, v.Id)
  558. }
  559. childMap := make(map[int][]*models.EnglishClassify)
  560. tmpList, err := models.GetEnglishClassifyChildByParentIds(parentIds, keyWord, classifyType)
  561. if err != nil {
  562. br.Msg = "获取二级分类失败"
  563. br.ErrMsg = "获取二级分类失败,Err:" + err.Error()
  564. return
  565. }
  566. for _, v := range tmpList {
  567. childMap[v.ParentId] = append(childMap[v.ParentId], v)
  568. }
  569. for _, v := range list {
  570. if child, ok := childMap[v.Id]; ok {
  571. v.Child = child
  572. }
  573. }
  574. var sortList models.RSClassifyList
  575. sortList = list
  576. sort.Sort(sortList)
  577. for _, item := range sortList {
  578. var sortChildList models.RSChildClassifyList
  579. sortChildList = item.Child
  580. sort.Sort(sortChildList)
  581. item.Child = sortChildList
  582. }
  583. resp.List = sortList
  584. resp.Paging = page
  585. br.Data = resp
  586. br.Ret = 200
  587. br.Success = true
  588. br.Msg = "获取成功"
  589. }
  590. // @Title 删除分类列表
  591. // @Description 删除分类列表
  592. // @Param ClassifyId int true "分类名称"
  593. // @Param ParentId query int true "父级Id"
  594. // @Success 200 保存成功
  595. // @router /classify/delete [get]
  596. func (this *EnglishReportController) DelClassify() {
  597. br := new(models.BaseResponse).Init()
  598. defer func() {
  599. this.Data["json"] = br
  600. this.ServeJSON()
  601. }()
  602. classifyId, _ := this.GetInt("ClassifyId")
  603. //parentId, _ := this.GetInt("ParentId")
  604. classifyInfo, err := models.GetEnglishReportClassifyById(classifyId)
  605. if err != nil {
  606. if err.Error() == utils.ErrNoRow() {
  607. br.Msg = "当前分类不存在"
  608. br.ErrMsg = "当前分类不存在"
  609. return
  610. }
  611. br.Msg = "获取分类信息失败"
  612. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  613. return
  614. }
  615. count, err := models.GetEnglishClassifyChildCounts(classifyId)
  616. if err != nil && err.Error() != utils.ErrNoRow() {
  617. br.Msg = "获取信息失败"
  618. br.ErrMsg = "获取失败,Err:" + err.Error()
  619. return
  620. }
  621. if count > 0 {
  622. br.Msg = "请先删除该分类下关联分类"
  623. br.Ret = 403
  624. return
  625. }
  626. if classifyInfo.ClassifyType == 0 {
  627. reportCount, e := models.GetEnglishReportCounts(classifyId, classifyInfo.ParentId)
  628. if e != nil && e.Error() != utils.ErrNoRow() {
  629. br.Msg = "获取信息失败"
  630. br.ErrMsg = "获取失败,Err:" + e.Error()
  631. return
  632. }
  633. if reportCount > 0 {
  634. br.Msg = "该分类有关联报告,不允许删除"
  635. br.Ret = 403
  636. return
  637. }
  638. } else {
  639. videoCount, e := models.GetEnglishVideoCounts(classifyId, classifyInfo.ParentId)
  640. if e != nil && e.Error() != utils.ErrNoRow() {
  641. br.Msg = "获取信息失败"
  642. br.ErrMsg = "获取失败,Err:" + e.Error()
  643. return
  644. }
  645. if videoCount > 0 {
  646. br.Msg = "该分类有关联的路演视频,不允许删除"
  647. br.Ret = 403
  648. return
  649. }
  650. }
  651. if err = models.DeleteEnglishClassify(classifyId); err != nil {
  652. br.Msg = "删除失败"
  653. br.ErrMsg = "删除报告失败, Err: " + err.Error()
  654. return
  655. }
  656. br.Ret = 200
  657. br.Success = true
  658. br.Msg = "删除成功"
  659. }
  660. // @Title 发布报告接口
  661. // @Description 发布报告
  662. // @Param request body models.PublishReq true "type json string"
  663. // @Success 200 Ret=200 发布成功
  664. // @router /publish [post]
  665. func (this *EnglishReportController) PublishReport() {
  666. br := new(models.BaseResponse).Init()
  667. defer func() {
  668. this.Data["json"] = br
  669. this.ServeJSON()
  670. }()
  671. var req models.PublishReq
  672. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  673. if err != nil {
  674. br.Msg = "参数解析异常!"
  675. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  676. return
  677. }
  678. reportIds := req.ReportIds
  679. if reportIds == "" {
  680. br.Msg = "参数错误"
  681. br.ErrMsg = "参数错误,报告id不可为空"
  682. return
  683. }
  684. reportArr := strings.Split(reportIds, ",")
  685. for _, v := range reportArr {
  686. vint, err := strconv.Atoi(v)
  687. if err != nil {
  688. br.Msg = "参数错误"
  689. br.ErrMsg = "参数错误,Err:" + err.Error()
  690. return
  691. }
  692. report, err := models.GetEnglishReportById(vint)
  693. if err != nil {
  694. br.Msg = "获取报告信息失败"
  695. br.ErrMsg = "获取报告信息失败,Err:" + err.Error()
  696. return
  697. }
  698. if report == nil {
  699. br.Msg = "报告不存在"
  700. return
  701. }
  702. var tmpErr error
  703. if report.Content == "" {
  704. br.Msg = "报告内容为空,不可发布"
  705. br.ErrMsg = "报告内容为空,不需要生成,report_id:" + strconv.Itoa(report.Id)
  706. return
  707. }
  708. var publishTime string
  709. if report.PublishTime != "" {
  710. // 发布时间固定为首次发布时间
  711. publishTime = report.PublishTime
  712. } else {
  713. publishTime = time.Now().Format(utils.FormatDateTime)
  714. }
  715. if tmpErr = models.PublishEnglishReportById(report.Id, publishTime); tmpErr != nil {
  716. br.Msg = "报告发布失败"
  717. br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
  718. return
  719. }
  720. go func() {
  721. _ = services.UpdateEnglishReportEs(report.Id, 2)
  722. }()
  723. }
  724. br.Ret = 200
  725. br.Success = true
  726. br.Msg = "发布成功"
  727. }
  728. // PrePublishReport
  729. // @Title 设置定时发布接口
  730. // @Description 设置定时发布接口
  731. // @Param request body models.PrePublishReq true "type json string"
  732. // @Success 200 Ret=200 发布成功
  733. // @router /pre_publish [post]
  734. func (this *EnglishReportController) PrePublishReport() {
  735. br := new(models.BaseResponse).Init()
  736. defer func() {
  737. this.Data["json"] = br
  738. this.ServeJSON()
  739. }()
  740. var req models.PrePublishReq
  741. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  742. if err != nil {
  743. br.Msg = "参数解析异常!"
  744. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  745. return
  746. }
  747. reportId := req.ReportId
  748. if reportId == 0 {
  749. br.Msg = "参数错误"
  750. br.ErrMsg = "参数错误,报告id不可为空"
  751. return
  752. }
  753. if req.PrePublishTime == "" {
  754. br.Msg = "发布时间不能为空"
  755. return
  756. }
  757. prePublishTime, err := time.ParseInLocation(utils.FormatDateTime, req.PrePublishTime, time.Local)
  758. if err != nil {
  759. br.Msg = "发布时间格式错误"
  760. br.ErrMsg = "发布时间格式错误,Err:" + err.Error()
  761. return
  762. }
  763. if prePublishTime.Before(time.Now()) {
  764. br.Msg = "发布时间不允许选择过去时间"
  765. return
  766. }
  767. if prePublishTime.Before(time.Now().Add(2 * time.Minute)) {
  768. br.Msg = "发布时间距离当前时间太近了"
  769. return
  770. }
  771. report, err := models.GetEnglishReportById(reportId)
  772. if err != nil {
  773. br.Msg = "获取报告信息失败"
  774. br.ErrMsg = "获取报告信息失败,Err:" + err.Error()
  775. return
  776. }
  777. if report == nil {
  778. br.Msg = "报告不存在"
  779. return
  780. }
  781. if report.Content == "" {
  782. br.Msg = "报告内容为空,不可发布"
  783. br.ErrMsg = "报告内容为空,不需要生成,report_id:" + strconv.Itoa(report.Id)
  784. return
  785. }
  786. if report.State == 2 {
  787. br.Msg = "报告已发布,不可设置定时发布"
  788. return
  789. }
  790. var tmpErr error
  791. if tmpErr = models.SetPrePublishEnglishReportById(report.Id, req.PrePublishTime); tmpErr != nil {
  792. br.Msg = "设置定时发布失败"
  793. br.ErrMsg = "设置定时发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
  794. return
  795. }
  796. br.Ret = 200
  797. br.Success = true
  798. br.Msg = "定时发布成功"
  799. }
  800. // @Title 取消发布报告接口
  801. // @Description 取消发布报告
  802. // @Param request body models.PublishCancelReq true "type json string"
  803. // @Success 200 Ret=200 取消发布成功
  804. // @router /publish/cancel [post]
  805. func (this *EnglishReportController) PublishCancleReport() {
  806. br := new(models.BaseResponse).Init()
  807. defer func() {
  808. this.Data["json"] = br
  809. this.ServeJSON()
  810. }()
  811. var req models.PublishCancelReq
  812. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  813. if err != nil {
  814. br.Msg = "参数解析异常!"
  815. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  816. return
  817. }
  818. if req.ReportIds <= 0 {
  819. br.Msg = "参数错误"
  820. br.ErrMsg = "参数错误,报告id不可为空"
  821. return
  822. }
  823. err = models.PublishCancelEnglishReport(req.ReportIds)
  824. if err != nil {
  825. br.Msg = "取消发布失败"
  826. br.ErrMsg = "取消发布失败,Err:" + err.Error()
  827. return
  828. }
  829. // 更新es里的报告状态
  830. go func() {
  831. _ = services.UpdateEnglishReportEs(req.ReportIds, 1)
  832. }()
  833. br.Ret = 200
  834. br.Success = true
  835. br.Msg = "取消发布成功"
  836. }
  837. // @Title 删除报告接口
  838. // @Description 删除报告
  839. // @Param request body models.DeleteReq true "type json string"
  840. // @Success 200 Ret=200 删除成功
  841. // @router /delete [post]
  842. func (this *EnglishReportController) Delete() {
  843. br := new(models.BaseResponse).Init()
  844. defer func() {
  845. this.Data["json"] = br
  846. this.ServeJSON()
  847. }()
  848. var req models.DeleteReq
  849. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  850. if err != nil {
  851. br.Msg = "参数解析异常!"
  852. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  853. return
  854. }
  855. if req.ReportIds <= 0 {
  856. br.Msg = "参数错误"
  857. br.ErrMsg = "参数错误,报告id不可为空"
  858. return
  859. }
  860. reportInfo, err := models.GetEnglishReportById(req.ReportIds)
  861. if err != nil {
  862. if err.Error() == utils.ErrNoRow() {
  863. br.Msg = "报告不存在"
  864. return
  865. }
  866. br.Msg = "查询报告信息失败"
  867. br.ErrMsg = "查询报告信息失败, Err" + err.Error()
  868. return
  869. }
  870. // 更新es里的报告状态
  871. _ = services.UpdateEnglishReportEs(req.ReportIds, 1)
  872. if err = models.DeleteEnglishReportAndChapter(reportInfo); err != nil {
  873. br.Msg = "删除失败"
  874. br.ErrMsg = "删除报告失败, Err: " + err.Error()
  875. return
  876. }
  877. // 重置PPT关联报告
  878. go func() {
  879. _ = services.ResetPPTReport(req.ReportIds, true)
  880. }()
  881. go func() {
  882. _ = services.EnglishPolicyReportSyncCancel(reportInfo)
  883. }()
  884. br.Ret = 200
  885. br.Success = true
  886. br.Msg = "删除成功"
  887. }
  888. // @Title 保存草稿
  889. // @Description 保存草稿
  890. // @Param request body models.SaveReportContent true "type json string"
  891. // @Success 200 {object} models.ReportAuthorResp
  892. // @router /saveReportContent [post]
  893. func (this *EnglishReportController) SaveReportContent() {
  894. br := new(models.BaseResponse).Init()
  895. br.IsSendEmail = false
  896. defer func() {
  897. this.Data["json"] = br
  898. this.ServeJSON()
  899. }()
  900. var req models.SaveReportContent
  901. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  902. if err != nil {
  903. br.Msg = "参数解析异常!"
  904. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  905. return
  906. }
  907. sysUser := this.SysUser
  908. if sysUser == nil {
  909. br.Msg = "请登录"
  910. br.ErrMsg = "请登录,SysUser Is Empty"
  911. br.Ret = 408
  912. return
  913. }
  914. reportId := req.ReportId
  915. noChangeFlag := req.NoChange
  916. fmt.Println("reportId:", reportId)
  917. if reportId <= 0 {
  918. br.Msg = "请输入报告ID"
  919. return
  920. }
  921. markStatus, err := services.UpdateEnReportEditMark(int(req.ReportId), sysUser.AdminId, 1, sysUser.RealName)
  922. if err != nil {
  923. br.Msg = err.Error()
  924. return
  925. }
  926. if markStatus.Status == 1 {
  927. br.Msg = markStatus.Msg
  928. return
  929. }
  930. if noChangeFlag != 1 {
  931. content := req.Content
  932. if content == "" {
  933. content = this.GetString("Content")
  934. }
  935. if content != "" {
  936. contentClean, e := services.FilterReportContentBr(req.Content)
  937. if e != nil {
  938. br.Msg = "内容去除前后空格失败"
  939. br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  940. return
  941. }
  942. content = contentClean
  943. contentSub, err := services.GetReportContentSub(content)
  944. if err != nil {
  945. go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
  946. //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  947. }
  948. content = html.EscapeString(content)
  949. contentSub = html.EscapeString(contentSub)
  950. err = models.EditEnglishReportContent(reportId, content, contentSub)
  951. if err != nil {
  952. br.Msg = "保存失败"
  953. br.ErrMsg = "保存失败,Err:" + err.Error()
  954. return
  955. }
  956. go models.AddEnglishReportSaveLog(reportId, this.SysUser.AdminId, content, contentSub, this.SysUser.AdminName)
  957. }
  958. }
  959. resp := new(models.SaveReportContentResp)
  960. resp.ReportId = reportId
  961. br.Ret = 200
  962. br.Success = true
  963. br.Msg = "保存成功成功"
  964. br.Data = resp
  965. }
  966. // @Title 根据分类获取最近一次报告详情接口
  967. // @Description 根据分类获取最近一次报告详情
  968. // @Param request body models.ClassifyIdDetailReq true "type json string"
  969. // @Success 200 {object} models.Report
  970. // @router /classifyIdDetail [get]
  971. func (this *EnglishReportController) ClassifyIdDetail() {
  972. br := new(models.BaseResponse).Init()
  973. defer func() {
  974. this.Data["json"] = br
  975. this.ServeJSON()
  976. }()
  977. //classify_id_first=34&classify_id_second=36
  978. /*var req models.ClassifyIdDetailReq
  979. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  980. if err != nil {
  981. br.Msg = "参数解析异常!"
  982. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  983. return
  984. }*/
  985. classifyIdFirst, _ := this.GetInt("classify_id_first")
  986. if classifyIdFirst <= 0 {
  987. classifyIdFirst, _ = this.GetInt("ClassifyIdFirst")
  988. }
  989. classifyIdSecond, _ := this.GetInt("classify_id_second")
  990. if classifyIdSecond <= 0 {
  991. classifyIdSecond, _ = this.GetInt("ClassifyIdSecond")
  992. }
  993. item, err := models.GetEnglishReportDetailByClassifyId(classifyIdFirst, classifyIdSecond)
  994. if err != nil && err.Error() != utils.ErrNoRow() {
  995. br.Msg = "获取失败!"
  996. br.ErrMsg = "获取失败,Err:" + err.Error()
  997. return
  998. }
  999. if item != nil {
  1000. item.Content = html.UnescapeString(item.Content)
  1001. item.ContentSub = html.UnescapeString(item.ContentSub)
  1002. }
  1003. br.Ret = 200
  1004. br.Success = true
  1005. br.Msg = "获取成功"
  1006. br.Data = item
  1007. }
  1008. // Author
  1009. // @Title 获取报告作者接口
  1010. // @Description 获取报告作者
  1011. // @Param AuthorType query int true "来源类型,1:中文,2:英文"
  1012. // @Param Keyword query string true "搜索关键词"
  1013. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1014. // @Param StartDate query string true "开始时间"
  1015. // @Success 200 {object} models.ReportAuthorResp
  1016. // @router /author [get]
  1017. func (this *EnglishReportController) Author() {
  1018. br := new(models.BaseResponse).Init()
  1019. defer func() {
  1020. this.Data["json"] = br
  1021. this.ServeJSON()
  1022. }()
  1023. keyword := this.GetString("Keyword")
  1024. var condition string
  1025. var pars []interface{}
  1026. condition += ` AND author_type = 2 AND enable = 1`
  1027. if keyword != `` {
  1028. condition += ` AND report_author like ? `
  1029. pars = append(pars, "%"+keyword+"%")
  1030. }
  1031. _, items, err := models.GetReportAuthorList(condition, pars, 0, 10000)
  1032. if err != nil {
  1033. br.Msg = "获取失败!"
  1034. br.ErrMsg = "获取失败,Err:" + err.Error()
  1035. return
  1036. }
  1037. resp := models.ReportAuthorResp{
  1038. List: items,
  1039. }
  1040. br.Ret = 200
  1041. br.Success = true
  1042. br.Msg = "获取成功"
  1043. br.Data = resp
  1044. }
  1045. // MarkEditStatus
  1046. // @Title 标记报告编辑状态
  1047. // @Description 标记报告编辑状态接口
  1048. // @Param request body request.MarkEditEnReport true "type json string"
  1049. // @Success 200 标记成功 ;202 标记成功
  1050. // @router /mark [post]
  1051. func (this *EnglishReportController) MarkEditStatus() {
  1052. br := new(models.BaseResponse).Init()
  1053. defer func() {
  1054. this.Data["json"] = br
  1055. this.ServeJSON()
  1056. }()
  1057. sysUser := this.SysUser
  1058. if sysUser == nil {
  1059. br.Msg = "请登录"
  1060. br.ErrMsg = "请登录,SysUser Is Empty"
  1061. br.Ret = 408
  1062. return
  1063. }
  1064. var req models.MarkEditEnReport
  1065. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1066. if err != nil {
  1067. br.Msg = "参数解析异常!"
  1068. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1069. return
  1070. }
  1071. if req.ReportId <= 0 {
  1072. br.Msg = "缺少报告Id"
  1073. return
  1074. }
  1075. if req.Status <= 0 {
  1076. br.Msg = "标记状态异常"
  1077. return
  1078. }
  1079. //更新标记key
  1080. data, err := services.UpdateEnReportEditMark(req.ReportId, sysUser.AdminId, req.Status, sysUser.RealName)
  1081. if err != nil {
  1082. br.Msg = err.Error()
  1083. return
  1084. }
  1085. msg := "标记成功"
  1086. br.Ret = 200
  1087. br.Success = true
  1088. br.Msg = msg
  1089. br.Data = data
  1090. }
  1091. // @Title 编辑来自策略报告的报告
  1092. // @Description 编辑来自策略报告的报告
  1093. // @Param request body models.EditEnglishReportFromPolicyReq true "type json string"
  1094. // @Success 200 {object} models.EditEnglishReportResp
  1095. // @router /edit_policy [post]
  1096. func (this *EnglishReportController) EditPolicy() {
  1097. br := new(models.BaseResponse).Init()
  1098. defer func() {
  1099. this.Data["json"] = br
  1100. this.ServeJSON()
  1101. }()
  1102. sysUser := this.SysUser
  1103. if sysUser == nil {
  1104. br.Msg = "请登录"
  1105. br.ErrMsg = "请登录,SysUser Is Empty"
  1106. br.Ret = 408
  1107. return
  1108. }
  1109. var req models.EditEnglishReportFromPolicyReq
  1110. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1111. if err != nil {
  1112. br.Msg = "参数解析异常!"
  1113. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1114. return
  1115. }
  1116. if req.ReportId <= 0 {
  1117. br.Msg = "请选择报告ID"
  1118. return
  1119. }
  1120. if req.Title == "" {
  1121. br.Msg = "请输入标题"
  1122. return
  1123. }
  1124. if req.Abstract == "" {
  1125. br.Msg = "请输入摘要"
  1126. return
  1127. }
  1128. if req.Frequency == "" {
  1129. br.Msg = "请输入频度"
  1130. return
  1131. }
  1132. if req.Author == "" {
  1133. br.Msg = "请输入作者"
  1134. return
  1135. }
  1136. if req.CreateTime == "" {
  1137. br.Msg = "请输入创建时间"
  1138. return
  1139. }
  1140. //查询报告是否存在
  1141. reportInfo, err := models.GetEnglishReportItemById(int(req.ReportId))
  1142. if err != nil {
  1143. if err.Error() == utils.ErrNoRow() {
  1144. br.Msg = "报告不存在"
  1145. return
  1146. }
  1147. br.Msg = "查询报告信息失败"
  1148. br.ErrMsg = "查询报告信息失败, Err" + err.Error()
  1149. return
  1150. }
  1151. if reportInfo.State == 2 {
  1152. br.Msg = "报告已发布不允许编辑"
  1153. return
  1154. }
  1155. markStatus, err := services.UpdateEnReportEditMark(int(req.ReportId), sysUser.AdminId, 1, sysUser.RealName)
  1156. if err != nil {
  1157. br.Msg = err.Error()
  1158. return
  1159. }
  1160. if markStatus.Status == 1 {
  1161. br.Msg = markStatus.Msg
  1162. return
  1163. }
  1164. item := reportInfo
  1165. item.Title = req.Title
  1166. item.Abstract = req.Abstract
  1167. item.Author = req.Author
  1168. item.Frequency = req.Frequency
  1169. item.CreateTime = req.CreateTime
  1170. item.ModifyTime = time.Now()
  1171. err = item.Update([]string{"Title", "Abstract", "Author", "Frequency", "CreateTime", "ModifyTime"})
  1172. if err != nil {
  1173. br.Msg = "保存失败"
  1174. br.ErrMsg = "保存失败,Err:" + err.Error()
  1175. return
  1176. }
  1177. reportCode := reportInfo.ReportCode
  1178. resp := new(models.EditEnglishReportResp)
  1179. resp.ReportId = req.ReportId
  1180. resp.ReportCode = reportCode
  1181. br.Ret = 200
  1182. br.Success = true
  1183. br.Msg = "保存成功"
  1184. br.Data = resp
  1185. }