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.
233 lines
9.3 KiB
233 lines
9.3 KiB
import { ryw_Event } from "../../FrameWork/Event/EventEnum";
|
|
import EventMgr from "../../FrameWork/Event/EventMgr";
|
|
import User from "../../FrameWork/User/User";
|
|
import Common5 from "../../Platform/th/Common5";
|
|
|
|
|
|
|
|
export default class StockManager{
|
|
|
|
//每天重新刷新股票的价格数据并写入内存(bForce是否强制刷新)
|
|
public static refreshAllStocksData(day,bForce){
|
|
let stocksConfig = Common5.allStocksConfig
|
|
let curSaveStockDay = User.getCurSaveStockDay()
|
|
if(!bForce){
|
|
//同一天不用重复刷新
|
|
if(curSaveStockDay == day){
|
|
return
|
|
}else{
|
|
User.setCurSaveStockDay(day)
|
|
}
|
|
}
|
|
|
|
//第一天,将初始价格和涨幅写入内存
|
|
if(day == 1){
|
|
let tempTab = {}
|
|
for(var i=0;i<stocksConfig.length;i++){
|
|
let stockName = stocksConfig[i].stockName
|
|
let startPrice = stocksConfig[i].startPrice
|
|
|
|
// console.log("股票名称=",stockName)
|
|
tempTab[stockName] = {}
|
|
tempTab[stockName]["stockName"] = stockName
|
|
tempTab[stockName]["curPrice"] = startPrice
|
|
tempTab[stockName]["curRate"] = this.createDropOrGainsRate(day,stocksConfig[i], startPrice)
|
|
tempTab[stockName]["riskAttributes"] = stocksConfig[i].riskAttributes
|
|
// tempTab[stockName]["stockSum"] = stocksConfig[i].stockSum
|
|
}
|
|
User.setStocksData(tempTab)
|
|
//当天的股价由前一天的股价和当天涨跌幅算出
|
|
}else{
|
|
let stocksStorageConfig = User.getStocksData()
|
|
let tempTab = {}
|
|
for(var key in stocksStorageConfig){
|
|
let stockName = key
|
|
let lastPrice = stocksStorageConfig[stockName].curPrice
|
|
let singConfig = this.getSingleCompanyConfig(stockName)
|
|
if(!singConfig){
|
|
continue
|
|
}
|
|
let curRate = this.createDropOrGainsRate(day,singConfig, lastPrice)
|
|
let tempPrice = lastPrice*(1+ Number(curRate)/100)
|
|
let curPrice = Math.floor(tempPrice)
|
|
|
|
tempTab[stockName] = {}
|
|
tempTab[stockName]["stockName"] = stockName
|
|
tempTab[stockName]["curPrice"] = curPrice
|
|
tempTab[stockName]["curRate"] = curRate
|
|
tempTab[stockName]["riskAttributes"] = singConfig.riskAttributes
|
|
// tempTab[stockName]["stockSum"] = singConfig.stockSum
|
|
}
|
|
User.setStocksData(tempTab)
|
|
}
|
|
//取出作弊数据后清空
|
|
let tomorrowStockData = User.getTomorrowStockData()
|
|
if(tomorrowStockData && tomorrowStockData.changeDay >0 && day == tomorrowStockData.changeDay){
|
|
User.setTomorrowStockData({})
|
|
}
|
|
|
|
EventMgr.emitEvent_custom(ryw_Event.updateStockView);
|
|
}
|
|
//生成涨跌幅比率
|
|
public static createDropOrGainsRate(day,config, curPrice){
|
|
let trueRate = this.getTomorrowGainsRateById(day,config.id)
|
|
if(trueRate != -1){
|
|
console.log("读取了明日股票缓存"+config.stockName+trueRate)
|
|
return trueRate
|
|
}
|
|
|
|
let randomRate = 0
|
|
//随机涨或跌
|
|
let riseval = 50
|
|
if (curPrice > config.startPrice*1.3){
|
|
//涨的概率降低
|
|
riseval -= 30 * ((curPrice- config.startPrice*1.3)/(config.startPrice*2.7))
|
|
}
|
|
else if (curPrice < config.startPrice*0.8){
|
|
if (curPrice <= config.startPrice*0.05){
|
|
riseval = 0
|
|
}
|
|
else{
|
|
//涨的概率提升
|
|
riseval += (50 * ((config.startPrice*0.8-curPrice)/(config.startPrice*0.8))) * 1.2
|
|
}
|
|
}
|
|
|
|
let bGains = Common5.getRandomNum(0,100)
|
|
if (bGains <= riseval){
|
|
//涨
|
|
randomRate = Common5.getRandomNum(config.smallestGains*10,config.biggestGains*10)
|
|
}
|
|
else{
|
|
//跌
|
|
randomRate = Common5.getRandomNum(config.smallestDrop*10,config.biggestDrop*10)
|
|
}
|
|
trueRate = (randomRate/10).toFixed(1)
|
|
//console.log("trueRate=",trueRate)
|
|
return trueRate
|
|
}
|
|
|
|
//获取明日涨跌幅比率
|
|
public static getTomorrowGainsRateById(day,id){
|
|
let tomorrowStockData = User.getTomorrowStockData()
|
|
if(tomorrowStockData && tomorrowStockData.changeDay >0 && day == tomorrowStockData.changeDay){
|
|
for(var i=0;i<tomorrowStockData.changeStock.length;i++){
|
|
if(tomorrowStockData.changeStock[i].id == id){
|
|
return tomorrowStockData.changeStock[i].rate
|
|
}
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
//获取单个公司config
|
|
public static getSingleCompanyConfig(nameStr){
|
|
let stocksConfig = Common5.allStocksConfig
|
|
for(var i=0;i<stocksConfig.length;i++){
|
|
if(stocksConfig[i].stockName == nameStr){
|
|
return stocksConfig[i]
|
|
}
|
|
}
|
|
let juQingStockConfig = Common5.juQingStocksConfig
|
|
for(var i=0;i<juQingStockConfig.length;i++){
|
|
if(juQingStockConfig[i].stockName == nameStr){
|
|
return juQingStockConfig[i]
|
|
}
|
|
}
|
|
}
|
|
//获取单个公司config
|
|
public static getSingleCompanyConfigById(id){
|
|
let stocksConfig = Common5.allStocksConfig
|
|
for(var i=0;i<stocksConfig.length;i++){
|
|
if(stocksConfig[i].id == id){
|
|
return stocksConfig[i]
|
|
}
|
|
}
|
|
let juQingStockConfig = Common5.juQingStocksConfig
|
|
for(var i=0;i<juQingStockConfig.length;i++){
|
|
if(juQingStockConfig[i].id == id){
|
|
return juQingStockConfig[i]
|
|
}
|
|
}
|
|
}
|
|
//随机产生第二天上涨的股票及涨幅
|
|
public static setTomorrowUpStock(curDay){
|
|
let stocksConfig = Common5.allStocksConfig
|
|
let diFenXianIdConfig = []
|
|
let gaoFenXianIdConfig = []
|
|
for(var i=0;i<stocksConfig.length;i++){
|
|
if(stocksConfig[i].riskAttributes == "高"){
|
|
gaoFenXianIdConfig.push(stocksConfig[i].id)
|
|
}else if(stocksConfig[i].riskAttributes == "低"){
|
|
diFenXianIdConfig.push(stocksConfig[i].id)
|
|
}
|
|
}
|
|
let selectGaoIndexIdArr = Common5.getNumberFromArray(0,gaoFenXianIdConfig.length,2)
|
|
let selectDiIndexIdArr = Common5.getNumberFromArray(0,diFenXianIdConfig.length,2)
|
|
//全部放入一个表中
|
|
let tempAllInfo = []
|
|
for(var i=0;i<selectGaoIndexIdArr.length;i++){
|
|
tempAllInfo.push(gaoFenXianIdConfig[selectGaoIndexIdArr[i]])
|
|
}
|
|
for(var i=0;i<selectDiIndexIdArr.length;i++){
|
|
tempAllInfo.push(diFenXianIdConfig[selectDiIndexIdArr[i]])
|
|
}
|
|
console.log("tempAllInfo==",tempAllInfo)
|
|
let saveInfo = {
|
|
changeDay:curDay+1,
|
|
changeStock:[]
|
|
}
|
|
let stockNameArrGao = ""
|
|
let stockNameArrDi = ""
|
|
for(var i=0;i<tempAllInfo.length;i++){
|
|
let singleConfig = this.getSingleCompanyConfigById(tempAllInfo[i])
|
|
let randomRate = Common5.getRandomNum(singleConfig.smallestGains*10,singleConfig.biggestGains*10)
|
|
let trueRate = (randomRate/10).toFixed(1)
|
|
saveInfo.changeStock.push({id:tempAllInfo[i],rate:trueRate})
|
|
if(singleConfig.riskAttributes == "高"){
|
|
stockNameArrGao += `【${singleConfig.stockName}】`
|
|
}else{
|
|
stockNameArrDi += `【${singleConfig.stockName}】`
|
|
}
|
|
|
|
}
|
|
User.setTomorrowStockData(saveInfo)
|
|
console.log("明天会涨的股票包括==",stockNameArrGao,stockNameArrDi,saveInfo)
|
|
return {stockNameArrGao:stockNameArrGao,stockNameArrDi:stockNameArrDi}
|
|
}
|
|
//增加剧情股票(写入缓存)
|
|
public static addJuQingStock(){
|
|
let juQingStockConfig = Common5.juQingStocksConfig
|
|
//已有缓存
|
|
let stocksStorageConfig = User.getStocksData()
|
|
|
|
for(var i=0;i<juQingStockConfig.length;i++){
|
|
let stockName = juQingStockConfig[i].stockName
|
|
let startPrice = juQingStockConfig[i].startPrice
|
|
|
|
let temp = {}
|
|
temp[stockName] = {}
|
|
temp[stockName]["stockName"] = stockName
|
|
temp[stockName]["curPrice"] = startPrice
|
|
temp[stockName]["curRate"] = this.createDropOrGainsRate(1,juQingStockConfig[i], startPrice)
|
|
temp[stockName]["riskAttributes"] = juQingStockConfig[i].riskAttributes
|
|
|
|
//将新增对象插入第一个(深拷贝)
|
|
stocksStorageConfig = {...temp,...stocksStorageConfig};
|
|
}
|
|
User.setStocksData(stocksStorageConfig)
|
|
}
|
|
//获得剧情股票当前数据
|
|
public static getJuQingStockData(stockName){
|
|
let singConfig = this.getSingleCompanyConfig(stockName)
|
|
let stocksStorageConfig = User.getStocksData()
|
|
|
|
for(var key in stocksStorageConfig){
|
|
if(key == stockName){
|
|
let marketValue = singConfig.stockSum * stocksStorageConfig[key].curPrice
|
|
console.log("需要获取的股票信息==",stockName,marketValue)
|
|
return {stockName:stockName,marketValue:marketValue}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|