Merge branch 'main-v2' into lite-ba

This commit is contained in:
TsMask
2025-10-11 11:43:53 +08:00
5 changed files with 53 additions and 73 deletions

View File

@@ -446,7 +446,7 @@ func (s *UDMSubController) Removes(c *gin.Context) {
// 命令ok时 // 命令ok时
if strings.Contains(data, "ok") { if strings.Contains(data, "ok") {
s.udmSubService.LoadData(neId, imsi, num, "-(Deleted)-") s.udmSubService.LoadData(neId, imsi, num, "")
} }
c.JSON(200, resp.OkData(data)) c.JSON(200, resp.OkData(data))
} }

View File

@@ -2,7 +2,6 @@ package service
import ( import (
"fmt" "fmt"
"strconv"
"strings" "strings"
"time" "time"
@@ -176,18 +175,13 @@ func (r *UDMAuthUser) Delete(imsi, neId string) int64 {
// LoadData 重新加载从imsi开始num的数据 // LoadData 重新加载从imsi开始num的数据
func (r *UDMAuthUser) LoadData(neId, imsi, num string) { func (r *UDMAuthUser) LoadData(neId, imsi, num string) {
startIMSI, _ := strconv.ParseInt(imsi, 10, 64) // 直接删除前缀的记录
subNum, _ := strconv.ParseInt(num, 10, 64) index := len(imsi) - len(num) - 1
var i int64 prefix := imsi[:index]
for i = 0; i < subNum; i++ { r.udmAuthRepository.DeletePrefixByIMSI(prefix, neId)
keyIMSI := fmt.Sprintf("%015d", startIMSI+i)
// 删除原数据
r.udmAuthRepository.Delete(keyIMSI, neId)
// 加载数据 // 加载数据
arr := r.dataByRedis(keyIMSI, neId) arr := r.dataByRedis(prefix+"*", neId)
if len(arr) < 1 { if len(arr) > 0 {
continue
}
r.udmAuthRepository.Inserts(arr) r.udmAuthRepository.Inserts(arr)
} }
} }

View File

@@ -16,13 +16,13 @@ import (
// 实例化服务层 UDMSubUser 结构体 // 实例化服务层 UDMSubUser 结构体
var NewUDMSubUser = &UDMSubUser{ var NewUDMSubUser = &UDMSubUser{
udmSubRepository: repository.NewUDMSub, udmSubRepository: repository.NewUDMSub,
UDMExtendRepository: repository.NewUDMExtend, udmExtendRepository: repository.NewUDMExtend,
} }
// UDM签约信息 服务层处理 // UDM签约信息 服务层处理
type UDMSubUser struct { type UDMSubUser struct {
udmSubRepository *repository.UDMSubUser // UDM签约信息数据信息 udmSubRepository *repository.UDMSubUser // UDM签约信息数据信息
UDMExtendRepository *repository.UDMExtend // UDM用户IMSI信息数据信息 udmExtendRepository *repository.UDMExtend // UDM用户IMSI信息数据信息
} }
// dataByRedis UDM签约用户 db:0 中 udm-sd:* // dataByRedis UDM签约用户 db:0 中 udm-sd:*
@@ -182,7 +182,7 @@ func (r *UDMSubUser) ParseInfo(imsi, neId string, data map[string]string) model.
} }
// 补充用户拓展信息 // 补充用户拓展信息
info := r.UDMExtendRepository.SelectByIMSIAndNeID(imsi, neId) info := r.udmExtendRepository.SelectByIMSIAndNeID(imsi, neId)
if info.IMSI == imsi { if info.IMSI == imsi {
u.Remark = info.Remark u.Remark = info.Remark
} }
@@ -207,8 +207,8 @@ func (r *UDMSubUser) Insert(neId string, u model.UDMSubUser) int64 {
r.udmSubRepository.Delete(u.IMSI, neId) r.udmSubRepository.Delete(u.IMSI, neId)
// 新增到拓展信息 // 新增到拓展信息
if u.Remark != "" { if u.Remark != "" {
r.UDMExtendRepository.Delete(u.IMSI, "%") r.udmExtendRepository.Delete(u.IMSI, "%")
r.UDMExtendRepository.Inserts([]model.UDMExtend{{ r.udmExtendRepository.Inserts([]model.UDMExtend{{
IMSI: u.IMSI, IMSI: u.IMSI,
MSISDN: u.MSISDN, MSISDN: u.MSISDN,
NeId: u.NeId, NeId: u.NeId,
@@ -262,43 +262,44 @@ func (r *UDMSubUser) InsertData(neId, dataType string, data any) int64 {
// Delete 删除单个不重新加载 // Delete 删除单个不重新加载
func (r *UDMSubUser) Delete(neId, imsi string) int64 { func (r *UDMSubUser) Delete(neId, imsi string) int64 {
// 删除拓展信息 // 删除拓展信息
r.UDMExtendRepository.Delete(imsi, neId) r.udmExtendRepository.Delete(imsi, neId)
return r.udmSubRepository.Delete(imsi, neId) return r.udmSubRepository.Delete(imsi, neId)
} }
// LoadData 重新加载从imsi开始num的数据 // LoadData 重新加载从imsi开始num的数据
// remark不为空则新增到拓展信息删除标记为-(Deleted)-
func (r *UDMSubUser) LoadData(neId, imsi, num, remark string) { func (r *UDMSubUser) LoadData(neId, imsi, num, remark string) {
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
subNum, _ := strconv.ParseInt(num, 10, 64) subNum, _ := strconv.ParseInt(num, 10, 64)
var i int64 // 直接删除前缀的记录
for i = 0; i < subNum; i++ { index := len(imsi) - len(num) - 1
keyIMSI := fmt.Sprintf("%015d", startIMSI+i) prefix := imsi[:index]
// 删除原数据 r.udmSubRepository.DeletePrefixByIMSI(prefix, neId)
r.udmSubRepository.Delete(keyIMSI, neId) // 加载数据
if remark == "-(Deleted)-" { arr := r.dataByRedis(prefix+"*", neId)
r.UDMExtendRepository.Delete(keyIMSI, "%") if len(arr) > 0 {
}
// 加载数据,删除标记为-(Deleted)-加载为空不插入
arr := r.dataByRedis(keyIMSI, neId)
if len(arr) < 1 {
continue
}
r.udmSubRepository.Inserts(arr)
// 拓展信息 // 拓展信息
if remark != "" { if remark != "" {
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
endIMSI := startIMSI + subNum
uarr := make([]model.UDMExtend, 0, len(arr)) uarr := make([]model.UDMExtend, 0, len(arr))
for _, v := range arr { for _, v := range arr {
itemIMSI, err := strconv.ParseInt(v.IMSI, 10, 64)
if err != nil {
continue
}
// 只处理在范围内的IMSI
if itemIMSI >= startIMSI && itemIMSI < endIMSI {
uarr = append(uarr, model.UDMExtend{ uarr = append(uarr, model.UDMExtend{
NeId: v.NeId,
IMSI: v.IMSI, IMSI: v.IMSI,
MSISDN: v.MSISDN, MSISDN: v.MSISDN,
NeId: v.NeId,
Remark: remark, Remark: remark,
}) })
r.udmExtendRepository.Delete(v.IMSI, neId)
} }
r.UDMExtendRepository.Delete(keyIMSI, neId)
r.UDMExtendRepository.Inserts(uarr)
} }
r.udmExtendRepository.Inserts(uarr)
}
r.udmSubRepository.Inserts(arr)
} }
} }

View File

@@ -2,7 +2,6 @@ package service
import ( import (
"fmt" "fmt"
"strconv"
"strings" "strings"
"time" "time"
@@ -165,18 +164,13 @@ func (r UDMVOIPUser) Delete(username, neId string) int64 {
// LoadData 重新加载从username开始num的数据 // LoadData 重新加载从username开始num的数据
func (r UDMVOIPUser) LoadData(neId, username, num string) { func (r UDMVOIPUser) LoadData(neId, username, num string) {
startUserName, _ := strconv.ParseInt(username, 10, 64) // 直接删除前缀的记录
subNum, _ := strconv.ParseInt(num, 10, 64) index := len(username) - len(num) - 1
var i int64 prefix := username[:index]
for i = 0; i < subNum; i++ { r.udmVOIPRepository.DeletePrefixByUserName(prefix, neId)
keyUserName := fmt.Sprintf("%d", startUserName+i)
// 删除原数据
r.udmVOIPRepository.Delete(keyUserName, neId)
// 加载数据 // 加载数据
arr := r.dataByRedis(keyUserName, neId) arr := r.dataByRedis(prefix+"*", neId)
if len(arr) < 1 { if len(arr) > 0 {
continue
}
r.udmVOIPRepository.Inserts(arr) r.udmVOIPRepository.Inserts(arr)
} }
} }

View File

@@ -2,7 +2,6 @@ package service
import ( import (
"fmt" "fmt"
"strconv"
"strings" "strings"
"time" "time"
@@ -187,21 +186,13 @@ func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 {
// LoadData 重新加载从imsi开始num的数据 // LoadData 重新加载从imsi开始num的数据
func (r UDMVolteIMSUser) LoadData(neId, imsiOrMsisdn, num string) { func (r UDMVolteIMSUser) LoadData(neId, imsiOrMsisdn, num string) {
startIMSIOrMsisdn, _ := strconv.ParseInt(imsiOrMsisdn, 10, 64) // 直接删除前缀的记录
subNum, _ := strconv.ParseInt(num, 10, 64) index := len(imsiOrMsisdn) - len(num) - 1
var i int64 prefix := imsiOrMsisdn[:index]
for i = 0; i < subNum; i++ { r.udmVolteIMSRepository.DeletePrefixByIMSI(prefix, neId)
keyIMSI := fmt.Sprintf("%015d", startIMSIOrMsisdn+i)
if !strings.HasPrefix(imsiOrMsisdn, "0") {
keyIMSI = fmt.Sprintf("%d", startIMSIOrMsisdn+i)
}
// 删除原数据
r.udmVolteIMSRepository.Delete(keyIMSI, neId)
// 加载数据 // 加载数据
arr := r.dataByRedis(keyIMSI+":*", neId) arr := r.dataByRedis(prefix+"*", neId)
if len(arr) < 1 { if len(arr) > 0 {
continue
}
r.udmVolteIMSRepository.Inserts(arr) r.udmVolteIMSRepository.Inserts(arr)
} }
} }