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