You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

467 lines
13 KiB

2 months ago
package biz
import (
"context"
"github.com/go-kratos/kratos/v2/log"
"matchmaking-system/internal/biz/structure"
"matchmaking-system/internal/pkg/flags"
models "matchmaking-system/internal/pkg/model"
)
// UserShareBlockOrder
// @Description:
type UserShareBlockOrder struct {
uHkd UserShareHkdOrderRepo // 港股
uIdn UserShareIdnOrderRepo // 印尼股
uInr UserShareInrOrderRepo // 印度股
uMys UserShareMysOrderRepo // 马股
uSgd UserShareSgdOrderRepo // 新加坡股
uTha UserShareThaOrderRepo // 泰股
uUs UserShareUsOrderRepo // 美股
uGbx UserShareGbxOrderRepo // 英股
uFur UserShareFurOrderRepo // 法股
uEur UserShareEurOrderRepo // 德股
uBrl UserShareBrlOrderRepo // 巴西股
uJpy UserShareJpyOrderRepo // 日股
uBlk UserShareBlockOrderRepo // 大宗交易股
log *log.Helper
}
// UserShareBlockOrderRepo
// @Description: 订单操作(订单列表|下单|设置止损止盈|撤单|平仓|一键平仓)
type UserShareBlockOrderRepo interface {
CheckToken(ctx context.Context) (int, error)
GetBotUserIsRealByUserId(ctx context.Context, userId int) bool
GetBotStockBlockTradeList(ctx context.Context, pageSize, pageCount, userId, typeStatus, status int64) ([]*models.BotStockBlockTrade, int64, error)
}
// NewUserShareBlockOrderRepo
//
// @Description:
// @param uo
// @param logger
// @return *UserShareBlockOrder
func NewUserShareBlockOrderRepo(
uHkd UserShareHkdOrderRepo,
uIdn UserShareIdnOrderRepo,
uInr UserShareInrOrderRepo,
uMys UserShareMysOrderRepo,
uSgd UserShareSgdOrderRepo,
uTha UserShareThaOrderRepo,
uUs UserShareUsOrderRepo,
uGbx UserShareGbxOrderRepo,
uFur UserShareFurOrderRepo,
uEur UserShareEurOrderRepo,
uBrl UserShareBrlOrderRepo,
uJpy UserShareJpyOrderRepo,
uBlk UserShareBlockOrderRepo,
logger log.Logger) *UserShareBlockOrder {
return &UserShareBlockOrder{
uHkd: uHkd,
uIdn: uIdn,
uInr: uInr,
uMys: uMys,
uSgd: uSgd,
uTha: uTha,
uUs: uUs,
uGbx: uGbx,
uFur: uFur,
uEur: uEur,
uBrl: uBrl,
uJpy: uJpy,
uBlk: uBlk,
log: log.NewHelper(logger)}
}
// GetUserIdByToken
//
// @Description: 通过token获取用户Id
// @receiver uo
// @param ctx
// @return int64
// @return error
func (uo *UserShareBlockOrder) GetUserIdByToken(ctx context.Context) (int64, bool, error) {
userId, err := uo.uBlk.CheckToken(ctx)
if err != nil {
return 0, false, flags.ErrTokenMessage
}
return int64(userId), true, nil
}
// BotStockBlockTradeList
//
// @Description: 大宗交易订单列表查询
// @receiver uo
// @param ctx
// @param pageSize
// @param pageCount
// @param status
// @return []*models.BotStockBlockTrade
// @return int64
// @return error
func (uo *UserShareBlockOrder) BotStockBlockTradeList(ctx context.Context, pageSize, pageCount, typeStatus, status int64) ([]*models.BotStockBlockTrade, int64, error) {
userId, token, err := uo.GetUserIdByToken(ctx)
if !token || err != nil || userId == 0 {
return nil, 0, flags.ErrTokenMessage
}
stockList, totalCount, err := uo.uBlk.GetBotStockBlockTradeList(ctx, pageSize, pageCount-1, userId, typeStatus, status)
if err != nil {
return nil, 0, err
}
return stockList, totalCount, nil
}
// ShareBlockPlaceOrder
//
// @Description: 下单
// @receiver uo
// @param ctx
// @param order
// @return string
// @return error
func (uo *UserShareBlockOrder) ShareBlockPlaceOrder(ctx context.Context, order structure.ShareOrder) (string, error) {
userId, token, err := uo.GetUserIdByToken(ctx)
if !token || err != nil || userId == 0 {
return flags.SetNull, flags.ErrTokenMessage
}
if !uo.uBlk.GetBotUserIsRealByUserId(ctx, int(userId)) {
return flags.SetNull, flags.ErrIsReal
}
var orderId string
switch order.Type {
case flags.ShareUsMarketType: // 美股
orderId, err = uo.uUs.PlacingStockOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareThaMarketType: // 泰股
orderId, err = uo.uTha.PlacingStockThaOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareMysMarketType: // 马股
orderId, err = uo.uMys.PlacingStockMysOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareIdnMarketType: // 印尼股
orderId, err = uo.uIdn.PlacingStockIdnOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareInrMarketType: // 印度股
orderId, err = uo.uInr.PlacingStockInOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareSgdMarketType: // 新加坡股
orderId, err = uo.uSgd.PlacingStockSgdOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareHkdMarketType: // 港股股
orderId, err = uo.uHkd.PlacingStockHkdOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareGbxMarketType: // 英股
orderId, err = uo.uGbx.PlacingStockGbxOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareFurMarketType: // 法股
orderId, err = uo.uFur.PlacingStockFurOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareEurMarketType: // 德股
orderId, err = uo.uEur.PlacingStockEurOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareBrlMarketType: // 巴西股
orderId, err = uo.uBrl.PlacingStockBrlOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
case flags.ShareJpyMarketType: // 日本股
orderId, err = uo.uJpy.PlacingStockJpyOrders(ctx, userId, order)
if err != nil {
return flags.SetNull, err
}
default:
return flags.SetNull, flags.ErrPublicSix
}
return orderId, nil
}
// ShareBlockUpdateOrder
//
// @Description: 设置止盈止损
// @receiver uo
// @param ctx
// @param order
// @return bool
// @return error
func (uo *UserShareBlockOrder) ShareBlockUpdateOrder(ctx context.Context, order structure.StopOrder) (bool, error) {
userId, token, err := uo.GetUserIdByToken(ctx)
if !token || err != nil || userId == 0 {
return false, flags.ErrTokenMessage
}
if !uo.uBlk.GetBotUserIsRealByUserId(ctx, int(userId)) {
return false, flags.ErrIsReal
}
var check bool
switch order.Type {
case flags.ShareUsMarketType: // 美股
check, err = uo.uUs.UpdateBotStockStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareThaMarketType: // 泰股
check, err = uo.uTha.UpdateBotStockThaStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareMysMarketType: // 马股
check, err = uo.uMys.UpdateBotStockMysStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareIdnMarketType: // 印尼股
check, err = uo.uIdn.UpdateBotStockIdnStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareInrMarketType: // 印度股
check, err = uo.uInr.UpdateBotStockInStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareSgdMarketType: // 新加坡股
check, err = uo.uSgd.UpdateBotStockSgdStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareHkdMarketType: // 港股
check, err = uo.uHkd.UpdateBotStockHkdStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareGbxMarketType: // 英股
check, err = uo.uGbx.UpdateBotStockGbxStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareFurMarketType: // 法股
check, err = uo.uFur.UpdateBotStockFurStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareEurMarketType: // 德股
check, err = uo.uEur.UpdateBotStockEurStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareBrlMarketType: // 巴西股
check, err = uo.uBrl.UpdateBotStockBrlStopByOrderId(ctx, order)
if err != nil {
return false, err
}
case flags.ShareJpyMarketType: // 日本股
check, err = uo.uJpy.UpdateBotStockJpyStopByOrderId(ctx, order)
if err != nil {
return false, err
}
default:
return false, flags.ErrPublicSix
}
return check, nil
}
// ShareBlockCancel
//
// @Description: 撤单
// @receiver uo
// @param ctx
// @param orderId
// @return bool
// @return error
func (uo *UserShareBlockOrder) ShareBlockCancel(ctx context.Context, orderId string, typeStatus int64) (bool, error) {
userId, token, err := uo.GetUserIdByToken(ctx)
if !token || err != nil || userId == 0 {
return false, flags.ErrTokenMessage
}
if !uo.uBlk.GetBotUserIsRealByUserId(ctx, int(userId)) {
return false, flags.ErrIsReal
}
var check bool
switch typeStatus {
case flags.ShareUsMarketType: // 美股
check, err = uo.uUs.UpdateBotStockCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareThaMarketType: // 泰股
check, err = uo.uTha.UpdateBotStockThaCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareMysMarketType: // 马股
check, err = uo.uMys.UpdateBotStockMysCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareIdnMarketType: // 印尼股
check, err = uo.uIdn.UpdateBotStockIdnCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareInrMarketType: // 印度股
check, err = uo.uInr.UpdateBotStockInCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareSgdMarketType: // 新加坡股
check, err = uo.uSgd.UpdateBotStockSgdCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareHkdMarketType: // 港股
check, err = uo.uHkd.UpdateBotStockHkdCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareGbxMarketType: // 英股
check, err = uo.uGbx.UpdateBotStockGbxCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareFurMarketType: // 法股
check, err = uo.uFur.UpdateBotStockFurCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareEurMarketType: // 德股
check, err = uo.uEur.UpdateBotStockEurCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareBrlMarketType: // 巴西股
check, err = uo.uBrl.UpdateBotStockBrlCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareJpyMarketType: // 日本股
check, err = uo.uJpy.UpdateBotStockJpyCancelByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
default:
return false, flags.ErrPublicSix
}
return check, nil
}
// ShareBlockPosition
//
// @Description: 平仓
// @receiver uo
// @param ctx
// @param orderId
// @return bool
// @return error
func (uo *UserShareBlockOrder) ShareBlockPosition(ctx context.Context, orderId string, typeStatus int64) (bool, error) {
userId, token, err := uo.GetUserIdByToken(ctx)
if !token || err != nil || userId == 0 {
return false, flags.ErrTokenMessage
}
if !uo.uBlk.GetBotUserIsRealByUserId(ctx, int(userId)) {
return false, flags.ErrIsReal
}
var check bool
switch typeStatus {
case flags.ShareUsMarketType: // 美股
check, err = uo.uUs.UpdateBotStockClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareThaMarketType: // 泰股
check, err = uo.uTha.UpdateBotStockThaClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareMysMarketType: // 马股
check, err = uo.uMys.UpdateBotStockMysClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareIdnMarketType: // 印尼股
check, err = uo.uIdn.UpdateBotStockIdnClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareInrMarketType: // 印度股
check, err = uo.uInr.UpdateBotStockInClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareSgdMarketType: // 新加坡股
check, err = uo.uSgd.UpdateBotStockSgdClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareHkdMarketType: // 港股
check, err = uo.uHkd.UpdateBotStockHkdClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareGbxMarketType: // 英股
check, err = uo.uGbx.UpdateBotStockGbxClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareFurMarketType: // 法股
check, err = uo.uFur.UpdateBotStockFurClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareEurMarketType: // 德股
check, err = uo.uEur.UpdateBotStockEurClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareBrlMarketType: // 巴西股
check, err = uo.uBrl.UpdateBotStockBrlClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
case flags.ShareJpyMarketType: // 日本股
check, err = uo.uJpy.UpdateBotStockJpyClosingByOrderId(ctx, orderId, typeStatus)
if err != nil {
return false, err
}
default:
return false, flags.ErrPublicSix
}
return check, nil
}