diff --git a/features/ue/controller/ims_user.go b/features/ue/controller/ims_user.go index 99a80f18..28d9f1df 100644 --- a/features/ue/controller/ims_user.go +++ b/features/ue/controller/ims_user.go @@ -146,6 +146,9 @@ func (s *IMSUserController) Add(c *gin.Context) { // 命令ok时 if strings.Contains(data, "ok") { body.NeId = neId + if body.Tag == model.TAG_VoIP { + body.IMSI = body.MSISDN + } s.imsUserService.Insert(neId, body) } c.JSON(200, result.OkData(data)) @@ -194,7 +197,11 @@ func (s *IMSUserController) Adds(c *gin.Context) { } // 命令ok时 if strings.Contains(data, "ok") { - s.imsUserService.LoadData(neId, body.IMSI, num) + if body.Tag == model.TAG_VoIP { + s.imsUserService.LoadData(neId, body.MSISDN, num) + } else { + s.imsUserService.LoadData(neId, body.IMSI, num) + } } c.JSON(200, result.OkData(data)) } diff --git a/features/ue/controller/voip_auth.go b/features/ue/controller/voip_auth.go index 16faa333..7161397f 100644 --- a/features/ue/controller/voip_auth.go +++ b/features/ue/controller/voip_auth.go @@ -182,8 +182,7 @@ func (s *VoIPAuthController) Adds(c *gin.Context) { defer telnetClient.Close() // 发送MML - cmd := fmt.Sprintf("baa voip:start_username=%s,password=%s,sub_num=%s,", - body.UserName, body.Password, num) + cmd := fmt.Sprintf("baa voip:start_username=%s,sub_num=%s,", body.UserName, num) cmd += s.voipAuthService.ParseCommandParams(body) data, err := telnet.ConvertToStr(telnetClient, cmd) if err != nil { diff --git a/features/ue/ims_user/repository.go b/features/ue/ims_user/repository.go index 66dc0e34..eb503596 100644 --- a/features/ue/ims_user/repository.go +++ b/features/ue/ims_user/repository.go @@ -42,10 +42,10 @@ type Repository struct { } // convertResultRows 将结果记录转实体结果组 -func (r *Repository) convertResultRows(rows []map[string]any) []VoLTEUser { - arr := make([]VoLTEUser, 0) +func (r *Repository) convertResultRows(rows []map[string]any) []IMSUser { + arr := make([]IMSUser, 0) for _, row := range rows { - item := VoLTEUser{} + item := IMSUser{} for key, value := range row { if keyMapper, ok := r.resultMap[key]; ok { repo.SetFieldValue(&item, keyMapper, value) @@ -57,7 +57,7 @@ func (r *Repository) convertResultRows(rows []map[string]any) []VoLTEUser { } // ClearAndInsert 清空ne_id后新增实体 -func (r *Repository) ClearAndInsert(neId string, u []VoLTEUser) int64 { +func (r *Repository) ClearAndInsert(neId string, u []IMSUser) int64 { // 不指定neID时,用 TRUNCATE 清空表快 // _, err := datasource.ExecDB("", "TRUNCATE TABLE u_ims_user", nil) _, err := datasource.ExecDB("", "DELETE FROM u_ims_user WHERE ne_id = ?", []any{neId}) @@ -128,7 +128,7 @@ func (r *Repository) SelectPage(query map[string]any) map[string]any { result := map[string]any{ "total": 0, - "rows": []VoLTEUser{}, + "rows": []IMSUser{}, } // 查询数量 长度为0直接返回 @@ -179,7 +179,7 @@ func (r *Repository) SelectPage(query map[string]any) map[string]any { } // SelectList 根据实体查询 -func (r *Repository) SelectList(u VoLTEUser) []VoLTEUser { +func (r *Repository) SelectList(u IMSUser) []IMSUser { // 查询条件拼接 var conditions []string var params []any @@ -210,23 +210,23 @@ func (r *Repository) SelectList(u VoLTEUser) []VoLTEUser { } // SelectByIMSIAndNeID 通过imsi和ne_id查询 -func (r *Repository) SelectByIMSIAndNeID(imsi, neId string) VoLTEUser { +func (r *Repository) SelectByIMSIAndNeID(imsi, neId string) IMSUser { querySql := r.selectSql + " where imsi = ? and ne_id = ?" results, err := datasource.RawDB("", querySql, []any{imsi, neId}) if err != nil { logger.Errorf("query err => %v", err) - return VoLTEUser{} + return IMSUser{} } // 转换实体 rows := r.convertResultRows(results) if len(rows) > 0 { return rows[0] } - return VoLTEUser{} + return IMSUser{} } // Insert 批量添加 -func (r *Repository) Inserts(uArr []VoLTEUser) int64 { +func (r *Repository) Inserts(uArr []IMSUser) int64 { // multi-tenancy r.SetTenantID(&uArr) @@ -255,7 +255,7 @@ func (r *Repository) DeletePrefixByIMSI(imsiPrefix, neId string) int64 { return tx.RowsAffected } -func (r *Repository) SetTenantID(subArr *[]VoLTEUser) { +func (r *Repository) SetTenantID(subArr *[]IMSUser) { for s := 0; s < len(*subArr); s++ { var tenantID []string err := dborm.DefaultDB().Table("sys_tenant"). diff --git a/features/ue/service/ims_user.go b/features/ue/service/ims_user.go index 71e94293..6fbee0ea 100644 --- a/features/ue/service/ims_user.go +++ b/features/ue/service/ims_user.go @@ -129,7 +129,7 @@ func (r *IMSUserService) SelectList(u model.IMSUser) []model.IMSUser { // Insert 从数据中读取后删除imsi再存入数据库 // imsi长度15,ki长度32,opc长度0或者32 func (r *IMSUserService) Insert(neId string, u model.IMSUser) int64 { - uArr := r.dataByRedis(u.IMSI, neId) + uArr := r.dataByRedis(u.IMSI+":*", neId) if len(uArr) > 0 { r.imsUserRepository.Delete(u.IMSI, neId) return r.imsUserRepository.Inserts(uArr) @@ -187,10 +187,17 @@ func (r *IMSUserService) LoadData(neId, imsi, num string) { subNum, _ := strconv.ParseInt(num, 10, 64) var i int64 for i = 0; i < subNum; i++ { - keyIMSI := fmt.Sprintf("%015d", startIMSI+i) + var keyIMSI string + if len(imsi) == model.IMSI_MAX_LENGTH { + keyIMSI = fmt.Sprintf("%015d", startIMSI+i) + } else { + // 处理不满15位的IMSI, tag=TAG_VoIP + keyIMSI = fmt.Sprintf("%d", startIMSI+i) + } + // 删除原数据 r.imsUserRepository.Delete(keyIMSI, neId) - arr := r.dataByRedis(keyIMSI, neId) + arr := r.dataByRedis(keyIMSI+":*", neId) if len(arr) < 1 { continue } diff --git a/features/ue/service/voip_auth.go b/features/ue/service/voip_auth.go index 630ed727..4b02b527 100644 --- a/features/ue/service/voip_auth.go +++ b/features/ue/service/voip_auth.go @@ -21,7 +21,7 @@ type VoIPAuthService struct { voipAuthRepository *repository.VoIPAuthRepository // VoLTE用户信息数据信息 } -// dataByRedis UDM签约用户 db:0 中 volte:* +// dataByRedis VoIP鉴权数据 db:0 中 voip:* func (r *VoIPAuthService) dataByRedis(userName, neId string) []model.VoIPAuth { arr := []model.VoIPAuth{} key := fmt.Sprintf("voip:%s", userName)