287 lines
7.3 KiB
Go
287 lines
7.3 KiB
Go
package cb_message
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"strconv"
|
|
"time"
|
|
|
|
"be.ems/src/framework/i18n"
|
|
"be.ems/src/framework/middleware"
|
|
"be.ems/src/framework/utils/ctx"
|
|
"be.ems/src/framework/vo/result"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// @Description Register Routes for mf calling
|
|
func Register(r *gin.RouterGroup) {
|
|
|
|
cbGroup := r.Group("/:neId")
|
|
{
|
|
var m *CBMessage
|
|
cbGroup.GET("/message/list",
|
|
middleware.PreAuthorize(nil),
|
|
m.List,
|
|
)
|
|
cbGroup.GET("/message/:id",
|
|
middleware.PreAuthorize(nil),
|
|
m.GetById,
|
|
)
|
|
cbGroup.POST("/message",
|
|
middleware.PreAuthorize(nil),
|
|
m.Insert,
|
|
)
|
|
cbGroup.PUT("/message/:id/:status",
|
|
middleware.PreAuthorize(nil),
|
|
m.UpdateStatus,
|
|
)
|
|
cbGroup.PUT("/message/:id",
|
|
middleware.PreAuthorize(nil),
|
|
m.Update,
|
|
)
|
|
cbGroup.DELETE("/message/:id",
|
|
middleware.PreAuthorize(nil),
|
|
m.Delete,
|
|
)
|
|
}
|
|
}
|
|
|
|
func (m *CBMessage) List(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
neId := c.Param("neId")
|
|
if neId == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
var query CBMessageQuery
|
|
if err := c.ShouldBindQuery(&query); err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
query.NeType = "CBC"
|
|
query.NeId = neId
|
|
|
|
service := NewCBMessageService()
|
|
data, total, err := service.SelectCBMessage(query)
|
|
if err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
// 转换数据格式,确保 MessageJson 正确序列化
|
|
processedData := make([]map[string]interface{}, len(data))
|
|
for i, msg := range data {
|
|
var messageJson interface{}
|
|
if len(msg.MessageJson) > 0 {
|
|
// 尝试解析为 JSON 对象
|
|
if err := json.Unmarshal(msg.MessageJson, &messageJson); err != nil {
|
|
// 如果解析失败,就作为字符串
|
|
messageJson = string(msg.MessageJson)
|
|
}
|
|
}
|
|
|
|
processedData[i] = map[string]interface{}{
|
|
"id": msg.Id,
|
|
"neType": msg.NeType,
|
|
"neId": msg.NeId,
|
|
"messageJson": messageJson, // 这里是解析后的 JSON 对象
|
|
"status": msg.Status.Enum(),
|
|
"detail": msg.Detail,
|
|
"createdAt": msg.CreatedAt,
|
|
"updatedAt": msg.UpdatedAt,
|
|
}
|
|
}
|
|
c.JSON(200, result.Ok(gin.H{
|
|
"total": total,
|
|
"data": processedData,
|
|
}))
|
|
}
|
|
|
|
// Update 更新CB消息
|
|
func (m *CBMessage) Insert(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
// 绑定请求体
|
|
var msg CBMessage
|
|
msg.NeType = "CBC"
|
|
msg.NeId = c.Param("neId")
|
|
msg.Status = CBEventStatusInactive // 默认状态为 INACTIVE
|
|
if msg.NeId == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
msg.CreatedAt = time.Now().Local().UnixMicro()
|
|
msg.UpdatedAt = nil // 新增时更新时间为nil
|
|
|
|
// 直接读取body为json.RawMessage
|
|
body, err := io.ReadAll(c.Request.Body)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
msg.MessageJson = json.RawMessage(body)
|
|
|
|
service := NewCBMessageService()
|
|
if err := service.InsertCBMessage(msg); err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
c.JSON(200, result.Ok(nil))
|
|
}
|
|
|
|
// Update 更新CB消息
|
|
func (m *CBMessage) Update(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
|
|
// 获取路径参数
|
|
messageId := c.Param("id")
|
|
if messageId == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
id, err := strconv.ParseInt(messageId, 10, 64)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
// 直接读取body为json.RawMessage
|
|
body, err := io.ReadAll(c.Request.Body)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
messageJson := json.RawMessage(body)
|
|
|
|
service := NewCBMessageService()
|
|
if err := service.UpdateCBMessage(id, messageJson); err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
c.JSON(200, result.Ok(nil))
|
|
}
|
|
|
|
// UpdateStatus 更新CB消息状态
|
|
// 这里的 neId 参数是为了兼容性,实际更新状态时不需要使用它
|
|
// 但为了保持与原有接口一致,仍然保留该参数
|
|
// 如果需要根据 neId 进行特定的逻辑处理,可以在服务层实现
|
|
// 但在当前实现中,neId 仅用于验证请求的有效性
|
|
// 实际的状态更新逻辑不依赖于 neId
|
|
// 该接口用于更新 CB 消息的状态,状态值通过查询参数传递
|
|
// 例如:PUT /:neId/message/status?status=ACTIVE
|
|
func (m *CBMessage) UpdateStatus(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
|
|
neId := c.Param("neId")
|
|
status := c.Param("status")
|
|
if neId == "" || status == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
messageId := c.Param("id")
|
|
if messageId != "" {
|
|
id, err := strconv.ParseInt(messageId, 10, 64)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
// 如果提供了 messageId,则更新特定消息的状态
|
|
service := NewCBMessageService()
|
|
if err := service.UpdateCBMessageStatus(id, status); err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
c.JSON(200, result.Ok(nil))
|
|
return
|
|
}
|
|
// 如果没有提供 messageId,则更新所有消息的状态
|
|
service := NewCBMessageService()
|
|
if err := service.UpdateCBMessageStatusByNeId(neId, status); err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
c.JSON(200, result.Ok(nil))
|
|
}
|
|
|
|
// Delete 删除CB消息
|
|
func (m *CBMessage) Delete(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
|
|
// 获取路径参数
|
|
messageId := c.Param("id")
|
|
if messageId == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
id, err := strconv.ParseInt(messageId, 10, 64)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
service := NewCBMessageService()
|
|
if err := service.DeleteCBMessage(id); err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
c.JSON(200, result.Ok(nil))
|
|
}
|
|
|
|
// GetById 根据ID获取CB消息
|
|
func (m *CBMessage) GetById(c *gin.Context) {
|
|
language := ctx.AcceptLanguage(c)
|
|
|
|
// 获取路径参数
|
|
idStr := c.Param("id")
|
|
if idStr == "" {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
id, err := strconv.ParseInt(idStr, 10, 64)
|
|
if err != nil {
|
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
|
return
|
|
}
|
|
|
|
service := NewCBMessageService()
|
|
data, err := service.SelectCBMessageById(id)
|
|
if err != nil {
|
|
c.JSON(500, result.ErrMsg(err.Error()))
|
|
return
|
|
}
|
|
|
|
if data == nil {
|
|
c.JSON(404, result.CodeMsg(404, i18n.TKey(language, "app.common.err404")))
|
|
return
|
|
}
|
|
// 转换数据格式,确保 MessageJson 正确序列化
|
|
var messageJson interface{}
|
|
if len(data.MessageJson) > 0 {
|
|
// 尝试解析为 JSON 对象
|
|
if err := json.Unmarshal(data.MessageJson, &messageJson); err != nil {
|
|
// 如果解析失败,就作为字符串
|
|
messageJson = string(data.MessageJson)
|
|
}
|
|
}
|
|
|
|
processedData := map[string]interface{}{
|
|
"id": data.Id,
|
|
"neType": data.NeType,
|
|
"neId": data.NeId,
|
|
"messageJson": messageJson, // 这里是解析后的 JSON 对象
|
|
"status": data.Status.Enum(),
|
|
"detail": data.Detail,
|
|
"createdAt": data.CreatedAt,
|
|
"updatedAt": data.UpdatedAt,
|
|
}
|
|
|
|
c.JSON(200, result.Ok(gin.H{
|
|
"data": processedData,
|
|
}))
|
|
}
|