Files
be.ems/features/ue/cb_message/controller.go
2025-07-02 17:23:47 +08:00

268 lines
6.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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",
middleware.PreAuthorize(nil),
m.UpdateStatus,
)
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(),
"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)
// 绑定请求体
var msg CBMessage
if err := c.ShouldBindJSON(&msg); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
service := NewCBMessageService()
if err := service.UpdateCBMessage(msg); 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.Query("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(),
"createdAt": data.CreatedAt,
"updatedAt": data.UpdatedAt,
}
c.JSON(200, result.Ok(gin.H{
"data": processedData,
}))
}