Files
makemd/server/src/services/GreenSupplyChainService.ts
wurenzhi 136c2fa579 feat: 初始化项目结构并添加核心功能模块
- 新增文档模板和导航结构
- 实现服务器基础API路由和控制器
- 添加扩展插件配置和前端框架
- 引入多租户和权限管理模块
- 集成日志和数据库配置
- 添加核心业务模型和类型定义
2026-03-17 22:07:19 +08:00

72 lines
2.0 KiB
TypeScript

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()
};
}
}