feat(api): add client app service endpoints

This commit is contained in:
david
2026-07-30 18:04:34 +08:00
parent 47d352b22e
commit 550efb3812
29 changed files with 2147 additions and 44 deletions

View File

@@ -0,0 +1,22 @@
package models
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// CmsContentRead 保存用户对强制内容版本的阅读确认。
type CmsContentRead struct {
Entity // 公共实体字段
UserAccountID uint64 `gorm:"column:user_account_id;not null;uniqueIndex:idx_content_read_user_version" json:"user_account_id"` // 用户内部主键
CmsContentID uint64 `gorm:"column:cms_content_id;not null;uniqueIndex:idx_content_read_user_version" json:"cms_content_id"` // 内容内部主键
VersionNo int `gorm:"column:version_no;not null;uniqueIndex:idx_content_read_user_version" json:"version_no"` // 已确认内容版本
ShownAt time.Time `gorm:"column:shown_at;type:timestamptz;not null" json:"shown_at"` // 客户端展示时间
ConfirmedAt *time.Time `gorm:"column:confirmed_at;type:timestamptz" json:"confirmed_at"` // 用户确认时间
ClientVersion string `gorm:"column:client_version;type:varchar(64);not null;default:''" json:"client_version"` // 客户端版本
DeviceIdentity string `gorm:"column:device_identity;type:varchar(128);not null;default:''" json:"device_identity"` // 客户端设备标识
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;uniqueIndex" json:"request_no"` // 确认幂等号
}
func init() { database.AppendMigrate(&CmsContentRead{}) }
func (*CmsContentRead) TableName() string { return "cms_content_read" }

View File

@@ -1,15 +1,29 @@
package models
import "git.apinb.com/bsm-sdk/core/database"
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// CsTicket 对应 cs_ticket保存客服工单。
type CsTicket struct {
Entity // 公共实体字段
TicketStatus int `gorm:"column:ticket_status;not null;default:32;index" json:"ticket_status"` // 工单业务状态
TicketNo string `gorm:"column:ticket_no;type:varchar(64);not null;uniqueIndex" json:"ticket_no"` // ticket_no 业务字段
UserAccountID uint64 `gorm:"column:user_account_id;not null;index" json:"user_account_id"` // user_account_id 业务字段
Category string `gorm:"column:category;type:varchar(64);not null" json:"category"` // category 业务字段
Priority string `gorm:"column:priority;type:varchar(16);not null;default:'normal'" json:"priority"` // priority 业务字段
Entity // 公共实体字段
TicketStatus int `gorm:"column:ticket_status;not null;default:32;index" json:"ticket_status"` // 工单业务状态
TicketNo string `gorm:"column:ticket_no;type:varchar(64);not null;uniqueIndex" json:"ticket_no"` // ticket_no 业务字段
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;default:'';uniqueIndex:,where:request_no <> ''" json:"request_no"` // 创建幂等号
UserAccountID uint64 `gorm:"column:user_account_id;not null;index" json:"user_account_id"` // user_account_id 业务字段
StaffAccountID uint64 `gorm:"column:staff_account_id;not null;default:0;index" json:"staff_account_id"` // 分派工作人员内部主键
GasBasicID uint64 `gorm:"column:gas_basic_id;not null;default:0;index" json:"gas_basic_id"` // 服务气站内部主键
DeliveryBasicID uint64 `gorm:"column:delivery_basic_id;not null;default:0;index" json:"delivery_basic_id"` // 关联配送点内部主键
Category string `gorm:"column:category;type:varchar(64);not null" json:"category"` // category 业务字段
Priority string `gorm:"column:priority;type:varchar(16);not null;default:'normal'" json:"priority"` // priority 业务字段
Description string `gorm:"column:description;type:text;not null;default:''" json:"description"` // 用户问题描述
Address string `gorm:"column:address;type:varchar(255);not null;default:''" json:"address"` // 上门地址快照
AppointmentAt *time.Time `gorm:"column:appointment_at;type:timestamptz;index" json:"appointment_at"` // 预约服务时间
StartedAt *time.Time `gorm:"column:started_at;type:timestamptz" json:"started_at"` // 开始处理时间
CompletedAt *time.Time `gorm:"column:completed_at;type:timestamptz" json:"completed_at"` // 用户确认完成时间
Result string `gorm:"column:result;type:text;not null;default:''" json:"result"` // 工作人员处理结果
OperatorIdentity string `gorm:"column:operator_identity;type:varchar(36);not null;default:'';index" json:"operator_identity"` // 最近操作人业务标识
}
func init() { database.AppendMigrate(&CsTicket{}) }

View File

@@ -0,0 +1,26 @@
package models
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// CsTicketEvidence 保存工单不可变现场证据。
type CsTicketEvidence struct {
Entity // 公共实体字段
CsTicketID uint64 `gorm:"column:cs_ticket_id;not null;index" json:"cs_ticket_id"` // 工单内部主键
EvidenceType string `gorm:"column:evidence_type;type:varchar(32);not null;index" json:"evidence_type"` // 证据阶段或签名类型
MediaType string `gorm:"column:media_type;type:varchar(16);not null" json:"media_type"` // 图片、视频或签名
FileURI string `gorm:"column:file_uri;type:varchar(512);not null" json:"file_uri"` // 受控上传资源地址
CapturedAt time.Time `gorm:"column:captured_at;type:timestamptz;not null;index" json:"captured_at"` // 客户端原始采集时间
ReceivedAt time.Time `gorm:"column:received_at;type:timestamptz;not null;index" json:"received_at"` // 服务端接收时间
Longitude string `gorm:"column:longitude;type:varchar(32);not null;default:''" json:"longitude"` // 采集经度
Latitude string `gorm:"column:latitude;type:varchar(32);not null;default:''" json:"latitude"` // 采集纬度
Source string `gorm:"column:source;type:varchar(32);not null;default:'app'" json:"source"` // 证据来源
IntegrityStatus string `gorm:"column:integrity_status;type:varchar(32);not null;default:'unverified'" json:"integrity_status"` // 完整性校验状态
OperatorIdentity string `gorm:"column:operator_identity;type:varchar(36);not null;index" json:"operator_identity"` // 采集人员业务标识
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;uniqueIndex" json:"request_no"` // 证据上报幂等号
}
func init() { database.AppendMigrate(&CsTicketEvidence{}) }
func (*CsTicketEvidence) TableName() string { return "cs_ticket_evidence" }

View File

@@ -1,16 +1,36 @@
package models
import "git.apinb.com/bsm-sdk/core/database"
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// EcOrder 对应 ec_order保存电商订单与组织快照。
type EcOrder struct {
Entity // 公共实体字段
OrderStatus int `gorm:"column:order_status;not null;default:16;index" json:"order_status"` // 商城订单业务状态
OrderNo string `gorm:"column:order_no;type:varchar(64);not null;uniqueIndex" json:"order_no"` // order_no 业务字段
UserAccountID uint64 `gorm:"column:user_account_id;not null;index" json:"user_account_id"` // user_account_id 业务字段
GasStationID uint64 `gorm:"column:gas_station_id;not null;default:0;index" json:"gas_station_id"` // gas_station_id 业务字段
DeliveryPointID uint64 `gorm:"column:delivery_point_id;not null;default:0;index" json:"delivery_point_id"` // delivery_point_id 业务字段
TotalAmount int64 `gorm:"column:total_amount;not null;default:0;check:total_amount >= 0" json:"total_amount"` // total_amount 业务字段
Entity // 公共实体字段
OrderStatus int `gorm:"column:order_status;not null;default:16;index" json:"order_status"` // 商城订单业务状态
OrderNo string `gorm:"column:order_no;type:varchar(64);not null;uniqueIndex" json:"order_no"` // order_no 业务字段
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;default:'';uniqueIndex:,where:request_no <> ''" json:"request_no"` // 创建幂等号
UserAccountID uint64 `gorm:"column:user_account_id;not null;index" json:"user_account_id"` // user_account_id 业务字段
GasStationID uint64 `gorm:"column:gas_station_id;not null;default:0;index" json:"gas_station_id"` // gas_station_id 业务字段
DeliveryPointID uint64 `gorm:"column:delivery_point_id;not null;default:0;index" json:"delivery_point_id"` // delivery_point_id 业务字段
TotalAmount int64 `gorm:"column:total_amount;not null;default:0;check:total_amount >= 0" json:"total_amount"` // total_amount 业务字段
UserAddressID uint64 `gorm:"column:user_address_id;not null;default:0;index" json:"user_address_id"` // 收货地址内部主键
Address string `gorm:"column:address;type:varchar(255);not null;default:''" json:"address"` // 收货地址快照
Longitude string `gorm:"column:longitude;type:varchar(32);not null;default:''" json:"longitude"` // 收货地址经度快照
Latitude string `gorm:"column:latitude;type:varchar(32);not null;default:''" json:"latitude"` // 收货地址纬度快照
ContactName string `gorm:"column:contact_name;type:varchar(64);not null;default:''" json:"contact_name"` // 收货联系人快照
ContactPhone string `gorm:"column:contact_phone;type:varchar(32);not null;default:''" json:"contact_phone"` // 收货电话快照
ProductAmount int64 `gorm:"column:product_amount;not null;default:0;check:product_amount >= 0" json:"product_amount"` // 商品金额,单位分
DiscountAmount int64 `gorm:"column:discount_amount;not null;default:0;check:discount_amount >= 0" json:"discount_amount"` // 优惠金额,单位分
PayableAmount int64 `gorm:"column:payable_amount;not null;default:0;check:payable_amount >= 0" json:"payable_amount"` // 应付金额,单位分
PaidAt *time.Time `gorm:"column:paid_at;type:timestamptz" json:"paid_at"` // 支付完成时间
Remark string `gorm:"column:remark;type:text;not null;default:''" json:"remark"` // 订单备注
LogisticsNo string `gorm:"column:logistics_no;type:varchar(128);not null;default:'';index" json:"logistics_no"` // 物流单号
LogisticsCompany string `gorm:"column:logistics_company;type:varchar(128);not null;default:''" json:"logistics_company"` // 物流公司
LogisticsStatus int `gorm:"column:logistics_status;not null;default:10;index" json:"logistics_status"` // 独立物流状态
ShippedAt *time.Time `gorm:"column:shipped_at;type:timestamptz" json:"shipped_at"` // 发货时间
ReceivedAt *time.Time `gorm:"column:received_at;type:timestamptz" json:"received_at"` // 用户收货时间
}
func init() { database.AppendMigrate(&EcOrder{}) }

View File

@@ -9,12 +9,16 @@ import (
// GasorderTrackPoint 对应 gasorder_track_point保存不可变配送位置点。
type GasorderTrackPoint struct {
Entity // 公共实体字段
GasorderTrackID uint64 `gorm:"column:gasorder_track_id;not null;index" json:"gasorder_track_id"` // 轨迹自增主键
Longitude string `gorm:"column:longitude;type:varchar(32);not null" json:"longitude"` // 经度
Latitude string `gorm:"column:latitude;type:varchar(32);not null" json:"latitude"` //
OccurredAt time.Time `gorm:"column:occurred_at;type:timestamptz;not null;index" json:"occurred_at"` // 定位发生时间
Source string `gorm:"column:source;type:varchar(32);not null;default:'gps'" json:"source"` // 定位来源
Accuracy string `gorm:"column:accuracy;type:varchar(32);not null;default:''" json:"accuracy"` // 定位精度
GasorderTrackID uint64 `gorm:"column:gasorder_track_id;not null;index" json:"gasorder_track_id"` // 轨迹自增主键
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;default:'';uniqueIndex:,where:request_no <> ''" json:"request_no"` // 上报幂等号
Longitude string `gorm:"column:longitude;type:varchar(32);not null" json:"longitude"` //
Latitude string `gorm:"column:latitude;type:varchar(32);not null" json:"latitude"` // 纬度
OccurredAt time.Time `gorm:"column:occurred_at;type:timestamptz;not null;index" json:"occurred_at"` // 定位发生时间
ReceivedAt time.Time `gorm:"column:received_at;type:timestamptz;not null;index" json:"received_at"` // 服务端接收时间
Source string `gorm:"column:source;type:varchar(32);not null;default:'gps'" json:"source"` // 定位来源
Accuracy string `gorm:"column:accuracy;type:varchar(32);not null;default:''" json:"accuracy"` // 定位精度
Speed string `gorm:"column:speed;type:varchar(32);not null;default:''" json:"speed"` // 定位速度
Direction string `gorm:"column:direction;type:varchar(32);not null;default:''" json:"direction"` // 定位方向
}
func init() { database.AppendMigrate(&GasorderTrackPoint{}) }

View File

@@ -5,15 +5,15 @@ import "git.apinb.com/bsm-sdk/core/database"
// StaffAccount 对应 staff_account是服务人员唯一的档案和 App 登录账户。
type StaffAccount struct {
Entity // 公共实体字段
Username string `gorm:"column:username;type:varchar(64);not null;uniqueIndex" json:"username"` // 登录名称
PasswordHash string `gorm:"column:password_hash;type:varchar(255);not null" json:"-"` // 密码哈希
Name string `gorm:"column:name;type:varchar(64);not null" json:"name"` // 人员姓名
Phone string `gorm:"column:phone;type:varchar(32);not null;default:'';index" json:"phone"` // 联系手机号
Avatar string `gorm:"column:avatar;type:varchar(512);not null;default:''" json:"avatar"` // 头像资源地址
RoleCode string `gorm:"column:role_code;type:varchar(64);not null;default:''" json:"role_code"` // 服务角色编码
GasBasicID uint64 `gorm:"column:gas_basic_id;not null;default:0;index" json:"gas_basic_id"` // 所属可燃气体站主键
DeliveryBasicID uint64 `gorm:"column:delivery_basic_id;not null;default:0;index" json:"delivery_basic_id"` // 所属配送点主键
WorkStatus string `gorm:"column:work_status;type:varchar(32);not null;default:'off_duty'" json:"work_status"` // 在岗接单状态
Username string `gorm:"column:username;type:varchar(64);not null;uniqueIndex" json:"username"` // 登录名称
PasswordHash string `gorm:"column:password_hash;type:varchar(255);not null" json:"-"` // 密码哈希
Name string `gorm:"column:name;type:varchar(64);not null" json:"name"` // 人员姓名
Phone string `gorm:"column:phone;type:varchar(32);not null;default:'';uniqueIndex:idx_staff_account_phone,where:phone <> ''" json:"phone"` // 唯一登录手机号
Avatar string `gorm:"column:avatar;type:varchar(512);not null;default:''" json:"avatar"` // 头像资源地址
RoleCode string `gorm:"column:role_code;type:varchar(64);not null;default:''" json:"role_code"` // 服务角色编码
GasBasicID uint64 `gorm:"column:gas_basic_id;not null;default:0;index" json:"gas_basic_id"` // 所属可燃气体站主键
DeliveryBasicID uint64 `gorm:"column:delivery_basic_id;not null;default:0;index" json:"delivery_basic_id"` // 所属配送点主键
WorkStatus string `gorm:"column:work_status;type:varchar(32);not null;default:'off_duty'" json:"work_status"` // 在岗接单状态
}
func init() { database.AppendMigrate(&StaffAccount{}) }

View File

@@ -0,0 +1,22 @@
package models
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// StaffAttendance 保存工作人员上下班不可变记录。
type StaffAttendance struct {
Entity // 公共实体字段
StaffAccountID uint64 `gorm:"column:staff_account_id;not null;index" json:"staff_account_id"` // 工作人员内部主键
RoleCode string `gorm:"column:role_code;type:varchar(64);not null" json:"role_code"` // 打卡时岗位快照
Action string `gorm:"column:action;type:varchar(16);not null;index" json:"action"` // 上班或下班动作
OccurredAt time.Time `gorm:"column:occurred_at;type:timestamptz;not null;index" json:"occurred_at"` // 客户端采集时间
Longitude string `gorm:"column:longitude;type:varchar(32);not null;default:''" json:"longitude"` // 打卡经度
Latitude string `gorm:"column:latitude;type:varchar(32);not null;default:''" json:"latitude"` // 打卡纬度
DeviceIdentity string `gorm:"column:device_identity;type:varchar(128);not null;default:''" json:"device_identity"` // 采集设备标识
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;uniqueIndex" json:"request_no"` // 打卡幂等号
}
func init() { database.AppendMigrate(&StaffAttendance{}) }
func (*StaffAttendance) TableName() string { return "staff_attendance" }

View File

@@ -5,12 +5,12 @@ import "git.apinb.com/bsm-sdk/core/database"
// UserAccount 对应 user_account是业主客户唯一的档案和用户端登录账户。
type UserAccount struct {
Entity // 公共实体字段
Username string `gorm:"column:username;type:varchar(64);not null;uniqueIndex" json:"username"` // 登录名称
PasswordHash string `gorm:"column:password_hash;type:varchar(255);not null" json:"-"` // 密码哈希
Name string `gorm:"column:name;type:varchar(64);not null" json:"name"` // 客户姓名
Phone string `gorm:"column:phone;type:varchar(32);not null;default:'';index" json:"phone"` // 联系手机号
Avatar string `gorm:"column:avatar;type:varchar(512);not null;default:''" json:"avatar"` // 头像资源地址
RealName string `gorm:"column:real_name;type:varchar(64);not null;default:''" json:"real_name"` // 实名认证名称
Username string `gorm:"column:username;type:varchar(64);not null;uniqueIndex" json:"username"` // 登录名称
PasswordHash string `gorm:"column:password_hash;type:varchar(255);not null" json:"-"` // 密码哈希
Name string `gorm:"column:name;type:varchar(64);not null" json:"name"` // 客户姓名
Phone string `gorm:"column:phone;type:varchar(32);not null;default:'';uniqueIndex:idx_user_account_phone,where:phone <> ''" json:"phone"` // 唯一登录手机号
Avatar string `gorm:"column:avatar;type:varchar(512);not null;default:''" json:"avatar"` // 头像资源地址
RealName string `gorm:"column:real_name;type:varchar(64);not null;default:''" json:"real_name"` // 实名认证名称
}
func init() { database.AppendMigrate(&UserAccount{}) }

View File

@@ -0,0 +1,23 @@
package models
import (
"git.apinb.com/bsm-sdk/core/database"
"time"
)
// WalletRechargeOrder 保存客户端钱包充值订单。
type WalletRechargeOrder struct {
Entity // 公共实体字段
RechargeStatus int `gorm:"column:recharge_status;not null;default:10;index" json:"recharge_status"` // 充值订单状态
WalletBasicID uint64 `gorm:"column:wallet_basic_id;not null;index" json:"wallet_basic_id"` // 钱包内部主键
RechargeNo string `gorm:"column:recharge_no;type:varchar(64);not null;uniqueIndex" json:"recharge_no"` // 充值订单号
RequestNo string `gorm:"column:request_no;type:varchar(128);not null;uniqueIndex" json:"request_no"` // 创建幂等号
Amount int64 `gorm:"column:amount;not null;check:amount > 0" json:"amount"` // 充值金额,单位分
Channel string `gorm:"column:channel;type:varchar(32);not null" json:"channel"` // 支付渠道
OwnerType string `gorm:"column:owner_type;type:varchar(32);not null;index" json:"owner_type"` // 钱包主体类型
OwnerIdentity string `gorm:"column:owner_identity;type:varchar(36);not null;index" json:"owner_identity"` // 钱包主体业务标识
CompletedAt *time.Time `gorm:"column:completed_at;type:timestamptz" json:"completed_at"` // 支付完成时间
}
func init() { database.AppendMigrate(&WalletRechargeOrder{}) }
func (*WalletRechargeOrder) TableName() string { return "wallet_recharge_order" }