DisasterReliefServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.ruoyi.web.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  8. import com.ruoyi.common.enums.BusinessType;
  9. import com.ruoyi.common.exception.ServiceException;
  10. import com.ruoyi.common.utils.bean.BeanUtils;
  11. import com.ruoyi.web.domain.dto.disaster.DisasterReliefAddRequest;
  12. import com.ruoyi.web.domain.dto.disaster.DisasterReliefEditRequest;
  13. import com.ruoyi.web.domain.dto.disaster.DisasterReliefQueryRequest;
  14. import com.ruoyi.web.domain.entity.DisasterRelief;
  15. import com.ruoyi.web.domain.entity.PersonInfo;
  16. import com.ruoyi.web.domain.vo.DisasterReliefVO;
  17. import com.ruoyi.web.mapper.DisasterReliefMapper;
  18. import com.ruoyi.web.service.DisasterReliefService;
  19. import com.ruoyi.web.service.PersonInfoService;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import java.util.Arrays;
  23. import java.util.Date;
  24. import java.util.List;
  25. import java.util.stream.Collectors;
  26. /**
  27. * 灾情共度管理服务实现类
  28. */
  29. @Service
  30. public class DisasterReliefServiceImpl extends ServiceImpl<DisasterReliefMapper, DisasterRelief>
  31. implements DisasterReliefService {
  32. @Autowired
  33. private PersonInfoService personInfoService;
  34. @Override
  35. public Integer addDisasterRelief(DisasterReliefAddRequest disasterReliefAddRequest) {
  36. if (disasterReliefAddRequest == null) {
  37. throw new ServiceException("请求参数为空");
  38. }
  39. try {
  40. // 1. 检查村民是否存在
  41. Integer personId = disasterReliefAddRequest.getPersonId();
  42. if (personId == null || personId <= 0) {
  43. throw new ServiceException("村民ID不能为空或无效");
  44. }
  45. PersonInfo personInfo = personInfoService.getById(personId);
  46. if (personInfo == null) {
  47. throw new ServiceException("未找到对应的村民信息");
  48. }
  49. // 2. 将请求对象转换为实体对象
  50. DisasterRelief disasterRelief = new DisasterRelief();
  51. BeanUtil.copyProperties(disasterReliefAddRequest, disasterRelief);
  52. // 3. 设置创建时间
  53. disasterRelief.setCreateTime(new Date());
  54. // 4. 数据校验
  55. validDisasterRelief(disasterRelief, BusinessType.INSERT);
  56. // 5. 保存到数据库
  57. this.save(disasterRelief);
  58. return disasterRelief.getId();
  59. } catch (Exception e) {
  60. log.error("添加灾情共度记录失败", e);
  61. throw new ServiceException("添加灾情共度记录失败: " + e.getMessage());
  62. }
  63. }
  64. @Override
  65. public boolean deleteDisasterRelief(String ids) {
  66. if (StrUtil.isBlank(ids)) {
  67. throw new ServiceException("ID不能为空或ID异常");
  68. }
  69. try {
  70. // 分割ID字符串为列表
  71. java.util.List<Long> idList = Arrays.stream(ids.split(","))
  72. .map(String::trim)
  73. .filter(StrUtil::isNotBlank)
  74. .map(Long::parseLong)
  75. .collect(Collectors.toList());
  76. if (idList.isEmpty()) {
  77. throw new ServiceException("ID格式异常");
  78. }
  79. // 构建删除条件
  80. QueryWrapper<DisasterRelief> queryWrapper = new QueryWrapper<>();
  81. queryWrapper.in("id", idList);
  82. // 执行删除(返回是否删除成功)
  83. return remove(queryWrapper);
  84. } catch (NumberFormatException e) {
  85. throw new ServiceException("ID格式错误,请确保所有ID都是数字");
  86. } catch (Exception e) {
  87. log.error("删除灾情共度记录失败", e);
  88. throw new ServiceException("删除灾情共度记录失败: " + e.getMessage());
  89. }
  90. }
  91. @Override
  92. public void editDisasterRelief(DisasterReliefEditRequest disasterReliefEditRequest) {
  93. // 判断请求是否为空
  94. if (disasterReliefEditRequest == null) {
  95. throw new ServiceException("请求参数为空");
  96. }
  97. try {
  98. // 判断记录是否存在
  99. Integer id = disasterReliefEditRequest.getId();
  100. DisasterRelief oldDisasterRelief = this.getById(id);
  101. if (oldDisasterRelief == null) {
  102. throw new ServiceException("没有找到对应的灾情共度记录");
  103. }
  104. // 检查村民是否存在
  105. Integer personId = disasterReliefEditRequest.getPersonId();
  106. if (personId != null && personId > 0) {
  107. PersonInfo personInfo = personInfoService.getById(personId);
  108. if (personInfo == null) {
  109. throw new ServiceException("未找到对应的村民信息");
  110. }
  111. }
  112. // 将请求对象转换为实体对象
  113. DisasterRelief disasterRelief = new DisasterRelief();
  114. BeanUtil.copyProperties(disasterReliefEditRequest, disasterRelief);
  115. // 设置更新时间
  116. disasterRelief.setUpdateTime(new Date());
  117. // 数据校验
  118. validDisasterRelief(disasterRelief, BusinessType.UPDATE);
  119. // 更新数据库
  120. boolean result = this.updateById(disasterRelief);
  121. if (!result) {
  122. throw new ServiceException("修改灾情共度记录失败");
  123. }
  124. } catch (Exception e) {
  125. log.error("修改灾情共度记录失败", e);
  126. throw new ServiceException("修改灾情共度记录失败: " + e.getMessage());
  127. }
  128. }
  129. @Override
  130. public DisasterReliefVO getDisasterReliefById(int id) {
  131. if (id <= 0) {
  132. throw new ServiceException("ID不能为空或ID异常");
  133. }
  134. DisasterRelief disasterRelief = this.getById(id);
  135. if (disasterRelief == null) {
  136. throw new ServiceException("没有找到对应的灾情共度记录");
  137. }
  138. return getDisasterReliefVO(disasterRelief);
  139. }
  140. @Override
  141. public DisasterReliefVO getDisasterReliefVO(DisasterRelief disasterRelief) {
  142. if (ObjectUtil.isEmpty(disasterRelief)) {
  143. throw new ServiceException("请求参数不存在");
  144. }
  145. DisasterReliefVO disasterReliefVO = new DisasterReliefVO();
  146. BeanUtils.copyProperties(disasterRelief, disasterReliefVO);
  147. // 联表查询补充村民信息
  148. Integer personId = disasterRelief.getPersonId();
  149. if (personId != null && personId > 0) {
  150. PersonInfo personInfo = personInfoService.getById(personId);
  151. if (personInfo != null) {
  152. // 设置村民姓名
  153. disasterReliefVO.setName(personInfo.getRealname());
  154. // 设置村民身份证号
  155. //disasterReliefVO.setIdCard(personInfoService.decryptIdCard(personInfo.getIdCard()));
  156. disasterReliefVO.setIdCard(personInfo.getIdCard());
  157. // 设置村民联系方式
  158. disasterReliefVO.setPhone(personInfo.getPhone());
  159. }
  160. }
  161. return disasterReliefVO;
  162. }
  163. @Override
  164. public Page<DisasterReliefVO> getListDisasterReliefByPage(DisasterReliefQueryRequest disasterReliefQueryRequest) {
  165. // 获取分页参数
  166. long current = disasterReliefQueryRequest.getPageNum();
  167. long size = disasterReliefQueryRequest.getPageSize();
  168. // 查询数据
  169. Page<DisasterRelief> disasterReliefPage = this.page(new Page<>(current, size),
  170. getQueryWrapper(disasterReliefQueryRequest));
  171. // 创建结果分页对象
  172. Page<DisasterReliefVO> resultPage = new Page<>();
  173. BeanUtils.copyProperties(disasterReliefPage, resultPage, "records");
  174. // 处理每条记录,转换为VO对象并补充关联数据
  175. List<DisasterReliefVO> viewList = disasterReliefPage.getRecords().stream()
  176. .map(this::getDisasterReliefVO)
  177. .collect(Collectors.toList());
  178. resultPage.setRecords(viewList);
  179. return resultPage;
  180. }
  181. @Override
  182. public QueryWrapper<DisasterRelief> getQueryWrapper(DisasterReliefQueryRequest disasterReliefQueryRequest) {
  183. QueryWrapper<DisasterRelief> queryWrapper = new QueryWrapper<>();
  184. if (disasterReliefQueryRequest == null) {
  185. return queryWrapper;
  186. }
  187. // 从对象中取值
  188. Integer id = disasterReliefQueryRequest.getId();
  189. Integer personId = disasterReliefQueryRequest.getPersonId();
  190. String personName = disasterReliefQueryRequest.getPersonName();
  191. Date startDate = disasterReliefQueryRequest.getStartDate();
  192. Date endDate = disasterReliefQueryRequest.getEndDate();
  193. String location = disasterReliefQueryRequest.getLocation();
  194. String sortField = disasterReliefQueryRequest.getSortField();
  195. String sortOrder = disasterReliefQueryRequest.getSortOrder();
  196. // ID查询条件
  197. queryWrapper.eq(ObjectUtil.isNotEmpty(id), "id", id);
  198. // 村民ID查询条件
  199. queryWrapper.eq(ObjectUtil.isNotEmpty(personId), "person_id", personId);
  200. // 发生日期范围查询
  201. if (startDate != null) {
  202. queryWrapper.ge("date", startDate);
  203. }
  204. if (endDate != null) {
  205. queryWrapper.le("date", endDate);
  206. }
  207. // 如果有村民姓名查询条件,则需要联表查询
  208. if (StrUtil.isNotBlank(personName)) {
  209. // 通过子查询获取符合条件的村民ID
  210. String subQuery = "SELECT id FROM person_info WHERE realname LIKE '%" + personName + "%'";
  211. queryWrapper.inSql("person_id", subQuery);
  212. }
  213. // 排序
  214. queryWrapper.orderBy(StrUtil.isNotEmpty(sortField), "ascend".equals(sortOrder), sortField);
  215. return queryWrapper;
  216. }
  217. /**
  218. * 校验灾情共度数据
  219. *
  220. * @param disasterRelief 灾情共度记录
  221. * @param type 业务操作类型
  222. */
  223. public void validDisasterRelief(DisasterRelief disasterRelief, BusinessType type) {
  224. if (ObjectUtil.isEmpty(disasterRelief)) {
  225. throw new ServiceException("数据为空");
  226. }
  227. // 基础校验
  228. if (type != BusinessType.INSERT && ObjectUtil.isEmpty(disasterRelief.getId())) {
  229. throw new ServiceException("ID不能为空");
  230. }
  231. // 必填项校验
  232. if (ObjectUtil.isEmpty(disasterRelief.getPersonId())) {
  233. throw new ServiceException("村民ID不能为空");
  234. }
  235. if (ObjectUtil.isEmpty(disasterRelief.getDate())) {
  236. throw new ServiceException("发生日期不能为空");
  237. }
  238. if (StrUtil.isBlank(disasterRelief.getLocation())) {
  239. throw new ServiceException("发生地点不能为空");
  240. }
  241. }
  242. }