# E10ass **Repository Path**: zzw6_admin/e10ass ## Basic Information - **Project Name**: E10ass - **Description**: 需求评估 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-25 - **Last Updated**: 2026-10-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 需求竞价分析与智能报价系统 从泛微 E-Cology OA 拉取"需求评估流程"数据(需求内容、附件、各部门竞价明细)落库到本地 MySQL, 基于历史竞价数据分析,为新需求推荐中标概率最优的工作量报价区间。 > 前端与整体架构设计方案见 `docs/前端方案设计.html`(含页面原型线框图)。 ## 功能总览 - **需求库**:扫描已办列表中匹配"需求评估"的流程,拉取表单详情,解析为结构化数据(需求主表 + 竞价明细 + 附件) - **智能报价**:相似历史需求匹配 → 中标工作量分布(P25/中位/P75)→ 胜率估计 → 建议报价区间 + 激进/稳健/保守三档策略 + 可解释决策依据 - **总览仪表盘**:中标率、平均中标工作量、近 6 月趋势、各部门中标率 - **竞争分析**:对手部门画像(参拍/中标/报价区间)、逐需求对垒复盘 - **同步管理**:手动触发同步、同步日志(扫描/新增/跳过/失败原因) - **设置**:E-Cology Cookie 管理(控制台脚本一键提取) ## 技术栈 | 层 | 技术 | |---|---| | 后端 | Spring Boot 3.2 / Java 17 / MyBatis / OkHttp / Playwright(兜底同步) | | 数据库 | MySQL 8(启动时自动执行 `schema.sql` 建表,兼容 H2 MySQL 模式) | | 前端 | Vite 6 + React 18 + TypeScript + Tailwind CSS 4 + TanStack Query + React Router 6 | ## 快速开始 ### 1. 后端(端口 8082) ```bash # 配置 src/main/resources/application.yml 中的数据源(默认 localhost:3306/flow) mvn spring-boot:run # 或打包运行 mvn package -Dmaven.test.skip=true java -jar target/ecology-proxy-1.0.0.jar ``` 启动时自动执行 `schema.sql`(全部 CREATE TABLE IF NOT EXISTS),无需手动建表。 关键配置(application.yml): ```yaml ecology: requirement: workflow-name-pattern: 需求评估 # 匹配流程类型名 our-department: "" # 我方部门名(识别我方报价,重要!) sync-limit: 50 # 单次同步条数上限 ``` ### 2. 前端(端口 3001,代理到 8082) ```bash cd frontend pnpm install pnpm dev # 开发 pnpm build # 构建(tsc + vite build) ``` 前端代理目标可用环境变量覆盖:`BACKEND=http://localhost:18082 pnpm dev` ### 3. 使用流程 1. 「设置」页粘贴 E-Cology Cookie(登录后 F12 控制台执行页面提供的脚本) 2. 先跑一次已办同步(POST /api/workflow/sync 或 Playwright 同步)把已办清单拉到 `ecology_done_workitem` 3. 「同步管理」页触发同步:扫描评估流程 → 解析表单/明细 → 写入 req_* 表 4. 「智能报价」页输入新需求 → 获取报价建议 ## 核心 API | 接口 | 说明 | |---|---| | GET /api/requirements | 需求库分页检索(keyword/result/type 筛选) | | GET /api/requirements/{id} | 需求详情(含竞价明细、附件) | | POST /api/requirements/sync | 触发需求同步 | | GET /api/requirements/sync/logs | 最近同步日志 | | GET /api/analysis/dashboard | 仪表盘统计 | | GET /api/analysis/competitors | 竞争分析 | | POST /api/advisor/recommend | 智能报价推荐(body: requestId 或 title/content/estimate) | | GET /api/cookies · POST · DELETE /{index} | Cookie 管理(原有) | | POST /api/workflow/* | 已办拉取与表单透传(原有) | ## 表单解析说明 E-Cology 表单字段命名因流程模板而异,解析器(`RequirementParseService`)按候选字段名 模糊匹配(标题/内容/类型/部门、竞价行的部门/工作量/质量/是否中标、附件文件名), 未显式标记中标时按"工作量最低者中标"回退推断。如字段匹配不准,调整 `RequirementParseService` 顶部的 `*_KEYS` 常量数组即可。 ## 数据表 - `req_requirement` 需求主表(含我方报价/胜负/中标部门) - `req_bid` 竞价明细(各部门工作量、质量、是否我方/中标) - `req_attachment` 附件(v1 记录元信息,下载归档待接入) - `sync_log` 同步日志 - `ecology_done_workitem` 已办清单(原有) ## 已知事项 - 本地未安装 MySQL Server 时可临时用 H2 验证: `--spring.datasource.url="jdbc:h2:mem:flow;MODE=MySQL;DATABASE_TO_LOWER=TRUE;DB_CLOSE_DELAY=-1" --spring.datasource.driver-class-name=org.h2.Driver --spring.datasource.username=sa` - 附件仅记录名称与链接(v1),实际下载需对接 E-Cology 文件接口 - 推荐算法为统计版 v1,数据积累后可升级模型版(接口契约不变)