diff --git a/src/modules/network_data/controller/udm_sub.go b/src/modules/network_data/controller/udm_sub.go index 1b6ff4c7..226313fe 100644 --- a/src/modules/network_data/controller/udm_sub.go +++ b/src/modules/network_data/controller/udm_sub.go @@ -446,7 +446,7 @@ func (s *UDMSubController) Removes(c *gin.Context) { // 命令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)) } diff --git a/src/modules/network_data/service/udm_auth.go b/src/modules/network_data/service/udm_auth.go index 197bd7c2..dd670b34 100644 --- a/src/modules/network_data/service/udm_auth.go +++ b/src/modules/network_data/service/udm_auth.go @@ -2,7 +2,6 @@ package service import ( "fmt" - "strconv" "strings" "time" @@ -176,18 +175,13 @@ func (r *UDMAuthUser) Delete(imsi, neId string) int64 { // LoadData 重新加载从imsi开始num的数据 func (r *UDMAuthUser) LoadData(neId, imsi, num string) { - startIMSI, _ := strconv.ParseInt(imsi, 10, 64) - subNum, _ := strconv.ParseInt(num, 10, 64) - var i int64 - for i = 0; i < subNum; i++ { - keyIMSI := fmt.Sprintf("%015d", startIMSI+i) - // 删除原数据 - r.udmAuthRepository.Delete(keyIMSI, neId) - // 加载数据 - arr := r.dataByRedis(keyIMSI, neId) - if len(arr) < 1 { - continue - } + // 直接删除前缀的记录 + index := len(imsi) - len(num) - 1 + prefix := imsi[:index] + r.udmAuthRepository.DeletePrefixByIMSI(prefix, neId) + // 加载数据 + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { r.udmAuthRepository.Inserts(arr) } } diff --git a/src/modules/network_data/service/udm_sub.go b/src/modules/network_data/service/udm_sub.go index 32051e5d..a288b00b 100644 --- a/src/modules/network_data/service/udm_sub.go +++ b/src/modules/network_data/service/udm_sub.go @@ -16,13 +16,13 @@ import ( // 实例化服务层 UDMSubUser 结构体 var NewUDMSubUser = &UDMSubUser{ udmSubRepository: repository.NewUDMSub, - UDMExtendRepository: repository.NewUDMExtend, + udmExtendRepository: repository.NewUDMExtend, } // UDM签约信息 服务层处理 type UDMSubUser struct { udmSubRepository *repository.UDMSubUser // UDM签约信息数据信息 - UDMExtendRepository *repository.UDMExtend // UDM用户IMSI信息数据信息 + udmExtendRepository *repository.UDMExtend // UDM用户IMSI信息数据信息 } // 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 { u.Remark = info.Remark } @@ -207,8 +207,8 @@ func (r *UDMSubUser) Insert(neId string, u model.UDMSubUser) int64 { r.udmSubRepository.Delete(u.IMSI, neId) // 新增到拓展信息 if u.Remark != "" { - r.UDMExtendRepository.Delete(u.IMSI, "%") - r.UDMExtendRepository.Inserts([]model.UDMExtend{{ + r.udmExtendRepository.Delete(u.IMSI, "%") + r.udmExtendRepository.Inserts([]model.UDMExtend{{ IMSI: u.IMSI, MSISDN: u.MSISDN, NeId: u.NeId, @@ -262,43 +262,44 @@ func (r *UDMSubUser) InsertData(neId, dataType string, data any) int64 { // Delete 删除单个不重新加载 func (r *UDMSubUser) Delete(neId, imsi string) int64 { // 删除拓展信息 - r.UDMExtendRepository.Delete(imsi, neId) + r.udmExtendRepository.Delete(imsi, neId) return r.udmSubRepository.Delete(imsi, neId) } // LoadData 重新加载从imsi开始num的数据 -// remark不为空,则新增到拓展信息,删除标记为-(Deleted)- func (r *UDMSubUser) LoadData(neId, imsi, num, remark string) { - startIMSI, _ := strconv.ParseInt(imsi, 10, 64) subNum, _ := strconv.ParseInt(num, 10, 64) - var i int64 - for i = 0; i < subNum; i++ { - keyIMSI := fmt.Sprintf("%015d", startIMSI+i) - // 删除原数据 - r.udmSubRepository.Delete(keyIMSI, neId) - if remark == "-(Deleted)-" { - r.UDMExtendRepository.Delete(keyIMSI, "%") - } - // 加载数据,删除标记为-(Deleted)-加载为空不插入 - arr := r.dataByRedis(keyIMSI, neId) - if len(arr) < 1 { - continue - } - r.udmSubRepository.Inserts(arr) + // 直接删除前缀的记录 + index := len(imsi) - len(num) - 1 + prefix := imsi[:index] + r.udmSubRepository.DeletePrefixByIMSI(prefix, neId) + // 加载数据 + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { // 拓展信息 if remark != "" { + startIMSI, _ := strconv.ParseInt(imsi, 10, 64) + endIMSI := startIMSI + subNum uarr := make([]model.UDMExtend, 0, len(arr)) for _, v := range arr { - uarr = append(uarr, model.UDMExtend{ - IMSI: v.IMSI, - MSISDN: v.MSISDN, - NeId: v.NeId, - Remark: remark, - }) + itemIMSI, err := strconv.ParseInt(v.IMSI, 10, 64) + if err != nil { + continue + } + // 只处理在范围内的IMSI + if itemIMSI >= startIMSI && itemIMSI < endIMSI { + uarr = append(uarr, model.UDMExtend{ + NeId: v.NeId, + IMSI: v.IMSI, + MSISDN: v.MSISDN, + 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) } } diff --git a/src/modules/network_data/service/udm_voip.go b/src/modules/network_data/service/udm_voip.go index ca5e3a18..02608867 100644 --- a/src/modules/network_data/service/udm_voip.go +++ b/src/modules/network_data/service/udm_voip.go @@ -2,7 +2,6 @@ package service import ( "fmt" - "strconv" "strings" "time" @@ -165,18 +164,13 @@ func (r UDMVOIPUser) Delete(username, neId string) int64 { // LoadData 重新加载从username开始num的数据 func (r UDMVOIPUser) LoadData(neId, username, num string) { - startUserName, _ := strconv.ParseInt(username, 10, 64) - subNum, _ := strconv.ParseInt(num, 10, 64) - var i int64 - for i = 0; i < subNum; i++ { - keyUserName := fmt.Sprintf("%d", startUserName+i) - // 删除原数据 - r.udmVOIPRepository.Delete(keyUserName, neId) - // 加载数据 - arr := r.dataByRedis(keyUserName, neId) - if len(arr) < 1 { - continue - } + // 直接删除前缀的记录 + index := len(username) - len(num) - 1 + prefix := username[:index] + r.udmVOIPRepository.DeletePrefixByUserName(prefix, neId) + // 加载数据 + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { r.udmVOIPRepository.Inserts(arr) } } diff --git a/src/modules/network_data/service/udm_volte_ims.go b/src/modules/network_data/service/udm_volte_ims.go index c1297a3f..452317fc 100644 --- a/src/modules/network_data/service/udm_volte_ims.go +++ b/src/modules/network_data/service/udm_volte_ims.go @@ -2,7 +2,6 @@ package service import ( "fmt" - "strconv" "strings" "time" @@ -187,21 +186,13 @@ func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 { // LoadData 重新加载从imsi开始num的数据 func (r UDMVolteIMSUser) LoadData(neId, imsiOrMsisdn, num string) { - startIMSIOrMsisdn, _ := strconv.ParseInt(imsiOrMsisdn, 10, 64) - subNum, _ := strconv.ParseInt(num, 10, 64) - var i int64 - for i = 0; i < subNum; i++ { - 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) - if len(arr) < 1 { - continue - } + // 直接删除前缀的记录 + index := len(imsiOrMsisdn) - len(num) - 1 + prefix := imsiOrMsisdn[:index] + r.udmVolteIMSRepository.DeletePrefixByIMSI(prefix, neId) + // 加载数据 + arr := r.dataByRedis(prefix+"*", neId) + if len(arr) > 0 { r.udmVolteIMSRepository.Inserts(arr) } }