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

websocket & 财务实收款认领列表

wucl пре 6 месеци
родитељ
комит
c4c1538e0a
26 измењених фајлова са 420 додато и 57 уклоњено
  1. 27 0
      biz-base/src/main/java/com/dayou/controller/FinanceClaimController.java
  2. 7 0
      biz-base/src/main/java/com/dayou/controller/MessageController.java
  3. 3 2
      biz-base/src/main/java/com/dayou/controller/UserController.java
  4. 5 4
      dao/src/main/java/com/dayou/mapper/FinanceClaimMapper.java
  5. 4 0
      dao/src/main/java/com/dayou/mapper/WorkTaskRecordMapper.java
  6. 57 0
      dao/src/main/resources/mapper/FinanceClaimMapper.xml
  7. 49 0
      dao/src/main/resources/mapper/WorkTaskRecordMapper.xml
  8. 2 0
      domain/src/main/java/com/dayou/common/Constants.java
  9. 1 0
      domain/src/main/java/com/dayou/vo/FinanceClaimVO.java
  10. 68 0
      domain/src/main/java/com/dayou/vo/FinanceClaimsVO.java
  11. 3 0
      domain/src/main/java/com/dayou/vo/FinanceRealFundVO.java
  12. 30 0
      domain/src/main/java/com/dayou/vo/TaskReminderVO.java
  13. 3 0
      service/src/main/java/com/dayou/message/MessageTypeEnum.java
  14. 5 4
      service/src/main/java/com/dayou/service/IFinanceClaimService.java
  15. 2 0
      service/src/main/java/com/dayou/service/IMessageService.java
  16. 2 1
      service/src/main/java/com/dayou/service/IUserService.java
  17. 11 4
      service/src/main/java/com/dayou/service/impl/FinanceClaimServiceImpl.java
  18. 0 1
      service/src/main/java/com/dayou/service/impl/MajorProductionServiceImpl.java
  19. 41 16
      service/src/main/java/com/dayou/service/impl/MessageServiceImpl.java
  20. 9 3
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java
  21. 17 0
      service/src/main/java/com/dayou/service/workflow/IWorkTaskRecordService.java
  22. 0 1
      service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java
  23. 15 0
      service/src/main/java/com/dayou/service/workflow/WorkTaskRecordServiceImpl.java
  24. 13 0
      service/src/main/java/com/dayou/websocket/WebSocketConfig.java
  25. 25 21
      service/src/main/java/com/dayou/websocket/WebSocketServer.java
  26. 21 0
      service/src/main/java/com/dayou/websocket/WebsocketListener.java

+ 27 - 0
biz-base/src/main/java/com/dayou/controller/FinanceClaimController.java

@@ -2,7 +2,9 @@ package com.dayou.controller;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.dayou.annotation.IgnoreAuth;
+import com.dayou.dto.FinanceRealFundExportDTO;
 import com.dayou.dto.RealFundAssetsStatDTO;
+import com.dayou.entity.FinanceRealFund;
 import com.dayou.exception.ErrorCode;
 import com.dayou.vo.*;
 import lombok.extern.slf4j.Slf4j;
@@ -184,5 +186,30 @@ public class FinanceClaimController extends BaseController {
         List<RealFundPersonalVO> list = financeClaimService.personalStatExport(personalVO);
         exportPlus(response, "个贷实收款统计", list, RealFundPersonalVO.class);
     }
+
+    /**
+     * 认领记录分页
+     * @param financeClaimVO
+     * @param page
+     * @return
+     */
+    @GetMapping("/page")
+    public RestResponse<Page<FinanceClaimsVO>> financeClaimsList(FinanceClaimsVO financeClaimVO, Page page,String keyword){
+        Page<FinanceClaimsVO> ret = financeClaimService.financeClaimsList(page,financeClaimVO,keyword);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 认领记录导出
+     * @param financeClaimVO
+     * @param keyword
+     * @param response
+     * @throws IOException
+     */
+    @GetMapping("/export")
+    public void financeClaimsListExport(FinanceClaimsVO financeClaimVO,String keyword,HttpServletResponse response) throws IOException {
+        List<FinanceClaimsVO> data = financeClaimService.exportList(financeClaimVO,keyword);
+        exportPlus(response,"认领记录导出",data, FinanceClaimsVO.class);
+    }
 }
 

+ 7 - 0
biz-base/src/main/java/com/dayou/controller/MessageController.java

@@ -1,5 +1,6 @@
 package com.dayou.controller;
 
+import com.dayou.annotation.IgnoreAuth;
 import com.dayou.message.MessageServerCenter;
 import com.dayou.message.handler.SystemMessageHandler;
 import com.dayou.service.IMessageService;
@@ -54,5 +55,11 @@ public class MessageController {
         Boolean result = messageService.allRead();
         return RestResponse.data(result);
     }
+
+    @IgnoreAuth
+    @GetMapping("/websocket")
+    public void sendWebSocket(){
+        messageService.sendWebSocket();
+    }
 }
 

+ 3 - 2
biz-base/src/main/java/com/dayou/controller/UserController.java

@@ -31,6 +31,7 @@ import java.util.Set;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 
 import static com.dayou.constants.JwtConstants.REST_TOKEN;
@@ -163,8 +164,8 @@ public class UserController extends BaseController {
      */
     @PostMapping("/login")
     @OperLog(title = "登录", businessType = OperationTypeEnum.LOGIN)
-    public RestResponse<LoginDTO> login(@RequestBody @Valid LoginCondition loginCondition) {
-        LoginDTO loginDTO = userService.login(loginCondition);
+    public RestResponse<LoginDTO> login(@RequestBody @Valid LoginCondition loginCondition, HttpServletRequest request) {
+        LoginDTO loginDTO = userService.login(loginCondition,request);
         return RestResponse.data(loginDTO);
     }
 

+ 5 - 4
dao/src/main/java/com/dayou/mapper/FinanceClaimMapper.java

@@ -5,10 +5,7 @@ import com.dayou.dto.RealFundAssetsStatDTO;
 import com.dayou.entity.FinanceClaim;
 import com.dayou.dao.CustomBaseMapper;
 import com.dayou.entity.OrderFund;
-import com.dayou.vo.FinanceClaimVO;
-import com.dayou.vo.RealFundAssetsStatVO;
-import com.dayou.vo.RealFundMajorStatVO;
-import com.dayou.vo.RealFundPersonalVO;
+import com.dayou.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -56,4 +53,8 @@ public interface FinanceClaimMapper extends CustomBaseMapper<FinanceClaim> {
     List<RealFundPersonalVO> personalStatExport(@Param("dto") RealFundPersonalVO personalVO);
 
     List<OrderFund> queryOrderTotalAmount();
+
+    Page<FinanceClaimsVO> financeClaimsList(Page page, @Param("vo") FinanceClaimsVO financeClaimVO,@Param("keyword") String keyword);
+
+    List<FinanceClaimsVO> exportList(@Param("vo")FinanceClaimsVO financeClaimVO, @Param("keyword") String keyword);
 }

+ 4 - 0
dao/src/main/java/com/dayou/mapper/WorkTaskRecordMapper.java

@@ -53,4 +53,8 @@ public interface WorkTaskRecordMapper extends CustomBaseMapper<WorkTaskRecord> {
     Page<AssetsTaskDoneVO> getAssetsTaskDoneList(@Param("assetsSelectDTO") AssetsSelectDTO assetsSelectDTO, Page page);
 
     void batchFinishTaskByInstanceId(@Param("list") List<Long> instanceIds);
+
+    TaskReminderVO getTaskReminderInfo(@Param("instanceNodeId") Long instanceNodeId);
+
+    List<Long> getHandlerIdByLastNode(@Param("businessType")String businessType, @Param("businessId")Long businessId, @Param("businessSubId")String businessSubId, @Param("businessMinId")String businessMinId);
 }

+ 57 - 0
dao/src/main/resources/mapper/FinanceClaimMapper.xml

@@ -364,4 +364,61 @@
             ( SELECT order_fund_id, sum( claim_amount ) realAmount FROM finance_claim WHERE deleted = 0 GROUP BY order_fund_id ) fc
                 LEFT JOIN order_fund oof ON oof.id = fc.order_fund_id
     </select>
+
+    <sql id="claimList">
+        SELECT
+        fc.id,
+        frf.payer,
+        frf.amount,
+        frf.pay_datetime,
+        fc.claim_amount,
+        u.NAME AS creator,
+        frf.created,
+        frf.remark,
+        u1.name as claimUser,
+        fc.claim_datetime ,
+        ( CASE off.business_type WHEN 'MAJOR_BUSINESS' THEN '大中型业务' WHEN 'PERSONAL_BUSINESS' THEN '个贷业务' WHEN 'ASSET_BUSINESS' THEN '资产业务' WHEN 'ITEM_BUSINESS' THEN '土规业务' ELSE '-' END ) AS businessType,
+        off.order_id
+        FROM
+        finance_claim fc
+        LEFT JOIN finance_real_fund frf ON frf.id = fc.real_fund_id
+        left join user u on u.id = frf.creator_id
+        left join user u1 on u1.id = fc.claim_user_id
+        left join order_fund off on off.id = fc.order_fund_id
+        where frf.deleted = 0 and fc.deleted = 0
+        <if test="keyword!=null and keyword!='' ">
+            and (
+            frf.payer like concat ('%',#{keyword},'%')
+            or frf.payer_bank like concat('%',#{keyword},'%')
+            or u.name like concat('%',#{keyword},'%')
+            or frf.payer_account like concat('%',#{keyword},'%')
+            or frf.amount like concat('%',#{keyword},'%')
+            or frf.remark like concat('%',#{keyword},'%')
+            )
+        </if>
+        <if test="vo!=null and vo.startDate!=null and vo.startDate!=''">
+            and frf.pay_datetime &gt;= #{vo.startDate}
+        </if>
+        <if test="vo!=null and vo.endDate!=null and vo.endDate!=''">
+            and frf.pay_datetime &lt;= #{vo.endDate}
+        </if>
+        <if test="vo!=null and vo.xStartDate!=null and vo.xStartDate!=''">
+            and fc.claim_datetime &gt;= #{vo.xStartDate}
+        </if>
+        <if test="vo!=null and vo.xEndDate!=null and vo.xEndDate!=''">
+            and fc.claim_datetime &lt;= #{vo.xEndDate}
+        </if>
+        <if test="vo!=null and vo.businessType!=null and vo.businessType!=''">
+            and off.business_type = #{vo.businessType}
+        </if>
+        order by fc.claim_datetime DESC
+    </sql>
+
+    <select id="financeClaimsList" parameterType="com.dayou.vo.FinanceClaimsVO" resultType="com.dayou.vo.FinanceClaimsVO">
+        <include refid="claimList" />
+    </select>
+
+    <select id="exportList" parameterType="com.dayou.vo.FinanceClaimsVO" resultType="com.dayou.vo.FinanceClaimsVO">
+        <include refid="claimList" />
+    </select>
 </mapper>

+ 49 - 0
dao/src/main/resources/mapper/WorkTaskRecordMapper.xml

@@ -632,4 +632,53 @@
             </foreach>
             )
     </update>
+
+    <select id="getTaskReminderInfo" parameterType="java.lang.Long" resultType="com.dayou.vo.TaskReminderVO">
+        SELECT
+            wtr.id,
+            (case wfni.business_type when 'ITEM_BUSINESS' then '土规业务'
+                                     when 'MAJOR_BUSINESS' then '大中型业务'
+                                     when 'PERSONAL_BUSINESS' then '个贷业务'
+                                     when 'ASSET_BUSINESS' then '资产业务'
+                                     when 'COMMISSION_DECLARE_MAJOR_MARKET' then '大中型-提成申报-市场人员'
+                                     when 'COMMISSION_DECLARE_MAJOR_EVALUATE' then '大中型-提成申报-评估人员'
+                                     when 'COMMISSION_DECLARE_ASSET_MARKET' then '资产-提成申报-市场人员'
+                                     when 'COMMISSION_DECLARE_ASSET_EVALUATE' then '资产-提成申报-评估人员'
+                                     else '审批业务' end) as businessType,
+            ifnull(wfni.business_min_id,
+                   wfni.business_sub_id) as `no`,
+            u.name as `user`,
+            wfni.business_id,
+            wfni.business_type as business
+        FROM
+            work_flow_node_instance wfni
+                LEFT JOIN work_task_record wtr ON wfni.id = wtr.instance_id
+                LEFT JOIN `user` u ON u.id = wtr.handler_id
+        where wfni.id = #{instanceNodeId}
+    </select>
+
+    <select id="getHandlerIdByLastNode" resultType="java.lang.Long">
+        SELECT
+            handler_id
+        FROM
+            work_task_record
+        WHERE
+            instance_id = (
+                SELECT
+                    id
+                FROM
+                    work_flow_node_instance
+                WHERE
+                    business_type = #{businessType}
+                  AND business_id = #{businessId}
+                  AND state = 'PENDING'
+                  AND deleted = 0
+                <if test="businessSubId!=null and businessSubId!=''">
+                    and business_sub_id = #{businessSubId}
+                </if>
+                <if test="businessMinId!=null and businessMinId!=''">
+                    and business_min_id = #{businessMinId}
+                </if>
+            )
+    </select>
 </mapper>

+ 2 - 0
domain/src/main/java/com/dayou/common/Constants.java

@@ -157,4 +157,6 @@ public interface Constants {
 
     String OUTWARD_TO_PRICE = "OUTWARD_TO_PRICE";
 
+    String USER_ID = "USER_ID";
+
 }

+ 1 - 0
domain/src/main/java/com/dayou/vo/FinanceClaimVO.java

@@ -31,4 +31,5 @@ public class FinanceClaimVO extends FinanceClaim {
 
     private String productionNo;
 
+
 }

+ 68 - 0
domain/src/main/java/com/dayou/vo/FinanceClaimsVO.java

@@ -0,0 +1,68 @@
+package com.dayou.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayou.annotation.Excel;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+@ExcelSheet(sheetName = "认领记录")
+public class FinanceClaimsVO {
+
+    private Long id;
+
+    @Excel(name = "付款银行")
+    private String payer;
+
+    @Excel(name = "付款金额")
+    private BigDecimal amount;
+
+    @Excel(name = "到账日期")
+    private LocalDate payDatetime;
+
+    @Excel(name = "认领金额")
+    private BigDecimal claimAmount;
+
+    @Excel(name = "认领人")
+    private String claimUser;
+
+    @Excel(name = "认领时间" ,dateFormat="yyyy-MM-dd HH:mm:ss")
+    private Date claimDatetime;
+
+    @Excel(name = "业务类型")
+    private String businessType;
+
+    @Excel(name = "项目编号")
+    private String orderId;
+
+    @Excel(name = "录入人")
+    private String creator;
+
+    @Excel(name = "备注")
+    private String remark;
+
+
+
+
+
+
+
+    //到账时间范围
+    @TableField(exist = false)
+    private String startDate;
+    @TableField(exist = false)
+    private String endDate;
+
+    //认领时间范围
+    @TableField(exist = false)
+    private String xStartDate;
+    @TableField(exist = false)
+    private String xEndDate;
+
+
+}

+ 3 - 0
domain/src/main/java/com/dayou/vo/FinanceRealFundVO.java

@@ -4,6 +4,7 @@ import com.dayou.entity.FinanceRealFund;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -25,4 +26,6 @@ public class FinanceRealFundVO extends FinanceRealFund {
     private List<String> recommends;
 
     private Long userId;
+
+    private Date claimDate;
 }

+ 30 - 0
domain/src/main/java/com/dayou/vo/TaskReminderVO.java

@@ -0,0 +1,30 @@
+package com.dayou.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class TaskReminderVO {
+
+    private Long id;
+
+    private String user;
+
+    private String businessType;
+
+    private String no;
+
+    private Date created;
+
+    private Long businessId;
+
+    private String businessSubId;
+
+    private String businessMinId;
+
+    private String business;
+
+    private Long handlerId;
+
+}

+ 3 - 0
service/src/main/java/com/dayou/message/MessageTypeEnum.java

@@ -24,6 +24,9 @@ public enum MessageTypeEnum {
     MAJOR_ALLOT_COMMISSION_REMIND2("MAJOR_ALLOT_COMMISSION_REMIND2","大中型产品提成分配提醒"),
 
     NODE_TODO_REMINDER("NODE_TODO_REMINDER","待办提醒")
+
+
+
     ;
 
     private String code;

+ 5 - 4
service/src/main/java/com/dayou/service/IFinanceClaimService.java

@@ -5,10 +5,7 @@ import com.dayou.entity.FinanceClaim;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.entity.OrderFund;
-import com.dayou.vo.FinanceClaimVO;
-import com.dayou.vo.RealFundAssetsStatVO;
-import com.dayou.vo.RealFundMajorStatVO;
-import com.dayou.vo.RealFundPersonalVO;
+import com.dayou.vo.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
@@ -87,4 +84,8 @@ public interface IFinanceClaimService extends IService<FinanceClaim> {
     List<RealFundPersonalVO> personalStatExport(RealFundPersonalVO personalVO);
 
     List<OrderFund> queryOrderTotalAmount();
+
+    Page<FinanceClaimsVO> financeClaimsList(Page page, FinanceClaimsVO financeClaimVO,String keyword);
+
+    List<FinanceClaimsVO> exportList(FinanceClaimsVO financeClaimVO, String keyword);
 }

+ 2 - 0
service/src/main/java/com/dayou/service/IMessageService.java

@@ -48,4 +48,6 @@ public interface IMessageService extends IService<Message> {
     void packagingMajorAllotCommissionRemind1(OrderReportDTO orderReportDTO);
 
     void packagingNodeTodoReminder(WorkNodeCommit commit);
+
+    void sendWebSocket();
 }

+ 2 - 1
service/src/main/java/com/dayou/service/IUserService.java

@@ -17,6 +17,7 @@ import com.dayou.vo.UserVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Set;
 
@@ -46,7 +47,7 @@ public interface IUserService extends IService<User> {
 
         XSSFWorkbook exportExcel(User user);
 
-        LoginDTO login(LoginCondition loginCondition);
+        LoginDTO login(LoginCondition loginCondition, HttpServletRequest request);
 
         UserBaseDetailDTO baseInfo(String token);
 

+ 11 - 4
service/src/main/java/com/dayou/service/impl/FinanceClaimServiceImpl.java

@@ -18,10 +18,7 @@ import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.utils.ExcelUtil;
 import com.dayou.utils.LoginContext;
-import com.dayou.vo.FinanceClaimVO;
-import com.dayou.vo.RealFundAssetsStatVO;
-import com.dayou.vo.RealFundMajorStatVO;
-import com.dayou.vo.RealFundPersonalVO;
+import com.dayou.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -248,6 +245,16 @@ public class FinanceClaimServiceImpl extends ServiceImpl<FinanceClaimMapper, Fin
         return financeClaimMapper.queryOrderTotalAmount();
     }
 
+    @Override
+    public Page<FinanceClaimsVO> financeClaimsList(Page page, FinanceClaimsVO financeClaimVO,String keyword) {
+        return financeClaimMapper.financeClaimsList(page,financeClaimVO,keyword);
+    }
+
+    @Override
+    public List<FinanceClaimsVO> exportList(FinanceClaimsVO financeClaimVO, String keyword) {
+        return financeClaimMapper.exportList(financeClaimVO,keyword);
+    }
+
 
     @Override
     public synchronized BigDecimal checkFinanceFound(Long financeFundId) {

+ 0 - 1
service/src/main/java/com/dayou/service/impl/MajorProductionServiceImpl.java

@@ -31,7 +31,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 

+ 41 - 16
service/src/main/java/com/dayou/service/impl/MessageServiceImpl.java

@@ -1,6 +1,8 @@
 package com.dayou.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.OrderReportDTO;
@@ -19,36 +21,24 @@ import com.dayou.message.handler.BusinessMessageHandler;
 import com.dayou.message.handler.SystemMessageHandler;
 import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.service.workflow.IWorkTaskRecordService;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.CommissionDeclareVO;
 import com.dayou.vo.ItemVO;
 import com.dayou.vo.MajorProductionVO;
+import com.dayou.vo.TaskReminderVO;
 import com.dayou.websocket.WebSocketServer;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
 import java.util.List;
-import java.util.ArrayList;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
-
 import static com.dayou.enums.BusinessReplyEnum.MARKET_LOG_REPLY;
 import static com.dayou.enums.BusinessReplyEnum.MARKET_VISIT_REPLY;
 import static com.dayou.message.MessageTitle.*;
@@ -91,8 +81,12 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
     private IMajorProductionAllotService majorProductionAllotService;
 
     @Autowired
+    private IWorkTaskRecordService workTaskRecordService;
+
+    @Autowired
     private WebSocketServer webSocketServer;
 
+
     @Override
     public Boolean packagingBusinessMessage(BusinessReply originalBO) {
         BusinessMessageBO messageBO = new BusinessMessageBO();
@@ -280,6 +274,37 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 
     @Override
     public void packagingNodeTodoReminder(WorkNodeCommit commit) {
+        Long instanceNodeId = commit.getInstanceNodeId();
+        //
+        TaskReminderVO taskReminderVO = workTaskRecordService.getTaskReminderInfo(instanceNodeId);
+        //根据处理人查询
+        Long handlerId = workTaskRecordService.getHandlerIdByLastNode(taskReminderVO.getBusiness(), taskReminderVO.getBusinessId(), taskReminderVO.getBusinessSubId(), taskReminderVO.getBusinessMinId());
+        if (handlerId != null){
+            Message message = new Message();
+            message.setTitle(NODE_TODO_REMINDER.getName());
+            message.setReceiver(handlerId);
+            message.setParams(JSON.toJSONString(taskReminderVO));
+            message.setSender(1L);
+            message.setType(NODE_TODO_REMINDER.name());
+            message.setMessage(new StringBuilder(taskReminderVO.getUser()).append("提交").append(taskReminderVO.getBusinessType())
+                    .append(StrUtil.isNotBlank(taskReminderVO.getNo())?taskReminderVO.getNo():"").append("的新的流程待办,请及时处理。").toString());
+            this.save(message);
+            taskReminderVO.setCreated(message.getCreated());
+            taskReminderVO.setHandlerId(handlerId);
+            //发送websocket
+            webSocketServer.sendNodeReminder(taskReminderVO);
+        }
+    }
 
+    @Override
+    public void sendWebSocket() {
+        TaskReminderVO taskReminderVO = new TaskReminderVO();
+        taskReminderVO.setId(RandomUtil.randomLong());
+        taskReminderVO.setCreated(new Date());
+        taskReminderVO.setHandlerId(1L);
+        taskReminderVO.setUser("管理员");
+        taskReminderVO.setNo("2025010001");
+        taskReminderVO.setBusinessType("大中型业务");
+        webSocketServer.sendNodeReminder(taskReminderVO);
     }
 }

+ 9 - 3
service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

@@ -54,8 +54,10 @@ import java.util.stream.Collectors;
 import org.springframework.transaction.annotation.Transactional;
 import com.dayou.enums.BatchTaskTypeEnum;
 
-import static com.dayou.common.Constants.DEFAULT_PASSWORD;
-import static com.dayou.common.Constants.STAFF_NO_PREFIX;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import static com.dayou.common.Constants.*;
 import static com.dayou.exception.ErrorCode.*;
 
 /**
@@ -188,7 +190,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     }
 
     @Override
-    public LoginDTO login(LoginCondition loginCondition) {
+    public LoginDTO login(LoginCondition loginCondition, HttpServletRequest request) {
         String account = loginCondition.getAccount();
         String pwd = loginCondition.getPwd();
 
@@ -204,6 +206,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         String token = JwtTokenUtil.doGenerateToken(claims, String.valueOf(userId));
         //缓存用户信息
         cacheLoginInfo(user, token);
+        //将userId存入HttpSession中用于Websocket中获取
+
+        HttpSession session = request.getSession();
+        session.setAttribute(USER_ID, userId);
 
         return LoginDTO.builder()
                 .token(token)

+ 17 - 0
service/src/main/java/com/dayou/service/workflow/IWorkTaskRecordService.java

@@ -55,4 +55,21 @@ public interface IWorkTaskRecordService extends IService<WorkTaskRecord> {
      * @return List<AssetsTaskDoneVO>
      */
     Page<AssetsTaskDoneVO> getAssetsTaskDoneList(AssetsSelectDTO assetsSelectDTO, Page page);
+
+    /**
+     * 查询提醒信息
+     * @param instanceNodeId
+     * @return
+     */
+    TaskReminderVO getTaskReminderInfo(Long instanceNodeId);
+
+    /**
+     * 根据节点信息查询正在进行节点的处理人
+     * @param businessType
+     * @param businessId
+     * @param businessSubId
+     * @param businessMinId
+     * @return
+     */
+    Long getHandlerIdByLastNode(String businessType,Long businessId,String businessSubId,String businessMinId);
 }

+ 0 - 1
service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java

@@ -13,7 +13,6 @@ import com.dayou.entity.WorkNodeTask;
 import com.dayou.enums.MainBusinessEnum;
 import com.dayou.enums.workflow.NodeLogEnum;
 import com.dayou.enums.workflow.NodeStateEnum;
-import com.dayou.exception.BusinessException;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.WorkFlowMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

+ 15 - 0
service/src/main/java/com/dayou/service/workflow/WorkTaskRecordServiceImpl.java

@@ -1,5 +1,6 @@
 package com.dayou.service.workflow;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.dayou.bo.SimpleParentModel;
@@ -178,4 +179,18 @@ public class WorkTaskRecordServiceImpl extends ServiceImpl<WorkTaskRecordMapper,
         return assetsTaskDoneVOPage;
     }
 
+    @Override
+    public TaskReminderVO getTaskReminderInfo(Long instanceNodeId) {
+        return workTaskRecordMapper.getTaskReminderInfo(instanceNodeId);
+    }
+
+    @Override
+    public Long getHandlerIdByLastNode(String businessType, Long businessId, String businessSubId, String businessMinId) {
+        List<Long> handlerId = workTaskRecordMapper.getHandlerIdByLastNode(businessType, businessId, businessSubId, businessMinId);
+        if (CollectionUtil.isNotEmpty(handlerId) && handlerId.size()==1){
+            return handlerId.get(0);
+        }
+        return null;
+    }
+
 }

+ 13 - 0
service/src/main/java/com/dayou/websocket/WebSocketConfig.java

@@ -5,11 +5,24 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
+import javax.servlet.http.HttpSession;
+import javax.websocket.HandshakeResponse;
+import javax.websocket.server.HandshakeRequest;
 import javax.websocket.server.ServerEndpointConfig;
 
 @Configuration
 public class WebSocketConfig extends ServerEndpointConfig.Configurator {
 
+
+    @Override
+    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
+        HttpSession httpSession = (HttpSession) request.getHttpSession();
+        if (httpSession != null) {
+            sec.getUserProperties().put(HttpSession.class.getName(), httpSession);
+        }
+        super.modifyHandshake(sec, request, response);
+    }
+
     /**
      * 注入ServerEndpointExporter,@Bean会自动注册使用@ServerEndpoint注解声明的websocket端点endpoint
      * @return

+ 25 - 21
service/src/main/java/com/dayou/websocket/WebSocketServer.java

@@ -1,16 +1,23 @@
 package com.dayou.websocket;
 
+import com.alibaba.fastjson.JSON;
+import com.dayou.utils.LoginContext;
+import com.dayou.vo.TaskReminderVO;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.http.HttpSession;
 import javax.websocket.*;
 import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
+import java.util.Date;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import static com.dayou.common.Constants.USER_ID;
+
 /**
  * 类说明:
  *
@@ -19,7 +26,6 @@ import java.util.concurrent.atomic.AtomicInteger;
  * created with IntelliJ IDEA.
  */
 @Component
-@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
 @ServerEndpoint(value="/ws",configurator = WebSocketConfig.class)
 public class WebSocketServer {
 
@@ -27,23 +33,24 @@ public class WebSocketServer {
 
     private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
 
-    private Session session;
+    private String key;
 
-    private static final String MSG = "{\"data\":\"*\"}";
+    private Session session;
 
     /**
      * 连接建立成功调用的方法
      * @param session
      */
     @OnOpen
-    public void onOpen(Session session){
-        atomicInteger.incrementAndGet();
-        String sessionId = session.getId();
+    public void onOpen(Session session, EndpointConfig config){
+        HttpSession httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
+        key = String.valueOf(httpSession.getAttribute(USER_ID));
         this.session = session;
-        System.out.println("建立连接成功 onOpen 线程数量:"+atomicInteger.get()+" sessionID:"+ session.getId());
+        System.out.println("当前登录用户id:" + key);
+        atomicInteger.incrementAndGet();
+        System.out.println("建立连接成功 onOpen 线程数量:"+atomicInteger.get()+" sessionID:"+ key);
         System.out.println("当前socket连接数量:" + webSocketMap.size());
-        webSocketMap.put(sessionId,this);
-        sendSocket("userSize");
+        webSocketMap.put(key,this);
     }
 
     /**
@@ -52,11 +59,9 @@ public class WebSocketServer {
      */
     @OnClose
     public void onClose(Session session){
-        System.out.println("一个客户端断开连接:" + session.getId());
+        System.out.println("一个客户端断开连接:" + key);
         atomicInteger.incrementAndGet();
-        webSocketMap.remove(session.getId());
-        sendSocket("userSize");
-
+        webSocketMap.remove(key);
     }
 
     /**
@@ -83,17 +88,16 @@ public class WebSocketServer {
         throwable.printStackTrace();
     }
 
-    public void sendSocket(String key){
-        System.out.println("sessions:"+webSocketMap.size());
+    /**
+     * 发送节点待办提醒
+     * @param taskReminderVO
+     */
+    public void sendNodeReminder(TaskReminderVO taskReminderVO){
         if (webSocketMap.size()>0){
             for(Map.Entry<String, WebSocketServer> map : webSocketMap.entrySet()){
                 try {
-                    if (key.equals("data")){
-                        map.getValue().session.getBasicRemote().sendText(MSG);
-                    }
-                    else {
-                        String userSize = "{\"userSize\":"+webSocketMap.size()+"}";
-                        map.getValue().session.getBasicRemote().sendText(userSize);
+                    if (map.getKey().equals(String.valueOf(taskReminderVO.getHandlerId()))){
+                        map.getValue().session.getBasicRemote().sendText(JSON.toJSONString(taskReminderVO));
                     }
                 } catch (Exception e) {
                     e.printStackTrace();

+ 21 - 0
service/src/main/java/com/dayou/websocket/WebsocketListener.java

@@ -0,0 +1,21 @@
+package com.dayou.websocket;
+
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+@Component
+public class WebsocketListener implements ServletRequestListener{
+    @Override
+    public void requestInitialized(ServletRequestEvent sre)  {
+        HttpSession session = ((HttpServletRequest) sre.getServletRequest()).getSession();
+    }
+
+    public WebsocketListener(){}
+
+    @Override
+    public void requestDestroyed(ServletRequestEvent arg0)  {}
+}