Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

lzu918 6 mēneši atpakaļ
vecāks
revīzija
7e955910f2

+ 6 - 0
pom.xml

@@ -38,6 +38,12 @@
     <dependencyManagement>
         <dependencies>
 
+            <!-- 邮件依赖 -->
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-starter-mail</artifactId>
+            </dependency>
+
             <dependency>
                 <groupId>com.baomidou</groupId>
                 <artifactId>mybatis-plus-boot-starter</artifactId>

+ 0 - 5
ruoyi-admin/pom.xml

@@ -74,11 +74,6 @@
             <version>11.2.0.3</version>
         </dependency>
 
-        <dependency>
-	        <groupId>com.oracle</groupId>
-	        <artifactId>ojdbc6</artifactId>
-	        <version>11.2.0.3</version>
-        </dependency>
 
     </dependencies>
 

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -7,7 +7,7 @@ ruoyi:
   # 版权年份
   copyrightYear: 2024
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/ruoyi/uploadPath
+  profile:
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数字计算 char 字符验证

+ 18 - 5
ruoyi-zzb/pom.xml

@@ -42,11 +42,24 @@
             <version>4.5.6</version>
         </dependency>
 
-   <dependency>
-      <groupId>com.alibaba</groupId>
-      <artifactId>fastjson</artifactId>
-      <version>1.2.31</version>
-    </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.31</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+
+
 
     </dependencies>
 

+ 75 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/common/CommonUtils.java

@@ -0,0 +1,75 @@
+package com.ruoyi.zzb.common;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+public class CommonUtils {
+
+    // 定义一个用于匹配邮箱地址的正则表达式
+    private static final String EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
+    // 编译正则表达式
+    private static final Pattern EMAIL_PATTERN = Pattern.compile(EMAIL_REGEX);
+
+    /**
+     * 校验邮箱地址是否合法
+     * @param email 要校验的邮箱地址
+     * @return 如果邮箱地址合法返回true,否则返回false
+     */
+    public static boolean isRightEmail(String email) {
+        if (StringUtils.isBlank(email)) {
+            return false;
+        }
+        Matcher matcher = EMAIL_PATTERN.matcher(email);
+        return matcher.matches();
+    }
+
+    /**
+     * 根据一个字符串内容计算出对应的MD5值
+     * @param value
+     * @return
+     */
+    public static String md5(String value){
+        try {
+            // 获取MD5算法实例
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            // 计算MD5哈希值
+            byte[] hashBytes = md.digest(value.getBytes());
+            // 将字节数组转换为十六进制字符串
+            StringBuilder hexString = new StringBuilder();
+            for (byte b : hashBytes) {
+                String hex = Integer.toHexString(0xff & b);
+                if (hex.length() == 1) hexString.append('0');
+                hexString.append(hex);
+            }
+            return hexString.toString();
+        } catch (NoSuchAlgorithmException e) {
+            log.error("MD5值生成失败", e);
+            return "";
+        }
+    }
+
+    /**
+     * 根据一个文件名称截取到对应的扩展名
+     * @param fileName
+     * @return
+     */
+    public static String getFileExtension(String fileName) {
+        if (fileName == null || fileName.isEmpty()) {
+            return "";
+        }
+        int dotIndex = fileName.lastIndexOf(".");
+        if (dotIndex == -1 || dotIndex == fileName.length() - 1) {
+            return "";
+        }
+        return fileName.substring(dotIndex + 1);
+    }
+
+
+
+}

+ 6 - 3
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zdcx/config/MyMetaObjectHandler.java → ruoyi-zzb/src/main/java/com/ruoyi/zzb/common/MyMetaObjectHandler.java

@@ -1,21 +1,24 @@
-package com.ruoyi.zzb.zdcx.config;
+package com.ruoyi.zzb.common;
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
-
 import java.util.Date;
 
 /**
- * mybatisplus自动填充
+ * mybatisplus 属性默认值自动填充配置
  */
 @Component
 public class MyMetaObjectHandler implements MetaObjectHandler {
     @Override
     public void insertFill(MetaObject metaObject) {
         this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
+        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
         this.strictInsertFill(metaObject, "isDelete", Integer.class, 0);
         this.strictInsertFill(metaObject, "flag", Integer.class, 1);
+        this.strictInsertFill(metaObject, "approveStatusCode", Integer.class, 0);
+        this.strictInsertFill(metaObject, "approveStatusName", String.class, "审核中");
+        this.strictInsertFill(metaObject, "fileOrder", Integer.class, 1);
     }
 
 

+ 50 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/common/SnowflakeIdGenerator.java

@@ -0,0 +1,50 @@
+package com.ruoyi.zzb.common;
+
+public class SnowflakeIdGenerator {
+
+    private final long epoch = 1288834974657L; // 自定义的起始时间戳
+    private final long machineIdBits = 5L; // 机器ID位数
+    private final long sequenceBits = 12L; // 序列号位数
+
+    private final long maxMachineId = -1L ^ (-1L << machineIdBits); // 最大机器ID
+    private final long sequenceMask = -1L ^ (-1L << sequenceBits); // 最大序列号
+
+    private long machineId; // 机器ID
+    private long sequence = 0L; // 当前序列号
+    private long lastTimestamp = -1L; // 上次时间戳
+
+    public SnowflakeIdGenerator(long machineId) {
+        if (machineId > maxMachineId || machineId < 0) {
+            throw new IllegalArgumentException("Machine ID must be between 0 and " + maxMachineId);
+        }
+        this.machineId = machineId;
+    }
+
+    public synchronized long nextId() {
+        long timestamp = System.currentTimeMillis();
+        if (timestamp < lastTimestamp) {
+            throw new RuntimeException("Clock moved backwards. Refusing to generate id");
+        }
+        if (timestamp == lastTimestamp) {
+            sequence = (sequence + 1) & sequenceMask;
+            if (sequence == 0) {
+                timestamp = waitForNextMillis(lastTimestamp);
+            }
+        } else {
+            sequence = 0;
+        }
+        lastTimestamp = timestamp;
+        return ((timestamp - epoch) << (machineIdBits + sequenceBits))
+                | (machineId << sequenceBits)
+                | sequence;
+    }
+
+    private long waitForNextMillis(long lastTimestamp) {
+        long timestamp = System.currentTimeMillis();
+        while (timestamp <= lastTimestamp) {
+            timestamp = System.currentTimeMillis();
+        }
+        return timestamp;
+    }
+
+}

+ 5 - 9
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zdcx/controller/ZdcxController.java

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*;
 
 @Slf4j
 @RestController
-@RequestMapping("/zhzg/api/zdcx")
+@RequestMapping("/api/zdcx")
 public class ZdcxController {
 
     @Autowired
@@ -26,12 +26,8 @@ public class ZdcxController {
     @PostMapping("/query")
     public JSONObject query(@RequestBody JSONObject reqBody){
         if(null == reqBody.getInteger("queryFlag")){
-            log.error("【查询标志】参数为空");
-            return RspResult.error("【查询标志】参数为空");
-        }
-        if(null == reqBody.getInteger("pageIndex") || null == reqBody.getInteger("pageSize")){
-            log.error("【分页查询】参数为空");
-            return RspResult.error("【分页查询】参数为空");
+            log.error("queryFlag参数为空");
+            return RspResult.error("queryFlag参数为空");
         }
         try {
             return RspResult.success(zdcxService.getDataByPage(reqBody));
@@ -48,10 +44,10 @@ public class ZdcxController {
      */
     @PostMapping("/save")
     public JSONObject save(@RequestBody Zdcx zdcx){
-        // 获取若依当前登录用户信息
+        // 获取当前登录用户信息
         SysUser user = SecurityUtils.getLoginUser().getUser();
         try {
-            if(user != null){
+            if(null != user){
                 if(zdcxService.insertStandardInfo(zdcx, user)){
                     return RspResult.success();
                 }

+ 0 - 42
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zdcx/dto/QueryParamsDTO.java

@@ -1,42 +0,0 @@
-package com.ruoyi.zzb.zdcx.dto;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.springframework.format.annotation.DateTimeFormat;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class QueryParamsDTO {
-
-    private String id;
-    // 文号
-    private String docId;
-    // 题目
-    private String title;
-    // 制定单位
-    private String publishDept;
-    // 内容
-    private String content;
-    // 发布时间
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private String createTime;
-    private String createUserId;
-    private String createUserName;
-    private String createUserPoliceNo;
-    private String createParentDeptName;
-    private String createParentDeptCode;
-    private String createDeptName;
-    private String createDeptCode;
-    // 是否删除
-    private Integer isDelete;
-    private Integer flag;
-    private Integer pageNo;
-    private Integer pageSize;
-    private Integer queryFlag;
-    private String policeNo;
-}

+ 6 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zdcx/service/ZdcxService.java

@@ -43,7 +43,13 @@ public class ZdcxService {
         // 查询标志  0:and,1:or
         Integer queryFlag = reqBody.getInteger("queryFlag");
         Integer pageIndex = reqBody.getInteger("pageIndex");
+        if(null == pageIndex){
+            pageIndex = 1;
+        }
         Integer pageSize = reqBody.getInteger("pageSize");
+        if(null == pageSize){
+            pageSize = 10;
+        }
         // 构造查询条件
         QueryWrapper<Zdcx> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("FLAG", 1);

+ 122 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/controller/ZywwController.java

@@ -0,0 +1,122 @@
+package com.ruoyi.zzb.zyww.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.file.FileUploadUtils;
+import com.ruoyi.zzb.common.CommonUtils;
+import com.ruoyi.zzb.common.RspResult;
+import com.ruoyi.zzb.common.SnowflakeIdGenerator;
+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.service.ZywwService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.framework.config.ServerConfig;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/zyww")
+public class ZywwController {
+
+    @Autowired
+    private ZywwService zywwService;
+
+    /**
+     * 向目标邮箱地址发送一条带附件的邮件
+     * @param reqBody
+     * @return
+     */
+    @PostMapping("/send")
+    public JSONObject send(@RequestBody JSONObject reqBody){
+        String subject = "";          // 邮件主题
+        String text = "";             // 邮件内容
+        String attachmentPath = "";   // 每一个模块对应的的申请模板文件在linux服务器的存储路径
+        String toEmail = reqBody.getString("toEmail");
+        if(StringUtils.isBlank(toEmail) || !CommonUtils.isRightEmail(toEmail)){
+            log.error("toEmail参数非法");
+            return RspResult.error("toEmail参数非法");
+        }
+        // 模块编码,前端在对应页面获取申请模板文件时需手动传入该参数,后端根据该参数值向目标邮箱发送对应的申请模板文件
+        String moduleCode = reqBody.getString("moduleCode");
+        if(StringUtils.isBlank(moduleCode)){
+            log.error("moduleCode参数为空");
+            return RspResult.error("moduleCode参数为空");
+        }
+        if("zyww".equals(moduleCode)){
+            subject = "【住院慰问】";
+            text = "住院慰问相关内容";
+            attachmentPath = "【住院慰问】申请模板文件服务器存储路径";
+            // 该模块在界面获取申请模板文件时需要选择具体的疾病种类(38种重大疾病之一),但从功能来看,对于后端服务好像没有实际用到该参数,待定......
+            // 后续还会在提交申请页面时选择具体的疾病种类,在该页面进行选择更合理
+            String diseaseCode = reqBody.getString("diseaseCode");
+            // todo......
+
+
+        } else if ("dbjz".equals(moduleCode)) {
+            subject = "【大病救助】";
+            text = "大病救助相关内容";
+            attachmentPath = "【大病救助】申请模板文件服务器存储路径";
+        } else {
+            subject = "【会员保障】";
+            text = "会员保障相关内容";
+            attachmentPath = "【会员保障】申请模板文件服务器存储路径";
+        }
+        try {
+            zywwService.sendEmail(toEmail, subject, text, attachmentPath);
+            return RspResult.success("服务器发送邮件成功");
+        } catch (Exception e){
+            log.error("服务器发送邮件时发生异常", e);
+            return RspResult.error("服务器发送邮件失败");
+        }
+    }
+
+
+    /**
+     * 保存一条【住院慰问】申请信息记录,同时保存每一个上传文件项的需要提交的多个附件信息记录以及保存对应的文件到服务器
+     * @param
+     * @return
+     */
+    @PostMapping("/save")
+    public JSONObject save(@RequestBody Zyww zyww, @RequestBody ZywwFileDTO zywwFileDTO, @RequestParam("moduleCode") String moduleCode){
+        try {
+            // 文件上传路径
+            String fileStoragePath = RuoYiConfig.getUploadPath();
+            log.info("文件上传路径:{}", fileStoragePath);
+            SysUser user = SecurityUtils.getLoginUser().getUser();
+            if(null != user){
+                // 生成申请单ID
+                SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
+                String applyFormId = String.valueOf(generator.nextId());
+                List<BaseFileInfo> baseFileInfoList = zywwService.processUploadAndBuildParams(zywwFileDTO, moduleCode, applyFormId, fileStoragePath);
+                // 等上传的文件写盘成功,再向数据库写入对应的申请信息和与之关联的文件信息
+                zywwService.saveZywwApplyInfoAndBaseFileInfos(zyww, user, applyFormId, baseFileInfoList);
+                return RspResult.success("【住院慰问】申请信息保存成功");
+            }
+            return RspResult.error("用户信息为空,【住院慰问】申请信息保存失败");
+        } catch (Exception e){
+            log.error("【住院慰问】申请信息保存失败", e);
+            return RspResult.error("【住院慰问】申请信息保存失败 - " + e.getMessage());
+        }
+    }
+
+
+
+
+
+
+
+
+
+}

+ 40 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/domain/BaseFileInfo.java

@@ -0,0 +1,40 @@
+package com.ruoyi.zzb.zyww.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("ZZB_BASE_FILES_INFO")
+public class BaseFileInfo {
+
+    private String moduleCode;
+    private String applyFormId;
+    private String fileTypeName;
+    private String fileTypeCode;
+
+    @TableField(value = "FILE_ORDER", fill = FieldFill.INSERT)
+    private Integer fileOrder;
+
+    private String fileOriginalName;
+    private String fileExtensions;
+    private String fileRequestPath;
+    private String fileStoragePath;
+    private String fileStorageId;
+
+    @TableField(value = "IS_DELETE", fill = FieldFill.INSERT)
+    private Integer isDelete;
+
+    @TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 59 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/domain/Zyww.java

@@ -0,0 +1,59 @@
+package com.ruoyi.zzb.zyww.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("JIUZHU_HOSPITAL_APPLY_INFO")
+public class Zyww {
+
+    private String applyFormId;
+    private String deptName;
+    private String deptCode;
+    private String name;
+    private Integer gender;
+    private String idcard;
+    private String phone;
+    // 入住医院名称
+    private String inHospitalName;
+
+    // 住院时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date inHospitalTime;
+
+    // 出院时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date outHospitalTime;
+
+    private String diseaseTypeName;
+    private String diseaseCode;
+    private String diseaseName;
+    private String createUserId;
+    private String createUserName;
+    private String createUserPoliceNo;
+
+    @TableField(value = "APPROVE_STATUS_CODE", fill = FieldFill.INSERT)
+    private String approveStatusCode;
+
+    @TableField(value = "APPROVE_STATUS_NAME", fill = FieldFill.INSERT)
+    private String approveStatusName;
+
+    @TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(value = "UPDATE_TIME", fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+}

+ 39 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/domain/ZywwFileDTO.java

@@ -0,0 +1,39 @@
+package com.ruoyi.zzb.zyww.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 【住院慰问】文件上传DTO
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ZywwFileDTO {
+
+    // 住院慰问申请表
+    private MultipartFile[] zywwsqbFiles;
+    // 住院慰问金汇总申请表
+    private MultipartFile[] zywwjhzsqbFiles;
+    // 基层工会慰问金申报表
+    private MultipartFile[] jcghwwjsbbFiles;
+    // 在职证明
+    private MultipartFile[] zzzmFiles;
+    // 公示
+    private MultipartFile[] gsFiles;
+    // 身份证复印件
+    private MultipartFile[] sfzfyjFiles;
+    // 工会会员卡复印件
+    private MultipartFile[] ghhykfyjFiles;
+    // 住院病案首页复印件
+    private MultipartFile[] zybasyfyjFiles;
+    // 诊断证明复印件
+    private MultipartFile[] zdzmfyjFiles;
+    // 工伤证明
+    private MultipartFile[] gszmFiles;
+    // 手术记录
+    private MultipartFile[] ssjlFiles;
+
+}

+ 17 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/mapper/BaseFileInfoMapper.java

@@ -0,0 +1,17 @@
+package com.ruoyi.zzb.zyww.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.zzb.zyww.domain.BaseFileInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+@DataSource(value = DataSourceType.SLAVE)
+public interface BaseFileInfoMapper extends BaseMapper<BaseFileInfo> {
+
+    void batchInsertBaseFileInfos(@Param("baseFileInfoList") List<BaseFileInfo> baseFileInfoList);
+}

+ 12 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/mapper/ZywwMapper.java

@@ -0,0 +1,12 @@
+package com.ruoyi.zzb.zyww.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.zzb.zyww.domain.Zyww;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+@DataSource(value = DataSourceType.SLAVE)
+public interface ZywwMapper extends BaseMapper<Zyww> {
+}

+ 222 - 0
ruoyi-zzb/src/main/java/com/ruoyi/zzb/zyww/service/ZywwService.java

@@ -0,0 +1,222 @@
+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<BaseFileInfo> processUploadAndBuildParams(ZywwFileDTO zywwFileDTO, String moduleCode, String applyFormId, String fileStoragePath) throws IOException {
+        List<BaseFileInfo> dataList = new ArrayList<>();
+        MultipartFile[] zywwsqbFiles = zywwFileDTO.getZywwsqbFiles();
+        List<BaseFileInfo> zywwsqbRowDataList = doProcessUploadAndBuildParams(zywwsqbFiles, moduleCode, applyFormId, "住院慰问申请表", "zywwsqb", fileStoragePath);
+        if(zywwsqbRowDataList.size() > 0){
+            dataList.addAll(zywwsqbRowDataList);
+        }
+        MultipartFile[] zywwjhzsqbFiles = zywwFileDTO.getZywwjhzsqbFiles();
+        List<BaseFileInfo> zywwjhzsqbRowDataList = doProcessUploadAndBuildParams(zywwjhzsqbFiles, moduleCode, applyFormId, "住院慰问金汇总申请表", "zywwjhzsqb", fileStoragePath);
+        if(zywwjhzsqbRowDataList.size() > 0){
+            dataList.addAll(zywwjhzsqbRowDataList);
+        }
+        MultipartFile[] jcghwwjsbbFiles = zywwFileDTO.getJcghwwjsbbFiles();
+        List<BaseFileInfo> jcghwwjsbbRowDataList = doProcessUploadAndBuildParams(jcghwwjsbbFiles, moduleCode, applyFormId, "基层工会慰问金申报表", "jcghwwjsbb", fileStoragePath);
+        if(jcghwwjsbbRowDataList.size() > 0){
+            dataList.addAll(jcghwwjsbbRowDataList);
+        }
+        MultipartFile[] zzzmFiles = zywwFileDTO.getZzzmFiles();
+        List<BaseFileInfo> zzzmRowDataList = doProcessUploadAndBuildParams(zzzmFiles, moduleCode, applyFormId, "在职证明", "zzzm", fileStoragePath);
+        if(zzzmRowDataList.size() > 0){
+            dataList.addAll(zzzmRowDataList);
+        }
+        MultipartFile[] gsFiles = zywwFileDTO.getGsFiles();
+        List<BaseFileInfo> gsRowDataList = doProcessUploadAndBuildParams(gsFiles, moduleCode, applyFormId, "公示", "gs", fileStoragePath);
+        if(gsRowDataList.size() > 0){
+            dataList.addAll(gsRowDataList);
+        }
+        MultipartFile[] sfzfyjFiles = zywwFileDTO.getSfzfyjFiles();
+        List<BaseFileInfo> sfzfyjRowDataList = doProcessUploadAndBuildParams(sfzfyjFiles, moduleCode, applyFormId, "身份证复印件", "sfzfyj", fileStoragePath);
+        if(sfzfyjRowDataList.size() > 0){
+            dataList.addAll(sfzfyjRowDataList);
+        }
+        MultipartFile[] ghhykfyjFiles = zywwFileDTO.getGhhykfyjFiles();
+        List<BaseFileInfo> ghhykfyjRowDataList = doProcessUploadAndBuildParams(ghhykfyjFiles, moduleCode, applyFormId, "工会会员卡复印件", "ghhykfyj", fileStoragePath);
+        if(ghhykfyjRowDataList.size() > 0){
+            dataList.addAll(ghhykfyjRowDataList);
+        }
+        MultipartFile[] zybasyfyjFiles = zywwFileDTO.getZybasyfyjFiles();
+        List<BaseFileInfo> zybasyfyjRowDataList = doProcessUploadAndBuildParams(zybasyfyjFiles, moduleCode, applyFormId, "住院病案首页复印件", "zybasyfyj", fileStoragePath);
+        if(zybasyfyjRowDataList.size() > 0){
+            dataList.addAll(zybasyfyjRowDataList);
+        }
+        MultipartFile[] zdzmfyjFiles = zywwFileDTO.getZdzmfyjFiles();
+        List<BaseFileInfo> zdzmfyjRowDataList = doProcessUploadAndBuildParams(zdzmfyjFiles, moduleCode, applyFormId, "诊断证明复印件", "zdzmfyj", fileStoragePath);
+        if(zdzmfyjRowDataList.size() > 0){
+            dataList.addAll(zdzmfyjRowDataList);
+        }
+        MultipartFile[] gszmFiles = zywwFileDTO.getGszmFiles();
+        List<BaseFileInfo> gszmRowDataList = doProcessUploadAndBuildParams(gszmFiles, moduleCode, applyFormId, "工伤证明", "gszm", fileStoragePath);
+        if(gszmRowDataList.size() > 0){
+            dataList.addAll(gszmRowDataList);
+        }
+        MultipartFile[] ssjlFiles = zywwFileDTO.getSsjlFiles();
+        List<BaseFileInfo> ssjlRowDataList = doProcessUploadAndBuildParams(ssjlFiles, moduleCode, applyFormId, "手术记录", "ssjl", fileStoragePath);
+        if(ssjlRowDataList.size() > 0){
+            dataList.addAll(ssjlRowDataList);
+        }
+        return dataList;
+    }
+
+
+    public List<BaseFileInfo> doProcessUploadAndBuildParams(MultipartFile[] files, String moduleCode, String applyFormId, String fileTypeName, String fileTypeCode, String fileStoragePath) throws IOException {
+        List<BaseFileInfo> 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<BaseFileInfo> 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;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 31 - 0
ruoyi-zzb/src/main/resources/mapper/BaseFileInfoMapper.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.zzb.zyww.domain.BaseFileInfo">
+
+	<resultMap id="BaseFileInfoResultMap" type="BaseFileInfo" >
+		<id property="moduleCode" jdbcType="VARCHAR" column="MODULE_CODE"/>
+		<result property="applyFormId" jdbcType="VARCHAR" column="APPLY_FORM_ID"/>
+		<result property="fileTypeName" jdbcType="VARCHAR" column="FILE_TYPE_NAME"/>
+		<result property="fileTypeCode" jdbcType="VARCHAR" column="FILE_TYPE_CODE"/>
+		<result property="fileOrder" jdbcType="INTEGER" column="FILE_ORDER"/>
+		<result property="fileOriginalName" jdbcType="VARCHAR" column="FILE_ORIGINAL_NAME"/>
+		<result property="fileExtensions" jdbcType="VARCHAR" column="FILE_EXTENSIONS"/>
+		<result property="fileRequestPath" jdbcType="VARCHAR" column="FILE_REQUEST_PATH"/>
+		<result property="fileStoragePath" jdbcType="VARCHAR" column="FILE_STORAGE_PATH"/>
+		<result property="fileStorageId" jdbcType="VARCHAR" column="FILE_STORAGE_ID"/>
+		<result property="isDelete" jdbcType="INTEGER" column="IS_DELETE"/>
+		<result property="createTime" jdbcType="DATE" column="CREATE_TIME"/>
+	</resultMap>
+
+	<insert id="batchInsertBaseFileInfos" parameterType="java.util.List">
+		insert into ZZB_BASE_FILES_INFO (MODULE_CODE, APPLY_FORM_ID, FILE_TYPE_NAME, FILE_TYPE_CODE, FILE_ORIGINAL_NAME, FILE_EXTENSIONS, FILE_REQUEST_PATH, FILE_STORAGE_PATH, FILE_STORAGE_ID) values
+		<foreach collection="baseFileInfoList" item="baseFileInfo" index="index" separator=",">
+			(#{baseFileInfo.moduleCode}, #{baseFileInfo.applyFormId}, #{baseFileInfo.fileTypeName}, #{baseFileInfo.fileTypeCode}, #{baseFileInfo.fileOriginalName}, #{baseFileInfo.fileExtensions}, #{baseFileInfo.fileRequestPath}, #{baseFileInfo.fileStoragePath, #{baseFileInfo.fileStorageId}})
+		</foreach>
+	</insert>
+
+
+
+</mapper>