From dbbe1acbc25077d868725efcf4447617493d3e68 Mon Sep 17 00:00:00 2001 From: wolter Date: Thu, 7 Nov 2024 11:48:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=B0=E5=BD=95=E4=B8=8B=E5=8D=95?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/api/internal/logic/yl/getOrderLogic.go | 27 ++-- cmd/api/internal/logic/yl/ylAsyncLogic.go | 115 +++++++++++---- cmd/api/internal/svc/serviceContext.go | 6 +- cmd/api/internal/types/extraTypes.go | 2 +- cmd/api/internal/types/types.go | 2 +- genModel/ylOrderMarketModel.go | 27 ---- genModel/ylOrderMarketModel_gen.go | 157 --------------------- genModel/ylOrdersMarketModel.go | 27 ++++ genModel/ylOrdersMarketModel_gen.go | 154 ++++++++++++++++++++ 9 files changed, 292 insertions(+), 225 deletions(-) delete mode 100644 genModel/ylOrderMarketModel.go delete mode 100644 genModel/ylOrderMarketModel_gen.go create mode 100644 genModel/ylOrdersMarketModel.go create mode 100644 genModel/ylOrdersMarketModel_gen.go diff --git a/cmd/api/internal/logic/yl/getOrderLogic.go b/cmd/api/internal/logic/yl/getOrderLogic.go index 39c5501..dc94b70 100644 --- a/cmd/api/internal/logic/yl/getOrderLogic.go +++ b/cmd/api/internal/logic/yl/getOrderLogic.go @@ -9,7 +9,6 @@ import ( "rs/cmd/api/internal/svc" "rs/cmd/api/internal/types" "rs/rpc/transfer" - "strconv" "time" ) @@ -33,17 +32,20 @@ func (l *GetOrderLogic) GetOrder(req *types.GetOrderReq) (resp *types.GetOrderRs 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 { return } + if order.Status != 1 { + return nil, fmt.Errorf("订单发货失败") + } + // 响应参数 data := transfer.MarketKeySendRes{} - err = json.Unmarshal([]byte(order.Resp), &data) + err = json.Unmarshal([]byte(order.Resp.String), &data) if err != nil { return } - if data.Data.ShortUrl != "" { 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) } - 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{ DeliverOrderNo: req.DeliverOrderNo, SupplierOrderNo: req.SupplierOrderNo, - SupplierSkuId: order.SupplierSkuId, - Account: int64(accouont), + SupplierSkuId: asyncReq.SupplierSkuId, + Account: asyncReq.Account, SendStatus: status, - Price: order.Price, + Price: asyncReq.Price, StatusTime: order.UpdateTime.Unix(), Msg: "", - SupplierId: int64(supplierId), + SupplierId: asyncReq.SupplierId, CardNo: "", CardKey: "", CardExpireTime: endTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second).Format(time.DateTime), diff --git a/cmd/api/internal/logic/yl/ylAsyncLogic.go b/cmd/api/internal/logic/yl/ylAsyncLogic.go index 25d7884..7bfc7a4 100644 --- a/cmd/api/internal/logic/yl/ylAsyncLogic.go +++ b/cmd/api/internal/logic/yl/ylAsyncLogic.go @@ -40,9 +40,23 @@ func NewYlAsyncLogic(ctx context.Context, svcCtx *svc.ServiceContext) *YlAsyncLo func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err error) { var ( - reqData transfer.MarketKeySendReq - VoucherId string + reqData transfer.MarketKeySendReq + 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 { VoucherId = v @@ -67,7 +81,7 @@ func (l *YlAsyncLogic) YlAsync(req *types.AsyncReq) (resp *types.AsyncResp, err } 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 { 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) } - supplierOrderNo := req.DeliverOrderNo - // 记录订单 - l.saveOrder(req, result, supplierOrderNo, VoucherId) // 异步通知 go func() { time.Sleep(2 * time.Second) @@ -169,9 +180,72 @@ func (l *YlAsyncLogic) asyncSendMarket(supplierOrderNo string, asyncReq *types.A 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 !errors.Is(err, genModel.ErrNotFound) { l.Logger.Errorf("data = %s 查询订单失败:%v", order, err.Error()) @@ -182,26 +256,15 @@ func (l *YlAsyncLogic) saveOrder(req *types.AsyncReq, rsp *transfer.MarketKeySen return } - b, _ := json.Marshal(rsp) - data := &genModel.YlOrderMarket{ - DeliverOrderNo: req.DeliverOrderNo, - SupplierOrderNo: supplierOrderNo, - 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, - }, - Resp: string(b), - Status: 1, - //CreateTime: time.Now(), + r, _ := json.Marshal(rsp) + order.Status = status + order.Resp = sql.NullString{ + String: string(r), + Valid: true, } - _, err = l.svcCtx.BaseServiceContext.YlOrderMarketRepo.Insert(l.ctx, data) + err = l.svcCtx.BaseServiceContext.YlOrdersMarketRepo.Update(l.ctx, order) if err != nil { - l.Logger.Errorf("data = %s 插入订单失败:%v", data, err.Error()) + l.Logger.Errorf("order = %s 插入订单失败:%v", order, err.Error()) } } diff --git a/cmd/api/internal/svc/serviceContext.go b/cmd/api/internal/svc/serviceContext.go index 904a685..479cacb 100644 --- a/cmd/api/internal/svc/serviceContext.go +++ b/cmd/api/internal/svc/serviceContext.go @@ -25,9 +25,9 @@ func NewServiceContext(c config.Config) *ServiceContext { sqlConn := sqlx.NewMysql(c.DB.Master.DataSource) base := types.BaseServiceContext{ - Config: c, - TransferRpc: client, - YlOrderMarketRepo: genModel.NewYlOrderMarketModel(sqlConn, c.Cache), + Config: c, + TransferRpc: client, + YlOrdersMarketRepo: genModel.NewYlOrdersMarketModel(sqlConn, c.Cache), } return &ServiceContext{ BaseServiceContext: &base, diff --git a/cmd/api/internal/types/extraTypes.go b/cmd/api/internal/types/extraTypes.go index 5d0cac9..8b22196 100644 --- a/cmd/api/internal/types/extraTypes.go +++ b/cmd/api/internal/types/extraTypes.go @@ -13,7 +13,7 @@ type BaseServiceContext struct { Merchant genModel.MerchantModel TransferOrder genModel.ServerOrderModel MerchantWechat genModel.MerchantWechatModel - YlOrderMarketRepo genModel.YlOrderMarketModel + YlOrdersMarketRepo genModel.YlOrdersMarketModel } type DecryptReqData struct { diff --git a/cmd/api/internal/types/types.go b/cmd/api/internal/types/types.go index 261eaa5..f3f773b 100644 --- a/cmd/api/internal/types/types.go +++ b/cmd/api/internal/types/types.go @@ -38,7 +38,7 @@ type GetOrderRsp struct { DeliverOrderNo string `json:"deliverOrderNo"` // 平台订单号 SupplierOrderNo string `json:"supplierOrderNo"` // 供货商订单号 SupplierSkuId int64 `json:"supplierSkuId"` // 供货商sku - Account int64 `json:"account"` //充值账号 + Account string `json:"account"` //充值账号 SendStatus int `json:"sendStatus"` // 发货状态: 0-发货中 1-发货成功 2-发货失败 Price int64 `json:"price"` //结算价格(单位:厘) StatusTime int64 `json:"statusTime"` // 成功/失败时间 diff --git a/genModel/ylOrderMarketModel.go b/genModel/ylOrderMarketModel.go deleted file mode 100644 index 49e4978..0000000 --- a/genModel/ylOrderMarketModel.go +++ /dev/null @@ -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...), - } -} diff --git a/genModel/ylOrderMarketModel_gen.go b/genModel/ylOrderMarketModel_gen.go deleted file mode 100644 index 0342371..0000000 --- a/genModel/ylOrderMarketModel_gen.go +++ /dev/null @@ -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 -} diff --git a/genModel/ylOrdersMarketModel.go b/genModel/ylOrdersMarketModel.go new file mode 100644 index 0000000..113a74d --- /dev/null +++ b/genModel/ylOrdersMarketModel.go @@ -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...), + } +} diff --git a/genModel/ylOrdersMarketModel_gen.go b/genModel/ylOrdersMarketModel_gen.go new file mode 100644 index 0000000..82f8d03 --- /dev/null +++ b/genModel/ylOrdersMarketModel_gen.go @@ -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 +}