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"; import TaskManager, { MainTaskIdEnum } from "../../JuQingChat/TaskManager"; const { ccclass, property } = cc._decorator; let JuQingStockName = { NiFengJiTuan: "逆风集团" } @ccclass export default class StockManager { public static JuQingStockName = JuQingStockName //每天重新刷新股票的价格数据并写入内存(bForce是否强制刷新) public static refreshAllStocksData(day, bForce) { let stocksConfig = Common5.allStocksConfig let curSaveStockDay = User.getCurSaveStockDay() if (!bForce) { //同一天不用重复刷新 if (curSaveStockDay == day) { return } else { User.setCurSaveStockDay(day) } } let stocksStorageConfig = User.getStocksData() //第一天,将初始价格和涨幅写入内存 if (day == 1 || Object.keys(stocksStorageConfig).length === 0) { 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 tempTab = {} for (var key in stocksStorageConfig) { let stockName = key let lastPrice = stocksStorageConfig[stockName].curPrice let singConfig = this.getSingleCompanyConfig(stockName) 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 = 100 } 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) } let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo() let mainId = mainTaskInfo.Id if (config.stockName == "龙氏集团" && mainId != MainTaskIdEnum.MainTask_2404) { randomRate = 0 } 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 } } } } //设置特殊股票数量 stockName股票名,rate比率 public static setSpecialStockNum(stockName,rate){ let config = this.getSingleCompanyConfig(stockName) let price = config.startPrice let num = rate*config.stockSum let buyStockTab = { stockName: stockName, buyPrice: price, prossess: num } User.setMyStockData(buyStockTab) } }