feat: cb message
This commit is contained in:
1 parent
758276ecfc
commit
574c39f748
6 files changed
+874
No files matched your search
@@ -0,0 +1,267 @@
|
||||
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,
|
||||
}))
|
||||
}
|
||||
Reference in new issue
Block a user