sync: 同步 v1.0.4 并脱敏配置与镜像
This commit is contained in:
@@ -3,9 +3,24 @@ package model
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
type AgentDeptListParam struct {
|
||||
DeptName string `json:"deptName"`
|
||||
Status string `json:"status"`
|
||||
DeptType *int `json:"deptType"`
|
||||
ExportColumnsJson string `json:"exportColumnsJson"`
|
||||
Page int `json:"page" d:"1" v:"min:1|max:100000000" `
|
||||
PageSize int `json:"pageSize" d:"20" v:"min:1|max:2000" `
|
||||
DeptName string `json:"deptName"`
|
||||
Status string `json:"status"`
|
||||
DeptType *int `json:"deptType"`
|
||||
}
|
||||
|
||||
func (in *AgentDeptListParam) NormalizePagination() {
|
||||
if in.Page <= 0 {
|
||||
in.Page = 1
|
||||
}
|
||||
if in.PageSize <= 0 {
|
||||
in.PageSize = 20
|
||||
}
|
||||
if in.PageSize > 2000 {
|
||||
in.PageSize = 2000
|
||||
}
|
||||
}
|
||||
|
||||
type AgentDeptModel struct {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package model
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestAgentDeptPaginationDefaultsAndBounds(t *testing.T) {
|
||||
for _, test := range []struct{ page, size, wantPage, wantSize int }{
|
||||
{0, 0, 1, 20}, {-1, -10, 1, 20}, {3, 50, 3, 50}, {1, 5000, 1, 2000},
|
||||
} {
|
||||
params := AgentDeptListParam{Page: test.page, PageSize: test.size}
|
||||
params.NormalizePagination()
|
||||
if params.Page != test.wantPage || params.PageSize != test.wantSize {
|
||||
t.Fatalf("pagination = %d/%d, want %d/%d", params.Page, params.PageSize, test.wantPage, test.wantSize)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,18 @@ package model
|
||||
import "github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
type AgentRoleSyncMessage struct {
|
||||
TenantId string `json:"tenantId"`
|
||||
SourceRoleId int64 `json:"sourceRoleId"`
|
||||
SourceDeptId int64 `json:"sourceDeptId"`
|
||||
ActorId int64 `json:"actorId"`
|
||||
RetryCount int `json:"retryCount"`
|
||||
TemplateRole bool `json:"templateRole,omitempty"`
|
||||
Superseded bool `json:"superseded,omitempty"`
|
||||
TaskId string `json:"taskId,omitempty"`
|
||||
TotalCount int `json:"totalCount,omitempty"`
|
||||
SuccessCount int `json:"successCount,omitempty"`
|
||||
FailedCount int `json:"failedCount,omitempty"`
|
||||
TenantId string `json:"tenantId"`
|
||||
SourceRoleId int64 `json:"sourceRoleId"`
|
||||
SourceDeptId int64 `json:"sourceDeptId"`
|
||||
ActorId int64 `json:"actorId"`
|
||||
RetryCount int `json:"retryCount"`
|
||||
ChildDeptIds []int64 `json:"childDeptIds,omitempty"`
|
||||
}
|
||||
|
||||
type AgentRoleSyncDeadLetterMessage struct {
|
||||
|
||||
@@ -8,13 +8,14 @@ import (
|
||||
|
||||
type AgentUserListParam struct {
|
||||
request.PageInfo
|
||||
DeptId int64 `json:"deptId"`
|
||||
UserName string `json:"userName"`
|
||||
NickName string `json:"nickName"`
|
||||
Email string `json:"email"`
|
||||
Phonenumber string `json:"phonenumber"`
|
||||
Status string `json:"status"`
|
||||
CreatedAt []string `json:"createdAt"`
|
||||
ExportColumnsJson string `json:"exportColumnsJson"`
|
||||
DeptId int64 `json:"deptId"`
|
||||
UserName string `json:"userName"`
|
||||
NickName string `json:"nickName"`
|
||||
Email string `json:"email"`
|
||||
Phonenumber string `json:"phonenumber"`
|
||||
Status string `json:"status"`
|
||||
CreatedAt []string `json:"createdAt"`
|
||||
}
|
||||
|
||||
type AgentUserListModel struct {
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
)
|
||||
|
||||
type BatchCardListParam struct {
|
||||
DetailStatus *int `json:"detailStatus" v:"in:0,1,2,3,4,5#明细状态不合法" dc:"明细状态"`
|
||||
request.PageInfo
|
||||
BatchNo string `json:"batchNo" v:"required#批次号不能为空" dc:"批次编号"`
|
||||
BatchType *int `json:"batchType" dc:"批次类型"`
|
||||
@@ -20,6 +21,7 @@ func (in *BatchCardListParam) Filter(ctx context.Context) (err error) {
|
||||
}
|
||||
|
||||
type BatchCardListModel struct {
|
||||
ErrorReason string `json:"errorReason" dc:"失败或待核查原因"`
|
||||
allocationunits.Fields
|
||||
RowNo int `json:"rowNo" dc:"行号"`
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
|
||||
@@ -2,10 +2,10 @@ package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/allocationunits"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/library/xgorm/hook"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/request"
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
@@ -37,7 +37,10 @@ type BatchExecutionLogListModel struct {
|
||||
BatchType int `json:"batchType" dc:"批次类型"`
|
||||
SourceType *int `json:"sourceType" dc:"来源方式 枚举"`
|
||||
BatchAsyncStatus int `json:"batchAsyncStatus" dc:"异步处理状态"`
|
||||
RestartPhase string `json:"restartPhase" orm:"-" dc:"重启阶段 waiting_resume=等待复机"`
|
||||
RestartResumeAt string `json:"restartResumeAt" orm:"-" dc:"计划复机时间"`
|
||||
TotalCount int `json:"totalCount" dc:"总数量"`
|
||||
UnknownCount int `json:"unknownCount" orm:"-" dc:"待核查数量"`
|
||||
RunResult int `json:"runResult" dc:"运行结果"`
|
||||
FailReason string `json:"failReason" dc:"失败原因"`
|
||||
StartTime *gtime.Time `json:"startTime" dc:"开始时间"`
|
||||
@@ -56,15 +59,36 @@ func (in *BatchExecutionLogDetailParam) Filter(ctx context.Context) (err error)
|
||||
return
|
||||
}
|
||||
|
||||
// BatchExecutionLogSyncReviewParam 手动同步待核查批次的上游执行结果。
|
||||
// 只按既有受理号(jobId)重查一次,不重发办理。
|
||||
type BatchExecutionLogSyncReviewParam struct {
|
||||
BatchNo string `json:"batchNo" v:"required#批次号不能为空" dc:"批次编号"`
|
||||
Reason string `json:"reason" dc:"同步原因"`
|
||||
}
|
||||
|
||||
func (in *BatchExecutionLogSyncReviewParam) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BatchExecutionLogSyncReviewModel struct {
|
||||
BatchNo string `json:"batchNo" dc:"批次编号"`
|
||||
BatchType int `json:"batchType" dc:"批次类型"`
|
||||
BatchAsyncStatus int `json:"batchAsyncStatus" dc:"异步处理状态"`
|
||||
UnknownCount int `json:"unknownCount" dc:"待核查数量"`
|
||||
Queued bool `json:"queued" dc:"是否已提交同步"`
|
||||
}
|
||||
|
||||
type BatchExecutionLogFileModel struct {
|
||||
OssId int64 `json:"ossId" dc:"OSS文件ID"`
|
||||
Url string `json:"url" dc:"文件URL"`
|
||||
}
|
||||
|
||||
type BatchExecutionLogResultFileModel struct {
|
||||
ExportTaskId int64 `json:"exportTaskId,omitempty" dc:"导出任务ID"`
|
||||
DownloadId int64 `json:"downloadId" dc:"下载任务ID"`
|
||||
OssId int64 `json:"ossId" dc:"OSS文件ID"`
|
||||
Url string `json:"url" dc:"文件URL"`
|
||||
OriginalName string `json:"originalName" dc:"原始下载文件名"`
|
||||
DownloadStatus int `json:"downloadStatus" dc:"下载状态"`
|
||||
}
|
||||
|
||||
@@ -77,9 +101,12 @@ type BatchExecutionLogDetailModel struct {
|
||||
BatchType int `json:"batchType" dc:"批次类型"`
|
||||
SourceType *int `json:"sourceType" dc:"来源方式 枚举"`
|
||||
BatchAsyncStatus int `json:"batchAsyncStatus" dc:"异步处理状态 0=已创建 1=待处理 2=处理中 3=成功 4=失败 5=部分成功"`
|
||||
RestartPhase string `json:"restartPhase" orm:"-" dc:"重启阶段 waiting_resume=等待复机"`
|
||||
RestartResumeAt string `json:"restartResumeAt" orm:"-" dc:"计划复机时间"`
|
||||
RunResult int `json:"runResult" dc:"运行结果"`
|
||||
FailReason string `json:"failReason" dc:"失败原因"`
|
||||
TotalCount int `json:"totalCount" dc:"总数量"`
|
||||
UnknownCount int `json:"unknownCount" dc:"待核查数量"`
|
||||
StartTime *gtime.Time `json:"startTime" dc:"开始时间"`
|
||||
EndTime *gtime.Time `json:"endTime" dc:"结束时间"`
|
||||
SourceFile *BatchExecutionLogFileModel `json:"sourceFile" dc:"源文件"`
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/request"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
func TestBatchExecutionLogSourceTypeValidation(t *testing.T) {
|
||||
page := request.PageInfo{Page: 1, PageSize: 20}
|
||||
if err := g.Validator().Data(BatchExecutionLogListParam{PageInfo: page}).Run(context.Background()); err != nil {
|
||||
t.Fatalf("omitted sourceType: %v", err)
|
||||
}
|
||||
for _, value := range []int{-1, 0, 1, 2, 3, 4, 5} {
|
||||
err := g.Validator().Data(BatchExecutionLogListParam{PageInfo: page, SourceType: &value}).Run(context.Background())
|
||||
valid := value >= 0 && value <= 4
|
||||
if (err == nil) != valid {
|
||||
t.Fatalf("sourceType=%d: valid=%t err=%v", value, valid, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBatchExecutionLogDetailModelOmitsItemCounts(t *testing.T) {
|
||||
payload, err := json.Marshal(BatchExecutionLogDetailModel{
|
||||
TotalCount: 7,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("marshal summary model: %v", err)
|
||||
}
|
||||
|
||||
var fields map[string]any
|
||||
if err := json.Unmarshal(payload, &fields); err != nil {
|
||||
t.Fatalf("decode summary model: %v", err)
|
||||
}
|
||||
|
||||
if got := fields["totalCount"]; got != float64(7) {
|
||||
t.Fatalf("totalCount = %v, want 7", got)
|
||||
}
|
||||
for _, field := range []string{"validCount", "successCount", "failCount"} {
|
||||
if _, ok := fields[field]; ok {
|
||||
t.Fatalf("summary response still contains %q", field)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
@@ -208,6 +208,7 @@ type BatchMainListModel struct {
|
||||
// BatchMainSuccessListParam 获取指定类型成功批次列表
|
||||
type BatchMainSuccessListParam struct {
|
||||
request.PageInfo
|
||||
ChanKey string `json:"chanKey" dc:"上游渠道编码"`
|
||||
BatchType int `json:"batchType" dc:"批次类型(不传则查询所有成功批次)"`
|
||||
BatchNo string `json:"batchNo" dc:"批次编号"`
|
||||
Time []*gtime.Time `json:"time" dc:"批次执行时间"`
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
@@ -9,9 +9,9 @@ import "github.com/gogf/gf/v2/frame/g"
|
||||
|
||||
// 上下文结构
|
||||
type Context struct {
|
||||
User *Identity // 上下文用户信息
|
||||
IsWebSocket bool // 是否是WebSocket
|
||||
Data g.Map // 自定KV变量,业务模块根据需要设置,不固定
|
||||
User *Identity // 上下文用户信息
|
||||
IsWebSocket bool // 是否是WebSocket
|
||||
Data g.Map // 自定KV变量,业务模块根据需要设置,不固定
|
||||
}
|
||||
|
||||
type Role struct {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package do
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// SysPermissionRevision is the golang structure of table sys_permission_revision for DAO operations like Where/Data.
|
||||
type SysPermissionRevision struct {
|
||||
g.Meta `orm:"table:sys_permission_revision, do:true"`
|
||||
Id any //
|
||||
Revision any //
|
||||
UpdatedAt *gtime.Time //
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package do
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// SysRoleSyncTask is the golang structure of table sys_role_sync_task for DAO operations like Where/Data.
|
||||
type SysRoleSyncTask struct {
|
||||
g.Meta `orm:"table:sys_role_sync_task, do:true"`
|
||||
TaskId any //
|
||||
TenantId any //
|
||||
SourceRoleId any //
|
||||
SourceDeptId any //
|
||||
ActorId any //
|
||||
Status any //
|
||||
Attempts any //
|
||||
NextAttemptAt any //
|
||||
LeaseUntil any //
|
||||
LeaseToken any //
|
||||
Payload any //
|
||||
LastError any //
|
||||
TotalCount any //
|
||||
SuccessCount any //
|
||||
FailedCount any //
|
||||
CreatedAt *gtime.Time //
|
||||
UpdatedAt *gtime.Time //
|
||||
}
|
||||
@@ -11,30 +11,30 @@ import (
|
||||
|
||||
// SysUser is the golang structure of table sys_user for DAO operations like Where/Data.
|
||||
type SysUser struct {
|
||||
g.Meta `orm:"table:sys_user, do:true"`
|
||||
UserId any // 用户ID
|
||||
TenantId any // 租户编号
|
||||
DeptId any // 部门ID
|
||||
UserName any // 用户账号
|
||||
NickName any // 用户昵称
|
||||
UserType any // 用户类型(sys_user系统用户)
|
||||
Email any // 用户邮箱
|
||||
Phonenumber any // 手机号码
|
||||
Sex any // 用户性别(0男 1女 2未知)
|
||||
Avatar any // 头像地址
|
||||
Salt any // 加密盐
|
||||
Password any // 密码
|
||||
IsInitPassword any // 当前密码是否未由用户本人设置(1=初始或管理员临时密码 0=用户已自设)
|
||||
Status any // 帐号状态(0正常 1停用)
|
||||
LoginIp any // 最后登录IP
|
||||
LoginDate *gtime.Time // 最后登录时间
|
||||
MfaEnabled any // 是否开启邮箱MFA 0否 1是
|
||||
CreatedDept any // 创建部门
|
||||
CreatedBy any // 创建者
|
||||
CreatedAt *gtime.Time // 创建时间
|
||||
UpdatedBy any // 更新者
|
||||
UpdatedAt *gtime.Time // 更新时间
|
||||
DeletedBy any // 删除人
|
||||
DeletedAt *gtime.Time // 删除时间
|
||||
Remark any // 备注
|
||||
g.Meta `orm:"table:sys_user, do:true"`
|
||||
UserId any // 用户ID
|
||||
TenantId any // 租户编号
|
||||
DeptId any // 部门ID
|
||||
UserName any // 用户账号
|
||||
NickName any // 用户昵称
|
||||
UserType any // 用户类型(sys_user系统用户)
|
||||
Email any // 用户邮箱
|
||||
Phonenumber any // 手机号码
|
||||
Sex any // 用户性别(0男 1女 2未知)
|
||||
Avatar any // 头像地址
|
||||
Salt any // 加密盐
|
||||
Password any // 密码
|
||||
IsInitPassword any // 当前密码是否未由用户本人设置(1=初始或管理员临时密码 0=用户已自设)
|
||||
Status any // 帐号状态(0正常 1停用)
|
||||
LoginIp any // 最后登录IP
|
||||
LoginDate *gtime.Time // 最后登录时间
|
||||
MfaEnabled any // 是否开启邮箱MFA 0否 1是
|
||||
CreatedDept any // 创建部门
|
||||
CreatedBy any // 创建者
|
||||
CreatedAt *gtime.Time // 创建时间
|
||||
UpdatedBy any // 更新者
|
||||
UpdatedAt *gtime.Time // 更新时间
|
||||
DeletedBy any // 删除人
|
||||
DeletedAt *gtime.Time // 删除时间
|
||||
Remark any // 备注
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-admin-svr/internal/model/request"
|
||||
)
|
||||
|
||||
// ExportIdentitySnapshot 提交导出时的用户身份与角色范围快照。
|
||||
// 异步执行时用它还原 ctx,保证 FilterAuth 仍按提交人的数据范围过滤。
|
||||
type ExportIdentitySnapshot struct {
|
||||
UserId int64 `json:"userId"`
|
||||
DeptId int64 `json:"deptId"`
|
||||
TenantId string `json:"tenantId"`
|
||||
Roles []Role `json:"roles"`
|
||||
AccessCodeList []string `json:"accessCodeList"`
|
||||
CurrentRoleId string `json:"currentRoleId"`
|
||||
CurrentRoleDataScope string `json:"currentRoleDataScope"`
|
||||
}
|
||||
|
||||
// DownloadCenterListParam 下载中心列表查询
|
||||
type DownloadCenterListParam struct {
|
||||
request.PageInfo
|
||||
BizKey string `json:"bizKey" dc:"业务标识"`
|
||||
Status string `json:"status" dc:"状态,多个用逗号分隔 0排队 2生成中 1已完成 3失败"`
|
||||
CreatedAt []*gtime.Time `json:"createdAt" dc:"创建时间区间"`
|
||||
}
|
||||
|
||||
// DownloadCenterListModel 下载中心列表项
|
||||
type DownloadCenterListModel struct {
|
||||
Id int64 `json:"id" dc:"主键ID"`
|
||||
TaskNo string `json:"taskNo" dc:"任务编号"`
|
||||
BizKey string `json:"bizKey" dc:"业务标识"`
|
||||
BizName string `json:"bizName" dc:"业务名称"`
|
||||
Status int `json:"status" dc:"状态"`
|
||||
TotalCount int `json:"totalCount" dc:"导出总行数"`
|
||||
FileName string `json:"fileName" dc:"文件名"`
|
||||
FileSize int64 `json:"fileSize" dc:"文件大小"`
|
||||
ErrorMessage string `json:"errorMessage" dc:"失败原因"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
FinishTime *gtime.Time `json:"finishTime" dc:"完成时间"`
|
||||
ExpireTime *gtime.Time `json:"expireTime" dc:"过期时间"`
|
||||
DeletedTime *gtime.Time `json:"deletedTime" dc:"文件清理时间"`
|
||||
DeleteReason string `json:"deleteReason" dc:"清理原因 user/expired"`
|
||||
}
|
||||
|
||||
// DownloadCenterTaskParam 按任务ID操作
|
||||
type DownloadCenterTaskParam struct {
|
||||
TaskId int64 `json:"taskId" v:"required|min:1#任务ID不能为空|任务ID不正确" dc:"任务ID"`
|
||||
}
|
||||
|
||||
// DownloadCenterDownloadModel 下载结果
|
||||
type DownloadCenterDownloadModel struct {
|
||||
FileName string `json:"fileName" dc:"文件名"`
|
||||
OssId int64 `json:"ossId" dc:"OSS文件ID"`
|
||||
TaskNo string `json:"taskNo" dc:"任务编号"`
|
||||
}
|
||||
|
||||
// DownloadCenterRecentParam 右上角全局入口:最近任务
|
||||
type DownloadCenterRecentParam struct {
|
||||
Limit int `json:"limit" d:"5" dc:"返回条数"`
|
||||
}
|
||||
|
||||
// DownloadCenterRecentModel 全局入口返回
|
||||
type DownloadCenterRecentModel struct {
|
||||
Items []*DownloadCenterListModel `json:"items" dc:"最近任务"`
|
||||
RunningCount int `json:"runningCount" dc:"进行中数量"`
|
||||
FinishedCount int `json:"finishedCount" dc:"已完成数量"`
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package entity
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// SysPermissionRevision is the golang structure for table sys_permission_revision.
|
||||
type SysPermissionRevision struct {
|
||||
Id int `json:"id" orm:"id" description:""`
|
||||
Revision int64 `json:"revision" orm:"revision" description:""`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""`
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package entity
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// SysRoleSyncTask is the golang structure for table sys_role_sync_task.
|
||||
type SysRoleSyncTask struct {
|
||||
TaskId string `json:"taskId" orm:"task_id" description:""`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:""`
|
||||
SourceRoleId int64 `json:"sourceRoleId" orm:"source_role_id" description:""`
|
||||
SourceDeptId int64 `json:"sourceDeptId" orm:"source_dept_id" description:""`
|
||||
ActorId int64 `json:"actorId" orm:"actor_id" description:""`
|
||||
Status string `json:"status" orm:"status" description:""`
|
||||
Attempts int `json:"attempts" orm:"attempts" description:""`
|
||||
NextAttemptAt int64 `json:"nextAttemptAt" orm:"next_attempt_at" description:""`
|
||||
LeaseUntil int64 `json:"leaseUntil" orm:"lease_until" description:""`
|
||||
LeaseToken string `json:"leaseToken" orm:"lease_token" description:""`
|
||||
Payload string `json:"payload" orm:"payload" description:""`
|
||||
LastError string `json:"lastError" orm:"last_error" description:""`
|
||||
TotalCount int `json:"totalCount" orm:"total_count" description:""`
|
||||
SuccessCount int `json:"successCount" orm:"success_count" description:""`
|
||||
FailedCount int `json:"failedCount" orm:"failed_count" description:""`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:""`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""`
|
||||
}
|
||||
@@ -10,29 +10,29 @@ import (
|
||||
|
||||
// SysUser is the golang structure for table sys_user.
|
||||
type SysUser struct {
|
||||
UserId int64 `json:"userId" orm:"user_id" description:"用户ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门ID"`
|
||||
UserName string `json:"userName" orm:"user_name" description:"用户账号"`
|
||||
NickName string `json:"nickName" orm:"nick_name" description:"用户昵称"`
|
||||
UserType string `json:"userType" orm:"user_type" description:"用户类型(sys_user系统用户)"`
|
||||
Email string `json:"email" orm:"email" description:"用户邮箱"`
|
||||
Phonenumber string `json:"phonenumber" orm:"phonenumber" description:"手机号码"`
|
||||
Sex string `json:"sex" orm:"sex" description:"用户性别(0男 1女 2未知)"`
|
||||
Avatar string `json:"avatar" orm:"avatar" description:"头像地址"`
|
||||
Salt string `json:"salt" orm:"salt" description:"加密盐"`
|
||||
Password string `json:"password" orm:"password" description:"密码"`
|
||||
IsInitPassword int `json:"isInitPassword" orm:"is_init_password" description:"当前密码是否未由用户本人设置(1=初始或管理员临时密码 0=用户已自设)"`
|
||||
Status string `json:"status" orm:"status" description:"帐号状态(0正常 1停用)"`
|
||||
LoginIp string `json:"loginIp" orm:"login_ip" description:"最后登录IP"`
|
||||
LoginDate *gtime.Time `json:"loginDate" orm:"login_date" description:"最后登录时间"`
|
||||
MfaEnabled int `json:"mfaEnabled" orm:"mfa_enabled" description:"是否开启邮箱MFA 0否 1是"`
|
||||
CreatedDept int64 `json:"createdDept" orm:"created_dept" description:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" orm:"created_by" description:"创建者"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" orm:"updated_by" description:"更新者"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"`
|
||||
DeletedBy int64 `json:"deletedBy" orm:"deleted_by" description:"删除人"`
|
||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"删除时间"`
|
||||
Remark string `json:"remark" orm:"remark" description:"备注"`
|
||||
UserId int64 `json:"userId" orm:"user_id" description:"用户ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门ID"`
|
||||
UserName string `json:"userName" orm:"user_name" description:"用户账号"`
|
||||
NickName string `json:"nickName" orm:"nick_name" description:"用户昵称"`
|
||||
UserType string `json:"userType" orm:"user_type" description:"用户类型(sys_user系统用户)"`
|
||||
Email string `json:"email" orm:"email" description:"用户邮箱"`
|
||||
Phonenumber string `json:"phonenumber" orm:"phonenumber" description:"手机号码"`
|
||||
Sex string `json:"sex" orm:"sex" description:"用户性别(0男 1女 2未知)"`
|
||||
Avatar string `json:"avatar" orm:"avatar" description:"头像地址"`
|
||||
Salt string `json:"salt" orm:"salt" description:"加密盐"`
|
||||
Password string `json:"password" orm:"password" description:"密码"`
|
||||
IsInitPassword int `json:"isInitPassword" orm:"is_init_password" description:"当前密码是否未由用户本人设置(1=初始或管理员临时密码 0=用户已自设)"`
|
||||
Status string `json:"status" orm:"status" description:"帐号状态(0正常 1停用)"`
|
||||
LoginIp string `json:"loginIp" orm:"login_ip" description:"最后登录IP"`
|
||||
LoginDate *gtime.Time `json:"loginDate" orm:"login_date" description:"最后登录时间"`
|
||||
MfaEnabled int `json:"mfaEnabled" orm:"mfa_enabled" description:"是否开启邮箱MFA 0否 1是"`
|
||||
CreatedDept int64 `json:"createdDept" orm:"created_dept" description:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" orm:"created_by" description:"创建者"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" orm:"updated_by" description:"更新者"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"`
|
||||
DeletedBy int64 `json:"deletedBy" orm:"deleted_by" description:"删除人"`
|
||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"删除时间"`
|
||||
Remark string `json:"remark" orm:"remark" description:"备注"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package entity
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// TExportTask is the golang structure for table t_export_task.
|
||||
type TExportTask struct {
|
||||
Id int64 `json:"id" orm:"id" description:"主键ID"`
|
||||
TaskNo string `json:"taskNo" orm:"task_no" description:"任务编号(=执行日志批次编号=文件名主体)"`
|
||||
BizKey string `json:"bizKey" orm:"biz_key" description:"业务标识"`
|
||||
BizName string `json:"bizName" orm:"biz_name" description:"业务名称"`
|
||||
PermCode string `json:"permCode" orm:"perm_code" description:"导出权限码快照,K1用"`
|
||||
QueryParams *gjson.Json `json:"queryParams" orm:"query_params" description:"筛选条件快照"`
|
||||
IdentitySnapshot *gjson.Json `json:"identitySnapshot" orm:"identity_snapshot" description:"提交时用户身份与角色范围快照"`
|
||||
Status int `json:"status" orm:"status" description:"状态 0排队 2生成中 1已完成 3失败"`
|
||||
TotalCount int `json:"totalCount" orm:"total_count" description:"导出总行数"`
|
||||
OssId int64 `json:"ossId" orm:"oss_id" description:"OSS文件ID"`
|
||||
FileName string `json:"fileName" orm:"file_name" description:"文件名"`
|
||||
FileSize int64 `json:"fileSize" orm:"file_size" description:"文件大小(字节)"`
|
||||
FileMd5 string `json:"fileMd5" orm:"file_md5" description:"文件MD5"`
|
||||
DownloadCount int `json:"downloadCount" orm:"download_count" description:"下载次数"`
|
||||
LastDownloadTime *gtime.Time `json:"lastDownloadTime" orm:"last_download_time" description:"最后下载时间"`
|
||||
ErrorMessage string `json:"errorMessage" orm:"error_message" description:"失败原因"`
|
||||
OwnerUserId int64 `json:"ownerUserId" orm:"owner_user_id" description:"发起用户ID,K2用"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"机构ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" orm:"created_dept" description:"创建部门ID"`
|
||||
CreatedBy int64 `json:"createdBy" orm:"created_by" description:"创建者ID"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"`
|
||||
StartTime *gtime.Time `json:"startTime" orm:"start_time" description:"开始生成时间"`
|
||||
FinishTime *gtime.Time `json:"finishTime" orm:"finish_time" description:"完成/失败时间"`
|
||||
ExpireTime *gtime.Time `json:"expireTime" orm:"expire_time" description:"文件过期时间"`
|
||||
DeletedTime *gtime.Time `json:"deletedTime" orm:"deleted_time" description:"文件清理时间"`
|
||||
DeleteReason string `json:"deleteReason" orm:"delete_reason" description:"文件清理原因 user/expired"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"`
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package model
|
||||
|
||||
// ExportColumn 导出列。
|
||||
// 由前端按「当前列表显示列」传入,顺序即导出列顺序。
|
||||
type ExportColumn struct {
|
||||
// Field 列表模型字段名(对应 JSON tag),导出时按它取值
|
||||
Field string `json:"field" dc:"字段名"`
|
||||
// Label 表头文字,取列表页列标题
|
||||
Label string `json:"label" dc:"列标题"`
|
||||
DictType string `json:"dictType,omitempty" dc:"列表列使用的字典类型"`
|
||||
// DictValueMap 字典取值前的值归一化(页面渲染前改过值时用)
|
||||
DictValueMap map[string]string `json:"dictValueMap,omitempty" dc:"列表渲染前的值归一化"`
|
||||
// ValueMap 固定值映射:页面用三元表达式等非字典方式渲染的列(如 1→池卡、0→单卡)
|
||||
ValueMap map[string]string `json:"valueMap,omitempty" dc:"固定值映射,键为原始值"`
|
||||
// ValueDefault 固定值映射未命中时的兜底文案;为空则保留原值
|
||||
ValueDefault string `json:"valueDefault,omitempty" dc:"固定值映射兜底文案"`
|
||||
FallbackField string `json:"fallbackField,omitempty" dc:"旧数据备用字段"`
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package genin
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package request
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package request
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package response
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package response
|
||||
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// 卡基础信息查询 / 月历史用量查询 共用的输入模式。
|
||||
const (
|
||||
SimCardQueryModeExcel = "excel" // Excel 模板导入
|
||||
SimCardQueryModeInput = "input" // 多行文本批量输入
|
||||
SimCardQueryModeRange = "range" // 连号(起止号段)
|
||||
SimCardQueryModeDept = "dept" // 按所属公司查询(仅月历史用量查询支持)
|
||||
)
|
||||
|
||||
// 单次查询的号码条数上限。
|
||||
//
|
||||
// 取值依据:
|
||||
// - 与现有批量卡操作上限 20000 保持一致,避免用户对「批量」能力的容量认知分裂;
|
||||
// - t_export_task.query_params 是 JSON 列,20000 条号码快照约 1MB,仍在可控范围;
|
||||
// - 20000 行 xlsx 约 3~5MB,导出中心单任务 10 分钟超时内可以写完。
|
||||
const SimCardQueryMaxRows = 20000
|
||||
|
||||
// SimCardQueryExportParam 卡基础信息查询导出参数。
|
||||
// Excel 模式用 File,批量输入用 BatchInput,连号模式用 Dimension/StartNum/EndNum。
|
||||
type SimCardQueryExportParam struct {
|
||||
Mode string `json:"mode" dc:"输入方式 excel/input/range"`
|
||||
BatchInput string `json:"batchInput" dc:"批量输入内容,每行 ICCID 或 ICCID MSISDN IMSI"`
|
||||
Dimension string `json:"dimension" dc:"连号维度 iccid/msisdn/imsi"`
|
||||
StartNum string `json:"startNum" dc:"起始号段"`
|
||||
EndNum string `json:"endNum" dc:"结束号段"`
|
||||
Iccid string `json:"iccid" dc:"仅按 ICCID 精确查询"`
|
||||
ExportColumnsJson string `json:"exportColumnsJson" dc:"导出列(JSON字符串)"`
|
||||
ExportColumns []ExportColumn `json:"exportColumns" dc:"导出列"`
|
||||
}
|
||||
|
||||
// SimCardUsageHistoryExportParam 月历史用量查询导出参数。
|
||||
// 在卡基础信息查询的基础上增加「按所属公司」模式。
|
||||
type SimCardUsageHistoryExportParam struct {
|
||||
SimCardQueryExportParam
|
||||
DeptId int64 `json:"deptId" dc:"所属公司部门ID,mode=dept 时必填"`
|
||||
// 到期日期区间,仅 dept 模式生效;为空表示不限。
|
||||
ExpireStartTime string `json:"expireStartTime" dc:"到期日期起(含)"`
|
||||
ExpireEndTime string `json:"expireEndTime" dc:"到期日期止(含)"`
|
||||
}
|
||||
|
||||
// SimCardQuerySubmitRes 提交导出后的回执。
|
||||
// 文件不在本次响应里返回,用户到「下载中心」下载;执行日志里看汇总结果。
|
||||
type SimCardQuerySubmitRes struct {
|
||||
TaskId int64 `json:"taskId" dc:"任务ID"`
|
||||
TaskNo string `json:"taskNo" dc:"任务编号"`
|
||||
Total int `json:"total" dc:"预计导出行数"`
|
||||
}
|
||||
|
||||
// SimCardQueryResolveResult 输入解析结果。
|
||||
// Rows 为按输入顺序展开的待导出行,未命中的行同样保留,用于在文件里写明失败原因。
|
||||
type SimCardQueryResolveResult struct {
|
||||
Rows []*SimCardBaseQueryRow
|
||||
HitCount int
|
||||
MissCount int
|
||||
// Summaries 输入侧的错误(如某行格式错误),按行记录,最终汇总进执行日志。
|
||||
Summaries []string
|
||||
}
|
||||
|
||||
// SimCardBaseQueryRow 卡基础信息查询的导出行。
|
||||
// 字段顺序即无列清单时的默认导出顺序;Field 名与前端列配置的 field 一一对应。
|
||||
type SimCardBaseQueryRow struct {
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
UsedFlowMb float64 `json:"usedFlowMb" dc:"当月用量(MB)"`
|
||||
RemainFlowMb float64 `json:"remainFlowMb" dc:"当月剩余用量(MB)"`
|
||||
PackageTotalMb float64 `json:"packageTotalMb" dc:"套餐总流量(MB)"`
|
||||
CardStatus int `json:"cardStatus" dc:"卡状态"`
|
||||
NetModel int `json:"netModel" dc:"网络类型"`
|
||||
Operators string `json:"operators" dc:"运营商"`
|
||||
ActivateAt *gtime.Time `json:"activateAt" dc:"激活时间"`
|
||||
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
|
||||
ExpireAt *gtime.Time `json:"expireAt" dc:"到期时间"`
|
||||
OutboundBatch string `json:"outboundBatch" dc:"出库批次"`
|
||||
InboundBatch string `json:"inboundBatch" dc:"入库批次"`
|
||||
PackageName string `json:"packageName" dc:"当前套餐名称"`
|
||||
DeptName string `json:"deptName" dc:"所属企业"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
ExtraRemark string `json:"extraRemark" dc:"其他备注"`
|
||||
// QueryResult / FailReason 固定在文件末尾两列,保证「部分成功」时失败原因可追溯到具体输入。
|
||||
QueryResult string `json:"queryResult" dc:"查询结果"`
|
||||
FailReason string `json:"failReason" dc:"失败原因"`
|
||||
}
|
||||
|
||||
// SimCardUsageHistoryRow 月历史用量查询的导出行。
|
||||
// 近 12 个月的用量按月份动态列展开,MonthValues 与请求里的月份顺序一致。
|
||||
type SimCardUsageHistoryRow struct {
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
|
||||
ExpireAt *gtime.Time `json:"expireAt" dc:"到期时间"`
|
||||
// MonthValues 由调用方按月份顺序拼成 "2026-09" 这样的键,导出时逐列取值。
|
||||
// 键不存在表示「查询成功但该月没有流量记录」,导出为 "-"。
|
||||
MonthValues map[string]float64 `json:"monthValues" dc:"近12个月用量(MB)"`
|
||||
// UsageQueryFailed 该卡的流量数据整体查询失败(服务抖动),导出时月份列写「查询失败」,
|
||||
// 与「无记录(-)」「零用量(0)」区分开,避免客户误解。
|
||||
UsageQueryFailed bool `json:"usageQueryFailed" dc:"流量数据是否查询失败"`
|
||||
QueryResult string `json:"queryResult" dc:"查询结果"`
|
||||
FailReason string `json:"failReason" dc:"失败原因"`
|
||||
}
|
||||
|
||||
// SimCardQueryDeptOption 所属公司下拉项。
|
||||
type SimCardQueryDeptOption struct {
|
||||
DeptId int64 `json:"deptId" dc:"部门ID"`
|
||||
DeptName string `json:"deptName" dc:"公司名称"`
|
||||
CardCount int64 `json:"cardCount" dc:"名下卡数量"`
|
||||
ParentId int64 `json:"parentId" dc:"上级部门ID"`
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
@@ -24,17 +24,17 @@ type SysDeptListParam struct {
|
||||
}
|
||||
|
||||
type SysDeptListModel struct {
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门id"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptType int `json:"deptType" orm:"dept_type" description:"部门类型(0:部门 1:公司)"`
|
||||
ParentId int64 `json:"parentId" orm:"parent_id" description:"父部门id"`
|
||||
Ancestors string `json:"ancestors" orm:"ancestors" description:"祖级列表"`
|
||||
DeptName string `json:"deptName" orm:"dept_name" description:"部门名称"`
|
||||
DeptCategory string `json:"deptCategory" orm:"dept_category" description:"部门类别编码"`
|
||||
OrderNum int `json:"orderNum" orm:"order_num" description:"显示顺序"`
|
||||
Leader int64 `json:"leader" orm:"leader" description:"负责人"`
|
||||
Phone string `json:"phone" orm:"phone" description:"联系电话"`
|
||||
Email string `json:"email" orm:"email" description:"邮箱"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门id"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptType int `json:"deptType" orm:"dept_type" description:"部门类型(0:部门 1:公司)"`
|
||||
ParentId int64 `json:"parentId" orm:"parent_id" description:"父部门id"`
|
||||
Ancestors string `json:"ancestors" orm:"ancestors" description:"祖级列表"`
|
||||
DeptName string `json:"deptName" orm:"dept_name" description:"部门名称"`
|
||||
DeptCategory string `json:"deptCategory" orm:"dept_category" description:"部门类别编码"`
|
||||
OrderNum int `json:"orderNum" orm:"order_num" description:"显示顺序"`
|
||||
Leader int64 `json:"leader" orm:"leader" description:"负责人"`
|
||||
Phone string `json:"phone" orm:"phone" description:"联系电话"`
|
||||
Email string `json:"email" orm:"email" description:"邮箱"`
|
||||
Status string `json:"status" orm:"status" description:"部门状态(0正常 1停用)"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"`
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
@@ -48,6 +48,8 @@ type SysRoleViewParam struct {
|
||||
}
|
||||
|
||||
type SysRoleViewModel struct {
|
||||
IsTemplateRole bool `json:"isTemplateRole" orm:"-" description:"是否为平台代理模板"`
|
||||
IsDeptDefaultRole bool `json:"isDeptDefaultRole" orm:"-" description:"是否为所属机构默认角色"`
|
||||
RoleId int64 `json:"roleId" orm:"role_id" description:"角色ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门组织id"`
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
@@ -68,21 +68,21 @@ type SysUserListModel struct {
|
||||
}
|
||||
|
||||
type SysUserViewModel struct {
|
||||
UserId int64 `json:"userId" orm:"user_id" description:"用户ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门ID"`
|
||||
UserName string `json:"userName" orm:"user_name" description:"用户账号"`
|
||||
NickName string `json:"nickName" orm:"nick_name" description:"用户昵称"`
|
||||
UserType string `json:"userType" orm:"user_type" description:"用户类型(sys_user系统用户)"`
|
||||
Email string `json:"email" orm:"email" description:"用户邮箱"`
|
||||
Phonenumber string `json:"phonenumber" orm:"phonenumber" description:"手机号码"`
|
||||
Sex string `json:"sex" orm:"sex" description:"用户性别(0男 1女 2未知)"`
|
||||
Avatar string `json:"avatar" orm:"avatar" description:"头像地址"`
|
||||
Status string `json:"status" orm:"status" description:"帐号状态(0正常 1停用)"`
|
||||
LoginIp string `json:"loginIp" orm:"login_ip" description:"最后登录IP"`
|
||||
LoginDate *gtime.Time `json:"loginDate" orm:"login_date" description:"最后登录时间"`
|
||||
MfaEnabled int64 `json:"mfaEnabled" orm:"mfa_enabled" description:"是否开启mfa验证"`
|
||||
IsInitPassword int64 `json:"isInitPassword" orm:"is_init_password" description:"当前密码是否未由用户本人设置(1=初始或管理员临时密码)"`
|
||||
UserId int64 `json:"userId" orm:"user_id" description:"用户ID"`
|
||||
TenantId string `json:"tenantId" orm:"tenant_id" description:"租户编号"`
|
||||
DeptId int64 `json:"deptId" orm:"dept_id" description:"部门ID"`
|
||||
UserName string `json:"userName" orm:"user_name" description:"用户账号"`
|
||||
NickName string `json:"nickName" orm:"nick_name" description:"用户昵称"`
|
||||
UserType string `json:"userType" orm:"user_type" description:"用户类型(sys_user系统用户)"`
|
||||
Email string `json:"email" orm:"email" description:"用户邮箱"`
|
||||
Phonenumber string `json:"phonenumber" orm:"phonenumber" description:"手机号码"`
|
||||
Sex string `json:"sex" orm:"sex" description:"用户性别(0男 1女 2未知)"`
|
||||
Avatar string `json:"avatar" orm:"avatar" description:"头像地址"`
|
||||
Status string `json:"status" orm:"status" description:"帐号状态(0正常 1停用)"`
|
||||
LoginIp string `json:"loginIp" orm:"login_ip" description:"最后登录IP"`
|
||||
LoginDate *gtime.Time `json:"loginDate" orm:"login_date" description:"最后登录时间"`
|
||||
MfaEnabled int64 `json:"mfaEnabled" orm:"mfa_enabled" description:"是否开启mfa验证"`
|
||||
IsInitPassword int64 `json:"isInitPassword" orm:"is_init_password" description:"当前密码是否未由用户本人设置(1=初始或管理员临时密码)"`
|
||||
|
||||
CreatedDept int64 `json:"createdDept" orm:"created_dept" description:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" orm:"created_by" description:"创建者"`
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2025 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package model
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package iotin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package iotin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package iot
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
@@ -103,6 +103,43 @@ type TMessageLogViewModel struct {
|
||||
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
|
||||
}
|
||||
|
||||
// TMessageLogUnreadListParam 获取当前登录用户未读消息通知
|
||||
type TMessageLogUnreadListParam struct {
|
||||
Limit int `json:"limit" d:"50" dc:"返回条数上限,默认50,最大200"`
|
||||
}
|
||||
|
||||
func (in *TMessageLogUnreadListParam) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// TMessageLogUnreadListModel 未读消息通知(右上角消息提醒数据源)
|
||||
type TMessageLogUnreadListModel struct {
|
||||
MessageLogId int64 `json:"messageLogId" orm:"message_log_id" dc:"主键ID"`
|
||||
MessageType int `json:"messageType" orm:"message_type" dc:"消息类型 1系统通知 2活动通知 3订单通知 4账户通知"`
|
||||
SendUserType int `json:"sendUserType" orm:"send_user_type" dc:"发送用户类型 1代理商 2终端用户"`
|
||||
MessageTitle string `json:"messageTitle" orm:"message_title" dc:"消息标题"`
|
||||
MessageContent string `json:"messageContent" orm:"message_content" dc:"消息内容"`
|
||||
MessageLink string `json:"messageLink" orm:"message_link" dc:"跳转链接地址"`
|
||||
SendTime *gtime.Time `json:"sendTime" orm:"send_time" dc:"发送时间"`
|
||||
IsRead int `json:"isRead" orm:"is_read" dc:"是否已读 0未读 1已读"`
|
||||
}
|
||||
|
||||
// TMessageLogReadParam 标记当前登录用户指定消息已读
|
||||
type TMessageLogReadParam struct {
|
||||
MessageLogId int64 `json:"messageLogId" v:"required#主键ID不能为空" dc:"主键ID"`
|
||||
}
|
||||
|
||||
func (in *TMessageLogReadParam) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// TMessageLogReadAllParam 标记当前登录用户全部消息已读
|
||||
type TMessageLogReadAllParam struct{}
|
||||
|
||||
func (in *TMessageLogReadAllParam) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// TMessageLogListParam 获取消息日志列表
|
||||
type TMessageLogListParam struct {
|
||||
request.PageInfo
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,5 +1,29 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
)
|
||||
|
||||
const SimCardAllocateMaxInputRows = 20000
|
||||
|
||||
func (in *TSimCardAllocatePrepareParam) ValidateInput() error {
|
||||
count := 0
|
||||
for _, line := range strings.Split(in.Input, "\n") {
|
||||
if strings.TrimSpace(line) != "" {
|
||||
count++
|
||||
if count > SimCardAllocateMaxInputRows {
|
||||
return gerror.Newf("单次批量输入最多 %d 条,超出请使用 Excel 导入或分批提交", SimCardAllocateMaxInputRows)
|
||||
}
|
||||
}
|
||||
}
|
||||
if count == 0 {
|
||||
return gerror.New("批量输入内容不能为空")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type TSimCardAllocateTargetListParam struct {
|
||||
Keyword string `json:"keyword" dc:"目标客户名称、编码或ID"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAllocateInputLimit(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
name string
|
||||
input string
|
||||
wantError bool
|
||||
}{
|
||||
{"empty", " \r\n\t", true},
|
||||
{"ignore blanks", "\r\n123\r\n\n456 789 012\n", false},
|
||||
{"at limit", strings.Repeat("123\n", SimCardAllocateMaxInputRows), false},
|
||||
{"above limit", strings.Repeat("123\n", SimCardAllocateMaxInputRows+1), true},
|
||||
} {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
param := &TSimCardAllocatePrepareParam{Input: test.input}
|
||||
if err := param.ValidateInput(); (err != nil) != test.wantError {
|
||||
t.Fatalf("ValidateInput() = %v, wantError = %v", err, test.wantError)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
@@ -184,6 +184,11 @@ type TSimCardInfoViewModel struct {
|
||||
// TSimCardInfoListParam 获取卡信息表列表
|
||||
type TSimCardInfoListParam struct {
|
||||
request.PageInfo
|
||||
// ExportColumnsJson 导出列(仅导出接口使用,JSON 字符串形式):前端传当前列表显示列
|
||||
ExportColumnsJson string `json:"exportColumnsJson" dc:"导出列(JSON字符串)"`
|
||||
// ExportColumns 导出列对象形式,兼容直接传数组的调用
|
||||
ExportColumns []ExportColumn `json:"exportColumns" dc:"导出列"`
|
||||
|
||||
BossCardStatus *int `json:"bossCardStatus" dc:"运营商卡状态"`
|
||||
TimeType *int `json:"timeType" dc:"时间类型"`
|
||||
Time []*gtime.Time `json:"time" dc:"时间段"`
|
||||
@@ -198,6 +203,7 @@ type TSimCardInfoListParam struct {
|
||||
ChanKey *string `json:"chanKey" dc:"通道编号"`
|
||||
CurrentPackageCode *string `json:"currentPackageCode" dc:"当前套餐编码"`
|
||||
CardValue string `json:"cardValue" dc:"卡号"`
|
||||
BatchInput *string `json:"batchInput" dc:"批量查询卡号(每行一个号码或 ICCID MSISDN IMSI)"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
DeptId int64 `json:"deptId" dc:"渠道客户ID"`
|
||||
@@ -220,70 +226,70 @@ func (in *TSimCardInfoListParam) Filter(ctx context.Context) (err error) {
|
||||
}
|
||||
|
||||
type TSimCardInfoListModel struct {
|
||||
TrafficCutoffCrossMonthHold int `json:"trafficCutoffCrossMonthHold" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
Id int64 `json:"id" dc:"主键ID"`
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN/卡号"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
RegionCode string `json:"regionCode" dc:"归属地"`
|
||||
DeptId int64 `json:"deptId" dc:"渠道客户ID"`
|
||||
DeptName string `json:"deptName" dc:"渠道客户名称"`
|
||||
CurrentPackageCode string `json:"currentPackageCode" dc:"当前套餐编号"`
|
||||
PackageName string `json:"packageName" dc:"当前套餐名称"`
|
||||
PackageStatus int `json:"packageStatus" dc:"套餐状态:0 无套餐,1待生效,2生效中,3已过期"`
|
||||
AccessType int `json:"accessType" dc:"接入方式:ipv4、ipv6、ipv4_ipv6"`
|
||||
BossCardStatus int `json:"bossCardStatus" dc:"运营商卡状态 枚举"`
|
||||
CardType int `json:"cardType" dc:"卡类型 枚举"`
|
||||
BossOpenAt *gtime.Time `json:"bossOpenAt" dc:"运营商开户日期"`
|
||||
BossActivateAt *gtime.Time `json:"bossActivateAt" dc:"运营商激活日期"`
|
||||
IsBossActivateEnabled int `json:"isBossActivateEnabled" dc:"是否按运营商激活减去赠送时长方:1是,0否"`
|
||||
InboundBatchNo string `json:"inboundBatchNo" dc:"入库批次"`
|
||||
OutboundBatchNo string `json:"outboundBatchNo" dc:"出库批次"`
|
||||
AllocationBatchNo string `json:"allocationBatchNo" dc:"划拨批次"`
|
||||
IsFlowPool int `json:"isFlowPool" dc:"是否为池卡:1是,0否"`
|
||||
FlowPoolCode string `json:"flowPoolCode" dc:"流量池编号"`
|
||||
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
|
||||
FlowPkgBeginAt *gtime.Time `json:"flowPkgBeginAt" dc:"当前套餐生效时间"`
|
||||
FlowPkgPresentAt *gtime.Time `json:"flowPkgPresentAt" dc:"套餐赠送结束时间"`
|
||||
FlowPkgRealPresentAt *gtime.Time `json:"flowPkgRealPresentAt" dc:"实际赠送结束时间"`
|
||||
FlowPkgEndAt *gtime.Time `json:"flowPkgEndAt" dc:"当前套餐预计到期时间"`
|
||||
DataServiceStatus int `json:"dataServiceStatus" dc:"数据服务状态:1启用、0禁用"`
|
||||
PackageTotalFlowMb float64 `json:"packageTotalFlowMb" dc:"套餐总流量MB"`
|
||||
UsedFlowMb float64 `json:"usedFlowMb" dc:"已用流量MB"`
|
||||
ReminFlowMb float64 `json:"reminFlowMb" dc:"剩余流量MB"`
|
||||
TrafficCutoffStatus int `json:"trafficCutoffStatus" dc:"达量断网配置状态:0未配置,1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" dc:"达量断网阈值"`
|
||||
SmsServiceStatus int `json:"smsServiceStatus" dc:"短信服务状态:1启用、0禁用"`
|
||||
PackageTotalSms int `json:"packageTotalSms" dc:"套餐短信总条数"`
|
||||
UsedSms int `json:"usedSms" dc:"已用短信条数"`
|
||||
VoiceServiceStatus int `json:"voiceServiceStatus" dc:"语音服务状态:1启用、0禁用"`
|
||||
PackageTotalVoice int `json:"packageTotalVoice" dc:"套餐语音总分钟数"`
|
||||
UsedVoice int `json:"usedVoice" dc:"已用语音分钟数"`
|
||||
RoamServiceStatus int `json:"roamServiceStatus" dc:"国漫服务状态:1启用、0禁用"`
|
||||
PackageTotalRoamFlowMb float64 `json:"packageTotalRoamFlowMb" dc:"套餐国际流量MB"`
|
||||
UsedRoamFlowMb float64 `json:"usedRoamFlowMb" dc:"已用国际流量MB"`
|
||||
StatusSyncTime *gtime.Time `json:"statusSyncTime" dc:"状态最后一次同步时间"`
|
||||
FlowSyncTime *gtime.Time `json:"flowSyncTime" dc:"流量最后一次同步时间"`
|
||||
SmsSyncTime *gtime.Time `json:"smsSyncTime" dc:"短信最后一次同步时间"`
|
||||
VoiceSyncTime *gtime.Time `json:"voiceSyncTime" dc:"语音最后一次同步时间"`
|
||||
RoamSyncTime *gtime.Time `json:"roamSyncTime" dc:"国漫最后一次同步时间"`
|
||||
ExtraFeeEnabled int `json:"extraFeeEnabled" dc:"是否收取附加费:1是,0否"`
|
||||
ExtraFeeMultiple float64 `json:"extraFeeMultiple" dc:"附加费用倍数"`
|
||||
ExtraFee float64 `json:"extraFee" dc:"附加金额"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
NetModel int `json:"netModel" dc:"网络类型:4G、5G、NB-IoT"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
TrafficCutoffCrossMonthHold int `json:"trafficCutoffCrossMonthHold" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
Id int64 `json:"id" dc:"主键ID"`
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN/卡号"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
RegionCode string `json:"regionCode" dc:"归属地"`
|
||||
DeptId int64 `json:"deptId" dc:"渠道客户ID"`
|
||||
DeptName string `json:"deptName" dc:"渠道客户名称"`
|
||||
CurrentPackageCode string `json:"currentPackageCode" dc:"当前套餐编号"`
|
||||
PackageName string `json:"packageName" dc:"当前套餐名称"`
|
||||
PackageStatus int `json:"packageStatus" dc:"套餐状态:0 无套餐,1待生效,2生效中,3已过期"`
|
||||
AccessType int `json:"accessType" dc:"接入方式:ipv4、ipv6、ipv4_ipv6"`
|
||||
BossCardStatus int `json:"bossCardStatus" dc:"运营商卡状态 枚举"`
|
||||
CardType int `json:"cardType" dc:"卡类型 枚举"`
|
||||
BossOpenAt *gtime.Time `json:"bossOpenAt" dc:"运营商开户日期"`
|
||||
BossActivateAt *gtime.Time `json:"bossActivateAt" dc:"运营商激活日期"`
|
||||
IsBossActivateEnabled int `json:"isBossActivateEnabled" dc:"是否按运营商激活减去赠送时长方:1是,0否"`
|
||||
InboundBatchNo string `json:"inboundBatchNo" dc:"入库批次"`
|
||||
OutboundBatchNo string `json:"outboundBatchNo" dc:"出库批次"`
|
||||
AllocationBatchNo string `json:"allocationBatchNo" dc:"划拨批次"`
|
||||
IsFlowPool int `json:"isFlowPool" dc:"是否为池卡:1是,0否"`
|
||||
FlowPoolCode string `json:"flowPoolCode" dc:"流量池编号"`
|
||||
OutStockTime *gtime.Time `json:"outStockTime" dc:"出库时间"`
|
||||
FlowPkgBeginAt *gtime.Time `json:"flowPkgBeginAt" dc:"当前套餐生效时间"`
|
||||
FlowPkgPresentAt *gtime.Time `json:"flowPkgPresentAt" dc:"套餐赠送结束时间"`
|
||||
FlowPkgRealPresentAt *gtime.Time `json:"flowPkgRealPresentAt" dc:"实际赠送结束时间"`
|
||||
FlowPkgEndAt *gtime.Time `json:"flowPkgEndAt" dc:"当前套餐预计到期时间"`
|
||||
DataServiceStatus int `json:"dataServiceStatus" dc:"数据服务状态:1启用、0禁用"`
|
||||
PackageTotalFlowMb float64 `json:"packageTotalFlowMb" dc:"套餐总流量MB"`
|
||||
UsedFlowMb float64 `json:"usedFlowMb" dc:"已用流量MB"`
|
||||
ReminFlowMb float64 `json:"reminFlowMb" dc:"剩余流量MB"`
|
||||
TrafficCutoffStatus int `json:"trafficCutoffStatus" dc:"达量断网配置状态:0未配置,1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" dc:"达量断网阈值"`
|
||||
SmsServiceStatus int `json:"smsServiceStatus" dc:"短信服务状态:1启用、0禁用"`
|
||||
PackageTotalSms int `json:"packageTotalSms" dc:"套餐短信总条数"`
|
||||
UsedSms int `json:"usedSms" dc:"已用短信条数"`
|
||||
VoiceServiceStatus int `json:"voiceServiceStatus" dc:"语音服务状态:1启用、0禁用"`
|
||||
PackageTotalVoice int `json:"packageTotalVoice" dc:"套餐语音总分钟数"`
|
||||
UsedVoice int `json:"usedVoice" dc:"已用语音分钟数"`
|
||||
RoamServiceStatus int `json:"roamServiceStatus" dc:"国漫服务状态:1启用、0禁用"`
|
||||
PackageTotalRoamFlowMb float64 `json:"packageTotalRoamFlowMb" dc:"套餐国际流量MB"`
|
||||
UsedRoamFlowMb float64 `json:"usedRoamFlowMb" dc:"已用国际流量MB"`
|
||||
StatusSyncTime *gtime.Time `json:"statusSyncTime" dc:"状态最后一次同步时间"`
|
||||
FlowSyncTime *gtime.Time `json:"flowSyncTime" dc:"流量最后一次同步时间"`
|
||||
SmsSyncTime *gtime.Time `json:"smsSyncTime" dc:"短信最后一次同步时间"`
|
||||
VoiceSyncTime *gtime.Time `json:"voiceSyncTime" dc:"语音最后一次同步时间"`
|
||||
RoamSyncTime *gtime.Time `json:"roamSyncTime" dc:"国漫最后一次同步时间"`
|
||||
ExtraFeeEnabled int `json:"extraFeeEnabled" dc:"是否收取附加费:1是,0否"`
|
||||
ExtraFeeMultiple float64 `json:"extraFeeMultiple" dc:"附加费用倍数"`
|
||||
ExtraFee float64 `json:"extraFee" dc:"附加金额"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
NetModel int `json:"netModel" dc:"网络类型:4G、5G、NB-IoT"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
}
|
||||
|
||||
// TSimCardInfoExportModel 导出卡信息表
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
@@ -124,6 +124,7 @@ type TSimCardStockListModel struct {
|
||||
AgreementExpiryDate string `json:"agreementExpiryDate" dc:"协议到期时间"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedDeptName string `json:"createdDeptName" dc:"创建部门名称"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package model
|
||||
|
||||
type TSimCardTrafficCutoffOptions struct {
|
||||
TrafficCutoffCrossMonthHold *int `json:"trafficCutoffCrossMonthHold" v:"in:0,1" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
TrafficCutoffStatus *int `json:"trafficCutoffStatus" v:"required#达量断网配置状态不能为空" dc:"达量断网配置状态:0未配置,1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" v:"min:0#达量断网阈值不能小于0" dc:"达量断网阈值MB"`
|
||||
TrafficCutoffCrossMonthHold *int `json:"trafficCutoffCrossMonthHold" v:"in:0,1" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
TrafficCutoffStatus *int `json:"trafficCutoffStatus" v:"required#达量断网配置状态不能为空" dc:"达量断网配置状态:0未配置,1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" v:"min:0#达量断网阈值不能小于0" dc:"达量断网阈值MB"`
|
||||
}
|
||||
|
||||
type TSimCardTrafficCutoffListParam struct {
|
||||
@@ -12,24 +12,24 @@ type TSimCardTrafficCutoffListParam struct {
|
||||
}
|
||||
|
||||
type TSimCardTrafficCutoffExportModel struct {
|
||||
TrafficCutoffCrossMonthHold int `json:"trafficCutoffCrossMonthHold" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN/卡号"`
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
ChanName string `json:"chanName" dc:"通道"`
|
||||
DeptName string `json:"deptName" dc:"所属公司"`
|
||||
PackageName string `json:"packageName" dc:"当前套餐"`
|
||||
TrafficCutoffStatus int `json:"trafficCutoffStatus" dc:"达量断网状态:1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" dc:"达量断网阈值(MB)"`
|
||||
TrafficCutoffCrossMonthHold int `json:"trafficCutoffCrossMonthHold" dc:"cross-month traffic cutoff hold: 0 disabled, 1 enabled"`
|
||||
Msisdn string `json:"msisdn" dc:"MSISDN/卡号"`
|
||||
Iccid string `json:"iccid" dc:"ICCID"`
|
||||
Imsi string `json:"imsi" dc:"IMSI"`
|
||||
Imei string `json:"imei" dc:"IMEI"`
|
||||
ChanName string `json:"chanName" dc:"通道"`
|
||||
DeptName string `json:"deptName" dc:"所属公司"`
|
||||
PackageName string `json:"packageName" dc:"当前套餐"`
|
||||
TrafficCutoffStatus int `json:"trafficCutoffStatus" dc:"达量断网状态:1已开启,2已关闭"`
|
||||
TrafficCutoffThreshold float64 `json:"trafficCutoffThreshold" dc:"达量断网阈值(MB)"`
|
||||
}
|
||||
|
||||
type TSimCardTrafficCutoffEditParam struct {
|
||||
TrafficCutoffCrossMonthHold *int `json:"trafficCutoffCrossMonthHold" v:"in:0,1"`
|
||||
Id int64 `json:"id" v:"required|min:1#卡片ID不能为空"`
|
||||
Iccid string `json:"iccid" v:"required#ICCID不能为空"`
|
||||
TrafficCutoffStatus *int `json:"trafficCutoffStatus" v:"required|in:1,2#达量断网状态无效"`
|
||||
TrafficCutoffThreshold *float64 `json:"trafficCutoffThreshold" v:"required|min:0#达量断网阈值不能小于0"`
|
||||
TrafficCutoffCrossMonthHold *int `json:"trafficCutoffCrossMonthHold" v:"in:0,1"`
|
||||
Id int64 `json:"id" v:"required|min:1#卡片ID不能为空"`
|
||||
Iccid string `json:"iccid" v:"required#ICCID不能为空"`
|
||||
TrafficCutoffStatus *int `json:"trafficCutoffStatus" v:"required|in:1,2#达量断网状态无效"`
|
||||
TrafficCutoffThreshold *float64 `json:"trafficCutoffThreshold" v:"required|min:0#达量断网阈值不能小于0"`
|
||||
}
|
||||
|
||||
type TSimCardTrafficCutoffDeleteParam struct {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTSimChannelsTestParamFilterCompleteMode(t *testing.T) {
|
||||
in := &TSimChannelsTestParam{
|
||||
InputMode: TSimChannelsTestInputModeComplete,
|
||||
Iccid: " 8986 ",
|
||||
Imsi: " 4600 ",
|
||||
Msisdn: " 1064 ",
|
||||
}
|
||||
if err := in.Filter(context.Background()); err != nil {
|
||||
t.Fatalf("Filter returned error: %v", err)
|
||||
}
|
||||
if in.Iccid != "8986" || in.Imsi != "4600" || in.Msisdn != "1064" {
|
||||
t.Fatalf("unexpected trimmed values: %#v", in)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTSimChannelsTestParamFilterSingleMode(t *testing.T) {
|
||||
in := &TSimChannelsTestParam{
|
||||
InputMode: TSimChannelsTestInputModeSingle,
|
||||
CardValueType: " IMSI ",
|
||||
CardValue: " 4600 ",
|
||||
}
|
||||
if err := in.Filter(context.Background()); err != nil {
|
||||
t.Fatalf("Filter returned error: %v", err)
|
||||
}
|
||||
if in.CardValueType != "imsi" || in.CardValue != "4600" {
|
||||
t.Fatalf("unexpected normalized values: %#v", in)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTSimChannelsTestParamFilterRejectsInvalidSingleMode(t *testing.T) {
|
||||
in := &TSimChannelsTestParam{
|
||||
InputMode: TSimChannelsTestInputModeSingle,
|
||||
CardValueType: "imei",
|
||||
CardValue: "123",
|
||||
}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("expected error for invalid single mode card value type")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTSimChannelsTestParamFilterDirectSingleMode(t *testing.T) {
|
||||
in := &TSimChannelsTestParam{
|
||||
InputMode: TSimChannelsTestInputModeDirectSingle,
|
||||
CardValueType: " MSISDN ",
|
||||
CardValue: " 1064 ",
|
||||
}
|
||||
if err := in.Filter(context.Background()); err != nil {
|
||||
t.Fatalf("Filter returned error: %v", err)
|
||||
}
|
||||
if in.CardValueType != "msisdn" || in.CardValue != "1064" {
|
||||
t.Fatalf("unexpected normalized values: %#v", in)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTSimChannelsTestParamFilterRejectsIncompleteDirectSingleMode(t *testing.T) {
|
||||
in := &TSimChannelsTestParam{InputMode: TSimChannelsTestInputModeDirectSingle}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("expected error for incomplete direct single mode")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCardValidationRemainsEnabled(t *testing.T) {
|
||||
for _, items := range [][]string{nil, {"simStatus"}} {
|
||||
in := &TSimChannelsTestParam{ChannelId: 42, InputMode: TSimChannelsTestInputModeDirectSingle, Items: items}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatalf("card validation must remain enabled for %v", items)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeTSimChannelTestItems(t *testing.T) {
|
||||
t.Run("empty selects all items", func(t *testing.T) {
|
||||
items, err := NormalizeTSimChannelTestItems(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("NormalizeTSimChannelTestItems returned error: %v", err)
|
||||
}
|
||||
if items != nil {
|
||||
t.Fatalf("expected nil items, got %#v", items)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("trims and deduplicates requested items", func(t *testing.T) {
|
||||
items, err := NormalizeTSimChannelTestItems([]string{" simBasicInfo ", "simSession", "simBasicInfo"})
|
||||
if err != nil {
|
||||
t.Fatalf("NormalizeTSimChannelTestItems returned error: %v", err)
|
||||
}
|
||||
if len(items) != 2 || items[0] != "simBasicInfo" || items[1] != "simSession" {
|
||||
t.Fatalf("unexpected normalized items: %#v", items)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("rejects unknown items", func(t *testing.T) {
|
||||
if _, err := NormalizeTSimChannelTestItems([]string{"unknown"}); err == nil {
|
||||
t.Fatal("expected an error for an unknown item")
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
@@ -186,73 +186,73 @@ func (in *TSimChannelsListParam) Filter(ctx context.Context) (err error) {
|
||||
}
|
||||
|
||||
type TSimChannelsListModel struct {
|
||||
StockCardCount int64 `json:"stockCardCount" dc:"库存卡数量"`
|
||||
CardInfoCount int64 `json:"cardInfoCount" dc:"卡信息数量"`
|
||||
CancellationCardCount int64 `json:"cancellationCardCount" dc:"销户卡数量"`
|
||||
Id int64 `json:"id" dc:"ID"`
|
||||
Operator int `json:"operator" dc:"运营商:1移动,2联通,3电信"`
|
||||
TempKey string `json:"tempKey" dc:"模板标识"`
|
||||
TempName string `json:"tempName" dc:"模板名称"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanConfig string `json:"chanConfig" dc:"通道配置"`
|
||||
ChanStatus int `json:"chanStatus" dc:"通道状态(0未启用,1启用)"`
|
||||
ShareEnabled int `json:"shareEnabled" dc:"是否共享Token(0否,1是)"`
|
||||
SyncEnabled int `json:"syncEnabled" dc:"是否轮询:0是(参与) 1否(不参与)"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
IsNormal *int `json:"isNormal" dc:"是否正常(0是,1否)"`
|
||||
DockingStatus *int `json:"dockingStatus" dc:"对接信息"`
|
||||
RegionCode string `json:"regionCode" dc:"通道行政区域代码(省市)"`
|
||||
AppKey string `json:"appKey" dc:"应用标识"`
|
||||
AppSecret string `json:"appSecret" dc:"应用密钥"`
|
||||
AccessToken string `json:"accessToken" dc:"接口调用凭证"`
|
||||
AccessTokenCreated *gtime.Time `json:"accessTokenCreated" dc:"凭证申请时间"`
|
||||
AccessTokenExpire *gtime.Time `json:"accessTokenExpire" dc:"凭证过期时间"`
|
||||
RefreshToken string `json:"refreshToken" dc:"刷新凭证"`
|
||||
RefreshTokenCreated *gtime.Time `json:"refreshTokenCreated" dc:"刷新凭证申请时间"`
|
||||
RefreshTokenExpire *gtime.Time `json:"refreshTokenExpire" dc:"刷新凭证过期时间"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
LoginUser string `json:"loginUser" dc:"登录账号"`
|
||||
LoginPassword string `json:"loginPassword" dc:"登录密码"`
|
||||
LoginUrl string `json:"loginUrl" dc:"登录地址"`
|
||||
LoginState int `json:"loginState" dc:"登录状态(0未启用,1启用)"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
StockCardCount int64 `json:"stockCardCount" dc:"库存卡数量"`
|
||||
CardInfoCount int64 `json:"cardInfoCount" dc:"卡信息数量"`
|
||||
CancellationCardCount int64 `json:"cancellationCardCount" dc:"销户卡数量"`
|
||||
Id int64 `json:"id" dc:"ID"`
|
||||
Operator int `json:"operator" dc:"运营商:1移动,2联通,3电信"`
|
||||
TempKey string `json:"tempKey" dc:"模板标识"`
|
||||
TempName string `json:"tempName" dc:"模板名称"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanConfig string `json:"chanConfig" dc:"通道配置"`
|
||||
ChanStatus int `json:"chanStatus" dc:"通道状态(0未启用,1启用)"`
|
||||
ShareEnabled int `json:"shareEnabled" dc:"是否共享Token(0否,1是)"`
|
||||
SyncEnabled int `json:"syncEnabled" dc:"是否轮询:0是(参与) 1否(不参与)"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
IsNormal *int `json:"isNormal" dc:"是否正常(0是,1否)"`
|
||||
DockingStatus *int `json:"dockingStatus" dc:"对接信息"`
|
||||
RegionCode string `json:"regionCode" dc:"通道行政区域代码(省市)"`
|
||||
AppKey string `json:"appKey" dc:"应用标识"`
|
||||
AppSecret string `json:"appSecret" dc:"应用密钥"`
|
||||
AccessToken string `json:"accessToken" dc:"接口调用凭证"`
|
||||
AccessTokenCreated *gtime.Time `json:"accessTokenCreated" dc:"凭证申请时间"`
|
||||
AccessTokenExpire *gtime.Time `json:"accessTokenExpire" dc:"凭证过期时间"`
|
||||
RefreshToken string `json:"refreshToken" dc:"刷新凭证"`
|
||||
RefreshTokenCreated *gtime.Time `json:"refreshTokenCreated" dc:"刷新凭证申请时间"`
|
||||
RefreshTokenExpire *gtime.Time `json:"refreshTokenExpire" dc:"刷新凭证过期时间"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
LoginUser string `json:"loginUser" dc:"登录账号"`
|
||||
LoginPassword string `json:"loginPassword" dc:"登录密码"`
|
||||
LoginUrl string `json:"loginUrl" dc:"登录地址"`
|
||||
LoginState int `json:"loginState" dc:"登录状态(0未启用,1启用)"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
}
|
||||
|
||||
// TSimChannelsExportModel 导出通道列表
|
||||
type TSimChannelsExportModel struct {
|
||||
StockCardCount int64 `json:"stockCardCount" dc:"库存卡数量"`
|
||||
CardInfoCount int64 `json:"cardInfoCount" dc:"卡信息数量"`
|
||||
CancellationCardCount int64 `json:"cancellationCardCount" dc:"销户卡数量"`
|
||||
Id int64 `json:"id" dc:"ID"`
|
||||
Operator int `json:"operator" dc:"运营商:1移动,2联通,3电信"`
|
||||
TempKey string `json:"tempKey" dc:"模板标识"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanStatus int `json:"chanStatus" dc:"通道状态(0未启用,1启用)"`
|
||||
ShareEnabled int `json:"shareEnabled" dc:"是否共享Token(0否,1是)"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
RegionCode string `json:"regionCode" dc:"通道行政区域代码(省市)"`
|
||||
AppKey string `json:"appKey" dc:"应用标识"`
|
||||
AppSecret string `json:"appSecret" dc:"应用密钥"`
|
||||
AccessTokenCreated *gtime.Time `json:"accessTokenCreated" dc:"凭证申请时间"`
|
||||
AccessTokenExpire *gtime.Time `json:"accessTokenExpire" dc:"凭证过期时间"`
|
||||
RefreshTokenCreated *gtime.Time `json:"refreshTokenCreated" dc:"刷新凭证申请时间"`
|
||||
RefreshTokenExpire *gtime.Time `json:"refreshTokenExpire" dc:"刷新凭证过期时间"`
|
||||
LoginUser string `json:"loginUser" dc:"登录账号"`
|
||||
LoginPassword string `json:"loginPassword" dc:"登录密码"`
|
||||
LoginState int `json:"loginState" dc:"登录状态(0未启用,1启用)"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
StockCardCount int64 `json:"stockCardCount" dc:"库存卡数量"`
|
||||
CardInfoCount int64 `json:"cardInfoCount" dc:"卡信息数量"`
|
||||
CancellationCardCount int64 `json:"cancellationCardCount" dc:"销户卡数量"`
|
||||
Id int64 `json:"id" dc:"ID"`
|
||||
Operator int `json:"operator" dc:"运营商:1移动,2联通,3电信"`
|
||||
TempKey string `json:"tempKey" dc:"模板标识"`
|
||||
ChanKey string `json:"chanKey" dc:"通道编号"`
|
||||
ChanName string `json:"chanName" dc:"通道名称"`
|
||||
ChanStatus int `json:"chanStatus" dc:"通道状态(0未启用,1启用)"`
|
||||
ShareEnabled int `json:"shareEnabled" dc:"是否共享Token(0否,1是)"`
|
||||
ChanAlias string `json:"chanAlias" dc:"通道别名"`
|
||||
RegionCode string `json:"regionCode" dc:"通道行政区域代码(省市)"`
|
||||
AppKey string `json:"appKey" dc:"应用标识"`
|
||||
AppSecret string `json:"appSecret" dc:"应用密钥"`
|
||||
AccessTokenCreated *gtime.Time `json:"accessTokenCreated" dc:"凭证申请时间"`
|
||||
AccessTokenExpire *gtime.Time `json:"accessTokenExpire" dc:"凭证过期时间"`
|
||||
RefreshTokenCreated *gtime.Time `json:"refreshTokenCreated" dc:"刷新凭证申请时间"`
|
||||
RefreshTokenExpire *gtime.Time `json:"refreshTokenExpire" dc:"刷新凭证过期时间"`
|
||||
LoginUser string `json:"loginUser" dc:"登录账号"`
|
||||
LoginPassword string `json:"loginPassword" dc:"登录密码"`
|
||||
LoginState int `json:"loginState" dc:"登录状态(0未启用,1启用)"`
|
||||
TenantId string `json:"tenantId" dc:"租户ID"`
|
||||
CreatedDept int64 `json:"createdDept" dc:"创建部门"`
|
||||
CreatedBy int64 `json:"createdBy" dc:"创建者"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
|
||||
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" dc:"更新时间"`
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Package genin
|
||||
// @Link https://github.com/xiujiecn/xiu-admin
|
||||
// @Copyright Copyright (c) 2026 LiXiujie
|
||||
// @Author Lxj <li@xiujie.cn>
|
||||
// @Author Lxj <xxx@example.com>
|
||||
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
|
||||
// @AutoGenerate Version
|
||||
package model
|
||||
|
||||
Reference in New Issue
Block a user