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.

671 lines
16 KiB

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