fix: ims user tag 0/1: VoIP/VoLTE
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
Target Server Version : 100621 (10.6.21-MariaDB-0ubuntu0.22.04.2)
|
Target Server Version : 100621 (10.6.21-MariaDB-0ubuntu0.22.04.2)
|
||||||
File Encoding : 65001
|
File Encoding : 65001
|
||||||
|
|
||||||
Date: 09/04/2025 09:22:00
|
Date: 10/04/2025 20:59:15
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
@@ -26,11 +26,11 @@ CREATE TABLE `u_ims_user` (
|
|||||||
`ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
`ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
`imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM/USIMID',
|
`imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM/USIMID',
|
||||||
`msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
`volte` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`tag` tinyint(4) NULL DEFAULT NULL COMMENT '0: VoIP, 1: VoLTE',
|
||||||
`vni` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`vni` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
`tenant_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'multi-tenancy refer to sys_tenant.tenant_id',
|
`tenant_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'multi-tenancy refer to sys_tenant.tenant_id',
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
UNIQUE INDEX `uk_imsi_ne`(`imsi`, `ne_id`) USING BTREE COMMENT 'imsi_neid'
|
UNIQUE INDEX `uk_imsi_ne`(`imsi`, `ne_id`) USING BTREE COMMENT 'imsi_neid'
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'UDM' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB AUTO_INCREMENT = 371900 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'UDM' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
Target Server Version : 100621 (10.6.21-MariaDB-0ubuntu0.22.04.2)
|
Target Server Version : 100621 (10.6.21-MariaDB-0ubuntu0.22.04.2)
|
||||||
File Encoding : 65001
|
File Encoding : 65001
|
||||||
|
|
||||||
Date: 09/04/2025 09:22:00
|
Date: 10/04/2025 20:59:34
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
@@ -25,11 +25,11 @@ CREATE TABLE IF NOT EXISTS `u_ims_user` (
|
|||||||
`ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
`ne_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
`imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM/USIMID',
|
`imsi` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'SIM/USIMID',
|
||||||
`msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`msisdn` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
`volte` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`tag` tinyint(4) NULL DEFAULT NULL COMMENT '0: VoIP, 1: VoLTE',
|
||||||
`vni` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
`vni` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
|
||||||
`tenant_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'multi-tenancy refer to sys_tenant.tenant_id',
|
`tenant_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'multi-tenancy refer to sys_tenant.tenant_id',
|
||||||
PRIMARY KEY (`id`) USING BTREE,
|
PRIMARY KEY (`id`) USING BTREE,
|
||||||
UNIQUE INDEX `uk_imsi_ne`(`imsi`, `ne_id`) USING BTREE COMMENT 'imsi_neid'
|
UNIQUE INDEX `uk_imsi_ne`(`imsi`, `ne_id`) USING BTREE COMMENT 'imsi_neid'
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'UDM' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB AUTO_INCREMENT = 371900 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'UDM' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ func (s *IMSUserController) Add(c *gin.Context) {
|
|||||||
|
|
||||||
var body model.IMSUser
|
var body model.IMSUser
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
||||||
if err != nil || (len(body.IMSI) < model.IMSI_MAX_LENGTH && body.VoLTE == model.TAG_VoLTE) {
|
if err != nil || (len(body.IMSI) < model.IMSI_MAX_LENGTH && body.Tag == model.TAG_VoLTE) {
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -162,7 +162,7 @@ func (s *IMSUserController) Adds(c *gin.Context) {
|
|||||||
|
|
||||||
var body model.IMSUser
|
var body model.IMSUser
|
||||||
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
err := c.ShouldBindBodyWith(&body, binding.JSON)
|
||||||
if err != nil || (len(body.IMSI) < model.IMSI_MAX_LENGTH && body.VoLTE == model.TAG_VoLTE) {
|
if err != nil || (len(body.IMSI) < model.IMSI_MAX_LENGTH && body.Tag == model.TAG_VoLTE) {
|
||||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -381,9 +381,9 @@ func (s *IMSUserController) Export(c *gin.Context) {
|
|||||||
if fileType == "csv" {
|
if fileType == "csv" {
|
||||||
// 转换数据
|
// 转换数据
|
||||||
data := [][]string{}
|
data := [][]string{}
|
||||||
data = append(data, []string{"IMSI", "MSISDN", "VoLTE", "VNI"})
|
data = append(data, []string{"IMSI", "MSISDN", "Tag", "VNI"})
|
||||||
for _, v := range rows {
|
for _, v := range rows {
|
||||||
data = append(data, []string{v.IMSI, v.MSISDN, v.VoLTE, v.VNI})
|
data = append(data, []string{v.IMSI, v.MSISDN, v.Tag.String(), v.VNI})
|
||||||
}
|
}
|
||||||
// 输出到文件
|
// 输出到文件
|
||||||
if err := file.WriterFileCSV(data, filePath); err != nil {
|
if err := file.WriterFileCSV(data, filePath); err != nil {
|
||||||
@@ -396,7 +396,7 @@ func (s *IMSUserController) Export(c *gin.Context) {
|
|||||||
// 转换数据
|
// 转换数据
|
||||||
data := [][]string{}
|
data := [][]string{}
|
||||||
for _, v := range rows {
|
for _, v := range rows {
|
||||||
data = append(data, []string{v.IMSI, v.MSISDN, v.VoLTE, v.VNI})
|
data = append(data, []string{v.IMSI, v.MSISDN, v.Tag.String(), v.VNI})
|
||||||
}
|
}
|
||||||
// 输出到文件
|
// 输出到文件
|
||||||
if err := file.WriterFileTXT(data, ",", filePath); err != nil {
|
if err := file.WriterFileTXT(data, ",", filePath); err != nil {
|
||||||
|
|||||||
@@ -20,16 +20,16 @@ import (
|
|||||||
|
|
||||||
// 实例化控制层 Controller 结构体
|
// 实例化控制层 Controller 结构体
|
||||||
var NewController = &Controller{
|
var NewController = &Controller{
|
||||||
volteUserService: NewVoLTEService,
|
volteUserService: NewVoLTEService,
|
||||||
neInfoService: neService.NewNeInfo,
|
neInfoService: neService.NewNeInfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
// IMS用户信息 控制层处理
|
// IMS用户信息 控制层处理
|
||||||
//
|
//
|
||||||
// @Description IMS用户信息 控制层处理
|
// @Description IMS用户信息 控制层处理
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
volteUserService *Service // IMS User信息服务
|
volteUserService *Service // IMS User信息服务
|
||||||
neInfoService *neService.NeInfo // 网元信息服务
|
neInfoService *neService.NeInfo // 网元信息服务
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Controller) ResetData(c *gin.Context) {
|
func (s *Controller) ResetData(c *gin.Context) {
|
||||||
@@ -44,7 +44,6 @@ func (s *Controller) ResetData(c *gin.Context) {
|
|||||||
c.JSON(200, result.OkData(data))
|
c.JSON(200, result.OkData(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (s *Controller) List(c *gin.Context) {
|
func (s *Controller) List(c *gin.Context) {
|
||||||
querys := ctx.QueryMap(c)
|
querys := ctx.QueryMap(c)
|
||||||
// querys["userName"] = ctx.LoginUserToUserName(c)
|
// querys["userName"] = ctx.LoginUserToUserName(c)
|
||||||
@@ -94,7 +93,7 @@ func (s *Controller) Info(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(data) == 0 {
|
if len(data) == 0 {
|
||||||
c.JSON(200, result.ErrMsg("Not found VoLTE user data"))
|
c.JSON(200, result.ErrMsg("Not found IMS user data"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,9 +379,9 @@ func (s *Controller) Export(c *gin.Context) {
|
|||||||
if fileType == "csv" {
|
if fileType == "csv" {
|
||||||
// 转换数据
|
// 转换数据
|
||||||
data := [][]string{}
|
data := [][]string{}
|
||||||
data = append(data, []string{"IMSI", "MSISDN", "VoLTE", "VNI"})
|
data = append(data, []string{"IMSI", "MSISDN", "Tag", "VNI"})
|
||||||
for _, v := range rows {
|
for _, v := range rows {
|
||||||
data = append(data, []string{v.IMSI, v.MSISDN, v.VoLTE, v.VNI})
|
data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI})
|
||||||
}
|
}
|
||||||
// 输出到文件
|
// 输出到文件
|
||||||
if err := file.WriterFileCSV(data, filePath); err != nil {
|
if err := file.WriterFileCSV(data, filePath); err != nil {
|
||||||
@@ -395,7 +394,7 @@ func (s *Controller) Export(c *gin.Context) {
|
|||||||
// 转换数据
|
// 转换数据
|
||||||
data := [][]string{}
|
data := [][]string{}
|
||||||
for _, v := range rows {
|
for _, v := range rows {
|
||||||
data = append(data, []string{v.IMSI, v.MSISDN, v.VoLTE, v.VNI})
|
data = append(data, []string{v.IMSI, v.MSISDN, v.Tag, v.VNI})
|
||||||
}
|
}
|
||||||
// 输出到文件
|
// 输出到文件
|
||||||
if err := file.WriterFileTXT(data, ",", filePath); err != nil {
|
if err := file.WriterFileTXT(data, ",", filePath); err != nil {
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ type VoLTEUser struct {
|
|||||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||||
VoLTE string `json:"volte" gorm:"column:volte"` // VoLTE
|
Tag string `json:"tag" gorm:"column:tag"` // Tag: 0=VoIP, 1=VoLTE
|
||||||
VNI string `json:"vni" gorm:"column:vni"` // VNI
|
VNI string `json:"vni" gorm:"column:vni"` // VNI
|
||||||
|
|
||||||
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
||||||
TenantName string `json:"tenantName" gorm:"-"`
|
TenantName string `json:"tenantName" gorm:"-"`
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
// 实例化数据层 Repository 结构体
|
// 实例化数据层 Repository 结构体
|
||||||
var NewVoLTERepository = &Repository{
|
var NewVoLTERepository = &Repository{
|
||||||
selectSql: `select
|
selectSql: `select
|
||||||
s.id, s.ne_id, s.imsi, s.msisdn, s.volte, s.vni,
|
s.id, s.ne_id, s.imsi, s.msisdn, s.tag, s.vni,
|
||||||
t.tenant_id, t.tenant_name
|
t.tenant_id, t.tenant_name
|
||||||
from u_ims_user s
|
from u_ims_user s
|
||||||
left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
|
left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
|
||||||
@@ -25,7 +25,7 @@ var NewVoLTERepository = &Repository{
|
|||||||
"ne_id": "NeId",
|
"ne_id": "NeId",
|
||||||
"imsi": "IMSI",
|
"imsi": "IMSI",
|
||||||
"msisdn": "MSISDN",
|
"msisdn": "MSISDN",
|
||||||
"volte": "VoLTE",
|
"tag": "Tag",
|
||||||
"vni": "VNI",
|
"vni": "VNI",
|
||||||
|
|
||||||
"tenant_id": "TenantID",
|
"tenant_id": "TenantID",
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import (
|
|||||||
|
|
||||||
// 实例化服务层 Service 结构体
|
// 实例化服务层 Service 结构体
|
||||||
var NewVoLTEService = &Service{
|
var NewVoLTEService = &Service{
|
||||||
volteRepository: NewVoLTERepository,
|
volteRepository: NewVoLTERepository,
|
||||||
}
|
}
|
||||||
|
|
||||||
// VoLTE用户信息 服务层处理
|
// VoLTE用户信息 服务层处理
|
||||||
type Service struct {
|
type Service struct {
|
||||||
volteRepository *Repository // VoLTE用户信息数据信息
|
volteRepository *Repository // VoLTE用户信息数据信息
|
||||||
}
|
}
|
||||||
|
|
||||||
// dataByRedis UDM签约用户 db:0 中 volte:*
|
// dataByRedis UDM签约用户 db:0 中 volte:*
|
||||||
@@ -48,12 +48,12 @@ func (r *Service) dataByRedis(imsi, neId string) []VoLTEUser {
|
|||||||
for k, m := range mkv {
|
for k, m := range mkv {
|
||||||
var imsi, msisdn string
|
var imsi, msisdn string
|
||||||
KeyParts := strings.Split(k, ":")
|
KeyParts := strings.Split(k, ":")
|
||||||
switch len(KeyParts) {
|
switch len(KeyParts) {
|
||||||
case 0, 1:
|
case 0, 1:
|
||||||
// 处理单个部分的情况
|
// 处理单个部分的情况
|
||||||
continue
|
continue
|
||||||
case 2:
|
case 2:
|
||||||
// 处理两个部分的情况
|
// 处理两个部分的情况
|
||||||
imsi = KeyParts[1]
|
imsi = KeyParts[1]
|
||||||
msisdn = "-"
|
msisdn = "-"
|
||||||
case 3:
|
case 3:
|
||||||
@@ -69,14 +69,14 @@ func (r *Service) dataByRedis(imsi, neId string) []VoLTEUser {
|
|||||||
var vni string = "-"
|
var vni string = "-"
|
||||||
impiParts := strings.Split(m["impi"], "@")
|
impiParts := strings.Split(m["impi"], "@")
|
||||||
if len(impiParts) > 1 {
|
if len(impiParts) > 1 {
|
||||||
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
|
vni = impiParts[1] // 输出: ims.mnc001.mcc110.3gppnetwork.org
|
||||||
}
|
}
|
||||||
a := VoLTEUser{
|
a := VoLTEUser{
|
||||||
NeId: neId,
|
NeId: neId,
|
||||||
IMSI: imsi, // volte:360000100000130:8612300000130
|
IMSI: imsi, // volte:360000100000130:8612300000130
|
||||||
MSISDN: msisdn, // 8612300000130
|
MSISDN: msisdn, // 8612300000130
|
||||||
VoLTE: m["tag"], // volte = tag
|
Tag: m["tag"], // volte = tag
|
||||||
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
||||||
}
|
}
|
||||||
arr = append(arr, a)
|
arr = append(arr, a)
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ func (r *Service) ResetData(neId string) int64 {
|
|||||||
func (r *Service) ParseInfo(imsi, neId string, data map[string]string) VoLTEUser {
|
func (r *Service) ParseInfo(imsi, neId string, data map[string]string) VoLTEUser {
|
||||||
u := r.volteRepository.SelectByIMSIAndNeID(imsi, neId)
|
u := r.volteRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||||
|
|
||||||
msisdn := data["MSISDN"]
|
msisdn := data["msisdn"]
|
||||||
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
|
if imsMsisdnLen := strings.Index(msisdn, ","); imsMsisdnLen != -1 {
|
||||||
msisdn = msisdn[:imsMsisdnLen]
|
msisdn = msisdn[:imsMsisdnLen]
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ func (r *Service) ParseInfo(imsi, neId string, data map[string]string) VoLTEUser
|
|||||||
u.NeId = neId
|
u.NeId = neId
|
||||||
u.IMSI = imsi
|
u.IMSI = imsi
|
||||||
u.MSISDN = msisdn
|
u.MSISDN = msisdn
|
||||||
u.VoLTE = data["VoLTE"]
|
u.Tag = data["volte_tag"]
|
||||||
u.VNI = data["VNI"]
|
u.VNI = data["VNI"]
|
||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
@@ -198,8 +198,8 @@ func (r *Service) ParseCommandParams(item VoLTEUser) string {
|
|||||||
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.VoLTE != "" {
|
if item.Tag != "" {
|
||||||
conditions = append(conditions, fmt.Sprintf("volte=%s", item.VoLTE))
|
conditions = append(conditions, fmt.Sprintf("volte=%s", item.Tag))
|
||||||
}
|
}
|
||||||
if item.VNI != "" {
|
if item.VNI != "" {
|
||||||
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
||||||
|
|||||||
@@ -1,22 +1,57 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// IMSI 号码长度
|
// IMSI 号码长度
|
||||||
IMSI_MAX_LENGTH = 15
|
IMSI_MAX_LENGTH = 15
|
||||||
// MSISDN 号码长度
|
// MSISDN 号码长度
|
||||||
MSISDN_MAX_LENGTH = 15
|
MSISDN_MAX_LENGTH = 15
|
||||||
TAG_VoLTE = "1" // VoLTE标记
|
|
||||||
TAG_VOIP = "0" // VoIP标记
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CallTag int
|
||||||
|
|
||||||
|
const (
|
||||||
|
TAG_VOIP CallTag = iota // VoIP标记
|
||||||
|
TAG_VoLTE // VoLTE标记
|
||||||
|
)
|
||||||
|
|
||||||
|
func (ct CallTag) Enum() string {
|
||||||
|
switch ct {
|
||||||
|
case TAG_VOIP:
|
||||||
|
return "VoIP"
|
||||||
|
case TAG_VoLTE:
|
||||||
|
return "VoLTE"
|
||||||
|
default:
|
||||||
|
return "unknown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ct CallTag) String() string {
|
||||||
|
return fmt.Sprintf("%d", ct)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseCallTag 将字符串转换为 CallTag 枚举类型
|
||||||
|
func ParseCallTag(s string) CallTag {
|
||||||
|
// 如果为空或转换失败,可以返回默认值,例如 VoIP
|
||||||
|
i, err := strconv.Atoi(s)
|
||||||
|
if err != nil {
|
||||||
|
return TAG_VOIP
|
||||||
|
}
|
||||||
|
return CallTag(i)
|
||||||
|
}
|
||||||
|
|
||||||
// @Description VoLTE用户信息
|
// @Description VoLTE用户信息
|
||||||
type IMSUser struct {
|
type IMSUser struct {
|
||||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||||
VoLTE string `json:"volte" gorm:"column:volte"` // VoLTE
|
Tag CallTag `json:"tag" gorm:"column:tag"` // tag: 0=VoIP, 1=VoLTE
|
||||||
VNI string `json:"vni" gorm:"column:vni"` // VNI
|
VNI string `json:"vni" gorm:"column:vni"` // VNI
|
||||||
|
|
||||||
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
||||||
TenantName string `json:"tenantName" gorm:"-"`
|
TenantName string `json:"tenantName" gorm:"-"`
|
||||||
|
|||||||
@@ -4,19 +4,19 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"be.ems/features/ue/model"
|
||||||
dborm "be.ems/lib/core/datasource"
|
dborm "be.ems/lib/core/datasource"
|
||||||
"be.ems/lib/log"
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
"be.ems/src/framework/utils/repo"
|
"be.ems/src/framework/utils/repo"
|
||||||
"be.ems/features/ue/model"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 实例化数据层 IMSUserRepository 结构体
|
// 实例化数据层 IMSUserRepository 结构体
|
||||||
var NewIMSUserRepository = &IMSUserRepository{
|
var NewIMSUserRepository = &IMSUserRepository{
|
||||||
selectSql: `select
|
selectSql: `select
|
||||||
s.id, s.ne_id, s.imsi, s.msisdn, s.volte, s.vni,
|
s.id, s.ne_id, s.imsi, s.msisdn, s.tag, s.vni,
|
||||||
t.tenant_id, t.tenant_name
|
t.tenant_id, t.tenant_name
|
||||||
from u_ims_user s
|
from u_ims_user s
|
||||||
left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
|
left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
|
||||||
@@ -26,7 +26,7 @@ var NewIMSUserRepository = &IMSUserRepository{
|
|||||||
"ne_id": "NeId",
|
"ne_id": "NeId",
|
||||||
"imsi": "IMSI",
|
"imsi": "IMSI",
|
||||||
"msisdn": "MSISDN",
|
"msisdn": "MSISDN",
|
||||||
"volte": "VoLTE",
|
"tag": "Tag",
|
||||||
"vni": "VNI",
|
"vni": "VNI",
|
||||||
|
|
||||||
"tenant_id": "TenantID",
|
"tenant_id": "TenantID",
|
||||||
|
|||||||
@@ -75,10 +75,10 @@ func (r *IMSUserService) dataByRedis(imsi, neId string) []model.IMSUser {
|
|||||||
}
|
}
|
||||||
a := model.IMSUser{
|
a := model.IMSUser{
|
||||||
NeId: neId,
|
NeId: neId,
|
||||||
IMSI: imsi, // volte:360000100000130:8612300000130
|
IMSI: imsi, // volte:360000100000130:8612300000130
|
||||||
MSISDN: msisdn, // 8612300000130
|
MSISDN: msisdn, // 8612300000130
|
||||||
VoLTE: m["tag"], // volte = tag
|
Tag: model.ParseCallTag(m["tag"]), // volte = tag
|
||||||
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
VNI: vni, // ims.mnc001.mcc110.3gppnetwork.org
|
||||||
}
|
}
|
||||||
arr = append(arr, a)
|
arr = append(arr, a)
|
||||||
}
|
}
|
||||||
@@ -111,7 +111,7 @@ func (r *IMSUserService) ParseInfo(imsi, neId string, data map[string]string) mo
|
|||||||
u.NeId = neId
|
u.NeId = neId
|
||||||
u.IMSI = imsi
|
u.IMSI = imsi
|
||||||
u.MSISDN = msisdn
|
u.MSISDN = msisdn
|
||||||
u.VoLTE = data["volte_tag"]
|
u.Tag = model.ParseCallTag(data["volte_tag"])
|
||||||
u.VNI = vni
|
u.VNI = vni
|
||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
@@ -205,8 +205,8 @@ func (r *IMSUserService) ParseCommandParams(item model.IMSUser) string {
|
|||||||
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
conditions = append(conditions, fmt.Sprintf("msisdn=%s", item.MSISDN))
|
||||||
}
|
}
|
||||||
|
|
||||||
if item.VoLTE != "" {
|
if item.Tag != model.ParseCallTag("") {
|
||||||
conditions = append(conditions, fmt.Sprintf("volte=%s", item.VoLTE))
|
conditions = append(conditions, fmt.Sprintf("volte=%d", item.Tag))
|
||||||
}
|
}
|
||||||
if item.VNI != "" {
|
if item.VNI != "" {
|
||||||
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
conditions = append(conditions, fmt.Sprintf("vni=%s", item.VNI))
|
||||||
|
|||||||
Reference in New Issue
Block a user