咸鱼的反击
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.
 
 
 
xianyudefanji/assets/Scripts/stock/StockManager.ts

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