浏览代码

报告消息

hsun 4 月之前
父节点
当前提交
863486f0cc
共有 4 个文件被更改,包括 433 次插入14 次删除
  1. 188 14
      controllers/report_v2.go
  2. 14 0
      models/report.go
  3. 213 0
      models/report_message.go
  4. 18 0
      routers/commentsRouter.go

+ 188 - 14
controllers/report_v2.go

@@ -14,8 +14,6 @@ import (
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"html"
-	"io"
-	"os"
 	"strconv"
 	"strings"
 	"time"
@@ -1665,24 +1663,200 @@ func (this *ReportController) CancelApprove() {
 	br.Msg = "操作成功"
 }
 
-func initPdf() {
-	inFile := "anNNgk3Bbi4LRULwcJgNOPrREYh5.pdf"
-	f2, err := services.GeneralWaterMarkPdf(inFile, "颜鹏 - 18170239278")
-	//f2, err := services.GeneralWaterMarkPdf(inFile, "上周美国馏分油库存累库95万桶,馏分油表需环比下降(-25.6万桶/日)。本期馏分油产量继续抬升,在供增需减的环比变动下库存持续累库。馏分油供应的增加我们认为可能和进口的油种有关,今年以来美国进口的中重质原油占比不断走高,尤其是5")
-	if err != nil {
-		fmt.Println("生成失败,ERR:", err)
+// MessageList
+// @Title 报告消息列表
+// @Description 报告消息列表
+// @Param   PageSize			query	int		true	"每页数据条数"
+// @Param   CurrentIndex		query	int		true	"当前页页码"
+// @Success 200 {object} models.ReportMessageListResp
+// @router /message/list [get]
+func (this *ReportController) MessageList() {
+	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
 	}
+	pageSize, _ := this.GetInt("PageSize")
+	pageIndex, _ := this.GetInt("CurrentIndex")
 
-	// 创建一个新的文件
-	newPdf, err := os.Create("new0555.pdf")
-	if err != nil {
-		fmt.Println("创建临时文件失败,Err:", err)
+	// 分页
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if pageIndex <= 0 {
+		pageIndex = 1
+	}
+	startSize = utils.StartIndex(pageIndex, pageSize)
+
+	resp := new(models.ReportMessageListResp)
+	resp.List = make([]*models.ReportMessageItem, 0)
+	cond := fmt.Sprintf(` AND %s = ?`, models.ReportMessageCols.ReceiveUserId)
+	pars := make([]interface{}, 0)
+	pars = append(pars, sysUser.AdminId)
+	order := fmt.Sprintf(`%s ASC, %s DESC`, models.ReportMessageCols.IsRead, models.ReportMessageCols.CreateTime)
+
+	messageOb := new(models.ReportMessage)
+	total, e := messageOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取消息列表总数失败, Err: " + e.Error()
 		return
 	}
+	list, e := messageOb.GetPageItemsByCondition(cond, pars, []string{}, order, startSize, pageSize)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取消息列表失败, Err: " + e.Error()
+		return
+	}
+	var reportIds, pptIds []int
+	for _, v := range list {
+		t := models.FormatReportMessage2Item(v)
+		if v.ExtraContent != "" {
+			am := new(models.ReportMessageApproveItem)
+			if e = json.Unmarshal([]byte(v.ExtraContent), &am); e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = fmt.Sprintf("消息列表审批信息解析失败, %v", e)
+				return
+			}
+			t.ApproveMsg = am
+		}
+		resp.List = append(resp.List, t)
+
+		// 报告状态,这里动态去获取
+		if v.ReportType == utils.ReportTypeDefault {
+			reportIds = append(reportIds, v.ReportId)
+		}
+		if v.ReportType == utils.ReportTypePPT {
+			pptIds = append(pptIds, v.ReportId)
+		}
+	}
+
+	stateReport := make(map[int]int)
+	statePpt := make(map[int]int)
+	if len(reportIds) > 0 {
+		ob := new(models.Report)
+		cond := ` AND id IN (?)`
+		pars := make([]interface{}, 0)
+		pars = append(pars, reportIds)
+		items, e := ob.GetItemsByCondition(cond, pars, []string{"id", "state"}, "")
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取报告列表失败, %v", e)
+			return
+		}
+		for _, v := range items {
+			stateReport[v.Id] = v.State
+		}
+	}
+	if len(pptIds) > 0 {
+		ob := new(models.PptV2)
+		cond := ` AND ppt_id IN (?)`
+		pars := make([]interface{}, 0)
+		pars = append(pars, reportIds)
+		items, e := ob.GetItemsByCondition(cond, pars, []string{"ppt_id", "state"}, "")
+		if e != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = fmt.Sprintf("获取PPT列表失败, %v", e)
+			return
+		}
+		for _, v := range items {
+			statePpt[v.PptId] = v.State
+		}
+	}
+	for _, v := range resp.List {
+		if v.ReportType == utils.ReportTypeDefault {
+			v.ReportState = stateReport[v.ReportId]
+		}
+		if v.ReportType == utils.ReportTypePPT {
+			v.ReportState = statePpt[v.ReportId]
+		}
+	}
+
+	// 未读消息数
+	cond += fmt.Sprintf(` AND %s = ?`, models.ReportMessageCols.IsRead)
+	pars = append(pars, 0)
+	unreadTotal, e := messageOb.GetCountByCondition(cond, pars)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取消息列表总数失败, Err: " + e.Error()
+		return
+	}
+	resp.UnreadTotal = unreadTotal
+
+	page := paging.GetPaging(pageIndex, pageSize, total)
+	resp.Paging = page
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// MessageRead
+// @Title 消息已读
+// @Description 消息已读
+// @Param	request	body models.ReportMessageReadReq true "type json string"
+// @Success 200 string "操作成功"
+// @router /message/read [post]
+func (this *ReportController) MessageRead() {
+	br := new(models.BaseResponse).Init()
 	defer func() {
-		_ = newPdf.Close()
+		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 models.ReportMessageReadReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数有误"
+		br.ErrMsg = "参数解析失败, Err: " + e.Error()
+		return
+	}
+	if req.MessageId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, MessageId: %d", req.MessageId)
+		return
+	}
 
-	_, _ = io.Copy(newPdf, f2)
+	messageOb := new(models.ReportMessage)
+	messageItem, e := messageOb.GetItemById(req.MessageId)
+	if e != nil {
+		if utils.IsErrNoRow(e) {
+			br.Msg = "消息不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取消息失败, Err: " + e.Error()
+		return
+	}
+	messageItem.IsRead = 1
+	messageItem.ModifyTime = time.Now().Local()
+	cols := []string{"IsRead", "ModifyTime"}
+	if e = messageItem.Update(cols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新消息已读失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
 }

+ 14 - 0
models/report.go

@@ -1133,3 +1133,17 @@ func (m *Report) GetCountByCondition(condition string, pars []interface{}) (coun
 	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
 	return
 }
+
+func (m *Report) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Report, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM report WHERE 1=1 %s %s`, fields, condition, order)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}

+ 213 - 0
models/report_message.go

@@ -0,0 +1,213 @@
+package models
+
+import (
+	"eta_gn/eta_api/global"
+	"eta_gn/eta_api/utils"
+	"fmt"
+	"strings"
+	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+const (
+	ReportMessageTypeWriteNotice   = 1 // 撰写通知
+	ReportMessageTypeApprovePass   = 2 // 审批通过
+	ReportMessageTypeApproveRefuse = 3 // 审批驳回
+)
+
+type ReportMessage struct {
+	Id            int       `gorm:"primaryKey;column:id;type:int(10) unsigned;not null"`
+	SendUserId    int       `gorm:"column:send_user_id" description:"发送人ID"`
+	ReceiveUserId int       `gorm:"column:receive_user_id" description:"接受者ID"`
+	Content       string    `gorm:"column:content" description:"消息内容"`
+	Remark        string    `gorm:"column:remark" description:"备注信息"`
+	ExtraContent  string    `gorm:"column:extra_content" description:"额外信息-JSON"`
+	ReportType    int       `gorm:"column:report_type" description:"报告类型:1-研报;2-PPT"`
+	ReportId      int       `gorm:"column:report_id" description:"报告/PPT-ID"`
+	MessageType   int       `gorm:"column:message_type" description:"消息类型:1-撰写通知;2-审批通过;3-审批驳回"`
+	IsRead        int       `gorm:"column:is_read" description:"是否已读:0-未读;1-已读"`
+	CreateTime    time.Time `gorm:"column:create_time" description:"消息时间"`
+	ModifyTime    time.Time `gorm:"column:modify_time" description:"更新时间"`
+}
+
+var ReportMessageCols = struct {
+	Id            string
+	SendUserId    string
+	ReceiveUserId string
+	Content       string
+	Remark        string
+	ExtraContent  string
+	ReportType    string
+	ReportId      string
+	MessageType   string
+	IsRead        string
+	CreateTime    string
+}{
+	Id:            "id",
+	SendUserId:    "send_user_id",
+	ReceiveUserId: "receive_user_id",
+	Content:       "content",
+	Remark:        "remark",
+	ExtraContent:  "extra_content",
+	ReportType:    "report_type",
+	ReportId:      "report_id",
+	MessageType:   "message_type",
+	IsRead:        "is_read",
+	CreateTime:    "create_time",
+}
+
+func (m *ReportMessage) TableName() string {
+	return "report_message"
+}
+
+func (m *ReportMessage) PrimaryId() string {
+	return ReportMessageCols.Id
+}
+
+func (m *ReportMessage) Create() (err error) {
+	err = global.DmSQL["rddp"].Create(m).Error
+	return
+}
+
+func (m *ReportMessage) CreateMulti(items []*ReportMessage) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	err = global.DmSQL["rddp"].CreateInBatches(items, utils.MultiAddNum).Error
+	return
+}
+
+func (m *ReportMessage) Update(cols []string) (err error) {
+	err = global.DmSQL["rddp"].Select(cols).Updates(m).Error
+	return
+}
+
+func (m *ReportMessage) Del() (err error) {
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = global.DmSQL["rddp"].Exec(sql, m.Id).Error
+	return
+}
+
+func (m *ReportMessage) MultiDel(menuIds []int) (err error) {
+	if len(menuIds) == 0 {
+		return
+	}
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s IN (%s)`, m.TableName(), m.PrimaryId(), utils.GetOrmInReplace(len(menuIds)))
+	err = global.DmSQL["rddp"].Exec(sql, menuIds).Error
+	return
+}
+
+func (m *ReportMessage) GetItemById(id int) (item *ReportMessage, err error) {
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = global.DmSQL["rddp"].Raw(sql, id).First(&item).Error
+	return
+}
+
+func (m *ReportMessage) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *ReportMessage, err error) {
+	order := ``
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s %s LIMIT 1`, m.TableName(), condition, order)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).First(&item).Error
+	return
+}
+
+func (m *ReportMessage) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Scan(&count).Error
+	return
+}
+
+func (m *ReportMessage) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ReportMessage, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+func (m *ReportMessage) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ReportMessage, err error) {
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	pars = append(pars, startSize)
+	pars = append(pars, pageSize)
+	err = global.DmSQL["rddp"].Raw(sql, pars...).Find(&items).Error
+	return
+}
+
+// ReportMessageItem 报告消息
+type ReportMessageItem struct {
+	Id            int
+	SendUserId    int                       `description:"发送人ID"`
+	ReceiveUserId int                       `description:"接收者ID"`
+	Content       string                    `description:"消息内容"`
+	Remark        string                    `description:"备注信息"`
+	ReportType    int                       `description:"报告类型:1-研报;2-PPT"`
+	ReportId      int                       `description:"报告/PPT-ID"`
+	ReportState   int                       `description:"报告当前状态"`
+	MessageType   int                       `description:"消息类型:1-撰写通知;2-审批通过;3-审批驳回"`
+	IsRead        int                       `description:"是否已读:0-未读;1-已读"`
+	CreateTime    string                    `description:"消息时间"`
+	ApproveMsg    *ReportMessageApproveItem `description:"审批信息"`
+}
+
+// ReportMessageApproveItem 报告消息审批内容
+type ReportMessageApproveItem struct {
+	Title           string `description:"报告标题"`
+	ApproveType     int    `description:"审批类型:1-通过;2-驳回"`
+	ApproveUserId   int    `description:"审批人ID"`
+	ApproveUserName string `description:"审批人"`
+	ApproveRemark   string `description:"审批备注(驳回意见)"`
+}
+
+// FormatReportMessage2Item 格式化报告消息
+func FormatReportMessage2Item(origin *ReportMessage) (item *ReportMessageItem) {
+	item = new(ReportMessageItem)
+	if origin == nil {
+		return
+	}
+	item.Id = origin.Id
+	item.SendUserId = origin.SendUserId
+	item.ReceiveUserId = origin.ReceiveUserId
+	item.Content = origin.Content
+	item.Remark = origin.Remark
+	item.ReportType = origin.ReportType
+	item.ReportId = origin.ReportId
+	item.MessageType = origin.MessageType
+	item.IsRead = origin.IsRead
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
+	return
+}
+
+// ReportMessageListReq 消息列表请求参数
+type ReportMessageListReq struct {
+	PageSize     int `form:"PageSize"`
+	CurrentIndex int `form:"CurrentIndex"`
+}
+
+// ReportMessageListResp 消息列表响应体
+type ReportMessageListResp struct {
+	List        []*ReportMessageItem
+	Paging      *paging.PagingItem `description:"分页数据"`
+	UnreadTotal int                `description:"消息未读数"`
+}
+
+// ReportMessageReadReq 消息已读请求体
+type ReportMessageReadReq struct {
+	MessageId int `description:"消息ID"`
+}

+ 18 - 0
routers/commentsRouter.go

@@ -7306,6 +7306,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "MessageList",
+            Router: `/message/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "MessageRead",
+            Router: `/message/read`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta_gn/eta_api/controllers:ReportController"],
         beego.ControllerComments{
             Method: "PrePublishReport",