BaseService.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. package com.ruoyi.zzb.common.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.ruoyi.common.annotation.DataSource;
  4. import com.ruoyi.common.enums.DataSourceType;
  5. import com.ruoyi.common.utils.file.FileUploadUtils;
  6. import com.ruoyi.framework.config.ServerConfig;
  7. import com.ruoyi.zzb.common.domain.BaseFileInfo;
  8. import com.ruoyi.zzb.common.domain.BaseFileSetDTO;
  9. import com.ruoyi.zzb.common.mapper.BaseFileInfoMapper;
  10. import com.ruoyi.zzb.common.utils.CommonUtils;
  11. import com.ruoyi.zzb.dbjz.mapper.DbjzApplyInfoMapper;
  12. import com.ruoyi.zzb.hybz.mapper.HybzApplyInfoMapper;
  13. import com.ruoyi.zzb.zyww.domain.ZywwFileSetDTO;
  14. import com.ruoyi.zzb.zyww.mapper.ZywwApplyInfoMapper;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.mail.javamail.JavaMailSender;
  19. import org.springframework.mail.javamail.MimeMessageHelper;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.web.multipart.MultipartFile;
  23. import javax.mail.MessagingException;
  24. import javax.mail.internet.MimeMessage;
  25. import javax.mail.internet.MimeUtility;
  26. import java.io.File;
  27. import java.io.IOException;
  28. import java.io.UnsupportedEncodingException;
  29. import java.util.ArrayList;
  30. import java.util.Date;
  31. import java.util.List;
  32. import java.util.Objects;
  33. import java.util.concurrent.atomic.AtomicInteger;
  34. @Slf4j
  35. @Service
  36. @DataSource(value = DataSourceType.SLAVE)
  37. public class BaseService {
  38. @Autowired
  39. private BaseFileInfoMapper baseFileInfoMapper;
  40. @Autowired
  41. private ServerConfig serverConfig;
  42. @Autowired
  43. private JavaMailSender mailSender;
  44. @Value("${spring.mail.username}")
  45. private String from;
  46. @Autowired
  47. private ZywwApplyInfoMapper zywwApplyInfoMapper;
  48. @Autowired
  49. private DbjzApplyInfoMapper dbjzApplyInfoMapper;
  50. @Autowired
  51. private HybzApplyInfoMapper hybzApplyInfoMapper;
  52. /**
  53. * 发送一条带附件的邮件消息
  54. * @param to
  55. * @param subject
  56. * @param text
  57. * @param attachmentPath
  58. * @param files
  59. * @throws MessagingException
  60. * @throws UnsupportedEncodingException
  61. */
  62. public void sendEmail(String to, String subject, String text, String attachmentPath, File[] files) throws MessagingException, UnsupportedEncodingException {
  63. MimeMessage message = mailSender.createMimeMessage();
  64. //解决附件文件名称过长乱码问题
  65. System.setProperty("mail.mime.splitlongparameters", "false");
  66. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  67. helper.setFrom(from);
  68. helper.setTo(to);
  69. helper.setSubject(subject);
  70. helper.setText(text);
  71. // 添加附件(多个)
  72. if(files != null && files.length > 0) {
  73. for (File file : files) {
  74. helper.addAttachment(MimeUtility.encodeWord(file.getName(), "utf-8", "B"), file);
  75. }
  76. }
  77. /*FileSystemResource file = new FileSystemResource(new File(attachmentPath));
  78. // 添加附件(单个)
  79. helper.addAttachment(file.getFilename(), file);*/
  80. mailSender.send(message);
  81. }
  82. /**
  83. * 根据申请单ID 删除与之关联的文件信息记录
  84. * @param applyFormId
  85. * @return
  86. */
  87. @Transactional
  88. public boolean delBaseFileInfosByApplyFormId(String applyFormId){
  89. QueryWrapper<BaseFileInfo> queryWrapper = new QueryWrapper<>();
  90. queryWrapper.eq("APPLY_FORM_ID", applyFormId);
  91. int delRows = baseFileInfoMapper.delete(queryWrapper);
  92. if(delRows > 0){
  93. log.info("当前申请信息关联的文件信息删除成功 申请单ID:{},删除的数据条数:{}", applyFormId, delRows);
  94. return true;
  95. } else {
  96. throw new RuntimeException("数据库申请信息对应的文件信息记录未删除或不存在 申请单ID:" + applyFormId);
  97. }
  98. }
  99. /**
  100. * 根据文件存储ID删除对应的文件信息记录
  101. * @param fileStorageId
  102. * @return
  103. */
  104. @Transactional
  105. public boolean delBaseFileInfosByFileStorageId(String fileStorageId){
  106. QueryWrapper<BaseFileInfo> queryWrapper = new QueryWrapper<>();
  107. queryWrapper.eq("FILE_STORAGE_ID", fileStorageId);
  108. int delRows = baseFileInfoMapper.delete(queryWrapper);
  109. if(delRows > 0){
  110. log.info("文件信息删除成功 文件存储ID:{},删除的数据条数:{}", fileStorageId, delRows);
  111. return true;
  112. } else {
  113. throw new RuntimeException("数据库文件信息记录未删除或不存在 文件存储ID:" + fileStorageId);
  114. }
  115. }
  116. /**
  117. * 功能描述: 业务模块处理文件上传并构建文件信息参数对象通用方法
  118. * @param: [baseFileSetDTO, moduleCode, moduleName, applyFormId, fileStoragePath]
  119. * @return: java.util.List<com.ruoyi.zzb.common.domain.BaseFileInfo>
  120. * @author: peifjFantasy
  121. * @Date: 2024/12/4 15:08
  122. */
  123. public List<BaseFileInfo> processUploadAndBuildParams(BaseFileSetDTO baseFileSetDTO, String moduleCode, String moduleName, String applyFormId, String fileStoragePath) throws IOException {
  124. List<BaseFileInfo> dataList = new ArrayList<>();
  125. if("zyww".equals(moduleCode)){ // 住院慰问
  126. MultipartFile[] zywwsqbFiles = baseFileSetDTO.getZywwsqbFiles();
  127. List<BaseFileInfo> zywwsqbRowDataList = doProcessUploadAndBuildParams(zywwsqbFiles, moduleCode, moduleName, applyFormId, "住院慰问申请表", "zywwsqb", fileStoragePath);
  128. if(zywwsqbRowDataList.size() > 0){
  129. dataList.addAll(zywwsqbRowDataList);
  130. }
  131. MultipartFile[] zywwjhzsqbFiles = baseFileSetDTO.getZywwjhzsqbFiles();
  132. List<BaseFileInfo> zywwjhzsqbRowDataList = doProcessUploadAndBuildParams(zywwjhzsqbFiles, moduleCode, moduleName, applyFormId, "住院慰问金汇总申请表", "zywwjhzsqb", fileStoragePath);
  133. if(zywwjhzsqbRowDataList.size() > 0){
  134. dataList.addAll(zywwjhzsqbRowDataList);
  135. }
  136. MultipartFile[] jcghwwjsbbFiles = baseFileSetDTO.getJcghwwjsbbFiles();
  137. List<BaseFileInfo> jcghwwjsbbRowDataList = doProcessUploadAndBuildParams(jcghwwjsbbFiles, moduleCode, moduleName, applyFormId, "基层工会慰问金申报表", "jcghwwjsbb", fileStoragePath);
  138. if(jcghwwjsbbRowDataList.size() > 0){
  139. dataList.addAll(jcghwwjsbbRowDataList);
  140. }
  141. MultipartFile[] zzzmFiles = baseFileSetDTO.getZzzmFiles();
  142. List<BaseFileInfo> zzzmRowDataList = doProcessUploadAndBuildParams(zzzmFiles, moduleCode, moduleName, applyFormId, "在职证明", "zzzm", fileStoragePath);
  143. if(zzzmRowDataList.size() > 0){
  144. dataList.addAll(zzzmRowDataList);
  145. }
  146. MultipartFile[] gsFiles = baseFileSetDTO.getGsFiles();
  147. List<BaseFileInfo> gsRowDataList = doProcessUploadAndBuildParams(gsFiles, moduleCode, moduleName, applyFormId, "公示", "gs", fileStoragePath);
  148. if(gsRowDataList.size() > 0){
  149. dataList.addAll(gsRowDataList);
  150. }
  151. MultipartFile[] ghhykfyjFiles = baseFileSetDTO.getGhhykfyjFiles();
  152. List<BaseFileInfo> ghhykfyjRowDataList = doProcessUploadAndBuildParams(ghhykfyjFiles, moduleCode, moduleName, applyFormId, "工会会员卡复印件", "ghhykfyj", fileStoragePath);
  153. if(ghhykfyjRowDataList.size() > 0){
  154. dataList.addAll(ghhykfyjRowDataList);
  155. }
  156. MultipartFile[] zybasyfyjFiles = baseFileSetDTO.getZybasyfyjFiles();
  157. List<BaseFileInfo> zybasyfyjRowDataList = doProcessUploadAndBuildParams(zybasyfyjFiles, moduleCode, moduleName, applyFormId, "住院病案首页复印件", "zybasyfyj", fileStoragePath);
  158. if(zybasyfyjRowDataList.size() > 0){
  159. dataList.addAll(zybasyfyjRowDataList);
  160. }
  161. MultipartFile[] zdzmfyjFiles = baseFileSetDTO.getZdzmfyjFiles();
  162. List<BaseFileInfo> zdzmfyjRowDataList = doProcessUploadAndBuildParams(zdzmfyjFiles, moduleCode, moduleName, applyFormId, "诊断证明复印件", "zdzmfyj", fileStoragePath);
  163. if(zdzmfyjRowDataList.size() > 0){
  164. dataList.addAll(zdzmfyjRowDataList);
  165. }
  166. MultipartFile[] gszmFiles = baseFileSetDTO.getGszmFiles();
  167. List<BaseFileInfo> gszmRowDataList = doProcessUploadAndBuildParams(gszmFiles, moduleCode, moduleName, applyFormId, "工伤证明", "gszm", fileStoragePath);
  168. if(gszmRowDataList.size() > 0){
  169. dataList.addAll(gszmRowDataList);
  170. }
  171. MultipartFile[] ssjlFiles = baseFileSetDTO.getSsjlFiles();
  172. List<BaseFileInfo> ssjlRowDataList = doProcessUploadAndBuildParams(ssjlFiles, moduleCode, moduleName, applyFormId, "手术记录", "ssjl", fileStoragePath);
  173. if(ssjlRowDataList.size() > 0){
  174. dataList.addAll(ssjlRowDataList);
  175. }
  176. } else if("dbjz".equals(moduleCode)){ // 大病救助
  177. MultipartFile[] dbjzsqbFiles = baseFileSetDTO.getDbjzsqbFiles();
  178. List<BaseFileInfo> dbjzsqbRowDataList = doProcessUploadAndBuildParams(dbjzsqbFiles, moduleCode, moduleName, applyFormId, "大病救助申请表", "dbjzsqb", fileStoragePath);
  179. if(dbjzsqbRowDataList.size() > 0){
  180. dataList.addAll(dbjzsqbRowDataList);
  181. }
  182. MultipartFile[] dbjlqzmFiles = baseFileSetDTO.getDbjlqzmFiles();
  183. List<BaseFileInfo> dbjlqzmRowDataList = doProcessUploadAndBuildParams(dbjlqzmFiles, moduleCode, moduleName, applyFormId, "低保金领取证明", "dbjlqzm", fileStoragePath);
  184. if(dbjlqzmRowDataList.size() > 0){
  185. dataList.addAll(dbjlqzmRowDataList);
  186. }
  187. MultipartFile[] yyfyjnmxzmFiles = baseFileSetDTO.getYyfyjnmxzmFiles();
  188. List<BaseFileInfo> yyfyjnmxzmRowDataList = doProcessUploadAndBuildParams(yyfyjnmxzmFiles, moduleCode, moduleName, applyFormId, "医药费用缴纳明细证明", "yyfyjnmxzm", fileStoragePath);
  189. if(yyfyjnmxzmRowDataList.size() > 0){
  190. dataList.addAll(yyfyjnmxzmRowDataList);
  191. }
  192. MultipartFile[] zdzmfyjFiles = baseFileSetDTO.getZdzmfyjFiles();
  193. List<BaseFileInfo> zdzmfyjRowDataList = doProcessUploadAndBuildParams(zdzmfyjFiles, moduleCode, moduleName, applyFormId, "诊断证明复印件", "zdzmfyj", fileStoragePath);
  194. if(zdzmfyjRowDataList.size() > 0){
  195. dataList.addAll(zdzmfyjRowDataList);
  196. }
  197. MultipartFile[] basyfyjFiles = baseFileSetDTO.getBasyfyjFiles();
  198. List<BaseFileInfo> basyfyjRowDataList = doProcessUploadAndBuildParams(basyfyjFiles, moduleCode, moduleName, applyFormId, "病案首页复印件", "basyfyj", fileStoragePath);
  199. if(basyfyjRowDataList.size() > 0){
  200. dataList.addAll(basyfyjRowDataList);
  201. }
  202. MultipartFile[] ryjlfyjFiles = baseFileSetDTO.getRyjlfyjFiles();
  203. List<BaseFileInfo> ryjlfyjRowDataList = doProcessUploadAndBuildParams(ryjlfyjFiles, moduleCode, moduleName, applyFormId, "入院记录复印件", "ryjlfyj", fileStoragePath);
  204. if(ryjlfyjRowDataList.size() > 0){
  205. dataList.addAll(ryjlfyjRowDataList);
  206. }
  207. MultipartFile[] cyjlfyjFiles = baseFileSetDTO.getCyjlfyjFiles();
  208. List<BaseFileInfo> cyjlfyjRowDataList = doProcessUploadAndBuildParams(cyjlfyjFiles, moduleCode, moduleName, applyFormId, "出院记录复印件", "cyjlfyj", fileStoragePath);
  209. if(cyjlfyjRowDataList.size() > 0){
  210. dataList.addAll(cyjlfyjRowDataList);
  211. }
  212. MultipartFile[] gsFiles = baseFileSetDTO.getGsFiles();
  213. List<BaseFileInfo> gsRowDataList = doProcessUploadAndBuildParams(gsFiles, moduleCode, moduleName, applyFormId, "公示", "gs", fileStoragePath);
  214. if(gsRowDataList.size() > 0){
  215. dataList.addAll(gsRowDataList);
  216. }
  217. } else { // 会员保障
  218. MultipartFile[] ckhyspbFiles = baseFileSetDTO.getCkhyspbFiles();
  219. List<BaseFileInfo> ckhyspbRowDataList = doProcessUploadAndBuildParams(ckhyspbFiles, moduleCode, moduleName, applyFormId, "持卡会员审批表", "ckhyspb", fileStoragePath);
  220. if (ckhyspbRowDataList.size() > 0) {
  221. dataList.addAll(ckhyspbRowDataList);
  222. }
  223. MultipartFile[] hykfyjFiles = baseFileSetDTO.getHykfyjFiles();
  224. List<BaseFileInfo> hykfyjRowDataList = doProcessUploadAndBuildParams(hykfyjFiles, moduleCode, moduleName, applyFormId, "会员卡复印件", "hykfyj", fileStoragePath);
  225. if (hykfyjRowDataList.size() > 0) {
  226. dataList.addAll(hykfyjRowDataList);
  227. }
  228. MultipartFile[] zdzmyjFiles = baseFileSetDTO.getZdzmyjFiles();
  229. List<BaseFileInfo> zdzmyjRowDataList = doProcessUploadAndBuildParams(zdzmyjFiles, moduleCode, moduleName, applyFormId, "诊断证明原件", "zdzmyj", fileStoragePath);
  230. if (zdzmyjRowDataList.size() > 0) {
  231. dataList.addAll(zdzmyjRowDataList);
  232. }
  233. MultipartFile[] basyfyjFiles = baseFileSetDTO.getBasyfyjFiles();
  234. List<BaseFileInfo> basyfyjRowDataList = doProcessUploadAndBuildParams(basyfyjFiles, moduleCode, moduleName, applyFormId, "病案首页复印件", "basyfyj", fileStoragePath);
  235. if (basyfyjRowDataList.size() > 0) {
  236. dataList.addAll(basyfyjRowDataList);
  237. }
  238. MultipartFile[] ryjlfyjFiles = baseFileSetDTO.getRyjlfyjFiles();
  239. List<BaseFileInfo> ryjlfyjRowDataList = doProcessUploadAndBuildParams(ryjlfyjFiles, moduleCode, moduleName, applyFormId, "入院记录复印件", "ryjlfyj", fileStoragePath);
  240. if (ryjlfyjRowDataList.size() > 0) {
  241. dataList.addAll(ryjlfyjRowDataList);
  242. }
  243. MultipartFile[] ssjlfyjFiles = baseFileSetDTO.getSsjlfyjFiles();
  244. List<BaseFileInfo> ssjlfyjRowDataList = doProcessUploadAndBuildParams(ssjlfyjFiles, moduleCode, moduleName, applyFormId, "手术记录复印件", "ssjlfyj", fileStoragePath);
  245. if (ssjlfyjRowDataList.size() > 0) {
  246. dataList.addAll(ssjlfyjRowDataList);
  247. }
  248. MultipartFile[] cyjlfyjFiles = baseFileSetDTO.getCyjlfyjFiles();
  249. List<BaseFileInfo> cyjlfyjRowDataList = doProcessUploadAndBuildParams(cyjlfyjFiles, moduleCode, moduleName, applyFormId, "出院记录复印件", "cyjlfyj", fileStoragePath);
  250. if (cyjlfyjRowDataList.size() > 0) {
  251. dataList.addAll(cyjlfyjRowDataList);
  252. }
  253. MultipartFile[] blbgfyjFiles = baseFileSetDTO.getBlbgfyjFiles();
  254. List<BaseFileInfo> blbgfyjRowDataList = doProcessUploadAndBuildParams(blbgfyjFiles, moduleCode, moduleName, applyFormId, "病理报告复印件", "blbgfyj", fileStoragePath);
  255. if (blbgfyjRowDataList.size() > 0) {
  256. dataList.addAll(blbgfyjRowDataList);
  257. }
  258. MultipartFile[] jcbgfyjFiles = baseFileSetDTO.getJcbgfyjFiles();
  259. List<BaseFileInfo> jcbgfyjRowDataList = doProcessUploadAndBuildParams(jcbgfyjFiles, moduleCode, moduleName, applyFormId, "检查报告复印件", "jcbgfyj", fileStoragePath);
  260. if (jcbgfyjRowDataList.size() > 0) {
  261. dataList.addAll(jcbgfyjRowDataList);
  262. }
  263. }
  264. MultipartFile[] sfzfyjFiles = baseFileSetDTO.getSfzfyjFiles();
  265. List<BaseFileInfo> sfzfyjRowDataList = doProcessUploadAndBuildParams(sfzfyjFiles, moduleCode, moduleName, applyFormId, "身份证复印件", "sfzfyj", fileStoragePath);
  266. if(sfzfyjRowDataList.size() > 0){
  267. dataList.addAll(sfzfyjRowDataList);
  268. }
  269. return dataList;
  270. }
  271. /**
  272. * 统一处理业务模块文件上传,并构造对应数据对象
  273. * @param files
  274. * @param moduleCode
  275. * @param moduleName
  276. * @param applyFormId
  277. * @param fileTypeName
  278. * @param fileTypeCode
  279. * @param fileStoragePath
  280. * @return
  281. * @throws IOException
  282. */
  283. public List<BaseFileInfo> doProcessUploadAndBuildParams(MultipartFile[] files, String moduleCode, String moduleName, String applyFormId, String fileTypeName, String fileTypeCode, String fileStoragePath) throws IOException {
  284. List<BaseFileInfo> rowDataList = new ArrayList<>();
  285. if(null != files && files.length > 0){
  286. AtomicInteger fileOrder = new AtomicInteger(0);
  287. for (MultipartFile file : files) {
  288. if (!file.isEmpty()) {
  289. // 原始文件名
  290. String originalFilename = file.getOriginalFilename();
  291. // 文件扩展名
  292. String fileExtensions = CommonUtils.getFileExtension(originalFilename);
  293. // 文件存储ID(MD5值)
  294. String fileStorageId = CommonUtils.md5(originalFilename + new Date().getTime());
  295. // 上传文件,并返回新的文件名称
  296. String newFileName = FileUploadUtils.upload(fileStoragePath, file);
  297. log.info("【{}】文件上传成功 申请单ID:{},文件类型名称:{},文件名称:{}", moduleName, applyFormId, fileTypeName, originalFilename);
  298. // 文件HTTP请求路径
  299. String fileRequestPath = serverConfig.getUrl() + newFileName;
  300. BaseFileInfo baseFileInfo = new BaseFileInfo();
  301. baseFileInfo.setModuleCode(moduleCode);
  302. baseFileInfo.setApplyFormId(applyFormId);
  303. baseFileInfo.setFileTypeName(fileTypeName);
  304. baseFileInfo.setFileTypeCode(fileTypeCode);
  305. baseFileInfo.setFileOrder(fileOrder.incrementAndGet());
  306. baseFileInfo.setFileOriginalName(originalFilename);
  307. baseFileInfo.setFileExtensions(fileExtensions);
  308. baseFileInfo.setFileStorageId(fileStorageId);
  309. baseFileInfo.setFileRequestPath(fileRequestPath);
  310. baseFileInfo.setFileStoragePath(fileStoragePath);
  311. baseFileInfo.setIsDelete(0);
  312. rowDataList.add(baseFileInfo);
  313. }
  314. }
  315. }
  316. return rowDataList;
  317. }
  318. /**
  319. * 根据模块编码、申请单ID获取对应的申请信息记录
  320. * @param moduleCode
  321. * @param applyFormId
  322. * @return
  323. */
  324. public Object getDataByApplyFormId(String moduleCode, String applyFormId){
  325. if("zyww".equals(moduleCode)){
  326. return zywwApplyInfoMapper.selectById(applyFormId);
  327. }else if("dbjz".equals(moduleCode)){
  328. return dbjzApplyInfoMapper.selectById(applyFormId);
  329. }else {
  330. return hybzApplyInfoMapper.selectById(applyFormId);
  331. }
  332. }
  333. /**
  334. * 功能描述: 保存一条文件信息记录
  335. * @param: [baseFileInfo]
  336. * @return: boolean
  337. * @author: peifjFantasy
  338. * @Date: 2024/11/28 14:42
  339. */
  340. public boolean saveBaseFileInfo(BaseFileInfo baseFileInfo){
  341. if(baseFileInfo != null){
  342. int insertRows = baseFileInfoMapper.insert(baseFileInfo);
  343. return insertRows > 0? true : false;
  344. }
  345. return false;
  346. }
  347. }