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.

664 lines
20 KiB

package data
import (
"context"
"fmt"
"matchmaking-system/internal/pkg/flags"
"matchmaking-system/internal/pkg/logging/applogger"
models "matchmaking-system/internal/pkg/model"
"matchmaking-system/internal/pkg/setting"
"time"
)
// UserList
//
// @Description: 查询userId
// @param data
func UserList(data *Data) []models.BotUsers {
var userList []models.BotUsers
if err := data.mysqlDB.Table(flags.BotUsers).Where("status = 1").Find(&userList); err != nil {
applogger.Debug("查询用户信息错误:%v", err)
return []models.BotUsers{}
}
return userList
}
// TradeListByUserId
//
// @Description: 根据UserId查询持仓订单信息
// @param data
// @param tableName
// @return map[string]string
func TradeListByUserId(data *Data, tableName string, userId int64) map[string]string {
orderMap := make(map[string]string)
switch tableName {
case flags.BotStockTrade:
var shareUsList []models.BotStockTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareUsList); err != nil {
return nil
}
for _, value := range shareUsList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockThaTrade:
var shareThaList []models.BotStockThaTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareThaList); err != nil {
return nil
}
for _, value := range shareThaList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockMysTrade:
var shareMysList []models.BotStockMysTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareMysList); err != nil {
return nil
}
for _, value := range shareMysList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockIdnTrade:
var shareIdnList []models.BotStockIdnTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareIdnList); err != nil {
return nil
}
for _, value := range shareIdnList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockInTrade:
var shareInrList []models.BotStockInTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareInrList); err != nil {
return nil
}
for _, value := range shareInrList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockSgdTrade:
var shareSgdList []models.BotStockSgdTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareSgdList); err != nil {
return nil
}
for _, value := range shareSgdList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockHkdTrade:
var shareHkdList []models.BotStockHkdTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Where("user_id = ?", userId).
Find(&shareHkdList); err != nil {
return nil
}
for _, value := range shareHkdList {
orderMap[value.OrderId] = value.OrderId
}
default:
}
return orderMap
}
// TradeListByStatus
//
// @Description: 查询市场持仓订单Id
// @param data
// @param tableName
// @return map[string]string
func TradeListByStatus(data *Data, tableName string) map[string]string {
orderMap := make(map[string]string)
switch tableName {
case flags.BotStockTrade:
var shareUsList []models.BotStockTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareUsList); err != nil {
return nil
}
for _, value := range shareUsList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockThaTrade:
var shareThaList []models.BotStockThaTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareThaList); err != nil {
return nil
}
for _, value := range shareThaList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockMysTrade:
var shareMysList []models.BotStockMysTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareMysList); err != nil {
return nil
}
for _, value := range shareMysList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockIdnTrade:
var shareIdnList []models.BotStockIdnTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareIdnList); err != nil {
return nil
}
for _, value := range shareIdnList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockInTrade:
var shareInrList []models.BotStockInTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareInrList); err != nil {
return nil
}
for _, value := range shareInrList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockSgdTrade:
var shareSgdList []models.BotStockSgdTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareSgdList); err != nil {
return nil
}
for _, value := range shareSgdList {
orderMap[value.OrderId] = value.OrderId
}
case flags.BotStockHkdTrade:
var shareHkdList []models.BotStockHkdTrade
if err := data.mysqlDB.Table(tableName).
Where("status = 1 or status = 0").
Find(&shareHkdList); err != nil {
return nil
}
for _, value := range shareHkdList {
orderMap[value.OrderId] = value.OrderId
}
default:
}
return orderMap
}
// RestoreClearCacheShareUs
//
// @Description: 美股订单缓存清理
// @param data
func RestoreClearCacheShareUs(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareUsSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v美股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareUsPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询美股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareUsSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询美股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareTha
//
// @Description: 泰股订单缓存清理
// @param data
func RestoreClearCacheShareTha(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockThaTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareThaSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v泰股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockThaTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareThaPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询泰股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareThaSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询泰股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareMys
//
// @Description: 马股订单缓存清理
// @param data
func RestoreClearCacheShareMys(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockMysTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareMysSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v马股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockMysTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareMysPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询马股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareMysSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询马股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareIdn
//
// @Description: 印尼股订单缓存清理
// @param data
func RestoreClearCacheShareIdn(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockIdnTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareIdnSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v印尼股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockIdnTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareIdnPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询印尼股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareIdnSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询印尼股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareInr
//
// @Description: 印度股订单缓存清理
// @param data
func RestoreClearCacheShareInr(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockInTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareInrSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v印度股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
applogger.Error("用户:%v订阅垃圾订单:%v", value.UserId, key)
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
time.Sleep(1 * time.Minute)
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockInTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareInrPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询印度股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
applogger.Error("持仓垃圾订单:%v", key)
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
time.Sleep(1 * time.Minute)
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareInrSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询印度股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
applogger.Error("管理员持仓垃圾订单:%v", key)
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareSgd
//
// @Description: 新加坡股订单缓存清理
// @param data
func RestoreClearCacheShareSgd(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockSgdTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareSgdSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v新加坡股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockSgdTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareSgdPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询新加坡股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareSgdSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询新加坡股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}
// RestoreClearCacheShareHkd
//
// @Description: 港股订单缓存清理
// @param data
func RestoreClearCacheShareHkd(data *Data) {
//查询用户
userArray := UserList(data)
// 清理用户订阅订单缓存
for _, value := range userArray {
// 通过用户查询用户持仓订单
orderMap := TradeListByUserId(data, flags.BotStockHkdTrade, value.UserId)
keyCache := fmt.Sprintf("%v-%v", setting.ShareHkdSubscribe, value.UserId)
cacheMap, err := data.redisDB.HGetAll(context.Background(), keyCache).Result()
if err != nil {
applogger.Error("查询用户%v港股市场,用户订单订阅缓存错误:%v", value.UserId, err)
return
}
for key, _ := range cacheMap {
_, ok := orderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), keyCache, key).Result()
if err != nil {
applogger.Error("清理用户订阅缓存错误:%v", err)
return
}
}
}
}
// 清理市场持仓订单缓存
allOrderMap := TradeListByStatus(data, flags.BotStockHkdTrade)
positionKey := fmt.Sprintf("%v", setting.MarketShareHkdPosition)
positionMap, err := data.redisDB.HGetAll(context.Background(), positionKey).Result()
if err != nil {
applogger.Error("查询港股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range positionMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), positionKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
// 清理管理员订单订阅缓存
adminKey := fmt.Sprintf("%v", setting.AdminShareHkdSubscribe)
adminMap, err := data.redisDB.HGetAll(context.Background(), adminKey).Result()
if err != nil {
applogger.Error("查询港股市场持仓订单缓存失败:%v", err)
return
}
for key, _ := range adminMap {
_, ok := allOrderMap[key]
if !ok {
_, err = data.redisDB.HDel(context.Background(), adminKey, key).Result()
if err != nil {
applogger.Error("清理用户持仓订单缓存错误:%v", err)
return
}
}
}
}