hb_zhgd_screen/js/pages/newDataAnalysis/resourceApiService.js

276 lines
11 KiB
JavaScript
Raw Normal View History

2025-10-13 09:33:54 +08:00
/**
* 资源利用率分析 API 服务
* 用于对接后端接口处理数据请求和响应
*/
class ResourceApiService {
constructor() {
this.baseUrl = 'http://127.0.0.1:13030/zhgd/screen/api/resource';
this.token = token || localStorage.getItem('token'); // 假设token已经全局定义
this.projectId = parent.$('#bidPro').val() || 'default_project'; // 获取当前项目ID
}
/**
* 通用请求方法
*/
async request(url, options = {}) {
const defaultOptions = {
method: 'GET',
headers: {
'Authorization': `Bearer ${this.token}`,
'Content-Type': 'application/json',
'decrypt': 'decrypt' // 项目中的解密标识
}
};
const config = { ...defaultOptions, ...options };
try {
const response = await fetch(url, config);
const result = await response.json();
// 根据项目中的数据处理逻辑进行解密等处理
const processedData = modifyResponseData(result);
if (processedData.code === 200) {
return processedData.data;
} else {
throw new Error(processedData.message || '请求失败');
}
} catch (error) {
console.error('API请求失败:', error);
// 返回模拟数据作为降级方案
return this.getFallbackData(url);
}
}
/**
* 获取资源利用率概览数据
*/
async getResourceOverview(timeRange = 'today') {
const url = `${this.baseUrl}/overview?projectId=${this.projectId}&timeRange=${timeRange}`;
return await this.request(url);
}
/**
* 获取资源详细信息列表
*/
async getResourceDetails(resourceType = '', page = 1, pageSize = 20) {
let url = `${this.baseUrl}/details?projectId=${this.projectId}&page=${page}&pageSize=${pageSize}`;
if (resourceType) {
url += `&resourceType=${resourceType}`;
}
return await this.request(url);
}
/**
* 获取资源利用率趋势数据
*/
async getResourceTrends(startDate, endDate, granularity = 'day') {
// 如果没有传入日期默认获取最近7天
if (!startDate || !endDate) {
// 使用数据库中更新后的日期范围
startDate = '2025-03-07';
endDate = '2025-03-14';
}
const url = `${this.baseUrl}/trends?projectId=${this.projectId}&startDate=${startDate}&endDate=${endDate}&granularity=${granularity}`;
console.log('趋势数据请求URL:', url); // 调试日志
try {
const result = await this.request(url);
console.log('趋势数据API返回:', result); // 调试日志
return result;
} catch (error) {
console.error('获取趋势数据失败:', error);
// 返回降级数据
return this.getFallbackData(url);
}
}
/**
* 获取资源利用率分布数据
*/
async getResourceDistribution(date = '') {
let url = `${this.baseUrl}/distribution?projectId=${this.projectId}`;
if (date) {
url += `&date=${date}`;
}
return await this.request(url);
}
/**
* 获取优化建议
*/
async getOptimizationSuggestions(limit = 5) {
const url = `${this.baseUrl}/suggestions?projectId=${this.projectId}&limit=${limit}`;
return await this.request(url);
}
/**
* 获取实时资源状态
*/
async getRealtimeStatus(lastUpdateTime = '') {
let url = `${this.baseUrl}/realtime?projectId=${this.projectId}`;
if (lastUpdateTime) {
url += `&lastUpdateTime=${lastUpdateTime}`;
}
return await this.request(url);
}
/**
* 获取降级数据当API调用失败时使用
*/
getFallbackData(url) {
console.warn('使用降级数据:', url);
if (url.includes('/overview')) {
return {
overallStats: {
totalRate: 85.2,
personnelRate: 100.0,
equipmentRate: 82.3,
materialRate: 84.8
},
resourceOverview: {
personnel: { count: 0, rate: 88.5, status: "normal" },
equipment: { count: 0, rate: 82.3, status: "normal" },
material: { count: 89, rate: 84.8, status: "normal" },
energy: { count: 76, rate: 91.2, status: "normal" }
}
};
}
if (url.includes('/details')) {
return {
total: 15,
list: [
{ id: "001", type: "人员", name: "土建班组", status: "rest", rate: 100.0, assessment: "良好", location: "1号楼3层" },
{ id: "002", type: "人员", name: "钢筋班组", status: "rest", rate: 100.0, assessment: "良好", location: "2号楼1层" },
{ id: "003", type: "人员", name: "混凝土班组", status: "rest", rate: 100.0, assessment: "良好", location: "休息区" },
{ id: "004", type: "设备", name: "塔吊-T1", status: "offline", rate: 89.3, assessment: "优秀", location: "施工区域A" },
{ id: "005", type: "设备", name: "挖掘机-H2", status: "offline", rate: 78.6, assessment: "一般", location: "施工区域B" },
{ id: "006", type: "设备", name: "混凝土泵车", status: "offline", rate: 76.4, assessment: "一般", location: "维护区" },
{ id: "007", type: "设备", name: "起重机-T1", status: "offline", rate: 0, assessment: "较差", location: "停车场" },
{ id: "008", type: "材料", name: "钢筋", status: "low_stock", rate: 91.2, assessment: "优秀", location: "材料仓库" },
{ id: "009", type: "材料", name: "混凝土", status: "low_stock", rate: 83.5, assessment: "良好", location: "材料仓库" },
{ id: "010", type: "材料", name: "砂石料", status: "low_stock", rate: 79.8, assessment: "一般", location: "材料仓库" },
{ id: "011", type: "材料", name: "水泥", status: "low_stock", rate: 65.2, assessment: "较差", location: "材料仓库" },
{ id: "012", type: "能源", name: "电力系统", status: "standby", rate: 93.1, assessment: "优秀", location: "配电房" },
{ id: "013", type: "能源", name: "柴油储备", status: "standby", rate: 88.4, assessment: "良好", location: "油库" },
{ id: "014", type: "能源", name: "天然气", status: "standby", rate: 85.6, assessment: "良好", location: "气站" },
{ id: "015", type: "能源", name: "备用电源", status: "standby", rate: 100, assessment: "优秀", location: "备用机房" }
]
};
}
if (url.includes('/trends')) {
return {
dates: ['2025-03-07', '2025-03-08', '2025-03-09', '2025-03-10', '2025-03-11', '2025-03-12', '2025-03-13'],
trends: {
personnel: [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0],
equipment: [78.9, 80.3, 82.1, 81.7, 82.3, 83.1, 82.3],
material: [82.1, 83.5, 84.2, 84.8, 85.1, 84.6, 84.8],
energy: [89.5, 90.2, 91.2, 90.8, 91.5, 91.0, 91.2]
}
};
}
if (url.includes('/distribution')) {
return [
{ name: "人员", value: 100.0, color: "#16baaa" },
{ name: "设备", value: 82.3, color: "#20d3c2" },
{ name: "材料", value: 84.8, color: "#25e5d0" },
{ name: "能源", value: 91.2, color: "#2af0dd" }
];
}
if (url.includes('/suggestions')) {
return [
{
id: "001",
title: "设备调度优化",
description: "挖掘机-H2利用率偏低建议调整作业计划提高设备运转效率",
priority: "高优先级",
category: "equipment"
},
{
id: "002",
title: "材料库存管理",
description: "砂石料库存不足,建议提前采购补充,避免影响施工进度",
priority: "中优先级",
category: "material"
}
];
}
return {};
}
/**
* 数据转换方法 - 将API返回的数据转换为前端需要的格式
*/
transformOverviewData(apiData) {
return {
overallStats: apiData.overallStats,
resourceOverview: apiData.resourceOverview
};
}
transformDetailsData(apiData) {
return {
total: apiData.total,
list: apiData.list.map(item => ({
type: item.type,
name: item.name,
status: item.status,
rate: item.rate,
assessment: item.assessment
}))
};
}
transformTrendsData(apiData) {
// 兼容不同的后端数据格式
if (apiData.trends) {
// 格式1: { dates: [], trends: { personnel: [], equipment: [], material: [], energy: [] } }
return {
dates: apiData.dates,
trends: {
personnel: apiData.trends.personnel,
equipment: apiData.trends.equipment,
material: apiData.trends.material,
energy: apiData.trends.energy
}
};
} else {
// 格式2: { dates: [], personnel: [], equipment: [], material: [], energy: [] }
return {
dates: apiData.dates,
personnel: apiData.personnel,
equipment: apiData.equipment,
material: apiData.material,
energy: apiData.energy
};
}
}
transformDistributionData(apiData) {
return apiData.map(item => ({
name: item.name,
value: item.value,
color: item.color
}));
}
transformSuggestionsData(apiData) {
return apiData.map(item => ({
title: item.title,
description: item.description,
priority: item.priority
}));
}
}
// 创建全局API服务实例
window.resourceApiService = new ResourceApiService();