LIVE_YE преди 9 месеца
родител
ревизия
1fd6b618fe

+ 6 - 0
ruoyi-admin/pom.xml

@@ -72,6 +72,12 @@
             <version>7.15.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
     </dependencies>
 
     <build>

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

@@ -18,6 +18,7 @@ spring:
   messages:
     # 国际化资源文件路径
     basename: i18n/messages
+
   profiles:
     active: druid
 #    active: prod

+ 12 - 0
ruoyi-common/pom.xml

@@ -224,6 +224,18 @@
             <scope>compile</scope>
         </dependency>
 
+        <!---->
+        <dependency>
+            <groupId>cn.jpush.api</groupId>
+            <artifactId>jpush-client</artifactId>
+            <version>3.4.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.jpush.api</groupId>
+            <artifactId>jiguang-common</artifactId>
+            <version>1.1.7</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 11 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -25,6 +25,9 @@ public class SysUser extends BaseEntity
     @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
     private Long userId;
 
+    /** 极光id */
+    private String jgId;
+
     /** 部门ID */
     @Excel(name = "部门编号", type = Type.IMPORT)
     private Long deptId;
@@ -321,6 +324,14 @@ public class SysUser extends BaseEntity
         this.roleId = roleId;
     }
 
+    public String getJgId() {
+        return jgId;
+    }
+
+    public void setJgId(String jgId) {
+        this.jgId = jgId;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 140 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/jPush/AbstractJPushToolUtil.java

@@ -0,0 +1,140 @@
+package com.ruoyi.common.utils.jPush;
+
+import cn.jiguang.common.resp.APIConnectionException;
+import cn.jiguang.common.resp.APIRequestException;
+import cn.jpush.api.JPushClient;
+import cn.jpush.api.push.PushResult;
+import cn.jpush.api.push.model.Message;
+import cn.jpush.api.push.model.Options;
+import cn.jpush.api.push.model.Platform;
+import cn.jpush.api.push.model.PushPayload;
+import cn.jpush.api.push.model.audience.Audience;
+import cn.jpush.api.push.model.notification.AndroidNotification;
+import cn.jpush.api.push.model.notification.IosAlert;
+import cn.jpush.api.push.model.notification.Notification;
+import com.alibaba.fastjson2.JSON;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public abstract class AbstractJPushToolUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(AbstractJPushToolUtil.class);
+
+    /*@Autowired
+    private JPushConfig jPush;*/
+
+    protected static AbstractJPushToolUtil abstractJPushToolUtils;
+
+    @PostConstruct
+    public void init() {
+        abstractJPushToolUtils = this;
+    }
+
+
+    private final static String appKey = "275af46e0d888270da3cfd1d";
+
+    private final static String masterSecret = "47047dfe7509f243bb8e25c7";
+
+    private static JPushClient jPushClient = new JPushClient(masterSecret, appKey);
+
+    /**
+     * 发送给指定极光Id
+     *
+     * @param registrationId
+     * @param notificationTitle
+     * @param msgTitle
+     * @param msgContent
+     * @param jPushVO
+     * @return
+     */
+    public static boolean sendToRegistrationId1(String notificationTitle, String
+            msgTitle, String msgContent, String jPushVO, String... registrationId) {
+        boolean result = false;
+        try {
+            PushPayload pushPayload = buildPushObject_all_registrationId_alertWithTitle
+                    (notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
+            //TODO
+            if(pushPayload == null){
+                return result;
+            }
+            log.info("极光推送入参信息pushPayload:{}", JSON.toJSONString(pushPayload));
+            PushResult pushResult = jPushClient.sendPush(pushPayload);
+            log.info("极光推送出参信息pushResult:{}", JSON.toJSONString(pushResult));
+            if (pushResult.getResponseCode() == 200) {
+                result = true;
+            }
+        } catch (APIConnectionException e) {
+            e.printStackTrace();
+        } catch (APIRequestException e) {
+            e.printStackTrace();
+        }
+        return result;
+
+    }
+    /**
+     * 给指定设备id推送
+     *
+     * @param notificationTitle 通知标题
+     * @param msgTitle          消息标题
+     * @param msgContent        消息内容
+     * @param jPushVO       附加字段
+     * @param registrationId     设备id
+     * @return
+     */
+
+    private static PushPayload buildPushObject_all_registrationId_alertWithTitle(
+            String notificationTitle, String msgTitle, String msgContent, String jPushVO, String... registrationId) {
+        return PushPayload.newBuilder()
+                //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
+                .setPlatform(Platform.all())
+                //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
+                .setAudience(Audience.registrationId(registrationId))
+                //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
+                .setNotification(Notification.newBuilder()
+                        //指定当前推送的android通知
+                        .addPlatformNotification(
+                                AndroidNotification.newBuilder()
+                                        .setTitle(notificationTitle)
+                                        .setAlert(msgContent)
+                                        //此字段为透传字段(类型被极光限定,不能传object),不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
+                                        .addExtra("data", JSON.toJSONString(jPushVO))
+                                        .build())
+                        .build())
+
+                //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
+                // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
+                // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
+                .setMessage(Message.newBuilder()
+                        .setMsgContent(msgContent)
+                        .setTitle(msgTitle)
+                        .addExtra("data", JSON.toJSONString(jPushVO))
+                        .build())
+                .setOptions(Options.newBuilder()
+                        //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
+                        .setApnsProduction(false)
+                        //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
+                        .setSendno(1)
+                        //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
+                        .setTimeToLive(86400)
+                        .build())
+                .build();
+    }
+
+
+    /**
+     * 获取IOS的IosAlert
+     *
+     * @param notificationTitle
+     * @param subTitle
+     * @param msgContent
+     * @return
+     */
+    private static IosAlert queryIosAlert(String notificationTitle, String subTitle, String msgContent) {
+        return IosAlert.newBuilder().setTitleAndBody(notificationTitle, subTitle, msgContent).build();
+    }
+
+    }

+ 62 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/jPush/JPushConfig.java

@@ -0,0 +1,62 @@
+package com.ruoyi.common.utils.jPush;/*
+package com.ruoyi.common.utils.jPush;
+
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class JPushConfig {
+
+    */
+/**
+     * 极光官网-个人管理中心-点击查看-secret
+     *//*
+
+    @Value("${jpush.masterSecret}")
+    private String masterSecret;
+
+    */
+/**
+     * 指定本推送要推送的apns环境,true表示生产,false表示开发
+     *//*
+
+    @Value("${jpush.environment}")
+    private boolean environment;
+
+    */
+/**
+     * 极光官网-个人管理中心-appkey
+     *//*
+
+    @Value("${push.appKey}")
+    private String appKey;
+
+    public String getMasterSecret() {
+        return masterSecret;
+    }
+
+    public boolean isEnvironment() {
+        return environment;
+    }
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setMasterSecret(String masterSecret) {
+        this.masterSecret = masterSecret;
+    }
+
+    public void setEnvironment(boolean environment) {
+        this.environment = environment;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+
+
+}
+*/

+ 37 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/jPush/JPushToolUtil.java

@@ -0,0 +1,37 @@
+package com.ruoyi.common.utils.jPush;
+
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class JPushToolUtil extends AbstractJPushToolUtil {
+    /**
+     * 发送给指定的极光ID
+     * @param notificationTitle  通知标题
+     * @param msgTitle 内容标题
+     * @param msgContent 内容
+     * @param jPushVO 扩展的json
+     * @param registrationId 极光id
+     * @return
+     */
+    public static boolean sendToRegistrationId(
+            String notificationTitle,
+            String msgTitle,
+            String msgContent,
+            String jPushVO,
+            String... registrationId) {
+        return sendToRegistrationId1(notificationTitle,msgTitle,msgContent,jPushVO,registrationId);
+    }
+
+    /*public static void main(String[] args) {
+        String num = "-0405-别名";
+        String notificationTitle = "推送测试-通知标题" + num;
+        String msgTitle = "推送测试-内容标题" + num;
+        String msgContent = "我是内容" + num;
+        String jPushVO = "我是扩展的json" + num;
+        String[]  registrationId = {"", ""};
+        boolean b = JPushToolUtil.sendToRegistrationId(notificationTitle, msgTitle, msgContent, jPushVO, registrationId);
+        System.out.println("i="+b);
+    }*/
+}
+

+ 51 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/jPush/JPushVO.java

@@ -0,0 +1,51 @@
+package com.ruoyi.common.utils.jPush;
+
+
+/**
+ * 极光拓展字段不能传输object,限制了类型,所以封装更好些
+ * 此类为极光推送拓展字段封装类(目前字段是暂定,你也可以拓展)
+ *
+ * @author juzi
+ * @date 2022-12-2
+ */
+public class JPushVO {
+    private Long id;
+
+    private String userName;
+
+    private String content;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "JPushVO{" +
+                "id=" + id +
+                ", userName='" + userName + '\'' +
+                ", content='" + content + '\'' +
+                '}';
+    }
+}
+

+ 12 - 0
ruoyi-framework/pom.xml

@@ -58,6 +58,18 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>5.2.3</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.hynnet</groupId>
+            <artifactId>jacob</artifactId>
+            <version>1.18</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 219 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/LoanApplicationServiceImpl.java

@@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.jPush.JPushToolUtil;
 import com.ruoyi.common.utils.poi.ExcelFillUtils;
 import com.ruoyi.common.utils.poi.WordUtil;
 import com.ruoyi.common.utils.uuid.Seq;
@@ -28,8 +29,12 @@ import com.ruoyi.system.domain.loan.ShareholderFj;
 import com.ruoyi.system.domain.remind.WaitRemind;
 import com.ruoyi.system.domain.review.ReviewComments;
 import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.loan.ILoanApplicationService;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.usermodel.Range;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,6 +47,14 @@ import java.util.stream.Collectors;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+
+
+
 import static com.ruoyi.common.constant.CommonConstants.*;
 
 import javax.annotation.Resource;
@@ -81,6 +94,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
     private RedisCache redisCache;
     @Resource
     private SysUserRoleMapper sysUserRoleMapper;
+    @Autowired
+    private ISysUserService sysUserService;
 
 
     /**
@@ -705,7 +720,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             waitRemind.setReadUserId(loanApplication.getaUserId().toString());
             waitRemind.setRemindContent(enterpriseName + "有一条贷款申请进入未通过需及时处理");
             waitRemindList.add(waitRemind);
+            List<Long> userIdList = 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(loanApplicationId);
@@ -721,6 +738,24 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 }
             }
             waitRemindMapper.batchWaitRemind(waitRemindList);
+
+            //发极光推送id
+            //获取所有的userid
+            userIdList.add(loanApplication.getaUserId());
+            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+            if(sysUsers!=null && sysUsers.size()>0){
+                String notificationTitle = "消息通知";
+                String msgTitle = "审核信息";
+                String msgContent = enterpriseName + "有一条贷款申请进入未通过需及时处理";
+                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 AjaxResult.success();
             //审核流程结束
         } else if (THR.equals(auditType) && Integer.parseInt(auditSchedule) > 2) {
@@ -737,7 +772,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             waitRemind.setReadUserId(loanApplication.getaUserId().toString());
             waitRemind.setRemindContent(enterpriseName + "有一条贷款申请进入申诉状态需及时处理");
             waitRemindList.add(waitRemind);
+            List<Long> userIdList = 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(loanApplicationId);
@@ -753,10 +790,29 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 }
             }
             waitRemindMapper.batchWaitRemind(waitRemindList);
+
+            //发极光推送id
+            //获取所有的userid
+            userIdList.add(loanApplication.getaUserId());
+            List<SysUser> sysUsers = sysUserService.selectUserListByIdList(userIdList);
+            if(sysUsers!=null && sysUsers.size()>0){
+                String notificationTitle = "消息通知";
+                String msgTitle = "审核信息";
+                String msgContent = enterpriseName + "有一条贷款申请进入申诉状态需及时处理";
+                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 AjaxResult.success();
         }
         //通过,进入到下一个步骤
         if (TWO.equals(auditType)) {
+            List<Long> userIdList = new ArrayList<>();
+
             WaitRemind waitRemind = new WaitRemind();
             waitRemind.setLoanApplicationId(loanApplicationId);
             waitRemind.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
@@ -776,6 +832,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemind.setRemindContent(enterpriseName + "有一条申请贷款信息审核通过");
                 waitRemindList.add(waitRemind);
                 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(loanApplicationId);
@@ -790,6 +849,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                         waitRemindList.add(waitRemindManager);
                     }
                 }
+                userIdList.add(reviewComments.getaUserId());
             }
 /*            //保存参会人员数据 当管理同意上会后A角色选择上会日期,系统自动选择5名评委(评委排除AB角色和风险)
             if (sysUserConferenceList != null && sysUserConferenceList.size() > 0 && auditSchedule.equals(SEV)) {
@@ -806,6 +866,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
                     waitRemindList.add(waitRemind);
                     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(loanApplicationId);
@@ -820,6 +883,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                             waitRemindList.add(waitRemindManager);
                         }
                     }
+                    userIdList.add(loanApplication.getbUserId());
                 }
                 if (auditSchedule.equals(THR)) {
                     //给风险角色发送待办提醒
@@ -827,6 +891,10 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
                     waitRemindList.add(waitRemind);
                     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(loanApplicationId);
@@ -841,6 +909,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                             waitRemindList.add(waitRemindManager);
                         }
                     }
+                    userIdList.add(loanApplication.getfUserId());
                 }
                 //审核流程结束
             } else {
@@ -852,6 +921,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemind.setRemindContent(enterpriseName + "的审核信息申请通过进入到下一阶段");
                 waitRemindList.add(waitRemind);
                 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(loanApplicationId);
@@ -866,6 +938,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                         waitRemindList.add(waitRemindManager);
                     }
                 }
+                userIdList.add(loanApplication.getaUserId());
             }
             loanApplicationMapper.updateLoanApplication(loanApplication);
             //插入流程记录表
@@ -879,6 +952,21 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             //插入审核通过的待办提醒
             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 = enterpriseName + "的审核信息申请通过进入到下一阶段";
+                    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);
+                    }
+                }
             }
 
         }
@@ -1003,6 +1091,17 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //给管理员发送待办提醒
         waitRemindManager.setReadUserId(String.valueOf(loanApplication.getaUserId()));
         waitRemindMapper.insertWaitRemind(waitRemindManager);
+
+        //发极光推送
+        SysUser user = sysUserService.selectUserById(loanApplication.getaUserId());
+        if(StringUtils.isNotEmpty(user.getJgId())){
+            String notificationTitle = "消息通知";
+            String msgTitle = "上会审核信息";
+            String msgContent = loanApplication.getEnterpriseName() + "的上会审核信息申请" + result;
+            String jPushVO = "";
+            JPushToolUtil.sendToRegistrationId(notificationTitle,msgTitle,msgContent,jPushVO,user.getJgId());
+        }
+
         return rows > 0 ? AjaxResult.success() : AjaxResult.error();
     }
 
@@ -1046,7 +1145,12 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         waitRemind.setReadUserId(loanApplication.getaUserId().toString());
         waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "的审核信息申请通过进入到下一阶段");
         waitRemindList.add(waitRemind);
+        List<Long> userIdList = 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());
@@ -1063,6 +1167,23 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         }
         waitRemindMapper.batchWaitRemind(waitRemindList);
 
+        //发极光推送id
+        userIdList.add(loanApplication.getaUserId());
+        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);
+            }
+        }
+
+
         //业务审核意见
         ReviewComments reviewComments = new ReviewComments();
         reviewComments.setLoanApplicationId(loanApplication.getLoanApplicationId());
@@ -1085,6 +1206,9 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
     @Override
     @Transactional
     public AjaxResult cx(LoanApplication loanApplication) {
+
+        List<Long> userIdList = new ArrayList<>();
+
         Long loanApplicationId = loanApplication.getLoanApplicationId();
         //获取当前状态
         String loanSchedule = loanApplication.getLoanSchedule();
@@ -1158,6 +1282,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemind.setReadUserId(loanApplicationOld.getaUserId().toString());
                 waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
                 waitRemindList.add(waitRemind);
+
+                userIdList.add(loanApplicationOld.getaUserId());
             }
             if (loanApplication.getAuditSchedule().equals(THR)) {
                 WaitRemind waitRemind = new WaitRemind();
@@ -1170,6 +1296,8 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemind.setReadUserId(loanApplicationOld.getbUserId().toString());
                 waitRemind.setRemindContent(enterpriseName + "有一条贷款申请需及时处理");
                 waitRemindList.add(waitRemind);
+
+                userIdList.add(loanApplicationOld.getbUserId());
             }
         }
         loanApplicationMapper.updateLoanApplication2(loanApplication);
@@ -1180,6 +1308,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         //查询审核管理员用户id
         List<SysUserRole> sysUserRoles = sysUserRoleMapper.selectRoleListNoDataScope();
         if (ObjectUtils.isNotEmpty(loanApplication.getaUserId())) {
+
             WaitRemind waitRemind = new WaitRemind();
             waitRemind.setLoanApplicationId(loanApplication.getLoanApplicationId());
             waitRemind.setLoanApplicationNumber(loanApplication.getLoanApplicationNumber());
@@ -1190,6 +1319,10 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
             waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "的信息进行了撤销");
             waitRemindList.add(waitRemind);
             if (sysUserRoles != null && sysUserRoles.size() > 0) {
+                //极光推送
+                List<Long> userIds = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
+                userIdList.addAll(userIds);
+
                 for (SysUserRole sysUserRole : sysUserRoles) {
                     WaitRemind waitRemindManager = new WaitRemind();
                     waitRemindManager.setLoanApplicationId(loanApplication.getLoanApplicationId());
@@ -1204,9 +1337,26 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                     waitRemindList.add(waitRemindManager);
                 }
             }
+            userIdList.add(loanApplication.getaUserId());
         }
+
         if (waitRemindList != null && 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);
+                }
+            }
         }
 
         //业务审核意见插入撤销
@@ -1349,7 +1499,11 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         waitRemind.setReadUserId(loanApplication.getaUserId().toString());
         waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "的信息进入归档");
         waitRemindList.add(waitRemind);
+        List<Long> userIdList = 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());
@@ -1366,6 +1520,22 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         }
         waitRemindMapper.batchWaitRemind(waitRemindList);
 
+        //发极光推送id
+        userIdList.add(loanApplication.getaUserId());
+        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);
+            }
+        }
+
         //业务审核意见
         ReviewComments reviewComments = new ReviewComments();
         reviewComments.setLoanApplicationId(loanApplication.getLoanApplicationId());
@@ -1414,6 +1584,24 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 waitRemindRole.setRemindContent(loanApplication.getRemark());
                 waitRemindMapper.insertWaitRemind(waitRemindRole);
             }
+            //发极光推送id
+            //获取所有的userid
+            List<Long> userIdList = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
+            userIdList.add(loanApplication.getaUserId());
+            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 AjaxResult.success();
     }
@@ -1702,7 +1890,7 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
                 fileDir = RuoYiConfig.getProfile() + "/mb/temporarily/" + loanApplicationNumber;
                 //fileName = FileUploadUtils.extractFilenameLoanApplicationNumberNoHzm("股东会决议");
                 fileName = loanApplication.getEnterpriseName() + "-股东会决议";
-                //fileNameHz = fileName + ".docx";
+                fileNameHz = fileName + ".docx";
                 wordPath = WordUtil.createWord(templatePath, fileDir, fileName, params);
                 path = path + "/" + fileName + ".docx";
 
@@ -2037,4 +2225,34 @@ public class LoanApplicationServiceImpl implements ILoanApplicationService {
         }
         return fileType;
     }
+
+   /* public static void main(String[] args) {
+
+        *//*File file = new File("D:\\尽职调查报告4.doc");
+        FileInputStream fis = null;
+        XWPFDocument document = null;
+        XWPFWordExtractor extractor = null;
+        try {
+            fis = new FileInputStream(file);
+            document = new XWPFDocument(fis);
+            extractor = new XWPFWordExtractor(document);
+            System.out.println(extractor.getText());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }*//*
+
+        try {
+            FileInputStream fis = new FileInputStream(new File("D:\\尽职调查报告4.doc"));
+            HWPFDocument document = new HWPFDocument(fis);
+            Range range = document.getRange();
+            String text = range.text();
+            System.out.println("11111");
+            System.out.println(range.text());
+            fis.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }*/
+
 }

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

@@ -131,4 +131,6 @@ public interface SysUserMapper
     public SysUser selectUserByPhonenumber(String userName);
 
     List<SysUser> selectUserManageList(List<String> strlist);
+
+    List<SysUser> selectUserListByIdList(List<Long> userIdList);
 }

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -214,4 +214,6 @@ public interface ISysUserService
     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName);
 
     public SysUser selectUserByPhonenumber(String phonenumber);
+
+    List<SysUser> selectUserListByIdList(List<Long> userIdList);
 }

+ 28 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/Task.java

@@ -1,7 +1,10 @@
 package com.ruoyi.system.service;
 
 
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.jPush.JPushToolUtil;
 import com.ruoyi.system.domain.loan.LoanApplication;
 import com.ruoyi.system.domain.remind.WaitRemind;
 import com.ruoyi.system.mapper.LoanApplicationMapper;
@@ -14,8 +17,10 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.time.LocalDate;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Component
 public class Task {
@@ -25,6 +30,9 @@ public class Task {
     @Resource
     private LoanApplicationMapper loanApplicationMapper;
 
+    @Autowired
+    private ISysUserService sysUserService;
+
     /***
      *
      * @throws Exception
@@ -63,6 +71,16 @@ public class Task {
                                 waitRemind.setReadUserId(loanApplication.getfUserId().toString());
                                 waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "有一条贷款申请进入多次保后阶段需及时处理");
                                 waitRemindMapper.insertWaitRemind(waitRemind);
+
+                                //发极光推送
+                                SysUser user = sysUserService.selectUserById(loanApplication.getfUserId());
+                                if(StringUtils.isNotEmpty(user.getJgId())){
+                                    String notificationTitle = "消息通知";
+                                    String msgTitle = "保后处理";
+                                    String msgContent = loanApplication.getEnterpriseName() + "有一条贷款申请进入多次保后阶段需及时处理";
+                                    String jPushVO = "";
+                                    JPushToolUtil.sendToRegistrationId(notificationTitle,msgTitle,msgContent,jPushVO,user.getJgId());
+                                }
                             }
                         }
                     }
@@ -77,6 +95,16 @@ public class Task {
                     waitRemind.setReadUserId(loanApplication.getfUserId().toString());
                     waitRemind.setRemindContent(loanApplication.getEnterpriseName() + "有一条贷款申请进入保后阶段需及时处理");
                     waitRemindMapper.insertWaitRemind(waitRemind);
+
+                    //发极光推送
+                    SysUser user = sysUserService.selectUserById(loanApplication.getfUserId());
+                    if(StringUtils.isNotEmpty(user.getJgId())){
+                        String notificationTitle = "消息通知";
+                        String msgTitle = "保后处理";
+                        String msgContent = loanApplication.getEnterpriseName() + "有一条贷款申请进入保后阶段需及时处理";
+                        String jPushVO = "";
+                        JPushToolUtil.sendToRegistrationId(notificationTitle,msgTitle,msgContent,jPushVO,user.getJgId());
+                    }
                 }
             }
         }

+ 15 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/conference/impl/SysUserConferenceServiceImpl.java

@@ -11,6 +11,7 @@ import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.jPush.JPushToolUtil;
 import com.ruoyi.system.domain.SysUserRole;
 import com.ruoyi.system.domain.conference.SysUserConference;
 import com.ruoyi.system.domain.loan.LoanApplication;
@@ -18,6 +19,7 @@ import com.ruoyi.system.domain.remind.WaitRemind;
 import com.ruoyi.system.domain.review.ReviewComments;
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysDictTypeService;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.conference.ISysUserConferenceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -56,6 +58,9 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
     @Resource
     private WaitRemindMapper waitRemindMapper;
 
+    @Autowired
+    private ISysUserService sysUserService;
+
     /**
      * 查询参会人员
      *
@@ -181,6 +186,16 @@ public class SysUserConferenceServiceImpl implements ISysUserConferenceService {
                 waitRemindMapper.insertWaitRemind(waitRemind);
                 num++;
                 intList.add(randomNumber);
+
+                //发极光推送
+                SysUser user = sysUserService.selectUserById(sysUser.getUserId());
+                if(StringUtils.isNotEmpty(user.getJgId())){
+                    String notificationTitle = "消息通知";
+                    String msgTitle = "评审会议";
+                    String msgContent = "您有一个评审会议需参加,会议时间:"+sysUserConference.getConferenceTime()+",会议主题:【"+loanApplication.getEnterpriseName()+"】评审会";
+                    String jPushVO = "";
+                    JPushToolUtil.sendToRegistrationId(notificationTitle,msgTitle,msgContent,jPushVO,user.getJgId());
+                }
             }
         }
         return AjaxResult.success("成功");

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -582,4 +582,9 @@ public class SysUserServiceImpl implements ISysUserService
     public SysUser selectUserByPhonenumber(String phonenumber) {
         return userMapper.selectUserByPhonenumber(phonenumber);
     }
+
+    @Override
+    public List<SysUser> selectUserListByIdList(List<Long> userIdList) {
+        return userMapper.selectUserListByIdList(userIdList);
+    }
 }

+ 15 - 4
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="SysUser" id="SysUserResult">
         <id     property="userId"       column="user_id"      />
         <result property="deptId"       column="dept_id"      />
+		<result property="jgId"    column="jg_id"   />
         <result property="userName"     column="user_name"    />
         <result property="nickName"     column="nick_name"    />
 		<result property="userType"     column="user_type"    />
@@ -49,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 	
 	<sql id="selectUserVo">
-        select u.user_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
+        select u.user_id,u.jg_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
         d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -59,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
     
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-		select u.user_id, u.dept_id, u.nick_name,u.user_type,u.init_face, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
+		select u.user_id,u.jg_id, u.dept_id, u.nick_name,u.user_type,u.init_face, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
 		<if test="userId != null and userId != 0">
@@ -91,7 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 	
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.phonenumber, u.status, u.create_time
+	    select distinct u.user_id,u.jg_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
 			 left join sys_dept d on u.dept_id = d.dept_id
 			 left join sys_user_role ur on u.user_id = ur.user_id
@@ -108,7 +109,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</select>
 	
 	<select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
-	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.phonenumber, u.status, u.create_time
+	    select distinct u.user_id,u.jg_id, u.dept_id, u.user_name, u.nick_name,u.user_type,u.init_face, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
 			 left join sys_dept d on u.dept_id = d.dept_id
 			 left join sys_user_role ur on u.user_id = ur.user_id
@@ -170,11 +171,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</foreach>
 
 	</select>
+	<select id="selectUserListByIdList" parameterType="java.util.List" resultMap="SysUserResult">
+		select user_id,jg_id, dept_id, nick_name,user_type,init_face, user_name, email, avatar, phonenumber, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark
+		from sys_user where user_id in
+		<foreach collection="array" item="userId" open="(" separator="," close=")">
+			#{userId}
+		</foreach>
+	</select>
 
 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>
  			<if test="deptId != null and deptId != 0">dept_id,</if>
+			<if test="jgId != null and jgId != ''">jg_id,</if>
  			<if test="userName != null and userName != ''">user_name,</if>
  			<if test="nickName != null and nickName != ''">nick_name,</if>
 			<if test="userType != null and userType != ''">user_type,</if>
@@ -191,6 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
  			<if test="deptId != null and deptId != ''">#{deptId},</if>
+			<if test="jgId != null and jgId != ''">#{jgId},</if>
  			<if test="userName != null and userName != ''">#{userName},</if>
  			<if test="nickName != null and nickName != ''">#{nickName},</if>
 			<if test="userType != null and userType != ''">#{userType},</if>
@@ -211,6 +221,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		update sys_user
  		<set>
  			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
+			<if test="jgId != null and jgId != ''">jg_id= #{jgId},</if>
  			<if test="userName != null and userName != ''">user_name = #{userName},</if>
  			<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
 			<if test="userType != null and userType != ''">user_type = #{userType},</if>