feat: 记录下单请求数据

This commit is contained in:
wolter 2024-11-07 11:48:03 +08:00
parent d715eb4a30
commit dbbe1acbc2
9 changed files with 292 additions and 225 deletions

View File

@ -9,7 +9,6 @@ import (
"rs/cmd/api/internal/svc" "rs/cmd/api/internal/svc"
"rs/cmd/api/internal/types" "rs/cmd/api/internal/types"
"rs/rpc/transfer" "rs/rpc/transfer"
"strconv"
"time" "time"
) )
@ -33,17 +32,20 @@ func (l *GetOrderLogic) GetOrder(req *types.GetOrderReq) (resp *types.GetOrderRs
status int status int
) )
order, err := l.svcCtx.BaseServiceContext.YlOrderMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, req.SupplierOrderNo) order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, req.SupplierOrderNo)
if err != nil { if err != nil {
return return
} }
if order.Status != 1 {
return nil, fmt.Errorf("订单发货失败")
}
// 响应参数
data := transfer.MarketKeySendRes{} data := transfer.MarketKeySendRes{}
err = json.Unmarshal([]byte(order.Resp), &data) err = json.Unmarshal([]byte(order.Resp.String), &data)
if err != nil { if err != nil {
return return
} }
if data.Data.ShortUrl != "" { if data.Data.ShortUrl != "" {
status = 1 status = 1
} }
@ -56,18 +58,23 @@ func (l *GetOrderLogic) GetOrder(req *types.GetOrderReq) (resp *types.GetOrderRs
endTime = startTime.AddDate(0, 0, 30).Add(23*time.Hour + 59*time.Minute + 59*time.Second) endTime = startTime.AddDate(0, 0, 30).Add(23*time.Hour + 59*time.Minute + 59*time.Second)
} }
accouont, _ := strconv.Atoi(order.Account) // 请求参数
supplierId, _ := strconv.Atoi(order.SupplierId) asyncReq := types.AsyncReq{}
err = json.Unmarshal([]byte(order.Request), &asyncReq)
if err != nil {
return
}
resp = &types.GetOrderRsp{ resp = &types.GetOrderRsp{
DeliverOrderNo: req.DeliverOrderNo, DeliverOrderNo: req.DeliverOrderNo,
SupplierOrderNo: req.SupplierOrderNo, SupplierOrderNo: req.SupplierOrderNo,
SupplierSkuId: order.SupplierSkuId, SupplierSkuId: asyncReq.SupplierSkuId,
Account: int64(accouont), Account: asyncReq.Account,
SendStatus: status, SendStatus: status,
Price: order.Price, Price: asyncReq.Price,
StatusTime: order.UpdateTime.Unix(), StatusTime: order.UpdateTime.Unix(),
Msg: "", Msg: "",
SupplierId: int64(supplierId), SupplierId: asyncReq.SupplierId,
CardNo: "", CardNo: "",
CardKey: "", CardKey: "",
CardExpireTime: endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format(time.DateTime), CardExpireTime: endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format(time.DateTime),

View File

@ -42,7 +42,21 @@ func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err
var ( var (
reqData transfer.MarketKeySendReq reqData transfer.MarketKeySendReq
VoucherId string VoucherId string
supplierOrderNo = req.DeliverOrderNo
result *transfer.MarketKeySendRes
) )
defer func() {
var status int64
var msg string
if err != nil {
status = 2
msg = err.Error()
} else {
status = 1
}
// 记录订单
l.saveOrder(req, result, supplierOrderNo, VoucherId, msg, status)
}()
if v, ok := l.svcCtx.Config.MarketConfig.SupplierSkuId[strconv.Itoa(int(req.SupplierSkuId))]; ok { if v, ok := l.svcCtx.Config.MarketConfig.SupplierSkuId[strconv.Itoa(int(req.SupplierSkuId))]; ok {
VoucherId = v VoucherId = v
@ -67,7 +81,7 @@ func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err
} }
reqData.Sign = l.svcCtx.Config.Sys.PrimaryKey reqData.Sign = l.svcCtx.Config.Sys.PrimaryKey
result, err := l.svcCtx.TransferRpc.MarketKeySend(l.ctx, &reqData) result, err = l.svcCtx.TransferRpc.MarketKeySend(l.ctx, &reqData)
if err != nil { if err != nil {
return nil, fmt.Errorf("rpc请求失败:%v", err.Error()) return nil, fmt.Errorf("rpc请求失败:%v", err.Error())
} }
@ -84,9 +98,6 @@ func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err
return nil, fmt.Errorf("请求失败未取到数据:%v", result.Msg) return nil, fmt.Errorf("请求失败未取到数据:%v", result.Msg)
} }
supplierOrderNo := req.DeliverOrderNo
// 记录订单
l.saveOrder(req, result, supplierOrderNo, VoucherId)
// 异步通知 // 异步通知
go func() { go func() {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
@ -169,9 +180,72 @@ func (l *YlAsyncLogic) asyncSendMarket(supplierOrderNo string, asyncReq *types.A
return return
} }
func (l *YlAsyncLogic) saveOrder(req *types.AsyncReq, rsp *transfer.MarketKeySendRes, supplierOrderNo, VoucherId string) { // 写入数据
func (l *YlAsyncLogic) saveOrder(req *types.AsyncReq, rsp *transfer.MarketKeySendRes, supplierOrderNo, VoucherId, msg string, status int64) {
// 查询订单
order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, supplierOrderNo)
if err != nil {
if !errors.Is(err, genModel.ErrNotFound) {
l.Logger.Errorf("supplierOrderNo = %s 查询订单失败:%v", supplierOrderNo, err.Error())
}
}
order, err := l.svcCtx.BaseServiceContext.YlOrderMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, supplierOrderNo) b, _ := json.Marshal(req)
rp, _ := json.Marshal(rsp)
if order != nil {
// 订单存在,更新
if order.Status != status {
order.Status = status
}
if order.Resp.String != string(rp) {
order.Resp.String = string(rp)
order.Resp.Valid = true
}
if order.Request != string(b) {
order.Request = string(b)
}
if msg != "" {
order.ErrMsg.String += msg
order.ErrMsg.Valid = true
}
if VoucherId != order.VoucherId {
order.VoucherId = VoucherId
}
err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Update(l.ctx, order)
if err != nil {
l.Logger.Errorf("DeliverOrderNo = %s 更新订单失败:%v", order.DeliverOrderNo, err.Error())
}
} else {
// 订单不存在,插入
data := &genModel.YlOrdersMarket{
DeliverOrderNo: req.DeliverOrderNo,
SupplierOrderNo: supplierOrderNo,
Request: string(b),
Resp: sql.NullString{
String: string(rp),
Valid: true,
},
ErrMsg: sql.NullString{
String: msg,
Valid: true,
},
Status: status,
VoucherId: VoucherId,
}
_, err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Insert(l.ctx, data)
if err != nil {
l.Logger.Errorf("data = %s 插入订单失败:%v", data, err.Error())
}
}
}
// 更新状态和响应数据
func (l *YlAsyncLogic) updateOrder(req *types.AsyncReq, rsp *transfer.MarketKeySendRes, supplierOrderNo string, status int64) {
order, err := l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.FindOneByDeliverOrderNoSupplierOrderNo(l.ctx, req.DeliverOrderNo, supplierOrderNo)
if err != nil { if err != nil {
if !errors.Is(err, genModel.ErrNotFound) { if !errors.Is(err, genModel.ErrNotFound) {
l.Logger.Errorf("data = %s 查询订单失败:%v", order, err.Error()) l.Logger.Errorf("data = %s 查询订单失败:%v", order, err.Error())
@ -182,26 +256,15 @@ func (l *YlAsyncLogic) saveOrder(req *types.AsyncReq, rsp *transfer.MarketKeySen
return return
} }
b, _ := json.Marshal(rsp) r, _ := json.Marshal(rsp)
data := &genModel.YlOrderMarket{ order.Status = status
DeliverOrderNo: req.DeliverOrderNo, order.Resp = sql.NullString{
SupplierOrderNo: supplierOrderNo, String: string(r),
SupplierId: fmt.Sprintf("%d", req.SupplierId),
Price: req.Price,
SkuId: req.SkuId,
SupplierSkuId: req.SupplierSkuId,
Account: req.Account,
VoucherId: sql.NullString{
String: VoucherId,
Valid: true, Valid: true,
},
Resp: string(b),
Status: 1,
//CreateTime: time.Now(),
} }
_, err = l.svcCtx.BaseServiceContext.YlOrderMarketRepo.Insert(l.ctx, data) err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Update(l.ctx, order)
if err != nil { if err != nil {
l.Logger.Errorf("data = %s 插入订单失败:%v", data, err.Error()) l.Logger.Errorf("order = %s 插入订单失败:%v", order, err.Error())
} }
} }

View File

@ -27,7 +27,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
base := types.BaseServiceContext{ base := types.BaseServiceContext{
Config: c, Config: c,
TransferRpc: client, TransferRpc: client,
YlOrderMarketRepo: genModel.NewYlOrderMarketModel(sqlConn, c.Cache), YlOrdersMarketRepo: genModel.NewYlOrdersMarketModel(sqlConn, c.Cache),
} }
return &ServiceContext{ return &ServiceContext{
BaseServiceContext: &base, BaseServiceContext: &base,

View File

@ -13,7 +13,7 @@ type BaseServiceContext struct {
Merchant genModel.MerchantModel Merchant genModel.MerchantModel
TransferOrder genModel.ServerOrderModel TransferOrder genModel.ServerOrderModel
MerchantWechat genModel.MerchantWechatModel MerchantWechat genModel.MerchantWechatModel
YlOrderMarketRepo genModel.YlOrderMarketModel YlOrdersMarketRepo genModel.YlOrdersMarketModel
} }
type DecryptReqData struct { type DecryptReqData struct {

View File

@ -38,7 +38,7 @@ type GetOrderRsp struct {
DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号 DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号
SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号 SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号
SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku
Account int64 `json:"account"` //充值账号 Account string `json:"account"` //充值账号
SendStatus int `json:"sendStatus"` // 发货状态: 0-发货中 1-发货成功 2-发货失败 SendStatus int `json:"sendStatus"` // 发货状态: 0-发货中 1-发货成功 2-发货失败
Price int64 `json:"price"` //结算价格(单位:厘) Price int64 `json:"price"` //结算价格(单位:厘)
StatusTime int64 `json:"statusTime"` // 成功/失败时间 StatusTime int64 `json:"statusTime"` // 成功/失败时间

View File

@ -1,27 +0,0 @@
package genModel
import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
var _ YlOrderMarketModel = (*customYlOrderMarketModel)(nil)
type (
// YlOrderMarketModel is an interface to be customized, add more methods here,
// and implement the added methods in customYlOrderMarketModel.
YlOrderMarketModel interface {
ylOrderMarketModel
}
customYlOrderMarketModel struct {
*defaultYlOrderMarketModel
}
)
// NewYlOrderMarketModel returns a model for the database table.
func NewYlOrderMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) YlOrderMarketModel {
return &customYlOrderMarketModel{
defaultYlOrderMarketModel: newYlOrderMarketModel(conn, c, opts...),
}
}

View File

@ -1,157 +0,0 @@
// Code generated by goctl. DO NOT EDIT.
// versions:
// goctl version: 1.7.2
package genModel
import (
"context"
"database/sql"
"fmt"
"strings"
"time"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
var (
ylOrderMarketFieldNames = builder.RawFieldNames(&YlOrderMarket{})
ylOrderMarketRows = strings.Join(ylOrderMarketFieldNames, ",")
ylOrderMarketRowsExpectAutoSet = strings.Join(stringx.Remove(ylOrderMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
ylOrderMarketRowsWithPlaceHolder = strings.Join(stringx.Remove(ylOrderMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
cacheTransferYlOrderMarketIdPrefix = "cache:transfer:ylOrderMarket:id:"
cacheTransferYlOrderMarketDeliverOrderNoSupplierOrderNoPrefix = "cache:transfer:ylOrderMarket:deliverOrderNo:supplierOrderNo:"
)
type (
ylOrderMarketModel interface {
Insert(ctx context.Context, data *YlOrderMarket) (sql.Result, error)
FindOne(ctx context.Context, id uint64) (*YlOrderMarket, error)
FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrderMarket, error)
Update(ctx context.Context, data *YlOrderMarket) error
Delete(ctx context.Context, id uint64) error
}
defaultYlOrderMarketModel struct {
sqlc.CachedConn
table string
}
YlOrderMarket struct {
Id uint64 `db:"id"`
DeliverOrderNo string `db:"deliverOrderNo"` // 平台订单号
SupplierOrderNo string `db:"supplierOrderNo"` // 供货商订单号
SupplierId string `db:"supplierId"` // 供货商id
Price int64 `db:"price"` // 结算价格(单位:厘)
SkuId int64 `db:"skuId"` // 平台sku
SupplierSkuId int64 `db:"supplierSkuId"` // 供货商sku
Account string `db:"account"` // 充值账号
Resp string `db:"resp"` // 响应数据
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
Status int64 `db:"status"` // 状态
VoucherId sql.NullString `db:"VoucherId"` // 批次号
}
)
func newYlOrderMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultYlOrderMarketModel {
return &defaultYlOrderMarketModel{
CachedConn: sqlc.NewConn(conn, c, opts...),
table: "`yl_order_market`",
}
}
func (m *defaultYlOrderMarketModel) Delete(ctx context.Context, id uint64) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrderMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrderMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrderMarketIdPrefix, id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrderMarketIdKey)
return err
}
func (m *defaultYlOrderMarketModel) FindOne(ctx context.Context, id uint64) (*YlOrderMarket, error) {
transferYlOrderMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrderMarketIdPrefix, id)
var resp YlOrderMarket
err := m.QueryRowCtx(ctx, &resp, transferYlOrderMarketIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrderMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrderMarketModel) FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrderMarket, error) {
transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrderMarketDeliverOrderNoSupplierOrderNoPrefix, deliverOrderNo, supplierOrderNo)
var resp YlOrderMarket
err := m.QueryRowIndexCtx(ctx, &resp, transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
query := fmt.Sprintf("select %s from %s where `deliverOrderNo` = ? and `supplierOrderNo` = ? limit 1", ylOrderMarketRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, deliverOrderNo, supplierOrderNo); err != nil {
return nil, err
}
return resp.Id, nil
}, m.queryPrimary)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrderMarketModel) Insert(ctx context.Context, data *YlOrderMarket) (sql.Result, error) {
transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrderMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrderMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrderMarketIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, ylOrderMarketRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.DeliverOrderNo, data.SupplierOrderNo, data.SupplierId, data.Price, data.SkuId, data.SupplierSkuId, data.Account, data.Resp, data.Status, data.VoucherId)
}, transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrderMarketIdKey)
return ret, err
}
func (m *defaultYlOrderMarketModel) Update(ctx context.Context, newData *YlOrderMarket) error {
data, err := m.FindOne(ctx, newData.Id)
if err != nil {
return err
}
transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrderMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrderMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrderMarketIdPrefix, data.Id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, ylOrderMarketRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, newData.DeliverOrderNo, newData.SupplierOrderNo, newData.SupplierId, newData.Price, newData.SkuId, newData.SupplierSkuId, newData.Account, newData.Resp, newData.Status, newData.VoucherId, newData.Id)
}, transferYlOrderMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrderMarketIdKey)
return err
}
func (m *defaultYlOrderMarketModel) formatPrimary(primary any) string {
return fmt.Sprintf("%s%v", cacheTransferYlOrderMarketIdPrefix, primary)
}
func (m *defaultYlOrderMarketModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrderMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}
func (m *defaultYlOrderMarketModel) tableName() string {
return m.table
}

View File

@ -0,0 +1,27 @@
package genModel
import (
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
var _ YlOrdersMarketModel = (*customYlOrdersMarketModel)(nil)
type (
// YlOrdersMarketModel is an interface to be customized, add more methods here,
// and implement the added methods in customYlOrdersMarketModel.
YlOrdersMarketModel interface {
ylOrdersMarketModel
}
customYlOrdersMarketModel struct {
*defaultYlOrdersMarketModel
}
)
// NewYlOrdersMarketModel returns a model for the database table.
func NewYlOrdersMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) YlOrdersMarketModel {
return &customYlOrdersMarketModel{
defaultYlOrdersMarketModel: newYlOrdersMarketModel(conn, c, opts...),
}
}

View File

@ -0,0 +1,154 @@
// Code generated by goctl. DO NOT EDIT.
// versions:
// goctl version: 1.7.2
package genModel
import (
"context"
"database/sql"
"fmt"
"strings"
"time"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
var (
ylOrdersMarketFieldNames = builder.RawFieldNames(&YlOrdersMarket{})
ylOrdersMarketRows = strings.Join(ylOrdersMarketFieldNames, ",")
ylOrdersMarketRowsExpectAutoSet = strings.Join(stringx.Remove(ylOrdersMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
ylOrdersMarketRowsWithPlaceHolder = strings.Join(stringx.Remove(ylOrdersMarketFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
cacheTransferYlOrdersMarketIdPrefix = "cache:transfer:ylOrdersMarket:id:"
cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix = "cache:transfer:ylOrdersMarket:deliverOrderNo:supplierOrderNo:"
)
type (
ylOrdersMarketModel interface {
Insert(ctx context.Context, data *YlOrdersMarket) (sql.Result, error)
FindOne(ctx context.Context, id uint64) (*YlOrdersMarket, error)
FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrdersMarket, error)
Update(ctx context.Context, data *YlOrdersMarket) error
Delete(ctx context.Context, id uint64) error
}
defaultYlOrdersMarketModel struct {
sqlc.CachedConn
table string
}
YlOrdersMarket struct {
Id uint64 `db:"id"`
DeliverOrderNo string `db:"deliver_order_no"` // 平台订单号
SupplierOrderNo string `db:"supplier_order_no"` // 供货商订单号
Request string `db:"request"` // 请求数据
Resp sql.NullString `db:"resp"` // rpc返回数据
ErrMsg sql.NullString `db:"err_msg"` // 错误信息
Status int64 `db:"status"` // 发货状态: 0-发货中 1-发货成功 2-发货失败
VoucherId string `db:"voucher_id"` // 批次号
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
}
)
func newYlOrdersMarketModel(conn sqlx.SqlConn, c cache.CacheConf, opts ...cache.Option) *defaultYlOrdersMarketModel {
return &defaultYlOrdersMarketModel{
CachedConn: sqlc.NewConn(conn, c, opts...),
table: "`yl_orders_market`",
}
}
func (m *defaultYlOrdersMarketModel) Delete(ctx context.Context, id uint64) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
return conn.ExecCtx(ctx, query, id)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return err
}
func (m *defaultYlOrdersMarketModel) FindOne(ctx context.Context, id uint64) (*YlOrdersMarket, error) {
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, id)
var resp YlOrdersMarket
err := m.QueryRowCtx(ctx, &resp, transferYlOrdersMarketIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrdersMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id)
})
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrdersMarketModel) FindOneByDeliverOrderNoSupplierOrderNo(ctx context.Context, deliverOrderNo string, supplierOrderNo string) (*YlOrdersMarket, error) {
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, deliverOrderNo, supplierOrderNo)
var resp YlOrdersMarket
err := m.QueryRowIndexCtx(ctx, &resp, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
query := fmt.Sprintf("select %s from %s where `deliver_order_no` = ? and `supplier_order_no` = ? limit 1", ylOrdersMarketRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, deliverOrderNo, supplierOrderNo); err != nil {
return nil, err
}
return resp.Id, nil
}, m.queryPrimary)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultYlOrdersMarketModel) Insert(ctx context.Context, data *YlOrdersMarket) (sql.Result, error) {
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, data.Id)
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, ylOrdersMarketRowsExpectAutoSet)
return conn.ExecCtx(ctx, query, data.DeliverOrderNo, data.SupplierOrderNo, data.Request, data.Resp, data.ErrMsg, data.Status, data.VoucherId)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return ret, err
}
func (m *defaultYlOrdersMarketModel) Update(ctx context.Context, newData *YlOrdersMarket) error {
data, err := m.FindOne(ctx, newData.Id)
if err != nil {
return err
}
transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey := fmt.Sprintf("%s%v:%v", cacheTransferYlOrdersMarketDeliverOrderNoSupplierOrderNoPrefix, data.DeliverOrderNo, data.SupplierOrderNo)
transferYlOrdersMarketIdKey := fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, data.Id)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, ylOrdersMarketRowsWithPlaceHolder)
return conn.ExecCtx(ctx, query, newData.DeliverOrderNo, newData.SupplierOrderNo, newData.Request, newData.Resp, newData.ErrMsg, newData.Status, newData.VoucherId, newData.Id)
}, transferYlOrdersMarketDeliverOrderNoSupplierOrderNoKey, transferYlOrdersMarketIdKey)
return err
}
func (m *defaultYlOrdersMarketModel) formatPrimary(primary any) string {
return fmt.Sprintf("%s%v", cacheTransferYlOrdersMarketIdPrefix, primary)
}
func (m *defaultYlOrdersMarketModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", ylOrdersMarketRows, m.table)
return conn.QueryRowCtx(ctx, v, query, primary)
}
func (m *defaultYlOrdersMarketModel) tableName() string {
return m.table
}