新增补充UDM用户数据接口
This commit is contained in:
@@ -3,6 +3,9 @@ package udmuser
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"ems.agt/features/udm_user/model"
|
||||
"ems.agt/features/udm_user/service"
|
||||
@@ -34,7 +37,7 @@ func Routers() []services.RouterItem {
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/auth/getSave",
|
||||
Pattern: "/authSave/{neId}",
|
||||
Handler: apis.UdmAuthUserSave,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
@@ -46,10 +49,46 @@ func Routers() []services.RouterItem {
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/auth/export",
|
||||
Pattern: "/auth/{neId}",
|
||||
Handler: apis.UdmAuthUserAdd,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/auth/{neId}/{num}",
|
||||
Handler: apis.UdmAuthUserAdds,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "PUT",
|
||||
Pattern: "/auth/{neId}",
|
||||
Handler: apis.UdmAuthUserEdit,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "DELETE",
|
||||
Pattern: "/auth/{neId}/{imsi}",
|
||||
Handler: apis.UdmAuthUserRemove,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "DELETE",
|
||||
Pattern: "/auth/{neId}/{imsi}/{num}",
|
||||
Handler: apis.UdmAuthUserRemoves,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/authExport/{neId}",
|
||||
Handler: apis.UdmAuthUserExport,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/authImport/{neId}",
|
||||
Handler: apis.UdmAuthUserImport,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
// UDM签约用户
|
||||
{
|
||||
Method: "GET",
|
||||
@@ -59,16 +98,58 @@ func Routers() []services.RouterItem {
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/sub/getSave",
|
||||
Pattern: "/subSave/{neId}",
|
||||
Handler: apis.UdmSubUserSave,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "GET",
|
||||
Pattern: "/sub/{neId}/{imsi}",
|
||||
Pattern: "/subInfo/{neId}/{imsi}",
|
||||
Handler: apis.UdmSubUserInfo,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/sub/{neId}",
|
||||
Handler: apis.UdmSubUserAdd,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/sub/{neId}/{num}",
|
||||
Handler: apis.UdmSubUserAdds,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "PUT",
|
||||
Pattern: "/sub/{neId}",
|
||||
Handler: apis.UdmAuthUserEdit,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "DELETE",
|
||||
Pattern: "/sub/{neId}/{imsi}",
|
||||
Handler: apis.UdmSubUserRemove,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "DELETE",
|
||||
Pattern: "/sub/{neId}/{imsi}/{num}",
|
||||
Handler: apis.UdmSubUserRemoves,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/subExport/{neId}",
|
||||
Handler: apis.UdmSubUserExport,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
{
|
||||
Method: "POST",
|
||||
Pattern: "/subImport/{neId}",
|
||||
Handler: apis.UdmSubUserImport,
|
||||
Middleware: nil, //midware.Authorize(nil),
|
||||
},
|
||||
// 添加更多的 Router 对象...
|
||||
}
|
||||
|
||||
@@ -115,15 +196,21 @@ func (s *UdmUserApi) UdmAuthUserList(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// UDM鉴权用户-获取全部保存数据库
|
||||
//
|
||||
// POST /auth/getSave
|
||||
// POST /authSave/{neId}
|
||||
func (s *UdmUserApi) UdmAuthUserSave(w http.ResponseWriter, r *http.Request) {
|
||||
data := s.authUser.Save("")
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.authUser.Save(neId)
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-信息
|
||||
//
|
||||
// GET /{neId}/{imsi}
|
||||
// GET /authInfo/{neId}/{imsi}
|
||||
func (s *UdmUserApi) UdmAuthUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
imsi := ctx.Param(r, "imsi")
|
||||
@@ -146,22 +233,243 @@ func (s *UdmUserApi) UdmAuthUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
var userInfo model.UdmAuthUser
|
||||
list := s.authUser.List(model.UdmAuthUser{NeID: neId, Imsi: imsi})
|
||||
if len(list) > 0 {
|
||||
userInfo = list[0]
|
||||
ctx.JSON(w, 200, result.OkData(list[0]))
|
||||
} else {
|
||||
userInfo = model.UdmAuthUser{
|
||||
Imsi: imsi,
|
||||
Amf: data["amf"],
|
||||
AlgoIndex: data["algo"],
|
||||
Opc: data["opc"],
|
||||
Ki: data["ki"],
|
||||
}
|
||||
|
||||
s.authUser.Insert(neId, userInfo)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(userInfo))
|
||||
|
||||
}
|
||||
|
||||
// UDM鉴权用户-增加
|
||||
//
|
||||
// POST /{neId}
|
||||
func (s *UdmUserApi) UdmAuthUserAdd(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmAuthUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("add authdat:imsi=%s,ki=%s,amf=%s,algo=%s,opc=%s", body.Imsi, body.Ki, body.Amf, body.AlgoIndex, body.Opc)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Insert(neInfo.NeId, body)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-批量添加
|
||||
//
|
||||
// POST /{neId}/{num}
|
||||
func (s *UdmUserApi) UdmAuthUserAdds(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
num := ctx.Param(r, "num")
|
||||
if neId == "" || num == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmAuthUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("bad authdat:start_imsi=%s,sub_num=%s,ki=%s,amf=%s,algo=%s", body.Imsi, num, body.Ki, body.Amf, body.AlgoIndex)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Inserts(neInfo.NeId, body, num)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-修改
|
||||
//
|
||||
// PUT /{neId}
|
||||
func (s *UdmUserApi) UdmAuthUserEdit(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmAuthUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("mod authdata:imsi=%s", body.Imsi)
|
||||
// 修改的参数名称
|
||||
if body.Ki != "" {
|
||||
msg += fmt.Sprintf(",ki=%s", body.Ki)
|
||||
}
|
||||
if body.Amf != "" {
|
||||
msg += fmt.Sprintf(",amf=%s", body.Amf)
|
||||
}
|
||||
if body.AlgoIndex != "" {
|
||||
msg += fmt.Sprintf(",algo=%s", body.AlgoIndex)
|
||||
}
|
||||
if body.Opc != "" {
|
||||
msg += fmt.Sprintf(",opc=%s", body.Opc)
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Update(neInfo.NeId, body)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-删除
|
||||
//
|
||||
// DELETE /{neId}/{imsi}
|
||||
func (s *UdmUserApi) UdmAuthUserRemove(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("del authdat:imsi=%s", imsi)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Delete(neId, imsi)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-批量删除
|
||||
//
|
||||
// DELETE /{neId}/{imsi}/{num}
|
||||
func (s *UdmUserApi) UdmAuthUserRemoves(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
imsi := ctx.Param(r, "imsi")
|
||||
num := ctx.Param(r, "num")
|
||||
if neId == "" || imsi == "" || num == "" {
|
||||
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("bde authdat:start_imsi=%s,sub_num=%s", imsi, num)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Deletes(neId, imsi, num)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户-导出
|
||||
//
|
||||
// POST /auth/export
|
||||
// POST /authExport/{neId}
|
||||
func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
list := s.authUser.List(model.UdmAuthUser{})
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
list := s.authUser.List(model.UdmAuthUser{NeID: neId})
|
||||
// 文件名
|
||||
fileName := "OMC_AUTH_100.csv"
|
||||
filePath := "C:/AMP/Probject/ems_backend/restagent/OMC_AUTH_100.csv"
|
||||
fileName := fmt.Sprintf("OMC_AUTH_USER_EXPORT_%s_%d.csv", neId, time.Now().UnixMilli())
|
||||
filePath := fmt.Sprintf("/usr/local/omc/upload/mml/%s", fileName)
|
||||
// 转换数据
|
||||
data := [][]string{}
|
||||
data = append(data, []string{"ID", "Msisdn", "Imsi", "Amf", "Status", "Ki", "AlgoIndex", "Opc"})
|
||||
data = append(data, []string{"imsi", "ki", "amf", "algo", "opc", "status"})
|
||||
for _, v := range list {
|
||||
data = append(data, []string{v.ID, v.Msisdn, v.Imsi, v.Amf, v.Status, v.Ki, v.AlgoIndex, v.Opc})
|
||||
data = append(data, []string{v.Imsi, v.Ki, v.Amf, v.AlgoIndex, v.Opc, v.Status})
|
||||
}
|
||||
// 输出到文件
|
||||
err := file.WriterCSVFile(data, filePath)
|
||||
@@ -172,6 +480,57 @@ func (s *UdmUserApi) UdmAuthUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
ctx.FileAttachment(w, r, filePath, fileName)
|
||||
}
|
||||
|
||||
// UDM鉴权用户-导入
|
||||
//
|
||||
// POST /authImport/{neId}
|
||||
func (s *UdmUserApi) UdmAuthUserImport(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
neInfo, err := NeInfoByUDM(neId)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("OMC_AUTH_USER_IMPORT_%s_%d.csv", neId, time.Now().UnixMilli())
|
||||
filePath := fmt.Sprintf("/usr/local/omc/upload/mml/%s", fileName)
|
||||
dstPath := "/home/agtuser/"
|
||||
// 输出保存文件
|
||||
err = ctx.SaveUploadedFile(r, filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 复制到远程
|
||||
err = file.FileNeSCP(neInfo.Ip, filePath, dstPath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("import authdat:path=%s", fmt.Sprintf("%s%s", dstPath, fileName))
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
data := file.ReadCSVFile(filePath)
|
||||
s.authUser.InsertCSV(neId, data)
|
||||
}
|
||||
// ctx.JSON(w, 200, result.OkData(data))
|
||||
ctx.FileAttachment(w, r, filePath, fileName)
|
||||
}
|
||||
|
||||
// UDM签约用户
|
||||
//
|
||||
// GET /subs
|
||||
@@ -183,15 +542,21 @@ func (s *UdmUserApi) UdmSubUserList(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// UDM签约用户-获取全部保存数据库
|
||||
//
|
||||
// POST /sub/getSave
|
||||
// POST /subSave/{neId}
|
||||
func (s *UdmUserApi) UdmSubUserSave(w http.ResponseWriter, r *http.Request) {
|
||||
data := s.subUser.Save("")
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.subUser.Save(neId)
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-信息
|
||||
//
|
||||
// GET /{neId}/{imsi}
|
||||
// GET /subInfo/{neId}/{imsi}
|
||||
func (s *UdmUserApi) UdmSubUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
imsi := ctx.Param(r, "imsi")
|
||||
@@ -214,5 +579,342 @@ func (s *UdmUserApi) UdmSubUserInfo(w http.ResponseWriter, r *http.Request) {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
var userInfo model.UdmSubUser
|
||||
list := s.subUser.List(model.UdmSubUser{NeID: neId, Imsi: imsi})
|
||||
if len(list) > 0 {
|
||||
userInfo = list[0]
|
||||
ctx.JSON(w, 200, result.OkData(list[0]))
|
||||
} else {
|
||||
cnType, _ := strconv.ParseInt(data["CNType"][:4], 0, 64)
|
||||
rat, _ := strconv.ParseInt(data["RAT"][:4], 0, 64)
|
||||
userInfo = model.UdmSubUser{
|
||||
Imsi: imsi,
|
||||
Msisdn: data["MSISDN"],
|
||||
Ambr: data["AMBR"],
|
||||
Arfb: data["AreaForbidden"],
|
||||
Cn: fmt.Sprint(cnType),
|
||||
SmData: data["SM-Data(snssai+dnn[1..n])"],
|
||||
Sar: data["ServiceAreaRestriction"],
|
||||
Nssai: data["NSSAI"],
|
||||
SmfSel: data["Smf-Selection"],
|
||||
Rat: fmt.Sprint(rat),
|
||||
}
|
||||
// 1,64,24,65,def_eps,1,2,010200000000,-
|
||||
if v, ok := data["EPS-Data"]; ok {
|
||||
arr := strings.Split(v, ",")
|
||||
userInfo.EpsFlag = arr[0]
|
||||
userInfo.EpsOdb = arr[1]
|
||||
userInfo.HplmnOdb = arr[2]
|
||||
userInfo.Ard = arr[3]
|
||||
userInfo.Epstpl = arr[4]
|
||||
userInfo.ContextId = arr[5]
|
||||
userInfo.ApnContext = arr[7]
|
||||
}
|
||||
|
||||
s.subUser.Insert(neId, userInfo)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(userInfo))
|
||||
}
|
||||
|
||||
// UDM签约用户-增加
|
||||
//
|
||||
// POST /{neId}
|
||||
func (s *UdmUserApi) UdmSubUserAdd(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmSubUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("add udmuser:imsi=%s,msisdn=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s",
|
||||
body.Imsi, body.Msisdn, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext)
|
||||
// static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增
|
||||
if body.StaticIp != "" {
|
||||
msg += fmt.Sprintf(",static_ip=%s", body.StaticIp)
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.subUser.Insert(neInfo.NeId, body)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-批量添加
|
||||
//
|
||||
// POST /{neId}/{num}
|
||||
func (s *UdmUserApi) UdmSubUserAdds(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
num := ctx.Param(r, "num")
|
||||
if neId == "" || num == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmSubUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("bad udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,ambr=%s,nssai=%s,arfb=%s,sar=%s,rat=%s,cn=%s,smf_sel=%s,sm_data=%s,eps_flag=%s,eps_odb=%s,hplmn_odb=%s,ard=%s,epstpl=%s,context_id=%s,apn_context=%s",
|
||||
body.Imsi, body.Msisdn, num, body.Ambr, body.Nssai, body.Arfb, body.Sar, body.Rat, body.Cn, body.SmfSel, body.SmData, body.EpsFlag, body.EpsOdb, body.HplmnOdb, body.Ard, body.Epstpl, body.ContextId, body.ApnContext)
|
||||
// static_ip指给4G UE分配的静态IP,没有可不带此字段名,批量添加IP会自动递增
|
||||
if body.StaticIp != "" {
|
||||
msg += fmt.Sprintf(",static_ip=%s", body.StaticIp)
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.subUser.Inserts(neInfo.NeId, body, num)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-修改
|
||||
//
|
||||
// PUT /{neId}
|
||||
func (s *UdmUserApi) UdmSubUserEdit(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UdmSubUser
|
||||
err := ctx.ShouldBindJSON(r, &body)
|
||||
if err != nil || body.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("mod udmuser:imsi=%s", body.Imsi)
|
||||
// 修改的参数名称
|
||||
if body.Msisdn != "" {
|
||||
msg += fmt.Sprintf(",msisdn=%s", body.Msisdn)
|
||||
}
|
||||
if body.Ambr != "" {
|
||||
msg += fmt.Sprintf(",ambr=%s", body.Ambr)
|
||||
}
|
||||
if body.Nssai != "" {
|
||||
msg += fmt.Sprintf(",nssai=%s", body.Nssai)
|
||||
}
|
||||
if body.Arfb != "" {
|
||||
msg += fmt.Sprintf(",arfb=%s", body.Arfb)
|
||||
}
|
||||
if body.Sar != "" {
|
||||
msg += fmt.Sprintf(",sar=%s", body.Sar)
|
||||
}
|
||||
if body.Rat != "" {
|
||||
msg += fmt.Sprintf(",rat=%s", body.Rat)
|
||||
}
|
||||
if body.Cn != "" {
|
||||
msg += fmt.Sprintf(",cn=%s", body.Cn)
|
||||
}
|
||||
if body.SmfSel != "" {
|
||||
msg += fmt.Sprintf(",smf_sel=%s", body.SmfSel)
|
||||
}
|
||||
if body.SmData != "" {
|
||||
msg += fmt.Sprintf(",sm_data=%s", body.SmData)
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.subUser.Update(neInfo.NeId, body)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-删除
|
||||
//
|
||||
// DELETE /{neId}/{imsi}
|
||||
func (s *UdmUserApi) UdmSubUserRemove(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("del udmuser:imsi=%s", imsi)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.subUser.Delete(neId, imsi)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-批量删除
|
||||
//
|
||||
// DELETE /{neId}/{imsi}/{num}
|
||||
func (s *UdmUserApi) UdmSubUserRemoves(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
imsi := ctx.Param(r, "imsi")
|
||||
num := ctx.Param(r, "num")
|
||||
if neId == "" || imsi == "" || num == "" {
|
||||
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("bde udmuser:start_imsi=%s,sub_num=%s", imsi, num)
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.authUser.Deletes(neId, imsi, num)
|
||||
}
|
||||
ctx.JSON(w, 200, result.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户-导出
|
||||
//
|
||||
// POST /subExport/{neId}
|
||||
func (s *UdmUserApi) UdmSubUserExport(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
list := s.subUser.List(model.UdmSubUser{NeID: neId})
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("OMC_AUTH_USER_EXPORT_%s_%d.csv", neId, time.Now().UnixMilli())
|
||||
filePath := fmt.Sprintf("/usr/local/omc/upload/mml/%s", fileName)
|
||||
// 转换数据
|
||||
data := [][]string{}
|
||||
data = append(data, []string{"imsi", "msisdn", "ambr", "arfb", "sar", "rat", "cn", "smf_sel", "sm_dat", "eps_dat"})
|
||||
for _, v := range list {
|
||||
data = append(data, []string{v.Imsi, v.Msisdn, v.Ambr, v.Arfb, v.Sar, v.Rat, v.Cn, v.SmfSel, v.SmData, v.EpsDat})
|
||||
}
|
||||
// 输出到文件
|
||||
err := file.WriterCSVFile(data, filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
ctx.FileAttachment(w, r, filePath, fileName)
|
||||
}
|
||||
|
||||
// UDM签约用户-导入
|
||||
//
|
||||
// POST /subImport/{neId}
|
||||
func (s *UdmUserApi) UdmSubUserImport(w http.ResponseWriter, r *http.Request) {
|
||||
neId := ctx.Param(r, "neId")
|
||||
if neId == "" {
|
||||
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
|
||||
return
|
||||
}
|
||||
|
||||
neInfo, err := NeInfoByUDM(neId)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("OMC_SUB_USER_IMPORT_%s_%d.csv", neId, time.Now().UnixMilli())
|
||||
filePath := fmt.Sprintf("/usr/local/omc/upload/mml/%s", fileName)
|
||||
dstPath := "/home/agtuser/"
|
||||
// 输出保存文件
|
||||
err = ctx.SaveUploadedFile(r, filePath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 复制到远程
|
||||
err = file.FileNeSCP(neInfo.Ip, filePath, dstPath)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("import udmuser:path=%s", fmt.Sprintf("%s%s", dstPath, fileName))
|
||||
|
||||
// 发送MML
|
||||
data, err := mmlclient.MMLSendMsgToString(neInfo.Ip, msg)
|
||||
if err != nil {
|
||||
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
data := file.ReadCSVFile(filePath)
|
||||
s.authUser.InsertCSV(neId, data)
|
||||
}
|
||||
// ctx.JSON(w, 200, result.OkData(data))
|
||||
ctx.FileAttachment(w, r, filePath, fileName)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user