package common import ( "bufio" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "os" "strings" "sync" "time" "wss-pool/config" "wss-pool/internal/data" "wss-pool/logging/applogger" ) var validStockCodeMutex = sync.RWMutex{} var validStockCode = map[string]bool{} var NotStockCode = map[string]bool{ "BSE:20MICRONS": true, "BSE:21STCENMGM": true, "BSE:360ONE": true, "BSE:3IINFOLTD": true, "BSE:3MINDIA": true, "BSE:3PLAND": true, "BSE:5PAISA": true, "BSE:63MOONS": true, "BSE:A2ZINFRA": true, "BSE:AAATECH": true, "BSE:AAREYDRUGS": true, "BSE:AARTECH": true, "BSE:AARTIDRUGS": true, "BSE:AARTIIND": true, "BSE:AARTIPHARM": true, "BSE:AARVEEDEN": true, "BSE:AAVAS": true, "BSE:ABAN": true, "BSE:ABB": true, "BSE:ABBOTINDIA": true, "BSE:ABCAPITAL": true, "BSE:ABFRL": true, "BSE:ABSLAMC": true, "BSE:ACC": true, "BSE:ACCELYA": true, "BSE:ACE": true, "BSE:ACI": true, "BSE:ACL": true, "BSE:ADANIENSOL": true, "BSE:ADANIENT": true, "BSE:ADANIGREEN": true, "BSE:ADANIPORTS": true, "BSE:ADANIPOWER": true, "BSE:ADFFOODS": true, "BSE:ADL": true, "BSE:ADORWELD": true, "BSE:ADROITINFO": true, "BSE:ADSL": true, "BSE:ADVANIHOTR": true, "BSE:ADVENZYMES": true, "BSE:AEROFLEX": true, "BSE:AETHER": true, "BSE:AFFLE": true, "BSE:AGARIND": true, "BSE:AGI": true, "BSE:AGRITECH": true, "BSE:AGSTRA": true, "BSE:AHL": true, "BSE:AHLEAST": true, "BSE:AHLUCONT": true, "BSE:AIAENG": true, "BSE:AIRAN": true, "BSE:AJANTPHARM": true, "BSE:AJMERA": true, "BSE:AKI": true, "BSE:AKSHAR": true, "BSE:AKSHARCHEM": true, "BSE:AKSHOPTFBR": true, "BSE:AKZOINDIA": true, "BSE:ALANKIT": true, "BSE:ALBERTDAVD": true, "BSE:ALEMBICLTD": true, "BSE:ALICON": true, "BSE:ALKALI": true, "BSE:ALKEM": true, "BSE:ALKYLAMINE": true, "BSE:ALLCARGO": true, "BSE:ALLSEC": true, "BSE:ALMONDZ": true, "BSE:ALOKINDS": true, "BSE:ALPA": true, "BSE:ALPHAGEO": true, "BSE:ALPSINDUS": true, "BSE:AMBER": true, "BSE:AMBICAAGAR": true, "BSE:AMBIKCO": true, "BSE:AMBUJACEM": true, "BSE:AMDIND": true, "BSE:AMIORG": true, "BSE:AMJLAND": true, "NSE:AMNPLST": true, "BSE:AMRUTANJAN": true, "BSE:ANANDRATHI": true, "BSE:ANANTRAJ": true, "BSE:ANDHRAPAP": true, "BSE:ANDHRSUGAR": true, "BSE:ANDREWYU": true, "BSE:ANGELONE": true, "BSE:ANIKINDS": true, "BSE:ANKITMETAL": true, "BSE:ANMOL": true, "BSE:ANUP": true, "BSE:ANURAS": true, "BSE:APARINDS": true, "BSE:APCL": true, "BSE:APCOTEXIND": true, "BSE:APEX": true, "BSE:APLAPOLLO": true, "BSE:APLLTD": true, "BSE:APOLLO": true, "BSE:APOLLOHOSP": true, "BSE:APOLLOPIPE": true, "BSE:APOLLOTYRE": true, "BSE:APTECHT": true, "BSE:APTUS": true, "BSE:ARCHIDPLY": true, "BSE:ARCHIES": true, "BSE:ARENTERP": true, "BSE:ARIES": true, "BSE:ARIHANTCAP": true, "BSE:ARIHANTSUP": true, "BSE:ARMANFIN": true, "BSE:AROGRANITE": true, "BSE:ARROWGREEN": true, "BSE:ARSHIYA": true, "BSE:ARTEMISMED": true, "BSE:ARVIND": true, "BSE:ARVINDFASN": true, "BSE:ARVSMART": true, "BSE:ASAHIINDIA": true, "BSE:ASAHISONG": true, "BSE:ASAL": true, "BSE:ASALCBR": true, "BSE:ASHAPURMIN": true, "BSE:ASHIANA": true, "BSE:ASHIMASYN": true, "BSE:ASHOKA": true, "BSE:ASHOKLEY": true, "BSE:ASIANENE": true, "BSE:ASIANHOTNR": true, "BSE:ASIANPAINT": true, "BSE:ASIANTILES": true, "BSE:ASMS": true, "BSE:ASTEC": true, "BSE:ASTERDM": true, "BSE:ASTRAL": true, "BSE:ASTRAMICRO": true, "BSE:ASTRAZEN": true, "BSE:ASTRON": true, "BSE:ATALREAL": true, "BSE:ATAM": true, "BSE:ATFL": true, "BSE:ATGL": true, "BSE:ATL": true, "BSE:ATUL": true, "BSE:ATULAUTO": true, "BSE:AUBANK": true, "BSE:AURIONPRO": true, "BSE:AUROPHARMA": true, "BSE:AURUM": true, "BSE:AUSOMENT": true, "BSE:AUTOAXLES": true, "BSE:AUTOIND": true, "BSE:AVADHSUGAR": true, "BSE:AVALON": true, "BSE:AVANTIFEED": true, "BSE:AVG": true, "BSE:AVONMORE": true, "BSE:AVROIND": true, "BSE:AVTNPL": true, "BSE:AWHCL": true, "BSE:AWL": true, "BSE:AXISBANK": true, "BSE:AXISCADES": true, "BSE:AXITA": true, "BSE:AYMSYNTEX": true, "BSE:BAFNAPH": true, "BSE:BAGFILMS": true, "BSE:BAIDFIN": true, "BSE:BAJAJCON": true, "BSE:BAJAJELEC": true, "BSE:BAJAJFINSV": true, "BSE:BAJAJHCARE": true, "BSE:BAJAJHIND": true, "BSE:BAJAJHLDNG": true, "BSE:BAJFINANCE": true, "BSE:BALAJITELE": true, "BSE:BALAMINES": true, "BSE:BALKRISHNA": true, "BSE:BALKRISIND": true, "BSE:BALMLAWRIE": true, "BSE:BALPHARMA": true, "BSE:BALRAMCHIN": true, "BSE:BANARBEADS": true, "BSE:BANARISUG": true, "BSE:BANCOINDIA": true, "BSE:BANDHANBNK": true, "BSE:BANG": true, "BSE:BANKBARODA": true, "BSE:BANKINDIA": true, "BSE:BANSWRAS": true, "BSE:BARBEQUE": true, "BSE:BASF": true, "BSE:BASML": true, "BSE:BATAINDIA": true, "BSE:BAYERCROP": true, "BSE:BBL": true, "BSE:BBOX": true, "BSE:BBTC": true, "BSE:BBTCL": true, "BSE:BCG": true, "BSE:BCLIND": true, "BSE:BCONCEPTS": true, "BSE:BDL": true, "BSE:BEARDSELL": true, "BSE:BECTORFOOD": true, "BSE:BEDMUTHA": true, "BSE:BEL": true, "BSE:BEML": true, "BSE:BEPL": true, "BSE:BERGEPAINT": true, "BSE:BFINVEST": true, "BSE:BFUTILITIE": true, "BSE:BGRENERGY": true, "BSE:BHAGCHEM": true, "BSE:BHAGERIA": true, "BSE:BHAGYANGR": true, "BSE:BHANDARI": true, "BSE:BHARATFORG": true, "BSE:BHARATGEAR": true, "BSE:BHARATRAS": true, "BSE:BHARATWIRE": true, "BSE:BHARTIARTL": true, "BSE:BHEL": true, "BSE:BIGBLOC": true, "BSE:BIKAJI": true, "BSE:BIL": true, "BSE:BINANIIND": true, "BSE:BIOCON": true, "BSE:BIOFILCHEM": true, "BSE:BIRLACABLE": true, "BSE:BIRLACORPN": true, "BSE:BIRLAMONEY": true, "BSE:BKMINDST": true, "BSE:BLAL": true, "BSE:BLBLIMITED": true, "BSE:BLISSGVS": true, "BSE:BLKASHYAP": true, "BSE:BLS": true, "BSE:BLUECHIP": true, "BSE:BLUEDART": true, "BSE:BLUESTARCO": true, "BSE:BODALCHEM": true, "BSE:BOMDYEING": true, "BSE:BOROLTD": true, "BSE:BORORENEW": true, "BSE:BOSCHLTD": true, "BSE:BPCL": true, "BSE:BPL": true, "BSE:BRIGADE": true, "NSE:BRIGHT": true, "BSE:BRITANNIA": true, "BSE:BRNL": true, "BSE:BROOKS": true, "BSE:BSL": true, "BSE:BSOFT": true, "BSE:BTML": true, "BSE:BURNPUR": true, "BSE:BUTTERFLY": true, "BSE:BVCL": true, "BSE:BYKE": true, "BSE:CALSOFT": true, "BSE:CAMLINFINE": true, "BSE:CAMPUS": true, "BSE:CAMS": true, "BSE:CANBK": true, "BSE:CANFINHOME": true, "BSE:CANTABIL": true, "BSE:CAPACITE": true, "BSE:CAPLIPOINT": true, "BSE:CAPTRUST": true, "BSE:CARBORUNIV": true, "BSE:CAREERP": true, "BSE:CARERATING": true, "BSE:CARTRADE": true, "BSE:CARYSIL": true, "BSE:CASTROLIND": true, "BSE:CCHHL": true, "BSE:CCL": true, "BSE:CEATLTD": true, "BSE:CELEBRITY": true, "BSE:CENTENKA": true, "BSE:CENTEXT": true, "BSE:CENTRALBK": true, "BSE:CENTRUM": true, "BSE:CENTUM": true, "BSE:CENTURYPLY": true, "BSE:CENTURYTEX": true, "BSE:CERA": true, "BSE:CEREBRAINT": true, "BSE:CESC": true, "BSE:CGCL": true, "BSE:CGPOWER": true, "BSE:CHALET": true, "BSE:CHAMBLFERT": true, "BSE:CHEMBOND": true, "BSE:CHEMCON": true, "BSE:CHEMFAB": true, "BSE:CHEMPLASTS": true, "BSE:CHENNPETRO": true, "BSE:CHEVIOT": true, "BSE:CHOICEIN": true, "BSE:CHOLAFIN": true, "BSE:CHOLAHLDNG": true, "BSE:CIEINDIA": true, "BSE:CIGNITITEC": true, "BSE:CINELINE": true, "BSE:CINEVISTA": true, "BSE:CIPLA": true, "BSE:CLEAN": true, "BSE:CLEDUCATE": true, "BSE:CLSEL": true, "BSE:CMSINFO": true, "BSE:COALINDIA": true, "BSE:COASTCORP": true, "BSE:COCHINSHIP": true, "BSE:COFFEEDAY": true, "BSE:COFORGE": true, "BSE:COLPAL": true, "BSE:COMPINFO": true, "BSE:COMPUSOFT": true, "BSE:CONCOR": true, "BSE:CONCORDBIO": true, "BSE:CONFIPET": true, "BSE:CONTROLPR": true, "BSE:CORALFINAC": true, "BSE:CORDSCABLE": true, "BSE:COROMANDEL": true, "BSE:COSMOFIRST": true, "BSE:COUNCODOS": true, "BSE:CRAFTSMAN": true, "NSE:CREATIVE": true, "BSE:CREATIVEYE": true, "BSE:CREDITACC": true, "BSE:CREST": true, "BSE:CRISIL": true, "BSE:CROMPTON": true, "BSE:CSBBANK": true, "BSE:CSLFINANCE": true, "BSE:CTE": true, "BSE:CUB": true, "BSE:CUBEXTUB": true, "BSE:CUMMINSIND": true, "BSE:CUPID": true, "BSE:CYBERMEDIA": true, "BSE:CYBERTECH": true, "BSE:CYIENT": true, "BSE:CYIENTDLM": true, "BSE:DABUR": true, "BSE:DALBHARAT": true, "BSE:DALMIASUG": true, "BSE:DAMODARIND": true, "BSE:DATAMATICS": true, "BSE:DATAPATTNS": true, "BSE:DBCORP": true, "BSE:DBL": true, "BSE:DBOL": true, "BSE:DBREALTY": true, "BSE:DBSTOCKBRO": true, "BSE:DCAL": true, "BSE:DCBBANK": true, "BSE:DCI": true, "BSE:DCM": true, "BSE:DCMFINSERV": true, "BSE:DCMNVL": true, "BSE:DCMSHRIRAM": true, "BSE:DCMSRIND": true, "BSE:DCW": true, "BSE:DCXINDIA": true, "BSE:DECCANCE": true, "BSE:DEEPAKFERT": true, "BSE:DEEPAKNTR": true, "BSE:DEEPENR": true, "BSE:DEEPINDS": true, "BSE:DELHIVERY": true, "BSE:DELPHIFX": true, "BSE:DELTACORP": true, "BSE:DELTAMAGNT": true, "BSE:DEN": true, "BSE:DENORA": true, "BSE:DEVIT": true, "BSE:DEVYANI": true, "BSE:DGCONTENT": true, "BSE:DHAMPURSUG": true, "BSE:DHANBANK": true, "BSE:DHANI": true, "BSE:DHANUKA": true, "BSE:DHARMAJ": true, "BSE:DHRUV": true, "BSE:DHUNINV": true, "BSE:DIACABS": true, "BSE:DIAMINESQ": true, "BSE:DIAMONDYD": true, "BSE:DICIND": true, "BSE:DIGISPICE": true, "BSE:DISHTV": true, "BSE:DIVGIITTS": true, "BSE:DIVISLAB": true, "BSE:DIXON": true, "BSE:DJML": true, "BSE:DLF": true, "BSE:DLINKINDIA": true, "BSE:DOLPHIN": true, "BSE:DPWIRES": true, "NSE:DRL": true, "BSE:DTIL": true, "BSE:DYCL": true, "BSE:EMSLIMITED": true, "BSE:EPIGRAL": true, "BSE:FINPIPE": true, "BSE:FOCUS": true, "BSE:GANGESSECU": true, "BSE:GENSOL": true, "BSE:GHCLTEXTIL": true, "BSE:GMMPFAUDLR": true, "BSE:GREENLAM": true, "BSE:GSTL": true, "BSE:GUJGASLTD": true, "BSE:GUJRAFFIA": true, "BSE:HBSL": true, "BSE:HISARMETAL": true, "BSE:HMAAGRO": true, "BSE:IDEAFORGE": true, "BSE:IKIO": true, "BSE:INNOVATIVE": true, "BSE:IRBINVIT": true, "BSE:JAYSREETEA": true, "BSE:JIOFIN": true, "BSE:JLHL": true, "BSE:JSWINFRA": true, "BSE:KALAMANDIR": true, "BSE:KDL": true, "BSE:KEYFINSERV": true, "NSE:KORE": true, "BSE:KPIL": true, "BSE:KRIDHANINF": true, "BSE:KRITI": true, "BSE:LINCOLN": true, "BSE:LLOYDSME": true, "BSE:LOTUSEYE": true, "BSE:MAGADSUGAR": true, "BSE:MANAKALUCO": true, "BSE:MANAKCOAT": true, "BSE:MANAKSTEEL": true, "BSE:MAXIND": true, "BSE:MAZDA": true, "BSE:MICEL": true, "BSE:MKPL": true, "BSE:MOLDTECH": true, "BSE:MSTCLTD": true, "BSE:MUTHOOTCAP": true, "BSE:MVGJL": true, "BSE:NAGAFERT": true, "BSE:NETWEB": true, "BSE:NIITMTS": true, "BSE:NILAINFRA": true, "BSE:NRAIL": true, "BSE:NUVAMA": true, "BSE:OCCL": true, "BSE:ORCHPHARMA": true, "BSE:ORICONENT": true, "BSE:ORTINLAB": true, "BSE:PAKKA": true, "BSE:PALASHSECU": true, "BSE:PALREDTEC": true, "BSE:PAVNAIND": true, "BSE:PODDARHOUS": true, "BSE:PODDARMENT": true, "BSE:PRECISION": true, "BSE:PREMEXPLN": true, "BSE:PROZONER": true, "BSE:PTCIL": true, "BSE:PYRAMID": true, "BSE:RAJRATAN": true, "BSE:RAJRILTD": true, "BSE:RATNAVEER": true, "BSE:REDTAPE": true, "BSE:RHFL": true, "BSE:RISHABH": true, "BSE:ROML": true, "BSE:RRKABEL": true, "BSE:RSYSTEMS": true, "BSE:SAFARI": true, "BSE:SALONA": true, "BSE:SALZERELEC": true, "BSE:SAMHI": true, "BSE:SAMPANN": true, "BSE:SANDUMA": true, "BSE:SBCL": true, "BSE:SBFC": true, "BSE:SEJALLTD": true, "NSE:SEL": true, "BSE:SELMC": true, "BSE:SENCO": true, "NSE:SENSEXETF": true, "BSE:SHARDAMOTR": true, "NSE:SHEETAL": true, "BSE:SHIVATEX": true, "BSE:SHYAMCENT": true, "BSE:SIGIND": true, "BSE:SIGMA": true, "BSE:SIGNATURE": true, "BSE:SINDHUTRAD": true, "BSE:SOMICONVEY": true, "BSE:SOUTHWEST": true, "BSE:SPENCERS": true, "BSE:SRGHFL": true, "BSE:SUBEXLTD": true, "BSE:TASTYBITE": true, "BSE:TECILCHEM": true, "BSE:TITAGARH": true, "BSE:TPLPLASTEH": true, "BSE:TREL": true, "BSE:TTKHLTCARE": true, "BSE:TVSSCS": true, "BSE:UCAL": true, "BSE:UDS": true, "BSE:UMANGDAIRY": true, "BSE:UNIENTER": true, "BSE:URAVI": true, "BSE:URJA": true, "BSE:UTKARSHBNK": true, "BSE:VALIANTLAB": true, "BSE:VENKEYS": true, "BSE:VIJIFIN": true, "BSE:VIPULLTD": true, "BSE:VLEGOV": true, "BSE:VPRPL": true, "NSE:WORTH": true, "BSE:WSI": true, "BSE:YASHO": true, "BSE:YATHARTH": true, "BSE:YATRA": true, "NSE:ZEAL": true, "BSE:BLUECOAST": true, "BSE:DIGJAMLMTD": true, "BSE:GATECH": true, "NSE:SECMARK": true, "BSE:KEL": true, "BSE:PLAZACABLE": true, "BSE:SICALLOG": true, "BSE:LLOYDSENGG": true, "NSE:MAL": true, "NSE:TCLCONS": true, "BSE:TPHQ": true, "BSE:SURAJEST": true, "BSE:NCC": true, } func GetIndiaStock() { for { filter := bson.M{"Country": "India"} dateList, err := data.MgoFind(data.StockList, filter) if err != nil { applogger.Error("MgoFind info err: %v", err) continue } //start := time.Now() // 获取当前时间 validStockCodeMutex.Lock() if len(dateList.([]primitive.M)) > 0 { validStockCode = map[string]bool{} } for _, value := range dateList.([]primitive.M) { if value["Exchange"] == nil || value["Code"] == nil { continue } code := value["Code"].(string) exchange := value["Exchange"].(string) validStockCode[fmt.Sprintf("%s:%s", exchange, code)] = true } validStockCodeMutex.Unlock() //fmt.Println("Run time: ", time.Since(start)) applogger.Info("india stock number :%v", len(validStockCode)) time.Sleep(1 * time.Hour) } } func GetIndiaStockBool(key, country string) bool { if country != "India" { return true } validStockCodeMutex.RLock() defer validStockCodeMutex.RUnlock() return validStockCode[key] } func ReadTest(rename string) { data.Mgo_init(config.Config.Mongodb) file, err := os.Open(rename) if err != nil { // 错误处理 fmt.Println("Error opening file:", err) return } defer file.Close() // 确保在函数结束时关闭文件 scanner := bufio.NewScanner(file) stockList := make([]string, 0) // i := 0 for scanner.Scan() { //i++ // scanner.Text() 返回当前行的内容 // fmt.Println(strings.TrimSpace(scanner.Text()),i) filter := bson.M{"Country": "India", "Code": strings.TrimSpace(scanner.Text())} dateList, _ := data.MgoFind(data.StockList, filter) res := dateList.([]primitive.M) if len(res) <= 0 { fmt.Println(res) continue } else if len(res) >= 2 { fmt.Println(res) break } str, ok := res[0]["Exchange"].(string) if !ok { fmt.Println(res) continue } exchange := "BSE" if str == "BSE" { exchange = "NSE" } stockList = append(stockList, fmt.Sprintf("%s:%s", exchange, strings.TrimSpace(scanner.Text()))) } if err := scanner.Err(); err != nil { fmt.Println("Error reading file:", err) } write(stockList) } func write(param []string) { fmt.Println(len(param)) filename := "example.txt" // 打开文件以追加数据,如果文件不存在则创建它 file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() // 要追加的内容 for _, value := range param { content := fmt.Sprintf(`"%s":true, %s`, value, "\n") // 写入数据 _, err = file.WriteString(content) if err != nil { fmt.Println("Error writing to file:", err) return } } }