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
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
|
||
|
}
|