基于ProjectPayment、ProjectFeedback、Product等表结构和现有的stage-aftercare组件,设计完整的项目售后归档模块,包含验收尾款、客户评价、项目复盘三大核心功能,通过数据分析实现项目执行效率和团队绩效的科学评估。
现有结构已支持尾款管理:
现有结构支持多维度评价:
现有结构支持复盘分析:
interface FinalPaymentModule {
  // 尾款总览
  paymentOverview: {
    totalAmount: number;          // 尾款总额
    paidAmount: number;           // 已支付金额
    remainingAmount: number;       // 待支付金额
    dueDate: Date;              // 应付款日期
    overdueDays: number;          // 逾期天数
    status: PaymentStatus;       // 支付状态
  };
  // 按产品分摊
  productBreakdown: Array<{
    productId: string;
    productName: string;
    productType: string;
    amount: number;
    percentage: number;
    paidAmount: number;
    vouchers: PaymentVoucher[];
  }>;
  // 支付凭证管理
  paymentVouchers: Array<{
    id: string;
    amount: number;
    paymentMethod: string;
    paymentTime: Date;
    voucherFile: Parse.Object;
    verifiedStatus: 'pending' | 'verified' | 'rejected';
    ocrResult?: OCRResult;
    notes?: string;
  }>;
}
enum PaymentStatus {
  PENDING = 'pending',       // 待支付
  OVERDUE = 'overdue',       // 逾期
  PARTIAL = 'partial',       // 部分支付
  PAID = 'paid',           // 已支付
  DISPUTED = 'disputed'     // 争议中
}
支付凭证OCR识别结构:
interface OCRResult {
  confidence: number;           // 识别置信度
  amount: number;              // 识别金额
  paymentMethod: string;       // 支付方式
  transactionId?: string;     // 交易号
  payerName?: string;         // 付款人姓名
  paymentTime?: Date;         // 付款时间
  merchantName?: string;      // 收款商户
  rawText: string;           // 原始识别文本
  warnings?: string[];        // 识别警告
}
graph TD
    A[进入售后归档] --> B[加载尾款信息]
    B --> C{是否已有尾款记录?}
    C -->|否| D[从报价自动生成尾款]
    C -->|是| E[显示现有尾款状态]
    D --> F[按产品分摊尾款]
    E --> G[尾款管理界面]
    F --> G
    G --> H{支付状态}
    H -->|待支付| I[上传支付凭证]
    H -->|已支付| J[显示凭证列表]
    I --> K[OCR自动识别]
    K --> L[人工确认信息]
    L --> M[更新支付状态]
    M --> N[尾款结清]
    J --> N
    N --> O[进入评价阶段]
interface CustomerEvaluation {
  // 基础信息
  evaluationId: string;
  projectId: string;
  customerId: string;
  evaluationTime: Date;
  // 整体评价
  overallRating: {
    score: number;              // 综合评分 1-5
    comments: string;          // 整体评价
    wouldRecommend: boolean;    // 是否愿意推荐
    improvementSuggestions: string[];
  };
  // 分维度评价
  dimensionRatings: Array<{
    dimension: 'design_quality' | 'service_attitude' | 'delivery_timeliness' | 'value_for_money';
    score: number;            // 维度评分
    weight: number;            // 权重
    comments?: string;        // 维度评价
  }>;
  // 产品级评价
  productRatings: Array<{
    productId: string;
    productName: string;
    spaceSatisfaction: number;  // 空间满意度
    designRating: number;       // 设计评分
    functionalityRating: number; // 功能性评分
    issues: string[];          // 存在问题
    improvements: string[];      // 改进建议
    photos?: string[];         // 实际效果照片
  }>;
  // 评价验证
  verification: {
    isVerified: boolean;
    verificationMethod: 'customer_confirmation' | 'project_completion' | 'payment_confirmation';
    verificationTime: Date;
    verifiedBy: string;
  };
}
评价引导策略:
// 扩展ProjectFeedback表结构
interface EnhancedProjectFeedback extends ProjectFeedback {
  // 产品关联
  product?: Parse.Object;
  // 多维度评分
  dimensionScores?: {
    designQuality: number;     // 设计质量
    serviceAttitude: number;   // 服务态度
    deliveryTimeliness: number; // 交付及时性
    valueForMoney: number;    // 性价比
  };
  // 评价上下文
  context?: {
    evaluationStage: string;    // 评价阶段
    touchpoints: string[];     // 接触点
    emotions: string[];        // 情感标签
    expectations: string[];    // 期望值
  };
  // 改进建议分类
  improvementCategories?: {
    design: string[];          // 设计改进
    service: string[];         // 服务改进
    process: string[];        // 流程改进
    communication: string[];    // 沟通改进
  };
  // 推荐意愿
  recommendationWillingness?: {
    score: number;            // 推荐评分 1-10
    reasons: string[];         // 推荐原因
    barriers?: string[];       // 推荐障碍
    networkScope: string[];   // 愿意推荐的圈层
  };
}
多维度数据采集:
interface ProjectRetrospectiveData {
  // 项目基础信息
  projectBasic: {
    title: string;
    type: string;
    duration: number;           // 实际工期(天)
    budget: number;            // 项目预算
    teamSize: number;          // 团队规模
    productCount: number;      // 空间数量
  };
  // 时间节点分析
  timelineAnalysis: {
    nodes: Array<{
      stage: string;           // 阶段名称
      plannedStart: Date;      // 计划开始时间
      actualStart: Date;       // 实际开始时间
      plannedEnd: Date;        // 计划结束时间
      actualEnd: Date;         // 实际结束时间
      duration: number;        // 阶段耗时
      delayDays: number;       // 延期天数
      efficiency: number;       // 效率评分
    }>;
    bottlenecks: string[];     // 瓶颈环节
    criticalPath: string[];    // 关键路径
  };
  // 团队效能分析
  teamPerformance: Array<{
    memberId: string;
    memberName: string;
    role: string;             // 角色类型
    workload: number;          // 工作负载
    efficiency: number;        // 执行效率
    quality: number;          // 工作质量
    collaboration: number;     // 协作表现
    timeDistribution: {
      design: number;          // 设计时间占比
      communication: number;    // 沟通时间占比
      revision: number;        // 修改时间占比
      admin: number;          // 行政时间占比
    };
    contributions: Array<{
      type: 'design' | 'review' | 'coordination' | 'problem_solving';
      description: string;
      impact: 'high' | 'medium' | 'low';
    }>;
  }>;
  // 质量分析
  qualityAnalysis: {
    revisionRate: number;       // 修改率
    firstPassYield: number;    // 一次通过率
    customerSatisfaction: number; // 客户满意度
    issueResolutionTime: number; // 问题解决时间
    qualityEscalations: number; // 质量升级次数
    productScores: Array<{
      productId: string;
      productName: string;
      finalScore: number;
      issues: string[];
      highlights: string[];
    }>;
  };
  // 财务分析
  financialAnalysis: {
    budgetVariance: number;    // 预算偏差
    profitMargin: number;       // 利润率
    costBreakdown: {
      labor: number;           // 人力成本
      materials: number;        // 材料成本
      overhead: number;         // 管理费用
      revisions: number;        // 修改成本
    };
    cashFlow: Array<{
      period: string;
      inflow: number;
      outflow: number;
      netFlow: number;
    }>;
  };
}
复盘生成算法:
class RetrospectiveGenerator {
  /**
   * 生成项目复盘报告
   */
  async generateRetrospective(
    projectData: ProjectData,
    changeLogs: ProjectChange[],
    teamMetrics: TeamMetrics
  ): Promise<RetrospectiveReport> {
    // 1. 数据预处理
    const processedData = await this.preprocessData(projectData, changeLogs);
    // 2. 效率分析
    const efficiencyAnalysis = this.analyzeEfficiency(processedData);
    // 3. 质量分析
    const qualityAnalysis = this.analyzeQuality(processedData);
    // 4. 团队协作分析
    const collaborationAnalysis = this.analyzeCollaboration(changeLogs, teamMetrics);
    // 5. 客户满意度分析
    const satisfactionAnalysis = this.analyzeCustomerSatisfaction(processedData);
    // 6. 生成洞察和建议
    const insights = await this.generateInsights({
      efficiency: efficiencyAnalysis,
      quality: qualityAnalysis,
      collaboration: collaborationAnalysis,
      satisfaction: satisfactionAnalysis
    });
    return {
      summary: this.generateSummary(insights),
      highlights: insights.highlights,
      challenges: insights.challenges,
      lessons: insights.lessons,
      recommendations: insights.recommendations,
      teamMetrics: this.formatTeamMetrics(teamMetrics),
      detailedAnalysis: {
        efficiency: efficiencyAnalysis,
        quality: qualityAnalysis,
        collaboration: collaborationAnalysis,
        timeline: this.analyzeTimeline(processedData)
      }
    };
  }
  /**
   * 分析项目效率
   */
  private analyzeEfficiency(data: ProcessedData): EfficiencyAnalysis {
    return {
      overallEfficiency: this.calculateOverallEfficiency(data),
      stageEfficiency: this.calculateStageEfficiency(data),
      resourceUtilization: this.calculateResourceUtilization(data),
      bottlenecks: this.identifyBottlenecks(data),
      timeDistribution: this.analyzeTimeDistribution(data)
    };
  }
  /**
   * 识别项目瓶颈
   */
  private identifyBottlenecks(data: ProcessedData): Array<{
    stage: string;
    issue: string;
    impact: string;
    suggestion: string;
    severity: 'high' | 'medium' | 'low';
  }> {
    const bottlenecks = [];
    // 分析时间瓶颈
    const timeBottlenecks = this.analyzeTimeBottlenecks(data.timeline);
    bottlenecks.push(...timeBottlenecks);
    // 分析协作瓶颈
    const collaborationBottlenecks = this.analyzeCollaborationBottlenecks(data.teamWork);
    bottlenecks.push(...collaborationBottlenecks);
    // 分析质量瓶颈
    const qualityBottlenecks = this.analyzeQualityBottlenecks(data.quality);
    bottlenecks.push(...qualityBottlenecks);
    return bottlenecks.sort((a, b) => {
      const severityOrder = { 'high': 3, 'medium': 2, 'low': 1 };
      return severityOrder[b.severity] - severityOrder[a.severity];
    });
  }
}
个人效率指标:
interface TeamMemberEfficiency {
  memberId: string;
  memberName: string;
  // 时间效率
  timeEfficiency: {
    plannedVsActual: number;      // 计划vs实际时间比
    taskCompletionRate: number;    // 任务完成率
    onTimeDeliveryRate: number;   // 按时交付率
    avgTaskDuration: number;       // 平均任务耗时
  };
  // 质量效率
  qualityEfficiency: {
    firstPassYield: number;       // 一次通过率
    revisionRate: number;         // 修改率
    errorRate: number;            // 错误率
    customerRating: number;       // 客户评分
  };
  // 协作效率
  collaborationEfficiency: {
    communicationFrequency: number; // 沟通频次
    responseTime: number;         // 响应时间
    coordinationScore: number;    // 协调评分
    knowledgeSharing: number;    // 知识分享
  };
  // 综合效率评分
  overallEfficiency: {
    score: number;               // 综合评分 0-100
    ranking: number;             // 团队排名
    strengths: string[];         // 优势领域
    improvements: string[];      // 改进建议
  };
}
典型项目场景识别:
interface ProjectScenarioAnalysis {
  // 项目复杂度评估
  complexityAssessment: {
    scopeComplexity: number;      // 范围复杂度
    technicalComplexity: number;  // 技术复杂度
    coordinationComplexity: number; // 协调复杂度
    clientComplexity: number;     // 客户复杂度
    overallComplexity: 'simple' | 'moderate' | 'complex' | 'highly_complex';
  };
  // 风险识别
  riskIdentification: {
    identifiedRisks: Array<{
      riskType: 'timeline' | 'budget' | 'quality' | 'resource' | 'scope';
      probability: number;       // 发生概率 0-1
      impact: number;           // 影响程度 0-1
      riskLevel: 'low' | 'medium' | 'high' | 'critical';
      mitigation: string;        // 缓解措施
      owner: string;            // 负责人
    }>;
    riskMitigationEffectiveness: number; // 风险缓解有效性
  };
  // 成功因素分析
  successFactors: {
    keySuccessFactors: string[];     // 关键成功因素
    clientAlignment: number;          // 客户对齐度
    teamCapability: number;          // 团队能力
    processMaturity: number;         // 流程成熟度
    technologyFit: number;          // 技术适配性
  };
  // 改进机会
  improvementOpportunities: Array<{
    area: string;                   // 改进领域
    currentPerformance: number;      // 当前绩效
    targetPerformance: number;      // 目标绩效
    improvementPotential: number;    // 改进潜力
    requiredActions: string[];       // 必要行动
    estimatedEffort: string;        // 预估工作量
    expectedBenefit: string;       // 预期收益
  }>;
}
interface AftercarePageArchitecture {
  // 视图管理
  currentView: 'overview' | 'payment' | 'evaluation' | 'retrospective' | 'archive';
  // 数据状态
  dataStatus: {
    loading: boolean;
    error?: string;
    lastSyncTime?: Date;
  };
  // 权限控制
  permissions: {
    canEditPayment: boolean;
    canViewEvaluation: boolean;
    canSubmitEvaluation: boolean;
    canGenerateRetrospective: boolean;
    canArchive: boolean;
  };
  // 导航配置
  navigation: {
    steps: Array<{
      id: string;
      title: string;
      icon: string;
      status: 'pending' | 'in_progress' | 'completed';
      enabled: boolean;
    }>;
    currentStep: number;
  };
}
概览仪表板:
时间线: 项目关键节点时间轴
<!-- 概览视图模板 -->
<div class="aftercare-overview">
<!-- 进度卡片 -->
<div class="progress-cards">
<div class="progress-card" [class.completed]="paymentCompleted">
  <div class="card-icon">💰</div>
  <h3>验收尾款</h3>
  <div class="progress-bar">
    <div class="progress-fill" [style.width.%]="paymentProgress"></div>
  </div>
  <p class="status">{{ paymentStatusText }}</p>
</div>
<div class="progress-card" [class.completed]="evaluationCompleted">
  <div class="card-icon">⭐</div>
  <h3>客户评价</h3>
  <div class="progress-bar">
    <div class="progress-fill" [style.width.%]="evaluationProgress"></div>
  </div>
  <p class="status">{{ evaluationStatusText }}</p>
</div>
<div class="progress-card" [class.completed]="retrospectiveCompleted">
  <div class="card-icon">📊</div>
  <h3>项目复盘</h3>
  <div class="progress-bar">
    <div class="progress-fill" [style.width.%]="retrospectiveProgress"></div>
  </div>
  <p class="status">{{ retrospectiveStatusText }}</p>
</div>
</div>
<!-- 关键指标 -->
<div class="key-metrics">
<div class="metric-card">
  <h4>尾款状态</h4>
  <div class="metric-value">{{ finalPaymentAmount }}</div>
  <div class="metric-change" [class.positive]="paymentTrend > 0">
    {{ paymentTrend > 0 ? '↑' : '↓' }} {{ Math.abs(paymentTrend) }}%
  </div>
</div>
<div class="metric-card">
  <h4>客户满意度</h4>
  <div class="metric-value">{{ customerSatisfaction }}/5.0</div>
  <div class="metric-stars">
    @for (star of [1,2,3,4,5]; track star) {
      <span class="star" [class.filled]="star <= customerSatisfaction">★</span>
    }
  </div>
</div>
<div class="metric-card">
  <h4>项目效率</h4>
  <div class="metric-value">{{ projectEfficiency }}%</div>
  <div class="metric-label">vs 行业平均</div>
</div>
</div>
</div>
<!-- 快速操作 -->
<div class="quick-actions">
<button class="action-btn" (click)="navigateToPayment()" [disabled]="!canEditPayment">
  <span class="btn-icon">💰</span>
  管理尾款
</button>
<button class="action-btn" (click)="navigateToEvaluation()" [disabled]="!canViewEvaluation">
  <span class="btn-icon">⭐</span>
  查看评价
</button>
<button class="action-btn" (click)="generateRetrospective()" [disabled]="!canGenerateRetrospective">
  <span class="btn-icon">📊</span>
  生成复盘
</button>
<button class="action-btn primary" (click)="archiveProject()" [disabled]="!canArchive">
  <span class="btn-icon">📁</span>
  归档项目
</button>
</div>
</div>
智能尾款管理:
提醒功能: 逾期提醒和付款通知
interface PaymentManagementComponent {
// 尾款数据
finalPayment: FinalPaymentModule;
// 产品分摊
productAllocation: Array<{
product: Parse.Object;
allocation: PaymentAllocation;
status: 'pending' | 'partial' | 'completed';
}>;
// OCR处理
ocrProcessing: {
isProcessing: boolean;
progress: number;
result?: OCRResult;
};
// 上传管理
uploadManagement: {
multipleUpload: boolean;
dragDropEnabled: boolean;
supportedFormats: string[];
maxFileSize: number;
};
}
交互式评价界面:
奖励机制: 评价完成后的客户激励
<!-- 客户评价模板 -->
<div class="customer-evaluation">
<!-- 评价引导 -->
<div class="evaluation-wizard">
<div class="wizard-steps">
  <div class="step" [class.active]="currentStep === 1" [class.completed]="stepCompleted(1)">
    <span class="step-number">1</span>
    <span class="step-label">整体评价</span>
  </div>
  <div class="step" [class.active]="currentStep === 2" [class.completed]="stepCompleted(2)">
    <span class="step-number">2</span>
    <span class="step-label">分项评分</span>
  </div>
  <div class="step" [class.active]="currentStep === 3" [class.completed]="stepCompleted(3)">
    <span class="step-number">3</span>
    <span class="step-label">详细反馈</span>
  </div>
  <div class="step" [class.active]="currentStep === 4" [class.completed]="stepCompleted(4)">
    <span class="step-number">4</span>
    <span class="step-label">确认提交</span>
  </div>
</div>
</div>
<!-- 评价内容 -->
<div class="evaluation-content">
<!-- 整体评价 -->
@if (currentStep === 1) {
  <div class="overall-evaluation">
    <h3>您对整体服务的评价如何?</h3>
    <div class="rating-scale">
      @for (rating of [1,2,3,4,5]; track rating) {
        <button class="rating-btn" (click)="setOverallRating(rating)">
          <span class="rating-number">{{ rating }}</span>
          <span class="rating-label">{{ getRatingLabel(rating) }}</span>
        </button>
      }
    </div>
    <textarea
      class="evaluation-textarea"
      placeholder="请分享您的整体体验..."
      [(ngModel)]="evaluation.overallComments">
    </textarea>
  </div>
}
<!-- 分项评分 -->
@if (currentStep === 2) {
  <div class="dimension-evaluation">
    @for (dimension of evaluationDimensions; track dimension) {
      <div class="dimension-item">
        <h4>{{ dimension.label }}</h4>
        <p class="dimension-desc">{{ dimension.description }}</p>
        <div class="star-rating">
          @for (star of [1,2,3,4,5]; track star) {
            <span
              class="star"
              [class.filled]="star <= dimension.rating"
              (click)="setDimensionRating(dimension.key, star)">
              ★
            </span>
          }
        </div>
      </div>
    }
  </div>
}
<!-- 详细反馈 -->
@if (currentStep === 3) {
  <div class="detailed-feedback">
    <div class="feedback-section">
      <h4>最喜欢的方面</h4>
      <div class="feedback-tags">
        @for (tag of positiveTags; track tag) {
          <span class="feedback-tag" (click)="toggleTag(tag, 'positive')">
            {{ tag }}
          </span>
        }
      </div>
    </div>
    <div class="feedback-section">
      <h4>希望改进的方面</h4>
      <div class="feedback-tags">
        @for (tag of improvementTags; track tag) {
          <span class="feedback-tag" (click)="toggleTag(tag, 'improvement')">
            {{ tag }}
          </span>
        }
      </div>
    </div>
    <div class="feedback-section">
      <h4>照片反馈</h4>
      <div class="photo-upload">
        <div class="upload-area" (drop)="onPhotoDrop($event)" (dragover)="onDragOver($event)">
          <span class="upload-icon">📷</span>
          <p>上传实际效果照片</p>
          <input type="file" accept="image/*" multiple (change)="onPhotoSelect($event)">
        </div>
        <div class="uploaded-photos">
          @for (photo of uploadedPhotos; track photo) {
            <div class="photo-item">
              <img [src]="photo.url" [alt]="photo.description">
              <button class="remove-btn" (click)="removePhoto(photo.id)">×</button>
            </div>
          }
        </div>
      </div>
    </div>
  </div>
}
</div>
</div>
数据驱动复盘:
对比分析: 与历史项目和行业基准对比
interface RetrospectiveVisualization {
// 时间线可视化
timelineChart: {
type: 'gantt' | 'timeline';
data: Array<{
  phase: string;
  planned: DateRange;
  actual: DateRange;
  participants: string[];
  efficiency: number;
}>;
};
// 效率分析图表
efficiencyCharts: {
radarChart: {
  dimensions: string[];
  teamData: number[][];
  benchmarkData: number[];
};
barChart: {
  categories: string[];
  planned: number[];
  actual: number[];
};
};
// 团队绩效矩阵
teamMatrix: {
members: string[];
metrics: string[];
data: number[][];
heatmap: boolean;
};
// 趋势分析
trendAnalysis: {
timeSeries: Array<{
  date: Date;
  efficiency: number;
  quality: number;
  satisfaction: number;
}>;
projections: Array<{
  futureDate: Date;
  predictedEfficiency: number;
  confidence: number;
}>;
};
}
多设备适配:
多用户协同:
AI辅助功能:
class ProjectEfficiencyAnalyzer {
  /**
   * 计算整体项目效率
   */
  calculateOverallEfficiency(projectData: ProjectData): EfficiencyScore {
    const { plannedDuration, actualDuration, milestones, teamWorkload } = projectData;
    // 时间效率 = 计划时间 / 实际时间
    const timeEfficiency = Math.min(1.0, plannedDuration / actualDuration) * 100;
    // 里程碑完成率
    const milestoneCompletionRate = this.calculateMilestoneCompletionRate(milestones);
    // 资源利用效率
    const resourceUtilization = this.calculateResourceUtilization(teamWorkload);
    // 质量效率(基于修改率)
    const qualityEfficiency = this.calculateQualityEfficiency(projectData.quality);
    // 综合效率评分(加权平均)
    const weights = {
      time: 0.3,
      milestones: 0.25,
      resources: 0.25,
      quality: 0.2
    };
    const overallEfficiency =
      timeEfficiency * weights.time +
      milestoneCompletionRate * weights.milestones +
      resourceUtilization * weights.resources +
      qualityEfficiency * weights.quality;
    return {
      overallScore: Math.round(overallEfficiency),
      timeEfficiency: Math.round(timeEfficiency),
      milestoneCompletionRate: Math.round(milestoneCompletionRate),
      resourceUtilization: Math.round(resourceUtilization),
      qualityEfficiency: Math.round(qualityEfficiency),
      grade: this.getEfficiencyGrade(overallEfficiency)
    };
  }
  /**
   * 识别效率瓶颈
   */
  identifyEfficiencyBottlenecks(projectData: ProjectData): Array<{
    stage: string;
    issue: string;
    impact: number;
    suggestion: string;
    priority: 'high' | 'medium' | 'low';
  }> {
    const bottlenecks = [];
    // 分析各阶段效率
    for (const stage of projectData.stages) {
      const stageEfficiency = this.calculateStageEfficiency(stage);
      if (stageEfficiency < 0.7) { // 效率低于70%
        bottlenecks.push({
          stage: stage.name,
          issue: `${stage.name}阶段效率偏低`,
          impact: (0.7 - stageEfficiency) * 100,
          suggestion: this.generateEfficiencySuggestion(stage),
          priority: stageEfficiency < 0.5 ? 'high' : 'medium'
        });
      }
    }
    // 分析团队协作问题
    const collaborationIssues = this.analyzeCollaborationIssues(projectData);
    bottlenecks.push(...collaborationIssues);
    return bottlenecks.sort((a, b) => b.impact - a.impact);
  }
  }
}
class TeamPerformanceAnalyzer {
  /**
   * 评估团队成员绩效
   */
  evaluateMemberPerformance(
    memberId: string,
    projectData: ProjectData,
    changeLogs: ProjectChange[]
  ): TeamMemberPerformance {
    // 获取成员相关的数据
    const memberData = this.extractMemberData(memberId, projectData, changeLogs);
    // 工作量评估
    const workloadScore = this.evaluateWorkload(memberData);
    // 效率评估
    const efficiencyScore = this.evaluateEfficiency(memberData);
    // 质量评估
    const qualityScore = this.evaluateQuality(memberData);
    // 协作评估
    const collaborationScore = this.evaluateCollaboration(memberData, changeLogs);
    // 创新评估
    const innovationScore = this.evaluateInnovation(memberData);
    // 综合绩效评分
    const overallScore = this.calculateOverallScore({
      workload: workloadScore,
      efficiency: efficiencyScore,
      quality: qualityScore,
      collaboration: collaborationScore,
      innovation: innovationScore
    });
    return {
      memberId,
      overallScore,
      workloadScore,
      efficiencyScore,
      qualityScore,
      collaborationScore,
      innovationScore,
      strengths: this.identifyStrengths({
        workload: workloadScore,
        efficiency: efficiencyScore,
        quality: qualityScore,
        collaboration: collaborationScore,
        innovation: innovationScore
      }),
      improvements: this.identifyImprovements({
        workload: workloadScore,
        efficiency: efficiencyScore,
        quality: qualityScore,
        collaboration: collaborationScore,
        innovation: innovationScore
      }),
      recommendations: this.generateRecommendations(overallScore),
      ranking: this.calculateRanking(memberId, overallScore, projectData)
    };
  }
  /**
   * 分析协作表现
   */
  private evaluateCollaboration(memberData: any, changeLogs: ProjectChange[]): number {
    const collaborationMetrics = {
      communicationFrequency: 0,
      responseTime: 0,
      coordinationScore: 0,
      knowledgeSharing: 0,
      conflictResolution: 0
    };
    // 分析ProjectChange中的协作行为
    const memberChanges = changeLogs.filter(log =>
      log.profile.objectId === memberData.memberId
    );
    for (const change of memberChanges) {
      switch (change.changeType) {
        case 'communication':
          collaborationMetrics.communicationFrequency += 1;
          break;
        case 'coordination':
          collaborationMetrics.coordinationScore += 1;
          break;
        case 'knowledge_sharing':
          collaborationMetrics.knowledgeSharing += 1;
          break;
        case 'conflict_resolution':
          collaborationMetrics.conflictResolution += 1;
          break;
      }
      // 计算响应时间
      if (change.duration && change.duration < 3600000) { // 1小时内响应
        collaborationMetrics.responseTime += 1;
      }
    }
    // 归一化评分
    const maxChanges = Math.max(...Object.values(collaborationMetrics));
    const normalizedMetrics = Object.fromEntries(
      Object.entries(collaborationMetrics).map(([key, value]) => [
        key,
        maxChanges > 0 ? value / maxChanges : 0
      ])
    );
    // 加权平均
    const weights = {
      communicationFrequency: 0.25,
      responseTime: 0.3,
      coordinationScore: 0.2,
      knowledgeSharing: 0.15,
      conflictResolution: 0.1
    };
    return Object.entries(weights).reduce((score, [metric, weight]) => {
      return score + normalizedMetrics[metric] * weight;
    }, 0) * 100;
  }
  }
}
class SatisfactionAnalyzer {
  /**
   * 分析客户满意度趋势
   */
  analyzeSatisfactionTrends(
    projectData: ProjectData,
    feedbackHistory: ProjectFeedback[]
  ): SatisfactionAnalysis {
    // 计算当前满意度
    const currentSatisfaction = this.calculateCurrentSatisfaction(feedbackHistory);
    // 分析历史趋势
    const trendAnalysis = this.analyzeHistoricalTrends(feedbackHistory);
    // 识别满意度驱动因素
    const drivers = this.identifySatisfactionDrivers(feedbackHistory);
    // 预测满意度
    const prediction = this.predictSatisfaction(projectData, drivers);
    return {
      currentScore: currentSatisfaction.overallScore,
      dimensionScores: currentSatisfaction.dimensionScores,
      trend: trendAnalysis,
      keyDrivers: drivers,
      prediction: prediction,
      improvementAreas: this.identifyImprovementAreas(currentSatisfaction, drivers),
      recommendations: this.generateSatisfactionRecommendations(currentSatisfaction, drivers)
    };
  }
  /**
   * 识别满意度关键驱动因素
   */
  private identifySatisfactionDrivers(feedback: ProjectFeedback[]): Array<{
    factor: string;
    impact: number;
    correlation: number;
    description: string;
  }> {
    const drivers = [];
    // 分析各维度与整体满意度的相关性
    const dimensions = ['designQuality', 'serviceAttitude', 'deliveryTimeliness', 'valueForMoney'];
    for (const dimension of dimensions) {
      const correlation = this.calculateCorrelation(
        feedback.map(f => this.getDimensionScore(f, dimension)),
        feedback.map(f => f.rating || 0)
      );
      if (Math.abs(correlation) > 0.5) { // 相关性阈值
        drivers.push({
          factor: dimension,
          impact: Math.abs(correlation) * 100,
          correlation: correlation,
          description: this.getDriverDescription(dimension, correlation)
        });
      }
    }
    return drivers.sort((a, b) => b.impact - a.impact);
  }
  }
}
class RetrospectiveInsightGenerator {
  /**
   * 生成项目复盘洞察
   */
  async generateInsights(projectData: ProjectData): Promise<RetrospectiveInsights> {
    // 1. 数据预处理和特征提取
    const features = await this.extractFeatures(projectData);
    // 2. 模式识别
    const patterns = this.identifyPatterns(features);
    // 3. 异常检测
    const anomalies = this.detectAnomalies(features);
    // 4. 根因分析
    const rootCauses = this.analyzeRootCauses(patterns, anomalies);
    // 5. 生成洞察
    const insights = await this.generateInsightsFromData(patterns, anomalies, rootCauses);
    return {
      summary: this.generateExecutiveSummary(insights),
      highlights: insights.highlights,
      challenges: insights.challenges,
      rootCauses: insights.rootCauses,
      lessons: insights.lessons,
      recommendations: insights.recommendations,
      actionItems: this.generateActionItems(insights),
      riskFactors: this.identifyFutureRisks(insights),
      successFactors: this.identifySuccessFactors(insights)
    };
  }
  /**
   * 识别项目模式
   */
  private identifyPatterns(features: ProjectFeatures): Array<{
    type: 'positive' | 'negative' | 'neutral';
    pattern: string;
    confidence: number;
    evidence: string[];
    impact: string;
  }> {
    const patterns = [];
    // 识别高效模式
    if (features.efficiencyPattern === 'consistent_high') {
      patterns.push({
        type: 'positive',
        pattern: '持续高效执行',
        confidence: 0.85,
        evidence: [
          '各阶段效率均高于80%',
          '里程碑按时完成率100%',
          '资源利用率稳定在75%-85%'
        ],
        impact: '项目执行效率优秀,团队协作顺畅'
      });
    }
    // 识别协作问题模式
    if (features.collaborationIssues.length > 2) {
      patterns.push({
        type: 'negative',
        pattern: '跨团队协作障碍',
        confidence: 0.75,
        evidence: features.collaborationIssues,
        impact: '影响项目进度,增加沟通成本'
      });
    }
    // 识别客户需求变化模式
    if (features.requirementChanges > 3) {
      patterns.push({
        type: 'neutral',
        pattern: '需求频繁变更',
        confidence: 0.8,
        evidence: [
          `需求变更次数: ${features.requirementChanges}`,
          '平均变更间隔: 7天',
          '变更影响范围: 中等'
        ],
        impact: '需要加强需求管理和变更控制'
      });
    }
    return patterns;
  }
}
通过重新设计项目售后归档模块,实现了:
✅ 完整功能覆盖 - 验收尾款、客户评价、项目复盘三大核心功能 ✅ 智能化升级 - OCR识别、AI复盘、智能评价引导 ✅ 数据驱动决策 - 多维度数据分析和洞察生成 ✅ 用户体验优化 - 响应式设计、实时协作、智能辅助 ✅ 科学绩效评估 - 团队成员效率的量化分析和评估
该方案将为项目管理提供强大的数据支持,帮助团队持续改进和优化项目执行效率。