Files
TARE-Learn/项目实操-影响分析提示词与TRAE返回结果.md
T
smart 67837df8d0 docs: 更新TRA编程培训课程材料、课件与AI技能交付包
- 新增全套考试卷、评估卷、参考答案与考试培训包模板
- 修正slidev培训课件:调整模块标题、链路图缩放,替换工单示例为通用业务对象
- 修正课堂红线表述为证据红线,将小组作业调整为个人作业要求
- 新增权限、状态流转、审计日志、看板指标四类可复用业务规则块
- 整理AI工程技能交付包,迁移旧资产至客户专属交付包并统一术语
- 新增考试输出模板与TRAE使用记录文档
2026-08-08 11:00:36 +08:00

8.7 KiB
Raw Blame History

项目实操:公务用车取消派车影响分析与实际验证记录

案例来自当前 JeecgBoot 项目已接入的“公务用车”模块,不代表客户提出过这一条具体业务需求。培训中设置的改造要求是:取消已派车任务时,取消原因必须由后端校验为非空;前端必填不能替代后端业务保护。

可直接发送给 TRAE 的提示词

请基于当前打开的 JeecgBoot 项目,且只基于你实际读取到的源码,完成一次变更影响分析;不要修改代码,不要猜测项目外逻辑。

训练改造目标:取消已派车任务时,取消原因必须为非空文本。前端表单已设为必填,但后端也必须拒绝空值和全空白值,避免直接调用接口绕过页面校验。

已知入口:
- 前端列表:jeecgboot-vue3/src/views/official/vehicle/dispatch/DispatchList.vue
- 前端弹窗与表单:jeecgboot-vue3/src/views/official/vehicle/dispatch/DispatchModal.vue、dispatch.data.ts
- 前端 API:jeecgboot-vue3/src/api/official/vehicle/dispatch.ts
- 后端接口:POST /official/vehicle/dispatch/cancel
- 后端 Controller:OfficialVehicleDispatchController.java
- 后端 Service:OfficialVehicleDispatchServiceImpl.java

请再读取取消参数 VO、派车实体、现有测试、模块 pom 和必要的数据库初始化 SQL,并按以下结构输出:
1. 已读取的源码。
2. 已确认事实,每条附文件和行号依据。
3. 必须检查的文件或模块,以及为什么。
4. 可能受影响的接口、数据、权限、状态、配置和测试。
5. 本次明确不应修改的内容。
6. 不超过 4 步的最小改动计划:修改目标、完成证据、验证方式、回退条件。
7. 人工待确认事项。

要求:
- 事实与推测分开;无源码证据的内容标记为“待确认”。
- 不要编造测试结果、全局异常语义、权限链路或项目外调用方。
- 不要直接实施修改。

本次实际核对记录

以下结论来自本地实际读取的源码、训练分支 diff 和实际 Maven 命令结果。没有执行过的数据库、接口和浏览器验证均明确标记为未执行。

已读取的源码

  • jeecgboot-vue3/src/views/official/vehicle/dispatch/DispatchList.vue
  • jeecgboot-vue3/src/views/official/vehicle/dispatch/DispatchModal.vue
  • jeecgboot-vue3/src/views/official/vehicle/dispatch/dispatch.data.ts
  • jeecgboot-vue3/src/api/official/vehicle/dispatch.ts
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/src/main/java/org/jeecg/modules/officialvehicle/controller/OfficialVehicleDispatchController.java
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/src/main/java/org/jeecg/modules/officialvehicle/service/impl/OfficialVehicleDispatchServiceImpl.java
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/src/main/java/org/jeecg/modules/officialvehicle/vo/OfficialVehicleCancelDispatchVo.java
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/src/main/java/org/jeecg/modules/officialvehicle/entity/OfficialVehicleDispatch.java
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/src/test/java/org/jeecg/modules/officialvehicle/controller/OfficialVehicleDispatchControllerTest.java
  • jeecg-boot/jeecg-boot-module/jeecg-module-officialvehicle/pom.xml
  • jeecg-boot/jeecg-boot-module/pom.xml
  • jeecg-boot/db/officialvehicle/official_vehicle_mvp_mysql.sql

已确认事实

  1. 公务用车为项目现有模块,而非 demo 示例:聚合模块 jeecg-boot-module/pom.xml 包含 jeecg-module-officialvehicle,数据库脚本同时提供菜单、权限和演示数据。

    • 依据:jeecg-boot/jeecg-boot-module/pom.xml 第 18 行;db/officialvehicle/official_vehicle_mvp_mysql.sql 第 134 至 218 行。
  2. 前端仅当用户具有 vehicle:dispatch:cancel 权限、且派车状态为 DISPATCHED 时显示“取消派车”操作。

    • 依据:DispatchList.vue 第 26 至 30 行。
  3. 取消弹窗的 cancelReason 已配置 required: true,提交时会调用前端 API 的 cancelDispatch。

    • 依据:dispatch.data.ts 第 72 至 75 行;DispatchModal.vue 第 28 至 36 行。
  4. 前端 API 只是向 POST /official/vehicle/dispatch/cancel 提交 dispatchId 和 cancelReason,因此直接调用接口不经过页面必填校验。

    • 依据:src/api/official/vehicle/dispatch.ts 第 4 至 12 行。
  5. 后端 Controller 有 @AutoLog 和 @RequiresPermissions("vehicle:dispatch:cancel"),但只将 VO 中两个字段转交给 Service,没有参数校验注解。

    • 依据:OfficialVehicleDispatchController.java 第 55 至 61 行;OfficialVehicleCancelDispatchVo.java 第 14 至 20 行。
  6. 原有 Service 会校验派车任务存在且状态为 DISPATCHED,随后把状态改为 CANCELLED、写入 cancelReason,并把关联车辆状态改为 AVAILABLE;原实现没有非空或空白校验。

    • 依据:改造前 OfficialVehicleDispatchServiceImpl.java 第 84 至 96 行。
  7. cancel_reason 在 official_vehicle_dispatch 表中允许为空,因此仅靠当前表结构不能保证取消原因留痕。

    • 依据:official_vehicle_mvp_mysql.sql 第 82 至 105 行。
  8. 模块已有 JUnit 基座和 Controller 测试;原有取消测试只验证带“计划变更”原因时 Controller 转交 Service,未覆盖空白原因。

    • 依据:模块 pom.xml 的 Surefire 配置;OfficialVehicleDispatchControllerTest.java 第 48 至 59 行。

最小改动及实际完成证据

步骤 实际改动 完成证据 验证状态 回退条件
1 在 Service 的 cancel 首行加入 Assert.hasText(cancelReason, "取消原因不能为空") 空值或全空白值在读取派车单、改变状态、释放车辆前被拒绝 已执行单元测试 若业务确认允许无原因取消,撤回该校验并重新定义留痕方式
2 新增 OfficialVehicleDispatchServiceImplTest,传入全空白原因并断言抛出 IllegalArgumentException 测试直接调用 Service,不依赖前端表单 已执行 若异常约定需要调整,更新断言及统一异常验证
3 保持前端必填、Controller 权限/审计、派车状态流转和数据库表结构不变 main...training/require-cancel-reason 仅含上述两个后端文件 已核对 diff 若接口回归显示兼容问题,只回退提交 d357de7

本次明确不应修改

  • official_vehicle_dispatch 的字段、索引和初始化 SQL。
  • 派车、取消派车后的车辆可用状态处理、申请状态流转和行程模块。
  • 已存在的 vehicle:dispatch:cancel 权限和 @AutoLog 审计注解。
  • 前端弹窗、路由、菜单和无关页面。前端已经有必填规则,本次不重复实现。
  • 未读取到源码依据的全局异常、数据权限、网关、审批或外部调用方逻辑。

可能受影响的内容

维度 结论 当前状态
接口 空值、"" 或全空白 cancelReason 将不再被正常取消流程接受 已通过 Service 单测验证
数据 被拒绝的请求不会进入派车状态和车辆状态更新;表字段仍允许空值 代码顺序与单测已验证;数据库级验证未执行
权限与审计 原有权限和 @AutoLog 保持不变 已读取源码,未做运行环境验证
正常取消 非空原因仍应按原有流程取消并释放车辆 未做数据库/API 回归
统一响应 Assert 的异常如何映射 HTTP/Result 取决于项目全局异常处理 待确认

实际验证结果

训练分支:training/require-cancel-reason
提交:d357de7 fix: require reason when cancelling dispatch

执行命令:

mvn -pl jeecg-boot-module/jeecg-module-officialvehicle -am \
  -DskipTests=false \
  -Dtest=OfficialVehicleDispatchServiceImplTest \
  -Dsurefire.failIfNoSpecifiedTests=false test

实际结果:2026-08-06 再次执行完成,BUILD SUCCESS;OfficialVehicleDispatchServiceImplTest 共 1 项,Failures: 0、Errors: 0、Skipped: 0。

未执行且不能写成已通过:

  • 已派车数据提交非空取消原因后的数据库状态、车辆状态和审计记录。
  • 直接调用取消接口时空值/全空白值的 HTTP/Result 响应。
  • 浏览器中取消弹窗的必填提示和成功取消路径。

人工待确认事项

  1. 取消原因是否仅要求非空,还是需要最小长度、枚举原因或特殊角色豁免。
  2. Assert.hasText 抛出的异常在当前服务中的错误码、HTTP 状态和前端提示是否符合统一约定。
  3. 正常取消后派车状态、车辆状态和审计记录的集成环境回归结果。
  4. 是否存在项目外系统直接调用取消接口,以及它们对空原因的历史依赖。