refactor: 将 DTO 文件从 internal/model 移动到 internal/model/dto 目录
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 4m22s

- 移动 17 个 DTO 文件到 internal/model/dto/ 目录
- 更新所有 DTO 文件的 package 声明从 model 改为 dto
- 更新所有引用文件的 import 和类型引用
  - Handler 层:admin 和 h5 所有处理器
  - Service 层:所有业务服务
  - Routes 层:所有路由定义
  - Tests 层:单元测试和集成测试
- 清理未使用的 import 语句
- 验证:项目构建成功,测试编译通过,LSP 无错误
This commit is contained in:
2026-01-22 10:15:04 +08:00
parent 23be0a7d3e
commit 46e4e5f4f1
73 changed files with 531 additions and 501 deletions

View File

@@ -0,0 +1,94 @@
package dto
// CreateAccountRequest 创建账号请求
type CreateAccountRequest struct {
Username string `json:"username" validate:"required,min=3,max=50" required:"true" minLength:"3" maxLength:"50" description:"用户名"`
Phone string `json:"phone" validate:"required,len=11" required:"true" minLength:"11" maxLength:"11" description:"手机号"`
Password string `json:"password" validate:"required,min=8,max=32" required:"true" minLength:"8" maxLength:"32" description:"密码"`
UserType int `json:"user_type" validate:"required,min=1,max=4" required:"true" minimum:"1" maximum:"4" description:"用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)"`
ShopID *uint `json:"shop_id" description:"关联店铺ID代理账号必填"`
EnterpriseID *uint `json:"enterprise_id" description:"关联企业ID企业账号必填"`
}
// UpdateAccountRequest 更新账号请求
type UpdateAccountRequest struct {
Username *string `json:"username" validate:"omitempty,min=3,max=50" minLength:"3" maxLength:"50" description:"用户名"`
Phone *string `json:"phone" validate:"omitempty,len=11" minLength:"11" maxLength:"11" description:"手机号"`
Password *string `json:"password" validate:"omitempty,min=8,max=32" minLength:"8" maxLength:"32" description:"密码"`
Status *int `json:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// AccountListRequest 账号列表查询请求
type AccountListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
Username string `json:"username" query:"username" validate:"omitempty,max=50" maxLength:"50" description:"用户名模糊查询"`
Phone string `json:"phone" query:"phone" validate:"omitempty,max=20" maxLength:"20" description:"手机号模糊查询"`
UserType *int `json:"user_type" query:"user_type" validate:"omitempty,min=1,max=4" minimum:"1" maximum:"4" description:"用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)"`
Status *int `json:"status" query:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// AccountResponse 账号响应
type AccountResponse struct {
ID uint `json:"id" description:"账号ID"`
Username string `json:"username" description:"用户名"`
Phone string `json:"phone" description:"手机号"`
UserType int `json:"user_type" description:"用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)"`
ShopID *uint `json:"shop_id,omitempty" description:"关联店铺ID"`
EnterpriseID *uint `json:"enterprise_id,omitempty" description:"关联企业ID"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
Creator uint `json:"creator" description:"创建人ID"`
Updater uint `json:"updater" description:"更新人ID"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}
// AssignRolesRequest 分配角色请求
// 支持传递空数组以清空账号的所有角色
type AssignRolesRequest struct {
RoleIDs []uint `json:"role_ids" validate:"omitempty" description:"角色ID列表传空数组可清空所有角色"`
}
// AccountPageResult 账号分页响应
type AccountPageResult struct {
Items []AccountResponse `json:"items" description:"账号列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// ========== 平台账号管理专用 DTO ==========
// UpdatePasswordRequest 修改密码请求
// 用于管理员重置密码场景,无需验证旧密码
type UpdatePasswordRequest struct {
NewPassword string `json:"new_password" validate:"required,min=8,max=32" required:"true" minLength:"8" maxLength:"32" description:"新密码8-32位"`
}
// UpdateStatusRequest 状态切换请求
// 用于启用/禁用账号
type UpdateStatusRequest struct {
Status int `json:"status" validate:"required,min=0,max=1" required:"true" minimum:"0" maximum:"1" description:"状态0:禁用1:启用)"`
}
// PlatformAccountListRequest 平台账号列表查询请求
// 自动筛选 user_type IN (1, 2) 的账号
type PlatformAccountListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
Username string `json:"username" query:"username" validate:"omitempty,max=50" maxLength:"50" description:"用户名模糊查询"`
Phone string `json:"phone" query:"phone" validate:"omitempty,max=20" maxLength:"20" description:"手机号模糊查询"`
Status *int `json:"status" query:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// UpdatePasswordParams 修改密码参数(用于 OpenAPI 生成)
type UpdatePasswordParams struct {
IDReq
UpdatePasswordRequest
}
// UpdateStatusParams 状态切换参数(用于 OpenAPI 生成)
type UpdateStatusParams struct {
IDReq
UpdateStatusRequest
}

View File

@@ -0,0 +1,16 @@
package dto
// AccountRoleResponse 账号-角色关联响应
type AccountRoleResponse struct {
ID uint `json:"id" description:"关联ID"`
AccountID uint `json:"account_id" description:"账号ID"`
RoleID uint `json:"role_id" description:"角色ID"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
// AccountRolesResponse 账号的角色列表响应
type AccountRolesResponse struct {
AccountID uint `json:"account_id" description:"账号ID"`
Roles []*RoleResponse `json:"roles" description:"角色列表"`
}

View File

@@ -0,0 +1,41 @@
package dto
type LoginRequest struct {
Username string `json:"username" validate:"required"`
Password string `json:"password" validate:"required"`
Device string `json:"device" validate:"omitempty,oneof=web h5 mobile"`
}
type LoginResponse struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int64 `json:"expires_in"`
User UserInfo `json:"user"`
Permissions []string `json:"permissions"`
}
type UserInfo struct {
ID uint `json:"id" description:"用户ID"`
Username string `json:"username" description:"用户名"`
Phone string `json:"phone" description:"手机号"`
UserType int `json:"user_type" description:"用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)"`
UserTypeName string `json:"user_type_name" description:"用户类型名称"`
ShopID uint `json:"shop_id,omitempty" description:"店铺ID"`
ShopName string `json:"shop_name,omitempty" description:"店铺名称"`
EnterpriseID uint `json:"enterprise_id,omitempty" description:"企业ID"`
EnterpriseName string `json:"enterprise_name,omitempty" description:"企业名称"`
}
type RefreshTokenRequest struct {
RefreshToken string `json:"refresh_token" validate:"required"`
}
type RefreshTokenResponse struct {
AccessToken string `json:"access_token"`
ExpiresIn int64 `json:"expires_in"`
}
type ChangePasswordRequest struct {
OldPassword string `json:"old_password" validate:"required"`
NewPassword string `json:"new_password" validate:"required,min=8,max=32"`
}

View File

@@ -0,0 +1,74 @@
package dto
// WithdrawalRequestListReq 提现申请列表查询请求
type WithdrawalRequestListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
Status *int `json:"status" query:"status" validate:"omitempty,min=1,max=4" minimum:"1" maximum:"4" description:"状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账)"`
WithdrawalNo string `json:"withdrawal_no" query:"withdrawal_no" validate:"omitempty,max=50" maxLength:"50" description:"提现单号(精确查询)"`
ShopName string `json:"shop_name" query:"shop_name" validate:"omitempty,max=100" maxLength:"100" description:"店铺名称(模糊查询)"`
StartTime string `json:"start_time" query:"start_time" validate:"omitempty" description:"申请开始时间格式2006-01-02 15:04:05"`
EndTime string `json:"end_time" query:"end_time" validate:"omitempty" description:"申请结束时间格式2006-01-02 15:04:05"`
}
// WithdrawalRequestItem 提现申请列表项
type WithdrawalRequestItem struct {
ID uint `json:"id" description:"提现申请ID"`
WithdrawalNo string `json:"withdrawal_no" description:"提现单号"`
Amount int64 `json:"amount" description:"提现金额(分)"`
FeeRate int64 `json:"fee_rate" description:"手续费比率基点100=1%"`
Fee int64 `json:"fee" description:"手续费(分)"`
ActualAmount int64 `json:"actual_amount" description:"实际到账金额(分)"`
Status int `json:"status" description:"状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账)"`
StatusName string `json:"status_name" description:"状态名称"`
ShopID uint `json:"shop_id" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
ShopHierarchy string `json:"shop_hierarchy" description:"店铺层级路径"`
ApplicantID uint `json:"applicant_id" description:"申请人账号ID"`
ApplicantName string `json:"applicant_name" description:"申请人用户名"`
ProcessorID *uint `json:"processor_id,omitempty" description:"处理人账号ID"`
ProcessorName string `json:"processor_name,omitempty" description:"处理人用户名"`
WithdrawalMethod string `json:"withdrawal_method" description:"提现方式 (alipay:支付宝, wechat:微信, bank:银行卡)"`
PaymentType string `json:"payment_type" description:"放款类型 (manual:人工打款)"`
AccountName string `json:"account_name" description:"收款账户名称"`
AccountNumber string `json:"account_number" description:"收款账号"`
BankName string `json:"bank_name,omitempty" description:"银行名称"`
RejectReason string `json:"reject_reason,omitempty" description:"拒绝原因"`
Remark string `json:"remark,omitempty" description:"备注"`
CreatedAt string `json:"created_at" description:"申请时间"`
ProcessedAt string `json:"processed_at,omitempty" description:"处理时间"`
}
// WithdrawalRequestPageResult 提现申请列表分页响应
type WithdrawalRequestPageResult struct {
Items []WithdrawalRequestItem `json:"items" description:"提现申请列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// ApproveWithdrawalReq 审批通过提现申请请求
type ApproveWithdrawalReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" description:"提现申请ID"`
PaymentType string `json:"payment_type" validate:"required,oneof=manual" required:"true" description:"放款类型目前只支持manual人工打款"`
Amount *int64 `json:"amount" validate:"omitempty,min=1" minimum:"1" description:"修正后的提现金额(分),不填则使用原金额"`
WithdrawalMethod *string `json:"withdrawal_method" validate:"omitempty,oneof=alipay wechat bank" description:"修正后的收款类型 (alipay:支付宝, wechat:微信, bank:银行卡)"`
AccountName *string `json:"account_name" validate:"omitempty,max=100" maxLength:"100" description:"修正后的收款人姓名"`
AccountNumber *string `json:"account_number" validate:"omitempty,max=100" maxLength:"100" description:"修正后的收款账号"`
Remark string `json:"remark" validate:"omitempty,max=500" maxLength:"500" description:"备注"`
}
// RejectWithdrawalReq 拒绝提现申请请求
type RejectWithdrawalReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" description:"提现申请ID"`
Remark string `json:"remark" validate:"required,max=500" required:"true" maxLength:"500" description:"拒绝原因(必填)"`
}
// WithdrawalApprovalResp 审批响应
type WithdrawalApprovalResp struct {
ID uint `json:"id" description:"提现申请ID"`
WithdrawalNo string `json:"withdrawal_no" description:"提现单号"`
Status int `json:"status" description:"状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账)"`
StatusName string `json:"status_name" description:"状态名称"`
ProcessedAt string `json:"processed_at" description:"处理时间"`
}

View File

@@ -0,0 +1,31 @@
package dto
type CreateWithdrawalSettingReq struct {
DailyWithdrawalLimit int `json:"daily_withdrawal_limit" validate:"required,min=1,max=100" required:"true" minimum:"1" maximum:"100" description:"每日提现次数限制"`
MinWithdrawalAmount int64 `json:"min_withdrawal_amount" validate:"required,min=1" required:"true" minimum:"1" description:"最低提现金额(分)"`
FeeRate int64 `json:"fee_rate" validate:"required,min=0,max=10000" required:"true" minimum:"0" maximum:"10000" description:"手续费比率基点100=1%"`
}
type WithdrawalSettingListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
}
type WithdrawalSettingItem struct {
ID uint `json:"id" description:"配置ID"`
DailyWithdrawalLimit int `json:"daily_withdrawal_limit" description:"每日提现次数限制"`
MinWithdrawalAmount int64 `json:"min_withdrawal_amount" description:"最低提现金额(分)"`
FeeRate int64 `json:"fee_rate" description:"手续费比率基点100=1%"`
ArrivalDays int `json:"arrival_days" description:"到账天数"`
IsActive bool `json:"is_active" description:"是否生效"`
CreatorID uint `json:"creator_id" description:"创建人ID"`
CreatorName string `json:"creator_name" description:"创建人用户名"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
type WithdrawalSettingPageResult struct {
Items []WithdrawalSettingItem `json:"items" description:"配置列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}

View File

@@ -0,0 +1,24 @@
package dto
// IDReq 通用 ID 路径参数请求
type IDReq struct {
ID uint `path:"id" description:"ID" required:"true"`
}
// UpdateAccountParams 更新账号聚合参数 (用于文档生成)
type UpdateAccountParams struct {
IDReq
UpdateAccountRequest
}
// AssignRolesParams 分配角色聚合参数 (用于文档生成)
type AssignRolesParams struct {
IDReq
AssignRolesRequest
}
// RemoveRoleParams 移除角色聚合参数
type RemoveRoleParams struct {
AccountID uint `path:"account_id" description:"账号ID" required:"true"`
RoleID uint `path:"role_id" description:"角色ID" required:"true"`
}

View File

@@ -0,0 +1,72 @@
package dto
type CustomerAccountListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
Username string `json:"username" query:"username" description:"用户名(模糊查询)"`
Phone string `json:"phone" query:"phone" description:"手机号(模糊查询)"`
UserType *int `json:"user_type" query:"user_type" description:"用户类型3=代理账号, 4=企业账号)"`
ShopID *uint `json:"shop_id" query:"shop_id" description:"店铺ID"`
EnterpriseID *uint `json:"enterprise_id" query:"enterprise_id" description:"企业ID"`
Status *int `json:"status" query:"status" description:"状态0=禁用, 1=启用)"`
}
type CustomerAccountItem struct {
ID uint `json:"id" description:"账号ID"`
Username string `json:"username" description:"用户名"`
Phone string `json:"phone" description:"手机号"`
UserType int `json:"user_type" description:"用户类型3=代理账号, 4=企业账号)"`
UserTypeName string `json:"user_type_name" description:"用户类型名称"`
ShopID *uint `json:"shop_id,omitempty" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
EnterpriseID *uint `json:"enterprise_id,omitempty" description:"企业ID"`
EnterpriseName string `json:"enterprise_name" description:"企业名称"`
Status int `json:"status" description:"状态0=禁用, 1=启用)"`
StatusName string `json:"status_name" description:"状态名称"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
type CustomerAccountPageResult struct {
Items []CustomerAccountItem `json:"items" description:"账号列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
type CreateCustomerAccountReq struct {
Username string `json:"username" validate:"required,min=2,max=50" required:"true" minimum:"2" maximum:"50" description:"用户名"`
Phone string `json:"phone" validate:"required,len=11" required:"true" description:"手机号"`
Password string `json:"password" validate:"required,min=6,max=20" required:"true" minimum:"6" maximum:"20" description:"密码"`
ShopID uint `json:"shop_id" validate:"required" required:"true" description:"店铺ID"`
}
type UpdateCustomerAccountRequest struct {
Username *string `json:"username" validate:"omitempty,min=2,max=50" minimum:"2" maximum:"50" description:"用户名"`
Phone *string `json:"phone" validate:"omitempty,len=11" description:"手机号"`
}
// UpdateCustomerAccountReq 更新客户账号请求(用于文档生成,包含路径参数)
type UpdateCustomerAccountReq struct {
IDReq
UpdateCustomerAccountRequest
}
type UpdateCustomerAccountPasswordRequest struct {
Password string `json:"password" validate:"required,min=6,max=20" required:"true" minimum:"6" maximum:"20" description:"新密码"`
}
// UpdateCustomerAccountPasswordReq 修改客户账号密码请求(用于文档生成,包含路径参数)
type UpdateCustomerAccountPasswordReq struct {
IDReq
UpdateCustomerAccountPasswordRequest
}
type UpdateCustomerAccountStatusRequest struct {
Status int `json:"status" validate:"required,oneof=0 1" required:"true" enum:"0,1" description:"状态0=禁用, 1=启用)"`
}
// UpdateCustomerAccountStatusReq 修改客户账号状态请求(用于文档生成,包含路径参数)
type UpdateCustomerAccountStatusReq struct {
IDReq
UpdateCustomerAccountStatusRequest
}

View File

@@ -0,0 +1,131 @@
package dto
type AllocateCardsPreviewReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
ICCIDs []string `json:"iccids" validate:"required,min=1,max=1000,dive,required" required:"true" description:"需要授权的 ICCID 列表最多1000个"`
}
type StandaloneCard struct {
ICCID string `json:"iccid" description:"ICCID"`
IotCardID uint `json:"iot_card_id" description:"卡ID"`
MSISDN string `json:"msisdn" description:"手机号"`
CarrierID uint `json:"carrier_id" description:"运营商ID"`
StatusName string `json:"status_name" description:"状态名称"`
}
type DeviceBundle struct {
DeviceID uint `json:"device_id" description:"设备ID"`
DeviceNo string `json:"device_no" description:"设备号"`
TriggerCard DeviceBundleCard `json:"trigger_card" description:"触发卡(用户选择的卡)"`
BundleCards []DeviceBundleCard `json:"bundle_cards" description:"连带卡(同设备的其他卡)"`
}
type DeviceBundleCard struct {
ICCID string `json:"iccid" description:"ICCID"`
IotCardID uint `json:"iot_card_id" description:"卡ID"`
MSISDN string `json:"msisdn" description:"手机号"`
}
type FailedItem struct {
ICCID string `json:"iccid" description:"ICCID"`
Reason string `json:"reason" description:"失败原因"`
}
type AllocatePreviewSummary struct {
StandaloneCardCount int `json:"standalone_card_count" description:"独立卡数量"`
DeviceCount int `json:"device_count" description:"设备数量"`
DeviceCardCount int `json:"device_card_count" description:"设备卡数量"`
TotalCardCount int `json:"total_card_count" description:"总卡数量"`
FailedCount int `json:"failed_count" description:"失败数量"`
}
type AllocateCardsPreviewResp struct {
StandaloneCards []StandaloneCard `json:"standalone_cards" description:"可直接授权的卡(未绑定设备)"`
DeviceBundles []DeviceBundle `json:"device_bundles" description:"需要整体授权的设备包"`
FailedItems []FailedItem `json:"failed_items" description:"失败的卡"`
Summary AllocatePreviewSummary `json:"summary" description:"汇总信息"`
}
type AllocateCardsReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
ICCIDs []string `json:"iccids" validate:"required,min=1,max=1000,dive,required" required:"true" description:"需要授权的 ICCID 列表"`
ConfirmDeviceBundles bool `json:"confirm_device_bundles" description:"确认整体授权设备下所有卡"`
}
type AllocatedDevice struct {
DeviceID uint `json:"device_id" description:"设备ID"`
DeviceNo string `json:"device_no" description:"设备号"`
CardCount int `json:"card_count" description:"卡数量"`
ICCIDs []string `json:"iccids" description:"卡ICCID列表"`
}
type AllocateCardsResp struct {
SuccessCount int `json:"success_count" description:"成功数量"`
FailCount int `json:"fail_count" description:"失败数量"`
FailedItems []FailedItem `json:"failed_items" description:"失败详情"`
AllocatedDevices []AllocatedDevice `json:"allocated_devices" description:"连带授权的设备列表"`
}
type RecallCardsReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
ICCIDs []string `json:"iccids" validate:"required,min=1,max=1000,dive,required" required:"true" description:"需要回收授权的 ICCID 列表"`
}
type RecalledDevice struct {
DeviceID uint `json:"device_id" description:"设备ID"`
DeviceNo string `json:"device_no" description:"设备号"`
CardCount int `json:"card_count" description:"卡数量"`
ICCIDs []string `json:"iccids" description:"卡ICCID列表"`
}
type RecallCardsResp struct {
SuccessCount int `json:"success_count" description:"成功数量"`
FailCount int `json:"fail_count" description:"失败数量"`
FailedItems []FailedItem `json:"failed_items" description:"失败详情"`
RecalledDevices []RecalledDevice `json:"recalled_devices" description:"连带回收的设备列表"`
}
type EnterpriseCardListReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
Status *int `json:"status" query:"status" description:"卡状态"`
CarrierID *uint `json:"carrier_id" query:"carrier_id" description:"运营商ID"`
ICCID string `json:"iccid" query:"iccid" description:"ICCID模糊查询"`
DeviceNo string `json:"device_no" query:"device_no" description:"设备号(模糊查询)"`
}
type EnterpriseCardItem struct {
ID uint `json:"id" description:"卡ID"`
ICCID string `json:"iccid" description:"ICCID"`
MSISDN string `json:"msisdn" description:"手机号"`
DeviceID *uint `json:"device_id,omitempty" description:"设备ID"`
DeviceNo string `json:"device_no" description:"设备号"`
CarrierID uint `json:"carrier_id" description:"运营商ID"`
CarrierName string `json:"carrier_name" description:"运营商名称"`
PackageID *uint `json:"package_id,omitempty" description:"套餐ID"`
PackageName string `json:"package_name" description:"套餐名称"`
Status int `json:"status" description:"状态"`
StatusName string `json:"status_name" description:"状态名称"`
NetworkStatus int `json:"network_status" description:"网络状态"`
NetworkStatusName string `json:"network_status_name" description:"网络状态名称"`
}
type EnterpriseCardPageResult struct {
Items []EnterpriseCardItem `json:"items" description:"卡列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// SuspendCardReq 停机卡请求
type SuspendCardReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
CardID uint `json:"-" params:"card_id" path:"card_id" validate:"required" required:"true" description:"卡ID"`
}
// ResumeCardReq 复机卡请求
type ResumeCardReq struct {
ID uint `json:"-" params:"id" path:"id" validate:"required" required:"true" description:"企业ID"`
CardID uint `json:"-" params:"card_id" path:"card_id" validate:"required" required:"true" description:"卡ID"`
}

View File

@@ -0,0 +1,105 @@
package dto
type CreateEnterpriseReq struct {
EnterpriseName string `json:"enterprise_name" validate:"required,max=100" required:"true" maximum:"100" description:"企业名称"`
EnterpriseCode string `json:"enterprise_code" validate:"required,max=50" required:"true" maximum:"50" description:"企业编号(唯一)"`
OwnerShopID *uint `json:"owner_shop_id" description:"归属店铺ID可不填则归属平台"`
LegalPerson string `json:"legal_person" validate:"max=50" maximum:"50" description:"法人代表"`
ContactName string `json:"contact_name" validate:"required,max=50" required:"true" maximum:"50" description:"联系人姓名"`
ContactPhone string `json:"contact_phone" validate:"required,max=20" required:"true" maximum:"20" description:"联系人电话"`
LoginPhone string `json:"login_phone" validate:"required,len=11" required:"true" description:"登录手机号(作为企业账号)"`
Password string `json:"password" validate:"required,min=6,max=20" required:"true" minimum:"6" maximum:"20" description:"登录密码"`
BusinessLicense string `json:"business_license" validate:"max=100" maximum:"100" description:"营业执照号"`
Province string `json:"province" validate:"max=50" maximum:"50" description:"省份"`
City string `json:"city" validate:"max=50" maximum:"50" description:"城市"`
District string `json:"district" validate:"max=50" maximum:"50" description:"区县"`
Address string `json:"address" validate:"max=255" maximum:"255" description:"详细地址"`
}
type UpdateEnterpriseBody struct {
OwnerShopID *uint `json:"owner_shop_id" description:"归属店铺ID"`
EnterpriseName *string `json:"enterprise_name" validate:"omitempty,max=100" maximum:"100" description:"企业名称"`
EnterpriseCode *string `json:"enterprise_code" validate:"omitempty,max=50" maximum:"50" description:"企业编号"`
LegalPerson *string `json:"legal_person" validate:"omitempty,max=50" maximum:"50" description:"法人代表"`
ContactName *string `json:"contact_name" validate:"omitempty,max=50" maximum:"50" description:"联系人姓名"`
ContactPhone *string `json:"contact_phone" validate:"omitempty,max=20" maximum:"20" description:"联系人电话"`
BusinessLicense *string `json:"business_license" validate:"omitempty,max=100" maximum:"100" description:"营业执照号"`
Province *string `json:"province" validate:"omitempty,max=50" maximum:"50" description:"省份"`
City *string `json:"city" validate:"omitempty,max=50" maximum:"50" description:"城市"`
District *string `json:"district" validate:"omitempty,max=50" maximum:"50" description:"区县"`
Address *string `json:"address" validate:"omitempty,max=255" maximum:"255" description:"详细地址"`
}
type UpdateEnterpriseReq struct {
IDReq
UpdateEnterpriseBody
}
type EnterpriseListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
EnterpriseName string `json:"enterprise_name" query:"enterprise_name" description:"企业名称(模糊查询)"`
LoginPhone string `json:"login_phone" query:"login_phone" description:"登录手机号(模糊查询)"`
ContactPhone string `json:"contact_phone" query:"contact_phone" description:"联系人电话(模糊查询)"`
OwnerShopID *uint `json:"owner_shop_id" query:"owner_shop_id" description:"归属店铺ID"`
Status *int `json:"status" query:"status" description:"状态0=禁用, 1=启用)"`
}
type EnterpriseItem struct {
ID uint `json:"id" description:"企业ID"`
EnterpriseName string `json:"enterprise_name" description:"企业名称"`
EnterpriseCode string `json:"enterprise_code" description:"企业编号"`
OwnerShopID *uint `json:"owner_shop_id,omitempty" description:"归属店铺ID"`
OwnerShopName string `json:"owner_shop_name" description:"归属店铺名称"`
LegalPerson string `json:"legal_person" description:"法人代表"`
ContactName string `json:"contact_name" description:"联系人姓名"`
ContactPhone string `json:"contact_phone" description:"联系人电话"`
LoginPhone string `json:"login_phone" description:"登录手机号"`
BusinessLicense string `json:"business_license" description:"营业执照号"`
Province string `json:"province" description:"省份"`
City string `json:"city" description:"城市"`
District string `json:"district" description:"区县"`
Address string `json:"address" description:"详细地址"`
Status int `json:"status" description:"状态0=禁用, 1=启用)"`
StatusName string `json:"status_name" description:"状态名称"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
type EnterprisePageResult struct {
Items []EnterpriseItem `json:"items" description:"企业列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
type UpdateEnterpriseStatusBody struct {
Status int `json:"status" validate:"required,oneof=0 1" required:"true" enum:"0,1" description:"状态0=禁用, 1=启用)"`
}
type UpdateEnterpriseStatusReq struct {
IDReq
UpdateEnterpriseStatusBody
}
type UpdateEnterprisePasswordBody struct {
Password string `json:"password" validate:"required,min=6,max=20" required:"true" minimum:"6" maximum:"20" description:"新密码"`
}
type UpdateEnterprisePasswordReq struct {
IDReq
UpdateEnterprisePasswordBody
}
type CreateEnterpriseResp struct {
Enterprise EnterpriseItem `json:"enterprise" description:"企业信息"`
AccountID uint `json:"account_id" description:"账号ID"`
}
// CreateEnterpriseRequest 创建企业请求(兼容旧接口)
type CreateEnterpriseRequest = CreateEnterpriseReq
// UpdateEnterpriseRequest 更新企业请求(兼容旧接口)
type UpdateEnterpriseRequest = UpdateEnterpriseBody
// EnterpriseResponse 企业响应(兼容旧接口)
type EnterpriseResponse = EnterpriseItem

View File

@@ -0,0 +1,66 @@
package dto
type MyCommissionSummaryResp struct {
ShopID uint `json:"shop_id" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
TotalCommission int64 `json:"total_commission" description:"累计佣金(分)"`
WithdrawnCommission int64 `json:"withdrawn_commission" description:"已提现佣金(分)"`
UnwithdrawCommission int64 `json:"unwithdraw_commission" description:"未提现佣金(分)"`
FrozenCommission int64 `json:"frozen_commission" description:"冻结佣金(分)"`
WithdrawingCommission int64 `json:"withdrawing_commission" description:"提现中佣金(分)"`
AvailableCommission int64 `json:"available_commission" description:"可提现佣金(分)"`
}
type CreateMyWithdrawalReq struct {
Amount int64 `json:"amount" validate:"required,min=1" required:"true" minimum:"1" description:"提现金额(分)"`
WithdrawalMethod string `json:"withdrawal_method" validate:"required,oneof=alipay" required:"true" enum:"alipay" description:"收款类型"`
AccountName string `json:"account_name" validate:"required,max=50" required:"true" maximum:"50" description:"收款人姓名"`
AccountNumber string `json:"account_number" validate:"required,max=100" required:"true" maximum:"100" description:"收款账号"`
}
type CreateMyWithdrawalResp struct {
ID uint `json:"id" description:"提现申请ID"`
WithdrawalNo string `json:"withdrawal_no" description:"提现单号"`
Amount int64 `json:"amount" description:"提现金额(分)"`
FeeRate int64 `json:"fee_rate" description:"手续费比率(基点)"`
Fee int64 `json:"fee" description:"手续费(分)"`
ActualAmount int64 `json:"actual_amount" description:"实际到账金额(分)"`
Status int `json:"status" description:"状态"`
StatusName string `json:"status_name" description:"状态名称"`
CreatedAt string `json:"created_at" description:"申请时间"`
}
type MyWithdrawalListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
Status *int `json:"status" query:"status" description:"状态1=待审批, 2=已通过, 3=已拒绝)"`
StartTime string `json:"start_time" query:"start_time" description:"申请开始时间"`
EndTime string `json:"end_time" query:"end_time" description:"申请结束时间"`
}
type MyCommissionRecordListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
CommissionType *string `json:"commission_type" query:"commission_type" description:"佣金类型"`
ICCID string `json:"iccid" query:"iccid" description:"ICCID模糊查询"`
DeviceNo string `json:"device_no" query:"device_no" description:"设备号(模糊查询)"`
OrderNo string `json:"order_no" query:"order_no" description:"订单号(模糊查询)"`
}
type MyCommissionRecordItem struct {
ID uint `json:"id" description:"佣金记录ID"`
ShopID uint `json:"shop_id" description:"店铺ID"`
OrderID uint `json:"order_id" description:"订单ID"`
CommissionType string `json:"commission_type" description:"佣金类型 (one_time:一次性, long_term:长期)"`
Amount int64 `json:"amount" description:"佣金金额(分)"`
Status int `json:"status" description:"状态 (1:已冻结, 2:解冻中, 3:已发放, 4:已失效)"`
StatusName string `json:"status_name" description:"状态名称"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
type MyCommissionRecordPageResult struct {
Items []MyCommissionRecordItem `json:"items" description:"佣金记录列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}

View File

@@ -0,0 +1,81 @@
package dto
// CreatePermissionRequest 创建权限请求
type CreatePermissionRequest struct {
PermName string `json:"perm_name" validate:"required,min=1,max=50" required:"true" minLength:"1" maxLength:"50" description:"权限名称"`
PermCode string `json:"perm_code" validate:"required,min=1,max=100" required:"true" minLength:"1" maxLength:"100" description:"权限编码"`
PermType int `json:"perm_type" validate:"required,min=1,max=2" required:"true" minimum:"1" maximum:"2" description:"权限类型 (1:菜单, 2:按钮)"`
Platform string `json:"platform" validate:"omitempty,oneof=all web h5" description:"适用端口 (all:全部, web:Web后台, h5:H5端),默认为 all"`
URL string `json:"url" validate:"omitempty,max=255" maxLength:"255" description:"请求路径"`
ParentID *uint `json:"parent_id" description:"父权限ID"`
Sort int `json:"sort" validate:"omitempty,min=0" minimum:"0" description:"排序值"`
}
// UpdatePermissionRequest 更新权限请求
type UpdatePermissionRequest struct {
PermName *string `json:"perm_name" validate:"omitempty,min=1,max=50" minLength:"1" maxLength:"50" description:"权限名称"`
PermCode *string `json:"perm_code" validate:"omitempty,min=1,max=100" minLength:"1" maxLength:"100" description:"权限编码"`
Platform *string `json:"platform" validate:"omitempty,oneof=all web h5" description:"适用端口 (all:全部, web:Web后台, h5:H5端)"`
URL *string `json:"url" validate:"omitempty,max=255" maxLength:"255" description:"请求路径"`
ParentID *uint `json:"parent_id" description:"父权限ID"`
Sort *int `json:"sort" validate:"omitempty,min=0" minimum:"0" description:"排序值"`
Status *int `json:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// UpdatePermissionParams 更新权限参数聚合
type UpdatePermissionParams struct {
IDReq
UpdatePermissionRequest
}
// PermissionListRequest 权限列表查询请求
type PermissionListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
PermName string `json:"perm_name" query:"perm_name" validate:"omitempty,max=50" maxLength:"50" description:"权限名称模糊查询"`
PermCode string `json:"perm_code" query:"perm_code" validate:"omitempty,max=100" maxLength:"100" description:"权限编码模糊查询"`
PermType *int `json:"perm_type" query:"perm_type" validate:"omitempty,min=1,max=2" minimum:"1" maximum:"2" description:"权限类型 (1:菜单, 2:按钮)"`
Platform string `json:"platform" query:"platform" validate:"omitempty,oneof=all web h5" description:"适用端口 (all:全部, web:Web后台, h5:H5端)"`
AvailableForRoleType *int `json:"available_for_role_type" query:"available_for_role_type" validate:"omitempty,min=1,max=2" minimum:"1" maximum:"2" description:"可用角色类型 (1:平台角色, 2:客户角色)"`
ParentID *uint `json:"parent_id" query:"parent_id" description:"父权限ID"`
Status *int `json:"status" query:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// PermissionResponse 权限响应
type PermissionResponse struct {
ID uint `json:"id" description:"权限ID"`
PermName string `json:"perm_name" description:"权限名称"`
PermCode string `json:"perm_code" description:"权限编码"`
PermType int `json:"perm_type" description:"权限类型 (1:菜单, 2:按钮)"`
Platform string `json:"platform" description:"适用端口 (all:全部, web:Web后台, h5:H5端)"`
AvailableForRoleTypes string `json:"available_for_role_types" description:"可用角色类型 (1:平台角色, 2:客户角色)"`
URL string `json:"url,omitempty" description:"请求路径"`
ParentID *uint `json:"parent_id,omitempty" description:"父权限ID"`
Sort int `json:"sort" description:"排序值"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
Creator uint `json:"creator" description:"创建人ID"`
Updater uint `json:"updater" description:"更新人ID"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}
// PermissionPageResult 权限分页响应
type PermissionPageResult struct {
Items []PermissionResponse `json:"items" description:"权限列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// PermissionTreeNode 权限树节点(用于层级展示)
type PermissionTreeNode struct {
ID uint `json:"id" description:"权限ID"`
PermName string `json:"perm_name" description:"权限名称"`
PermCode string `json:"perm_code" description:"权限编码"`
PermType int `json:"perm_type" description:"权限类型 (1:菜单, 2:按钮)"`
Platform string `json:"platform" description:"适用端口 (all:全部, web:Web后台, h5:H5端)"`
AvailableForRoleTypes string `json:"available_for_role_types" description:"可用角色类型 (1:平台角色, 2:客户角色)"`
URL string `json:"url,omitempty" description:"请求路径"`
Sort int `json:"sort" description:"排序值"`
Children []*PermissionTreeNode `json:"children,omitempty" description:"子权限列表"`
}

View File

@@ -0,0 +1,30 @@
package dto
// CreatePersonalCustomerRequest 创建个人客户请求
type CreatePersonalCustomerRequest struct {
Phone string `json:"phone" validate:"required" required:"true" description:"手机号"`
Nickname string `json:"nickname" description:"昵称"`
AvatarURL string `json:"avatar_url" description:"头像URL"`
WxOpenID string `json:"wx_open_id" description:"微信OpenID"`
WxUnionID string `json:"wx_union_id" description:"微信UnionID"`
}
// UpdatePersonalCustomerRequest 更新个人客户请求
type UpdatePersonalCustomerRequest struct {
Phone *string `json:"phone" description:"手机号"`
Nickname *string `json:"nickname" description:"昵称"`
AvatarURL *string `json:"avatar_url" description:"头像URL"`
}
// PersonalCustomerResponse 个人客户响应
type PersonalCustomerResponse struct {
ID uint `json:"id" description:"客户ID"`
Phone string `json:"phone" description:"手机号"`
Nickname string `json:"nickname" description:"昵称"`
AvatarURL string `json:"avatar_url" description:"头像URL"`
WxOpenID string `json:"wx_open_id" description:"微信OpenID"`
WxUnionID string `json:"wx_union_id" description:"微信UnionID"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}

View File

@@ -0,0 +1,79 @@
package dto
// CreateRoleRequest 创建角色请求
type CreateRoleRequest struct {
RoleName string `json:"role_name" validate:"required,min=1,max=50" required:"true" minLength:"1" maxLength:"50" description:"角色名称"`
RoleDesc string `json:"role_desc" validate:"omitempty,max=255" maxLength:"255" description:"角色描述"`
RoleType int `json:"role_type" validate:"required,min=1,max=2" required:"true" minimum:"1" maximum:"2" description:"角色类型 (1:平台角色, 2:客户角色)"`
}
// UpdateRoleRequest 更新角色请求
type UpdateRoleRequest struct {
RoleName *string `json:"role_name" validate:"omitempty,min=1,max=50" minLength:"1" maxLength:"50" description:"角色名称"`
RoleDesc *string `json:"role_desc" validate:"omitempty,max=255" maxLength:"255" description:"角色描述"`
Status *int `json:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// UpdateRoleParams 更新角色参数聚合
type UpdateRoleParams struct {
IDReq
UpdateRoleRequest
}
// RoleListRequest 角色列表查询请求
type RoleListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
RoleName string `json:"role_name" query:"role_name" validate:"omitempty,max=50" maxLength:"50" description:"角色名称模糊查询"`
RoleType *int `json:"role_type" query:"role_type" validate:"omitempty,min=1,max=2" minimum:"1" maximum:"2" description:"角色类型 (1:平台角色, 2:客户角色)"`
Status *int `json:"status" query:"status" validate:"omitempty,min=0,max=1" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// RoleResponse 角色响应
type RoleResponse struct {
ID uint `json:"id" description:"角色ID"`
RoleName string `json:"role_name" description:"角色名称"`
RoleDesc string `json:"role_desc" description:"角色描述"`
RoleType int `json:"role_type" description:"角色类型 (1:平台角色, 2:客户角色)"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
Creator uint `json:"creator" description:"创建人ID"`
Updater uint `json:"updater" description:"更新人ID"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}
// RolePageResult 角色分页响应
type RolePageResult struct {
Items []RoleResponse `json:"items" description:"角色列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// AssignPermissionsRequest 分配权限请求
type AssignPermissionsRequest struct {
PermIDs []uint `json:"perm_ids" validate:"required,min=1" required:"true" minItems:"1" description:"权限ID列表"`
}
// AssignPermissionsParams 分配权限参数聚合
type AssignPermissionsParams struct {
IDReq
AssignPermissionsRequest
}
// RemovePermissionParams 移除权限参数聚合
type RemovePermissionParams struct {
RoleID uint `path:"role_id" required:"true" description:"角色ID"`
PermID uint `path:"perm_id" required:"true" description:"权限ID"`
}
// UpdateRoleStatusRequest 更新角色状态请求
type UpdateRoleStatusRequest struct {
Status int `json:"status" validate:"required,min=0,max=1" required:"true" minimum:"0" maximum:"1" description:"状态 (0:禁用, 1:启用)"`
}
// UpdateRoleStatusParams 更新角色状态参数聚合
type UpdateRoleStatusParams struct {
IDReq
UpdateRoleStatusRequest
}

View File

@@ -0,0 +1,16 @@
package dto
// RolePermissionResponse 角色-权限关联响应
type RolePermissionResponse struct {
ID uint `json:"id" description:"关联ID"`
RoleID uint `json:"role_id" description:"角色ID"`
PermID uint `json:"perm_id" description:"权限ID"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
CreatedAt string `json:"created_at" description:"创建时间"`
}
// RolePermissionsResponse 角色的权限列表响应
type RolePermissionsResponse struct {
RoleID uint `json:"role_id" description:"角色ID"`
Permissions []*PermissionResponse `json:"permissions" description:"权限列表"`
}

View File

@@ -0,0 +1,73 @@
package dto
// ShopAccountListRequest 代理商账号列表查询请求
type ShopAccountListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
ShopID *uint `json:"shop_id" query:"shop_id" validate:"omitempty,min=1" minimum:"1" description:"店铺ID过滤"`
Username string `json:"username" query:"username" validate:"omitempty,max=50" maxLength:"50" description:"用户名(模糊查询)"`
Phone string `json:"phone" query:"phone" validate:"omitempty,len=11" minLength:"11" maxLength:"11" description:"手机号(精确查询)"`
Status *int `json:"status" query:"status" validate:"omitempty,oneof=0 1" description:"状态 (0:禁用, 1:启用)"`
}
// CreateShopAccountRequest 创建代理商账号请求
type CreateShopAccountRequest struct {
ShopID uint `json:"shop_id" validate:"required,min=1" required:"true" minimum:"1" description:"店铺ID"`
Username string `json:"username" validate:"required,min=3,max=50" required:"true" minLength:"3" maxLength:"50" description:"用户名"`
Phone string `json:"phone" validate:"required,len=11" required:"true" minLength:"11" maxLength:"11" description:"手机号"`
Password string `json:"password" validate:"required,min=8,max=32" required:"true" minLength:"8" maxLength:"32" description:"密码"`
}
// UpdateShopAccountRequest 更新代理商账号请求(不包含 phone 和 password按照业务规则不允许修改
type UpdateShopAccountRequest struct {
Username string `json:"username" validate:"required,min=3,max=50" required:"true" minLength:"3" maxLength:"50" description:"用户名"`
}
// UpdateShopAccountPasswordRequest 修改代理商账号密码请求(管理员重置)
type UpdateShopAccountPasswordRequest struct {
NewPassword string `json:"new_password" validate:"required,min=8,max=32" required:"true" minLength:"8" maxLength:"32" description:"新密码"`
}
// UpdateShopAccountStatusRequest 修改代理商账号状态请求
type UpdateShopAccountStatusRequest struct {
Status int `json:"status" validate:"required,oneof=0 1" required:"true" description:"状态 (0:禁用, 1:启用)"`
}
// ShopAccountResponse 代理商账号响应
type ShopAccountResponse struct {
ID uint `json:"id" description:"账号ID"`
ShopID uint `json:"shop_id" description:"店铺ID"`
ShopName string `json:"shop_name,omitempty" description:"店铺名称"`
Username string `json:"username" description:"用户名"`
Phone string `json:"phone" description:"手机号"`
UserType int `json:"user_type" description:"用户类型 (1:超级管理员, 2:平台用户, 3:代理账号, 4:企业账号)"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}
// ShopAccountPageResult 代理账号分页响应
type ShopAccountPageResult struct {
Items []ShopAccountResponse `json:"items" description:"代理账号列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// UpdateShopAccountParams 更新代理账号聚合参数 (用于文档生成)
type UpdateShopAccountParams struct {
IDReq
UpdateShopAccountRequest
}
// UpdateShopAccountPasswordParams 修改代理账号密码聚合参数 (用于文档生成)
type UpdateShopAccountPasswordParams struct {
IDReq
UpdateShopAccountPasswordRequest
}
// UpdateShopAccountStatusParams 修改代理账号状态聚合参数 (用于文档生成)
type UpdateShopAccountStatusParams struct {
IDReq
UpdateShopAccountStatusRequest
}

View File

@@ -0,0 +1,136 @@
package dto
// ========================================
// 代理商佣金查询 DTO
// ========================================
// ShopCommissionSummaryListReq 代理商佣金列表查询请求
type ShopCommissionSummaryListReq struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
ShopName string `json:"shop_name" query:"shop_name" validate:"omitempty,max=100" maxLength:"100" description:"店铺名称(模糊查询)"`
Username string `json:"username" query:"username" validate:"omitempty,max=50" maxLength:"50" description:"主账号用户名(模糊查询)"`
}
// ShopCommissionSummaryItem 代理商佣金汇总项
type ShopCommissionSummaryItem struct {
ShopID uint `json:"shop_id" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
ShopCode string `json:"shop_code" description:"店铺编码"`
Username string `json:"username" description:"主账号用户名"`
Phone string `json:"phone" description:"主账号手机号"`
TotalCommission int64 `json:"total_commission" description:"总佣金(分)"`
WithdrawnCommission int64 `json:"withdrawn_commission" description:"已提现佣金(分)"`
UnwithdrawCommission int64 `json:"unwithdraw_commission" description:"未提现佣金(分)"`
FrozenCommission int64 `json:"frozen_commission" description:"冻结中佣金(分)"`
WithdrawingCommission int64 `json:"withdrawing_commission" description:"提现中佣金(分)"`
AvailableCommission int64 `json:"available_commission" description:"可提现佣金(分)"`
CreatedAt string `json:"created_at" description:"店铺创建时间"`
}
// ShopCommissionSummaryPageResult 代理商佣金列表分页响应
type ShopCommissionSummaryPageResult struct {
Items []ShopCommissionSummaryItem `json:"items" description:"代理商佣金列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// ========================================
// 代理商提现记录查询 DTO
// ========================================
// ShopWithdrawalRequestListReq 代理商提现记录查询请求
type ShopWithdrawalRequestListReq struct {
ShopID uint `json:"-" params:"shop_id" path:"shop_id" validate:"required" description:"店铺ID"`
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
WithdrawalNo string `json:"withdrawal_no" query:"withdrawal_no" validate:"omitempty,max=50" maxLength:"50" description:"提现单号(精确查询)"`
StartTime string `json:"start_time" query:"start_time" validate:"omitempty" description:"申请开始时间格式2006-01-02 15:04:05"`
EndTime string `json:"end_time" query:"end_time" validate:"omitempty" description:"申请结束时间格式2006-01-02 15:04:05"`
}
// ShopWithdrawalRequestItem 代理商提现记录项
type ShopWithdrawalRequestItem struct {
ID uint `json:"id" description:"提现申请ID"`
WithdrawalNo string `json:"withdrawal_no" description:"提现单号"`
Amount int64 `json:"amount" description:"提现金额(分)"`
FeeRate int64 `json:"fee_rate" description:"手续费比率基点100=1%"`
Fee int64 `json:"fee" description:"手续费(分)"`
ActualAmount int64 `json:"actual_amount" description:"实际到账金额(分)"`
Status int `json:"status" description:"状态 (1:待审核, 2:已通过, 3:已拒绝, 4:已到账)"`
StatusName string `json:"status_name" description:"状态名称"`
ShopID uint `json:"shop_id" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
ShopHierarchy string `json:"shop_hierarchy" description:"店铺层级路径格式上上级_上级_本身最多两层上级"`
ApplicantID uint `json:"applicant_id" description:"申请人账号ID"`
ApplicantName string `json:"applicant_name" description:"申请人用户名"`
ProcessorID *uint `json:"processor_id,omitempty" description:"处理人账号ID"`
ProcessorName string `json:"processor_name,omitempty" description:"处理人用户名"`
WithdrawalMethod string `json:"withdrawal_method" description:"提现方式 (alipay:支付宝, wechat:微信, bank:银行卡)"`
PaymentType string `json:"payment_type" description:"放款类型 (manual:人工打款)"`
AccountName string `json:"account_name" description:"收款账户名称"`
AccountNumber string `json:"account_number" description:"收款账号"`
BankName string `json:"bank_name,omitempty" description:"银行名称(银行卡提现时)"`
RejectReason string `json:"reject_reason,omitempty" description:"拒绝原因"`
Remark string `json:"remark,omitempty" description:"备注"`
CreatedAt string `json:"created_at" description:"申请时间"`
ProcessedAt string `json:"processed_at,omitempty" description:"处理时间"`
PaidAt string `json:"paid_at,omitempty" description:"到账时间"`
}
// ShopWithdrawalRequestPageResult 代理商提现记录分页响应
type ShopWithdrawalRequestPageResult struct {
Items []ShopWithdrawalRequestItem `json:"items" description:"提现记录列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// ========================================
// 代理商佣金明细查询 DTO
// ========================================
// ShopCommissionRecordListReq 代理商佣金明细查询请求
type ShopCommissionRecordListReq struct {
ShopID uint `json:"-" params:"shop_id" path:"shop_id" validate:"required" description:"店铺ID"`
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码默认1"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量默认20最大100"`
CommissionType string `json:"commission_type" query:"commission_type" validate:"omitempty,oneof=one_time long_term" description:"佣金类型 (one_time:一次性, long_term:长期)"`
ICCID string `json:"iccid" query:"iccid" validate:"omitempty,max=50" maxLength:"50" description:"ICCID模糊查询"`
DeviceNo string `json:"device_no" query:"device_no" validate:"omitempty,max=50" maxLength:"50" description:"设备号(模糊查询)"`
OrderNo string `json:"order_no" query:"order_no" validate:"omitempty,max=50" maxLength:"50" description:"订单号(模糊查询)"`
}
// ShopCommissionRecordItem 代理商佣金明细项
type ShopCommissionRecordItem struct {
ID uint `json:"id" description:"佣金记录ID"`
Amount int64 `json:"amount" description:"佣金金额(分)"`
BalanceAfter int64 `json:"balance_after" description:"入账后佣金余额(分)"`
CommissionType string `json:"commission_type" description:"佣金类型 (one_time:一次性, long_term:长期)"`
Status int `json:"status" description:"状态 (1:已冻结, 2:解冻中, 3:已发放, 4:已失效)"`
StatusName string `json:"status_name" description:"状态名称"`
OrderID uint `json:"order_id" description:"订单ID"`
OrderNo string `json:"order_no" description:"订单号"`
DeviceNo string `json:"device_no,omitempty" description:"设备号"`
ICCID string `json:"iccid,omitempty" description:"ICCID"`
OrderCreatedAt string `json:"order_created_at" description:"订单创建时间"`
CreatedAt string `json:"created_at" description:"佣金入账时间"`
}
// ShopCommissionRecordPageResult 代理商佣金明细分页响应
type ShopCommissionRecordPageResult struct {
Items []ShopCommissionRecordItem `json:"items" description:"佣金明细列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// ========================================
// 路由参数 DTO
// ========================================
// ShopIDPathParam 店铺ID路径参数
type ShopIDPathParam struct {
ShopID uint `path:"shop_id" description:"店铺ID" required:"true"`
}

View File

@@ -0,0 +1,70 @@
package dto
type ShopListRequest struct {
Page int `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
PageSize int `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
ShopName string `json:"shop_name" query:"shop_name" validate:"omitempty,max=100" maxLength:"100" description:"店铺名称模糊查询"`
ShopCode string `json:"shop_code" query:"shop_code" validate:"omitempty,max=50" maxLength:"50" description:"店铺编号模糊查询"`
ParentID *uint `json:"parent_id" query:"parent_id" validate:"omitempty,min=1" minimum:"1" description:"上级店铺ID"`
Level *int `json:"level" query:"level" validate:"omitempty,min=1,max=7" minimum:"1" maximum:"7" description:"店铺层级 (1-7级)"`
Status *int `json:"status" query:"status" validate:"omitempty,oneof=0 1" description:"状态 (0:禁用, 1:启用)"`
}
type CreateShopRequest struct {
ShopName string `json:"shop_name" validate:"required,min=1,max=100" required:"true" minLength:"1" maxLength:"100" description:"店铺名称"`
ShopCode string `json:"shop_code" validate:"required,min=1,max=50" required:"true" minLength:"1" maxLength:"50" description:"店铺编号"`
ParentID *uint `json:"parent_id" validate:"omitempty,min=1" minimum:"1" description:"上级店铺ID一级店铺可不填"`
ContactName string `json:"contact_name" validate:"omitempty,max=50" maxLength:"50" description:"联系人姓名"`
ContactPhone string `json:"contact_phone" validate:"omitempty,len=11" minLength:"11" maxLength:"11" description:"联系人电话"`
Province string `json:"province" validate:"omitempty,max=50" maxLength:"50" description:"省份"`
City string `json:"city" validate:"omitempty,max=50" maxLength:"50" description:"城市"`
District string `json:"district" validate:"omitempty,max=50" maxLength:"50" description:"区县"`
Address string `json:"address" validate:"omitempty,max=255" maxLength:"255" description:"详细地址"`
InitPassword string `json:"init_password" validate:"required,min=8,max=32" required:"true" minLength:"8" maxLength:"32" description:"初始账号密码"`
InitUsername string `json:"init_username" validate:"required,min=3,max=50" required:"true" minLength:"3" maxLength:"50" description:"初始账号用户名"`
InitPhone string `json:"init_phone" validate:"required,len=11" required:"true" minLength:"11" maxLength:"11" description:"初始账号手机号"`
}
type UpdateShopRequest struct {
ShopName string `json:"shop_name" validate:"required,min=1,max=100" required:"true" minLength:"1" maxLength:"100" description:"店铺名称"`
ContactName string `json:"contact_name" validate:"omitempty,max=50" maxLength:"50" description:"联系人姓名"`
ContactPhone string `json:"contact_phone" validate:"omitempty,len=11" minLength:"11" maxLength:"11" description:"联系人电话"`
Province string `json:"province" validate:"omitempty,max=50" maxLength:"50" description:"省份"`
City string `json:"city" validate:"omitempty,max=50" maxLength:"50" description:"城市"`
District string `json:"district" validate:"omitempty,max=50" maxLength:"50" description:"区县"`
Address string `json:"address" validate:"omitempty,max=255" maxLength:"255" description:"详细地址"`
Status int `json:"status" validate:"required,oneof=0 1" required:"true" description:"状态 (0:禁用, 1:启用)"`
}
// ShopResponse 店铺响应
type ShopResponse struct {
ID uint `json:"id" description:"店铺ID"`
ShopName string `json:"shop_name" description:"店铺名称"`
ShopCode string `json:"shop_code" description:"店铺编号"`
ParentID *uint `json:"parent_id,omitempty" description:"上级店铺ID"`
Level int `json:"level" description:"店铺层级 (1-7级)"`
ContactName string `json:"contact_name" description:"联系人姓名"`
ContactPhone string `json:"contact_phone" description:"联系人电话"`
Province string `json:"province" description:"省份"`
City string `json:"city" description:"城市"`
District string `json:"district" description:"区县"`
Address string `json:"address" description:"详细地址"`
Status int `json:"status" description:"状态 (0:禁用, 1:启用)"`
CreatedAt string `json:"created_at" description:"创建时间"`
UpdatedAt string `json:"updated_at" description:"更新时间"`
}
// ShopPageResult 店铺分页响应
// ShopPageResult 店铺分页响应
type ShopPageResult struct {
Items []ShopResponse `json:"items" description:"店铺列表"`
Total int64 `json:"total" description:"总记录数"`
Page int `json:"page" description:"当前页码"`
Size int `json:"size" description:"每页数量"`
}
// UpdateShopParams 更新店铺聚合参数 (用于文档生成)
type UpdateShopParams struct {
IDReq
UpdateShopRequest
}