feat: 初始化项目结构并添加核心功能模块
- 新增文档模板和导航结构 - 实现服务器基础API路由和控制器 - 添加扩展插件配置和前端框架 - 引入多租户和权限管理模块 - 集成日志和数据库配置 - 添加核心业务模型和类型定义
This commit is contained in:
71
server/src/services/GreenSupplyChainService.ts
Normal file
71
server/src/services/GreenSupplyChainService.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import db from '../config/database';
|
||||
import { logger } from '../utils/logger';
|
||||
|
||||
export interface CarbonLog {
|
||||
tenantId: string;
|
||||
productId: string;
|
||||
orderId?: string;
|
||||
category: 'SOURCING' | 'LOGISTICS' | 'PACKAGING';
|
||||
emissionsKg: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* [BIZ_TRADE_12] 绿色供应链评估与碳中和路径服务
|
||||
* @description 追踪商品全生命周期的碳足迹,提供低碳物流建议并生成 ESG 报告
|
||||
*/
|
||||
export class GreenSupplyChainService {
|
||||
private static readonly TABLE_NAME = 'cf_carbon_footprints';
|
||||
|
||||
/**
|
||||
* 记录碳排放记录 (BIZ_TRADE_12)
|
||||
*/
|
||||
static async logEmissions(params: CarbonLog): Promise<void> {
|
||||
logger.info(`[ESG] Logging ${params.emissionsKg}kg CO2 for Product ${params.productId} (${params.category})`);
|
||||
|
||||
await db(this.TABLE_NAME).insert({
|
||||
tenant_id: params.tenantId,
|
||||
product_id: params.productId,
|
||||
order_id: params.orderId,
|
||||
carbon_emissions_kg: params.emissionsKg,
|
||||
category: params.category,
|
||||
created_at: new Date(),
|
||||
updated_at: new Date()
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 估算物流碳排放 (BIZ_TRADE_12)
|
||||
* @description 基于运输模式、重量与距离估算
|
||||
*/
|
||||
static estimateLogisticsCarbon(mode: string, weightKg: number, distanceKm: number): number {
|
||||
// 简单系数 (kg CO2 per ton-km)
|
||||
// 航空: 0.5, 海运: 0.01, 铁路: 0.02, 公路: 0.08
|
||||
let factor = 0.08;
|
||||
switch (mode) {
|
||||
case 'AIR': factor = 0.5; break;
|
||||
case 'SEA': factor = 0.01; break;
|
||||
case 'RAIL': factor = 0.02; break;
|
||||
}
|
||||
|
||||
const tons = weightKg / 1000;
|
||||
return tons * distanceKm * factor;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成租户 ESG 摘要报告
|
||||
*/
|
||||
static async getESGSummary(tenantId: string): Promise<any> {
|
||||
const stats = await db(this.TABLE_NAME)
|
||||
.where({ tenant_id: tenantId })
|
||||
.select('category')
|
||||
.sum('carbon_emissions_kg as total')
|
||||
.groupBy('category');
|
||||
|
||||
return {
|
||||
tenantId,
|
||||
totalEmissions: stats.reduce((acc, curr) => acc + Number(curr.total), 0),
|
||||
breakdown: stats,
|
||||
reportDate: new Date().toISOString()
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user