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 }