/** * 资源利用率分析 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();