doc.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. package help_doc
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/help_doc"
  8. "html"
  9. "time"
  10. )
  11. // HelpDocController 帮助文档
  12. type HelpDocController struct {
  13. controllers.BaseAuthController
  14. }
  15. // @Title 新增报告接口
  16. // @Description 新增报告
  17. // @Param request body help_doc.AddHelpDocReq true "type json string"
  18. // @Success 200 {object} models.AddEnglishReportResp
  19. // @router /add [post]
  20. func (this *HelpDocController) Add() {
  21. br := new(models.BaseResponse).Init()
  22. defer func() {
  23. this.Data["json"] = br
  24. this.ServeJSON()
  25. }()
  26. sysUser := this.SysUser
  27. if sysUser == nil {
  28. br.Msg = "请登录"
  29. br.ErrMsg = "请登录,SysUser Is Empty"
  30. br.Ret = 408
  31. return
  32. }
  33. var req help_doc.AddHelpDocReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析异常!"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. if req.Content == "" {
  41. br.Msg = "请输入内容"
  42. return
  43. }
  44. anchor,err := json.Marshal(req.AnchorData)
  45. if err != nil {
  46. br.Msg = "参数解析异常!"
  47. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  48. return
  49. }
  50. item := new(help_doc.HelpDoc)
  51. item.ClassifyId = req.ClassifyId
  52. item.Title = req.Title
  53. item.Author = req.Author
  54. item.Status = req.Status
  55. item.Content = html.EscapeString(req.Content)
  56. item.CreateTime = time.Now()
  57. item.ModifyTime = time.Now()
  58. item.AdminId = sysUser.AdminId
  59. item.AdminRealName = sysUser.RealName
  60. item.Anchor = string(anchor)
  61. if req.Status == 2 {
  62. item.PublishTime = time.Now()
  63. }
  64. _, err = help_doc.AddHelpDoc(item)
  65. if err != nil {
  66. br.Msg = "保存失败"
  67. br.ErrMsg = "保存失败,Err:" + err.Error()
  68. return
  69. }
  70. if req.Status == 1 {
  71. br.Msg = "新增成功"
  72. } else {
  73. br.Msg = "发布成功"
  74. }
  75. br.Ret = 200
  76. br.Success = true
  77. }
  78. //
  79. //// @Title 编辑报告接口
  80. //// @Description 编辑报告
  81. //// @Param request body models.EditEnglishReportReq true "type json string"
  82. //// @Success 200 {object} models.EditEnglishReportResp
  83. //// @router /edit [post]
  84. //func (this *HelpDocController) Edit() {
  85. // br := new(models.BaseResponse).Init()
  86. // defer func() {
  87. // this.Data["json"] = br
  88. // this.ServeJSON()
  89. // }()
  90. // sysUser := this.SysUser
  91. // if sysUser == nil {
  92. // br.Msg = "请登录"
  93. // br.ErrMsg = "请登录,SysUser Is Empty"
  94. // br.Ret = 408
  95. // return
  96. // }
  97. // var req models.EditEnglishReportReq
  98. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  99. // if err != nil {
  100. // br.Msg = "参数解析异常!"
  101. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  102. // return
  103. // }
  104. // if req.Content == "" {
  105. // br.Msg = "请输入内容"
  106. // return
  107. // }
  108. // if req.Overview == "" {
  109. // br.Msg = "请输入overview"
  110. // return
  111. // }
  112. // if req.Abstract == "" {
  113. // br.Msg = "请输入摘要"
  114. // return
  115. // }
  116. //
  117. // //var contentSub string
  118. // //if req.Content != "" {
  119. // // content, e := services.FilterReportContentBr(req.Content)
  120. // // if e != nil {
  121. // // br.Msg = "内容去除前后空格失败"
  122. // // br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
  123. // // return
  124. // // }
  125. // // req.Content = content
  126. // //
  127. // // contentSub, err = services.GetReportContentSub(req.Content)
  128. // // if err != nil {
  129. // // go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
  130. // // //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
  131. // // }
  132. // //}
  133. //
  134. //
  135. // item := new(help_doc.HelpDoc)
  136. // item.ClassifyId = req.ClassifyIdFirst
  137. // item.ClassifyName = req.ClassifyNameFirst
  138. // item.Title = req.Title
  139. // item.Author = req.Author
  140. // item.Content = html.EscapeString(req.Content)
  141. // item.ModifyTime = time.Now()
  142. // err = models.EditEnglishReport(item, req.ReportId)
  143. // if err != nil {
  144. // br.Msg = "保存失败"
  145. // br.ErrMsg = "保存失败,Err:" + err.Error()
  146. // return
  147. // }
  148. //
  149. // reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
  150. // resp := new(models.EditEnglishReportResp)
  151. // resp.ReportId = req.ReportId
  152. // resp.ReportCode = reportCode
  153. // br.Ret = 200
  154. // br.Success = true
  155. // br.Msg = "保存成功"
  156. // br.Data = resp
  157. //}
  158. //
  159. // @Title 获取报告详情接口
  160. // @Description 获取报告详情
  161. // @Param request body models.ReportDetailReq true "type json string"
  162. // @Success 200 {object} models.EnglishReportDetailView
  163. // @router /detail [get]
  164. func (this *HelpDocController) Detail() {
  165. br := new(models.BaseResponse).Init()
  166. defer func() {
  167. this.Data["json"] = br
  168. this.ServeJSON()
  169. }()
  170. docId, err := this.GetInt("DocId")
  171. if err != nil {
  172. br.Msg = "获取参数失败!"
  173. br.ErrMsg = "获取参数失败,Err:" + err.Error()
  174. return
  175. }
  176. if docId <= 0 {
  177. br.Msg = "参数错误"
  178. return
  179. }
  180. item, err := help_doc.GetHelpDocById(docId)
  181. if err != nil {
  182. br.Msg = "获取失败"
  183. br.ErrMsg = "获取失败,Err:" + err.Error()
  184. return
  185. }
  186. item.Content = html.UnescapeString(item.Content)
  187. var anchor []help_doc.AnchorList
  188. err = json.Unmarshal([]byte(item.Anchor),&anchor)
  189. if err != nil {
  190. br.Msg = "解析失败"
  191. br.ErrMsg = "解析失败,Err:" + err.Error()
  192. return
  193. }
  194. fmt.Println("anchor",anchor)
  195. resp := help_doc.HelpDocResp{
  196. Id: item.Id,
  197. ClassifyId: item.ClassifyId,
  198. ClassifyName: item.ClassifyName,
  199. Title: item.Title,
  200. Author: item.Author,
  201. CreateTime: item.CreateTime,
  202. ModifyTime: item.ModifyTime,
  203. Status: item.Status,
  204. PublishTime: item.PublishTime,
  205. Content: item.Content,
  206. AdminId: item.AdminId,
  207. AdminRealName: item.AdminRealName,
  208. Anchor: anchor,
  209. }
  210. br.Ret = 200
  211. br.Success = true
  212. br.Msg = "获取成功"
  213. br.Data = resp
  214. }
  215. //// @Title 获取报告列表接口
  216. //// @Description 获取报告列表
  217. //// @Param PageSize query int true "每页数据条数"
  218. //// @Param CurrentIndex query int true "当前页页码,从1开始"
  219. //// @Param StartDate query string true "开始时间"
  220. //// @Param EndDate query string true "结束时间"
  221. //// @Param Frequency query string true "频度"
  222. //// @Param ClassifyNameFirst query string true "一级分类名称"
  223. //// @Param ClassifyNameSecond query string true "二级分类名称"
  224. //// @Param State query int true "状态"
  225. //// @Param KeyWord query string true "搜索关键词"
  226. //// @Param PublishSort query string true "desc:降序,asc 升序(预留)"
  227. //// @Param CompanyType query string false "产品类型,枚举值:'ficc','权益';不传默认返回全部"
  228. //// @Success 200 {object} models.ReportListResp
  229. //// @router /list [get]
  230. //func (this *HelpDocController) ListReport() {
  231. // br := new(models.BaseResponse).Init()
  232. // defer func() {
  233. // this.Data["json"] = br
  234. // this.ServeJSON()
  235. // }()
  236. // sysUser := this.SysUser
  237. // if sysUser == nil {
  238. // br.Msg = "请登录"
  239. // br.ErrMsg = "请登录,SysUser Is Empty"
  240. // br.Ret = 408
  241. // return
  242. // }
  243. //
  244. // pageSize, _ := this.GetInt("PageSize")
  245. // currentIndex, _ := this.GetInt("CurrentIndex")
  246. //
  247. // startDate := this.GetString("StartDate")
  248. // endDate := this.GetString("EndDate")
  249. // frequency := this.GetString("Frequency")
  250. // classifyNameFirst := this.GetString("ClassifyNameFirst")
  251. // classifyNameSecond := this.GetString("ClassifyNameSecond")
  252. // state, _ := this.GetInt("State")
  253. // keyWord := this.GetString("KeyWord")
  254. // companyType := this.GetString("CompanyType")
  255. // // 群发邮件状态筛选
  256. // emailState, _ := this.GetInt("EmailState")
  257. //
  258. // var startSize int
  259. // if pageSize <= 0 {
  260. // pageSize = utils.PageSize20
  261. // }
  262. // if currentIndex <= 0 {
  263. // currentIndex = 1
  264. // }
  265. // startSize = utils.StartIndex(currentIndex, pageSize)
  266. //
  267. // var condition string
  268. // var pars []interface{}
  269. //
  270. // if keyWord != "" {
  271. // condition += ` AND (title LIKE '%` + keyWord + `%' OR author LIKE '%` + keyWord + `%' ) `
  272. // }
  273. // if startDate != "" {
  274. // condition += ` AND create_time >= ? `
  275. // pars = append(pars, startDate)
  276. // }
  277. // if endDate != "" {
  278. // condition += ` AND create_time <= ? `
  279. // pars = append(pars, endDate)
  280. // }
  281. // if frequency != "" {
  282. // condition += ` AND frequency = ? `
  283. // pars = append(pars, frequency)
  284. // }
  285. // if classifyNameFirst != "" {
  286. // condition += ` AND classify_name_first = ? `
  287. // pars = append(pars, classifyNameFirst)
  288. // }
  289. //
  290. // if classifyNameSecond != "" {
  291. // condition += ` AND classify_name_second = ? `
  292. // pars = append(pars, classifyNameSecond)
  293. // }
  294. // if state > 0 {
  295. // condition += ` AND state = ? `
  296. // pars = append(pars, state)
  297. // }
  298. // // 未群发邮件(包含推送邮件失败的)
  299. // if emailState == 1 {
  300. // failIds, e := models.GetHasFailEmailLogReportIds()
  301. // if e != nil {
  302. // br.Msg = "获取失败"
  303. // br.ErrMsg = "获取存在邮件推送失败记录的英文报告IDs失败, Err:" + e.Error()
  304. // return
  305. // }
  306. // condition += ` AND email_state = 0`
  307. // if len(failIds) > 0 {
  308. // condition += ` OR id IN (` + utils.GetOrmInReplace(len(failIds)) + `)`
  309. // pars = append(pars, failIds)
  310. // }
  311. // }
  312. // // 已群发邮件
  313. // if emailState == 2 {
  314. // successIds, e := models.GetSuccessEmailLogReportIds()
  315. // if e != nil {
  316. // br.Msg = "获取失败"
  317. // br.ErrMsg = "获取邮件推送记录均为成功的英文报告IDs失败, Err:" + e.Error()
  318. // return
  319. // }
  320. // condition += ` AND email_state = 1`
  321. // if len(successIds) > 0 {
  322. // condition += ` AND id IN (` + utils.GetOrmInReplace(len(successIds)) + `)`
  323. // pars = append(pars, successIds)
  324. // }
  325. // }
  326. //
  327. // total, err := models.GetEnglishReportListCount(condition, pars, companyType)
  328. // if err != nil {
  329. // br.Msg = "获取失败"
  330. // br.ErrMsg = "获取失败,Err:" + err.Error()
  331. // return
  332. // }
  333. // list, err := models.GetEnglishReportList(condition, pars, companyType, startSize, pageSize)
  334. // if err != nil {
  335. // br.Msg = "获取失败"
  336. // br.ErrMsg = "获取失败,Err:" + err.Error()
  337. // return
  338. // }
  339. //
  340. // // 获取邮件配置-是否有权限群发
  341. // conf := new(models.EnglishReportEmailConf)
  342. // authKey := "english_report_email_conf"
  343. // confAuth, e := company.GetConfigDetailByCode(authKey)
  344. // if e != nil {
  345. // br.Msg = "获取失败"
  346. // br.ErrMsg = "获取群发邮件权限失败, Err: " + e.Error()
  347. // return
  348. // }
  349. // if confAuth.ConfigValue == "" {
  350. // br.Msg = "获取失败"
  351. // br.ErrMsg = "群发邮件配置为空"
  352. // return
  353. // }
  354. // if e := json.Unmarshal([]byte(confAuth.ConfigValue), &conf); e != nil {
  355. // br.Msg = "获取失败"
  356. // br.ErrMsg = "群发邮件配置有误"
  357. // return
  358. // }
  359. // authOk := false
  360. // authArr := strings.Split(conf.SendAuthGroup, ",")
  361. // if utils.InArrayByStr(authArr, sysUser.RoleTypeCode) {
  362. // authOk = true
  363. // }
  364. //
  365. // // 是否有群发邮件失败的记录,标记红点
  366. // failList, e := models.GetEnglishReportEmailLogFailList(0)
  367. // if e != nil {
  368. // br.Msg = "获取失败"
  369. // br.ErrMsg = "获取群发邮件记录失败, Err: " + e.Error()
  370. // return
  371. // }
  372. // failMap := make(map[int]bool, 0)
  373. // for i := range failList {
  374. // failMap[failList[i].ReportId] = true
  375. // }
  376. //
  377. // for _, item := range list {
  378. // if item.State == 2 {
  379. // item.ShareUrl = "https://share.hzinsights.com/reportEn?code=" + item.ReportCode
  380. // }
  381. // item.EmailAuth = authOk
  382. // item.EmailHasFail = failMap[item.Id]
  383. // // 邮箱PV大于0的时候, 不展示最初版本的PV
  384. // if item.PvEmail > 0 {
  385. // item.Pv = 0
  386. // }
  387. //
  388. // /*key := fmt.Sprint(`crm:enReport:edit:`, item.Id)
  389. // opUserId, _ := utils.Rc.RedisInt(key)
  390. // //如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
  391. // if opUserId <= 0 || (opUserId == this.SysUser.AdminId) {
  392. // item.CanEdit = true
  393. // } else {
  394. // adminInfo, errAdmin := system.GetSysUserById(opUserId)
  395. // if errAdmin != nil {
  396. // br.Msg = "获取失败"
  397. // br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  398. // return
  399. // }
  400. // item.Editor = adminInfo.RealName
  401. // }*/
  402. // markStatus, err := services.UpdateEnReportEditMark(item.Id, this.SysUser.AdminId, 2, this.SysUser.RealName)
  403. // if err != nil {
  404. // br.Msg = "查询标记状态失败"
  405. // br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  406. // return
  407. // }
  408. // if markStatus.Status == 0 {
  409. // item.CanEdit = true
  410. // } else {
  411. // item.Editor = markStatus.Editor
  412. // }
  413. // }
  414. // page := paging.GetPaging(currentIndex, pageSize, total)
  415. // resp := new(models.EnglishReportListResp)
  416. // resp.Paging = page
  417. // resp.List = list
  418. // br.Ret = 200
  419. // br.Success = true
  420. // br.Msg = "获取成功"
  421. // br.Data = resp
  422. //}
  423. //
  424. //// @Title 发布报告接口
  425. //// @Description 发布报告
  426. //// @Param request body models.PublishReq true "type json string"
  427. //// @Success 200 Ret=200 发布成功
  428. //// @router /publish [post]
  429. //func (this *HelpDocController) PublishReport() {
  430. // br := new(models.BaseResponse).Init()
  431. // defer func() {
  432. // this.Data["json"] = br
  433. // this.ServeJSON()
  434. // }()
  435. // var req models.PublishReq
  436. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  437. // if err != nil {
  438. // br.Msg = "参数解析异常!"
  439. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  440. // return
  441. // }
  442. // reportIds := req.ReportIds
  443. // if reportIds == "" {
  444. // br.Msg = "参数错误"
  445. // br.ErrMsg = "参数错误,报告id不可为空"
  446. // return
  447. // }
  448. //
  449. // reportArr := strings.Split(reportIds, ",")
  450. // for _, v := range reportArr {
  451. // vint, err := strconv.Atoi(v)
  452. // if err != nil {
  453. // br.Msg = "参数错误"
  454. // br.ErrMsg = "参数错误,Err:" + err.Error()
  455. // return
  456. // }
  457. // report, err := models.GetEnglishReportById(vint)
  458. // if err != nil {
  459. // br.Msg = "获取报告信息失败"
  460. // br.ErrMsg = "获取报告信息失败,Err:" + err.Error()
  461. // return
  462. // }
  463. // if report == nil {
  464. // br.Msg = "报告不存在"
  465. // return
  466. // }
  467. //
  468. // var tmpErr error
  469. //
  470. // if report.Content == "" {
  471. // br.Msg = "报告内容为空,不可发布"
  472. // br.ErrMsg = "报告内容为空,不需要生成,report_id:" + strconv.Itoa(report.Id)
  473. // return
  474. // }
  475. // if tmpErr = models.PublishEnglishReportById(report.Id); tmpErr != nil {
  476. // br.Msg = "报告发布失败"
  477. // br.ErrMsg = "报告发布失败, Err:" + tmpErr.Error() + ", report_id:" + strconv.Itoa(report.Id)
  478. // return
  479. // }
  480. // go func() {
  481. // _ = services.UpdateEnglishReportEs(report.Id, 2)
  482. // }()
  483. // }
  484. //
  485. // br.Ret = 200
  486. // br.Success = true
  487. // br.Msg = "发布成功"
  488. //}
  489. //
  490. //// @Title 取消发布报告接口
  491. //// @Description 取消发布报告
  492. //// @Param request body models.PublishCancelReq true "type json string"
  493. //// @Success 200 Ret=200 取消发布成功
  494. //// @router /publish/cancel [post]
  495. //func (this *HelpDocController) PublishCancleReport() {
  496. // br := new(models.BaseResponse).Init()
  497. // defer func() {
  498. // this.Data["json"] = br
  499. // this.ServeJSON()
  500. // }()
  501. // var req models.PublishCancelReq
  502. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  503. // if err != nil {
  504. // br.Msg = "参数解析异常!"
  505. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  506. // return
  507. // }
  508. // if req.ReportIds <= 0 {
  509. // br.Msg = "参数错误"
  510. // br.ErrMsg = "参数错误,报告id不可为空"
  511. // return
  512. // }
  513. // err = models.PublishCancelEnglishReport(req.ReportIds)
  514. // if err != nil {
  515. // br.Msg = "取消发布失败"
  516. // br.ErrMsg = "取消发布失败,Err:" + err.Error()
  517. // return
  518. // }
  519. // // 更新es里的报告状态
  520. // go func() {
  521. // _ = services.UpdateEnglishReportEs(req.ReportIds, 1)
  522. // }()
  523. // br.Ret = 200
  524. // br.Success = true
  525. // br.Msg = "取消发布成功"
  526. //}
  527. //
  528. //// @Title 删除报告接口
  529. //// @Description 删除报告
  530. //// @Param request body models.DeleteReq true "type json string"
  531. //// @Success 200 Ret=200 删除成功
  532. //// @router /delete [post]
  533. //func (this *HelpDocController) Delete() {
  534. // br := new(models.BaseResponse).Init()
  535. // defer func() {
  536. // this.Data["json"] = br
  537. // this.ServeJSON()
  538. // }()
  539. // var req models.DeleteReq
  540. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  541. // if err != nil {
  542. // br.Msg = "参数解析异常!"
  543. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  544. // return
  545. // }
  546. // if req.ReportIds <= 0 {
  547. // br.Msg = "参数错误"
  548. // br.ErrMsg = "参数错误,报告id不可为空"
  549. // return
  550. // }
  551. // reportInfo, err := models.GetEnglishReportById(req.ReportIds)
  552. // if err != nil {
  553. // if err.Error() == utils.ErrNoRow() {
  554. // br.Msg = "报告不存在"
  555. // return
  556. // }
  557. // br.Msg = "查询报告信息失败"
  558. // br.ErrMsg = "查询报告信息失败, Err" + err.Error()
  559. // return
  560. // }
  561. //
  562. // // 更新es里的报告状态
  563. // _ = services.UpdateEnglishReportEs(req.ReportIds, 1)
  564. // if err = models.DeleteEnglishReportAndChapter(reportInfo); err != nil {
  565. // br.Msg = "删除失败"
  566. // br.ErrMsg = "删除报告失败, Err: " + err.Error()
  567. // return
  568. // }
  569. //
  570. // // 重置PPT关联报告
  571. // go func() {
  572. // _ = services.ResetPPTReport(req.ReportIds, true)
  573. // }()
  574. //
  575. // go func() {
  576. // _ = services.EnglishPolicyReportSyncCancel(reportInfo)
  577. // }()
  578. // br.Ret = 200
  579. // br.Success = true
  580. // br.Msg = "删除成功"
  581. //}