SpringBoot3+Vue3实现模块之间的关联
1.模块之间的关联,有哪些形式
1.1普通业务模块之间
1.2普通业务模块与角色模块之间
2.房屋租赁系统中:
(1)房屋信息 ↔ 其他模块
-
关联户主:每套房屋必须关联一个户主(一对一)
-
关联租客:通过租赁合同与租客建立关联(一对多)
-
关联看房申请:租客可对房屋发起看房申请(一对多)
-
关联报修:房屋出现问题时产生报修记录(一对多)
(2)租赁合同 ↔ 核心业务
-
看房申请 → 合同:通过审核的看房申请可生成合同
-
合同 → 收租:合同确定租金标准、支付周期等收租依据
-
合同 → 报修:只有有效合同期内的租客可提交报修
(3)收租管理关联
-
合同生成后自动创建收租计划
-
每次收租记录关联具体合同和房屋
-
统计模块聚合所有收租记录数据
(4)报修流程关联
A[租客] -->|提交| B[报修信息]
B -->|分配| C[维修工]
C -->|完成| D[维修数据]
D -->|反馈| A
-
租客在"报修管理"提交申请(关联房屋ID和合同ID)
-
系统自动验证合同有效性
-
管理员分配维修工处理
-
维修完成后更新"维修数据"
-
数据同步到:
- 房屋信息(维护记录)
- 租客界面(处理结果通知)
- 统计模块(维修周期分析)
(5)租客权限:
- 只能查看自己关联的合同、收租、报修记录
- 只能申请可租状态的房屋
(6)管理员权限:
-
可跨户主管理所有房屋
-
审核所有合同和报修流程
-
生成全局统
3.数据表关联建议
| 主表 | 关联表 | 关联字段 |
|---|---|---|
| 房屋信息 | 户主 | huzhu_id |
| 房屋信息 | 租赁合同 | house_id |
| 租赁合同 | 租客 | zuke_id |
| 租赁合同 | 收租计划 | contract_id |
| 报修信息 | 房屋 | house_id |
| 报修信息 | 租客 | tenant_id |
4.普通业务模块之间
将房屋信息与户主信息关联上操作
1.每套房屋必须关联一个户主(一对一),在房屋信息表中创建一个关联字段huZhu_id
2.在对应的实体类和sql语句中加上这个字段
3.给字段初始化,在页面新增和编辑的时候,数据传到后端,操作进入数据库中
<el-form-item label="户主姓名"> <el-select v-model="data.form.houseOwnerId" placeholder="请输入户主姓名" style="width: 100%" > <el-option v-for="item in data.houseOwnerDate" :key="item.id" :label="item.huZhuXingMing" :value="item.id" /> </el-select> </el-form-item>
const loadHouseOwner = () => {
request.get('huzhu/selectAll').then(res => {
if (res.code==='200'){
data.houseOwnerDate=res.data
}else {
ElMessage.error(res.msg)
}
})
}
loadHouseOwner()
4.数据库存的是户主的id,如何展示户主姓名:
a.java代码里写关联逻辑

@Resource
private HuZhuMapper huZhuMapper;
public PageInfo<FangWuXinXi> selectPage(FangWuXinXi fangWuXinXi, Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<FangWuXinXi> list=fangWuXinXiMapper.selectAll(fangWuXinXi);
//list里面只有huZhuId
for (FangWuXinXi dbFangWuXinXi:list){
Integer huZhuId=dbFangWuXinXi.getHuZhuId();
HuZhu huzhu = huZhuMapper.selectById(huZhuId);
if (ObjectUtil.isNotEmpty(huzhu)){
dbFangWuXinXi.setFangWuHuZhu(huzhu.getHuZhuXingMing());
dbFangWuXinXi.setHuZhuShouJi(huzhu.getLianXiFangShi());
}
}
return PageInfo.of(list);
}
b.sql里写关联逻辑
<select id="selectAll" resultType="com.example.springboot1.entity.FangWuXinXi">
select fangwuxinxi.*,huzhu.huZhuXingMing as fangWuHuZhu,huzhu.lianXiFangShi as FangWuShouJi from fangwuxinxi left join huzhu on fangwuxinxi.huzhu_id=huzhu.id
<where> <if test="fangYuanLeiXing != null">fangyuanleixing like concat('%',#{fangYuanLeiXing},'%')</if> </where> </select>
5.普通业务模块与角色模块之间
将租赁合同与租客信息关联
1.租客只能查看自己关联的合同,在租赁合同表中创建一个关联字段zuke_id
2.在对应的实体类和sql语句中加上这个字段
3.给字段初始化,在页面新增和编辑的时候,数据传到后端,操作进入数据库中
public PageInfo<ZuLinHeTong> selectPage(ZuLinHeTong zuLinHeTong, Integer pageNum, Integer pageSize) {
//拿到当前登录用户的角色
Account currentAccount=TokenUtil.getCurrentUser();
List<ZuLinHeTong> list;
if ("租客".equals(currentAccount.getRole())){
Integer zuKeId1=currentAccount.getId();
list=zuLinHeTongMapper.selectByZuKeId(String.valueOf(zuKeId1));
for (ZuLinHeTong dbZuLinHeTong:list){
Integer zuKeId=dbZuLinHeTong.getZuKeId();
ZuKe zuKe = zuKeMapper.selectById(String.valueOf(zuKeId));
if (ObjectUtil.isNotEmpty(zuKe)){
dbZuLinHeTong.setZhangHao(zuKe.getUsername());
dbZuLinHeTong.setZuKeXingMing(zuKe.getXingMing());
dbZuLinHeTong.setZuKeShenFenZheng(zuKe.getShenFenZheng());
dbZuLinHeTong.setZuKeShouJi(zuKe.getShouJi());
}
}
}else {
PageHelper.startPage(pageNum,pageSize);
list=zuLinHeTongMapper.selectAll(zuLinHeTong);
for (ZuLinHeTong dbZuLinHeTong:list){
Integer zuKeId=dbZuLinHeTong.getZuKeId();
ZuKe zuKe = zuKeMapper.selectById(String.valueOf(zuKeId));
if (ObjectUtil.isNotEmpty(zuKe)){
dbZuLinHeTong.setZhangHao(zuKe.getUsername());
dbZuLinHeTong.setZuKeXingMing(zuKe.getXingMing());
dbZuLinHeTong.setZuKeShenFenZheng(zuKe.getShenFenZheng());
dbZuLinHeTong.setZuKeShouJi(zuKe.getShouJi());
}
}
}
return PageInfo.of(list);
}


浙公网安备 33010602011771号