Преглед изворни кода

新增审核/撤销/归档/申诉等接口

Administrator пре 1 година
родитељ
комит
93ea86f0fb
24 измењених фајлова са 576 додато и 74 уклоњено
  1. 0 7
      ruoyi-admin/pom.xml
  2. 1 21
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  3. 13 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/loan/LoanApplicationController.java
  4. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/loan/LoanApplicationFjController.java
  5. 0 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/review/ReviewCommentsController.java
  6. 46 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/statistics/StatisticsController.java
  7. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  8. 6 0
      ruoyi-common/pom.xml
  9. 25 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
  10. 8 8
      ruoyi-system/src/main/java/com/ruoyi/system/domain/loan/LoanApplication.java
  11. 11 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/review/ReviewComments.java
  12. 2 2
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/LoanApplicationFjMapper.java
  13. 7 0
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/LoanApplicationMapper.java
  14. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/loan/ILoanApplicationFjService.java
  15. 1 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/loan/ILoanApplicationService.java
  16. 7 3
      ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanApplicationFjServiceImpl.java
  17. 130 20
      ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanApplicationServiceImpl.java
  18. 1 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanScheduleServiceImpl.java
  19. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/review/impl/ReviewCommentsServiceImpl.java
  20. 24 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/statistics/IStatisticsService.java
  21. 262 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/statistics/impl/StatisticsServiceImpl.java
  22. 9 3
      ruoyi-system/src/main/resources/mapper/system/LoanApplicationFjMapper.xml
  23. 13 4
      ruoyi-system/src/main/resources/mapper/system/LoanApplicationMapper.xml
  24. 6 1
      ruoyi-system/src/main/resources/mapper/system/ReviewCommentsMapper.xml

+ 0 - 7
ruoyi-admin/pom.xml

@@ -16,13 +16,6 @@
     </description>
 
     <dependencies>
-
-        <!--压缩目录-->
-        <dependency>
-            <groupId>net.lingala.zip4j</groupId>
-            <artifactId>zip4j</artifactId>
-            <version>2.9.0</version>
-        </dependency>
         <!-- spring-boot-devtools -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 1 - 21
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -167,25 +167,5 @@ public class CommonController {
         }
     }
 
-    /**
-     * 压缩文件,返回地址
-     *
-     * @param fileList    源文件或目录路径
-     * @param zipFilePath ZIP文件输出路径
-     * @param password    加密密码
-     * @return
-     */
-    public String zipEncryptExample(List<File> fileList, String zipFilePath, String password) {
-        try {
-            ZipParameters zipParameters = new ZipParameters();
-            zipParameters.setEncryptFiles(true);
-            zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); // 标准AES加密
-            ZipFile zipFile = new ZipFile(zipFilePath, password.toCharArray());
-            zipFile.addFiles(fileList, zipParameters);
-            System.out.println("文件加密成功,保存位置:" + zipFilePath);
-        } catch (ZipException e) {
-            e.printStackTrace();
-        }
-        return zipFilePath;
-    }
+
 }

+ 13 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/loan/LoanApplicationController.java

@@ -159,4 +159,17 @@ public class LoanApplicationController extends BaseController {
     public AjaxResult exportMb(@RequestBody LoanApplication loanApplication) {
         return loanApplicationService.exportMb(loanApplication);
     }
+
+    /**
+     * 文件管理列表
+     * @param loanApplication
+     * @return
+     */
+    @GetMapping("/listOss")
+    @PreAuthorize("@ss.hasPermi('system:application:listOss')")
+    public TableDataInfo listOss(LoanApplication loanApplication) {
+        startPage();
+        List<LoanApplication> list = loanApplicationService.listOss(loanApplication);
+        return getDataTable(list);
+    }
 }

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/loan/LoanApplicationFjController.java

@@ -70,7 +70,7 @@ public class LoanApplicationFjController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:fj:add')")
     @Log(title = "贷款申请_附件", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody LoanApplicationFj loanApplicationFj) {
+    public AjaxResult add(@RequestBody List<LoanApplicationFj> loanApplicationFj) {
         return toAjax(loanApplicationFjService.insertLoanApplicationFj(loanApplicationFj));
     }
 

+ 0 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/review/ReviewCommentsController.java

@@ -38,7 +38,6 @@ public class ReviewCommentsController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:comments:list')")
     @GetMapping("/list")
     public TableDataInfo list(ReviewComments reviewComments) {
-        startPage();
         List<ReviewComments> list = reviewCommentsService.selectReviewCommentsList(reviewComments);
         return getDataTable(list);
     }

+ 46 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/statistics/StatisticsController.java

@@ -0,0 +1,46 @@
+package com.ruoyi.web.controller.statistics;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.system.domain.loan.LoanApplication;
+import com.ruoyi.system.domain.review.ReviewComments;
+import com.ruoyi.system.service.statistics.IStatisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 首页统计
+ * @Author: tjf
+ * @Date: 2024/5/7 14:27
+ * @Describe:
+ */
+@RestController
+@RequestMapping("/statistics")
+public class StatisticsController extends BaseController {
+    @Autowired
+    private IStatisticsService statisticsService;
+
+    /**
+     * 后台首页统计
+     */
+    @PreAuthorize("@ss.hasPermi('system:statistics:loan')")
+    @PostMapping("/loan")
+    public AjaxResult loan(@RequestBody LoanApplication loanApplication) {
+        AjaxResult loan = statisticsService.loan(loanApplication);
+        return loan;
+    }
+
+    /**
+     * 后台首页统计本月数据
+     */
+    @PreAuthorize("@ss.hasPermi('system:statistics:loanMonth')")
+    @PostMapping("/loanMonth")
+    public AjaxResult loanMonth(@RequestBody LoanApplication loanApplication) {
+        AjaxResult loanMonth = statisticsService.loanMonth(loanApplication);
+        return loanMonth;
+    }
+}

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@@ -112,7 +112,7 @@ public class SysDictTypeController extends BaseController
      */
     @PreAuthorize("@ss.hasPermi('system:dict:remove')")
     @Log(title = "字典类型", businessType = BusinessType.CLEAN)
-    @GetMapping("/refreshCache/delete")
+    @GetMapping("/refreshCache")
     public AjaxResult refreshCache()
     {
         dictTypeService.resetDictCache();

+ 6 - 0
ruoyi-common/pom.xml

@@ -18,6 +18,12 @@
 
     <dependencies>
 
+        <!--压缩目录-->
+        <dependency>
+            <groupId>net.lingala.zip4j</groupId>
+            <artifactId>zip4j</artifactId>
+            <version>2.9.0</version>
+        </dependency>
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>

+ 25 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -8,6 +8,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.util.Calendar;
 import java.util.Date;
 import org.apache.commons.lang3.time.DateFormatUtils;
 
@@ -188,6 +189,30 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 增加 Date ==> LocalDate
+     */
+    public static LocalDate toLocalDate(Date date)
+    {
+        // 转换为java.time.LocalDate
+        LocalDate localDate = date.toInstant()
+                .atZone(ZoneId.systemDefault())
+                .toLocalDate();
+        return localDate;
+    }
+
+    public static int getWeekOfMonth(Date date)
+    {
+        Calendar calendar = Calendar.getInstance();
+        // 设置每周的第一天是周一(Calendar.MONDAY = 2)
+        calendar.setFirstDayOfWeek(Calendar.MONDAY);
+        // 设置一周的最小天数为1天(不足一周则补至下周)
+        calendar.setMinimalDaysInFirstWeek(1);
+        calendar.setTime(date);
+        int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
+        return weekOfMonth;
+    }
     /**
      * 获取时间戳
      *

+ 8 - 8
ruoyi-system/src/main/java/com/ruoyi/system/domain/loan/LoanApplication.java

@@ -34,7 +34,7 @@ public class LoanApplication extends BaseEntity
 
     /** 申请额度(万元) */
     @Excel(name = "申请额度(万元)")
-    private BigDecimal applicationAmount;
+    private Double applicationAmount;
 
     /** 申请银行 */
     @Excel(name = "申请银行")
@@ -420,16 +420,16 @@ public class LoanApplication extends BaseEntity
     {
         return loanApplicationNumber;
     }
-    public void setApplicationAmount(BigDecimal applicationAmount) 
-    {
-        this.applicationAmount = applicationAmount;
-    }
 
-    public BigDecimal getApplicationAmount() 
-    {
+    public Double getApplicationAmount() {
         return applicationAmount;
     }
-    public void setApplicationBank(String applicationBank) 
+
+    public void setApplicationAmount(Double applicationAmount) {
+        this.applicationAmount = applicationAmount;
+    }
+
+    public void setApplicationBank(String applicationBank)
     {
         this.applicationBank = applicationBank;
     }

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/review/ReviewComments.java

@@ -48,6 +48,9 @@ public class ReviewComments extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date auditTime;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "评审会日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date reviewTime;
 
     /** 审核意见附件List */
     private  List<LoanApplicationFj> fjUrl;
@@ -76,6 +79,14 @@ public class ReviewComments extends BaseEntity
     @Excel(name = "B角色用户名称")
     private String bUserName;
 
+    public Date getReviewTime() {
+        return reviewTime;
+    }
+
+    public void setReviewTime(Date reviewTime) {
+        this.reviewTime = reviewTime;
+    }
+
     public Long getaUserId() {
         return aUserId;
     }

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/system/mapper/LoanApplicationFjMapper.java

@@ -85,6 +85,6 @@ public interface LoanApplicationFjMapper
      */
     public int deleteLoanApplicationFjByLoanApplicationId(Long loanApplicationId);
 
-    public int deleteLoanApplicationFjByLoanApplicationIdAndType(@Param("LoanApplicationId") Long loanApplicationId,@Param("type") String type);
-    public List<LoanApplicationFj> selectLoanApplicationFjByLoanApplicationIdAndType(@Param("LoanApplicationId") Long loanApplicationId,@Param("type") String type);
+    public int deleteLoanApplicationFjByLoanApplicationIdAndType(@Param("loanApplicationId") Long loanApplicationId,@Param("type") String[] type);
+    public List<LoanApplicationFj> selectLoanApplicationFjByLoanApplicationIdAndType(@Param("loanApplicationId") Long loanApplicationId,@Param("type") String[] type);
 }

+ 7 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/LoanApplicationMapper.java

@@ -29,6 +29,13 @@ public interface LoanApplicationMapper
      */
     public List<LoanApplication> selectLoanApplicationList(LoanApplication loanApplication);
 
+    /**
+     * 统计使用查询列表
+     * @param loanApplication
+     * @return
+     */
+    public List<LoanApplication> selectLoanApplicationListStatistics(LoanApplication loanApplication);
+
     /**
      * 新增贷款申请主
      * 

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/ILoanApplicationFjService.java

@@ -35,7 +35,7 @@ public interface ILoanApplicationFjService
      * @param loanApplicationFj 贷款申请_附件
      * @return 结果
      */
-    public int insertLoanApplicationFj(LoanApplicationFj loanApplicationFj);
+    public int insertLoanApplicationFj(List<LoanApplicationFj> loanApplicationFj);
 
     /**
      * 修改贷款申请_附件

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/ILoanApplicationService.java

@@ -29,6 +29,7 @@ public interface ILoanApplicationService
      * @return 贷款申请主集合
      */
     public List<LoanApplication> selectLoanApplicationList(LoanApplication loanApplication);
+    public List<LoanApplication> listOss(LoanApplication loanApplication);
 
     /**
      * 新增贷款申请主

+ 7 - 3
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanApplicationFjServiceImpl.java

@@ -51,10 +51,14 @@ public class LoanApplicationFjServiceImpl implements ILoanApplicationFjService
      * @return 结果
      */
     @Override
-    public int insertLoanApplicationFj(LoanApplicationFj loanApplicationFj)
+    public int insertLoanApplicationFj(List<LoanApplicationFj> loanApplicationFj)
     {
-        loanApplicationFj.setCreateTime(DateUtils.getNowDate());
-        return loanApplicationFjMapper.insertLoanApplicationFj(loanApplicationFj);
+        if (loanApplicationFj != null && loanApplicationFj.size() > 0){
+            for (LoanApplicationFj applicationFj : loanApplicationFj) {
+                applicationFj.setCreateTime(DateUtils.getNowDate());
+            }
+        }
+        return loanApplicationFjMapper.batchLoanApplicationFj(loanApplicationFj);
     }
 
     /**

+ 130 - 20
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanApplicationServiceImpl.java

@@ -1,11 +1,12 @@
 package com.ruoyi.system.service.loan.impl;
 
 
+import com.ruoyi.common.config.RuoYiConfig;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.SendSmsUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.conference.SysUserConference;
 import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
 import com.ruoyi.system.domain.loan.LoanApplication;
@@ -19,15 +20,17 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.io.File;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.ruoyi.common.constant.CommonConstants.*;
 
+import net.lingala.zip4j.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.model.enums.EncryptionMethod;
+
 /**
  * 贷款申请主Service业务层处理
  *
@@ -106,15 +109,37 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //判断是否是admin或者管理员manager
         List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
         String roleKey = "admin,manager";
+        List<LoanApplication> loanApplications = new ArrayList<>();
         for (SysRole role : roles) {
-            if (role.getRoleKey().contains(roleKey)) {
-
-                break;
+            if (roleKey.contains(role.getRoleKey())) {
+                loanApplications = loanApplicationMapper.selectLoanApplicationList(loanApplication);
+                return loanApplications;
             }
         }
-        List<LoanApplication> loanApplications = loanApplicationMapper.selectLoanApplicationList(loanApplication);
-
+        loanApplication.setUserId(SecurityUtils.getUserId());
+        loanApplications = loanApplicationMapper.selectLoanApplicationList(loanApplication);
+        return loanApplications;
+    }
 
+    /**
+     * 文件管理
+     *
+     * @param loanApplication
+     * @return
+     */
+    @Override
+    public List<LoanApplication> listOss(LoanApplication loanApplication) {
+        List<LoanApplication> loanApplications = loanApplicationMapper.selectLoanApplicationList(loanApplication);
+        if (loanApplications != null && loanApplications.size() > 0){
+            for (LoanApplication application : loanApplications) {
+                //去查询压缩包
+                LoanApplicationFj loanApplicationFj = new LoanApplicationFj();
+                loanApplicationFj.setLoanApplicationId(application.getLoanApplicationId());
+                loanApplicationFj.setBigType("e");
+                List<LoanApplicationFj> loanApplicationFjList = loanApplicationFjMapper.selectLoanApplicationFjList(loanApplicationFj);
+                loanApplication.setLoanApplicationFjList(loanApplicationFjList);
+            }
+        }
         return loanApplications;
     }
 
@@ -331,7 +356,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 type.append(loanApplicationFj.getType()).append(",");
             }
             type.deleteCharAt(type.lastIndexOf(","));
-            loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplicationId, type.toString());
+            loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplicationId, type.toString().split(","));
             //需要删除当前状态下已存在的附件
             loanApplicationFjMapper.batchLoanApplicationFj(fjUrl);
         }
@@ -368,15 +393,21 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             //audit_schedule = 2,3的时候贷款申请进度处于担保初审状态
             if (auditSchedule.equals(TWO) || auditSchedule.equals(THR)) {
                 loanApplication.setLoanSchedule(THR);
+                //审核流程结束
+            } else if (auditSchedule.equals(SEV)) {
+                loanApplication.setLoanSchedule(String.valueOf(Integer.parseInt(loanScheduleOld) + 1));
+                loanApplication.setAuditSchedule(auditSchedule);
+                loanApplication.setAuditType(auditType);
             } else {
                 loanApplication.setLoanSchedule(String.valueOf(Integer.parseInt(loanScheduleOld) + 1));
+                loanApplication.setAuditSchedule(String.valueOf(Integer.parseInt(auditSchedule) + 1));
+                loanApplication.setAuditType(ONE);
             }
-            loanApplication.setAuditSchedule(String.valueOf(Integer.parseInt(auditSchedule) + 1));
-            loanApplication.setAuditType(ONE);
             loanApplicationMapper.updateLoanApplication(loanApplication);
             //插入流程记录表
             LoanSchedule loanSchedule = new LoanSchedule();
             loanSchedule.setLoanApplicationId(loanApplicationId);
+            loanSchedule.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
             loanSchedule.setLoanScheduleValue(loanApplication.getLoanSchedule());
             loanSchedule.setLoanScheduleScore(Long.parseLong(loanApplication.getLoanSchedule()));
             loanSchedule.setLoanScheduleTime(DateUtils.getNowDate());
@@ -405,8 +436,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         loanApplication.setAuditSchedule(TWO);
         loanApplicationMapper.updateLoanApplication(loanApplication);
         //删除之后的所有附件
-        String type = "jzdcbg," + "dbxmhfhgb," + "psyjqpb,"+ "clhgb," + "gdhyjy";
-        loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplication.getLoanApplicationId(), type);
+        String type = "jzdcbg," + "dbxmhfhgb," + "psyjqpb," + "clhgb," + "gdhyjy";
+        loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplication.getLoanApplicationId(), type.split(","));
         return AjaxResult.success();
     }
 
@@ -436,15 +467,15 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         loanApplicationMapper.updateLoanApplication(loanApplication);
 
         String type = "-1";
-        if (auditSchedule.equals(FIV)){
+        if (auditSchedule.equals(FIV)) {
             type = "jzdcbg";
-        }else if (auditSchedule.equals(SIX)){
+        } else if (auditSchedule.equals(SIX)) {
             type = "dbxmhfhgb,clhgb";
-        }else if (auditSchedule.equals(SEV)){
+        } else if (auditSchedule.equals(SEV)) {
             type = "psyjqpb,gdhyjy";
         }
         //还需要删除附件
-        loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplication.getLoanApplicationId(), type);
+        loanApplicationFjMapper.deleteLoanApplicationFjByLoanApplicationIdAndType(loanApplication.getLoanApplicationId(), type.split(","));
         return AjaxResult.success();
     }
 
@@ -472,9 +503,88 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         loanScheduleNew.setLoanScheduleScore(Long.parseLong(loanApplication.getLoanSchedule()));
         loanScheduleNew.setLoanScheduleTime(DateUtils.getNowDate());
         loanScheduleMapper.insertLoanSchedule(loanScheduleNew);
+        //todo 获取所有文件URL 进行打包zip,还有系统内的照片地址 往附件表中插入其他-归档类型的url地址
+        Long loanApplicationId = loanApplication.getLoanApplicationId();
+        List<LoanApplicationFj> loanApplicationFjList = loanApplicationFjMapper.selectLoanApplicationFjByLoanApplicationId(loanApplicationId);
+        //基础附件
+        LoanApplication loanApplicationOld = loanApplicationMapper.selectLoanApplicationByLoanApplicationId(loanApplicationId);
+        //股东附件
+        List<ShareholderFj> shareholderFjs = shareholderFjMapper.selectShareholderFjLoanApplicationId(loanApplicationId);
+        List<File> fileList = new ArrayList<>();
+        if (loanApplicationFjList != null && loanApplicationFjList.size() > 0) {
+            for (LoanApplicationFj loanApplicationFj : loanApplicationFjList) {
+                fileList.add(new File(loanApplicationFj.getUrl()));
+            }
+        }
+        String corporationFront = loanApplicationOld.getCorporationFront();
+        String corporationBack = loanApplicationOld.getCorporationBack();
+        String spouseFront = loanApplicationOld.getSpouseFront();
+        String spouseBack = loanApplicationOld.getSpouseBack();
+        String guaranteeFront = loanApplicationOld.getGuaranteeFront();
+        String guaranteeBack = loanApplicationOld.getGuaranteeBack();
+        if (StringUtils.isNotEmpty(corporationFront)) {
+            fileList.add(new File(corporationFront));
+        }
+        if (StringUtils.isNotEmpty(corporationBack)) {
+            fileList.add(new File(corporationBack));
+        }
+        if (StringUtils.isNotEmpty(spouseFront)) {
+            fileList.add(new File(spouseFront));
+        }
+        if (StringUtils.isNotEmpty(spouseBack)) {
+            fileList.add(new File(spouseBack));
+        }
+        if (StringUtils.isNotEmpty(guaranteeFront)) {
+            fileList.add(new File(guaranteeFront));
+        }
+        if (StringUtils.isNotEmpty(guaranteeBack)) {
+            fileList.add(new File(guaranteeBack));
+        }
+        if (shareholderFjs != null && shareholderFjs.size() > 0) {
+            for (ShareholderFj shareholderFj : shareholderFjs) {
+                fileList.add(new File(shareholderFj.getShareholderZxUrl()));
+                fileList.add(new File(shareholderFj.getShareholderFrontUrl()));
+                fileList.add(new File(shareholderFj.getShareholderBackUrl()));
+            }
+        }
+        // 上传文件路径
+        String filePath = RuoYiConfig.getUploadPath() + "/";
+        String name = loanApplicationOld.getEnterpriseName() + loanApplicationOld.getLoanApplicationNumber() + "文档.zip";
+        zipEncryptExample(fileList, filePath + name, "123");
+        //把压缩包的url插入附件表
+        LoanApplicationFj loanApplicationFj = new LoanApplicationFj();
+        loanApplicationFj.setLoanApplicationId(loanApplicationId);
+        loanApplicationFj.setLoanApplicationNumber(loanApplicationOld.getEnterpriseName());
+        loanApplicationFj.setOldName(name);
+        loanApplicationFj.setName(name);
+        loanApplicationFj.setUrl(filePath + name);
+        loanApplicationFj.setBigType("e");
+        loanApplicationFj.setCreateTime(DateUtils.getNowDate());
+        loanApplicationFjMapper.insertLoanApplicationFj(loanApplicationFj);
         return AjaxResult.success();
     }
 
+    /**
+     * 压缩文件,返回地址
+     *
+     * @param fileList    源文件或目录路径
+     * @param zipFilePath ZIP文件输出路径
+     * @param password    加密密码
+     * @return
+     */
+    public String zipEncryptExample(List<File> fileList, String zipFilePath, String password) {
+        try {
+            ZipParameters zipParameters = new ZipParameters();
+            zipParameters.setEncryptFiles(true);
+            zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD); // 标准AES加密
+            ZipFile zipFile = new ZipFile(zipFilePath, password.toCharArray());
+            zipFile.addFiles(fileList, zipParameters);
+            System.out.println("文件加密成功,保存位置:" + zipFilePath);
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+        return zipFilePath;
+    }
 
     /**
      * 导出模板附件

+ 1 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/loan/impl/LoanScheduleServiceImpl.java

@@ -64,6 +64,7 @@ public class LoanScheduleServiceImpl implements ILoanScheduleService {
             loanScheduleNew.setLoanScheduleName(dictLabel);
             loanScheduleNew.setLoanScheduleTime(null);
             loanScheduleNew.setLoanScheduleScore(dictSort);
+            loanScheduleNew.setLoanScheduleValue(dictValue);
             if (collect != null && collect.size() > 0){
                 List<LoanSchedule> loanSchedulesNew = collect.get(dictValue);
                 if (loanSchedulesNew != null && loanSchedulesNew.size() > 0){

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/review/impl/ReviewCommentsServiceImpl.java

@@ -72,7 +72,7 @@ public class ReviewCommentsServiceImpl implements IReviewCommentsService {
         }else if (auditSchedule.equals(SEV)){
             type = "psyjqpb,gdhyjy";
         }
-        List<LoanApplicationFj> loanApplicationFjList = loanApplicationFjMapper.selectLoanApplicationFjByLoanApplicationIdAndType(loanApplicationId, type);
+        List<LoanApplicationFj> loanApplicationFjList = loanApplicationFjMapper.selectLoanApplicationFjByLoanApplicationIdAndType(loanApplicationId, type.split(","));
         return loanApplicationFjList;
     }
 

+ 24 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/statistics/IStatisticsService.java

@@ -0,0 +1,24 @@
+package com.ruoyi.system.service.statistics;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.system.domain.loan.LoanApplication;
+
+/**
+ * @Author: tjf
+ * @Date: 2024/5/7 14:26
+ * @Describe:
+ */
+public interface IStatisticsService {
+    /**
+     * 后台首页统计
+     * @return
+     */
+   AjaxResult loan(LoanApplication loanApplication);
+
+    /**
+     * 本月数据
+     * @param loanApplication
+     * @return
+     */
+   AjaxResult loanMonth(LoanApplication loanApplication);
+}

+ 262 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/statistics/impl/StatisticsServiceImpl.java

@@ -0,0 +1,262 @@
+package com.ruoyi.system.service.statistics.impl;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.loan.LoanApplication;
+import com.ruoyi.system.mapper.LoanApplicationMapper;
+import com.ruoyi.system.service.statistics.IStatisticsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ruoyi.common.constant.CommonConstants.*;
+
+/**
+ * @Author: tjf
+ * @Date: 2024/5/7 14:26
+ * @Describe:
+ */
+@Service
+public class StatisticsServiceImpl implements IStatisticsService {
+    @Autowired
+    private LoanApplicationMapper loanApplicationMapper;
+
+    /**
+     * 后台首页统计
+     *
+     * @return
+     */
+    @Override
+    public AjaxResult loan(LoanApplication loanApplication) {
+        //type = 1按年度统计  =2 按月份统计
+
+        //定义返回值
+        Map<String, Object> map = new HashMap<>(6);
+        //业务审核
+        map.put("ywsh", 0);
+        //业务完结
+        map.put("ywwj", 0);
+        //申报审核
+        map.put("sbsh", 0);
+        //申报完结
+        map.put("sbwj", 0);
+        //待放款
+        map.put("dfk", 0);
+        //已放款
+        map.put("yfk", 0);
+        //查询所有
+        List<LoanApplication> loanApplications = loanApplicationMapper.selectLoanApplicationListStatistics(loanApplication);
+        if (loanApplications != null && loanApplications.size() > 0) {
+            //贷款申请状态 1:暂存 2:正常 3:回收站 4:归档 进行分组
+            Map<String, List<LoanApplication>> loanApplicationType = loanApplications.stream().collect(Collectors.groupingBy(LoanApplication::getLoanApplicationType));
+            List<LoanApplication> loanApplicationsTwoMap = loanApplicationType.get(TWO);
+            if (loanApplicationsTwoMap != null && loanApplicationsTwoMap.size() > 0) {
+                map.put("ywsh", loanApplicationsTwoMap.size());
+                map.put("sbsh", loanApplicationsTwoMap.size());
+                map.put("dfk", loanApplicationsTwoMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum());
+            }
+            List<LoanApplication> loanApplicationsForMap = loanApplicationType.get(FOR);
+            if (loanApplicationsForMap != null && loanApplicationsForMap.size() > 0) {
+                map.put("ywwj", loanApplicationsForMap.size());
+                map.put("sbwj", loanApplicationsForMap.size());
+                map.put("yfk", loanApplicationsForMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum());
+            }
+        }
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 本月数据
+     *
+     * @param loanApplication
+     * @return
+     */
+    @Override
+    public AjaxResult loanMonth(LoanApplication loanApplication) {
+        //type = 1按年度统计  =2 按月份统计
+        String beginTime = (String) loanApplication.getParams().get("beginTime");
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        Map<String, Object> map = new HashMap<>(20);
+        double sdje = 0;
+        double sdjeLast = 0;
+        double fdje = 0;
+        double fdjeLast = 0;
+        double ywsb = 0;
+        double ywsbLast = 0;
+        double gd = 0;
+        double gdLast = 0;
+        double newMonth = 0;
+        double newLast = 0;
+        double small = 0;
+        double smallLast = 0;
+        List<Double> list = new ArrayList<>();
+        list.add(0D);
+        list.add(0D);
+        list.add(0D);
+        list.add(0D);
+        list.add(0D);
+        map.put("y", list);
+        try {
+            DecimalFormat df = new DecimalFormat("##.##%");
+            Date date = sdf.parse(beginTime);
+            LocalDate localDate = DateUtils.toLocalDate(date);
+            //上月
+            String lastMonth = formatter.format(localDate.minusMonths(1));
+            //本月数据
+            List<LoanApplication> loanApplications = loanApplicationMapper.selectLoanApplicationListStatistics(loanApplication);
+            loanApplication.getParams().put("beginTime", lastMonth);
+            //上月数据
+            List<LoanApplication> loanApplicationsLast = loanApplicationMapper.selectLoanApplicationListStatistics(loanApplication);
+
+            //获取本月数据
+            if (loanApplications != null && loanApplications.size() > 0) {
+                Map<String, List<LoanApplication>> loanApplicationType = loanApplications.stream().collect(Collectors.groupingBy(LoanApplication::getLoanApplicationType));
+                List<LoanApplication> loanApplicationsTwoMap = loanApplicationType.get(TWO);
+                if (loanApplicationsTwoMap != null && loanApplicationsTwoMap.size() > 0) {
+                    //本月申请贷款
+                    sdje = loanApplicationsTwoMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+
+                    //计算Y轴申请贷款金额/每周
+                    Map<Date, List<LoanApplication>> collectDate = loanApplicationsTwoMap.stream().collect(Collectors.groupingBy(LoanApplication::getApplicationTime));
+                    //第几周的数据
+                    double a = 0;
+                    double b = 0;
+                    double c = 0;
+                    double d = 0;
+                    double e = 0;
+                    for (Date dateTime : collectDate.keySet()) {
+                        int weekOfMonth = DateUtils.getWeekOfMonth(dateTime);
+                        switch (weekOfMonth) {
+                            case 1:
+                                a = a + collectDate.get(dateTime).stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                                break;
+                            case 2:
+                                b = b + collectDate.get(dateTime).stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                                break;
+                            case 3:
+                                c = c + collectDate.get(dateTime).stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                                break;
+                            case 4:
+                                d = d + collectDate.get(dateTime).stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                                break;
+                            case 5:
+                                e = e + collectDate.get(dateTime).stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                                break;
+                            default:
+                                break;
+                        }
+                    }
+
+                    List<Double> listDouble = new ArrayList<>();
+                    listDouble.add(a);
+                    listDouble.add(b);
+                    listDouble.add(c);
+                    listDouble.add(d);
+                    listDouble.add(e);
+                    map.put("y", listDouble);
+                    ywsb = loanApplicationsTwoMap.size();
+                    newMonth = loanApplicationsTwoMap.stream().filter(s -> "Y".equals(s.getIsNew())).count();
+                    small = loanApplicationsTwoMap.stream().filter(s -> "Y".equals(s.getIsSmall())).count();
+                }
+                List<LoanApplication> loanApplicationsForMap = loanApplicationType.get(FOR);
+                if (loanApplicationsForMap != null && loanApplicationsForMap.size() > 0) {
+                    //本月申请贷款
+                    fdje = loanApplicationsForMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                    gd = loanApplicationsForMap.size();
+                }
+            }
+            //获取上月数据
+            if (loanApplicationsLast != null && loanApplicationsLast.size() > 0) {
+                Map<String, List<LoanApplication>> loanApplicationType = loanApplicationsLast.stream().collect(Collectors.groupingBy(LoanApplication::getLoanApplicationType));
+                List<LoanApplication> loanApplicationsTwoMap = loanApplicationType.get(TWO);
+                if (loanApplicationsTwoMap != null && loanApplicationsTwoMap.size() > 0) {
+                    //本月申请贷款
+                    sdjeLast = loanApplicationsTwoMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                    ywsbLast = loanApplicationsTwoMap.size();
+                    newLast = loanApplicationsTwoMap.stream().filter(s -> "Y".equals(s.getIsNew())).count();
+                    smallLast = loanApplicationsTwoMap.stream().filter(s -> "Y".equals(s.getIsSmall())).count();
+                }
+                List<LoanApplication> loanApplicationsForMap = loanApplicationType.get(FOR);
+                if (loanApplicationsForMap != null && loanApplicationsForMap.size() > 0) {
+                    //本月申请贷款
+                    fdjeLast = loanApplicationsForMap.stream().mapToDouble(LoanApplication::getApplicationAmount).sum();
+                    gdLast = loanApplicationsForMap.size();
+                }
+            }
+            //申贷金额
+            map.put("sdje", sdje);
+            map.put("sdjePt", getNumPt(sdje, sdjeLast, df).get("pt"));
+            map.put("sdjePtStatus", getNumPt(sdje, sdjeLast, df).get("ptStatus"));
+            //放贷金额
+            map.put("fdje", fdje);
+            map.put("fdjePt", getNumPt(fdje, fdjeLast, df).get("pt"));
+            map.put("fdjePtStatus", getNumPt(fdje, fdjeLast, df).get("ptStatus"));
+            //业务申报
+            map.put("ywsb", ywsb);
+            map.put("ywsbPt", getNumPt(ywsb, ywsbLast, df).get("pt"));
+            map.put("ywsbPtStatus", getNumPt(ywsb, ywsbLast, df).get("ptStatus"));
+            //归档
+            map.put("gd", gd);
+            map.put("gdPt", getNumPt(gd, gdLast, df).get("pt"));
+            map.put("gdPtStatus", getNumPt(gd, gdLast, df).get("ptStatus"));
+            //精特新
+            map.put("new", newMonth);
+            map.put("newPt", getNumPt(newMonth, newLast, df).get("pt"));
+            map.put("newPtStatus", getNumPt(newMonth, newLast, df).get("ptStatus"));
+            //小微企业
+            map.put("small", small);
+            map.put("smallPt", getNumPt(small, smallLast, df).get("pt"));
+            map.put("smallPtStatus", getNumPt(small, smallLast, df).get("ptStatus"));
+            List<String> xlist = new ArrayList<>();
+            xlist.add("第一周");
+            xlist.add("第二周");
+            xlist.add("第三周");
+            xlist.add("第四周");
+            xlist.add("第五周");
+            map.put("x", xlist);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        //定义返回值
+        return AjaxResult.success(map);
+    }
+
+    //计算两个数的百分比和是上升还是下降
+    public static Map<String, String> getNumPt(double a, double b, DecimalFormat df) {
+        Map<String, String> map = new HashMap<>(2);
+        if (a > 0 && b < 1) {
+            map.put("ptStatus", ONE);
+            map.put("pt", "100.00%");
+            return map;
+        } else if (a < 1 && b > 0) {
+            map.put("ptStatus", TWO);
+            map.put("pt", "100.00%");
+            return map;
+        } else if (a < 1 && b < 1) {
+            map.put("ptStatus", ONE);
+            map.put("pt", "0.00%");
+            return map;
+        } else if (a > 0 && b > 0) {
+            if (a > b) {
+                map.put("ptStatus", ONE);
+                String format = df.format((a - b) / b);
+                map.put("pt", format);
+            }
+            if (b > a) {
+                map.put("ptStatus", TWO);
+                String format = df.format((b - a) / b);
+                map.put("pt", format);
+            }
+        }
+        return map;
+    }
+}

+ 9 - 3
ruoyi-system/src/main/resources/mapper/system/LoanApplicationFjMapper.xml

@@ -68,7 +68,10 @@
     <select id="selectLoanApplicationFjByLoanApplicationIdAndType" parameterType="LoanApplicationFj" resultMap="LoanApplicationFjResult">
         <include refid="selectLoanApplicationFjVo"/>
         where loan_application_id = #{loanApplicationId}
-        and type in (#{type})
+        and type in
+        <foreach item="type" collection="type" open="(" separator="," close=")">
+            #{type}
+        </foreach>
     </select>
 
     <insert id="insertLoanApplicationFj" parameterType="LoanApplicationFj" useGeneratedKeys="true" keyProperty="fjId">
@@ -149,7 +152,10 @@
     <delete id="deleteLoanApplicationFjByLoanApplicationIdAndType" parameterType="LoanApplicationFj">
         delete
         from loan_application_fj
-        where loan_application_id = #{LoanApplicationId}
-          and type in (#{type})
+        where loan_application_id = #{loanApplicationId}
+        and type in
+        <foreach item="type" collection="type" open="(" separator="," close=")">
+            #{type}
+        </foreach>
     </delete>
 </mapper>

+ 13 - 4
ruoyi-system/src/main/resources/mapper/system/LoanApplicationMapper.xml

@@ -130,16 +130,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditSchedule != null  and auditSchedule != ''"> and audit_schedule = #{auditSchedule}</if>
             <if test="auditType != null  and auditType != ''"> and audit_type = #{auditType}</if>
             <if test="loanApplicationType != null  and loanApplicationType != ''"> and loan_application_type = #{loanApplicationType}</if>
-            <if test="aUserId != null "> and a_user_id = #{aUserId}</if>
-
-            <if test="bUserId != null "> and b_user_id = #{bUserId}</if>
-
+            <if test="userId != null "> and (a_user_id = #{userId} or (b_user_id = #{userId} and audit_schedule = '3'))</if>
             <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
                 AND date_format(create_time,'%Y') = date_format(#{params.beginTime},'%Y')
             </if>
         </where>
         order by create_time DESC
     </select>
+
+    <select id="selectLoanApplicationListStatistics" parameterType="LoanApplication" resultMap="LoanApplicationResult">
+        <include refid="selectLoanApplicationVo"/>
+        <where>
+            <if test="type != null and type == '1'"><!-- 开始时间检索 -->
+                AND date_format(application_time,'%Y') = date_format(#{params.beginTime},'%Y')
+            </if>
+            <if test="type != null and type == '2'"><!-- 开始时间检索 -->
+                AND date_format(application_time,'%Y%m') = date_format(#{params.beginTime},'%Y%m')
+            </if>
+        </where>
+    </select>
     
     <select id="selectLoanApplicationByLoanApplicationId" parameterType="Long" resultMap="LoanApplicationResult">
         <include refid="selectLoanApplicationVo"/>

+ 6 - 1
ruoyi-system/src/main/resources/mapper/system/ReviewCommentsMapper.xml

@@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="auditType"    column="audit_type"    />
         <result property="auditView"    column="audit_view"    />
         <result property="auditTime"    column="audit_time"    />
+        <result property="reviewTime"    column="review_time"    />
         <result property="imageUrl"    column="image_url"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
@@ -21,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectReviewCommentsVo">
-        select review_comments_id, loan_application_id, loan_application_number, audit_schedule, audit_type, audit_view, audit_time,  image_url, create_by, create_time, update_by, update_time, remark from review_comments
+        select review_comments_id, loan_application_id, loan_application_number,review_time, audit_schedule, audit_type, audit_view, audit_time,  image_url, create_by, create_time, update_by, update_time, remark from review_comments
     </sql>
 
     <select id="selectReviewCommentsList" parameterType="ReviewComments" resultMap="ReviewCommentsResult">
@@ -32,6 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditSchedule != null  and auditSchedule != ''"> and audit_schedule = #{auditSchedule}</if>
             <if test="auditType != null  and auditType != ''"> and audit_type = #{auditType}</if>
             <if test="auditView != null  and auditView != ''"> and audit_view = #{auditView}</if>
+            <if test="reviewTime != null  "> and review_time = #{reviewTime}</if>
             <if test="auditTime != null "> and audit_time = #{auditTime}</if>
             <if test="imageUrl != null  and imageUrl != ''"> and image_url = #{imageUrl}</if>
         </where>
@@ -52,6 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditType != null and auditType != ''">audit_type,</if>
             <if test="auditView != null">audit_view,</if>
             <if test="auditTime != null">audit_time,</if>
+            <if test="reviewTime != null">review_time,</if>
             <if test="imageUrl != null">image_url,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
@@ -66,6 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditType != null and auditType != ''">#{auditType},</if>
             <if test="auditView != null">#{auditView},</if>
             <if test="auditTime != null">#{auditTime},</if>
+            <if test="reviewTime != null">#{reviewTime},</if>
             <if test="imageUrl != null">#{imageUrl},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
@@ -84,6 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="auditType != null and auditType != ''">audit_type = #{auditType},</if>
             <if test="auditView != null">audit_view = #{auditView},</if>
             <if test="auditTime != null">audit_time = #{auditTime},</if>
+            <if test="reviewTime != null">review_time = #{reviewTime},</if>
             <if test="imageUrl != null">image_url = #{imageUrl},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>