Appearance
18:基础资料:品牌、产品、行业、地区、岗位和结算规则
1. 什么是基础资料
基础资料本身通常不产生审批流,但为客户、跟进、评估和合同提供可选项和规则引用。它们的质量直接影响主业务的数据正确性。
当前项目主要包括:
text
客户品牌、品牌负责人、产品、行业、地区、岗位、结算规则2. 基础资料模块与表
| 领域 | Service | 表 | 被谁使用 |
|---|---|---|---|
| 产品 | ProductServiceImpl | product | 产品跟进、项目评估、合同、试单 |
| 品牌 | CustomerBrandServiceImpl | customer_brand | 客户资料、品牌统计 |
| 品牌负责人 | BrandOwnerRelationServiceImpl | brand_owner_relation | 品牌归属和权限/展示 |
| 客户-品牌关系 | CustomerBrandRelationServiceImpl | customer_brand_relation | 客户品牌关联扩展 |
| 行业 | IndustryDictServiceImpl | industry_dict | 客户行业树、列表展示 |
| 地区 | RegionServiceImpl | region | 客户地区、导入下拉 |
| 岗位 | PositionServiceImpl | position | 服务岗位与项目资料 |
| 岗位日志 | PositionChangeLogServiceImpl | position_change_log | 岗位修改审计 |
| 结算规则 | SettlementRuleServiceImpl | settlement_rule | 项目评估和合同 |
3. 产品:所有业务的共同外键
Product 不是一个可有可无的下拉项。customer_product_follow.product_id、试单和合同都围绕产品展开。
产品被删除或停用前需要确认:
text
是否已被客户产品跟进引用
是否已被项目评估引用
是否已被合同引用
是否已被试单引用Demo 中即使产品先只用字符串,也应尽快演进为独立 demo_product 表和 product_id 外键,而不要长期把产品名称复制到每张业务表。
4. 行业和结算规则都是树
IndustryDictServiceImpl 和 SettlementRuleServiceImpl 都需要处理层级关系。
典型字段:
text
id
parent_id
ancestors
name
sort结算规则 Service 会将扁平记录转为树,并递归构造完整名称路径。客户保存时行业可能从前端接收完整路径,但主表只保存最后一级行业 id;详情再根据祖先字段还原路径。
这是一种常见模式:入库保存稳定 id,展示时转换为名称和树路径。
5. 品牌和负责人
品牌相关表的关系:
text
customer_brand
-> brand_owner_relation 一个品牌可有负责人关系
-> customer_brand_relation 客户与品牌的扩展关系
customer_info.brand_id 客户主资料引用品牌当前客户列表会批量加载品牌信息、品牌负责人或统计。修改品牌领域时要同时检查客户详情、列表、产品跟进统计是否依赖该字段。
6. 地区的两个来源
当前项目既有数据库 region,也有静态资源:
text
src/main/resources/static/region.json静态 JSON 主要适合前端/导入级联下拉;数据库关系 customer_region 保存的是客户实际选择的地区。不要把“地区字典”和“客户地区关系”混为一张表。
7. 基础资料接口的共同形态
大多数基础资料 Controller 都有:
text
/save
/edit
/findById
/query/page
/del
/del/batch它们使用同一套 @QueryPage + QueryModel + QueryResultModel 分页协议。基础资料是练习正式项目代码风格的最佳起点,因为跨表业务和审批相对少。
8. Demo 实施建议
按难度逐步加:
text
阶段 1:demo_product
- 产品分页、详情、CRUD
- 跟进表保存 product_id
阶段 2:demo_industry
- parent_id 树
- 客户选择行业路径,保存最后一级 id
阶段 3:demo_settlement_rule
- 树形规则
- 项目评估/合同保存 rule_id 列表
阶段 4:demo_brand
- 客户引用 brand_id
- 列表和详情显示 brandName每加一个基础表,都应做两类测试:
text
自身 CRUD 是否正确
被客户/跟进/合同引用时,关联查询和删除保护是否正确9. 源码阅读清单
text
ProductController / ProductServiceImpl
CustomerBrandController / CustomerBrandServiceImpl
BrandOwnerRelationController / BrandOwnerRelationServiceImpl
IndustryDictController / IndustryDictServiceImpl
RegionController / RegionServiceImpl
SettlementRuleController / SettlementRuleServiceImpl
PositionController / PositionServiceImpl
pginit.sql 中 product、customer_brand、industry_dict、region、settlement_rule、position