fix: issue of tenant status for all features

This commit is contained in:
2024-09-30 16:40:37 +08:00
parent 41693db39e
commit be63431402
13 changed files with 131 additions and 106 deletions

View File

@@ -19,7 +19,7 @@ var NewRepoUdmSubUser = &RepoUdmSubUser{
s.ne_id, s.eps_flag, s.eps_odb, s.hplmn_odb, s.ard, s.epstpl, s.context_id, s.apn_context, s.static_ip, s.ne_id, s.eps_flag, s.eps_odb, s.hplmn_odb, s.ard, s.epstpl, s.context_id, s.apn_context, s.static_ip,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from u_sub_user s from u_sub_user s
left join sys_tenant t on t.tenant_id = s.tenant_id`, left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -92,7 +92,7 @@ func (r *RepoUdmSubUser) SelectPage(query map[string]any) map[string]any {
if v, ok := query["tenantName"]; ok && v != "" { if v, ok := query["tenantName"]; ok && v != "" {
var tenantID []string var tenantID []string
err := datasource.DefaultDB().Table("sys_tenant"). err := datasource.DefaultDB().Table("sys_tenant").
Where("tenant_name='?'", v).Select("tenant_id").Distinct().Find(&tenantID) Where("tenant_name='?' and status=1", v).Select("tenant_id").Distinct().Find(&tenantID)
if err != nil { if err != nil {
log.Errorf("Find tenant_id err => %v", err) log.Errorf("Find tenant_id err => %v", err)
} }
@@ -181,7 +181,7 @@ func (r *RepoUdmSubUser) SelectList(auth model.UdmSubUser) []model.UdmSubUser {
if auth.TenantName != "" { if auth.TenantName != "" {
var tenantID []string var tenantID []string
err := datasource.DefaultDB().Table("sys_tenant"). err := datasource.DefaultDB().Table("sys_tenant").
Where("tenant_name='?'", auth.TenantName).Cols("tenant_id").Distinct().Find(&tenantID) Where("tenant_name='?' and status=1", auth.TenantName).Cols("tenant_id").Distinct().Find(&tenantID)
if err != nil { if err != nil {
log.Errorf("Find tenant_id err => %v", err) log.Errorf("Find tenant_id err => %v", err)
} }
@@ -504,7 +504,7 @@ func (r *RepoUdmSubUser) SetTenantName(subArr *[]model.UdmSubUser) {
for s := 0; s < len(*subArr); s++ { for s := 0; s < len(*subArr); s++ {
var tenantName []string var tenantName []string
err := datasource.DefaultDB().Table("sys_tenant"). err := datasource.DefaultDB().Table("sys_tenant").
Where("tenancy_type='IMSI' and tenancy_key='?'", (*subArr)[s].Imsi).Cols("tenant_name").Find(&tenantName) Where("tenancy_type='IMSI' and tenancy_key='?' and status=1", (*subArr)[s].Imsi).Cols("tenant_name").Find(&tenantName)
if err != nil { if err != nil {
log.Errorf("Find tenant_name err => %v", err) log.Errorf("Find tenant_name err => %v", err)
continue continue
@@ -519,7 +519,7 @@ func (r *RepoUdmSubUser) SetTenantID(subArr *[]model.UdmSubUser) {
for s := 0; s < len(*subArr); s++ { for s := 0; s < len(*subArr); s++ {
var tenantID []string var tenantID []string
err := datasource.DefaultDB().Table("sys_tenant"). err := datasource.DefaultDB().Table("sys_tenant").
Where("tenancy_type='IMSI' and tenancy_key='?'", (*subArr)[s].Imsi).Cols("parent_id").Distinct().Find(&tenantID) Where("tenancy_type='IMSI' and tenancy_key='?' and status=1", (*subArr)[s].Imsi).Cols("parent_id").Distinct().Find(&tenantID)
if err != nil { if err != nil {
log.Errorf("Find tenant_id err => %v", err) log.Errorf("Find tenant_id err => %v", err)
continue continue

View File

@@ -62,7 +62,7 @@ func (s *PerfKPIController) GoldKPI(c *gin.Context) {
// multi-tenancy, useName->tenantID->rmUID // multi-tenancy, useName->tenantID->rmUID
selectSQL := fmt.Sprintf(`SELECT t.tenancy_key FROM sys_tenant t WHERE t.status='1' AND t.tenancy_type='UPF' AND t.parent_id = selectSQL := fmt.Sprintf(`SELECT t.tenancy_key FROM sys_tenant t WHERE t.status='1' AND t.tenancy_type='UPF' AND t.parent_id =
(SELECT u.tenant_id FROM sys_user u WHERE u.user_name='%s')`, userName) (SELECT u.tenant_id FROM sys_user u WHERE u.user_name='%s' and u.status=1)`, userName)
err := datasource.DefaultDB().Raw(selectSQL).Scan(&rmUID).Error err := datasource.DefaultDB().Raw(selectSQL).Scan(&rmUID).Error
if err != nil { if err != nil {
c.JSON(200, result.ErrMsgFmt("DB Get error: %v", err)) c.JSON(200, result.ErrMsgFmt("DB Get error: %v", err))

View File

@@ -23,6 +23,8 @@ type CDREventSMSCQuery struct {
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码 CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
StartTime string `json:"startTime" form:"startTime"` StartTime string `json:"startTime" form:"startTime"`
EndTime string `json:"endTime" form:"endTime"` EndTime string `json:"endTime" form:"endTime"`
TenantName string `json:"tenantName" form:"tenantName"`
UserName string `json:"userName" form:"userName"`
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段 SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序asc desc SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序asc desc
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"` PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`

View File

@@ -18,7 +18,7 @@ var NewCDREventIMSImpl = &CDREventIMSImpl{
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at, selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from cdr_event_ims c from cdr_event_ims c
left join sys_tenant t on t.tenant_id = c.tenant_id`, left join sys_tenant t on t.tenant_id = c.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -114,7 +114,7 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a
if querys.TenantName != "" { if querys.TenantName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant"). _, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID) Where("tenant_name=? and status=1", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }
@@ -126,7 +126,7 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a
} else if querys.UserName != "" { } else if querys.UserName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_user"). _, err := dborm.DefaultDB().Table("sys_user").
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID) Where("user_name=? and status=1", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }

View File

@@ -18,8 +18,7 @@ var NewCDREventSMFImpl = &CDREventSMFImpl{
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at, selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from cdr_event_smf c from cdr_event_smf c
left join sys_tenant t on t.tenant_id = c.tenant_id`, left join sys_tenant t on t.tenant_id = c.tenant_id and t.status = 1`,
// selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -31,20 +30,6 @@ var NewCDREventSMFImpl = &CDREventSMFImpl{
"created_at": "CreatedAt", "created_at": "CreatedAt",
"tenant_id": "TenantID", "tenant_id": "TenantID",
"tenant_name": "TenantName", "tenant_name": "TenantName",
// "id": "ID",
// "ne_type": "NeType",
// "ne_name": "NeName",
// "rm_uid": "RmUID",
// "timestamp": "Timestamp",
// "record_type": "RecordType",
// "charging_id": "ChargingID",
// "subscriber_id": "SubscriberID",
// "duration": "Duration",
// "data_volume_uplink": "DataVolumeUplink",
// "data_volume_downlink": "DataVolumeDownlink",
// "data_total_volume": "DataTotalVolume",
// "pdu_address": "PDUAddress",
// "created_at": "CreatedAt",
}, },
} }
@@ -111,7 +96,7 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
if querys.TenantName != "" { if querys.TenantName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant"). _, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID) Where("tenant_name=? and status=1", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }
@@ -123,7 +108,7 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
} else if querys.UserName != "" { } else if querys.UserName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_user"). _, err := dborm.DefaultDB().Table("sys_user").
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID) Where("user_name=? and status=1", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }

View File

@@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"strings" "strings"
dborm "be.ems/lib/core/datasource"
"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"
@@ -13,16 +15,21 @@ import (
// 实例化数据层 CDREventSMSCImpl 结构体 // 实例化数据层 CDREventSMSCImpl 结构体
var NewCDREventSMSCImpl = &CDREventSMSCImpl{ var NewCDREventSMSCImpl = &CDREventSMSCImpl{
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_smsc`, selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at,
t.tenant_id, t.tenant_name
from cdr_event_smsc c
left join sys_tenant t on t.tenant_id = c.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
"ne_type": "NeType", "ne_type": "NeType",
"ne_name": "NeName", "ne_name": "NeName",
"rm_uid": "RmUID", "rm_uid": "RmUID",
"timestamp": "Timestamp", "timestamp": "Timestamp",
"cdr_json": "CDRJSONStr", "cdr_json": "CDRJSONStr",
"created_at": "CreatedAt", "created_at": "CreatedAt",
"tenant_id": "TenantID",
"tenant_name": "TenantName",
}, },
} }
@@ -96,6 +103,33 @@ func (r *CDREventSMSCImpl) SelectPage(querys model.CDREventSMSCQuery) map[string
conditions = append(conditions, fmt.Sprintf("( %s )", strings.Join(queryStrArr, " OR "))) conditions = append(conditions, fmt.Sprintf("( %s )", strings.Join(queryStrArr, " OR ")))
} }
// for multi-tenancy solution
if querys.TenantName != "" {
var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=? and status=1", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err)
}
log.Tracef("userName=%v, tenantID=%v", querys.TenantName, tenantID)
if tenantID != "" {
conditions = append(conditions, "c.tenant_id = ?")
params = append(params, tenantID)
}
} else if querys.UserName != "" {
var tenantID string
_, err := dborm.DefaultDB().Table("sys_user").
Where("user_name=? and status=1", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err)
}
log.Tracef("userName=%v, tenantID=%v", querys.UserName, tenantID)
if tenantID != "" {
conditions = append(conditions, "c.tenant_id = ?")
params = append(params, tenantID)
}
}
// 构建查询条件语句 // 构建查询条件语句
whereSql := "" whereSql := ""
if len(conditions) > 0 { if len(conditions) > 0 {

View File

@@ -21,7 +21,7 @@ var NewUDMSub = &UDMSubUser{
s.cag, s.cag,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from u_sub_user s from u_sub_user s
left join sys_tenant t on t.tenant_id = s.tenant_id`, left join sys_tenant t on t.tenant_id = s.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -109,7 +109,7 @@ func (r *UDMSubUser) SelectPage(query map[string]any) map[string]any {
if v, ok := query["tenantName"]; ok && v != "" { if v, ok := query["tenantName"]; ok && v != "" {
var tenantID []string var tenantID []string
err := dborm.DefaultDB().Table("sys_tenant"). err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", v).Cols("tenant_id").Distinct().Find(&tenantID) Where("tenant_name=? and status=1", v).Cols("tenant_id").Distinct().Find(&tenantID)
if err != nil { if err != nil {
log.Errorf("Find tenant_id from sys_user err => %v", err) log.Errorf("Find tenant_id from sys_user err => %v", err)
} }

View File

@@ -18,7 +18,7 @@ var NewUEEventAMFImpl = &UEEventAMFImpl{
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at, selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from ue_event_amf e from ue_event_amf e
left join sys_tenant t on t.tenant_id = e.tenant_id`, left join sys_tenant t on t.tenant_id = e.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -101,7 +101,7 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
if querys.TenantName != "" { if querys.TenantName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant"). _, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID) Where("tenant_name=? and status=1", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }
@@ -113,7 +113,7 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
} else if querys.UserName != "" { } else if querys.UserName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_user"). _, err := dborm.DefaultDB().Table("sys_user").
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID) Where("user_name=? and status=1", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }
@@ -123,6 +123,7 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
params = append(params, tenantID) params = append(params, tenantID)
} }
} }
// 构建查询条件语句 // 构建查询条件语句
whereSql := "" whereSql := ""
if len(conditions) > 0 { if len(conditions) > 0 {

View File

@@ -18,7 +18,7 @@ var NewUEEventMMEImpl = &UEEventMMEImpl{
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at, selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at,
t.tenant_id, t.tenant_name t.tenant_id, t.tenant_name
from ue_event_mme e from ue_event_mme e
left join sys_tenant t on t.tenant_id = e.tenant_id`, left join sys_tenant t on t.tenant_id = e.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"id": "ID", "id": "ID",
@@ -101,7 +101,7 @@ func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any
if querys.TenantName != "" { if querys.TenantName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant"). _, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID) Where("tenant_name=? and status=1", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }
@@ -113,7 +113,7 @@ func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any
} else if querys.UserName != "" { } else if querys.UserName != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_user"). _, err := dborm.DefaultDB().Table("sys_user").
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID) Where("user_name=? and status=1", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("Get tenant_id from sys_user err => %v", err) log.Errorf("Get tenant_id from sys_user err => %v", err)
} }

View File

@@ -4,7 +4,7 @@ package model
type SysTenant struct { type SysTenant struct {
// 租户ID // 租户ID
TenantID string `json:"tenantId"` TenantID string `json:"tenantId"`
// 父部门ID // 父租户ID
ParentID string `json:"parentId" binding:"required"` ParentID string `json:"parentId" binding:"required"`
// 祖级列表 // 祖级列表
Ancestors string `json:"ancestors"` Ancestors string `json:"ancestors"`
@@ -16,7 +16,7 @@ type SysTenant struct {
TenancyType string `json:"tenancyType"` TenancyType string `json:"tenancyType"`
// tenancy key: key of sd-sst, apn, imsi, msisdn // tenancy key: key of sd-sst, apn, imsi, msisdn
TenancyKey string `json:"tenancyKey"` TenancyKey string `json:"tenancyKey"`
// 部门状态0正常 1停用 // 租户状态0正常 1停用
Status string `json:"status"` Status string `json:"status"`
// 删除标志0代表存在 1代表删除 // 删除标志0代表存在 1代表删除
DelFlag string `json:"delFlag"` DelFlag string `json:"delFlag"`
@@ -31,9 +31,9 @@ type SysTenant struct {
// ====== 非数据库字段属性 ====== // ====== 非数据库字段属性 ======
// 子部门列表 // 子租户列表
Children []SysTenant `json:"children,omitempty"` Children []SysTenant `json:"children,omitempty"`
// 父部门名称 // 父租户名称
ParentName string `json:"parentName,omitempty"` ParentName string `json:"parentName,omitempty"`
} }

View File

@@ -20,7 +20,7 @@ var NewSysLogOperateImpl = &SysLogOperateImpl{
l.oper_url, l.oper_ip, l.oper_location, l.oper_param, l.oper_msg, l.status, l.oper_time, l.cost_time, l.oper_url, l.oper_ip, l.oper_location, l.oper_param, l.oper_msg, l.status, l.oper_time, l.cost_time,
t.tenant_name t.tenant_name
from sys_log_operate l from sys_log_operate l
left join sys_tenant t on t.tenant_id = l.tenant_id`, left join sys_tenant t on t.tenant_id = l.tenant_id and t.status = 1`,
resultMap: map[string]string{ resultMap: map[string]string{
"oper_id": "OperID", "oper_id": "OperID",
@@ -108,7 +108,7 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataSc
if v, ok := query["tenantName"]; ok && v != "" { if v, ok := query["tenantName"]; ok && v != "" {
var tenantID string var tenantID string
_, err := dborm.DefaultDB().Table("sys_tenant"). _, err := dborm.DefaultDB().Table("sys_tenant").
Where("tenant_name=?", v).Cols("tenant_id").Distinct().Get(&tenantID) Where("tenant_name=? and status=1", v).Cols("tenant_id").Distinct().Get(&tenantID)
if err != nil { if err != nil {
log.Errorf("get tenant_id err => %v", err) log.Errorf("get tenant_id err => %v", err)
} }
@@ -119,7 +119,7 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataSc
log.Tracef("tenantName=%v, tenantID=%v", v, tenantID) log.Tracef("tenantName=%v, tenantID=%v", v, tenantID)
} }
// 构建查询条件语句 // 构建查询条件语句, left join sys_tenant to support multi-tenancy
selectSql := r.selectSql selectSql := r.selectSql
totalSql := "select count(oper_id) as 'total' from sys_log_operate l" totalSql := "select count(oper_id) as 'total' from sys_log_operate l"
whereSql := "" whereSql := ""
@@ -128,15 +128,17 @@ func (r *SysLogOperateImpl) SelectSysLogOperatePage(query map[string]any, dataSc
whereSql += dataScopeSQL whereSql += dataScopeSQL
} else if dataScopeSQL != "" { } else if dataScopeSQL != "" {
totalSql = `select count(o.oper_id) as 'total' totalSql = `select count(o.oper_id) as 'total'
from sys_log_operate o from sys_log_operate o
left join sys_user u on u.user_name = o.oper_name left join sys_user u on u.user_name = o.oper_name
left join sys_dept d on u.dept_id = d.dept_id` left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id and t.status = 1 `
selectSql = `select selectSql = `select
o.oper_id, o.title, o.business_type, o.method, o.request_method, o.operator_type, o.oper_name, o.dept_name, o.oper_id, o.title, o.business_type, o.method, o.request_method, o.operator_type, o.oper_name, o.dept_name,
o.oper_url, o.oper_ip, o.oper_location, o.oper_param, o.oper_msg, o.status, o.oper_time, o.cost_time o.oper_url, o.oper_ip, o.oper_location, o.oper_param, o.oper_msg, o.status, o.oper_time, o.cost_time
from sys_log_operate o from sys_log_operate o
left join sys_user u on u.user_name = o.oper_name left join sys_user u on u.user_name = o.oper_name
left join sys_dept d on u.dept_id = d.dept_id` left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id and t.status = 1 `
whereSql += " where 1=1" + dataScopeSQL whereSql += " where 1=1" + dataScopeSQL
} }

View File

@@ -15,9 +15,9 @@ import (
// 实例化数据层 SysTenantImpl 结构体 // 实例化数据层 SysTenantImpl 结构体
var NewSysTenantImpl = &SysTenantImpl{ var NewSysTenantImpl = &SysTenantImpl{
selectSql: `select selectSql: `select
t.tenant_id, t.parent_id, t.ancestors, t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status, t.tenant_id, t.parent_id, t.ancestors, t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status,
t.del_flag, t.create_by, t.create_time t.del_flag, t.create_by, t.create_time
from sys_tenant t`, from sys_tenant t `,
resultMap: map[string]string{ resultMap: map[string]string{
"tenant_id": "TenantID", "tenant_id": "TenantID",
@@ -103,17 +103,17 @@ func (r *SysTenantImpl) SelectTenantList(sysTenant model.SysTenant, dataScopeSQL
// SelectTenantListByRoleId 根据角色ID查询租户树信息 // SelectTenantListByRoleId 根据角色ID查询租户树信息
func (r *SysTenantImpl) SelectTenantListByRoleId(roleId string, tenantCheckStrictly bool) []string { func (r *SysTenantImpl) SelectTenantListByRoleId(roleId string, tenantCheckStrictly bool) []string {
querySql := `select t.tenant_id as 'str' from sys_tenant d querySql := `select t.tenant_id as 'str' from sys_tenant t
left join sys_role_tenant rd on t.tenant_id = rt.tenant_id left join sys_role_tenant rt on t.tenant_id = rt.tenant_id
where rt.role_id = ? ` where rt.role_id = ? and t.status = 1 `
var params []any var params []any
params = append(params, roleId) params = append(params, roleId)
// 展开 // 展开
if tenantCheckStrictly { if tenantCheckStrictly {
querySql += ` and t.tenant_id not in querySql += ` and t.tenant_id not in
(select t.parent_id from sys_tenant d (select t.parent_id from sys_tenant t
inner join sys_role_tenant rd on t.tenant_id = rt.tenant_id inner join sys_role_tenant rt on t.tenant_id = rt.tenant_id
and rt.role_id = ?) ` and rt.role_id = ?) `
params = append(params, roleId) params = append(params, roleId)
} }
querySql += "order by t.parent_id, t.order_num" querySql += "order by t.parent_id, t.order_num"
@@ -138,9 +138,9 @@ func (r *SysTenantImpl) SelectTenantListByRoleId(roleId string, tenantCheckStric
// SelectTenantById 根据租户ID查询信息 // SelectTenantById 根据租户ID查询信息
func (r *SysTenantImpl) SelectTenantById(tenantId string) model.SysTenant { func (r *SysTenantImpl) SelectTenantById(tenantId string) model.SysTenant {
querySql := `select t.tenant_id, t.parent_id, t.ancestors, querySql := `select t.tenant_id, t.parent_id, t.ancestors,
t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status, t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status,
(select tenant_name from sys_tenant where tenant_id = t.parent_id) parent_name (select tenant_name from sys_tenant where tenant_id = t.parent_id and status = 1) parent_name
from sys_tenant t where t.tenant_id = ?` from sys_tenant t where t.tenant_id = ? and t.status = 1 `
results, err := datasource.RawDB("", querySql, []any{tenantId}) results, err := datasource.RawDB("", querySql, []any{tenantId})
if err != nil { if err != nil {
logger.Errorf("query err => %v", err) logger.Errorf("query err => %v", err)

View File

@@ -16,15 +16,15 @@ import (
// 实例化数据层 SysUserImpl 结构体 // 实例化数据层 SysUserImpl 结构体
var NewSysUserImpl = &SysUserImpl{ var NewSysUserImpl = &SysUserImpl{
selectSql: `select selectSql: `select
u.user_id, u.dept_id, u.tenant_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.user_id, u.dept_id, u.tenant_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
t.tenant_id, t.parent_id, t.ancestors, t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status as tenant_status, t.tenant_id, t.parent_id, t.ancestors, t.tenant_name, t.order_num, t.tenancy_type, t.tenancy_key, t.status as tenant_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id left join sys_tenant t on u.tenant_id = t.tenant_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id`, left join sys_role r on r.role_id = ur.role_id `,
sysUserMap: map[string]string{ sysUserMap: map[string]string{
"user_id": "UserID", "user_id": "UserID",
@@ -146,11 +146,11 @@ func (r *SysUserImpl) convertResultRows(rows []map[string]any) []model.SysUser {
// SelectUserPage 根据条件分页查询用户列表 // SelectUserPage 根据条件分页查询用户列表
func (r *SysUserImpl) SelectUserPage(query map[string]any, dataScopeSQL string) map[string]any { func (r *SysUserImpl) SelectUserPage(query map[string]any, dataScopeSQL string) map[string]any {
selectUserTotalSql := `select count(distinct u.user_id) as 'total' selectUserTotalSql := `select count(distinct u.user_id) as 'total'
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id left join sys_tenant t on u.tenant_id = t.tenant_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id` left join sys_role r on r.role_id = ur.role_id `
// 查询条件拼接 // 查询条件拼接
var conditions []string var conditions []string
@@ -269,11 +269,11 @@ func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL str
params = append(params, roleId) params = append(params, roleId)
} else { } else {
conditions = append(conditions, `(r.role_id != ? or r.role_id IS NULL) conditions = append(conditions, `(r.role_id != ? or r.role_id IS NULL)
and u.user_id not in ( and u.user_id not in (
select u.user_id from sys_user u select u.user_id from sys_user u
inner join sys_user_role ur on u.user_id = ur.user_id inner join sys_user_role ur on u.user_id = ur.user_id
and ur.role_id = ? and ur.role_id = ?
)`) )`)
params = append(params, roleId) params = append(params, roleId)
params = append(params, roleId) params = append(params, roleId)
} }
@@ -295,10 +295,10 @@ func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL str
// 查询数量 长度为0直接返回 // 查询数量 长度为0直接返回
totalSql := `select count(distinct u.user_id) as 'total' from sys_user u totalSql := `select count(distinct u.user_id) as 'total' from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id left join sys_tenant t on u.tenant_id = t.tenant_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id` left join sys_role r on r.role_id = ur.role_id `
totalRows, err := datasource.RawDB("", totalSql+whereSql+dataScopeSQL, params) totalRows, err := datasource.RawDB("", totalSql+whereSql+dataScopeSQL, params)
if err != nil { if err != nil {
logger.Errorf("total err => %v", err) logger.Errorf("total err => %v", err)
@@ -319,13 +319,13 @@ func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL str
// 查询数据 // 查询数据
querySql := `select distinct querySql := `select distinct
u.user_id, u.dept_id, u.tenant_id, u.user_name, u.nick_name, u.email, u.user_id, u.dept_id, u.tenant_id, u.user_name, u.nick_name, u.email,
u.phonenumber, u.status, u.create_time, d.dept_name, t.tenant_name u.phonenumber, u.status, u.create_time, d.dept_name, t.tenant_name
from sys_user u from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id left join sys_tenant t on u.tenant_id = t.tenant_id
left join sys_user_role ur on u.user_id = ur.user_id left join sys_user_role ur on u.user_id = ur.user_id
left join sys_role r on r.role_id = ur.role_id` left join sys_role r on r.role_id = ur.role_id`
querySql = querySql + whereSql + dataScopeSQL + pageSql querySql = querySql + whereSql + dataScopeSQL + pageSql
results, err := datasource.RawDB("", querySql, params) results, err := datasource.RawDB("", querySql, params)
if err != nil { if err != nil {
@@ -340,12 +340,13 @@ func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL str
// SelectUserList 根据条件查询用户列表 // SelectUserList 根据条件查询用户列表
func (r *SysUserImpl) SelectUserList(sysUser model.SysUser, dataScopeSQL string) []model.SysUser { func (r *SysUserImpl) SelectUserList(sysUser model.SysUser, dataScopeSQL string) []model.SysUser {
selectUserSql := `select selectUserSql := `select
u.user_id, u.dept_id, u.tenant_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.user_id, u.dept_id, u.tenant_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber,
d.dept_name, d.leader u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
t.tenant_name, t.tenancy_type, t.tenancy_key d.dept_name, d.leader
from sys_user u t.tenant_name, t.tenancy_type, t.tenancy_key
left join sys_dept d on u.dept_id = d.dept_id from sys_user u
left join sys_tenant t on u.tenant_id = t.tenant_id` left join sys_dept d on u.dept_id = d.dept_id
left join sys_tenant t on u.tenant_id = t.tenant_id and t.status = 1`
// 查询条件拼接 // 查询条件拼接
var conditions []string var conditions []string