feat 签约用户4G接口

This commit is contained in:
TsMask
2023-09-12 11:11:27 +08:00
parent df5cc36de4
commit fc8f63fca6
4 changed files with 253 additions and 1 deletions

View File

@@ -123,7 +123,19 @@ func Routers() []services.RouterItem {
{
Method: "PUT",
Pattern: "/sub/{neId}",
Handler: apis.UdmAuthUserEdit,
Handler: apis.UdmSubUserEdit,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "PUT",
Pattern: "/sub4gIP/{neId}",
Handler: apis.UdmSubUser4GIP,
Middleware: nil, //midware.Authorize(nil),
},
{
Method: "PUT",
Pattern: "/subSmData/{neId}",
Handler: apis.UdmSubUserSmData,
Middleware: nil, //midware.Authorize(nil),
},
{
@@ -706,6 +718,45 @@ func (s *UdmUserApi) UdmSubUserAdds(w http.ResponseWriter, r *http.Request) {
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-批量添加4G用户
//
// POST /sub4G/{neId}
func (s *UdmUserApi) UdmSubUserAdd4G(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 == "" || body.SubNum == "" {
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("bmd udmuser:start_imsi=%s,sub_num=%s,eps_flag=%s", body.Imsi, body.SubNum, body.EpsFlag)
// 发送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.Insert4G(neInfo.NeId, body)
}
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-修改
//
// PUT /{neId}
@@ -773,6 +824,83 @@ func (s *UdmUserApi) UdmSubUserEdit(w http.ResponseWriter, r *http.Request) {
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-批量修改4G IP
//
// PUT /sub4gIP/{neId}
func (s *UdmUserApi) UdmSubUser4GIP(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 == "" || body.SubNum == "" || body.StaticIp == "" {
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("bmd udmuser:start_imsi=%s,sub_num=%s,static_ip=%s", body.Imsi, body.SubNum, 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.Update4GIP(neId, body)
}
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-批量修改sm-data
//
// PUT /subSmData/{neId}
func (s *UdmUserApi) UdmSubUserSmData(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 == "" || body.SubNum == "" || body.SmData == "" {
ctx.JSON(w, 400, result.CodeMsg(400, "参数错误"))
return
}
neInfo, err := NeInfoByUDM(neId)
if err != nil {
ctx.JSON(w, 200, result.ErrMsg(err.Error()))
return
}
// 3-000003&internet-10.10.1.1&ims-10.11.1.1
msg := fmt.Sprintf("bmd udmuser:start_imsi=%s,sub_num=%s,sm_data=%s", body.Imsi, body.SubNum, 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.UpdateSmData(neId, body)
}
ctx.JSON(w, 200, result.OkData(data))
}
// UDM签约用户-删除
//
// DELETE /{neId}/{imsi}

View File

@@ -24,4 +24,6 @@ type UdmSubUser struct {
ContextId string `json:"contextId" xorm:"context_id"`
ApnContext string `json:"apnContext" xorm:"apn_context"`
StaticIp string `json:"staticIp" xorm:"static_ip"`
SubNum string `json:"subNum" xorm:"-"` // 批量数
}

View File

@@ -209,6 +209,41 @@ func (r *RepoUdmSubUser) Inserts(neID string, subUser model.UdmSubUser, num stri
for i := 0; i < numV; i++ {
subUser.Imsi = fmt.Sprint(imsiV + i)
subUser.Msisdn = fmt.Sprint(msisdnV + i)
// IP会自动递增
parts := strings.Split(subUser.StaticIp, ".")
lastPart := parts[3]
lastNum, _ := strconv.Atoi(lastPart)
lastNum += i
newLastPart := strconv.Itoa(lastNum)
parts[3] = newLastPart
newIP := strings.Join(parts, ".")
subUser.StaticIp = newIP
results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser)
if err == nil {
insertNum += results
}
}
return insertNum
}
// Insert4G 批量添加4G用户
func (r *RepoUdmSubUser) Insert4G(neID string, subUser model.UdmSubUser) int64 {
var insertNum int64
imsiV, err := strconv.Atoi(subUser.Imsi)
if err != nil {
return 0
}
numV, err := strconv.Atoi(subUser.SubNum)
if err != nil {
return 0
}
subUser.NeID = neID
for i := 0; i < numV; i++ {
subUser.Imsi = fmt.Sprint(imsiV + i)
results, err := datasource.DefaultDB().Table("u_sub_user").Insert(subUser)
if err == nil {
insertNum += results
@@ -262,6 +297,78 @@ func (r *RepoUdmSubUser) Update(neID string, authUser model.UdmSubUser) int64 {
return results
}
// Update4GIP 批量修改4G IP
func (r *RepoUdmSubUser) Update4GIP(neID string, subUser model.UdmSubUser) int64 {
var insertNum int64
imsiV, err := strconv.Atoi(subUser.Imsi)
if err != nil || subUser.StaticIp == "" {
return insertNum
}
numV, err := strconv.Atoi(subUser.SubNum)
if err != nil {
return insertNum
}
for i := 0; i < numV; i++ {
subUser.Imsi = fmt.Sprint(imsiV + i)
// 查询先
var user model.UdmSubUser
err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", subUser.Imsi, neID).Find(&user)
if err == nil {
// IP会自动递增
parts := strings.Split(subUser.StaticIp, ".")
lastPart := parts[3]
lastNum, _ := strconv.Atoi(lastPart)
lastNum += i
newLastPart := strconv.Itoa(lastNum)
parts[3] = newLastPart
newIP := strings.Join(parts, ".")
user.StaticIp = newIP
// 更新
results, err := datasource.DefaultDB().Table("u_sub_user").Update(user)
if err == nil {
insertNum += results
}
}
}
return insertNum
}
// UpdateSmData 批量修改sm-data
func (r *RepoUdmSubUser) UpdateSmData(neID string, subUser model.UdmSubUser) int64 {
var insertNum int64
imsiV, err := strconv.Atoi(subUser.Imsi)
if err != nil || subUser.StaticIp == "" {
return insertNum
}
numV, err := strconv.Atoi(subUser.SubNum)
if err != nil {
return insertNum
}
for i := 0; i < numV; i++ {
subUser.Imsi = fmt.Sprint(imsiV + i)
// 查询先
var user model.UdmSubUser
err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", subUser.Imsi, neID).Find(&user)
if err == nil {
// IP会自动递增需提前规划好DNN对应的IP如dnn不需要绑定IP则不带此字段名
// parts := strings.Split(subUser.SmData, "&")
user.SmData = subUser.SmData
// 更新
results, err := datasource.DefaultDB().Table("u_sub_user").Update(user)
if err == nil {
insertNum += results
}
}
}
return insertNum
}
// Delete 删除实体
func (r *RepoUdmSubUser) Delete(neID, imsi string) int64 {
results, err := datasource.DefaultDB().Table("u_sub_user").Where("imsi = ? and ne_id = ?", imsi, neID).Delete()

View File

@@ -91,11 +91,26 @@ func (r *ServiceUdmSubUser) InsertCSV(neID string, data []map[string]string) int
return num
}
// Insert UDM签约用户-批量添加4G用户
func (r *ServiceUdmSubUser) Insert4G(neID string, subUser model.UdmSubUser) int64 {
return r.repoSunUser.Insert4G(neID, subUser)
}
// Insert UDM签约用户-修改更新
func (r *ServiceUdmSubUser) Update(neID string, subUser model.UdmSubUser) int64 {
return r.repoSunUser.Update(neID, subUser)
}
// Update4GIP UDM签约用户-批量修改4G IP
func (r *ServiceUdmSubUser) Update4GIP(neID string, subUser model.UdmSubUser) int64 {
return r.repoSunUser.Update4GIP(neID, subUser)
}
// Update4GIP UDM签约用户-批量修改sm-data
func (r *ServiceUdmSubUser) UpdateSmData(neID string, subUser model.UdmSubUser) int64 {
return r.repoSunUser.UpdateSmData(neID, subUser)
}
// Insert UDM签约用户-删除单个
func (r *ServiceUdmSubUser) Delete(neID, imsi string) int64 {
return r.repoSunUser.Delete(neID, imsi)