房间基本属性管理共有五个接口,分别是**保存或更新属性名称**、**保存或更新属性值**、**查询全部属性名称和属性值列表**、**根据ID删除属性名称**、**根据ID删除属性值**。下面逐一是实现。
首先在`AttrController`中注入`AttrKeyService`和`AttrValueService`,如下:
@Tag(name = "房间属性管理")
@RestController
@RequestMapping("/admin/attr")
public class AttrController {
@Autowired
private AttrKeyService attrKeyService;
@Autowired
private AttrValueService attrValueService;
}
##### 1. 保存或更新属性名称
在`AttrController`增加如下内容
@Operation(summary = "保存或更新属性名称")
@PostMapping("key/saveOrUpdate")
public Result saveOrUpdateAttrKey(@RequestBody AttrKey attrKey) {
attrKeyService.saveOrUpdate(attrKey);
return Result.ok();
}
##### 2. 保存或更新属性值
在`AttrController`中增加如下内容
@Operation(summary = "保存或更新属性值")
@PostMapping("value/saveOrUpdate")
public Result saveOrUpdateAttrValue(@RequestBody AttrValue attrValue) {
attrValueService.saveOrUpdate(attrValue);
return Result.ok();
}
##### 3. 查询全部属性名称和属性值列表
- **查看响应的数据结构**
查看**web-admin模块**下的`com.atguigu.lease.web.admin.vo.attr.AttrKeyVo`,内容如下:
@Data
public class AttrKeyVo extends AttrKey {
@Schema(description = "属性值列表")
private List<AttrValue> attrValueList;
}
- **编写Controller层逻辑**
在`AttrController`中添加如下内容
返回的是vo的list
@Operation(summary = "查询全部属性名称和属性值列表")
@GetMapping("list")
public Result<List<AttrKeyVo>> listAttrInfo() {
List<AttrKeyVo> list = attrKeyService.listAttrInfo();
return Result.ok(list);
}
目前使用的mybatis-plus没有提供多表的功能所以我们要自己去编写 sql进行查询
编写sql进行查询的基本逻辑
1.在service接口中定义方法
2.service实现类实现方法
3.mapper中声明查询方法
4.mapper.xml书写sql语句
- **编写Service层逻辑**
在`AttrKeyService`中增加如下内容
List<AttrKeyVo> listAttrInfo();
在`AttrKeyServiceImpl`中增加如下内容
@Autowired
private AttrKeyMapper mapper;
@Override
public List<AttrKeyVo> listAttrInfo() {
return mapper.listAttrInfo();
}
这个错误信息可以直接忽略 是因为idea的原因 我们使用了mapperscan的注解进行了一个统一的扫描 但是idea不支持这种注解 但是springboot支持这种注解 可以运行 如果不习惯的话 我们可以使用@mapper注解 但是我们使用mapperscan
**编写Mapper层逻辑**
在`AttrKeyMapper`中增加如下内容
List<AttrKeyVo> listAttrInfo();
对应的在`AttrKeyMapper.xml`中增加如下内容P103
<resultMap id="BaseResultMap" type="com.atguigu.lease.web.admin.vo.attr.AttrKeyVo">
<id property="id" column="id"/>
<result property="name" column="key_name"/>
<collection property="attrValueList" ofType="com.atguigu.lease.model.entity.AttrValue">
<id column="value_id" property="id"/>
<result column="value_name" property="name"/>
<result column="key_id" property="attrKeyId"/>
</collection>
</resultMap>
<select id="listAttrInfo" resultMap="BaseResultMap">
select k.id,
k.name key_name,
v.id value_id,
v.name value_name,
v.attr_key_id key_id
from attr_key k
left join attr_value v on k.id = v.attr_key_id and v.is_deleted = 0
where k.is_deleted = 0
</select>
##### 4. 根据ID删除属性名称
在`AttrController`中增加如下内容,注意删除属性名称时,会一并删除其下的所有属性值
@Operation(summary = "根据id删除属性名称")
@DeleteMapping("key/deleteById")
public Result removeAttrKeyById(@RequestParam Long attrKeyId) {
//删除attrKey
attrKeyService.removeById(attrKeyId);
//删除attrValue
LambdaQueryWrapper<AttrValue> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AttrValue::getAttrKeyId, attrKeyId);
attrValueService.remove(queryWrapper);
return Result.ok();
}
##### 5. 根据ID删除属性值
在`AttrController`中增加如下内容
@Operation(summary = "根据id删除属性值")
@DeleteMapping("value/deleteById")
public Result removeAttrValueById(@RequestParam Long id) {
attrValueService.removeById(id);
return Result.ok();
}
#### 7.2.2.6 公寓杂费管理
房间基本属性管理共有五个接口,分别是**保存或更新杂费名称**、**保存或更新杂费值**、**查询全部杂费名称和杂费值列表**、**根据ID删除杂费名称**、**根据ID删除杂费值**。下面逐一实现
首先在`FeeController`中注入`FeeKeyService`和`FeeValueService`,如下
@Tag(name = "房间杂费管理")
@RestController
@RequestMapping("/admin/fee")
public class FeeController {
@Autowired
private FeeKeyService feeKeyService;
@Autowired
private FeeValueService feeValueService;
}
##### 1. 保存或更新杂费名称
在`FeeController`中增加如下内容
@Operation(summary = "保存或更新杂费名称")
@PostMapping("key/saveOrUpdate")
public Result saveOrUpdateFeeKey(@RequestBody FeeKey feeKey) {
feeKeyService.saveOrUpdate(feeKey);
return Result.ok();
}
##### 2. 保存或更新杂费值
在`FeeController`中增加如下内容
@Operation(summary = "保存或更新杂费值")
@PostMapping("value/saveOrUpdate")
public Result saveOrUpdateFeeValue(@RequestBody FeeValue feeValue) {
feeValueService.saveOrUpdate(feeValue);
return Result.ok();
}
##### 3. 查询全部杂费名称和杂费值列表
- **查看响应的数据结构**
查看**web-admin模块**下创的`com.atguigu.lease.web.admin.vo.fee.FeeKeyVo`,内容如下
@Data
public class FeeKeyVo extends FeeKey {
@Schema(description = "杂费value列表")
private List<FeeValue> feeValueList;
}
- **编写Controller层逻辑**
在`FeeController`中增加如下内容
@Operation(summary = "查询全部杂费名称和杂费值列表")
@GetMapping("list")
public Result<List<FeeKeyVo>> feeInfoList() {
List<FeeKeyVo> list = feeKeyService.listFeeInfo();
return Result.ok(list);
}
- **编写Service层逻辑**
- 在`FeeKeyService`中增加如下内容
List<FeeKeyVo> listFeeInfo();
- 在`FeeKeyServiceImpl`中增加如下内容
@Autowired
private FeeKeyMapper mapper;
@Override
public List<FeeKeyVo> listFeeInfo() {
return mapper.listFeeInfo();
}
- **编写Mapper层逻辑**
- 在`FeeKeyMapper`中增加如下内容
List<FeeKeyVo> listFeeInfo();
- 在`FeeKeyMapper.xml`中增加如下内容
<resultMap id="FeeInfoList" type="com.atguigu.lease.web.admin.vo.fee.FeeKeyVo">
<id property="id" column="id"/>
<result property="name" column="key_name"/>
<collection property="feeValueList" ofType="com.atguigu.lease.model.entity.FeeValue">
<id column="value_id" property="id"/>
<result column="value_name" property="name"/>
<result column="value_unit" property="unit"/>
<result column="key_id" property="feeKeyId"/>
</collection>
</resultMap>
<select id="listFeeInfo" resultMap="FeeInfoList">
select k.id,
k.name key_name,
v.id value_id,
v.name value_name,
v.unit value_unit,
v.fee_key_id key_id
from fee_key k
left join fee_value v on k.id = v.fee_key_id and v.is_deleted = 0
where k.is_deleted = 0
</select>
##### 4. 根据ID删除杂费名称
在`FeeController`中增加如下内容
@Operation(summary = "根据id删除杂费名称")
@DeleteMapping("key/deleteById")
public Result deleteFeeKeyById(@RequestParam Long feeKeyId) {
//删除杂费名称
feeKeyService.removeById(feeKeyId);
//删除杂费名称下的杂费值
LambdaQueryWrapper<FeeValue> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(FeeValue::getFeeKeyId, feeKeyId);
feeValueService.remove(queryWrapper);
return Result.ok();
}
##### 5. 根据ID删除杂费值
在`FeeController`中增加如下内容
@Operation(summary = "根据id删除杂费值")
@DeleteMapping("value/deleteById")
public Result deleteFeeValueById(@RequestParam Long id) {
feeValueService.removeById(id);
return Result.ok();
}
#### 7.2.2.7 地区信息管理
地区信息管理共有三个接口,分别是**查询省份信息列表**,**根据省份ID查询城市信息列表**和**根据城市ID查询区县信息列表**,具体实现如下
在`RegionInfoController`中增加如下内容
@Tag(name = "地区信息管理")
@RestController
@RequestMapping("/admin/region")
public class RegionInfoController {
@Autowired
private ProvinceInfoService provinceInfoService;
@Autowired
private CityInfoService cityInfoService;
@Autowired
private DistrictInfoService districtInfoService;
@Operation(summary = "查询省份信息列表")
@GetMapping("province/list")
public Result<List<ProvinceInfo>> listProvince() {
List<ProvinceInfo> list = provinceInfoService.list();
return Result.ok(list);
}
@Operation(summary = "根据省份id查询城市信息列表")
@GetMapping("city/listByProvinceId")
public Result<List<CityInfo>> listCityInfoByProvinceId(@RequestParam Long id) {
LambdaQueryWrapper<CityInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CityInfo::getProvinceId, id);
List<CityInfo> list = cityInfoService.list(queryWrapper);
return Result.ok(list);
}
@GetMapping("district/listByCityId")
@Operation(summary = "根据城市id查询区县信息")
public Result<List<DistrictInfo>> listDistrictInfoByCityId(@RequestParam Long id) {
LambdaQueryWrapper<DistrictInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DistrictInfo::getCityId, id);
List<DistrictInfo> list = districtInfoService.list(queryWrapper);
return Result.ok(list);
}
}