refactor: reorganize modules and add Linux build tooling
This commit is contained in:
197
module/finance/wallet/internal/models/query.go
Normal file
197
module/finance/wallet/internal/models/query.go
Normal file
@@ -0,0 +1,197 @@
|
||||
// Package models 定义钱包相关的数据模型和数据库操作
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"bsm/full/module/finance/wallet/internal/impl"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"git.apinb.com/bsm-sdk/core/utils"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// InitData 初始化默认钱包数据
|
||||
func InitData() error {
|
||||
var (
|
||||
cnt int64
|
||||
err error
|
||||
userIdentity string
|
||||
)
|
||||
|
||||
// 获取默认用户唯一标识
|
||||
err = impl.DBService.Table("passport_account").Select("identity").Where("account=?", "demo").Find(&userIdentity).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if userIdentity == "" {
|
||||
return errors.New("默认用户未找到")
|
||||
}
|
||||
|
||||
// 检查是否已经创建了钱包信息
|
||||
err = impl.DBService.Model(&WalletBasic{}).Where("passport_identity=?", userIdentity).Count(&cnt).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 如果钱包不存在,则创建默认钱包
|
||||
if cnt == 0 {
|
||||
pa := WalletBasic{
|
||||
Balance: 0,
|
||||
WithdrawalBalance: 0,
|
||||
Std_Identity: types.Std_Identity{Identity: utils.ULID()},
|
||||
Std_Passport: types.Std_Passport{PassportIdentity: userIdentity},
|
||||
}
|
||||
err = impl.DBService.Create(&pa).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetWalletBalanceByPassportIdentity 根据用户身份获取钱包余额
|
||||
func GetWalletBalanceByPassportIdentity(passport_identity string) float64 {
|
||||
wallet := new(WalletBasic)
|
||||
err := impl.DBService.Where("passport_identity = ?", passport_identity).First(wallet).Error
|
||||
if err != nil {
|
||||
return 0.00
|
||||
}
|
||||
return float64(wallet.Balance / 100)
|
||||
}
|
||||
|
||||
// WalletExists 检查钱包是否存在
|
||||
func WalletExists(passportIdentity string) *WalletBasic {
|
||||
wallet := new(WalletBasic)
|
||||
err := impl.DBService.Where("passport_identity = ?", passportIdentity).First(wallet).Error
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return wallet
|
||||
}
|
||||
|
||||
// GetWalletByPassportIdentity 根据用户身份获取钱包,如果不存在则创建
|
||||
func GetWalletByPassportIdentity(passport_id uint, passport_identity string) (*WalletBasic, error) {
|
||||
wallet := new(WalletBasic)
|
||||
err := impl.DBService.Where("passport_identity = ?", passport_identity).First(wallet).Error
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// 钱包不存在,创建新钱包
|
||||
wallet.Identity = utils.UUID()
|
||||
wallet.PassportID = passport_id
|
||||
wallet.PassportIdentity = passport_identity
|
||||
impl.DBService.Create(wallet)
|
||||
return wallet, nil
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return wallet, nil
|
||||
}
|
||||
|
||||
// GetWalletByPassportIdentityT 根据用户身份获取钱包(不创建)
|
||||
func GetWalletByPassportIdentityT(passport_id int64, passport_identity string) (*WalletBasic, error) {
|
||||
wallet := &WalletBasic{}
|
||||
err := impl.DBService.Where("passport_identity = ?", passport_identity).First(wallet).Error
|
||||
return wallet, err
|
||||
}
|
||||
|
||||
// GetTransPriceByOrderNo 根据订单号获取交易价格
|
||||
func GetTransPriceByOrderNo(no string) (int64, error) {
|
||||
var amount int64
|
||||
impl.DBService.Select("trans_price").Table("order_summary").Where("order_no=? and status=1", no).Scan(&amount)
|
||||
if amount == 0 {
|
||||
return 0, status.Error(codes.Internal, "Order is close.")
|
||||
}
|
||||
return amount, nil
|
||||
}
|
||||
|
||||
// GetWalletPaymentByIdentity 根据身份和支付ID获取钱包支付记录
|
||||
func GetWalletPaymentByIdentity(passport_identity, identity string) (*WalletPayment, error) {
|
||||
fp := new(WalletPayment)
|
||||
err := impl.DBService.Where("passport_identity=? and identity=?", passport_identity, identity).First(&fp).Error
|
||||
return fp, err
|
||||
}
|
||||
|
||||
// UpsetWalletPaymentByIdentity 更新钱包支付记录状态
|
||||
func UpsetWalletPaymentByIdentity(passport_identity, identity string, CallbackStatus int8, CallbackMsg string) error {
|
||||
err := impl.DBService.Model(&WalletPayment{}).Where("passport_identity=? and identity=?", passport_identity, identity).Updates(map[string]interface{}{"status": CallbackStatus, "call_back_msg": CallbackMsg}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
// CreatePaymentRecord 创建支付记录
|
||||
func CreatePaymentRecord(fp *WalletPayment) error {
|
||||
return impl.DBService.Create(&fp).Error
|
||||
}
|
||||
|
||||
// CreateTradeRecord 创建交易记录
|
||||
func CreateTradeRecord(fr *WalletRecord) error {
|
||||
return impl.DBService.Create(&fr).Error
|
||||
}
|
||||
|
||||
// ChargeWallet 为钱包充值
|
||||
func ChargeWallet(passport_id uint, passport_identity, order_no string, paySource int32, amount int64) error {
|
||||
wallet, err := GetWalletByPassportIdentity(passport_id, passport_identity)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 更新钱包余额
|
||||
data := map[string]interface{}{
|
||||
"balance": wallet.Balance + amount,
|
||||
"withdrawal_balance": wallet.WithdrawalBalance + amount,
|
||||
}
|
||||
err = impl.DBService.Model(&WalletBasic{}).Where("identity=?", wallet.Identity).UpdateColumns(data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
// 创建交易记录
|
||||
record := &WalletRecord{
|
||||
WalletIdentity: wallet.Identity,
|
||||
TransType: 1, // 充值类型
|
||||
InTradeNo: order_no,
|
||||
Money: amount,
|
||||
TradeType: 1, // 收入类型
|
||||
PayChannel: int8(paySource),
|
||||
}
|
||||
record.PassportID = passport_id
|
||||
record.PassportIdentity = passport_identity
|
||||
CreateTradeRecord(record)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindWalletRecords 查询钱包交易记录
|
||||
func FindWalletRecords(passportIdentity, start, end string, transType, tradeType, page, pageSize int64) ([]*WalletRecord, int64, error) {
|
||||
list := make([]*WalletRecord, 0)
|
||||
tx := impl.DBService.Where("passport_identity = ?", passportIdentity)
|
||||
|
||||
// 添加时间范围过滤
|
||||
if start != "" {
|
||||
tx.Where("created_at >= ?", start)
|
||||
}
|
||||
if end != "" {
|
||||
tx.Where("created_at <= ?", end)
|
||||
}
|
||||
|
||||
// 添加交易类型过滤
|
||||
if transType != 0 {
|
||||
tx.Where("trans_type = ?", transType)
|
||||
}
|
||||
if tradeType != 0 {
|
||||
tx.Where("trade_type = ?", tradeType)
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
res := tx.Order("created_at desc").Limit(int(pageSize)).Offset(int((page - 1) * pageSize)).Find(&list)
|
||||
if res.Error != nil {
|
||||
if !errors.Is(res.Error, gorm.ErrRecordNotFound) {
|
||||
return nil, 0, res.Error
|
||||
}
|
||||
return nil, 0, nil
|
||||
}
|
||||
return list, res.RowsAffected, nil
|
||||
}
|
||||
37
module/finance/wallet/internal/models/wallet_apply_cash.go
Normal file
37
module/finance/wallet/internal/models/wallet_apply_cash.go
Normal file
@@ -0,0 +1,37 @@
|
||||
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/*
|
||||
* WalletApplyCash
|
||||
* Comment: 提现信息表
|
||||
* Version: 10
|
||||
* Created: 2022-04-14 22:18:44 , Updated:0001-01-01 00:00:00
|
||||
*/
|
||||
type WalletApplyCash struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
WalletIdentity string `gorm:"column:wallet_identity;type:varchar(36);not null;" json:"wallet_identity"` // 钱包唯一码
|
||||
CashNo string `gorm:"column:cash_no;type:varchar(255);default:'';" json:"cash_no"` // 钱包内部交易流水号
|
||||
TradeNo string `gorm:"column:trade_no;type:varchar(255);default:'';" json:"trade_no"` // 第三方交易流水号
|
||||
Remark string `gorm:"column:remark;type:varchar(255);default:'';" json:"remark"` // 备注
|
||||
Amount int64 `gorm:"column:amount;default:0;" json:"amount"` // 提现金额,单位:分
|
||||
Channel int8 `gorm:"column:channel;default:0;" json:"channel"` // 提现方式 1:微信 2:支付宝 3:银行卡
|
||||
Status int8 `gorm:"column:status;default:0;" json:"status"` // 提现状态 -1:提现失败 0:待处理 1:提现成功
|
||||
CallBackMsg string `gorm:"column:call_back_msg;type:varchar(255);default:'';" json:"call_back_msg"` // 提现回调信息
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletApplyCash{})
|
||||
}
|
||||
|
||||
// TableName .
|
||||
func (table *WalletApplyCash) TableName() string {
|
||||
return "wallet_apply_cash" //对应数据库表名
|
||||
}
|
||||
38
module/finance/wallet/internal/models/wallet_bank.go
Normal file
38
module/finance/wallet/internal/models/wallet_bank.go
Normal file
@@ -0,0 +1,38 @@
|
||||
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/*
|
||||
* WalletBank
|
||||
* Comment: 银行卡信息表
|
||||
* Version: 10
|
||||
* Created: 2022-04-14 22:17:01 , Updated:0001-01-01 00:00:00
|
||||
*/
|
||||
type WalletBank struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
WalletIdentity string `gorm:"column:wallet_identity;type:varchar(36);not null;" json:"wallet_identity"` // 钱包唯一码
|
||||
CardNo string `gorm:"column:card_no;type:varchar(255);not null;" json:"card_no"` // 银行卡号
|
||||
BankName string `gorm:"column:bank_name;type:varchar(255);not null;" json:"bank_name"` // 银行名
|
||||
CardOwner string `gorm:"column:card_owner;type:varchar(255);not null;" json:"card_owner"` // 持卡人姓名
|
||||
IDCard string `gorm:"column:id_card;type:varchar(255);not null;" json:"id_card"` // 持卡人身份证号
|
||||
Phone string `gorm:"column:phone;type:varchar(20);not null;" json:"phone"` // 银行预留的手机号
|
||||
BindID string `gorm:"column:bind_id;type:varchar(20);default:'';" json:"bind_id"` // 绑定银行卡返回的绑定id
|
||||
BankType string `gorm:"column:bank_type;type:varchar(20);default:'';" json:"bank_type"` // 银行卡类型 DC为储蓄卡,CC为信用卡
|
||||
Bank string `gorm:"column:bank;type:varchar(64);not null;" json:"bank"` // 银行卡所属行
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletBank{})
|
||||
}
|
||||
|
||||
// TableName .
|
||||
func (table *WalletBank) TableName() string {
|
||||
return "wallet_bank" //对应数据库表名
|
||||
}
|
||||
33
module/finance/wallet/internal/models/wallet_basic.go
Normal file
33
module/finance/wallet/internal/models/wallet_basic.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Package models 定义钱包相关的数据模型
|
||||
// @Author: David Yan(david.yan@qq.com)
|
||||
// @Created: 2022-04-14 22:12:48
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// WalletBasic 钱包基础信息表
|
||||
// 存储用户钱包的基本信息,包括余额、支付密码、绑定的第三方支付账号等
|
||||
type WalletBasic struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
AlipayID string `gorm:"column:alipay_id;type:varchar(64);default:'';comment:绑定的支付宝ID;" json:"alipay_id"` // 绑定的支付宝ID
|
||||
WxpayID string `gorm:"column:wxpay_id;type:varchar(64);default:'';comment:绑定的微信支付ID;" json:"wxpay_id"` // 绑定的微信支付ID
|
||||
PayPassword string `gorm:"column:pay_password;type:varchar(255);default:'';comment:支付密码;" json:"pay_password"` // 支付密码
|
||||
Balance int64 `gorm:"column:balance;default:0;comment:余额;" json:"balance"` // 余额,单位:分
|
||||
WithdrawalBalance int64 `gorm:"column:withdrawal_balance;default:0;comment:可提现余额;" json:"withdrawal_balance"` // 可提现余额,单位:分
|
||||
types.Std_Status
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletBasic{})
|
||||
}
|
||||
|
||||
// TableName 返回数据库表名
|
||||
func (table *WalletBasic) TableName() string {
|
||||
return "wallet_basic"
|
||||
}
|
||||
40
module/finance/wallet/internal/models/wallet_payment.go
Normal file
40
module/finance/wallet/internal/models/wallet_payment.go
Normal file
@@ -0,0 +1,40 @@
|
||||
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/*
|
||||
* WalletPayment
|
||||
* Comment: 支付记录表
|
||||
* Version: 10
|
||||
* Created: 2022-04-14 22:19:57 , Updated:0001-01-01 00:00:00
|
||||
*/
|
||||
type WalletPayment struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
WalletIdentity string `gorm:"column:wallet_identity;type:varchar(36);not null;" json:"wallet_identity"` // 钱包唯一码
|
||||
OrderNo string `gorm:"column:order_no;type:varchar(255);not null;" json:"order_no"` // 订单号
|
||||
TradeNo string `gorm:"column:trade_no;type:varchar(255);default:'';" json:"trade_no"` // 第三方交易流水号(创建时可为空,回调后更新)
|
||||
Type int8 `gorm:"column:type;default:0;" json:"type"` // 类型:1充值;2支付电商订单
|
||||
PayChannel int8 `gorm:"column:pay_channel;default:0;" json:"pay_channel"` // 方式 1:微信 2:支付宝 3:银行卡
|
||||
PayType string `gorm:"column:pay_type;type:varchar(255);not null;" json:"pay_type"` // 支付类型 JSAPI:微信浏览器内支付 APP:app支付 MINI:小程序 NATIVE:Native支付,pc端生成二维码供用户扫码支付,QUICK_MSECURITY_PAY:app支付 QUICK_WAP_WAY:手机网站支付 FAST_INSTANT_TRADE_PAY:pc网站支付
|
||||
Amount int64 `gorm:"column:amount;default:0;" json:"amount"` // 金额,单位分
|
||||
Args string `gorm:"column:args;type:varchar(255);default:'';" json:"args"` // 相关参数
|
||||
Remark string `gorm:"column:remark;type:varchar(255);default:'';" json:"remark"` // 备注
|
||||
CallBackMsg string `gorm:"column:callback_msg;type:varchar(255);default:'';" json:"callback_msg"` // 支付回调信息
|
||||
types.Std_Status // 支付状态:-3:手动取消,-2:超时自动取消,-1:支付失败,0:创建,1:支付中,2:支付成功
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletPayment{})
|
||||
}
|
||||
|
||||
// TableName .
|
||||
func (table *WalletPayment) TableName() string {
|
||||
return "wallet_payment" //对应数据库表名
|
||||
}
|
||||
41
module/finance/wallet/internal/models/wallet_record.go
Normal file
41
module/finance/wallet/internal/models/wallet_record.go
Normal file
@@ -0,0 +1,41 @@
|
||||
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/*
|
||||
* WalletRecord
|
||||
* Comment:
|
||||
* Version: 10
|
||||
* Created: 2022-04-14 22:20:44 , Updated:0001-01-01 00:00:00
|
||||
*/
|
||||
type WalletRecord struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
WalletIdentity string `gorm:"column:wallet_identity;type:varchar(36);not null;" json:"wallet_identity"` // 钱包唯一标识串
|
||||
TransType int8 `gorm:"column:trans_type;default:0;Index;" json:"trans_type"` // 收支类型,-1:支出,1:收入
|
||||
InTradeNo string `gorm:"column:in_trade_no;type:varchar(50);not null;" json:"in_trade_no"` // 内部交易流水号
|
||||
OutTradeNo string `gorm:"column:out_trade_no;type:varchar(50);default:'';" json:"out_trade_no"` // 外部交易流水号,示例:微信、支付宝、银行卡等
|
||||
Money int64 `gorm:"column:money; unsigned;default:0;" json:"money"` // 交易金额,单位:分
|
||||
Fee int64 `gorm:"column:fee; unsigned;default:0;" json:"fee"` // 交易手续费,单位:分
|
||||
PayChannel int8 `gorm:"column:pay_channel;default:0;" json:"pay_channel"` // 方式 1:微信 2:支付宝 3:银行卡
|
||||
PayType string `gorm:"column:pay_type;type:varchar(255);not null;" json:"pay_type"` // 支付类型 JSAPI:微信浏览器内支付 APP:app支付 MINI:小程序 NATIVE:Native支付,pc端生成二维码供用户扫码支付,QUICK_MSECURITY_PAY:app支付 QUICK_WAP_WAY:手机网站支付 FAST_INSTANT_TRADE_PAY:pc网站支付
|
||||
TradeType int8 `gorm:"column:trade_type;default:0;" json:"trade_type"` // 交易类型,1:充值,2:提现,3:消费,4:退款,5:收益
|
||||
Ymd int32 `gorm:"column:ymd;Index;not null;" json:"ymd"` // 索引:年月日
|
||||
Ym int32 `gorm:"column:ym;Index;not null;" json:"ym"` // 索引:年月
|
||||
Remark string `gorm:"column:remark;type:varchar(255);default:'';" json:"remark"` // 交易备注
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletRecord{})
|
||||
}
|
||||
|
||||
// TableName .
|
||||
func (table *WalletRecord) TableName() string {
|
||||
return "wallet_record" //对应数据库表名
|
||||
}
|
||||
34
module/finance/wallet/internal/models/wallet_refund.go
Normal file
34
module/finance/wallet/internal/models/wallet_refund.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// Models generated by mesh dev cli,@Author: David Yan(david.yan@qq.com).
|
||||
package models
|
||||
|
||||
import (
|
||||
"git.apinb.com/bsm-sdk/core/database"
|
||||
"git.apinb.com/bsm-sdk/core/types"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/*
|
||||
* WalletRefund
|
||||
* Comment: 退款记录表
|
||||
* Version: 10
|
||||
* Created: 2022-04-14 22:24:38 , Updated:0001-01-01 00:00:00
|
||||
*/
|
||||
type WalletRefund struct {
|
||||
gorm.Model
|
||||
types.Std_Identity
|
||||
types.Std_Passport
|
||||
WalletIdentity string `gorm:"column:wallet_identity;type:varchar(36);not null;" json:"wallet_identity"` // 钱包唯一码
|
||||
OrderIdentity string `gorm:"column:order_identity;type:varchar(64);not null;" json:"order_identity"` // 订单唯一码
|
||||
Reason string `gorm:"column:reason;type:text;default:'';" json:"reason"` // 退款理由
|
||||
OrderInfo string `gorm:"column:order_info;type:text;default:'';" json:"order_info"` // 订单信息
|
||||
Result string `gorm:"column:result;type:text;default:'';" json:"result"` // 处理结果
|
||||
}
|
||||
|
||||
func init() {
|
||||
database.AppendMigrate(&WalletRefund{})
|
||||
}
|
||||
|
||||
// TableName .
|
||||
func (table *WalletRefund) TableName() string {
|
||||
return "wallet_refund" //对应数据库表名
|
||||
}
|
||||
Reference in New Issue
Block a user