268 lines
6.8 KiB
Go
268 lines
6.8 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",
|
||
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,
|
||
}))
|
||
}
|