factory_web/src/views/enm_kiln/teamAnalysis.vue

514 lines
16 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-header>
<div class="left-panel">
<el-date-picker
v-model="query.year_s"
type="year"
value-format="YYYY"
format="YYYY"
placeholder="查询年份"
class="headerSearch"
/>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
<el-button
type="primary"
@click="exportExcel()"
:loading="exportLoading"
v-auth="'export_excel'"
>导出xlsx
</el-button>
<el-button type="primary" @click="handlePrint">打印 </el-button>
</div>
</el-header>
<el-card style="margin-top: 5px">
<div class="printWrap">
<div ref="print" id="myReport" class="printContainer">
<table
border="1"
width="3200"
cellspacing="0"
:key="timeStamp"
id="myTable"
class="myTable"
>
<thead class="myTableHead">
<tr>
<th colspan="31">烧成工序班组月度对比分析</th>
</tr>
<tr>
<th rowspan="2">月份</th>
<th rowspan="2">班组</th>
<th colspan="2">产量</th>
<th>运转率</th>
<th>成本</th>
<th colspan="4">质量</th>
<th colspan="7">单位产品标煤耗</th>
<th colspan="12">产品单位电耗</th>
<th rowspan="2">得分</th>
<th rowspan="2">排名</th>
</tr>
<tr>
<th>总产量t</th>
<th>台时产量t/h</th>
<th>运转率(%</th>
<th>单位产品成本(元/吨)</th>
<th>细度(%</th>
<th>水分(%</th>
<th>立升重(%</th>
<th>f-CaO%</th>
<th>当期值kgce/t</th>
<th>目标值kgce/t</th>
<th>当期与目标差值kgce/t</th>
<th>环期值kgce/t</th>
<th>当期与环期差值kgce/t</th>
<th>环比增长率(%</th>
<th>同比增长率(%</th>
<th>高温风机kW·h/t</th>
<th>篦冷机一室风机kW·h/t</th>
<th>篦冷机三室风机kW·h/t</th>
<th>篦冷机二室风机kW·h/t</th>
<th>窑头排风机kW·h/t</th>
<th>当期值kW·h/t</th>
<th>目标值kW·h/t</th>
<th>当期与目标差值kW·h/t</th>
<th>环期值kW·h/t</th>
<th>当期与环期差值kW·h/t</th>
<th>环比增长率(%</th>
<th>同比增长率(%</th>
</tr>
</thead>
<tr v-for="(item, index) in tableDatas" :key="index">
<td
v-for="(item0, index0) in item"
:key="index0"
class="numCell"
>
{{ item0 }}
</td>
</tr>
</table>
</div>
</div>
</el-card>
</div>
</template>
<script>
export default {
data() {
return {
timeStamp: 0,
query: {
year_s: "",
page: 0,
type: "month_st",
mgroup: "",
},
tableDatas: [],
exportLoading: false,
tableName:'烧成工序班组月度对比分析',
};
},
mounted() {
let that = this;
var myDate = new Date();
let year = myDate.getFullYear();
this.timeStamp = myDate.getTime();
that.query.year_s = year;
this.$API.mtm.mgroup.list
.req({ page: 0, search: "回转窑" })
.then((res) => {
that.query.mgroup = res[0].id;
that.getGoalData();
});
},
methods: {
getGoalData() {
let that = this;
let params = {};
params.page = 0;
params.year = that.query.year_s;
params.mgroup = that.query.mgroup;
this.$API.mtm.goal.list.req(params).then((res) => {
// let data = [];
// if (res.length > 0) {
// this.data = res;
// }
that.getData(res);
});
},
getData(goalData) {
let that = this;
let query0 = {};
query0.page = 0;
query0.type = "month_st";
query0.year_s = that.query.year_s - 1;
query0.mgroup = that.query.mgroup;
let wrapArr = [],
wrapArr0 = [],
wrapArrs = [],
comparEarr = [], //班组对比
month_obj = {},
compareArr0 = [];
this.$API.enm.enstat.req(query0).then((res0) => {
let data0 = res0;
if (data0.length > 0) {
data0.forEach((item0) => {
//先按月份排序,再按班组排序
let month = item0.month_s;
if (!wrapArr0[month]) {
wrapArr0[month] = [];
}
// let arr0 = [];
// arr0[0] = n0;
// arr0[1] = team_name0;
// arr0[2] = item0.total_output_unit;
// arr0[3] = item0.total_output_unit;
// arr0[4] = item0.run_rate_unit;
wrapArr0[month].push(item0);
});
} else {}
}).then(() => {
this.$API.enm.enstat.req(that.query).then((res) => {
let data = res;
if (data.length > 0) {
data.forEach((item) => {
//先按月份排序,再按班组排序
let compareArr = [];
let elecArr = [];
compareArr.push(item.month_s);
elecArr.push(item.month_s);
compareArr.push(item.team_name);
elecArr.push(item.team_name);
compareArr.push(item.coal_consume_unit);
elecArr.push(item.elec_consume_unit);
compareArr0.push(compareArr);
comparEarr.push(elecArr);
if (!month_obj[item.month_s]) {
month_obj[item.month_s] = [];
};
month_obj[item.month_s].push(
{
team:item.team_name,
production_hour: item.production_hour,
run_rate:item.run_rate,
production_cost_unit:item.production_cost_unit,
CaO:item.出窑熟料_fCaO_rate_pass,
coal_consume_unit:item.coal_consume_unit,
lisz:item.出窑熟料_立升重_rate_pass,
elec:item.elec_consume_unit,
}
);
});
data.forEach((item) => {
//先按月份排序,再按班组排序
let n = item.month_s;
let ind = 0;
let arr = [];
let time = "" + item.year_s + "." + item.month_s;
arr.push(time);
arr.push(item.team_name);
arr.push(item.total_production);
arr.push(item.production_hour);
arr.push(item.run_rate);
arr.push(item.production_cost_unit);
//质量
// arr[6] =
// item.入窑生料_CaO_rate_pass != null
// ? item.入窑生料_CaO_rate_pass
// : "/";
// arr[7] =
// item.入窑生料_Fe2O3_rate_pass != null
// ? item.入窑生料_Fe2O3_rate_pass
// : "/";
arr[6] =
item.出磨煤粉_细度_rate_pass != null
? item.出磨煤粉_细度_rate_pass
: "/";
arr[7] =
item.出磨煤粉_水分_rate_pass != null
? item.出磨煤粉_水分_rate_pass
: "/";
arr[8] =
item.出窑熟料_立升重_rate_pass != null
? item.出窑熟料_立升重_rate_pass
: "/";
arr[9] =
item.出窑熟料_fCaO_rate_pass != null
? item.出窑熟料_fCaO_rate_pass
: "/";
//煤耗
arr[10] = item.coal_consume_unit; //当期值kW·h/t
let keyValue = "goal_val_" + n;
if (goalData.length > 0){
goalData.forEach((item) => {
if (item.goal_cate_name == "单位产品标煤耗kgce/t") {
arr[11] = item[keyValue]; //目标值kW·h/t//需要接口获取
}else if (item.goal_cate_name == "单位产品分布电耗kW·h/t"){
arr[23] = item[keyValue]; //目标值kW·h/t//需要接口获取
}
});
};
let dq = 0
if (arr[11] !== null && arr[11] !== undefined){
dq = (arr[10] - arr[11]).toFixed(2); //当期与目标差值kW·h/t
}else{
dq == "/"
};
arr[12] = dq; //当期与目标差值
let ind_pre = 0,
huanbi = 0;
if (item.month_s == 1) {
ind_pre = 12;
if (wrapArr0[ind_pre]) {
wrapArr0[ind_pre].forEach((item0) => {
if (item0.team_name == item.team_name) {
huanbi = item0.coal_consume_unit;
}
});
}
} else {
// 如果 wrapArr数组长度大于0那么循环遍历wrapArr数组找到与item.month_s相差1的元素 而 item.name相同并赋值给huanbi
compareArr0.forEach((item0) => {
if (item0[0] == item.month_s - 1 && item0[1] == item.team_name) {
huanbi = item0[2];
}
})
}
arr[13] = huanbi; //环期值kW·h/t上个月的值
if(huanbi !=="/"){
arr[14] = (arr[10] - arr[13]).toFixed(2); //当期与环期差值kW·h/t
}else{
arr[14] = 0
};
if (arr[13] !== "/"&& arr[13]!== 0 && arr[14]!=="/") {
arr[15] = ((arr[14] / arr[13]) * 100).toFixed(2); //环比增长率(%
} else{
arr[15] = "/"
};
let sameRate = 0;
if (
wrapArr0[ind] &&
wrapArr0[ind].coal_consume_unit
) {
sameRate =
(( item.coal_consume_unit -
wrapArr0[ind].coal_consume_unit) /
wrapArr0[ind].coal_consume_unit) *
100;
} else {
sameRate = "/";
}
arr[16] = sameRate; ///同比增长率(%)需要当前值/ 上一年同一个月的值即wrapArr0[ind].elec_consume_unit
//电耗
//设备
arr[17] =
item.高温风机_consume_unit != null
? item.高温风机_consume_unit
: "/";
arr[18] =
item.篦冷机一室风机电机_consume_unit != null
? item.篦冷机一室风机电机_consume_unit
: "/";
arr[19] =
item.篦冷机三室风机电机_consume_unit != null
? item.篦冷机三室风机电机_consume_unit
: "/";
arr[20] =
item.篦冷机二室风机电机_consume_unit != null
? item.篦冷机二室风机电机_consume_unit
: "/";
arr[21] =
item.窑头排风机主电机_consume_unit != null
? item.窑头排风机主电机_consume_unit
: "/";
arr[22] = item.elec_consume_unit; //当期值kW·h/t
// arr[25] = item.celec_consume_unit; //目标值kW·h/t//需要接口获取
if (item.elec_consume_unit != null &&item.elec_consume_unit !== "/"){
arr[24] = (arr[22]-arr[23]).toFixed(2); //当期与目标差值kW·h/t
}
let huanbiec = 0;
if (item.month_s == 1) {
ind_pre = 12;
if (wrapArr0[ind_pre]) {
wrapArr0[ind_pre].forEach((item0) => {
if (item0.team_name == item.team_name) {
huanbiec = item0.elec_consume_unit;
}
});
}
} else {
// 如果 wrapArr数组长度大于0那么循环遍历wrapArr数组找到与item.month_s相差1的元素 而 item.name相同并赋值给huanbi
comparEarr.forEach((item0) => {
if (item0[0] == item.month_s - 1 && item0[1] == item.team_name) {
huanbiec = item0[2];
}
})
}
arr[25] = huanbiec; //环期值kW·h/t上个月的值
if(arr[25]!=="/" && huanbiec!=="/"){
arr[26] = (arr[22] - huanbiec).toFixed(2); //当期与环期差值kW·h/t
}else{
arr[26] = "/"
}
if(arr[26]!=="/" && huanbiec!=="/"&&huanbiec!==0){
arr[27] = ((arr[26] / huanbiec) * 100).toFixed(2); //环比增长率(%
}else{
arr[27] = 0}; //环比增长率(%
arr[28] = item.celec_consume_unit; //同比增长率(%
arr[29] = 0;
if (month_obj[n]) {
const monthData = month_obj[n];
const itemValue = item.elec_consume_unit; // 单位产品电耗的值
const sortedData = monthData.sort((a, b) => parseFloat(b.elec) - parseFloat(a.elec));
const index = sortedData.findIndex(obj => parseFloat(obj.elec) === parseFloat(itemValue));
let elec_score = 0;
if (index === 0){
elec_score= 5;
} else if (index === 1) {
elec_score= 8;
} else if (index === 2) {
elec_score= 10;
} else if (index === 3) {
elec_score= 15;
}
arr[29] += elec_score;
// const run_rate_itemValue = item.run_rate; // 运转率的值
// const run_rate_sortedData = monthData.sort((a, b) => parseFloat(b.run_rate) - parseFloat(a.run_rate));
// const run_rate_index = run_rate_sortedData.findIndex(obj => parseFloat(obj.run_rate) === parseFloat(run_rate_itemValue));
// let run_rate_score = 0;
// if (run_rate_index === 0){
// run_rate_score= 10;
// } else if (run_rate_index === 1) {
// run_rate_score= 7;
// } else if (run_rate_index === 2) {
// run_rate_score= 3;
// } else if (run_rate_index === 3) {
// run_rate_score= 0;
// }
// arr[29] += run_rate_score;
const production_hour_itemValue = item.production_hour; // 台时产量的值
const production_hour_sortedData = monthData.sort((a, b) => parseFloat(b.production_hour) - parseFloat(a.production_hour));
const production_hour_index = production_hour_sortedData.findIndex(obj => parseFloat(obj.production_hour) === parseFloat(production_hour_itemValue));
let production_hour_score = 0;
if (production_hour_index === 0){
production_hour_score= 10;
} else if (production_hour_index === 1) {
production_hour_score= 8;
} else if (production_hour_index === 2) {
production_hour_score= 6;
} else if (production_hour_index === 3) {
production_hour_score= 4;
}
arr[29] += production_hour_score;
const lisz_itemValue = item.出窑熟料_立升重_rate_pass; // 立升重的值
const lisz_sortedData = monthData.sort((a, b) => parseFloat(b.lisz) - parseFloat(a.lisz));
const lisz_index = lisz_sortedData.findIndex(obj => parseFloat(obj.lisz) === parseFloat(lisz_itemValue));
let production_cost_unit_score = 0;
if (lisz_index === 0){
production_cost_unit_score= 7;
} else if (lisz_index === 1) {
production_cost_unit_score= 4;
} else if (lisz_index === 2) {
production_cost_unit_score= 3;
} else if (lisz_index === 3) {
production_cost_unit_score= 2;
}
arr[29] += production_cost_unit_score;
const CaO_itemValue = item.出窑熟料_fCaO_rate_pass; // CaO的值
const CaO_sortedData = monthData.sort((a, b) => parseFloat(b.CaO) - parseFloat(a.CaO));
const CaO_index = CaO_sortedData.findIndex(obj => parseFloat(obj.CaO) === parseFloat(CaO_itemValue));
let CaO_score = 0;
if (CaO_index === 0){
CaO_score= 8;
} else if (CaO_index === 1) {
CaO_score= 6;
} else if (CaO_index === 2) {
CaO_score= 5;
} else if (CaO_index === 3) {
CaO_score= 3;
}
arr[29] += CaO_score;
arr [29] += 60;
}
wrapArr.push(arr);
});
// 深拷贝数组,防止原始数据被修改
const sortArr = [...wrapArr];
// 将数组按每4个元素进行分组
const groupSize = 4;
const groupedArr = [];
for (let i = 0; i < sortArr.length; i += groupSize) {
groupedArr.push(sortArr.slice(i, i + groupSize));
}
groupedArr.forEach(group => {
group.sort((a, b) => b[b.length - 1] - a[a.length - 1]); // 按最后一项值排序(忽略排名)
// 为每个分组内的元素计算排名
let currentRank = 1;
let previousValue = null;
group.forEach((item, index) => {
if (previousValue !== item[item.length - 1]) {
currentRank = index + 1;
previousValue = item[item.length - 1]; // 保留上一个排名
// 当前排名为索引加1
}
item.push(`${currentRank}`);
});
});
// 扁平化分组数组
const flattenedArr = groupedArr.flat();
// 将排序并添加排名后的数据赋值给 tableDatas
that.tableDatas = flattenedArr;
}
});
});
},
handleQuery() {
this.tableDatas = [];
this.getGoalData();
},
itemClick(type, item) {
this.type = type;
this.asynDialog = true;
},
itemClick1(type, item) {
this.chartShow = false;
this.$API.bi.dataset.exec.req("3322567213885833216").then((res) => {
this.myOption = JSON.parse(res.echart_options);
debugger;
this.chartShow = true;
});
},
handlePrint() {
this.$PRINT("#myReport");
},
exportExcel() {
this.exportLoading = true;
this.$XLSX("#myTable", this.tableName);
this.exportLoading = false;
},
},
};
</script>
<style scoped>
.printWrap {
width: 100%;
overflow-x: scroll;
}
.numCell {
width: 100px !important;
}
</style>