package com.ruoyi.zzb.zyww.service; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.framework.config.ServerConfig; import com.ruoyi.zzb.common.CommonUtils; import com.ruoyi.zzb.zyww.domain.BaseFileInfo; import com.ruoyi.zzb.zyww.domain.Zyww; import com.ruoyi.zzb.zyww.domain.ZywwFileDTO; import com.ruoyi.zzb.zyww.mapper.BaseFileInfoMapper; import com.ruoyi.zzb.zyww.mapper.ZywwMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @Service @DataSource(value = DataSourceType.SLAVE) public class ZywwService { @Autowired private ZywwMapper zywwMapper; @Autowired private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; @Autowired private ServerConfig serverConfig; @Autowired private BaseFileInfoMapper baseFileInfoMapper; /** * 发送一条带附件的邮件消息 * @param to * @param subject * @param text * @param attachmentPath * @throws MessagingException */ public void sendEmail(String to, String subject, String text, String attachmentPath) throws MessagingException { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(text); FileSystemResource file = new FileSystemResource(new File(attachmentPath)); // 添加附件 helper.addAttachment(file.getFilename(), file); mailSender.send(message); } /** * 完成【住院慰问】模块需进行文件上传字段项的上传处理逻辑,并组装批量插入这些记录到相关数据表的参数 * @param */ public List processUploadAndBuildParams(ZywwFileDTO zywwFileDTO, String moduleCode, String applyFormId, String fileStoragePath) throws IOException { List dataList = new ArrayList<>(); MultipartFile[] zywwsqbFiles = zywwFileDTO.getZywwsqbFiles(); List zywwsqbRowDataList = doProcessUploadAndBuildParams(zywwsqbFiles, moduleCode, applyFormId, "住院慰问申请表", "zywwsqb", fileStoragePath); if(zywwsqbRowDataList.size() > 0){ dataList.addAll(zywwsqbRowDataList); } MultipartFile[] zywwjhzsqbFiles = zywwFileDTO.getZywwjhzsqbFiles(); List zywwjhzsqbRowDataList = doProcessUploadAndBuildParams(zywwjhzsqbFiles, moduleCode, applyFormId, "住院慰问金汇总申请表", "zywwjhzsqb", fileStoragePath); if(zywwjhzsqbRowDataList.size() > 0){ dataList.addAll(zywwjhzsqbRowDataList); } MultipartFile[] jcghwwjsbbFiles = zywwFileDTO.getJcghwwjsbbFiles(); List jcghwwjsbbRowDataList = doProcessUploadAndBuildParams(jcghwwjsbbFiles, moduleCode, applyFormId, "基层工会慰问金申报表", "jcghwwjsbb", fileStoragePath); if(jcghwwjsbbRowDataList.size() > 0){ dataList.addAll(jcghwwjsbbRowDataList); } MultipartFile[] zzzmFiles = zywwFileDTO.getZzzmFiles(); List zzzmRowDataList = doProcessUploadAndBuildParams(zzzmFiles, moduleCode, applyFormId, "在职证明", "zzzm", fileStoragePath); if(zzzmRowDataList.size() > 0){ dataList.addAll(zzzmRowDataList); } MultipartFile[] gsFiles = zywwFileDTO.getGsFiles(); List gsRowDataList = doProcessUploadAndBuildParams(gsFiles, moduleCode, applyFormId, "公示", "gs", fileStoragePath); if(gsRowDataList.size() > 0){ dataList.addAll(gsRowDataList); } MultipartFile[] sfzfyjFiles = zywwFileDTO.getSfzfyjFiles(); List sfzfyjRowDataList = doProcessUploadAndBuildParams(sfzfyjFiles, moduleCode, applyFormId, "身份证复印件", "sfzfyj", fileStoragePath); if(sfzfyjRowDataList.size() > 0){ dataList.addAll(sfzfyjRowDataList); } MultipartFile[] ghhykfyjFiles = zywwFileDTO.getGhhykfyjFiles(); List ghhykfyjRowDataList = doProcessUploadAndBuildParams(ghhykfyjFiles, moduleCode, applyFormId, "工会会员卡复印件", "ghhykfyj", fileStoragePath); if(ghhykfyjRowDataList.size() > 0){ dataList.addAll(ghhykfyjRowDataList); } MultipartFile[] zybasyfyjFiles = zywwFileDTO.getZybasyfyjFiles(); List zybasyfyjRowDataList = doProcessUploadAndBuildParams(zybasyfyjFiles, moduleCode, applyFormId, "住院病案首页复印件", "zybasyfyj", fileStoragePath); if(zybasyfyjRowDataList.size() > 0){ dataList.addAll(zybasyfyjRowDataList); } MultipartFile[] zdzmfyjFiles = zywwFileDTO.getZdzmfyjFiles(); List zdzmfyjRowDataList = doProcessUploadAndBuildParams(zdzmfyjFiles, moduleCode, applyFormId, "诊断证明复印件", "zdzmfyj", fileStoragePath); if(zdzmfyjRowDataList.size() > 0){ dataList.addAll(zdzmfyjRowDataList); } MultipartFile[] gszmFiles = zywwFileDTO.getGszmFiles(); List gszmRowDataList = doProcessUploadAndBuildParams(gszmFiles, moduleCode, applyFormId, "工伤证明", "gszm", fileStoragePath); if(gszmRowDataList.size() > 0){ dataList.addAll(gszmRowDataList); } MultipartFile[] ssjlFiles = zywwFileDTO.getSsjlFiles(); List ssjlRowDataList = doProcessUploadAndBuildParams(ssjlFiles, moduleCode, applyFormId, "手术记录", "ssjl", fileStoragePath); if(ssjlRowDataList.size() > 0){ dataList.addAll(ssjlRowDataList); } return dataList; } public List doProcessUploadAndBuildParams(MultipartFile[] files, String moduleCode, String applyFormId, String fileTypeName, String fileTypeCode, String fileStoragePath) throws IOException { List rowDataList = new ArrayList<>(); if(null != files && files.length > 0){ for (MultipartFile file : files) { if (!file.isEmpty()) { // 原始文件名 String originalFilename = file.getOriginalFilename(); // 文件扩展名 String fileExtensions = CommonUtils.getFileExtension(originalFilename); // 文件存储ID(MD5值) String fileStorageId = CommonUtils.md5(originalFilename + new Date().getTime()); // 上传文件并返回新文件名称 String newFileName = FileUploadUtils.upload(fileStoragePath, file); // 文件访问路径 String fileRequestPath = serverConfig.getUrl() + newFileName; BaseFileInfo baseFileInfo = new BaseFileInfo(); baseFileInfo.setModuleCode(moduleCode); baseFileInfo.setApplyFormId(applyFormId); baseFileInfo.setFileTypeName(fileTypeName); baseFileInfo.setFileTypeCode(fileTypeCode); baseFileInfo.setFileOriginalName(originalFilename); baseFileInfo.setFileExtensions(fileExtensions); baseFileInfo.setFileStorageId(fileStorageId); baseFileInfo.setFileRequestPath(fileRequestPath); baseFileInfo.setFileStoragePath(fileStoragePath); rowDataList.add(baseFileInfo); } } } return rowDataList; } /** * 保存一条【住院慰问】申请信息并且批量插入与【住院慰问】申请信息相关联的文件信息 * @return */ @Transactional public void saveZywwApplyInfoAndBaseFileInfos(Zyww zyww, SysUser user, String applyFormId, List baseFileInfoList){ // 设置当前登录的用户信息 zyww.setCreateUserId(String.valueOf(user.getUserId())); zyww.setCreateUserName(user.getNickName()); zyww.setCreateUserPoliceNo(user.getRemark()); // 插入申请信息 zyww.setApplyFormId(applyFormId); int rows = zywwMapper.insert(zyww); if(rows > 0){ log.info("【住院慰问】申请信息保存成功"); // 批量插入和申请信息关联的文件信息 baseFileInfoMapper.batchInsertBaseFileInfos(baseFileInfoList); log.info("【住院慰问】文件信息批量保存成功 applyFormId:{}", applyFormId); } } /** * 根据applyFormId 删除一条【住院慰问】申请信息和与之关联的文件信息 * @param applyFormId * @return */ @Transactional public boolean delZywwApplyInfoAndBaseFileInfos(String applyFormId){ int rows = zywwMapper.deleteById(applyFormId); if(rows > 0){ log.info("【住院慰问】申请信息删除成功 applyFormId:{}", applyFormId); int baseFileInfoRows = baseFileInfoMapper.deleteById(applyFormId); if(baseFileInfoRows > 0){ log.info("【住院慰问】申请信息关联的文件信息删除成功 applyFormId:{},删除的数据条数:{}", applyFormId, baseFileInfoRows); return true; } } return false; } }