Переглянути джерело

Merge branch 'master' of http://60.171.161.56:20000/tjf/rongzidanbao

wangmengwei 7 місяців тому
батько
коміт
e970ae56c7

+ 22 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/OcrController.java

@@ -1,11 +1,14 @@
 package com.ruoyi.web.controller.common;
 
 
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponseBody;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.IdCardVo;
 import com.ruoyi.common.core.domain.SysUserIdcardVo;
+import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.IdCardUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,6 +22,9 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @RequestMapping("/ocr")
 public class OcrController {
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 身份证识别
      *
@@ -27,7 +33,7 @@ public class OcrController {
     @PostMapping("/ocrIdCard")
     @RepeatSubmit(interval = 1000, message = "请求过于频繁")
     public AjaxResult ocrIdCard(@RequestBody IdCardVo idCardVo) {
-        return IdCardUtil.idCard(idCardVo.getImage(),idCardVo.getIdCardSide());
+        return IdCardUtil.idCard(idCardVo.getImage(), idCardVo.getIdCardSide());
     }
 
     /**
@@ -63,6 +69,21 @@ public class OcrController {
         return IdCardUtil.ocrSampleAliYun(sysUserIdcardVo);
     }
 
+    /**
+     * 人脸识别阿里云金融级实人认证H5
+     *
+     * @return
+     */
+    @PostMapping("/ocrSampleAliYunH")
+    @RepeatSubmit(interval = 1000, message = "请求过于频繁")
+    public AjaxResult ocrSampleAliYunH(@RequestBody SysUserIdcardVo sysUserIdcardVo) {
+        InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject result = IdCardUtil.initFaceVerifyH5(sysUserIdcardVo);
+        String certifyId = result.getCertifyId();
+        redisCache.setCacheObject(certifyId, sysUserIdcardVo);
+        System.out.println("人脸识别H5跳转URL"+result.getCertifyUrl());
+        return AjaxResult.success(result);
+    }
+
     /**
      * 手写识别
      *

+ 50 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/controller/idcard/SysUserIdcardController.java

@@ -1,28 +1,25 @@
 package com.ruoyi.web.controller.idcard;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.SysUserIdcardVo;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.domain.idcard.SysUserIdcard;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.idcard.ISysUserIdcardService;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 用户身份证信息Controller
@@ -42,6 +39,9 @@ public class SysUserIdcardController extends BaseController {
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询用户身份证信息列表
      */
@@ -93,7 +93,41 @@ public class SysUserIdcardController extends BaseController {
             tokenService.setLoginUser(loginUser);
             return toAjax(sysUserIdcardService.insertSysUserIdcard(sysUserIdcard));
         }
-        return  error("人脸认证更新失败");
+        return error("人脸认证更新失败");
+    }
+
+
+    /**
+     * 新增用户身份证信息H5
+     */
+    @Log(title = "用户身份证信息", businessType = BusinessType.INSERT)
+    @PostMapping("/h")
+    public AjaxResult addH5(@RequestBody SysUserIdcard sysUserIdcard) {
+        String certifyId = sysUserIdcard.getCertifyId();
+        SysUserIdcardVo sysUserIdcardVo = redisCache.getCacheObject(certifyId);
+        sysUserIdcard.setUserId(sysUserIdcardVo.getUserId());
+        sysUserIdcard.setIdCard(sysUserIdcardVo.getIdCard());
+        sysUserIdcard.setRealName(sysUserIdcardVo.getRealName());
+        sysUserIdcard.setExpirationDate(sysUserIdcardVo.getExpirationDate());
+        sysUserIdcard.setPhonenumber(sysUserIdcardVo.getPhonenumber());
+        sysUserIdcard.setAddress(sysUserIdcardVo.getAddress());
+        sysUserIdcard.setFront(sysUserIdcardVo.getFront());
+        sysUserIdcard.setBack(sysUserIdcardVo.getBack());
+        LoginUser loginUser = getLoginUser();
+        SysUser currentUser = loginUser.getUser();
+        currentUser.setInitFace("Y");
+        userService.checkUserAllowed(currentUser);
+        userService.checkUserDataScope(currentUser.getUserId());
+        currentUser.setUpdateBy(getUsername());
+        if (userService.updateUserStatus(currentUser) > 0) {
+            currentUser.setInitFace("Y");
+            // 更新缓存用户信息
+            tokenService.setLoginUser(loginUser);
+            //删除redis
+            redisCache.deleteObject(certifyId);
+            return toAjax(sysUserIdcardService.insertSysUserIdcard(sysUserIdcard));
+        }
+        return error("人脸认证更新失败");
     }
 
     /**

+ 3 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/CommonConstants.java

@@ -19,6 +19,9 @@ public class CommonConstants {
     public static final String TEN = "10";
     public static final String ELE = "11";
     public static final String TWE = "12";
+    public static final String THI = "13";
+    public static final String FOU = "14";
+    public static final String FIF = "15";
     public static final String YES = "是";
     public static final String NO = "否";
     public static final String FRONT = "front";

+ 72 - 29
ruoyi-common/src/main/java/com/ruoyi/common/utils/IdCardUtil.java

@@ -6,49 +6,32 @@ package com.ruoyi.common.utils;
  * @Describe:
  */
 
-import cn.hutool.http.HttpRequest;
-import com.alibaba.fastjson2.JSONArray;
-import com.aliyun.cloudauth20190307.Client;
-import com.aliyun.cloudauth20190307.models.*;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.teautil.models.RuntimeOptions;
-
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.List;
-
 import cn.hutool.http.HttpUtil;
-
-import java.util.Arrays;
-import java.util.List;
-
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.aliyun.cloudauth20190307.Client;
-import com.aliyun.cloudauth20190307.models.*;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponse;
+import com.aliyun.cloudauth20190307.models.InitFaceVerifyResponseBody;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.models.RuntimeOptions;
-import com.ruoyi.common.core.domain.SysUserIdcardVo;
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.SysUserIdcardVo;
 import okhttp3.*;
-import org.apache.http.client.HttpClient;
-import org.apache.poi.util.IOUtils;
-import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.net.URLEncoder;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
 
-
-import static com.ruoyi.common.constant.CommonConstants.*;
+import static com.ruoyi.common.constant.CommonConstants.BACK;
+import static com.ruoyi.common.constant.CommonConstants.FRONT;
 
 public class IdCardUtil {
     /**
@@ -731,6 +714,7 @@ public class IdCardUtil {
         InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject resultObject = response.getBody().getResultObject();
 
         System.out.println(response.getBody().getRequestId());
+        System.out.println("人脸识别跳转URL"+resultObject.getCertifyUrl());
         System.out.println(response.getBody().getCode());
         System.out.println(response.getBody().getMessage());
         System.out.println(response.getBody().getResultObject() == null ? null
@@ -738,6 +722,65 @@ public class IdCardUtil {
         return resultObject;
     }
 
+    /**
+     * 阿里云调用人脸识别H5
+     * 每次开始认证前通过本接口获取CertifyId,用来串联认证请求中的各个接口。
+     */
+    public static InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject initFaceVerifyH5(SysUserIdcardVo sysUserIdcardVo) {
+        InitFaceVerifyRequest request = new InitFaceVerifyRequest();
+        // 请输入场景ID+L。1000009979场景id固定值
+        request.setSceneId(1000009979L);
+        // 设置商户请求的唯一标识。
+        request.setOuterOrderNo(UUID.randomUUID().toString().replaceAll("-", ""));
+        // 认证方案。
+        request.setProductCode("ID_PRO");
+        // 模式。要进行活体检测的类型。取值:
+        //LIVENESS(默认):眨眼动作活体检测。
+        //
+        //PHOTINUS_LIVENESS:眨眼动作活体+炫彩活体双重检测。
+        //
+        //MULTI_ACTION:多动作活体检测。当前为眨眼+任意摇头检测。
+        request.setModel("PHOTINUS_LIVENESS");
+        //不同证件类型,取值均为IDENTITY_CARD
+        request.setCertType("IDENTITY_CARD");
+        //您的终端用户的真实姓名
+        request.setCertName(sysUserIdcardVo.getRealName());
+        //您的终端用户的证件号码。
+        request.setCertNo(sysUserIdcardVo.getIdCard());
+        // MetaInfo环境参数。
+        request.setMetaInfo(sysUserIdcardVo.getMetaInfo());
+        //业务页面回跳的目标地址。
+        String returnUrl = sysUserIdcardVo.getReturnUrl();
+        if (StringUtils.isNotEmpty(returnUrl)) {
+            //H5的model不一样
+            request.setModel("MULTI_ACTION");
+            request.setReturnUrl(returnUrl);
+        }
+        //request.setMobile("130xxxxxxxx");
+        //request.setIp("114.xxx.xxx.xxx");
+        //request.setUserId("12345xxxx");
+        //request.setCallbackUrl("https://www.aliyundoc.com");
+        //request.setCallbackToken("xxxxx");
+        // 如需开启个人信息加密传输。
+        //request.setEncryptType("SM2");
+        //request.setCertName("BCRD/7ZkNy7Q*****M1BMBezZe8GaYHrLwyJv558w==");
+        //request.setCertNo("BMjsstxK3S4b1YH*****Pet8ECObfxmLN92SLsNg==");
+
+        // 推荐,支持服务路由。
+        InitFaceVerifyResponse response = initFaceVerifyAutoRoute(request);
+
+        // 不支持服务自动路由。
+        //InitFaceVerifyResponse response = initFaceVerify("cloudauth.cn-shanghai.aliyuncs.com", request);
+
+        InitFaceVerifyResponseBody.InitFaceVerifyResponseBodyResultObject resultObject = response.getBody().getResultObject();
+
+        System.out.println(response.getBody().getRequestId());
+        System.out.println(response.getBody().getCode());
+        System.out.println(response.getBody().getMessage());
+        System.out.println(response.getBody().getResultObject() == null ? null
+                : response.getBody().getResultObject().getCertifyId());
+        return resultObject;
+    }
     private static InitFaceVerifyResponse initFaceVerifyAutoRoute(InitFaceVerifyRequest request) {
         // 第一个为主区域Endpoint,第二个为备区域Endpoint。
         List<String> endpoints = Arrays.asList("cloudauth.cn-shanghai.aliyuncs.com", "cloudauth.cn-beijing.aliyuncs.com");

+ 94 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/PriceConverter/PriceConverter.java

@@ -0,0 +1,94 @@
+package com.ruoyi.common.utils.PriceConverter;
+
+import java.math.BigDecimal;
+
+public class PriceConverter {
+
+    private static final String[] CHINESE_NUMBERS = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
+    private static final String[] UNITS = {"", "拾", "佰", "仟"};
+    private static final String[] BIG_UNITS = {"", "万", "亿", "兆", "京", "垓", "秭", "穰", "沟", "涧", "正", "载", "极"}; // 根据需要可以增加更多大单位
+
+    public static String convertToChinese(BigDecimal price) {
+        if (price == null || price.compareTo(BigDecimal.ZERO) < 0) {
+            throw new IllegalArgumentException("价格不能为空或小于0");
+        }
+
+        // 转换为字符串并截取小数点前后部分
+        String priceStr = price.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();
+        String integerPart = priceStr.split("\\.")[0]; // 整数部分
+        String decimalPart = priceStr.split("\\.")[1]; // 小数部分(角、分)
+
+        // 处理整数部分
+        String integerChinese = convertToChinesePart(integerPart, UNITS, BIG_UNITS);
+
+        // 处理小数部分
+        String decimalChinese = "";
+        if (!"00".equals(decimalPart)) {
+            decimalChinese = convertToDecimalChinese(decimalPart);
+        }
+
+        // 合并结果
+        return integerChinese + "元" + decimalChinese;
+    }
+
+    private static String convertToChinesePart(String numberStr, String[] units, String[] bigUnits) {
+        if ("0".equals(numberStr)) {
+            return CHINESE_NUMBERS[0];
+        }
+
+        StringBuilder sb = new StringBuilder();
+        int unitIndex = 0;
+//        int zeroCount = 0;
+
+        for (int i = numberStr.length() - 1; i >= 0; i--) {
+            int digit = numberStr.charAt(i) - '0';
+            String chineseDigit = CHINESE_NUMBERS[digit];
+
+            if (digit == 0) {
+//                zeroCount++;
+                // 连续零的处理:只在非零数字后面、单位变化处或字符串开始处添加一个零
+                if (sb.length() > 0 && (sb.charAt(sb.length() - 1) != CHINESE_NUMBERS[0].charAt(0) || unitIndex == 0 || i == 0)) {
+                    sb.insert(0, chineseDigit);
+                }
+            } else {
+                // 添加非零数字和对应单位
+                sb.insert(0, chineseDigit + units[unitIndex]);
+//                zeroCount = 0; // 重置连续零的计数
+            }
+
+            // 切换到下一个单位
+            if (++unitIndex == units.length) {
+                unitIndex = 0; // 循环使用单位数组
+                if (sb.length() > 0 && i > 0) {
+                    sb.insert(0, bigUnits[(numberStr.length()-i) / units.length]);
+                }
+            }
+        }
+
+        // 去除末尾可能多余的零
+        while (sb.length() > 0 && sb.charAt(0) == CHINESE_NUMBERS[0].charAt(0)) {
+            sb.deleteCharAt(0);
+        }
+
+        return sb.toString();
+    }
+
+    private static String convertToDecimalChinese(String decimalPart) {
+        StringBuilder sb = new StringBuilder();
+        if (decimalPart.charAt(0) != '0') {
+            sb.append(CHINESE_NUMBERS[decimalPart.charAt(0) - '0']).append("角");
+        }
+        if (decimalPart.length() > 1 && decimalPart.charAt(1) != '0') {
+            sb.append(CHINESE_NUMBERS[decimalPart.charAt(1) - '0']).append("分");
+        }
+        return sb.toString();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(convertToChinese(new BigDecimal("4545444444111141233123522212345.67"))); // 肆佰伍拾肆穰伍仟肆佰肆拾肆秭肆仟肆佰肆拾壹垓壹仟壹佰壹拾肆京壹仟贰佰叁拾叁兆壹仟贰佰叁拾伍亿贰仟贰佰贰拾壹万贰仟叁佰肆拾伍元陆角柒分
+        System.out.println(convertToChinese(new BigDecimal("100.00"))); // 壹佰元
+        System.out.println(convertToChinese(new BigDecimal("0.01"))); // 零元壹分
+        System.out.println(convertToChinese(new BigDecimal("0.00"))); // 零元
+    }
+}
+

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelFillUtils.java

@@ -144,8 +144,8 @@ public class ExcelFillUtils {
             Row row = sheet.getRow(i);
             for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
                 Cell cell = row.getCell(j);
-                cell.setCellType(CellType.STRING);
                 if (!Objects.isNull(cell)) {
+                    cell.setCellType(CellType.STRING);
                     Pattern pattern = Pattern.compile(FILL_EXPRESSION_REGEX);
                     Matcher matcher = pattern.matcher(cell.getStringCellValue());
                     Map<String, Object> expressionCellMap = new HashMap<>();

+ 233 - 217
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/LoanApplicationServiceImpl.java

@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.FjType;
 import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.PriceConverter.PriceConverter;
 import com.ruoyi.common.utils.jPush.JPushToolUtil;
 import com.ruoyi.common.utils.poi.ExcelFillUtils;
 import com.ruoyi.common.utils.poi.WordUtil;
@@ -41,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.*;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -271,7 +273,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
      * @return 结果
      */
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public int insertLoanApplication(LoanApplication loanApplication) {
         if (loanApplicationMapper.selectLoanApplicationList(loanApplication).size() > 0) {
             return 0;
@@ -326,6 +328,45 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         loanSchedule.setLoanScheduleScore(0L);
         loanSchedule.setLoanScheduleTime(DateUtils.getNowDate());
         loanScheduleMapper.insertLoanSchedule(loanSchedule);
+
+        //查询审核管理员用户id
+        List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
+        List<Long> userIdList = new ArrayList<>();
+        //待办信息集合
+        List<WaitRemind> waitRemindList = new ArrayList<>();
+        if (sysUserRoles != null && sysUserRoles.size() > 0) {
+            userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
+            for (SysUserRole sysUserRole : sysUserRoles) {
+                WaitRemind waitRemindManager = new WaitRemind();
+                waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
+                waitRemindManager.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
+                waitRemindManager.setRemindTitle("有一条【" + loanApplication.getEnterpriseName() + "】贷款申请需及时处理");
+                waitRemindManager.setRemindTime(DateUtils.getNowDate());
+                waitRemindManager.setRemindType(ONE);
+                waitRemindManager.setRemindContent(loanApplication.getEnterpriseName() + "有一条贷款申请进需及时处理");
+                //给管理员发送待办提醒
+                waitRemindManager.setReadUserId(sysUserRole.getUserId().toString());
+                waitRemindList.add(waitRemindManager);
+            }
+        }
+        //插入审核通过的待办提醒
+        if (waitRemindList.size() > 0) {
+            waitRemindMapper.batchWaitRemind(waitRemindList);
+            //发极光推送id
+            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+            if (sysUsers != null && sysUsers.size() > 0) {
+                String notificationTitle = "消息通知";
+                String msgTitle = "审核信息";
+                String msgContent = loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段";
+                String jPushVO = "";
+                List<String> listS = sysUsers.stream().map(SysUser::getJgId).collect(Collectors.toList());
+                listS.removeAll(Collections.singleton(null));
+                if (listS != null && listS.size() > 0) {
+                    String[] registrationId = listS.toArray(new String[listS.size()]);
+                    JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
+                }
+            }
+        }
         return i;
     }
 
@@ -418,6 +459,44 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             guaranteeInfoFjMapper.deleteGuaranteeInfoFjByGuaranteeInfoIds(guaranteeInfoIdList);
         }
         int rows = loanApplicationMapper.updateLoanApplication(loanApplication);
+        //查询审核管理员用户id
+        List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
+        List<Long> userIdList = new ArrayList<>();
+        //待办信息集合
+        List<WaitRemind> waitRemindList = new ArrayList<>();
+        if (sysUserRoles != null && sysUserRoles.size() > 0) {
+            userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
+            for (SysUserRole sysUserRole : sysUserRoles) {
+                WaitRemind waitRemindManager = new WaitRemind();
+                waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
+                waitRemindManager.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
+                waitRemindManager.setRemindTitle("有一条【" + loanApplication.getEnterpriseName() + "】贷款申请需及时处理");
+                waitRemindManager.setRemindTime(DateUtils.getNowDate());
+                waitRemindManager.setRemindType(ONE);
+                waitRemindManager.setRemindContent(loanApplication.getEnterpriseName() + "有一条贷款申请需及时处理");
+                //给管理员发送待办提醒
+                waitRemindManager.setReadUserId(sysUserRole.getUserId().toString());
+                waitRemindList.add(waitRemindManager);
+            }
+        }
+        //插入审核通过的待办提醒
+        if (waitRemindList.size() > 0) {
+            waitRemindMapper.batchWaitRemind(waitRemindList);
+            //发极光推送id
+            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+            if (sysUsers != null && sysUsers.size() > 0) {
+                String notificationTitle = "消息通知";
+                String msgTitle = "审核信息";
+                String msgContent = loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段";
+                String jPushVO = "";
+                List<String> listS = sysUsers.stream().map(SysUser::getJgId).collect(Collectors.toList());
+                listS.removeAll(Collections.singleton(null));
+                if (listS != null && listS.size() > 0) {
+                    String[] registrationId = listS.toArray(new String[listS.size()]);
+                    JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
+                }
+            }
+        }
         return rows > 0 ? AjaxResult.success() : AjaxResult.error();
     }
 
@@ -641,6 +720,10 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         if (Integer.parseInt(auditSchedule) <= Integer.parseInt(auditScheduleOld) && !Objects.equals(auditTypeOld, ONE)) {
             return AjaxResult.error("当前进度已审核,请勿重复审核");
         }
+        //删除所有待办信息
+        WaitRemind waitRemindDelete = new WaitRemind();
+        waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
         List<LoanApplicationFj> fjUrl = reviewComments.getFjUrl();
         if (fjUrl != null && fjUrl.size() > 0) {
             StringBuilder type = new StringBuilder();
@@ -695,16 +778,13 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             }
             waitRemindMapper.batchWaitRemind(waitRemindList);*/
             return AjaxResult.success();
-            //A角色审核不通过 audit_schedule = 2的时候贷款申请进度处于担保初审状态
+            //A角色审核不通过 audit_schedule = 3的时候贷款申请进度处于担保初审状态
         } else if (THR.equals(auditType) && auditSchedule.equals(TWO)) {
             loanApplication.setLoanSchedule(THR);
             loanApplication.setAuditType(FOR);
             loanApplication.setLoanApplicationType(TWO);
             loanApplicationMapper.updateLoanApplication(loanApplication);
-            //删除所有待办信息
-            WaitRemind waitRemindDelete = new WaitRemind();
-            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-            waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
+
             //给A角色,审核管理员发送待办
             WaitRemind waitRemind = new WaitRemind();
             waitRemind.setLoanApplicationId(loanApplicationId);
@@ -719,11 +799,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             if (sysUserRoles != null && sysUserRoles.size() > 0) {
                 userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
                 for (SysUserRole sysUserRole : sysUserRoles) {
-                    //删除已处理的待办信息
-                    waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                    waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                    waitRemindDelete.setRemindType(TWO);
-                    waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
 
                     WaitRemind waitRemindManager = new WaitRemind();
                     waitRemindManager.setLoanApplicationId(loanApplicationId);
@@ -762,10 +837,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             //进入到A角色申诉状态保留当前项目状态,只把audit_type改为申诉
             loanApplication.setAuditType(FOR);
             loanApplicationMapper.updateLoanApplication(loanApplication);
-            //删除所有的待办信息
-            WaitRemind waitRemindDelete = new WaitRemind();
-            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-            waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
+
             //给A角色发送待办提醒
             WaitRemind waitRemind = new WaitRemind();
             waitRemind.setLoanApplicationId(loanApplicationId);
@@ -816,7 +888,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //通过,进入到下一个步骤
         if (TWO.equals(auditType)) {
 
-            WaitRemind waitRemindDelete = new WaitRemind();
             List<Long> userIdList = new ArrayList<>();
 
             WaitRemind waitRemind = new WaitRemind();
@@ -826,9 +897,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             waitRemind.setRemindTime(DateUtils.getNowDate());
             waitRemind.setRemindType(TWO);
             if (auditSchedule.equals(ONE)) {
-                //删除已处理的待办信息
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
+
                 loanApplication.setLoanSchedule(String.valueOf(Integer.parseInt(loanScheduleOld) + 1));
                 loanApplication.setAuditSchedule(String.valueOf(Integer.parseInt(auditSchedule) + 1));
                 loanApplication.setAuditType(ONE);
@@ -873,12 +942,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 loanApplication.setAuditSchedule(String.valueOf(Integer.parseInt(auditSchedule) + 1));
                 loanApplication.setAuditType(ONE);
                 if (auditSchedule.equals(TWO)) {
-                    //删除已处理的待办信息
-
-                    waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                    waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-                    waitRemindDelete.setRemindType(TWO);
-                    waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
                     //给B角色发送待办提醒
                     waitRemind.setReadUserId(loanApplication.getbUserId().toString());
                     waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
@@ -889,11 +952,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                         userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
 
                         for (SysUserRole sysUserRole : sysUserRoles) {
-                            //删除已处理的待办信息
-                            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                            waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                            waitRemindDelete.setRemindType(TWO);
-                            waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
 
                             WaitRemind waitRemindManager = new WaitRemind();
                             waitRemindManager.setLoanApplicationId(loanApplicationId);
@@ -909,14 +967,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                         }
                     }
                     userIdList.add(loanApplication.getbUserId());
-                }
-                if (auditSchedule.equals(THR)) {
-                    //删除已处理的待办信息
+                } else {
 
-                    waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                    waitRemindDelete.setReadUserId(loanApplication.getbUserId().toString());
-                    waitRemindDelete.setRemindType(THR);
-                    waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
                     //给风险角色发送待办提醒
                     waitRemind.setReadUserId(loanApplication.getfUserId().toString());
                     waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
@@ -925,15 +977,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     if (sysUserRoles != null && sysUserRoles.size() > 0) {
                         //极光推送
                         userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
-
-
                         for (SysUserRole sysUserRole : sysUserRoles) {
-                            //删除已处理的待办信息
-                            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                            waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                            waitRemindDelete.setRemindType(THR);
-                            waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
-
                             WaitRemind waitRemindManager = new WaitRemind();
                             waitRemindManager.setLoanApplicationId(loanApplicationId);
                             waitRemindManager.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
@@ -949,17 +993,26 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     }
                     userIdList.add(loanApplication.getfUserId());
                 }
-                //审核流程结束
             } else {
+                //审核流程结束
                 loanApplication.setLoanSchedule(String.valueOf(Integer.parseInt(loanScheduleOld) + 1));
                 loanApplication.setAuditSchedule(String.valueOf(Integer.parseInt(auditSchedule) + 1));
                 loanApplication.setAuditType(ONE);
-                //删除已处理的待办信息
 
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-                waitRemindDelete.setRemindType(auditSchedule);
-                waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
+                if (auditSchedule.equals(FOR)){
+                    //给初审风险合规 状态下的风险发送
+                    WaitRemind waitRemindf = new WaitRemind();
+                    waitRemindf.setLoanApplicationId(loanApplicationId);
+                    waitRemindf.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
+                    waitRemindf.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息通过");
+                    waitRemindf.setRemindTime(DateUtils.getNowDate());
+                    //给风险角色发送待办提醒
+                    waitRemindf.setReadUserId(loanApplication.getfUserId().toString());
+                    waitRemindf.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
+                    waitRemindf.setRemindType(FIV);
+                    waitRemindList.add(waitRemindf);
+                    userIdList.add(loanApplication.getfUserId());
+                }
                 //给A角色发送待办提醒
                 waitRemind.setRemindType(loanApplication.getAuditSchedule());
                 waitRemind.setReadUserId(loanApplication.getaUserId().toString());
@@ -970,11 +1023,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
 
                     for (SysUserRole sysUserRole : sysUserRoles) {
-                        //删除已处理的待办信息
-                        waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                        waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                        waitRemindDelete.setRemindType(auditSchedule);
-                        waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
                         WaitRemind waitRemindManager = new WaitRemind();
                         waitRemindManager.setLoanApplicationId(loanApplicationId);
                         waitRemindManager.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
@@ -1126,10 +1174,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //删除所有状态小于的待办事项
         WaitRemind waitRemindDelete = new WaitRemind();
         waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-        waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-        waitRemindDelete.setRemindType(SEV);
-        //删除所有状态值不等于的待办
-        waitRemindMapper.deleteWaitRemindByLoanApplicationIdAndRemindType(waitRemindDelete);
+        //删除所有待办
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
         //给A角色发送上会审核信息
         WaitRemind waitRemindManager = new WaitRemind();
         waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
@@ -1175,11 +1221,25 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         LoanApplication application = new LoanApplication();
         application.setLoanApplicationId(loanApplication.getLoanApplicationId());
         application.setAuditType(TWO);
-
-
+        //给A角色发送待办提醒
+        //待办信息集合
+        //查询审核管理员用户id
+        List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
+        List<WaitRemind> waitRemindList = new ArrayList<>();
+        List<Long> userIdList = new ArrayList<>();
         if (SEV.equals(loanSchedule)) {
             application.setLoanSchedule(EIG);
             application.setAuditSchedule(NIN);
+            WaitRemind waitRemindf = new WaitRemind();
+            waitRemindf.setLoanApplicationId(loanApplication.getLoanApplicationId());
+            waitRemindf.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
+            waitRemindf.setRemindTitle("您有一条【" + loanApplication.getEnterpriseName() + "】的审核信息进入到下一阶段");
+            waitRemindf.setRemindTime(DateUtils.getNowDate());
+            waitRemindf.setRemindType(application.getAuditSchedule());
+            waitRemindf.setReadUserId(loanApplication.getfUserId().toString());
+            waitRemindf.setRemindContent(loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段");
+            waitRemindList.add(waitRemindf);
+            userIdList.add(loanApplication.getfUserId());
         }
         if (EIG.equals(loanSchedule)) {
             application.setLoanSchedule(NIN);
@@ -1189,14 +1249,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //删除所有状态小于的待办事项
         WaitRemind waitRemindDelete = new WaitRemind();
         waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-        waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-        waitRemindDelete.setRemindType(application.getAuditSchedule());
-        waitRemindMapper.deleteWaitRemindByLoanApplicationIdAndRemindType(waitRemindDelete);
-        //给A角色发送待办提醒
-        //待办信息集合
-        //查询审核管理员用户id
-        List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
-        List<WaitRemind> waitRemindList = new ArrayList<>();
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
+
         WaitRemind waitRemind = new WaitRemind();
         waitRemind.setLoanApplicationId(loanApplication.getLoanApplicationId());
         waitRemind.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
@@ -1206,18 +1260,12 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         waitRemind.setReadUserId(loanApplication.getaUserId().toString());
         waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段");
         waitRemindList.add(waitRemind);
-        List<Long> userIdList = new ArrayList<>();
+        userIdList.add(loanApplication.getaUserId());
         if (sysUserRoles != null && sysUserRoles.size() > 0) {
             //极光推送
             userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
 
-
             for (SysUserRole sysUserRole : sysUserRoles) {
-                //删除所有状态小于的待办事项
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                waitRemindDelete.setRemindType(application.getAuditSchedule());
-                waitRemindMapper.deleteWaitRemindByLoanApplicationIdAndRemindType(waitRemindDelete);
 
                 WaitRemind waitRemindManager = new WaitRemind();
                 waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
@@ -1225,7 +1273,6 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemindManager.setRemindTitle("有一条【" + loanApplication.getEnterpriseName() + "】的审核信息进入到下一阶段");
                 waitRemindManager.setRemindTime(DateUtils.getNowDate());
                 waitRemindManager.setRemindType(application.getAuditSchedule());
-                waitRemindManager.setReadUserId(loanApplication.getaUserId().toString());
                 waitRemindManager.setRemindContent(loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段");
                 //给管理员发送待办提醒
                 waitRemindManager.setReadUserId(sysUserRole.getUserId().toString());
@@ -1271,7 +1318,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
      * @return
      */
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult cx(LoanApplication loanApplication) {
 
         List<Long> userIdList = new ArrayList<>();
@@ -1289,6 +1336,10 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         if (Integer.parseInt(loanSchedule) < 2 || Integer.parseInt(auditSchedule) < 1 || Integer.parseInt(loanApplicationType) != 2) {
             return AjaxResult.error("当前项目不可撤销");
         }
+        //删除所有待办事项
+        WaitRemind waitRemindDelete = new WaitRemind();
+        waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
         if (Integer.parseInt(loanSchedule) > 7) {
             //撤销只返回贷款申请进度到上一步
             loanApplication.setLoanSchedule(String.valueOf(Integer.parseInt(loanSchedule) - 1));
@@ -1334,118 +1385,91 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 //进入待审核
                 loanApplication.setAuditType(ONE);
             }
-            String enterpriseName = loanApplicationOld.getEnterpriseName();
-            String loanApplicationNumber = loanApplicationOld.getLoanApplicationNumber();
-
-            //如果退到 A角色审核 B角色审核 还需要插入待办提醒
-            if (loanApplication.getAuditSchedule().equals(TWO)) {
-                //删除所有待办事项
-                WaitRemind waitRemindDelete = new WaitRemind();
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
-                WaitRemind waitRemind = new WaitRemind();
-                waitRemind.setLoanApplicationId(loanApplicationId);
-                waitRemind.setLoanApplicationNumber(loanApplicationNumber);
-                waitRemind.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息待办");
-                waitRemind.setRemindTime(DateUtils.getNowDate());
-                waitRemind.setRemindType(TWO);
-                //给A角色发送待办提醒
-                waitRemind.setReadUserId(loanApplicationOld.getaUserId().toString());
-                waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
-                waitRemindList.add(waitRemind);
-
-                userIdList.add(loanApplicationOld.getaUserId());
-            }
-            if (loanApplication.getAuditSchedule().equals(THR)) {
-                //删除所有状态小于的待办事项
-                WaitRemind waitRemindDelete = new WaitRemind();
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-
-                waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
-                WaitRemind waitRemind = new WaitRemind();
-                waitRemind.setLoanApplicationId(loanApplicationId);
-                waitRemind.setLoanApplicationNumber(loanApplicationNumber);
-                waitRemind.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息待办");
-                waitRemind.setRemindTime(DateUtils.getNowDate());
-                waitRemind.setRemindType(THR);
-                //给B角色发送待办提醒
-                waitRemind.setReadUserId(loanApplicationOld.getbUserId().toString());
-                waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
-                waitRemindList.add(waitRemind);
-
-                userIdList.add(loanApplicationOld.getbUserId());
-            }
         }
-        loanApplicationMapper.updateLoanApplication2(loanApplication);
-
-
-        //给A角色发送待办提醒
-        //待办信息集合
-/*        //查询审核管理员用户id
-        List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
-        if (ObjectUtils.isNotEmpty(loanApplication.getaUserId())) {
 
-            //删除所有状态小于的待办事项
-            WaitRemind waitRemindDelete = new WaitRemind();
-            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-            waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-            waitRemindDelete.setRemindType(loanSchedule);
-            waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
-
-            WaitRemind waitRemind = new WaitRemind();
-            waitRemind.setLoanApplicationId(loanApplication.getLoanApplicationId());
-            waitRemind.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
-            waitRemind.setRemindTitle("您有一条【" + loanApplication.getEnterpriseName() + "】的信息进行了撤销");
-            waitRemind.setRemindTime(DateUtils.getNowDate());
-            waitRemind.setRemindType(loanSchedule);
-            waitRemind.setReadUserId(loanApplication.getaUserId().toString());
-            waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "的信息进行了撤销");
+        String enterpriseName = loanApplicationOld.getEnterpriseName();
+        String loanApplicationNumber = loanApplicationOld.getLoanApplicationNumber();
+        WaitRemind waitRemind = new WaitRemind();
+        waitRemind.setLoanApplicationId(loanApplicationId);
+        waitRemind.setLoanApplicationNumber(loanApplicationNumber);
+        waitRemind.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息待办");
+        waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
+        waitRemind.setRemindTime(DateUtils.getNowDate());
+        //如果退到 A角色审核 B角色审核 风险审核还需要插入待办提醒
+        if (loanApplication.getAuditSchedule().equals(TWO)) {
+            waitRemind.setRemindType(TWO);
+            //给A角色发送待办提醒
+            waitRemind.setReadUserId(loanApplicationOld.getaUserId().toString());
+            waitRemindList.add(waitRemind);
+            userIdList.add(loanApplicationOld.getaUserId());
+        } else if (loanApplication.getAuditSchedule().equals(THR)) {
+            waitRemind.setRemindType(THR);
+            //给B角色发送待办提醒
+            waitRemind.setReadUserId(loanApplicationOld.getbUserId().toString());
             waitRemindList.add(waitRemind);
+            userIdList.add(loanApplicationOld.getbUserId());
+        } else if (loanApplication.getAuditSchedule().equals(FOR) || loanApplication.getAuditSchedule().equals(NIN)) {
+            waitRemind.setRemindType(loanApplication.getAuditSchedule());
+            //给风险角色发送待办提醒
+            waitRemind.setReadUserId(loanApplicationOld.getfUserId().toString());
+            waitRemindList.add(waitRemind);
+            userIdList.add(loanApplicationOld.getfUserId());
+        } else {
+            //查询审核管理员用户id
+            List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
+            waitRemind.setRemindType(loanApplication.getAuditSchedule());
+            //给A角色发送待办提醒
+            waitRemind.setReadUserId(loanApplicationOld.getaUserId().toString());
+            waitRemindList.add(waitRemind);
+            userIdList.add(loanApplicationOld.getaUserId());
+            //如果退回到初审风险合规  给风险发送待办
+            if (loanApplication.getAuditSchedule().equals(FIV)){
+                WaitRemind waitRemindf = new WaitRemind();
+                waitRemindf.setLoanApplicationId(loanApplicationId);
+                waitRemindf.setLoanApplicationNumber(loanApplicationNumber);
+                waitRemindf.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息待办");
+                waitRemindf.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
+                waitRemindf.setRemindTime(DateUtils.getNowDate());
+                waitRemindf.setReadUserId(loanApplicationOld.getfUserId().toString());
+                waitRemindList.add(waitRemindf);
+                userIdList.add(loanApplicationOld.getfUserId());
+            }
+
             if (sysUserRoles != null && sysUserRoles.size() > 0) {
                 //极光推送
-                List<Long> userIds = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
-                userIdList.addAll(userIds);
-
+                userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
                 for (SysUserRole sysUserRole : sysUserRoles) {
-
-                    //删除所有状态小于的待办事项
-
-                    waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                    waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                    waitRemindDelete.setRemindType(loanSchedule);
-                    waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
-
                     WaitRemind waitRemindManager = new WaitRemind();
                     waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
                     waitRemindManager.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
-                    waitRemindManager.setRemindTitle("有一条【" + loanApplication.getEnterpriseName() + "】的信息进行了撤销");
+                    waitRemindManager.setRemindTitle("有一条【" + loanApplication.getEnterpriseName() + "】的审核信息待办");
                     waitRemindManager.setRemindTime(DateUtils.getNowDate());
-                    waitRemindManager.setRemindType(loanSchedule);
-                    waitRemindManager.setRemindContent(loanApplication.getEnterpriseName() + "的信息进行了撤销");
+                    waitRemindManager.setRemindType(loanApplication.getAuditSchedule());
+                    waitRemindManager.setRemindContent(loanApplication.getEnterpriseName() + "的审核信息申请需及时处理");
                     //给管理员发送待办提醒
                     waitRemindManager.setReadUserId(sysUserRole.getUserId().toString());
                     waitRemindList.add(waitRemindManager);
                 }
             }
-            userIdList.add(loanApplication.getaUserId());
-        }*/
 
-        if (waitRemindList != null && waitRemindList.size() > 0) {
-            waitRemindMapper.batchWaitRemind(waitRemindList);
+        }
+        loanApplicationMapper.updateLoanApplication2(loanApplication);
 
-            //发极光推送id
-            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
-            if (sysUsers != null && sysUsers.size() > 0) {
-                String notificationTitle = "消息通知";
-                String msgTitle = "撤销信息";
-                String msgContent = loanApplication.getEnterpriseName() + "的信息进行了撤销";
-                String jPushVO = "";
-                List<String> listS = sysUsers.stream().map(SysUser::getJgId).collect(Collectors.toList());
-                listS.removeAll(Collections.singleton(null));
-                if (listS != null && listS.size() > 0) {
-                    String[] registrationId = listS.toArray(new String[listS.size()]);
-                    JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
-                }
+        //插入待办事项
+        waitRemindMapper.batchWaitRemind(waitRemindList);
+
+        //极光推送
+        List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+        if (sysUsers != null && sysUsers.size() > 0) {
+            String notificationTitle = "消息通知";
+            String msgTitle = "审核信息";
+            String msgContent = loanApplication.getEnterpriseName() + "的审核信息申请需及时处理";
+            String jPushVO = "";
+            List<String> listS = sysUsers.stream().map(SysUser::getJgId).collect(Collectors.toList());
+            listS.removeAll(Collections.singleton(null));
+            if (listS != null && listS.size() > 0) {
+                String[] registrationId = listS.toArray(new String[listS.size()]);
+                JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
             }
         }
 
@@ -1647,7 +1671,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //删除所有代办提醒
         WaitRemind waitRemindDelete = new WaitRemind();
         waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-        waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
         return AjaxResult.success();
     }
 
@@ -1662,15 +1686,13 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //删除所有状态小于的待办事项
         WaitRemind waitRemindDelete = new WaitRemind();
         waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-        waitRemindDelete.setReadUserId(loanApplication.getaUserId().toString());
-        waitRemindDelete.setRemindType(TEN);
-        waitRemindMapper.deleteWaitRemindByLoanApplicationIdAndRemindType(waitRemindDelete);
+        waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
         WaitRemind waitRemind = new WaitRemind();
         waitRemind.setLoanApplicationId(loanApplication.getLoanApplicationId());
         waitRemind.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
         waitRemind.setRemindTitle("您有一条风险部暂缓出具【" + loanApplication.getEnterpriseName() + "】放款合规表的申请");
         waitRemind.setRemindTime(DateUtils.getNowDate());
-        waitRemind.setRemindType(NIN);
+        waitRemind.setRemindType(FOU);
         //给A角色发送待办提醒
         waitRemind.setReadUserId(loanApplication.getaUserId().toString());
         //getRemark()风险部暂缓出具的原因
@@ -1680,17 +1702,13 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
         if (sysUserRoles != null && sysUserRoles.size() > 0) {
             for (SysUserRole sysUserRole : sysUserRoles) {
-                //删除所有状态小于的待办事项
-                waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
-                waitRemindDelete.setReadUserId(sysUserRole.getUserId().toString());
-                waitRemindDelete.setRemindType(TEN);
-                waitRemindMapper.deleteWaitRemindByLoanApplicationId(waitRemindDelete);
+
                 WaitRemind waitRemindRole = new WaitRemind();
                 waitRemindRole.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 waitRemindRole.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
                 waitRemindRole.setRemindTitle("您有一条风险部暂缓出具【" + loanApplication.getEnterpriseName() + "】放款合规表的申请");
                 waitRemindRole.setRemindTime(DateUtils.getNowDate());
-                waitRemindRole.setRemindType(NIN);
+                waitRemindRole.setRemindType(FOU);
                 //给管理员发送待办提醒
                 waitRemindRole.setReadUserId(sysUserRole.getUserId().toString());
                 //getRemark()风险部暂缓出具的原因
@@ -1826,10 +1844,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         String backName = dictDataMapper.selectDictLabel("shendai_bank", loanApplication.getApplicationBank());
         params.put("backName", backName);
         //将贷款金额转成中文
-        String chineseNum = loanApplication.getLoanApplicationNumber();
-        if (StringUtils.isNumeric(loanApplication.getLoanApplicationNumber())) {
-            chineseNum = StringUtils.convert(Integer.parseInt(loanApplication.getLoanApplicationNumber()));
-        }
+        String chineseNum = PriceConverter.convertToChinese(new BigDecimal(Double.toString(loanApplication.getApplicationAmount())));
         params.put("chineseNum", chineseNum);
 
         String templatePath = RuoYiConfig.getProfile();
@@ -1861,7 +1876,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         LoanApplicationFj loanApplicationFjTzs = new LoanApplicationFj();
 
         // 创建一个列表,用来存储要填充到Excel中的数据
-        List<Map<String,String>> list = new ArrayList<>();
+        List<Map<String, String>> list = new ArrayList<>();
         switch (type) {
             case "1":
                 //params.put("enterpriseName", loanApplication.getEnterpriseName());
@@ -2029,7 +2044,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     for (ShareholderFj fj : shareholderFjs) {
                         if (StringUtils.isNotEmpty(fj.getShareholderBusinessUrl())) {
                             String shareholderName = "";
-                            if(StringUtils.isNotEmpty(fj.getShareholderName()) && !StringUtils.equals("null",fj.getShareholderName())){
+                            if (StringUtils.isNotEmpty(fj.getShareholderName()) && !StringUtils.equals("null", fj.getShareholderName())) {
                                 shareholderName = fj.getShareholderName();
                             }
                             params.put("gsName", shareholderName);
@@ -2064,7 +2079,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 if (guaranteeInfos != null && guaranteeInfos.size() > 0) {
                     for (GuaranteeInfo info : guaranteeInfos) {
                         String guaranteeName = "";
-                        if(StringUtils.isNotEmpty(info.getGuaranteeName()) && !StringUtils.equals("null",info.getGuaranteeName()) ){
+                        if (StringUtils.isNotEmpty(info.getGuaranteeName()) && !StringUtils.equals("null", info.getGuaranteeName())) {
                             guaranteeName = info.getGuaranteeName();
                         }
                         params.put("gsName", guaranteeName);
@@ -2099,26 +2114,26 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 //公司住址
                 //公司住址
                 excelMap.put("address", "");
-                if(StringUtils.isNotEmpty(sysUserEnterprise.getEnterpriseAddress())){
+                if (StringUtils.isNotEmpty(sysUserEnterprise.getEnterpriseAddress())) {
                     excelMap.put("address", sysUserEnterprise.getEnterpriseAddress());
                 }
                 //家庭住址
                 excelMap.put("fraddress", "");
-                if(StringUtils.isNotEmpty(loanApplication.getCorporationAddress())){
+                if (StringUtils.isNotEmpty(loanApplication.getCorporationAddress())) {
                     excelMap.put("fraddress", loanApplication.getCorporationAddress());
                 }
                 //申请金额
                 excelMap.put("sqje", Double.toString(loanApplication.getApplicationAmount()));
                 //申请期限
                 excelMap.put("sqqx", "");
-                if(StringUtils.isNotEmpty(loanApplication.getUsagePeriod())){
+                if (StringUtils.isNotEmpty(loanApplication.getUsagePeriod())) {
                     excelMap.put("sqqx", loanApplication.getUsagePeriod());
                 }
                 //申请银行
                 excelMap.put("bank", loanApplication.getApplicationBank());
                 //还款方式
                 excelMap.put("hkfs", "");
-                if(StringUtils.isNotEmpty(loanApplication.getRepaymentSource())){
+                if (StringUtils.isNotEmpty(loanApplication.getRepaymentSource())) {
                     excelMap.put("hkfs", loanApplication.getRepaymentSource());
                 }
                 //参会日期
@@ -2269,7 +2284,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 excelMap.put("sqje", Double.toString(loanApplication.getActuallyAmount()));
                 //申请期限
                 excelMap.put("sqqx", "");
-                if(StringUtils.isNotEmpty(loanApplication.getUsagePeriod())){
+                if (StringUtils.isNotEmpty(loanApplication.getUsagePeriod())) {
                     excelMap.put("sqqx", loanApplication.getUsagePeriod());
                 }
                 //申请银行
@@ -2291,7 +2306,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 excelMap.put("sqje", Double.toString(loanApplication.getActuallyAmount()));
                 //申请期限
                 excelMap.put("sqqx", "");
-                if(StringUtils.isNotEmpty(loanApplication.getUsagePeriod())){
+                if (StringUtils.isNotEmpty(loanApplication.getUsagePeriod())) {
                     excelMap.put("sqqx", loanApplication.getUsagePeriod());
                 }
                 //申请银行
@@ -2342,45 +2357,45 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
 
                         //分支行
                         excelMap.put("fzh", (String) imgMap.get("dkdw"));
-                        System.out.println("111"+imgMap.get("dkdw"));
+                        System.out.println("111" + imgMap.get("dkdw"));
                         //总行
-                        excelMap.put("zh", (String)imgMap.get("zh"));
-                        System.out.println("222"+imgMap.get("zh"));
+                        excelMap.put("zh", (String) imgMap.get("zh"));
+                        System.out.println("222" + imgMap.get("zh"));
                         //起始日期
-                        excelMap.put("qsrq", (String)imgMap.get("qxr"));
-                        System.out.println("333"+imgMap.get("qxr"));
+                        excelMap.put("qsrq", (String) imgMap.get("qxr"));
+                        System.out.println("333" + imgMap.get("qxr"));
                         //到期日期
-                        excelMap.put("dqrq", (String)imgMap.get("dqr"));
-                        System.out.println("444"+imgMap.get("dqr"));
+                        excelMap.put("dqrq", (String) imgMap.get("dqr"));
+                        System.out.println("444" + imgMap.get("dqr"));
                         //贷款利率
-                        excelMap.put("dklv", (String)imgMap.get("dklv"));
-                        System.out.println("555"+imgMap.get("dklv"));
+                        excelMap.put("dklv", (String) imgMap.get("dklv"));
+                        System.out.println("555" + imgMap.get("dklv"));
                     }
                 }
 
                 //所属行业
-                if(StringUtils.isNotEmpty(loanApplication.getCategoryType())){
+                if (StringUtils.isNotEmpty(loanApplication.getCategoryType())) {
                     excelMap.put("sshy", loanApplication.getCategoryType());
                 }
                 //主债权金额
                 //查询最新的一条投票数据
                 userConference = sysUserConferenceMapper.selectSysUserConferenceNew(loanApplication.getLoanApplicationId());
-                if(StringUtils.isNotEmpty(userConference.getLineGuarantee())){
+                if (StringUtils.isNotEmpty(userConference.getLineGuarantee())) {
                     excelMap.put("zzqje", userConference.getLineGuarantee());
                 }
                 //债务人名称
                 excelMap.put("zwrmc", "");
-                if(StringUtils.isNotEmpty(loanApplication.getEnterpriseName())){
+                if (StringUtils.isNotEmpty(loanApplication.getEnterpriseName())) {
                     excelMap.put("zwrmc", loanApplication.getEnterpriseName());
                 }
                 //法定代表人姓名
                 excelMap.put("fddbrxm", "");
-                if(StringUtils.isNotEmpty(loanApplication.getCorporationName())){
+                if (StringUtils.isNotEmpty(loanApplication.getCorporationName())) {
                     excelMap.put("fddbrxm", loanApplication.getCorporationName());
                 }
                 //法定代表人证件号码
                 excelMap.put("fddbrzjhm", "");
-                if(StringUtils.isNotEmpty(loanApplication.getCorporationIdCard())){
+                if (StringUtils.isNotEmpty(loanApplication.getCorporationIdCard())) {
                     excelMap.put("fddbrzjhm", loanApplication.getCorporationIdCard());
                 }
                 //保证合同号
@@ -2394,21 +2409,21 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 loanApplicationFj.setLoanApplicationId(loanApplication.getLoanApplicationId());
                 loanApplicationFj.setType("qtfj");
                 List<LoanApplicationFj> applicationFjList = loanApplicationFjMapper.selectLoanApplicationFjList(loanApplicationFj);
-                if(applicationFjList!=null && applicationFjList.size()>0){
+                if (applicationFjList != null && applicationFjList.size() > 0) {
                     for (LoanApplicationFj applicationFj : applicationFjList) {
-                        if(applicationFj.getName().contains("保证合同")){
+                        if (applicationFj.getName().contains("保证合同")) {
                             //服务器路径
                             String urlOnline = applicationFj.getUrl() + loanApplicationFjTzs.getUrl().replace("/profile/upload", "");
                             String bzhth = IdCardUtil.accurateBasicCjpdf(urlOnline);
                             excelMap.put("bzhth", bzhth);
-                            System.out.println("666"+bzhth);
+                            System.out.println("666" + bzhth);
                         }
-                        if(applicationFj.getName().contains("流动资金贷款合同")){
+                        if (applicationFj.getName().contains("流动资金贷款合同")) {
                             //服务器路径
                             String urlOnline = applicationFj.getUrl() + loanApplicationFjTzs.getUrl().replace("/profile/upload", "");
                             String ldzjdkhth = IdCardUtil.accurateBasicCjpdf(urlOnline);
                             excelMap.put("ldzjdkhth", ldzjdkhth);
-                            System.out.println("777"+ldzjdkhth);
+                            System.out.println("777" + ldzjdkhth);
                         }
 
                     }
@@ -2420,6 +2435,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 fileNameHz = fileName + ".xlsx";
                 templatePath = RuoYiConfig.getProfile() + "/mb/担保业务备案表.xlsx";
                 fileDir = RuoYiConfig.getProfile() + "/mb/temporarily/" + loanApplicationNumber + "/" + fileNameHz;
+                System.out.println(list.get(0).toString());
                 sheet = ExcelFillUtils.fillOneSheet(templatePath, fileDir, "Sheet1", list);
 
                 path = path + "/" + fileNameHz;

+ 59 - 20
ruoyi-system/src/main/java/com/ruoyi/system/domain/idcard/SysUserIdcard.java

@@ -1,11 +1,9 @@
 package com.ruoyi.system.domain.idcard;
 
-import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
-import com.ruoyi.system.domain.loan.LoanApplication;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
+import com.ruoyi.system.domain.loan.LoanApplication;
 
 import java.util.List;
 
@@ -48,6 +46,10 @@ public class SysUserIdcard extends BaseEntity
     /** 反面地址 */
     @Excel(name = "反面地址")
     private String back;
+    /**
+     * H5新增是使用
+     */
+    private String certifyId;
     /**
      * 企业数量
      */
@@ -65,6 +67,41 @@ public class SysUserIdcard extends BaseEntity
      */
     private List<LoanApplication> loanApplicationList;
 
+    /**
+     * MetaInfo环境参数,需要通过客户端SDK获取
+     *
+     * {"zimVer":"3.0.0","appVersion": "1","bioMetaInfo": "4.1.0:1150****,0","appName": "com.aliyun.antcloudauth","deviceType": "ios","osVersion": "iOS 10.3.2","apdidToken": "","deviceModel": "iPhone9,1"}
+     */
+    private String metaInfo;
+    /**
+     *     您的业务页面回跳的目标地址。
+     */
+    private String returnUrl;
+
+    public String getMetaInfo() {
+        return metaInfo;
+    }
+
+    public void setMetaInfo(String metaInfo) {
+        this.metaInfo = metaInfo;
+    }
+
+    public String getReturnUrl() {
+        return returnUrl;
+    }
+
+    public void setReturnUrl(String returnUrl) {
+        this.returnUrl = returnUrl;
+    }
+
+    public String getCertifyId() {
+        return certifyId;
+    }
+
+    public void setCertifyId(String certifyId) {
+        this.certifyId = certifyId;
+    }
+
     public Integer getSysUserEnterpriseNum() {
         return sysUserEnterpriseNum;
     }
@@ -184,21 +221,23 @@ public class SysUserIdcard extends BaseEntity
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("idCard", getIdCard())
-            .append("realName", getRealName())
-            .append("expirationDate", getExpirationDate())
-            .append("phonenumber", getPhonenumber())
-            .append("address", getAddress())
-            .append("front", getFront())
-            .append("back", getBack())
-            .append("delFlag", getDelFlag())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .toString();
+        return "SysUserIdcard{" +
+                "userId=" + userId +
+                ", idCard='" + idCard + '\'' +
+                ", realName='" + realName + '\'' +
+                ", expirationDate='" + expirationDate + '\'' +
+                ", phonenumber='" + phonenumber + '\'' +
+                ", address='" + address + '\'' +
+                ", front='" + front + '\'' +
+                ", back='" + back + '\'' +
+                ", certifyId='" + certifyId + '\'' +
+                ", sysUserEnterpriseNum=" + sysUserEnterpriseNum +
+                ", sysUserEnterpriseList=" + sysUserEnterpriseList +
+                ", loanApplicationNum=" + loanApplicationNum +
+                ", loanApplicationList=" + loanApplicationList +
+                ", metaInfo='" + metaInfo + '\'' +
+                ", returnUrl='" + returnUrl + '\'' +
+                ", delFlag='" + delFlag + '\'' +
+                '}';
     }
 }

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

@@ -1,14 +1,15 @@
 package com.ruoyi.system.domain.loan;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.system.domain.enterprise.SysUserEnterprise;
 import com.ruoyi.system.domain.guarantee.GuaranteeInfo;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 贷款申请主对象 loan_application
  * 
@@ -251,8 +252,8 @@ public class LoanApplication extends BaseEntity
     /** 贷款申请进度名称(中文字) */
     private String loanScheduleName;
 
-    /** 审核进度1:业务审核/分配 2:A角色审核 3:B角色审核 4:风险审核 5:初审风险合规 6:尽职调查 7:上会评审 */
-    @Excel(name = "审核进度1:业务审核/分配 2:A角色审核 3:B角色审核 4:风险审核 5:尽职调查 6:初审风险合规 7:上会评审")
+    /** 审核进度1:业务审核/分配 2:A角色审核 3:B角色审核 4:风险审核 5:初审风险合规 6:尽职调查 7:上会评审 8:合同签约 9:放款合规风险审核 10:放款通知 11:归档 */
+    @Excel(name = "审核进度1:业务审核/分配 2:A角色审核 3:B角色审核 4:风险审核 5:初审风险合规 6:尽职调查 7:上会评审 8:合同签约 9:放款合规风险审核 10:放款通知 11:归档")
     private String auditSchedule;
 
     /** 审核状态 1:待审核 2:已通过 3:未通过 4:申诉*/

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

@@ -1,15 +1,15 @@
 package com.ruoyi.system.domain.review;
 
-import java.util.Date;
-import java.util.List;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.system.domain.conference.SysUserConference;
 import com.ruoyi.system.domain.loan.LoanApplicationFj;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * 业务审核意见对象 review_comments
@@ -37,7 +37,7 @@ public class ReviewComments extends BaseEntity
     private String auditSchedule;
 
     /** 审核状态 1:待审核 2:已通过 3:未通过  4:申诉 5:撤销*/
-    @Excel(name = "审核状态 1:待审核 2:已通过 3:未通过 4:申诉")
+    @Excel(name = "审核状态 1:待审核 2:已通过 3:未通过 4:申诉 5:撤销")
     private String auditType;
 
     /** 审核意见 */

+ 72 - 31
ruoyi-system/src/main/java/com/ruoyi/system/service/conference/impl/SysUserConferenceServiceImpl.java

@@ -137,8 +137,8 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
         loanApplication.setReviewTime(sysUserConference.getConferenceTime());
         loanApplication.setReviewSchedule(FOR);
         loanApplicationMapper.updateLoanApplication(loanApplication);
-        
-        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber()+"tp",FOR);
+
+        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber() + "tp", FOR);
 
         //查询参会人员的字典值
         List<SysDictData> data = dictTypeService.selectDictDataByType("conference_role");
@@ -150,7 +150,7 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
         Random random = new Random();
         while (num < 5) {
             int randomNumber = random.nextInt(userList.size() - 1);
-            if(intList.size()>0 && intList.contains(randomNumber)){
+            if (intList.size() > 0 && intList.contains(randomNumber)) {
                 continue;
             }
             SysUser sysUser = userList.get(randomNumber);
@@ -179,19 +179,19 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
                 waitRemind.setRemindTime(DateUtils.getNowDate());
                 waitRemind.setRemindType("12");
                 waitRemind.setReadUserId(sysUser.getUserId().toString());
-                waitRemind.setRemindContent("您有一个评审会议需参加,会议时间:"+sysUserConference.getConferenceTime()+",会议主题:【"+loanApplication.getEnterpriseName()+"】评审会");
+                waitRemind.setRemindContent("您有一个评审会议需参加,会议时间:" + sysUserConference.getConferenceTime() + ",会议主题:【" + loanApplication.getEnterpriseName() + "】评审会");
                 waitRemindMapper.insertWaitRemind(waitRemind);
                 num++;
                 intList.add(randomNumber);
 
                 //发极光推送
                 SysUser user = sysUserService.selectUserById(sysUser.getUserId());
-                if(StringUtils.isNotEmpty(user.getJgId())){
+                if (StringUtils.isNotEmpty(user.getJgId())) {
                     String notificationTitle = "消息通知";
                     String msgTitle = "评审会议";
-                    String msgContent = "您有一个评审会议需参加,会议时间:"+sysUserConference.getConferenceTime()+",会议主题:【"+loanApplication.getEnterpriseName()+"】评审会";
+                    String msgContent = "您有一个评审会议需参加,会议时间:" + sysUserConference.getConferenceTime() + ",会议主题:【" + loanApplication.getEnterpriseName() + "】评审会";
                     String jPushVO = "";
-                    JPushToolUtil.sendToRegistrationId(notificationTitle,msgTitle,msgContent,jPushVO,user.getJgId());
+                    JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, user.getJgId());
                 }
             }
         }
@@ -201,22 +201,21 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
     @Override
     public AjaxResult timeTist(SysUserConference sysUserConference) {
         List<SysUserConference> sysUserConferences = sysUserConferenceMapper.selectSysUserConferenceList(sysUserConference);
-        List<Map<String,Object>> listMap = new ArrayList<>();
-        if(sysUserConferences==null || sysUserConferences.size()<=0){
+        List<Map<String, Object>> listMap = new ArrayList<>();
+        if (sysUserConferences == null || sysUserConferences.size() <= 0) {
             return AjaxResult.success(listMap);
         }
-        Map<String,List<SysUserConference>> map = sysUserConferences.stream().collect(Collectors.groupingBy(SysUserConference::getConferenceTime));
+        Map<String, List<SysUserConference>> map = sysUserConferences.stream().collect(Collectors.groupingBy(SysUserConference::getConferenceTime));
 
         //根据时间进行升序排序
         Map<String, List<SysUserConference>> result = new LinkedHashMap<>();
         map.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByKey())).forEachOrdered(x -> result.put(x.getKey(), x.getValue()));
 
 
-
         for (Map.Entry<String, List<SysUserConference>> entry : result.entrySet()) {
-            Map<String,Object> resultMap = new HashMap<>();
-            resultMap.put("conferenceTime",entry.getKey());
-            resultMap.put("children",entry.getValue());
+            Map<String, Object> resultMap = new HashMap<>();
+            resultMap.put("conferenceTime", entry.getKey());
+            resultMap.put("children", entry.getValue());
             listMap.add(resultMap);
         }
         return AjaxResult.success(listMap);
@@ -232,7 +231,7 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
     @Transactional
     public AjaxResult vote(SysUserConference sysUserConference) {
         //将状态改为投票中
-        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber()+"tp",ONE);
+        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber() + "tp", ONE);
         SysUser user = SecurityUtils.getLoginUser().getUser();
         //查询所有人员的投票结果
         List<SysUserConference> sysUserConferences = sysUserConferenceMapper.selectSysUserConferenceList(sysUserConference);
@@ -241,19 +240,19 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
         //是否重复投票
         Boolean bn = false;
         for (SysUserConference userConference : sysUserConferences) {
-            if(user.getUserId().equals(userConference.getUserId())){
+            if (user.getUserId().equals(userConference.getUserId())) {
                 bo = true;
-                if(StringUtils.isNotEmpty(userConference.getVotingResult())){
+                if (StringUtils.isNotEmpty(userConference.getVotingResult())) {
                     bn = true;
                 }
                 break;
             }
         }
         //为 false 时表示不在
-        if(!bo){
+        if (!bo) {
             return AjaxResult.error("不是当前项目投票人员,投票失败");
         }
-        if(bn){
+        if (bn) {
             return AjaxResult.error("请勿重复投票");
         }
 
@@ -263,23 +262,23 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
         //除了本人外是否全部投票
         //不同意人数
         int bty = 0;
-        if("N".equals(sysUserConference.getVotingResult())){
+        if ("N".equals(sysUserConference.getVotingResult())) {
             bty++;
         }
         for (SysUserConference userConference : sysUserConferences) {
             //是否有人未投票
-            if(!userConference.getUserId().equals(user.getUserId()) && StringUtils.isEmpty(userConference.getVotingResult())){
+            if (!userConference.getUserId().equals(user.getUserId()) && StringUtils.isEmpty(userConference.getVotingResult())) {
                 //有人未投票就直接返回结果
                 return AjaxResult.success("成功");
             }
             //排除掉本人
-            if(!userConference.getUserId().equals(user.getUserId()) && StringUtils.isNotEmpty(userConference.getVotingResult()) && "N".equals(userConference.getVotingResult())){
+            if (!userConference.getUserId().equals(user.getUserId()) && StringUtils.isNotEmpty(userConference.getVotingResult()) && "N".equals(userConference.getVotingResult())) {
                 bty++;
             }
 
         }
-        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber()+"tp",TWO);
-        if(bty>=2){
+        redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber() + "tp", TWO);
+        if (bty >= 2) {
             //修改主表信息 未通过
             LoanApplication loanApplication = new LoanApplication();
             loanApplication.setAuditType(FOR);
@@ -304,27 +303,27 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
         //判断所有人的金额是否一样
         //最后一个投票人员
         String je = sysUserConference.getLineGuarantee();
-        if("N".equals(sysUserConference.getVotingResult())){
+        if ("N".equals(sysUserConference.getVotingResult())) {
             for (SysUserConference userConference : sysUserConferences) {
-                if(StringUtils.isNotEmpty(userConference.getLineGuarantee())){
+                if (StringUtils.isNotEmpty(userConference.getLineGuarantee())) {
                     je = userConference.getLineGuarantee();
                 }
             }
         }
         Boolean bl = true;
         for (SysUserConference userConference : sysUserConferences) {
-            if(!userConference.getUserId().equals(user.getUserId()) && !je.equals(userConference.getLineGuarantee())){
+            if (!userConference.getUserId().equals(user.getUserId()) && !je.equals(userConference.getLineGuarantee())) {
                 bl = false;
                 break;
             }
         }
         //不一样
-        if(!bl){
-            redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber()+"tp",THR);
+        if (!bl) {
+            redisCache.setCacheObject(sysUserConference.getLoanApplicationNumber() + "tp", THR);
             return AjaxResult.success("成功,投票金额不同,请通知管理员重新发起投票");
         }
 
-        if(bty<2){
+        if (bty < 2) {
             //修改主表信息 通过
             LoanApplication loanApplication = new LoanApplication();
             loanApplication.setAuditType(ONE);
@@ -334,6 +333,48 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
             loanApplication.setActuallyAmount(Double.parseDouble(je));
             loanApplication.setLoanApplicationId(sysUserConference.getLoanApplicationId());
             loanApplicationMapper.updateLoanApplication(loanApplication);
+            //查询信息
+            List<Long> userIdList = new ArrayList<>();
+            List<WaitRemind> waitRemindList = new ArrayList<>();
+            LoanApplication loanApplicationOld = loanApplicationMapper.selectLoanApplicationByLoanApplicationId(sysUserConference.getLoanApplicationId());
+            //发送待办消息
+            //删除所有待办事项
+            WaitRemind waitRemindDelete = new WaitRemind();
+            waitRemindDelete.setLoanApplicationId(loanApplication.getLoanApplicationId());
+            waitRemindMapper.deleteWaitRemindByLoanApplicationIdOnly(waitRemindDelete);
+            //给A发送待办消息
+            WaitRemind waitRemind = new WaitRemind();
+            waitRemind.setLoanApplicationId(loanApplicationOld.getLoanApplicationId());
+            waitRemind.setLoanApplicationNumber(loanApplicationOld.getLoanApplicationNumber());
+            String enterpriseName = loanApplicationOld.getEnterpriseName();
+            waitRemind.setRemindTitle("您有一条【" + enterpriseName + "】的审核信息待办");
+            waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
+            waitRemind.setRemindTime(DateUtils.getNowDate());
+            //如果退到 A角色审核 B角色审核 风险审核还需要插入待办提醒
+            waitRemind.setRemindType(loanApplication.getAuditSchedule());
+            //给A角色发送待办提醒
+            waitRemind.setReadUserId(loanApplicationOld.getaUserId().toString());
+            waitRemindList.add(waitRemind);
+            userIdList.add(loanApplicationOld.getaUserId());
+
+            //插入待办事项
+            waitRemindMapper.batchWaitRemind(waitRemindList);
+            //发极光推送id
+            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+            if (sysUsers != null && sysUsers.size() > 0) {
+                String notificationTitle = "消息通知";
+                String msgTitle = "撤销信息";
+                String msgContent = loanApplication.getEnterpriseName() + "的信息进行了撤销";
+                String jPushVO = "";
+                List<String> listS = sysUsers.stream().map(SysUser::getJgId).collect(Collectors.toList());
+                listS.removeAll(Collections.singleton(null));
+                if (listS != null && listS.size() > 0) {
+                    String[] registrationId = listS.toArray(new String[listS.size()]);
+                    JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
+                }
+            }
+
+
             // todo 通过 业务流程表插入数据
             //业务审核意见
             ReviewComments reviewComments = new ReviewComments();
@@ -354,7 +395,7 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
     @Transactional
     public AjaxResult again(SysUserConference sysUserConference) {
         //删除投票状态
-        redisCache.deleteObject(sysUserConference.getLoanApplicationNumber()+"tp");
+        redisCache.deleteObject(sysUserConference.getLoanApplicationNumber() + "tp");
         //查询最新的投票人员
         //查询贷款表信息
         LoanApplication loanApplication = loanApplicationMapper.selectLoanApplicationByLoanApplicationId(sysUserConference.getLoanApplicationId());

+ 2 - 2
ruoyi-system/src/main/resources/mapper/system/SysUserConferenceMapper.xml

@@ -73,10 +73,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="guaranteePeriod != null  ">guarantee_period ,</if>
             <if test="argument != null  ">argument,</if>
             <if test="createBy != null">create_by,</if>
-            <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
+            create_time
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="userId != null">#{userId},</if>
@@ -93,10 +93,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="guaranteePeriod != null  ">#{guaranteePeriod},</if>
             <if test="argument != null  ">#{argument},</if>
             <if test="createBy != null">#{createBy},</if>
-            <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
+            sysdate()
          </trim>
     </insert>
     <insert id="batchSysUserConference">