HouseInfoServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package com.ruoyi.web.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import cn.hutool.json.JSONUtil;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  10. import com.ruoyi.common.enums.BusinessType;
  11. import com.ruoyi.common.exception.ServiceException;
  12. import com.ruoyi.common.utils.bean.BeanUtils;
  13. import com.ruoyi.web.domain.dto.house.HouseInfoAddRequest;
  14. import com.ruoyi.web.domain.dto.house.HouseInfoEditRequest;
  15. import com.ruoyi.web.domain.dto.house.HouseInfoQueryRequest;
  16. import com.ruoyi.web.domain.entity.HouseInfo;
  17. import com.ruoyi.web.domain.entity.PersonHouseRelation;
  18. import com.ruoyi.web.domain.entity.PersonInfo;
  19. import com.ruoyi.web.domain.vo.HouseInfoVO;
  20. import com.ruoyi.web.domain.vo.PersonInfoVO;
  21. import com.ruoyi.web.mapper.HouseInfoMapper;
  22. import com.ruoyi.web.service.HouseInfoService;
  23. import com.ruoyi.web.service.PersonHouseRelationService;
  24. import com.ruoyi.web.service.PersonInfoService;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import java.math.BigDecimal;
  28. import java.util.Arrays;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.stream.Collectors;
  32. /**
  33. * 房屋服务
  34. */
  35. @Service
  36. public class HouseInfoServiceImpl extends ServiceImpl<HouseInfoMapper, HouseInfo>
  37. implements HouseInfoService {
  38. @Autowired
  39. private HouseInfoService houseInfoService;
  40. @Autowired
  41. private PersonHouseRelationService personHouseRelationService;
  42. @Autowired
  43. private PersonInfoService personInfoService;
  44. @Override
  45. public Integer addHouseInfo(HouseInfoAddRequest houseInfoAddRequest) {
  46. if (houseInfoAddRequest == null) {
  47. throw new ServiceException("请求参数为空");
  48. }
  49. try {
  50. HouseInfo houseInfo = new HouseInfo();
  51. BeanUtil.copyProperties(houseInfoAddRequest, houseInfo);
  52. // 将标签 List 转为 String
  53. houseInfo.setHouseTags(JSONUtil.toJsonStr(houseInfoAddRequest.getHouseTags()));
  54. // 数据校验 todo
  55. validHouseInfo(houseInfo, BusinessType.INSERT);
  56. // 保存到数据库
  57. this.save(houseInfo);
  58. return houseInfo.getId();
  59. } catch (Exception e) {
  60. log.error("添加房屋失败", e);
  61. throw new ServiceException("添加房屋失败: " + e.getMessage());
  62. }
  63. }
  64. @Override
  65. public boolean deleteHouseInfo(String ids) {
  66. if (StrUtil.isBlank(ids)) {
  67. throw new ServiceException("id不能为空或id异常");
  68. }
  69. // 2. 分割ID字符串为List<Integer>
  70. List<Long> idList = Arrays.stream(ids.split(","))
  71. .map(String::trim)
  72. .filter(StrUtil::isNotBlank)
  73. .map(Long::parseLong)
  74. .collect(Collectors.toList());
  75. if (idList.isEmpty()) {
  76. throw new ServiceException("ID格式异常");
  77. }
  78. // 3. 构建删除条件
  79. QueryWrapper<HouseInfo> queryWrapper = new QueryWrapper<>();
  80. queryWrapper.in("id", idList);
  81. // 4. 执行删除(返回是否删除成功)
  82. return remove(queryWrapper);
  83. }
  84. @Override
  85. public void editHouseInfo(HouseInfoEditRequest houseInfoEditRequest) {
  86. // 判断是否存在
  87. Integer id = houseInfoEditRequest.getId();
  88. HouseInfo oldHouseInfo = this.getById(id);
  89. if (oldHouseInfo == null) {
  90. throw new ServiceException("没有找到房屋");
  91. }
  92. HouseInfo houseInfo = new HouseInfo();
  93. BeanUtil.copyProperties(houseInfoEditRequest, houseInfo);
  94. // 将人口标签 List 转为 String
  95. houseInfo.setHouseTags(JSONUtil.toJsonStr(houseInfoEditRequest.getHouseTags()));
  96. houseInfo.setUpdateTime(new Date());
  97. // 数据校验
  98. validHouseInfo(houseInfo, BusinessType.UPDATE);
  99. // 操作数据库
  100. boolean result = this.updateById(houseInfo);
  101. if (!result) {
  102. throw new ServiceException("修改房屋操作失败");
  103. }
  104. }
  105. /**
  106. * 校验房屋
  107. *
  108. * @param houseInfo
  109. */
  110. public void validHouseInfo(HouseInfo houseInfo, BusinessType type) {
  111. if (ObjectUtil.isEmpty(houseInfo)) {
  112. throw new ServiceException("数据为空");
  113. }
  114. Integer id = houseInfo.getId();
  115. String houseCode = houseInfo.getHouseCode();
  116. String doorplateNumber = houseInfo.getDoorplateNumber();
  117. String houseAddress = houseInfo.getHouseAddress();
  118. Integer houseOwnerId = houseInfo.getHouseOwnerId();
  119. Integer totalPoints = houseInfo.getTotalPoints();
  120. Integer remainingPoints = houseInfo.getRemainingPoints();
  121. Integer houseCategory = houseInfo.getHouseCategory();
  122. BigDecimal buildingArea = houseInfo.getBuildingArea();
  123. String grid = houseInfo.getGrid();
  124. String photoUrl = houseInfo.getPhotoUrl();
  125. String houseTags = houseInfo.getHouseTags();
  126. Date createTime = houseInfo.getCreateTime();
  127. Date updateTime = houseInfo.getUpdateTime();
  128. String delFlag = houseInfo.getDelFlag();
  129. // 修改数据时,id 不能为空 todo
  130. if (type != BusinessType.INSERT && ObjectUtil.isEmpty(id)) {
  131. throw new ServiceException("id不能为空");
  132. }
  133. if (StrUtil.isBlank(houseCode)) {
  134. throw new ServiceException("房屋编号不能为空");
  135. }
  136. }
  137. /**
  138. * 获取房屋包装类
  139. *
  140. * @param houseInfo
  141. * @return
  142. */
  143. @Override
  144. public HouseInfoVO getHouseInfoVO(HouseInfo houseInfo) {
  145. if (ObjectUtil.isEmpty(houseInfo)) {
  146. throw new ServiceException("请求参数不存在");
  147. }
  148. HouseInfoVO houseInfoVO = new HouseInfoVO();
  149. BeanUtils.copyProperties(houseInfo, houseInfoVO);
  150. // 通过关联表 获取 成员数量
  151. Integer houseInfoId = houseInfo.getId();
  152. Integer memberCount = personHouseRelationService.lambdaQuery()
  153. .eq(PersonHouseRelation::getHouseId, houseInfoId)
  154. .count()
  155. .intValue();
  156. houseInfoVO.setMemberCount(memberCount);
  157. // 通过房主人员ID -> 房主姓名 身份证 联系方式(人员VO类)
  158. Integer houseOwnerId = houseInfo.getHouseOwnerId();
  159. if (houseOwnerId != null) {
  160. PersonInfo houseOwnerInfo = personInfoService.getById(houseOwnerId);
  161. PersonInfoVO houseOwnerInfoVO = personInfoService.getPersonInfoVO(houseOwnerInfo);
  162. houseInfoVO.setHouseOwnerInfo(houseOwnerInfoVO);
  163. }
  164. return houseInfoVO;
  165. }
  166. /**
  167. * 根据id获取人员包装类
  168. *
  169. * @param id
  170. * @return
  171. */
  172. @Override
  173. public HouseInfoVO getHouseInfoById(int id) {
  174. if (id <= 0 || ObjectUtil.isEmpty(id)) {
  175. throw new ServiceException("id不能为空或id异常");
  176. }
  177. HouseInfo houseInfo = this.getById(id);
  178. return getHouseInfoVO(houseInfo);
  179. }
  180. /**
  181. * 分页获取房屋列表
  182. *
  183. * @param houseInfoQueryRequest
  184. * @return
  185. */
  186. @Override
  187. public Page<HouseInfoVO> getListHouseInfoByPage(HouseInfoQueryRequest houseInfoQueryRequest) {
  188. long current = houseInfoQueryRequest.getPageNum();
  189. long size = houseInfoQueryRequest.getPageSize();
  190. // 1. 分页查询房屋基础信息
  191. Page<HouseInfo> houseInfoPage = this.page(new Page<>(current, size),
  192. getQueryWrapper(houseInfoQueryRequest));
  193. // 2. 补充关联数据
  194. Page<HouseInfoVO> resultPage = new Page<>();
  195. BeanUtils.copyProperties(houseInfoPage, resultPage, "records");
  196. // 3. 处理每条记录
  197. List<HouseInfoVO> viewList = houseInfoPage.getRecords().stream().map(houseInfo -> {
  198. return getHouseInfoVO(houseInfo);
  199. }).collect(Collectors.toList());
  200. resultPage.setRecords(viewList);
  201. return resultPage;
  202. }
  203. /**
  204. * 获取查询条件
  205. *
  206. * @param houseInfoQueryRequest
  207. * @return
  208. */
  209. @Override
  210. public QueryWrapper<HouseInfo> getQueryWrapper(HouseInfoQueryRequest houseInfoQueryRequest) {
  211. QueryWrapper<HouseInfo> queryWrapper = new QueryWrapper<>();
  212. if (houseInfoQueryRequest == null) {
  213. return queryWrapper;
  214. }
  215. // 从对象中取值
  216. Integer id = houseInfoQueryRequest.getId();
  217. String doorplateNumber = houseInfoQueryRequest.getDoorplateNumber();
  218. Integer houseOwnerId = houseInfoQueryRequest.getHouseOwnerId();
  219. String houseOwnerName = houseInfoQueryRequest.getHouseOwnerName();
  220. Integer houseCategory = houseInfoQueryRequest.getHouseCategory();
  221. Integer grid = houseInfoQueryRequest.getGrid();
  222. List<String> houseTags = houseInfoQueryRequest.getHouseTags();
  223. String sortField = houseInfoQueryRequest.getSortField();
  224. String sortOrder = houseInfoQueryRequest.getSortOrder();
  225. //门牌号、房主ID、房屋类别、所属网格、家庭标签
  226. queryWrapper.eq(ObjectUtil.isNotEmpty(id), "id", id);
  227. queryWrapper.eq(StrUtil.isNotBlank(doorplateNumber), "doorplate_number", doorplateNumber);
  228. //queryWrapper.eq(ObjectUtil.isNotEmpty(houseOwnerId), "house_owner_id", houseOwnerId);
  229. queryWrapper.eq(ObjectUtil.isNotEmpty(grid), "grid", grid);
  230. queryWrapper.eq(ObjectUtil.isNotEmpty(houseCategory), "house_category", houseCategory);
  231. // 优先使用 房主id 查询 没有房主id 再根据 房主姓名查询
  232. if (ObjectUtil.isNotEmpty(houseOwnerId)) {
  233. queryWrapper.eq("house_owner_id", houseOwnerId);
  234. } else if (StrUtil.isNotBlank(houseOwnerName)) {
  235. queryWrapper.exists("EXISTS (SELECT 1 FROM person_info p WHERE p.id = house_owner_id AND p.realname LIKE {0})");
  236. }
  237. // 家庭标签 JSON 数组查询
  238. if (CollUtil.isNotEmpty(houseTags)) {
  239. for (String tag : houseTags) {
  240. queryWrapper.like("house_tags", "\"" + tag + "\"");
  241. }
  242. }
  243. // 排序
  244. queryWrapper.orderBy(StrUtil.isNotEmpty(sortField), sortOrder.equals("ascend"), sortField);
  245. return queryWrapper;
  246. }
  247. }