|
@@ -0,0 +1,401 @@
|
|
|
+package report_approve
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_api/controllers"
|
|
|
+ "eta/eta_api/models"
|
|
|
+ "eta/eta_api/models/report_approve"
|
|
|
+ "eta/eta_api/models/smart_report"
|
|
|
+ "eta/eta_api/models/system"
|
|
|
+ "eta/eta_api/services"
|
|
|
+ smartReportService "eta/eta_api/services/smart_report"
|
|
|
+ "eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
+ "github.com/rdlucklib/rdluck_tools/paging"
|
|
|
+ "strings"
|
|
|
+ "sync"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// ReportApproveFlowController 智能研报
|
|
|
+type ReportApproveFlowController struct {
|
|
|
+ controllers.BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+// Add
|
|
|
+// @Title 新增
|
|
|
+// @Description 新增
|
|
|
+// @Param request body smart_report.SmartReportAddReq true "type json string"
|
|
|
+// @Success 200 {object} smart_report.SmartReportItem
|
|
|
+// @router /add [post]
|
|
|
+func (this *ReportApproveFlowController) Add() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ 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 smart_report.SmartReportAddReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.AddType != 1 && req.AddType != 2 {
|
|
|
+ br.Msg = "请选择新增方式"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if req.ClassifyIdFirst <= 0 || req.ClassifyIdSecond <= 0 {
|
|
|
+ br.Msg = "请选择分类"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.Title = strings.TrimSpace(req.Title)
|
|
|
+ if req.Title == "" {
|
|
|
+ br.Msg = "请输入标题"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ reportOB := new(smart_report.SmartReport)
|
|
|
+ stageMax, e := reportOB.GetMaxStageByClassifyId(req.ClassifyIdSecond)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = "获取期数失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ stageMax += 1
|
|
|
+
|
|
|
+ item := new(smart_report.SmartReport)
|
|
|
+ item.AddType = req.AddType
|
|
|
+ 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.Stage = stageMax
|
|
|
+ item.AdminId = sysUser.AdminId
|
|
|
+ item.AdminRealName = sysUser.RealName
|
|
|
+ item.LastModifyAdminId = sysUser.AdminId
|
|
|
+ item.LastModifyAdminName = sysUser.RealName
|
|
|
+ item.State = smart_report.SmartReportStateWaitPublish
|
|
|
+ item.CreateTime = time.Now().Local()
|
|
|
+ item.ModifyTime = time.Now().Local()
|
|
|
+ // 继承报告
|
|
|
+ if req.AddType == 2 {
|
|
|
+ ob := new(smart_report.SmartReport)
|
|
|
+ cond := ` AND classify_id_first = ? AND classify_id_second = ?`
|
|
|
+ pars := make([]interface{}, 0)
|
|
|
+ pars = append(pars, req.ClassifyIdFirst, req.ClassifyIdSecond)
|
|
|
+ lastReport, e := ob.GetItemByCondition(cond, pars, "stage DESC")
|
|
|
+ if e != nil && e.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取往期研报失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if lastReport != nil {
|
|
|
+ item.Content = lastReport.Content
|
|
|
+ item.ContentSub = lastReport.ContentSub
|
|
|
+ item.ContentStruct = lastReport.ContentStruct
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if e = item.Create(); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = "新增研报失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ uniqueCode := utils.MD5(fmt.Sprint("smart_", item.SmartReportId))
|
|
|
+ item.ReportCode = uniqueCode
|
|
|
+ if e = item.Update([]string{"ReportCode"}); e != nil {
|
|
|
+ br.Msg = "操作失败"
|
|
|
+ br.ErrMsg = "更新研报编码失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := smart_report.FormatSmartReport2Item(item)
|
|
|
+
|
|
|
+ recordItem := &models.ReportStateRecord{
|
|
|
+ ReportId: item.SmartReportId,
|
|
|
+ ReportType: 2,
|
|
|
+ State: smart_report.SmartReportStateWaitPublish,
|
|
|
+ AdminId: this.SysUser.AdminId,
|
|
|
+ AdminName: this.SysUser.AdminName,
|
|
|
+ CreateTime: time.Now(),
|
|
|
+ }
|
|
|
+ go func() {
|
|
|
+ _, _ = models.AddReportStateRecord(recordItem)
|
|
|
+ }()
|
|
|
+
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "操作成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// List
|
|
|
+// @Title 报告列表
|
|
|
+// @Description 报告列表
|
|
|
+// @Param PageSize query int true "每页数据条数"
|
|
|
+// @Param CurrentIndex query int true "当前页页码"
|
|
|
+// @Param TimeType query string false "筛选的时间类别: publish_time-发布时间, modify_time-更新时间"
|
|
|
+// @Param StartDate query string false "开始时间"
|
|
|
+// @Param EndDate query string false "结束时间"
|
|
|
+// @Param Frequency query string false "频度"
|
|
|
+// @Param ClassifyIdFirst query int false "一级分类ID"
|
|
|
+// @Param ClassifyIdSecond query int false "二级分类ID"
|
|
|
+// @Param State query int false "发布状态: 1-待发布; 2-已发布"
|
|
|
+// @Param Keyword query string false "搜索关键词"
|
|
|
+// @Success 200 {object} smart_report.SmartReportListResp
|
|
|
+// @router /list [get]
|
|
|
+func (this *ReportApproveFlowController) List() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ type SmartReportListReq struct {
|
|
|
+ PageSize int `form:"PageSize"`
|
|
|
+ CurrentIndex int `form:"CurrentIndex"`
|
|
|
+ TimeType string `form:"TimeType"`
|
|
|
+ StartDate string `form:"StartDate"`
|
|
|
+ EndDate string `form:"EndDate"`
|
|
|
+ Frequency string `form:"Frequency"`
|
|
|
+ ClassifyIdFirst int `form:"ClassifyIdFirst"`
|
|
|
+ ClassifyIdSecond int `form:"ClassifyIdSecond"`
|
|
|
+ State int `form:"State"`
|
|
|
+ Keyword string `form:"Keyword"`
|
|
|
+ }
|
|
|
+ params := new(SmartReportListReq)
|
|
|
+ if e := this.ParseForm(params); e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "入参解析失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if params.TimeType == "" {
|
|
|
+ params.TimeType = "publish_time"
|
|
|
+ }
|
|
|
+ if params.TimeType != "publish_time" && params.TimeType != "modify_time" {
|
|
|
+ br.Msg = "请选择正确的时间类型"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 更新时间指的是内容更新时间
|
|
|
+ if params.TimeType == "modify_time" {
|
|
|
+ params.TimeType = "content_modify_time"
|
|
|
+ }
|
|
|
+
|
|
|
+ var condition string
|
|
|
+ var pars []interface{}
|
|
|
+ // 筛选项
|
|
|
+ {
|
|
|
+ keyword := strings.TrimSpace(params.Keyword)
|
|
|
+ if keyword != "" {
|
|
|
+ kw := fmt.Sprint("%", keyword, "%")
|
|
|
+ condition += fmt.Sprintf(` AND (title LIKE ? OR admin_real_name LIKE ? OR last_modify_admin_name LIKE ?)`)
|
|
|
+ pars = append(pars, kw, kw, kw)
|
|
|
+ }
|
|
|
+ if params.StartDate != "" && params.EndDate != "" {
|
|
|
+ st := fmt.Sprintf("%s 00:00:00", params.StartDate)
|
|
|
+ ed := fmt.Sprintf("%s 23:59:59", params.EndDate)
|
|
|
+ condition += fmt.Sprintf(` AND %s >= ? AND %s <= ?`, params.TimeType, params.TimeType)
|
|
|
+ pars = append(pars, st, ed)
|
|
|
+ }
|
|
|
+ if params.Frequency != "" {
|
|
|
+ condition += ` AND frequency = ?`
|
|
|
+ pars = append(pars, params.Frequency)
|
|
|
+ }
|
|
|
+ if params.ClassifyIdFirst > 0 {
|
|
|
+ condition += ` AND classify_id_first = ?`
|
|
|
+ pars = append(pars, params.ClassifyIdFirst)
|
|
|
+ }
|
|
|
+ if params.ClassifyIdSecond > 0 {
|
|
|
+ condition += ` AND classify_id_second = ?`
|
|
|
+ pars = append(pars, params.ClassifyIdSecond)
|
|
|
+ }
|
|
|
+ if params.State > 0 {
|
|
|
+ condition += ` AND state = ?`
|
|
|
+ pars = append(pars, params.State)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ resp := new(smart_report.SmartReportListResp)
|
|
|
+ reportOB := new(smart_report.SmartReport)
|
|
|
+ total, e := reportOB.GetCountByCondition(condition, pars)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取报告总数失败, Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total <= 0 {
|
|
|
+ page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
|
|
|
+ resp.Paging = page
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页列表
|
|
|
+ var startSize int
|
|
|
+ if params.PageSize <= 0 {
|
|
|
+ params.PageSize = utils.PageSize20
|
|
|
+ }
|
|
|
+ if params.CurrentIndex <= 0 {
|
|
|
+ params.CurrentIndex = 1
|
|
|
+ }
|
|
|
+ startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
|
|
|
+
|
|
|
+ // 列表查询过滤掉富文本内容
|
|
|
+ fields := []string{
|
|
|
+ "smart_report_id", "report_code", "classify_id_first", "classify_name_first", "classify_id_second", "classify_name_second", "add_type",
|
|
|
+ "title", "abstract", "author", "frequency", "stage", "video_url", "video_name", "video_play_seconds", "video_size", "detail_img_url", "detail_pdf_url",
|
|
|
+ "admin_id", "admin_real_name", "state", "publish_time", "pre_publish_time", "pre_msg_send", "msg_is_send", "msg_send_time", "create_time", "modify_time",
|
|
|
+ "last_modify_admin_id", "last_modify_admin_name", "content_modify_time", "pv", "uv",
|
|
|
+ }
|
|
|
+ list, e := reportOB.GetPageItemsByCondition(condition, pars, fields, "", startSize, params.PageSize)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取报告分页列表失败, Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取系统用户列表-用于匹配编辑中的用户
|
|
|
+ adminIdName := make(map[int]string)
|
|
|
+ admins, e := system.GetSysAdminList(``, make([]interface{}, 0), []string{}, "")
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取系统用户列表失败, Err: " + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, ad := range admins {
|
|
|
+ adminIdName[ad.AdminId] = ad.RealName
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range list {
|
|
|
+ item := smart_report.FormatSmartReport2Item(v)
|
|
|
+ mark, e := smartReportService.UpdateSmartReportEditing(v.SmartReportId, 2, sysUser.AdminId, sysUser.RealName, adminIdName)
|
|
|
+ if e != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "查询编辑中标记失败, Err:" + e.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if mark.Status == 0 {
|
|
|
+ item.CanEdit = true
|
|
|
+ } else {
|
|
|
+ item.Editor = mark.Editor
|
|
|
+ }
|
|
|
+ resp.List = append(resp.List, item)
|
|
|
+ }
|
|
|
+
|
|
|
+ page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
|
|
|
+ resp.Paging = page
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+// ReportClassifyTree
|
|
|
+// @Title 报告分类树
|
|
|
+// @Description 报告分类树
|
|
|
+// @Success 200 {object} report_approve.ReportClassifyTreeItem
|
|
|
+// @router /report/classify_tree [get]
|
|
|
+func (this *ReportApproveFlowController) ReportClassifyTree() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ if br.ErrMsg == "" {
|
|
|
+ br.IsSendEmail = false
|
|
|
+ }
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ resp, cnTree, enTree := make([]*report_approve.ReportClassifyTreeItem, 0), make([]*report_approve.ReportClassifyTreeItem, 0), make([]*report_approve.ReportClassifyTreeItem, 0)
|
|
|
+
|
|
|
+ var cnErr, enErr error
|
|
|
+ wg := sync.WaitGroup{}
|
|
|
+ wg.Add(2)
|
|
|
+
|
|
|
+ // 中文/智能研报分类
|
|
|
+ go func() {
|
|
|
+ wg.Done()
|
|
|
+
|
|
|
+ classify, e := models.GetAllClassify()
|
|
|
+ if e != nil {
|
|
|
+ cnErr = fmt.Errorf("GetAllClassify err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ cnTree = services.GetReportClassifyTreeRecursive(classify, 0)
|
|
|
+ }()
|
|
|
+
|
|
|
+ // 英文研报分类
|
|
|
+ go func() {
|
|
|
+ wg.Done()
|
|
|
+
|
|
|
+ classify, e := models.GetAllEnglishClassify()
|
|
|
+ if e != nil {
|
|
|
+ enErr = fmt.Errorf("GetAllEnglishClassify err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ enTree = services.GetReportClassifyTreeRecursive(classify, 0)
|
|
|
+ }()
|
|
|
+
|
|
|
+ wg.Wait()
|
|
|
+
|
|
|
+ if cnErr != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取中文分类失败, Err: " + cnErr.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if enErr != nil {
|
|
|
+ br.Msg = "获取失败"
|
|
|
+ br.ErrMsg = "获取英文分类失败, Err: " + enErr.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ resp = append(resp, &report_approve.ReportClassifyTreeItem{
|
|
|
+ ClassifyId: report_approve.FlowReportTypeChinese,
|
|
|
+ ClassifyName: "研报列表",
|
|
|
+ Children: cnTree,
|
|
|
+ }, &report_approve.ReportClassifyTreeItem{
|
|
|
+ ClassifyId: report_approve.FlowReportTypeEnglish,
|
|
|
+ ClassifyName: "英文研报",
|
|
|
+ Children: enTree,
|
|
|
+ }, &report_approve.ReportClassifyTreeItem{
|
|
|
+ ClassifyId: report_approve.FlowReportTypeSmart,
|
|
|
+ ClassifyName: "智能研报",
|
|
|
+ Children: cnTree,
|
|
|
+ })
|
|
|
+
|
|
|
+ br.Data = resp
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+}
|