import axios from "@/utils/request"; import { deepClone } from "../../utils"; /* 状态 */ const state = { copilot: { /* 产量驾驶舱 */ yield: { ftoInvest: null, chipInvest: null, chipOutput: null, stdOutput: null, bipvOutput: null, }, /* 能源驾驶舱 */ energy: {}, /* 效率驾驶舱 */ efficiency: { chipOee: { current: [], previous: [], }, transformRate: { current: [], previous: [], }, chipRate: { target: [], current: [], previous: [], }, stdRate: { target: [], current: [], }, }, }, home: { /** 主页状态 */ ftoInvest: null, chipInvest: null, chipOutput: null, stdOutput: null, bipvOutput: null, }, }; const mutations = { SET_HOME_INFO: (state, payload) => { state.home.ftoInvest = payload.ftoInvest; state.home.chipInvest = payload.chipInvest; state.home.chipOutput = payload.chipOutput; state.home.stdOutput = payload.stdOutput; state.home.bipvOutput = payload.bipvOutput; }, SET_COPILOT_INFO: (state, { type, payload }) => { switch (type) { case "yield": state.copilot.yield.ftoInvest = payload.ftoInvest; state.copilot.yield.chipInvest = payload.chipInvest; state.copilot.yield.chipOutput = payload.chipOutput; state.copilot.yield.stdOutput = payload.stdOutput; state.copilot.yield.bipvOutput = payload.bipvOutput; break; case "energy": state.copilot.energy = payload.data; break; case "efficiency": console.log('222222', payload.chipOee) state.copilot.efficiency.chipOee = payload.chipOee; state.copilot.efficiency.transformRate = payload.transformRate; state.copilot.efficiency.chipRate = payload.chipRate; state.copilot.efficiency.stdRate = payload.stdRate; break; } }, }; const actions = { /** 初始化首页数据 */ async initHome({ commit }) { const dataArr = await getHomeInfo(); const targetArr = await getHomeTarget(); const payload = splitCurrentAndPrevious(dataArr, targetArr); commit("SET_HOME_INFO", payload); }, /** 初始化驾驶舱数据 */ async initCopilot({ commit }, { period, source }) { if (source == "comprehensive") return; const fetcher = { yield: getCopilotYield, comprehensive: getCopilotEnergy, efficiency: getCopilotEfficiency, }[source]; const handler = { yield: splitCurrentAndPrevious, comprehensive: () => null, efficiency: splitCurrentAndPreviousA, }[source]; // 获取产量数据 // console.log('qqqqqq',handler) let { data: factoryList, type } = await fetcher(period); let targetList = null; if (source === "yield" || source === "efficiency") { // 获取目标数据 let { data } = await fetcher(period, true) console.log('11111',data) targetList = data; } const payload = handler(factoryList, targetList); commit("SET_COPILOT_INFO", { type, payload }); }, }; export default { namespaced: true, state, mutations, actions, }; function splitCurrentAndPreviousA(factoryListResponse, targetListResponse) { console.log('工厂',factoryListResponse); // console.log('工厂',factoryListResponse); // 初始数据 const { chipOee, transformRate, chipRate, stdRate } = initA(); factoryListResponse = [ { factory: 0, oee: 0.8, previousYearOee: 0.7, componentConversionEfficiency: 0.8, previousYearComponentConversionEfficiency: 0.7, glassType: 0, yieldRate: 0.8, previousYearYieldRate: 0.7, chipYieldRate: 0.38, componentYieldRate: 0.73, }, { factory: 1, oee: 0.8, previousYearOee: 0.7, componentConversionEfficiency: 0.8, previousYearComponentConversionEfficiency: 0.7, glassType: 1, yieldRate: 0.8, previousYearYieldRate: 0.7, chipYieldRate: 0.38, componentYieldRate: 0.73, }, { factory: 2, oee: 0.8, previousYearOee: 0.7, componentConversionEfficiency: 0.8, previousYearComponentConversionEfficiency: 0.7, glassType: 1, yieldRate: 0.8, previousYearYieldRate: 0.7, chipYieldRate: 0.38, componentYieldRate: 0.73, }, { factory: 3, oee: 0.8, previousYearOee: 0.7, componentConversionEfficiency: 0.8, previousYearComponentConversionEfficiency: 0.7, glassType: 0, yieldRate: 0.8, previousYearYieldRate: 0.7, chipYieldRate: 0.38, componentYieldRate: 0.73, }, ]; if (factoryListResponse) { for (const factory of factoryListResponse) { const fId = getFactoryId(factory); // 获取目标值 if (targetListResponse) { const { chipYieldRate, componentYieldRate, chipOee, componentConversionEfficiency, } = getFactoryTargetValueA(targetListResponse, fId); stdRate.target[fId] = chipYieldRate; chipRate.target[fId] = componentYieldRate; } // 芯片OEE chipOee.current[fId] = factory.oee * 100 || random_default(); chipOee.previous[fId] = factory.previousYearOee * 100 || random_default(); // 转化效率 transformRate.current[fId] = factory.componentConversionEfficiency * 100 || random_default(); transformRate.previous[fId] = factory.previousYearComponentConversionEfficiency * 100 || random_default(); // 芯片良率 与 标准组件良率 if (![0, 1].includes(factory.glassType)) continue; const _t = [chipRate, stdRate][factory.glassType]; _t.current[fId] = factory.yieldRate || random_default(); _t.previous[fId] = factory.previousYearYieldRate || random_default(); } return { chipOee, transformRate, chipRate, stdRate, }; } } function splitCurrentAndPrevious(factoryListResponse, targetListResponse) { console.log('工厂',factoryListResponse); // 初始数据 const { chipInvest, ftoInvest, chipOutput, stdOutput, bipvOutput } = init(); if (factoryListResponse) { for (const factory of factoryListResponse) { const fId = getFactoryId(factory); // 获取目标值 if (targetListResponse) { const { chipYield, componentYield, bipvProductOutput } = getFactoryTargetValue(targetListResponse, fId); chipOutput.target[fId] = chipYield; stdOutput.target[fId] = componentYield; bipvOutput.target[fId] = bipvProductOutput; } // 芯片投入 chipInvest.current[fId] = factory.inputNumber; chipInvest.previous[fId] = factory.previousYearInputNumber; // FTO投入 ftoInvest.current[fId] = factory.chipInput; ftoInvest.previous[fId] = factory.previousYearChipInput; // 产出数据, 0 - (玻璃)芯片产出, 1 - 标准组件产出, 2 - BIPV产出 // 因为后端写的垃圾数据,所以这里要做一下判断 if (![0, 1, 2].includes(factory.glassType)) continue; const _t = [chipOutput, stdOutput, bipvOutput][factory.glassType]; _t.current[fId] = factory.outputNumber; _t.previous[fId] = factory.previousYearOutputNumber; // debugger; } return { chipInvest, ftoInvest, chipOutput, stdOutput, bipvOutput, }; } } function getFactoryId(factory) { return factory.factory; } function getFactoryTargetValue(targetList, factoryId) { const target = targetList.find((item) => item.factory === factoryId); if (target) { return { // 自带模拟数据了.... random_default chipYield: target.chipYield ?? random_default(), componentYield: target.componentYield ?? random_default(), bipvProductOutput: target.bipvProductOutput ?? random_default(), }; } return { chipYield: random_default(), componentYield: random_default(), bipvProductOutput: random_default(), }; } /** * 获取 芯片良率目标值 和 标准组件良率目标值 * @param {*} targetList 目标值列表 * @param {*} factoryId 工厂ID * @returns */ function getFactoryTargetValueA(targetList, factoryId) { const target = targetList.find((item) => item.factory === factoryId); if (target) { return { chipYieldRate: target.chipYieldRate ?? random_default(), componentYieldRate: target.componentYieldRate ?? random_default(), }; } return { chipYieldRate: random_default(), componentYieldRate: random_default(), }; } /** * * @returns 初始化 效率模块里 初始状态值 */ function initA() { const t_ = { current: Array(7).fill(0), previous: Array(7).fill(0), }; // 芯片OEE const chipOee = deepClone(t_); // 转化效率 const transformRate = deepClone(t_); // 标准组件良率 const stdRate = { ...deepClone(t_), target: Array(7).fill(0), }; // 芯片良率 const chipRate = deepClone(stdRate); return { chipOee, transformRate, chipRate, stdRate, }; } /** * * @returns 初始化 产量模块里 初始状态值 */ function init() { const t_ = { current: Array(7).fill(0), previous: Array(7).fill(0), }; // 芯片投入 const chipInvest = deepClone(t_); // FTO投入 const ftoInvest = deepClone(t_); // 芯片产出 const chipOutput = { ...deepClone(t_), target: Array(7).fill(0), }; // 标准组件产出 const stdOutput = deepClone(chipOutput); // BIPV产出 const bipvOutput = deepClone(chipOutput); return { chipInvest, // 芯片投入 ftoInvest, // FTO投入 chipOutput, // 芯片产出 stdOutput, // 标准组件产出 bipvOutput, // BIPV产出 }; } function random_default(min = 0, max = 1) { // return 0; let a = Math.floor(Math.random() * max); while (a < min) { a = Math.floor(Math.random() * max); } return a; } /* 接口 */ async function getHomeInfo() { const { code, data } = await axios.post("/ip/prod-output/query-by-date", { factorys: [], date: 4, }); if (code == 0) { return data; } console.warn("getHomeInfo failed, code: ", code); return null; } async function getHomeTarget() { const { code, data } = await axios.post("/ip/prod-target/query-by-date", { factorys: [], date: 4, }); if (code == 0) { return data; } console.warn("getHomeTarget failed, code: ", code); return null; } function getUrl(copilot_module) { let url = { // 对比数据的 URL comparison: "", // 目标数据的 URL target: "", }; switch (copilot_module) { case "yield": url.comparison = "/ip/prod-output/query-by-date"; url.target = "/ip/prod-target/query-by-date"; break; case "energy": break; case "efficiency": url.comparison = "/ip/prod-output/query-Rate-List"; url.target = "/ip/prod-target/query-rate-target"; break; } return url; } async function doFetch(copilot_module = "yield", fetch_target, params) { const url = getUrl(copilot_module); const { code, data } = await axios.post( fetch_target ? url.target : url.comparison, { ...params, } ); if (code == 0) { return data; } console.warn("[doFetch] failed, code: ", code); return null; } /** * * @param {*} period 日周月年1,2,3,4 * @param {*} target 是否获取目标数据 * @returns */ function getCopilotYield(period, target = false) { return getCopilotData("yield", period, target); } function getCopilotEnergy(period, target = false) { return getCopilotData("energy", period, target); } function getCopilotEfficiency(period, target = false) { return getCopilotData("efficiency", period, target); } /** * * @param {*} period 周期: 日周月年 * @param {*} target 是否获取目标数据:默认 否 * @returns */ async function getCopilotData(copilot_module, period, target = false) { if (!copilot_module) copilot_module = "yield"; // 请求参数,直接一次性获取所有工厂 let queryParams = { factorys: [], date: 4, }; switch (period) { case "日": queryParams.date = 1; break; case "周": queryParams.date = 2; break; case "月": queryParams.date = 3; break; case "年": queryParams.date = 4; break; default: queryParams.date = 1; break; } return { data: await doFetch(copilot_module, target ? true : false, queryParams), type: copilot_module, }; }