Files
be.ems/features/udm_user/api_udm_user.go
2023-09-08 21:54:47 +08:00

219 lines
5.2 KiB
Go

package udmuser
import (
"fmt"
"net/http"
"ems.agt/features/udm_user/model"
"ems.agt/features/udm_user/service"
"ems.agt/lib/core/file"
mmlclient "ems.agt/lib/core/mml_client"
"ems.agt/lib/core/utils/ctx"
"ems.agt/lib/core/vo/result"
"ems.agt/lib/dborm"
"ems.agt/lib/log"
"ems.agt/lib/services"
"ems.agt/restagent/config"
)
// UDM 用户信息接口添加到路由
func Routers() []services.RouterItem {
// 实例化控制层 SysDictTypeApi 结构体
var apis = &UdmUserApi{
authUser: *service.NewServiceUdmAuthUser,
subUser: *service.NewServiceUdmSubUser,
}
rs := [...]services.RouterItem{
// UDM签约用户
{
Method: "GET",
Pattern: "/auths",
Handler: apis.UdmAuthUserList,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "POST",
Pattern: "/auth/getSave",
Handler: apis.UdmAuthUserSave,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "GET",
Pattern: "/auth/{neId}/{imsi}",
Handler: apis.UdmAuthUserInfo,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "POST",
Pattern: "/auth/export",
Handler: apis.UdmAuthUserExport,
Middleware: nil, //midware.Authorize(nil),
},
// UDM签约用户
{
Method: "GET",
Pattern: "/subs",
Handler: apis.UdmSubUserList,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "POST",
Pattern: "/sub/getSave",
Handler: apis.UdmSubUserSave,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "GET",
Pattern: "/sub/{neId}/{imsi}",
Handler: apis.UdmSubUserInfo,
Middleware: nil, //midware.Authorize(nil),
},
// 添加更多的 Router 对象...
}
// 生成两组前缀路由
rsPrefix := []services.RouterItem{}
for _, v := range rs {
path := "/udmUserManage/{apiVersion}" + v.Pattern
// 固定前缀
v.Pattern = config.DefaultUriPrefix + path
rsPrefix = append(rsPrefix, v)
// 可配置
v.Pattern = config.UriPrefix + path
rsPrefix = append(rsPrefix, v)
}
return rsPrefix
}
// NeInfoByUDM 网元信息
func NeInfoByUDM(neId string) (*dborm.NeInfo, error) {
neInfo, err := dborm.XormGetNeInfo("UDM", neId)
if err != nil {
log.Error("dborm.XormGetNeInfo is failed:", err)
return nil, err
}
return neInfo, nil
}
// UDM 用户
//
// PATH /udmUserManage
type UdmUserApi struct {
authUser service.ServiceUdmAuthUser
subUser service.ServiceUdmSubUser
}
// UDM鉴权用户
//
// GET /auths
func (s *UdmUserApi) UdmAuthUserList(w http.ResponseWriter, r *http.Request) {
querys := ctx.QueryMap(r)
data := s.authUser.Page(querys)
ctx.JSON(w, 200, result.Ok(data))
}
// UDM鉴权用户-获取全部保存数据库
//
// POST /auth/getSave
func (s *UdmUserApi) UdmAuthUserSave(w http.ResponseWriter, r *http.Request) {
data := s.authUser.Save("")
ctx.JSON(w, 200, result.OkData(data))
}
// UDM鉴权用户-信息
//
// GET /{neId}/{imsi}
func (s *UdmUserApi) UdmAuthUserInfo(w http.ResponseWriter, r *http.Request) {
neId := ctx.Param(r, "neId")
imsi := ctx.Param(r, "imsi")
if neId == "" || imsi == "" {
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
return
}
neInfo, err := NeInfoByUDM(neId)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
msg := fmt.Sprintf("dsp authdat:imsi=%s", imsi)
// 发送MML
data, err := mmlclient.MMLSendMsgToMap(neInfo.Ip, msg)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
ctx.JSON(w, 200, result.OkData(data))
}
// UDM鉴权用户-导出
//
// POST /auth/export
func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) {
list := s.authUser.List(model.UdmAuthUser{})
// 文件名
fileName := "OMC_AUTH_100.csv"
filePath := "C:/AMP/Probject/ems_backend/restagent/OMC_AUTH_100.csv"
// 转换数据
data := [][]string{}
data = append(data, []string{"ID", "Msisdn", "Imsi", "Amf", "Status", "Ki", "AlgoIndex", "Opc"})
for _, v := range list {
data = append(data, []string{v.ID, v.Msisdn, v.Imsi, v.Amf, v.Status, v.Ki, v.AlgoIndex, v.Opc})
}
// 输出到文件
err := file.WriterCSVFile(data, filePath)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
ctx.FileAttachment(w, r, filePath, fileName)
}
// UDM签约用户
//
// GET /subs
func (s *UdmUserApi) UdmSubUserList(w http.ResponseWriter, r *http.Request) {
querys := ctx.QueryMap(r)
data := s.subUser.Page(querys)
ctx.JSON(w, 200, result.Ok(data))
}
// UDM签约用户-获取全部保存数据库
//
// POST /sub/getSave
func (s *UdmUserApi) UdmSubUserSave(w http.ResponseWriter, r *http.Request) {
data := s.subUser.Save("")
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-信息
//
// GET /{neId}/{imsi}
func (s *UdmUserApi) UdmSubUserInfo(w http.ResponseWriter, r *http.Request) {
neId := ctx.Param(r, "neId")
imsi := ctx.Param(r, "imsi")
if neId == "" || imsi == "" {
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
return
}
neInfo, err := NeInfoByUDM(neId)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
msg := fmt.Sprintf("dsp udmuser:imsi=%s", imsi)
// 发送MML
data, err := mmlclient.MMLSendMsgToMap(neInfo.Ip, msg)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
ctx.JSON(w, 200, result.OkData(data))
}