DbjzService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. package com.ruoyi.zzb.dbjz.service;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.ruoyi.common.annotation.DataSource;
  7. import com.ruoyi.common.core.domain.entity.SysUser;
  8. import com.ruoyi.common.enums.DataSourceType;
  9. import com.ruoyi.common.utils.SecurityUtils;
  10. import com.ruoyi.zzb.common.domain.BaseApproveInfo;
  11. import com.ruoyi.zzb.common.domain.BaseFileInfo;
  12. import com.ruoyi.zzb.common.mapper.BaseApproveInfoMapper;
  13. import com.ruoyi.zzb.common.mapper.BaseFileInfoMapper;
  14. import com.ruoyi.zzb.common.service.BaseService;
  15. import com.ruoyi.zzb.dbjz.domain.DbjzApplyInfo;
  16. import com.ruoyi.zzb.dbjz.domain.DbjzFileSetDTO;
  17. import com.ruoyi.zzb.dbjz.mapper.DbjzApplyInfoMapper;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import org.springframework.web.multipart.MultipartFile;
  24. import java.io.IOException;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. @Slf4j
  28. @Service
  29. @DataSource(value = DataSourceType.SLAVE)
  30. public class DbjzService {
  31. @Autowired
  32. private DbjzApplyInfoMapper dbjzApplyInfoMapper;
  33. @Autowired
  34. private BaseFileInfoMapper baseFileInfoMapper;
  35. @Autowired
  36. private BaseApproveInfoMapper baseApproveInfoMapper;
  37. @Autowired
  38. private BaseService baseService;
  39. /**
  40. * 完成【大病救助】模块需进行文件上传字段项的上传处理逻辑,并组装批量插入这些记录到相关数据表的参数
  41. * @param
  42. */
  43. public List<BaseFileInfo> processUploadAndBuildParams(DbjzFileSetDTO dbjzFileSetDTO, String moduleCode, String moduleName, String applyFormId, String fileStoragePath) throws IOException {
  44. List<BaseFileInfo> dataList = new ArrayList<>();
  45. MultipartFile[] dbjzsqbFiles = dbjzFileSetDTO.getDbjzsqbFiles();
  46. List<BaseFileInfo> dbjzsqbRowDataList = baseService.doProcessUploadAndBuildParams(dbjzsqbFiles, moduleCode, moduleName, applyFormId, "大病救助申请表", "dbjzsqb", fileStoragePath);
  47. if(dbjzsqbRowDataList.size() > 0){
  48. dataList.addAll(dbjzsqbRowDataList);
  49. }
  50. MultipartFile[] dbjlqzmFiles = dbjzFileSetDTO.getDbjlqzmFiles();
  51. List<BaseFileInfo> dbjlqzmRowDataList = baseService.doProcessUploadAndBuildParams(dbjlqzmFiles, moduleCode, moduleName, applyFormId, "低保金领取证明", "dbjlqzm", fileStoragePath);
  52. if(dbjlqzmRowDataList.size() > 0){
  53. dataList.addAll(dbjlqzmRowDataList);
  54. }
  55. MultipartFile[] yyfyjnmxzmFiles = dbjzFileSetDTO.getYyfyjnmxzmFiles();
  56. List<BaseFileInfo> yyfyjnmxzmRowDataList = baseService.doProcessUploadAndBuildParams(yyfyjnmxzmFiles, moduleCode, moduleName, applyFormId, "医药费用缴纳明细证明", "yyfyjnmxzm", fileStoragePath);
  57. if(yyfyjnmxzmRowDataList.size() > 0){
  58. dataList.addAll(yyfyjnmxzmRowDataList);
  59. }
  60. MultipartFile[] zdzmfyjFiles = dbjzFileSetDTO.getZdzmfyjFiles();
  61. List<BaseFileInfo> zdzmfyjRowDataList = baseService.doProcessUploadAndBuildParams(zdzmfyjFiles, moduleCode, moduleName, applyFormId, "诊断证明复印件", "zdzmfyj", fileStoragePath);
  62. if(zdzmfyjRowDataList.size() > 0){
  63. dataList.addAll(zdzmfyjRowDataList);
  64. }
  65. MultipartFile[] basyfyjFiles = dbjzFileSetDTO.getBasyfyjFiles();
  66. List<BaseFileInfo> basyfyjRowDataList = baseService.doProcessUploadAndBuildParams(basyfyjFiles, moduleCode, moduleName, applyFormId, "病案首页复印件", "basyfyj", fileStoragePath);
  67. if(basyfyjRowDataList.size() > 0){
  68. dataList.addAll(basyfyjRowDataList);
  69. }
  70. MultipartFile[] sfzfyjFiles = dbjzFileSetDTO.getSfzfyjFiles();
  71. List<BaseFileInfo> sfzfyjRowDataList = baseService.doProcessUploadAndBuildParams(sfzfyjFiles, moduleCode, moduleName, applyFormId, "身份证复印件", "sfzfyj", fileStoragePath);
  72. if(sfzfyjRowDataList.size() > 0){
  73. dataList.addAll(sfzfyjRowDataList);
  74. }
  75. MultipartFile[] ryjlfyjFiles = dbjzFileSetDTO.getRyjlfyjFiles();
  76. List<BaseFileInfo> ryjlfyjRowDataList = baseService.doProcessUploadAndBuildParams(ryjlfyjFiles, moduleCode, moduleName, applyFormId, "入院记录复印件", "ryjlfyj", fileStoragePath);
  77. if(ryjlfyjRowDataList.size() > 0){
  78. dataList.addAll(ryjlfyjRowDataList);
  79. }
  80. MultipartFile[] cyjlfyjFiles = dbjzFileSetDTO.getCyjlfyjFiles();
  81. List<BaseFileInfo> cyjlfyjRowDataList = baseService.doProcessUploadAndBuildParams(cyjlfyjFiles, moduleCode, moduleName, applyFormId, "出院记录复印件", "cyjlfyj", fileStoragePath);
  82. if(cyjlfyjRowDataList.size() > 0){
  83. dataList.addAll(cyjlfyjRowDataList);
  84. }
  85. MultipartFile[] gsFiles = dbjzFileSetDTO.getGsFiles();
  86. List<BaseFileInfo> gsRowDataList = baseService.doProcessUploadAndBuildParams(gsFiles, moduleCode, moduleName, applyFormId, "公示", "gs", fileStoragePath);
  87. if(gsRowDataList.size() > 0){
  88. dataList.addAll(gsRowDataList);
  89. }
  90. return dataList;
  91. }
  92. /**
  93. * 保存/修改一条【大病救助】申请信息并且批量插入/修改与【大病救助】申请信息相关联的文件信息
  94. * @return
  95. */
  96. @Transactional
  97. public void saveOrUpdateDbjzApplyInfoAndBaseFileInfos(DbjzApplyInfo dbjzApplyInfo, SysUser user, String applyFormId, List<BaseFileInfo> baseFileInfoList){
  98. // 如果当前申请信息对象dbjzApplyInfo的申请单ID为空,代表是新增操作
  99. if(StringUtils.isBlank(dbjzApplyInfo.getApplyFormId())){
  100. dbjzApplyInfo.setCreateUserId(String.valueOf(user.getUserId()));
  101. dbjzApplyInfo.setCreateUserName(user.getNickName());
  102. dbjzApplyInfo.setCreateUserPoliceNo(user.getPoliceNo());
  103. dbjzApplyInfo.setApplyFormId(applyFormId);
  104. int insertRows = dbjzApplyInfoMapper.insert(dbjzApplyInfo);
  105. if(insertRows > 0){
  106. // 批量插入和申请信息关联的文件信息
  107. baseFileInfoMapper.batchInsertBaseFileInfos(baseFileInfoList);
  108. log.info("【大病救助】申请信息、文件信息均保存成功 申请单ID:{}", applyFormId);
  109. } else {
  110. throw new RuntimeException("数据库【大病救助】申请信息记录未插入 申请单ID:" + applyFormId);
  111. }
  112. } else { // 修改操作
  113. // 根据申请单ID和dbjzApplyInfo对象中的当前属性值去修改当前申请记录
  114. String applyFormIdExist = dbjzApplyInfo.getApplyFormId();
  115. UpdateWrapper<DbjzApplyInfo> updateWrapper = new UpdateWrapper<>();
  116. updateWrapper.eq("APPLY_FORM_ID", applyFormIdExist);
  117. int updateRows = dbjzApplyInfoMapper.update(dbjzApplyInfo, updateWrapper);
  118. if(updateRows > 0){
  119. // 批量修改和申请信息关联的文件信息
  120. // 1.先删除与当前申请记录相关联的全部原始文件记录
  121. baseService.delBaseFileInfosByApplyFormId(applyFormIdExist);
  122. // 2.再根据当前申请记录,批量插入新的文件记录,即可完成对文件信息的批量修改
  123. baseFileInfoMapper.batchInsertBaseFileInfos(baseFileInfoList);
  124. log.info("【大病救助】申请信息、文件信息均修改成功 申请单ID:{}", applyFormIdExist);
  125. } else {
  126. throw new RuntimeException("数据库【大病救助】申请信息记录未修改 申请单ID:" + applyFormIdExist);
  127. }
  128. }
  129. }
  130. /**
  131. * 审批一条【大病救助】申请信息,并插入一条审批记录
  132. * @return
  133. */
  134. @Transactional
  135. public boolean approveAndSaveApproveInfo(String applyFormId, String optFlag, SysUser user){
  136. // 审批一条【大病救助】申请信息
  137. UpdateWrapper<DbjzApplyInfo> updateWrapper = new UpdateWrapper<>();
  138. updateWrapper.eq("APPLY_FORM_ID", applyFormId);
  139. DbjzApplyInfo dbjzApplyInfoDTO = new DbjzApplyInfo();
  140. dbjzApplyInfoDTO.setApproveStatusCode(optFlag);
  141. String optDesc = "1".equals(optFlag)? "同意":"驳回";
  142. dbjzApplyInfoDTO.setApproveStatusName(optDesc);
  143. // dbjzApplyInfoDTO.setUpdateTime(new Date());
  144. int updateRows = dbjzApplyInfoMapper.update(dbjzApplyInfoDTO, updateWrapper);
  145. if(updateRows > 0){
  146. log.info("【大病救助】申请信息已审批 申请单ID:{},审批操作描述:{}", applyFormId, optDesc);
  147. // 插入一条审批记录
  148. BaseApproveInfo baseApproveInfo = new BaseApproveInfo();
  149. baseApproveInfo.setModuleCode("dbjz");
  150. baseApproveInfo.setApplyFormId(applyFormId);
  151. QueryWrapper<DbjzApplyInfo> queryWrapper = new QueryWrapper<>();
  152. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  153. DbjzApplyInfo dbjzApplyInfo = dbjzApplyInfoMapper.selectOne(queryWrapper);
  154. baseApproveInfo.setCreateUserId(dbjzApplyInfo.getCreateUserId());
  155. baseApproveInfo.setCreateUserName(dbjzApplyInfo.getCreateUserName());
  156. baseApproveInfo.setCreateUserPoliceNo(dbjzApplyInfo.getCreateUserPoliceNo());
  157. baseApproveInfo.setCreateTime(dbjzApplyInfo.getCreateTime());
  158. baseApproveInfo.setApproveUserId(String.valueOf(user.getUserId()));
  159. baseApproveInfo.setApproveUserName(user.getNickName());
  160. baseApproveInfo.setApproveUserPoliceNo(user.getPoliceNo());
  161. baseApproveInfo.setApproveResultCode(optFlag);
  162. baseApproveInfo.setApproveResultDesc(optDesc);
  163. int insertRows = baseApproveInfoMapper.insert(baseApproveInfo);
  164. if(insertRows > 0){
  165. log.info("【大病救助】审批信息保存成功 申请单ID:{},审批人警号:{},审批结果说明:{}", applyFormId, user.getPoliceNo(), optDesc);
  166. return true;
  167. }else {
  168. throw new RuntimeException("数据库【大病救助】审批信息记录未插入");
  169. }
  170. }else {
  171. throw new RuntimeException("数据库【大病救助】申请信息记录未更新或不存在");
  172. }
  173. }
  174. /**
  175. * 根据 审批状态 分页查询【大病救助】申请信息
  176. * @param
  177. * @return
  178. */
  179. public Page<DbjzApplyInfo> getDataByPage(Integer approveStatus, String type, JSONObject reqBody){
  180. Integer pageIndex = reqBody.getInteger("pageIndex") == null? 1:reqBody.getInteger("pageIndex");
  181. Integer pageSize = reqBody.getInteger("pageSize") == null? 10:reqBody.getInteger("pageSize");
  182. String applyFormId = reqBody.getString("applyFormId");
  183. // 构造查询条件,支持多条件查询
  184. QueryWrapper<DbjzApplyInfo> queryWrapper = new QueryWrapper<>();
  185. // 1.查询当前用户能看到的整个系统中的全量"待审批"的记录,暂不考虑用户所属具体部门的因素
  186. if (approveStatus != null && approveStatus == 0 && "approve".equals(type)){
  187. // 匹配列表中的一条,对"待审批"的申请信息做数据回显及提供审批功能
  188. if(StringUtils.isNotBlank(applyFormId)){
  189. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  190. }
  191. queryWrapper.eq("APPROVE_STATUS_CODE", 0);
  192. }
  193. // 2.查询当前用户提交的全量"审批中"的申请记录(包含待审批记录、审批驳回记录)
  194. SysUser user = SecurityUtils.getLoginUser().getUser();
  195. if (approveStatus != null && approveStatus == 3 && "apply".equals(type)){
  196. // 匹配列表中的一条,对"审批中"的申请信息做数据回显及提供修改功能
  197. if(StringUtils.isNotBlank(applyFormId)){
  198. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  199. }
  200. queryWrapper.eq("CREATE_USER_POLICE_NO", user.getPoliceNo());
  201. // 待审批和审批驳回(允许修改后继续提交)
  202. queryWrapper.and(qw -> qw.eq("APPROVE_STATUS_CODE", 0).or().eq("APPROVE_STATUS_CODE", 2));
  203. }
  204. // 3.查询当前用户提交的全量"已审批"的申请记录(只包含审批通过记录)
  205. if (approveStatus != null && approveStatus == 1 && "apply".equals(type)){
  206. // 匹配列表中的一条,对"已审批"的申请信息做数据回显
  207. if(StringUtils.isNotBlank(applyFormId)){
  208. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  209. }
  210. queryWrapper.eq("CREATE_USER_POLICE_NO", user.getPoliceNo());
  211. queryWrapper.eq("APPROVE_STATUS_CODE", 1);
  212. }
  213. queryWrapper.orderByDesc("CREATE_TIME");
  214. Page<DbjzApplyInfo> page = new Page<>(pageIndex, pageSize);
  215. return dbjzApplyInfoMapper.selectPage(page, queryWrapper);
  216. }
  217. /**
  218. * 保存/修改一条【大病救助】申请信息
  219. * @return
  220. */
  221. @Transactional
  222. public boolean saveOrUpdateDbjzApplyInfo(DbjzApplyInfo dbjzApplyInfo, SysUser user){
  223. String applyFormId = dbjzApplyInfo.getApplyFormId();
  224. QueryWrapper<DbjzApplyInfo> queryWrapper = new QueryWrapper<>();
  225. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  226. DbjzApplyInfo dbDbjzApplyInfo = dbjzApplyInfoMapper.selectOne(queryWrapper);
  227. // 如果当前申请信息对象dbjzApplyInfo的申请单ID在数据库中不存在(前端生成),代表是新增操作
  228. if(dbDbjzApplyInfo == null){
  229. // 设置当前登录的用户信息
  230. dbjzApplyInfo.setCreateUserId(String.valueOf(user.getUserId()));
  231. dbjzApplyInfo.setCreateUserName(user.getNickName());
  232. dbjzApplyInfo.setCreateUserPoliceNo(user.getPoliceNo());
  233. // 插入申请信息
  234. dbjzApplyInfo.setApplyFormId(applyFormId);
  235. int insertRows = dbjzApplyInfoMapper.insert(dbjzApplyInfo);
  236. if(insertRows > 0){
  237. log.info("【大病救助】申请信息保存成功 申请单ID:{}", applyFormId);
  238. return true;
  239. } else {
  240. throw new RuntimeException("数据库【大病救助】申请信息记录未插入 申请单ID:" + applyFormId);
  241. }
  242. } else { // 修改操作
  243. if("1".equals(dbDbjzApplyInfo.getApproveStatusCode())){
  244. throw new RuntimeException("数据库【大病救助】申请信息记录已通过审批,不支持修改 申请单ID:" + applyFormId);
  245. }
  246. // 根据申请单ID和dbjzApplyInfo对象中的当前属性值去修改当前申请记录
  247. UpdateWrapper<DbjzApplyInfo> updateWrapper = new UpdateWrapper<>();
  248. updateWrapper.eq("APPLY_FORM_ID", applyFormId);
  249. int updateRows = dbjzApplyInfoMapper.update(dbjzApplyInfo, updateWrapper);
  250. if(updateRows > 0){
  251. log.info("【大病救助】申请信息修改成功 申请单ID:{}", applyFormId);
  252. return true;
  253. } else {
  254. throw new RuntimeException("数据库【大病救助】申请信息记录未修改 申请单ID:" + applyFormId);
  255. }
  256. }
  257. }
  258. }