This commit is contained in:
parent
0dd2d8d3d6
commit
12e8951c4f
23
gorm.sh
23
gorm.sh
|
|
@ -112,9 +112,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type ${table_capitalized}Repo interface {
|
type ${table_capitalized}Repo interface {
|
||||||
// Create 创建 ${table_capitalized}
|
|
||||||
Create(ctx context.Context, req *bo.${table_capitalized}Bo) (*bo.${table_capitalized}Bo, error)
|
Create(ctx context.Context, req *bo.${table_capitalized}Bo) (*bo.${table_capitalized}Bo, error)
|
||||||
// GetByID 根据 ID 获取 ${table_capitalized}
|
|
||||||
GetByID(ctx context.Context,id int32) (*bo.${table_capitalized}Bo, error)
|
GetByID(ctx context.Context,id int32) (*bo.${table_capitalized}Bo, error)
|
||||||
}
|
}
|
||||||
EOL
|
EOL
|
||||||
|
|
@ -133,6 +131,7 @@ import (
|
||||||
"voucher/internal/biz/repo"
|
"voucher/internal/biz/repo"
|
||||||
"voucher/internal/biz/bo"
|
"voucher/internal/biz/bo"
|
||||||
"voucher/internal/data"
|
"voucher/internal/data"
|
||||||
|
"gorm.io/gorm"
|
||||||
err2 "voucher/api/err"
|
err2 "voucher/api/err"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -143,34 +142,34 @@ type ${table_capitalized}RepoImpl struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New${table_capitalized}RepoImpl .
|
// New${table_capitalized}RepoImpl .
|
||||||
func New${table_capitalized}RepoImpl() repo.${table_capitalized}Repo {
|
func New${table_capitalized}RepoImpl(db *data.Db) repo.${table_capitalized}Repo {
|
||||||
return &${table_capitalized}RepoImpl{}
|
return &${table_capitalized}RepoImpl{db:db}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *${table_capitalized}RepoImpl) DB(ctx context.Context) *gorm.DB {
|
func (this *${table_capitalized}RepoImpl) DB(ctx context.Context) *gorm.DB {
|
||||||
return p.db.DB(ctx).WithContext(ctx).Model(model.${table_capitalized}{})
|
return this.db.DB(ctx).WithContext(ctx).Model(model.${table_capitalized}{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *${table_capitalized}RepoImpl) Create(ctx context.Context, req *bo.${table_capitalized}Bo) (*bo.${table_capitalized}Bo, error) {
|
func (this *${table_capitalized}RepoImpl) Create(ctx context.Context, req *bo.${table_capitalized}Bo) (*bo.${table_capitalized}Bo, error) {
|
||||||
// todo 待实现
|
// todo 待实现
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetByID 根据 ID 获取 ${table_capitalized}
|
// GetByID 根据 ID 获取 ${table_capitalized}
|
||||||
func (r *${table_capitalized}RepoImpl) GetByID(ctx context.Context,id int32) (*bo.${table_capitalized}Bo, error) {
|
func (this *${table_capitalized}RepoImpl) GetByID(ctx context.Context,id int32) (*bo.${table_capitalized}Bo, error) {
|
||||||
var item model.${table_capitalized}
|
var item model.${table_capitalized}
|
||||||
|
|
||||||
tx := p.DB(ctx).Where(model.${table_capitalized}{ID: id}).First(&item)
|
tx := this.DB(ctx).Where(model.${table_capitalized}{ID: id}).First(&item)
|
||||||
|
|
||||||
if tx.Error != nil {
|
if tx.Error != nil {
|
||||||
return nil, fmt.Errorf("b fail %w", tx.Error)
|
return nil, tx.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
if tx.RowsAffected == 0 {
|
if tx.RowsAffected == 0 {
|
||||||
return nil, err2.ErrorDbNotFound("数据不存在")
|
return nil, gorm.ErrRecordNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.ToBo(&item), nil
|
return this.ToBo(&item), nil
|
||||||
}
|
}
|
||||||
EOL
|
EOL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ type ProductBo struct {
|
||||||
BatchName string
|
BatchName string
|
||||||
BatchNo string
|
BatchNo string
|
||||||
MchId string
|
MchId string
|
||||||
MiniMum int32
|
MiniMum int32 // 使用券金额门槛
|
||||||
Channel vo.Channel
|
Channel vo.Channel
|
||||||
AvailableType vo.AvailableType
|
AvailableType vo.AvailableType
|
||||||
AvailableDays uint32
|
AvailableDays uint32
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package bo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
"voucher/internal/biz/vo"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UseLogBo 领域实体Bo结构,字段和模型字段保持一致
|
||||||
|
type UseLogBo struct {
|
||||||
|
ID uint64
|
||||||
|
OrderNo string
|
||||||
|
Amount int64
|
||||||
|
Type vo.UseLogType
|
||||||
|
UseTime *time.Time
|
||||||
|
CreateTime *time.Time
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package repo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
"voucher/internal/biz/bo"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UseLogRepo interface {
|
||||||
|
Create(ctx context.Context, req *bo.UseLogBo) (*bo.UseLogBo, error)
|
||||||
|
GetByID(ctx context.Context, id uint64) (*bo.UseLogBo, error)
|
||||||
|
GetByUseTimeOrder(ctx context.Context, orderNo string, useTime *time.Time) (*bo.UseLogBo, error)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
package vo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UseLogType uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
UseLogTypeUsed UseLogType = iota + 1
|
||||||
|
UseLogTypeRefund
|
||||||
|
)
|
||||||
|
|
||||||
|
var UseLogTypeMap = map[UseLogType]string{
|
||||||
|
UseLogTypeUsed: "核销",
|
||||||
|
UseLogTypeRefund: "退款",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s UseLogType) GetText() string {
|
||||||
|
if t, ok := UseLogTypeMap[s]; ok {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "未知类型"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s UseLogType) String() string {
|
||||||
|
return fmt.Sprintf("%d", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s UseLogType) GetValue() uint8 {
|
||||||
|
return uint8(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s UseLogType) IsUsed() bool {
|
||||||
|
return s == UseLogTypeUsed
|
||||||
|
}
|
||||||
|
|
@ -28,6 +28,7 @@ type VoucherBiz struct {
|
||||||
DingMixRepo mixrepos.DingMixRepo
|
DingMixRepo mixrepos.DingMixRepo
|
||||||
CmbMixRepo mixrepos.CmbMixRepo
|
CmbMixRepo mixrepos.CmbMixRepo
|
||||||
KxMixRepo mixrepos.KxMixRepo
|
KxMixRepo mixrepos.KxMixRepo
|
||||||
|
UseLogRepo repo.UseLogRepo
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVoucherBiz(
|
func NewVoucherBiz(
|
||||||
|
|
@ -44,6 +45,7 @@ func NewVoucherBiz(
|
||||||
DingMixRepo mixrepos.DingMixRepo,
|
DingMixRepo mixrepos.DingMixRepo,
|
||||||
CmbMixRepo mixrepos.CmbMixRepo,
|
CmbMixRepo mixrepos.CmbMixRepo,
|
||||||
KxMixRepo mixrepos.KxMixRepo,
|
KxMixRepo mixrepos.KxMixRepo,
|
||||||
|
UseLogRepo repo.UseLogRepo,
|
||||||
) *VoucherBiz {
|
) *VoucherBiz {
|
||||||
return &VoucherBiz{
|
return &VoucherBiz{
|
||||||
bc: bc,
|
bc: bc,
|
||||||
|
|
@ -59,6 +61,7 @@ func NewVoucherBiz(
|
||||||
DingMixRepo: DingMixRepo,
|
DingMixRepo: DingMixRepo,
|
||||||
CmbMixRepo: CmbMixRepo,
|
CmbMixRepo: CmbMixRepo,
|
||||||
KxMixRepo: KxMixRepo,
|
KxMixRepo: KxMixRepo,
|
||||||
|
UseLogRepo: UseLogRepo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,11 @@ package biz
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/go-kratos/kratos/v2/log"
|
"github.com/go-kratos/kratos/v2/log"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"time"
|
||||||
errPb "voucher/api/err"
|
errPb "voucher/api/err"
|
||||||
"voucher/internal/biz/bo"
|
"voucher/internal/biz/bo"
|
||||||
"voucher/internal/biz/vo"
|
"voucher/internal/biz/vo"
|
||||||
|
|
@ -30,6 +33,32 @@ func (v *VoucherBiz) WechatNotifyConsumer(ctx context.Context, tag string, req *
|
||||||
if err = v.used(ctx, order); err != nil {
|
if err = v.used(ctx, order); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.PlainText.ConsumeInformation.ConsumeTime != "" {
|
||||||
|
inputFormat := time.RFC3339
|
||||||
|
useTime, err2 := time.Parse(inputFormat, req.PlainText.ConsumeInformation.ConsumeTime)
|
||||||
|
if err2 != nil {
|
||||||
|
return err2
|
||||||
|
}
|
||||||
|
|
||||||
|
useLog, err2 := v.UseLogRepo.GetByUseTimeOrder(ctx, order.OrderNo, &useTime)
|
||||||
|
if err2 != nil && !errors.Is(err2, gorm.ErrRecordNotFound) {
|
||||||
|
return err2
|
||||||
|
}
|
||||||
|
|
||||||
|
if useLog == nil {
|
||||||
|
_, err = v.UseLogRepo.Create(ctx, &bo.UseLogBo{
|
||||||
|
OrderNo: order.OrderNo,
|
||||||
|
Amount: req.PlainText.ConsumeInformation.ConsumeAmount,
|
||||||
|
Type: vo.UseLogTypeUsed,
|
||||||
|
UseTime: &useTime,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return v.wxToBBUse(ctx, order, req)
|
return v.wxToBBUse(ctx, order, req)
|
||||||
|
|
||||||
} else if req.PlainText.Status.IsExpired() {
|
} else if req.PlainText.Status.IsExpired() {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||||
|
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||||
|
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const TableNameUseLog = "use_log"
|
||||||
|
|
||||||
|
// UseLog mapped from table <user_log>
|
||||||
|
type UseLog struct {
|
||||||
|
ID uint64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
|
||||||
|
OrderNo string `gorm:"column:order_no;not null" json:"order_no"`
|
||||||
|
Amount int64 `gorm:"column:amount;not null;comment:核销金额" json:"amount"`
|
||||||
|
Type uint8 `gorm:"column:type;not null;comment:1:核销 2:退款" json:"type"`
|
||||||
|
UseTime *time.Time `gorm:"column:use_time;not null" json:"use_time"`
|
||||||
|
CreateTime *time.Time `gorm:"column:create_time;not null" json:"create_time"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName UseLog's table name
|
||||||
|
func (*UseLog) TableName() string {
|
||||||
|
return TableNameUseLog
|
||||||
|
}
|
||||||
|
|
@ -10,4 +10,5 @@ var ProviderRepoImplSet = wire.NewSet(
|
||||||
NewProductRepoImpl,
|
NewProductRepoImpl,
|
||||||
NewOrderNotifyRepoImpl,
|
NewOrderNotifyRepoImpl,
|
||||||
NewWechatNotifyRegisterTagRepoImpl,
|
NewWechatNotifyRegisterTagRepoImpl,
|
||||||
|
NewUseLogRepoImpl,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package repoimpl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"time"
|
||||||
|
"voucher/internal/biz/bo"
|
||||||
|
"voucher/internal/biz/repo"
|
||||||
|
"voucher/internal/data"
|
||||||
|
"voucher/internal/data/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UseLogRepoImpl .
|
||||||
|
type UseLogRepoImpl struct {
|
||||||
|
Base[model.UseLog, bo.UseLogBo]
|
||||||
|
db *data.Db
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUseLogRepoImpl .
|
||||||
|
func NewUseLogRepoImpl(db *data.Db) repo.UseLogRepo {
|
||||||
|
return &UseLogRepoImpl{db: db}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *UseLogRepoImpl) DB(ctx context.Context) *gorm.DB {
|
||||||
|
return this.db.DB(ctx).WithContext(ctx).Model(model.UseLog{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *UseLogRepoImpl) Create(ctx context.Context, req *bo.UseLogBo) (*bo.UseLogBo, error) {
|
||||||
|
now := time.Now()
|
||||||
|
|
||||||
|
info := &model.UseLog{
|
||||||
|
OrderNo: req.OrderNo,
|
||||||
|
Type: req.Type.GetValue(),
|
||||||
|
Amount: req.Amount,
|
||||||
|
UseTime: req.UseTime,
|
||||||
|
CreateTime: &now,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := this.DB(ctx).Create(info).Error; err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.ToBo(info), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *UseLogRepoImpl) GetByID(ctx context.Context, id uint64) (*bo.UseLogBo, error) {
|
||||||
|
var item model.UseLog
|
||||||
|
|
||||||
|
tx := this.DB(ctx).Where(model.UseLog{ID: id}).First(&item)
|
||||||
|
|
||||||
|
if tx.Error != nil {
|
||||||
|
return nil, tx.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
if tx.RowsAffected == 0 {
|
||||||
|
return nil, gorm.ErrRecordNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.ToBo(&item), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *UseLogRepoImpl) GetByUseTimeOrder(ctx context.Context, orderNo string, useTime *time.Time) (*bo.UseLogBo, error) {
|
||||||
|
var item model.UseLog
|
||||||
|
|
||||||
|
tx := this.DB(ctx).Where(model.UseLog{OrderNo: orderNo, UseTime: useTime}).First(&item)
|
||||||
|
|
||||||
|
if tx.Error != nil {
|
||||||
|
return nil, tx.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
if tx.RowsAffected == 0 {
|
||||||
|
return nil, gorm.ErrRecordNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.ToBo(&item), nil
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue