### 供应商/采购商车辆信息管理功能说明
**前提**：
1. 涉及单据：A（车型信息）、B（车辆信息管理）
2. VO类：
 - A：com.yonyou.ucf.mdf.bill.entity.carOrder.VehicleMsgO
 - B：com.yonyou.ucf.mdf.bill.entity.carOrder.VehicleOrderBatchInfoManag
eO
3. A分供应商端与采购端（实体相同，显示字段不同）
4. 引⽤类：IBillRepository、YpdBillContext；不使⽤jdbcTemplate；分层参考AutoMa
pPlugin
**业务实现**：
#### 一、A相关处理
1. 新建类：com.yonyou.ucf.mdf.plugin.carOrder.VehicleMsgOPPlugin（继承Abstra
ctBillPlugin）
2. 数据隔离规则：按租户ID区分。采购端租户为pca7ixf4；供应商端租户取自iuap_apdoc_cor
edoc.aa_vendor的cRelationTenantId（条件：aa_vendor.id=VehicleMsgO的SUPPLIE
R）
3. 采购端A保存处理（重写afterSave）：
 - ID翻译：匹配数据源（iuap_apdoc_basedoc.bd_cust_doc，其custdocdefid关联cod
e含VM的def表），当字段值=数据源id时，对应Name字段赋值为数据源name
4. 采购端A新增处理（_status=2，afterSave）：复制为供应商A单据（新id，def10记录
采购端id，租户改为供应商的租户）
5. 采购端A修改处理（_status=1，afterSave）：按def10查找对应的供应商A单据，同步数据
并刷新pubts
6. 供应商A权限：仅可查询，不可更改
#### 二、B相关处理
1. 新建类：com.yonyou.ucf.mdf.plugin.carOrder.VehicleOrderBatchInfoManageOP
Plugin（继承AbstractBillPlugin）
2. 数据隔离规则：同A的租户规则
3. 权限控制：仅供应商端B可保存，采购端B不可保存
4. 供应商端B新增（_status=2）/编辑（_status=1，afterSave）处理：
 - 新增：复制为采购端B数据（租户设为pca7ixf4，新id，billstatus=001，supplie
r=供应商id，DEF10=供应商B id；子表def11=原id、新id；采购端B的sourceId=供应商A主
键，同时更新A的def2为“已处理”）
 - 编辑：删除原复制的采购端B单据
5. 采购端B编辑：不执行afterSave
6. 供应商端B删除方法：
 - beforeDelete：验证billstatus=001时可删除，否则禁⽌删除
 - afterDelete：删除采购端B数据（dr=1），更新供应商A的def2为空，供应商B的def10为
采购商id
#### 三、接⼝与服务
1. 参照MaterialMapping相关类位置，生成VehicleOrderBatchInfoManageOPP的Control
ler、Service、ServiceImpl
2. VehicleOrderBatchInfoManageOPPController新增接口：
 - 同意/驳回：非供应商端B可操作，同意时供应商端B和采购端B的billstatus=003；驳回时=
005（业务逻辑在Service层，Controller调⽤Service）
 - 提交：仅供应商端B可操作，操作后采购端B的dr=0、billstatus=004；供应商端B的bill
status=002（业务逻辑在Service层）
3. 生成结束后，重新梳理Controller、Service、ServiceImpl的调口关系
#### 四、代码⽣成验证
1. 流水线运行正常
2. 微服务运行正常
3. 采购端新建单据A，供应端同步⽣成新建单据A，测试正常
4. 供应端B保存后billstatus为空问题分析：原描述未明确B保存时billstatus需设为001，仅
说明复制出的采购商B为001，导致理解偏差（处理失败）
#### 五、代码测试及bug修复
1. 采购端A删除时，供应端A同步删除
2. 供应端B保存单据后billstatus为空问题：需修复并赋值001（此前处理失败）
3. 供应商端B保存前，在beforeSave中设置billstatus的值为001
4. submit接口接收参数为数组，需修复适配
5. 供应商端B保存复制采购商B时，租户值未重新设置，需修复
6. 供应商端B仅未提交单据可删除的判断有误，需重新查询数据库中billstatus的值并修复
7. 采购商B的approve⽅法和reject方法增加批量处理功能，参数改为数组
8. approve和reject执行时，需根据def10判断当前为采购商B还是供应商B（采购商B的def10=
供应商id）
#### 注意事项
1. 当列表不显示某些字段时，上下文无法获取对应字段值，需重新查询（如billstatus）
2. 已生成逻辑若手动修改，重新生成后手动修改内容是否保留？
#### 优势
1. 若生成的代码逻辑错误，基本无bug，相比手动编写（bug较多、修改后需重新构建）效率更高
#### 五、代码测试及bug修复
1. 采购端A删除时，供应端A同步删除
2. 供应端B保存单据后billstatus为空问题：需修复并赋值001（此前处理失败）
3. 供应商端B保存前，在beforeSave中设置billstatus的值为001
4. submit接⼝接收参数为数组，需修复适配
5. 供应商端B保存复制采购商B时，租户值未重新设置，需修复
6. 供应商端B仅未提交单据可删除的判断有误，需重新查询数据库中billstatus的值并修复
7. 采购商B的approve方法和reject方法增加批量处理功能，参数改为数组
8. approve和reject执行时，需根据def10判断当前为采购商B还是供应商B（采购商B的def10=
供应商id）