telco_server/app/admin/models/bus_models/m_sms_manage.go

608 lines
23 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package bus_models
import (
"go-admin/app/admin/models"
"time"
)
const (
AESKey = "3ca176c2d9d0273695f48c55c3170e32d204e125ac06c050c94e0fcec01679ed"
ShowCount = 100 // 前端展示手机号数量
)
// SmsTask 短信下行记录
type SmsTask struct {
models.Model
CooperativeNumber string `gorm:"column:cooperative_number"` // 合作商编号
CooperativeName string `gorm:"column:cooperative_name"` // 合作商名称
BatchID string `gorm:"column:batch_id"` // 批次ID
ImportID string `gorm:"column:import_id"` // 导入记录IDUUID可为空
SmsContent string `gorm:"column:sms_content"` // 短信内容
SmsContentCost int `gorm:"column:sms_content_cost"` // 短信内容消耗条数
TotalPhoneCount int `gorm:"column:total_phone_count"` // 手机号总数
TotalSmsCount int `gorm:"column:total_sms_count"` // 短信计费条数(条数 * 手机数)
Status int `gorm:"column:status"` // 任务状态0待发送 1发送中 2已完成 3失败 4取消
InterceptFailCount int `gorm:"column:intercept_fail_count"` // 拦截失败数量
ChannelFailCount int `gorm:"column:channel_fail_count"` // 通道失败数量
ScheduleTime *time.Time `gorm:"schedule_time"` // 计划发送时间(定时时间)
}
// SmsTaskBatch 短信批量任务记录
type SmsTaskBatch struct {
models.Model
TaskID uint64 `gorm:"column:task_id"` // 关联任务ID
BatchID string `gorm:"column:batch_id"` // 批次ID
CooperativeNumber string `gorm:"column:cooperative_number"` // 合作商编号
CooperativeName string `gorm:"column:cooperative_name"` // 合作商名称
ImportID string `gorm:"column:import_id"` // 导入记录IDUUID可为空
Num int `gorm:"column:num"` // 本次批次编号
PhoneCount int `gorm:"column:phone_count"` // 本批手机号数量
SmsCount int `gorm:"column:sms_count"` // 本批短信条数
SmsContent string `gorm:"column:sms_content"` // 短信内容
Status int `gorm:"column:status"` // 状态0待发 1发送中 2已完成 3失败 4取消
InterceptFailCount int `gorm:"column:intercept_fail_count"` // 拦截失败数量
ChannelFailCount int `gorm:"column:channel_fail_count"` // 通道发送失败数量
ScheduleTime *time.Time `gorm:"schedule_time"` // 计划发送时间(定时时间)
}
// SmsSendRecord 短信发送明细
type SmsSendRecord struct {
models.Model
TaskID uint64 `gorm:"column:task_id"` // 任务ID
TaskBatchID uint64 `gorm:"column:task_batch_id"` // 批次任务ID
BatchID string `gorm:"column:batch_id"` // 批次ID
CooperativeNumber string `gorm:"column:cooperative_number"` // 合作商编号
CooperativeName string `gorm:"column:cooperative_name"` // 合作商名称
Phone string `gorm:"column:phone"` // 手机号码
SmsContent string `gorm:"column:sms_content"` // 发送内容
ReceiveTime *time.Time `gorm:"column:receive_time"` // 回执时间
Status int `gorm:"column:status"` // 任务状态1 已发送 2 发送失败)
SmsCode string `gorm:"column:sms_code"` // 发送状态码
}
// SensitiveWord 敏感词
type SensitiveWord struct {
models.Model
Word string `json:"word" gorm:"not null;uniqueIndex:uq_word;column:word;comment:敏感词"`
Category string `json:"category,omitempty" gorm:"column:category;comment:分类"` // Category can be optional.
Description string `json:"description,omitempty" gorm:"column:description;comment:描述"` // Description can be optional.
IsEnabled bool `json:"is_enabled" gorm:"default:1;column:is_enabled;comment:是否启用"`
}
// SmsUplinkLog 短信上行记录
type SmsUplinkLog struct {
models.Model
PhoneNumber string `gorm:"column:phone_number;type:varchar(20);not null" json:"phone_number"` // 手机号
ReplyContent string `gorm:"column:reply_content;type:text;not null" json:"reply_content"` // 回复内容
BatchID string `gorm:"column:batch_id;type:varchar(64);not null" json:"batch_id"` // 下行短信批次 ID
}
// SmsSignatureRealname 签名实名制
type SmsSignatureRealname struct {
models.Model
CooperativeNumber string `gorm:"column:cooperative_number"` // 合作商编号
CooperativeName string `gorm:"column:cooperative_name"` // 合作商名称
Signature string `json:"signature"` // 签名
SignatureSource string `json:"signature_source"` // 签名来源
CompanyName string `json:"company_name"` // 企业名称
CompanyCreditCode string `json:"company_credit_code"` // 企业信用代码
ResponsibleName string `json:"responsible_name"` // 责任人名称
ResponsibleIDType int `json:"responsible_id_type"` // 责任人证件类型
ResponsibleIDNumber string `json:"responsible_id_number"` // 责任人证件号
BusinessType int `json:"business_type"` // 业务类型
UsageCategory int `json:"usage_category"` // 用途类别
UsageDetail string `json:"usage_detail"` // 具体用途
AgentName string `json:"agent_name"` // 经办人名称
AgentIDType int `json:"agent_id_type"` // 经办人证件类型
AgentIDNumber string `json:"agent_id_number"` // 经办人证件号
SmsTemplate string `json:"sms_template"` // 短信模板
IsActive int `json:"is_active"` // 是否有效0 无效1 有效)
}
// SmsContactCategory 通讯录分类
type SmsContactCategory struct {
models.Model
Name string `json:"name" gorm:"type:varchar(100);not null"`
ParentID uint64 `json:"parent_id" gorm:"default:0"`
Children []SmsContactCategory `json:"children,omitempty" gorm:"-"`
}
// SmsContact 通讯录
type SmsContact struct {
models.Model
CategoryID uint64 `json:"category_id" gorm:"default:0"`
CooperativeNumber string `json:"cooperative_number"` // 合作商编号
CooperativeName string `json:"cooperative_name"` // 合作商名称
Name string `json:"name"`
PhoneNumber string `json:"phone_number"`
Gender string `json:"gender"`
Birthday *time.Time `json:"birthday"`
Company string `json:"company"`
Address string `json:"address"`
Remark string `json:"remark"`
}
// SmsPhraseCategory 短语分类
type SmsPhraseCategory struct {
models.Model
Name string `json:"name" gorm:"type:varchar(100);not null"`
ParentID uint64 `json:"parent_id" gorm:"default:0"`
Children []SmsPhraseCategory `json:"children,omitempty" gorm:"-"`
}
// SmsPhrase 通讯录-常用短语
type SmsPhrase struct {
models.Model
Content string `json:"content" gorm:"type:varchar(255);not null"`
CategoryID uint `json:"category_id" gorm:"default:0"`
}
// SmsCommonNumber 常用号码列表
type SmsCommonNumber struct {
models.Model
Name string `json:"name"`
PhoneNumbers string `json:"phone_numbers"` // 如:"12345678901,13322223333"
PhoneCount int `json:"phone_count" gorm:"-"` // 号码数量(从 phone_numbers 计算)
}
// SmsBlackList 黑名单列表
type SmsBlackList struct {
models.Model
PhoneNumber string `json:"phone_number"`
Remark string `json:"remark"`
}
// SmsTemplate 短信模版表
type SmsTemplate struct {
models.Model
CooperativeNumber string `gorm:"column:cooperative_number"` // 合作商编号
CooperativeName string `gorm:"column:cooperative_name"` // 合作商名称
Content string `json:"content"` // 模版内容(必填)
ExpireAt *time.Time `json:"expire_at"` // 到期时间(有效期)
Remark string `json:"remark"` // 备注
Status int `json:"status"` // 状态0=审核中 1=正常 2=拒绝 3=过期
}
type ContactInput struct {
CategoryID []uint64 `json:"category_id" binding:"required"`
ID uint64 `json:"id"` // 联系人ID
Name string `json:"name"`
PhoneNumber string `json:"phone_number"`
Gender string `json:"gender"`
BirthdayStr string `json:"birthday"` // 先用 string 接收
Company string `json:"company"`
Address string `json:"address"`
Remark string `json:"remark"`
}
type EditContactInput struct {
CategoryID uint64 `json:"category_id" binding:"required"`
ID uint64 `json:"id"` // 联系人ID
Name string `json:"name"`
PhoneNumber string `json:"phone_number"`
Gender string `json:"gender"`
BirthdayStr string `json:"birthday"` // 先用 string 接收
Company string `json:"company"`
Address string `json:"address"`
Remark string `json:"remark"`
}
type MassImportPhoneResp struct {
List []string `json:"list"` // 加密后的数据
ImportSerialNumber string `json:"import_serial_number"` // 导入excel返回的编号
}
type SendSmsReq struct {
Data string `json:"data"` // 加密数据
PhoneList []string `json:"phone_list"` // 手机号码列表
ImportSerialNumber string `json:"import_serial_number"` // 导入excel返回的编号
SmsContent string `json:"sms_content"` // 短信内容
SendTime string `json:"send_time"` // 发送时间(定时设置)
}
type ExportMessPhoneReq struct {
Data string `json:"data"` // 加密数据
PhoneList []string `json:"phone_list"` // 手机号码列表
ImportSerialNumber string `json:"import_serial_number"` // 导入excel返回的编号
}
type ExportMessPhoneResp struct {
ExportUrl string `json:"export_url"` // 下载链接
}
type CheckSensitiveWordsReq struct {
Content string `json:"content" binding:"required"` // 短信内容
}
type CheckSensitiveWordsResponse struct {
HasSensitiveWords bool `json:"has_sensitive_words"` // 是否检测到敏感词true 检测到; false 未检测到
SensitiveWords []string `json:"sensitive_words"` // 敏感词
}
// SmsTaskQueryRequest 请求参数结构体(带分页)
type SmsTaskQueryRequest struct {
BatchID string `json:"batch_id"` // 批次ID
StartTime string `json:"start_time"` // 格式2006-01-02 15:04:05
EndTime string `json:"end_time"` // 格式2006-01-02 15:04:05
MinTotalSms int `json:"min_total_sms"` // 最小短信计费条数
MinPhoneCount int `json:"min_phone_count"` // 最小手机号总数
Status *int `json:"status"` // 状态(可选)
Page int `json:"page"` // 页码,从 1 开始
PageSize int `json:"page_size"` // 每页条数
}
// SmsTaskQueryResponse 响应结构体(带分页)
type SmsTaskQueryResponse struct {
List []SmsTask `json:"list"` // 数据列表
Total int64 `json:"total"` // 总条数
Page int `json:"page"` // 当前页码
PageSize int `json:"page_size"` // 每页条数
TotalPage int `json:"total_page"` // 总页数
}
type SmsSendRecordQueryReq struct {
BatchID string `json:"batch_id"`
Phone string `json:"phone"`
StartTime string `json:"start_time"`
EndTime string `json:"end_time"`
MinSegments int `json:"min_segments"`
SmsCode string `json:"sms_code"`
Page int `json:"page"` // 页码,从 1 开始
PageSize int `json:"page_size"` // 每页条数
}
type SmsSendRecordQueryResp struct {
List []SmsSendRecord `json:"list"`
Total int64 `json:"total"` // 总条数
Page int `json:"page"` // 当前页码
PageSize int `json:"page_size"` // 每页条数
TotalPage int `json:"total_page"` // 总页数
}
// GetPhonesByBatchIDReq 请求结构体
type GetPhonesByBatchIDReq struct {
BatchID string `json:"batch_id" binding:"required"` // 批次ID
}
// GetPhonesByBatchIDResp 响应结构体
type GetPhonesByBatchIDResp struct {
Phones []string `json:"phones"` // 手机号列表
}
type SmsTaskScheduledQueryRequest struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
StartTime string `json:"start_time"` // 查询开始时间schedule_time
EndTime string `json:"end_time"` // 查询结束时间schedule_time
}
type SmsUplinkQueryRequest struct {
PhoneNumber string `json:"phone_number"` // 手机号
SendID uint64 `json:"send_id"` // 下行ID
UplinkID uint64 `json:"uplink_id"` // 上行ID
ReplyContent string `json:"reply_content"` // 回复内容关键字
StartTime string `json:"start_time"` // 接收开始时间
EndTime string `json:"end_time"` // 接收结束时间
Page int `json:"page"` // 分页页码
PageSize int `json:"page_size"` // 每页数量
}
type SmsUplinkRecordResponse struct {
UplinkID uint64 `json:"uplink_id"` // 上行ID
PhoneNumber string `json:"phone_number"` // 手机号
SendID uint64 `json:"send_id"` // 下行发送记录ID
SmsContent string `json:"sms_content"` // 下行发送内容
ReplyContent string `json:"reply_content"` // 上行回复内容
ReceiveTime time.Time `json:"receive_time"` // 上行接收时间
SendTime time.Time `json:"send_time"` // 下行发送时间
}
type SmsUplinkQueryResponse struct {
List []SmsUplinkRecordResponse `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPage int64 `json:"total_page"`
}
// BatchUpdateSmsContentRequest 批量修改短信内容请求
type BatchUpdateSmsContentRequest struct {
TaskIDs []uint64 `json:"task_ids"` // 任务ID列表
SmsContent string `json:"sms_content"` // 新的短信内容
}
type BatchUpdateRequest struct {
TaskIDs []uint64 `json:"task_ids"` // 任务ID列表
}
type BatchResetScheduleTimeRequest struct {
TaskIDs []uint64 `json:"task_ids"` // 任务ID列表
ScheduleTime string `json:"schedule_time"` // 新定时时间
}
type DeleteSignatureRealnameRequest struct {
IDs []uint `json:"ids" binding:"required"` // 要删除的记录ID列表
}
type SignatureRealnameQuery struct {
Signature string `json:"signature"`
CooperativeName string `json:"cooperative_name"`
CompanyName string `json:"company_name"`
CompanyCreditCode string `json:"company_credit_code"`
ResponsibleName string `json:"responsible_name"`
UsageCategory int `json:"usage_category"`
IsActive int `json:"is_active"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
type SignatureRealnameQueryResp struct {
List []SmsSignatureRealname `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPage int64 `json:"total_page"`
}
type AddContactCategoryReq struct {
Name string `json:"name" binding:"required"`
ParentID uint `json:"parent_id"` // 默认 0 表示顶级
}
type EditContactCategoryReq struct {
ID uint `json:"id" binding:"required"`
Name string `json:"name" binding:"required"`
}
// DeleteContactCategoryRequest 删除通讯录分类请求
type DeleteContactCategoryRequest struct {
IDs []uint `json:"ids" binding:"required"` // 要删除的分类ID列表
}
// ListContactCategoryRequest 查询通讯录分类树的请求
type ListContactCategoryRequest struct {
CategoryID uint64 `json:"category_id"` // 为空表示查询整个树
}
type SmsContactCategoryTree struct {
ID uint64 `json:"id"`
Name string `json:"name"`
ParentID uint64 `json:"parent_id"`
Children []SmsContactCategoryTree `json:"children,omitempty"`
}
// ContactQuery 请求结构体
type ContactQuery struct {
CategoryID []uint64 `json:"category_id" binding:"required"`
Name string `form:"name"` // 模糊搜索
PhoneNumber string `form:"phone_number"` // 模糊搜索
Page int `form:"page"`
PageSize int `form:"page_size"`
}
// ContactQueryResp 响应结构体
type ContactQueryResp struct {
List []SmsContact `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPage int64 `json:"total_page"`
}
type ContactDeleteRequest struct {
ContactIDs []uint `json:"contact_ids" binding:"required"` // 要删除的记录ID列表
}
// ExportContactsRequest 导出联系人请求参数
type ExportContactsRequest struct {
IDs []uint `json:"ids"` // 联系人ID列表优先
All bool `json:"all"` // 是否导出全部
}
type ExportContactsResp struct {
ExportUrl string `json:"export_url"` // 下载链接
}
type AddPhraseCategoryReq struct {
Name string `json:"name" binding:"required"`
ParentID uint `json:"parent_id"` // 默认 0 表示顶级
}
type EditPhraseCategoryReq struct {
ID uint `json:"id" binding:"required"`
Name string `json:"name" binding:"required"`
}
// DeletePhraseCategoryRequest 删除短语分类请求
type DeletePhraseCategoryRequest struct {
IDs []uint `json:"ids" binding:"required"` // 要删除的分类ID列表
}
// SmsPhraseQuery 查询参数
type SmsPhraseQuery struct {
Content string `form:"content" binding:"required"` // 模糊搜索内容
CategoryID uint `form:"category_id"` // 所属分类ID
Page int `form:"page"`
PageSize int `form:"page_size"`
}
type SmsPhraseListResp struct {
List []SmsPhrase `json:"list"` // 短语列表
Total int64 `json:"total"` // 总条数
Page int `json:"page"` // 当前页
PageSize int `json:"page_size"` // 每页大小
TotalPage int64 `json:"total_page"` // 总页数
}
// SmsPhraseAddOrEdit 新增或编辑参数
type SmsPhraseAddOrEdit struct {
ID uint `json:"id"` // 编辑时用
Content string `json:"content" binding:"required"`
CategoryID uint `json:"category_id" binding:"required"`
}
// SmsPhraseBatchDeleteReq 批量删除
type SmsPhraseBatchDeleteReq struct {
IDs []uint `json:"ids" binding:"required"`
}
// ListPhraseCategoryRequest 查询短语分类树的请求
type ListPhraseCategoryRequest struct {
CategoryID uint64 `json:"category_id"` // 为空表示查询整个树
}
type SmsPhraseCategoryTree struct {
ID uint64 `json:"id"`
Name string `json:"name"`
ParentID uint64 `json:"parent_id"`
Children []SmsPhraseCategoryTree `json:"children,omitempty"`
}
// SmsCommonNumberQuery 查询
type SmsCommonNumberQuery struct {
Name string `json:"name"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
// SmsCommonNumberAddReq 添加常用号码请求结构体
type SmsCommonNumberAddReq struct {
Name string `json:"name" binding:"required"` // 名称
PhoneList []string `json:"phone_list" binding:"required"` // 号码列表
}
// SmsCommonNumberAppendReq 追加常用号码请求结构体
type SmsCommonNumberAppendReq struct {
ID int64 `json:"id" binding:"required"` // 记录ID
PhoneList []string `json:"phone_list" binding:"required"` // 需要追加的号码列表
}
// SmsCommonNumberDetailReq 常用号码详情
type SmsCommonNumberDetailReq struct {
ID int64 `json:"id" binding:"required"` // 记录ID
}
// SmsCommonNumberDeleteReq 删除
type SmsCommonNumberDeleteReq struct {
Ids []uint64 `json:"ids"`
}
// SmsCommonNumberExportReq 导出
type SmsCommonNumberExportReq struct {
All bool `json:"all"` // 是否导出全部
Ids []uint64 `json:"ids"`
}
type SmsCommonNumberExportResp struct {
ExportUrl string `json:"export_url"` // 下载链接
}
type SmsCommonNumberListResp struct {
List []SmsCommonNumber `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
TotalPage int64 `json:"totalPage"`
}
type BlacklistAddReq struct {
PhoneList []string `json:"phone_list" binding:"required"`
Remark string `json:"remark"`
}
// ExportBlacklistRequest 导出黑名单请求
type ExportBlacklistRequest struct {
All bool `json:"all"` // 是否导出全部
Ids []string `json:"ids"` // 指定导出的手机号ID
}
// ExportBlacklistResp 导出响应
type ExportBlacklistResp struct {
ExportUrl string `json:"export_url"`
}
type BlacklistQuery struct {
PhoneNumber string `json:"phone_number"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
type BlacklistListResp struct {
List []SmsBlackList `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPage int64 `json:"total_page"`
}
// SmsBlacklistBatchDeleteReq 批量删除黑名单请求
type SmsBlacklistBatchDeleteReq struct {
IDs []uint `json:"ids"` // 黑名单记录ID
}
// SmsTemplateQuery 短信模版查询参数
type SmsTemplateQuery struct {
Content string `json:"content"` // 模版内容模糊查询
Status int `json:"status"` // 模版状态0=待审核1=正常2=审核拒绝3=已过期)
CreateStart time.Time `json:"create_start"` // 创建时间起
CreateEnd time.Time `json:"create_end"` // 创建时间止
Page int `json:"page"`
PageSize int `json:"page_size"`
}
// SmsTemplateListResp 返回模版列表结构
type SmsTemplateListResp struct {
List []SmsTemplate `json:"list"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPage int64 `json:"total_page"`
}
// SmsTemplateExportReq 短信模版导出请求
type SmsTemplateExportReq struct {
Ids []uint `json:"ids"` // 选择的模版 ID 列表
All bool `json:"all"` // 是否导出全部
}
// ExportTemplateResp 导出结果
type ExportTemplateResp struct {
ExportUrl string `json:"export_url"` // 下载地址
}
type ApproveTemplateRequest struct {
ID uint `json:"id"`
Status int `json:"status"` // 1 正常, 2 审核不通过
}
// SmsTemplateUpdateRequest 修改短信模版请求
type SmsTemplateUpdateRequest struct {
ID uint `json:"id" binding:"required"`
Content string `json:"content" binding:"required"`
ExpireAt *time.Time `json:"expire_at"`
Remark string `json:"remark"`
}
// DeleteIdsRequest 批量删除模版时使用
type DeleteIdsRequest struct {
IDs []uint `json:"ids" binding:"required"`
}
// SmsTemplateCreateRequest 创建短信模版请求
type SmsTemplateCreateRequest struct {
Content string `json:"content" binding:"required"` // 模版内容
ExpireAt *time.Time `json:"expire_at"` // 到期时间
Remark string `json:"remark"` // 备注
}