123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206 |
- package controllers
- import (
- "encoding/json"
- "eta/eta_api/models"
- "eta/eta_api/models/report"
- "eta/eta_api/models/report_approve"
- "eta/eta_api/models/system"
- "eta/eta_api/services"
- "eta/eta_api/services/alarm_msg"
- "eta/eta_api/utils"
- "fmt"
- "github.com/rdlucklib/rdluck_tools/paging"
- "html"
- "strconv"
- "time"
- )
- // ListReport
- // @Title 获取报告列表接口
- // @Description 获取报告列表
- // @Param PageSize query int true "每页数据条数"
- // @Param CurrentIndex query int true "当前页页码,从1开始"
- // @Param TimeType query string true "筛选的时间类别:publish_time(发布时间),modify_time(更新时间);approve_time(审批时间)"
- // @Param StartDate query string true "开始时间"
- // @Param EndDate query string true "结束时间"
- // @Param Frequency query string true "频度"
- // @Param ClassifyIdFirst query int true "一级分类id"
- // @Param ClassifyIdSecond query int true "二级分类id"
- // @Param ClassifyIdThird query int true "三级分类id"
- // @Param State query int true "状态"
- // @Param KeyWord query string true "搜索关键词"
- // @Param PublishSort query string true "desc:降序,asc 升序(预留)"
- // @Param FilterReportType query string true "筛选报告类型,1:公共研报,2:共享研报,3:我的研报"
- // @Success 200 {object} models.ReportListResp
- // @router /list [get]
- func (this *ReportController) ListReport() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- pageSize, _ := this.GetInt("PageSize")
- currentIndex, _ := this.GetInt("CurrentIndex")
- timeType := this.GetString("TimeType")
- startDate := this.GetString("StartDate")
- endDate := this.GetString("EndDate")
- frequency := this.GetString("Frequency")
- classifyIdFirst, _ := this.GetInt("ClassifyIdFirst", 0)
- classifyIdSecond, _ := this.GetInt("ClassifyIdSecond", 0)
- classifyIdThird, _ := this.GetInt("ClassifyIdThird", 0)
- state, _ := this.GetInt("State")
- keyWord := this.GetString("KeyWord")
- msgIsSend, _ := this.GetInt("MsgIsSend")
- filterReportType, _ := this.GetInt("FilterReportType", 1)
- var startSize int
- if pageSize <= 0 {
- pageSize = utils.PageSize20
- }
- if currentIndex <= 0 {
- currentIndex = 1
- }
- startSize = utils.StartIndex(currentIndex, pageSize)
- if timeType == "" {
- timeType = "publish_time"
- }
- if timeType != "publish_time" && timeType != "modify_time" && timeType != "approve_time" {
- br.Msg = "请选择正确的时间"
- br.ErrMsg = "请选择正确的时间"
- return
- }
- var condition string
- var pars []interface{}
- if keyWord != "" {
- condition += ` AND (a.title LIKE ? OR a.admin_real_name LIKE ? ) `
- pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
- }
- if startDate != "" {
- condition += ` AND a.` + timeType + ` >= ? `
- pars = append(pars, startDate)
- }
- if endDate != "" {
- condition += ` AND a.` + timeType + ` <= ? `
- pars = append(pars, endDate)
- }
- if frequency != "" {
- condition += ` AND a.frequency = ? `
- pars = append(pars, frequency)
- }
- if classifyIdFirst > 0 {
- condition += ` AND a.classify_id_first = ? `
- pars = append(pars, classifyIdFirst)
- }
- if classifyIdSecond > 0 {
- condition += ` AND a.classify_id_second = ? `
- pars = append(pars, classifyIdSecond)
- }
- if classifyIdThird > 0 {
- condition += ` AND a.classify_id_third = ? `
- pars = append(pars, classifyIdSecond)
- }
- if state > 0 {
- condition += ` AND a.state = ? `
- pars = append(pars, state)
- }
- // 消息是否已推送 1-未推送; 2-已推送
- if msgIsSend == 1 {
- condition += ` AND (a.msg_is_send = 0 OR a.ths_msg_is_send = 0) `
- }
- if msgIsSend == 2 {
- condition += ` AND a.msg_is_send = 1 AND a.ths_msg_is_send = 1 `
- }
- var err error
- var total int
- var list []*models.ReportList
- switch filterReportType {
- // 筛选报告类型,1:公共研报,2:共享研报,3:我的研报
- case 1:
- condition += ` AND a.is_public_publish = ? `
- // TODO 临时使用,提测上线前得打开注释
- //condition += ` AND a.state in (2,6) `
- pars = append(pars, 1)
- case 3:
- condition += ` AND a.admin_id = ? `
- pars = append(pars, this.SysUser.AdminId)
- case 2:
- condition += ` AND (a.admin_id = ? or b.admin_id = ?) `
- pars = append(pars, this.SysUser.AdminId, this.SysUser.AdminId)
- }
- // 共享报告需要连表查询,所以需要单独写
- if filterReportType == 2 {
- total, err = models.GetReportListCountByGrant(condition, pars)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- list, err = models.GetReportListByGrant(condition, pars, startSize, pageSize)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- } else {
- total, err = models.GetReportListCountV1(condition, pars)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- list, err = models.GetReportListV1(condition, pars, startSize, pageSize)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- }
- listLen := len(list)
- if listLen > 0 {
- pvMap := make(map[int]int)
- uvMap := make(map[int]int)
- reportIdArr := make([]string, 0)
- syncReportIdArr := make([]string, 0) // 同步过来的报告IDs
- oldAndNewReportIdMap := make(map[int]int) // 旧报告和新报告的id对应关系
- for i := 0; i < listLen; i++ {
- reportIdArr = append(reportIdArr, strconv.Itoa(list[i].Id))
- if list[i].OldReportId > 0 {
- syncReportIdArr = append(syncReportIdArr, strconv.Itoa(list[i].OldReportId))
- oldAndNewReportIdMap[list[i].OldReportId] = list[i].Id
- }
- pvMap[list[i].Id] = list[i].Pv
- uvMap[list[i].Id] = list[i].Uv
- }
- // 当下报告的pv,uv
- if len(reportIdArr) > 0 {
- pvList, e := models.GetReportPvUvByReportIdList(reportIdArr)
- if e != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取同步报告对应的PV、UV失败, Err: " + e.Error()
- return
- }
- for _, v := range pvList {
- pv := pvMap[v.ReportId]
- uv := uvMap[v.ReportId]
- pvMap[v.ReportId] = v.PvTotal + pv
- uvMap[v.ReportId] = v.UvTotal + uv
- }
- }
- //reportIds := strings.Join(reportIdArr, ",")
- //syncReportIds := strings.Join(syncReportIdArr, ",")
- // 查询同步过来的报告对应的老报告PV+UV
- if len(syncReportIdArr) > 0 {
- puvList, e := models.GetPUVByResearchReportIds(syncReportIdArr)
- if e != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取同步报告对应的PV、UV失败, Err: " + e.Error()
- return
- }
- puvLen := len(puvList)
- for i := 0; i < puvLen; i++ {
- newReportId, ok := oldAndNewReportIdMap[puvList[i].ResearchReportId]
- if ok {
- pv := pvMap[newReportId]
- uv := uvMap[newReportId]
- pvMap[newReportId] = puvList[i].Pv + pv
- uvMap[newReportId] = puvList[i].Uv + uv
- }
- }
- }
- // 晨周报音频列表
- videoList, err := models.GetReportChapterVideoListByReportIds(reportIdArr)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取报告音频文件失败,Err:" + err.Error()
- return
- }
- for i := 0; i < listLen; i++ {
- list[i].Content = html.UnescapeString(list[i].Content)
- list[i].ContentSub = html.UnescapeString(list[i].ContentSub)
- // 除周报外其余报告均可推送客群
- list[i].NeedThsMsg = 1
- //if list[i].HasChapter == 1 && list[i].ChapterType == utils.REPORT_TYPE_WEEK {
- // list[i].NeedThsMsg = 0
- //}
- chapterList := make([]*models.ReportChapterVideoList, 0)
- for ii := 0; ii < len(videoList); ii++ {
- if list[i].Id == videoList[ii].ReportId {
- chapterList = append(chapterList, videoList[ii])
- }
- }
- list[i].ChapterVideoList = chapterList
- list[i].Pv += pvMap[list[i].Id]
- list[i].Uv += uvMap[list[i].Id]
- }
- }
- for _, item := range list {
- /*key := fmt.Sprint(`crm:report:edit:`, item.Id)
- opUserId, _ := utils.Rc.RedisInt(key)
- //如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
- if opUserId <= 0 || (opUserId == this.SysUser.AdminId) || item.ClassifyNameFirst == "周报" || item.ClassifyNameFirst == "晨报" {
- item.CanEdit = true
- } else {
- adminInfo, errAdmin := system.GetSysUserById(opUserId)
- if errAdmin != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
- return
- }
- item.Editor = adminInfo.RealName
- }*/
- if item.HasChapter == 1 {
- item.CanEdit = true
- continue
- }
- markStatus, err := services.UpdateReportEditMark(item.Id, 0, this.SysUser.AdminId, 2, this.SysUser.RealName, this.Lang)
- if err != nil {
- br.Msg = "查询标记状态失败"
- br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
- return
- }
- if markStatus.Status == 0 {
- item.CanEdit = true
- } else {
- item.Editor = markStatus.Editor
- }
- }
- page := paging.GetPaging(currentIndex, pageSize, total)
- resp := new(models.ReportListResp)
- resp.Paging = page
- resp.List = list
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // Add
- // @Title 新增报告接口
- // @Description 新增报告(不区分报告类型)
- // @Param request body models.AddReq true "type json string"
- // @Success 200 {object} models.AddResp
- // @router /add [post]
- func (this *ReportController) Add() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- sysUser := this.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req models.AddReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.Title == `` {
- br.Msg = "标题不能为空"
- br.ErrMsg = "标题不能为空"
- br.IsSendEmail = false
- return
- }
- if req.ClassifyIdFirst <= 0 {
- br.Msg = "分类必填"
- br.ErrMsg = "分类必填"
- br.IsSendEmail = false
- return
- }
- var contentSub string
- if req.Content != "" {
- e := utils.ContentXssCheck(req.Content)
- if e != nil {
- br.Msg = "存在非法标签"
- br.ErrMsg = "存在非法标签, Err: " + e.Error()
- return
- }
- content, e := services.FilterReportContentBr(req.Content)
- if e != nil {
- br.Msg = "内容去除前后空格失败"
- br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
- return
- }
- req.Content = content
- contentSub, err = services.GetReportContentSub(req.Content)
- if err != nil {
- go alarm_msg.SendAlarmMsg("ContentSub 失败,Err:"+err.Error(), 3)
- //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
- }
- }
- // 报告期数
- maxStage, err := models.GetReportStage(req.ClassifyIdFirst, req.ClassifyIdSecond, req.ClassifyIdThird)
- if err != nil {
- br.Msg = "期数获取失败!"
- br.ErrMsg = "期数获取失败,Err:" + err.Error()
- return
- }
- // 根据审批开关及审批流判断当前报告状态
- state, e := services.CheckReportCurrState(report_approve.FlowReportTypeChinese, req.ClassifyIdFirst, req.ClassifyIdSecond, req.ClassifyIdThird, models.ReportOperateAdd)
- if e != nil {
- br.Msg = "操作失败"
- br.ErrMsg = "校验报告当前状态失败, Err: " + e.Error()
- return
- }
- // 协作方式,1:个人,2:多人协作。默认:1
- if req.CollaborateType == 0 {
- req.CollaborateType = 1
- }
- // 报告布局,1:常规布局,2:智能布局。默认:1
- if req.ReportLayout == 0 {
- req.ReportLayout = 1
- }
- // 是否公开发布,1:是,2:否
- if req.IsPublicPublish == 0 {
- req.IsPublicPublish = 1
- }
- item := new(models.Report)
- item.AddType = req.AddType
- item.ReportVersion = 2
- item.ClassifyIdFirst = req.ClassifyIdFirst
- item.ClassifyNameFirst = req.ClassifyNameFirst
- item.ClassifyIdSecond = req.ClassifyIdSecond
- item.ClassifyNameSecond = req.ClassifyNameSecond
- item.Title = req.Title
- item.Abstract = req.Abstract
- item.Author = req.Author
- item.Frequency = req.Frequency
- item.State = state
- item.Content = html.EscapeString(req.Content)
- item.Stage = maxStage + 1
- item.ContentSub = html.EscapeString(contentSub)
- item.CreateTime = req.CreateTime
- item.ModifyTime = time.Now()
- item.ReportVersion = req.ReportVersion
- item.AdminId = sysUser.AdminId
- item.AdminRealName = sysUser.RealName
- item.ClassifyIdThird = req.ClassifyIdThird
- item.ClassifyNameThird = req.ClassifyNameThird
- // 产品要求,如果是多人协作,那么就是章节类型的报告
- if req.CollaborateType == 2 {
- item.HasChapter = 1
- item.ChapterType = ""
- }
- item.LastModifyAdminId = sysUser.AdminId
- item.LastModifyAdminName = sysUser.RealName
- item.ContentModifyTime = time.Now()
- item.NeedSplice = 1
- item.ContentStruct = html.EscapeString(req.ContentStruct)
- item.HeadImg = req.HeadImg
- item.EndImg = req.EndImg
- item.CanvasColor = req.CanvasColor
- item.HeadResourceId = req.HeadResourceId
- item.EndResourceId = req.EndResourceId
- item.CollaborateType = req.CollaborateType
- item.ReportLayout = req.ReportLayout
- item.IsPublicPublish = req.IsPublicPublish
- item.ReportCreateTime = time.Now()
- err, errMsg := services.AddReportAndChapter(item, req.InheritReportId, req.GrantAdminIdList)
- if err != nil {
- br.Msg = "保存失败"
- if errMsg != "" {
- br.Msg = errMsg
- }
- br.ErrMsg = "保存失败,Err:" + err.Error()
- return
- }
- recordItem := &models.ReportStateRecord{
- ReportId: item.Id,
- ReportType: 1,
- State: 1,
- AdminId: this.SysUser.AdminId,
- AdminName: this.SysUser.AdminName,
- CreateTime: time.Now(),
- }
- go func() {
- _, _ = models.AddReportStateRecord(recordItem)
- }()
- resp := new(models.AddResp)
- resp.ReportId = int64(item.Id)
- resp.ReportCode = item.ReportCode
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.Data = resp
- }
- // Edit
- // @Title 编辑报告基础信息接口
- // @Description 编辑报告基础信息(不区分报告类型)
- // @Param request body models.EditReq true "type json string"
- // @Success 200 {object} models.EditResp
- // @router /edit [post]
- func (this *ReportController) Edit() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- sysUser := this.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req models.EditReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- //if req.Content == "" {
- // br.Msg = "报告内容不能为空"
- // return
- //}
- //更新标记key
- markStatus, err := services.UpdateReportEditMark(int(req.ReportId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
- if err != nil {
- br.Msg = err.Error()
- return
- }
- if markStatus.Status == 1 {
- br.Msg = markStatus.Msg
- //br.Ret = 202 //202 服务器已接受请求,但尚未处理。
- return
- }
- reportInfo, e := models.GetReportByReportId(int(req.ReportId))
- if e != nil {
- if e.Error() == utils.ErrNoRow() {
- br.Msg = "报告已被删除, 请刷新页面"
- return
- }
- br.Msg = "操作失败"
- br.ErrMsg = "获取报告失败, Err: " + e.Error()
- return
- }
- if reportInfo.State == models.ReportStatePublished || reportInfo.State == models.ReportStatePass {
- br.Msg = "该报告已发布,不允许编辑"
- br.ErrMsg = "该报告已发布,不允许编辑"
- return
- }
- // 编辑报告信息
- err, errMsg := services.EditReport(reportInfo, req, sysUser)
- if err != nil {
- br.Msg = "保存失败"
- if errMsg != "" {
- br.Msg = errMsg
- }
- br.ErrMsg = "保存失败,Err:" + err.Error()
- return
- }
- reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
- resp := new(models.EditResp)
- resp.ReportId = req.ReportId
- resp.ReportCode = reportCode
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.Data = resp
- }
- // Detail
- // @Title 获取报告详情接口
- // @Description 获取报告详情
- // @Param request body models.ReportDetailReq true "type json string"
- // @Success 200 {object} models.Report
- // @router /detail [get]
- func (this *ReportController) Detail() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- /*var req models.ReportDetailReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.ReportId <= 0 {
- br.Msg = "参数错误"
- return
- }*/
- reportId, err := this.GetInt("ReportId")
- if err != nil {
- br.Msg = "获取参数失败!"
- br.ErrMsg = "获取参数失败,Err:" + err.Error()
- return
- }
- if reportId <= 0 {
- br.Msg = "参数错误"
- return
- }
- item, err := models.GetReportById(reportId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- br.Msg = "报告已被删除"
- return
- }
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- chapterList := make([]*models.ReportChapter, 0)
- if item.HasChapter == 1 {
- // 获取章节内容
- tmpChapterList, err := models.GetPublishedChapterListByReportId(item.Id)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取晨/周报章节列表失败, Err: " + err.Error()
- return
- }
- if len(tmpChapterList) > 0 {
- // 章节类型的字段赋值
- for _, item := range tmpChapterList {
- item.Content = html.UnescapeString(item.Content)
- item.ContentSub = html.UnescapeString(item.ContentSub)
- chapterList = append(chapterList, item)
- }
- }
- //item.Abstract = item.Title
- }
- item.Content = html.UnescapeString(item.Content)
- item.ContentSub = html.UnescapeString(item.ContentSub)
- item.ContentStruct = html.UnescapeString(item.ContentStruct)
- resp := &models.ReportDetailView{
- ReportDetail: item,
- ChapterList: chapterList,
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // SaveReportContent
- // @Title 保存草稿
- // @Description 保存草稿
- // @Param request body models.SaveReportContent true "type json string"
- // @Success 200 {object} models.ReportAuthorResp
- // @router /saveReportContent [post]
- func (this *ReportController) SaveReportContent() {
- br := new(models.BaseResponse).Init()
- br.IsSendEmail = false
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- sysUser := this.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req models.SaveReportContent
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- reportId := req.ReportId
- noChangeFlag := req.NoChange
- if reportId <= 0 {
- resp := new(models.SaveReportContentResp)
- resp.ReportId = reportId
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.Data = resp
- return
- }
- // 获取报告详情
- reportInfo, _ := models.GetReportByReportId(int(req.ReportId))
- if reportInfo != nil && reportInfo.State == 2 {
- br.Msg = "该报告已发布,不允许编辑"
- br.ErrMsg = "该报告已发布,不允许编辑"
- return
- }
- // 标记更新中
- {
- markStatus, err := services.UpdateReportEditMark(int(req.ReportId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
- if err != nil {
- br.Msg = err.Error()
- return
- }
- if markStatus.Status == 1 {
- br.Msg = markStatus.Msg
- return
- }
- }
- // 内容有过修改的话,那么逻辑处理
- if noChangeFlag != 1 {
- content := req.Content
- if content == "" {
- content = this.GetString("Content")
- }
- if content != "" {
- e := utils.ContentXssCheck(req.Content)
- if e != nil {
- br.Msg = "存在非法标签"
- br.ErrMsg = "存在非法标签, Err: " + e.Error()
- return
- }
- contentClean, e := services.FilterReportContentBr(req.Content)
- if e != nil {
- br.Msg = "内容去除前后空格失败"
- br.ErrMsg = "内容去除前后空格失败, Err: " + e.Error()
- return
- }
- content = contentClean
- contentSub, err := services.GetReportContentSub(content)
- if err != nil {
- go alarm_msg.SendAlarmMsg("解析 ContentSub 失败,Err:"+err.Error(), 3)
- //utils.SendEmail(utils.APPNAME+"失败提醒", "解析 ContentSub 失败,Err:"+err.Error(), utils.EmailSendToUsers)
- }
- reportInfo.Content = html.EscapeString(content)
- reportInfo.ContentSub = html.EscapeString(contentSub)
- reportInfo.ContentStruct = html.EscapeString(req.ContentStruct)
- reportInfo.HeadImg = req.HeadImg
- reportInfo.EndImg = req.EndImg
- reportInfo.CanvasColor = req.CanvasColor
- reportInfo.HeadResourceId = req.HeadResourceId
- reportInfo.EndResourceId = req.EndResourceId
- reportInfo.ModifyTime = time.Now()
- reportInfo.ContentModifyTime = time.Now()
- updateCols := []string{"Content", "ContentSub", "ContentStruct", "HeadImg", "EndImg", "CanvasColor", "HeadResourceId", "EndResourceId", "ModifyTime", "ContentModifyTime"}
- err = reportInfo.UpdateReport(updateCols)
- if err != nil {
- br.Msg = "保存失败"
- br.ErrMsg = "保存失败,Err:" + err.Error()
- return
- }
- go models.AddReportSaveLog(reportId, this.SysUser.AdminId, reportInfo.Content, reportInfo.ContentSub, reportInfo.ContentStruct, reportInfo.CanvasColor, this.SysUser.AdminName, reportInfo.HeadResourceId, reportInfo.EndResourceId)
- }
- }
- resp := new(models.SaveReportContentResp)
- resp.ReportId = reportId
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.Data = resp
- }
- // AuthorizedListReport
- // @Title 获取有权限的报告列表接口
- // @Description 获取有权限的报告列表接口
- // @Param PageSize query int true "每页数据条数"
- // @Param CurrentIndex query int true "当前页页码,从1开始"
- // @Param Keyword query string true "搜索关键词"
- // @Param ClassifyIdFirst query int true "一级分类id"
- // @Param ClassifyIdSecond query int true "二级分类id"
- // @Param ClassifyIdThird query int true "三级分类id"
- // @Success 200 {object} models.ReportListResp
- // @router /list/authorized [get]
- func (this *ReportController) AuthorizedListReport() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- pageSize, _ := this.GetInt("PageSize")
- currentIndex, _ := this.GetInt("CurrentIndex")
- keyword := this.GetString("Keyword")
- classifyIdFirst, _ := this.GetInt("ClassifyIdFirst", 0)
- classifyIdSecond, _ := this.GetInt("ClassifyIdSecond", 0)
- classifyIdThird, _ := this.GetInt("ClassifyIdThird", 0)
- var startSize int
- if pageSize <= 0 {
- pageSize = utils.PageSize20
- }
- if currentIndex <= 0 {
- currentIndex = 1
- }
- startSize = utils.StartIndex(currentIndex, pageSize)
- var list []*models.ReportList
- // 没有输入信息,那就不展示
- if keyword == `` && classifyIdFirst <= 0 {
- page := paging.GetPaging(currentIndex, pageSize, 0)
- resp := new(models.ReportListResp)
- resp.Paging = page
- resp.List = list
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- return
- }
- // 当前用户有权限的报告id列表
- grantReportIdList := make([]int, 0)
- {
- obj := report.ReportGrant{}
- grantList, err := obj.GetGrantListByAdminId(this.SysUser.AdminId)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取授权报告id失败,Err:" + err.Error()
- return
- }
- for _, v := range grantList {
- grantReportIdList = append(grantReportIdList, v.ReportId)
- }
- }
- var condition string
- var pars []interface{}
- if classifyIdFirst > 0 {
- condition += ` AND a.classify_id_first = ? `
- pars = append(pars, classifyIdFirst)
- }
- if classifyIdSecond > 0 {
- condition += ` AND a.classify_id_second = ? `
- pars = append(pars, classifyIdSecond)
- }
- if classifyIdThird > 0 {
- condition += ` AND a.classify_id_third = ? `
- pars = append(pars, classifyIdSecond)
- }
- if keyword != `` {
- condition += ` AND a.title LIKE ? `
- pars = utils.GetLikeKeywordPars(pars, keyword, 1)
- }
- var err error
- var total int
- orCondition := `AND ( (a.is_public_publish = ? AND a.state in (2,6)) or a.admin_id = ? `
- pars = append(pars, 1, this.SysUser.AdminId)
- // 当前用户有权限的报告id列表
- num := len(grantReportIdList)
- if num > 0 {
- orCondition += ` OR a.id in (` + utils.GetOrmInReplace(num) + `)`
- pars = append(pars, grantReportIdList)
- }
- orCondition += ` ) `
- condition += orCondition
- total, err = models.GetReportListCountByAuthorized(condition, pars)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- list, err = models.GetReportListByAuthorized(condition, pars, startSize, pageSize)
- if err != nil {
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- //for _, item := range list {
- // if item.HasChapter == 1 {
- // item.CanEdit = true
- // } else {
- // markStatus, err := services.UpdateReportEditMark(item.Id, this.SysUser.AdminId, 2, this.SysUser.RealName, this.Lang)
- // if err != nil {
- // br.Msg = "查询标记状态失败"
- // br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
- // return
- // }
- // if markStatus.Status == 0 {
- // item.CanEdit = true
- // } else {
- // item.Editor = markStatus.Editor
- // }
- // }
- //}
- page := paging.GetPaging(currentIndex, pageSize, total)
- resp := new(models.ReportListResp)
- resp.Paging = page
- resp.List = list
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // BaseDetail
- // @Title 获取报告基础信息详情接口
- // @Description 获取报告基础信息详情接口
- // @Param request body models.ReportDetailReq true "type json string"
- // @Success 200 {object} models.Report
- // @router /detail/base [get]
- func (this *ReportController) BaseDetail() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- /*var req models.ReportDetailReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- if req.ReportId <= 0 {
- br.Msg = "参数错误"
- return
- }*/
- reportId, err := this.GetInt("ReportId")
- if err != nil {
- br.Msg = "获取参数失败!"
- br.ErrMsg = "获取参数失败,Err:" + err.Error()
- return
- }
- if reportId <= 0 {
- br.Msg = "参数错误"
- return
- }
- reportInfo, err := models.GetReportById(reportId)
- if err != nil {
- if err.Error() == utils.ErrNoRow() {
- br.Msg = "报告已被删除"
- return
- }
- br.Msg = "获取失败"
- br.ErrMsg = "获取失败,Err:" + err.Error()
- return
- }
- // 基础信息就不获取章节信息了
- chapterList := make([]*models.ReportChapter, 0)
- reportInfo.Content = html.UnescapeString(reportInfo.Content)
- reportInfo.ContentSub = html.UnescapeString(reportInfo.ContentSub)
- grandAdminList := make([]models.ReportDetailViewAdmin, 0)
- permissionList := make([]models.ReportDetailViewPermission, 0)
- // 处理报告授权用户列表
- {
- obj := report.ReportGrant{}
- grantList, tmpErr := obj.GetGrantListById(reportId)
- if tmpErr != nil {
- br.Msg = "获取章节id授权用户列表失败"
- br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
- return
- }
- if len(grantList) > 0 {
- grandAdminIdList := make([]int, 0)
- for _, v := range grantList {
- grandAdminIdList = append(grandAdminIdList, v.AdminId)
- }
- adminList, tmpErr := system.GetAdminListByIdList(grandAdminIdList)
- if tmpErr != nil {
- br.Msg = "获取章节id授权用户列表失败"
- br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
- return
- }
- for _, v := range adminList {
- grandAdminList = append(grandAdminList, models.ReportDetailViewAdmin{
- AdminId: v.AdminId,
- AdminName: v.RealName,
- })
- }
- }
- }
- // 处理章节id关联品种id列表
- {
- minClassifyId := reportInfo.ClassifyIdThird
- if minClassifyId <= 0 {
- minClassifyId = reportInfo.ClassifyIdSecond
- }
- if minClassifyId <= 0 {
- minClassifyId = reportInfo.ClassifyIdFirst
- }
- if minClassifyId <= 0 {
- br.Msg = "分类异常"
- br.ErrMsg = "分类异常"
- return
- }
- // 获取分类关联的品种id
- classifyPermissionList, tmpErr := models.GetPermission(minClassifyId)
- if tmpErr != nil {
- br.Msg = "获取分类信息失败"
- br.ErrMsg = "获取失败,Err:" + tmpErr.Error()
- return
- }
- if len(classifyPermissionList) > 0 {
- permissionIdList := make([]int, 0)
- for _, v := range classifyPermissionList {
- permissionIdList = append(permissionIdList, v.ChartPermissionId)
- }
- adminList, tmpErr := models.GetChartPermissionByIdList(permissionIdList)
- if tmpErr != nil {
- br.Msg = "获取章节id授权用户列表失败"
- br.ErrMsg = "获取章节id授权用户列表失败, Err: " + tmpErr.Error()
- return
- }
- for _, v := range adminList {
- permissionList = append(permissionList, models.ReportDetailViewPermission{
- PermissionId: v.ChartPermissionId,
- PermissionName: v.ChartPermissionName,
- })
- }
- }
- }
- resp := &models.ReportDetailView{
- ReportDetail: reportInfo,
- ChapterList: chapterList,
- GrandAdminList: grandAdminList,
- PermissionList: permissionList,
- }
- br.Ret = 200
- br.Success = true
- br.Msg = "获取成功"
- br.Data = resp
- }
- // EditLayoutImg
- // @Title 版图设置接口
- // @Description 版图设置接口
- // @Param request body models.EditLayoutImgReq true "type json string"
- // @Success 200 {object} models.EditResp
- // @router /layout_img/edit [post]
- func (this *ReportController) EditLayoutImg() {
- br := new(models.BaseResponse).Init()
- defer func() {
- this.Data["json"] = br
- this.ServeJSON()
- }()
- sysUser := this.SysUser
- if sysUser == nil {
- br.Msg = "请登录"
- br.ErrMsg = "请登录,SysUser Is Empty"
- br.Ret = 408
- return
- }
- var req models.EditLayoutImgReq
- err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
- if err != nil {
- br.Msg = "参数解析异常!"
- br.ErrMsg = "参数解析失败,Err:" + err.Error()
- return
- }
- //if req.Content == "" {
- // br.Msg = "报告内容不能为空"
- // return
- //}
- //更新标记key
- markStatus, err := services.UpdateReportEditMark(int(req.ReportId), 0, sysUser.AdminId, 1, sysUser.RealName, this.Lang)
- if err != nil {
- br.Msg = err.Error()
- return
- }
- if markStatus.Status == 1 {
- br.Msg = markStatus.Msg
- //br.Ret = 202 //202 服务器已接受请求,但尚未处理。
- return
- }
- reportInfo, e := models.GetReportByReportId(int(req.ReportId))
- if e != nil {
- if e.Error() == utils.ErrNoRow() {
- br.Msg = "报告已被删除, 请刷新页面"
- return
- }
- br.Msg = "操作失败"
- br.ErrMsg = "获取报告失败, Err: " + e.Error()
- return
- }
- if reportInfo.State == models.ReportStatePublished || reportInfo.State == models.ReportStatePass {
- br.Msg = "该报告已发布,不允许编辑"
- br.ErrMsg = "该报告已发布,不允许编辑"
- return
- }
- // 编辑报告信息
- err, errMsg := services.EditReportLayoutImg(reportInfo, req, sysUser)
- if err != nil {
- br.Msg = "保存失败"
- if errMsg != "" {
- br.Msg = errMsg
- }
- br.ErrMsg = "保存失败,Err:" + err.Error()
- return
- }
- reportCode := utils.MD5(strconv.Itoa(int(req.ReportId)))
- resp := new(models.EditResp)
- resp.ReportId = req.ReportId
- resp.ReportCode = reportCode
- br.Ret = 200
- br.Success = true
- br.Msg = "保存成功"
- br.Data = resp
- }
- // TODO 修复历史报告的ES数据
- // init
- // @Description: 修复历史报告数据
- // @author: Roc
- // @datetime 2024-06-21 09:19:05
- func init() {
- //fixApproveRecord()
- //fixChapterPermission()
- }
- // 修复研报审批数据
- func fixApproveRecord() {
- recordOb := new(report_approve.ReportApproveRecord)
- recordCond := fmt.Sprintf(` AND %s = ? AND %s in (?,?)`, report_approve.ReportApproveRecordCols.NodeType, report_approve.ReportApproveRecordCols.State)
- recordPars := make([]interface{}, 0)
- recordPars = append(recordPars, 0, report_approve.ReportApproveStatePass, report_approve.ReportApproveStateRefuse)
- list, e := recordOb.GetItemsByCondition(recordCond, recordPars, []string{}, "")
- if e != nil {
- fmt.Println("查找审批记录失败,Err:", e.Error())
- return
- }
- for _, recordItem := range list {
- //fmt.Println(recordItem)
- recordItem.NodeState = report_approve.ReportApproveStatePass
- recordItem.NodeApproveUserId = recordItem.ApproveUserId
- recordItem.NodeApproveUserName = recordItem.ApproveUserName
- recordItem.NodeApproveTime = recordItem.ApproveTime
- // 如果不是或签,那么只需要修复自己就好了
- if recordItem.ApproveType != report_approve.NodeApproveTypeAny {
- recordCols := []string{"State", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
- if e = recordItem.Update(recordCols); e != nil {
- fmt.Println("更新审批记录状态失败,Err:", e.Error())
- }
- continue
- }
- // 或签
- // 需要将该审批的同一个节点的记录标记为已审批
- if e := recordItem.UpdateNodeState(recordItem.ReportApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
- fmt.Println("更新同一节点的其他审批记录状态失败,Err:", e.Error())
- }
- }
- fmt.Println("审批数据修复完成")
- }
- // fixChapterPermission
- // @Description: 修复章节关联的品种权限
- // @author: Roc
- // @datetime 2024-06-20 18:08:34
- func fixChapterPermission() {
- allChapterTypePermissionList, err := models.GetAllChapterTypePermission()
- if err != nil {
- fmt.Println("获取所有章节类型ID获取章节类型权限列表失败,Err:", err.Error())
- return
- }
- currChapterTypePermissionIdListMap := make(map[int][]int)
- hasPermissionMap := make(map[string]bool)
- for _, v := range allChapterTypePermissionList {
- tmpChapterTypePermissionList, ok := currChapterTypePermissionIdListMap[v.ReportChapterTypeId]
- if !ok {
- tmpChapterTypePermissionList = make([]int, 0)
- }
- key := fmt.Sprint(v.ReportChapterTypeId, "-", v.ChartPermissionId)
- if _, has := hasPermissionMap[key]; !has {
- hasPermissionMap[key] = true
- currChapterTypePermissionIdListMap[v.ReportChapterTypeId] = append(tmpChapterTypePermissionList, v.ChartPermissionId)
- }
- }
- notIdList := []int{9675, 9675, 9740, 9749, 9768, 9773, 9791, 9792, 9793, 9850, 9851, 9852, 9852, 9852, 9853, 9854, 9856, 9857, 9857, 9858, 9859, 9860, 9861, 9862, 9862, 9863, 9866}
- allReportChapterList, err := models.GetAllReportChapter()
- if err != nil {
- fmt.Println("获取所有章节失败,Err:", err.Error())
- return
- }
- addList := make([]*report.ReportChapterPermissionMapping, 0)
- for _, v := range allReportChapterList {
- // 如果是上面的章节id,那么就过滤掉,因为已经入库了
- if utils.InArrayByInt(notIdList, v.ReportChapterId) {
- continue
- }
- permissionIdList, ok := currChapterTypePermissionIdListMap[v.TypeId]
- if !ok {
- continue
- }
- for _, permissionId := range permissionIdList {
- addList = append(addList, &report.ReportChapterPermissionMapping{
- ReportChapterPermissionMappingId: 0,
- ReportChapterId: v.ReportChapterId,
- ChartPermissionId: permissionId,
- CreateTime: v.ModifyTime,
- })
- }
- }
- obj := report.ReportChapterPermissionMapping{}
- err = obj.MultiAdd(addList)
- if err != nil {
- fmt.Println("批量添加报章节的品种权限失败,Err:", err.Error())
- }
- return
- }
|