소스 검색

借款管理

sangwenwei 1 년 전
부모
커밋
af940495ae

+ 109 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/controller/BorrowController.java

@@ -0,0 +1,109 @@
+package com.jeeplus.business.borrow.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.business.borrow.service.BorrowService;
+import com.jeeplus.business.borrow.service.dto.BorrowDTO;
+import com.jeeplus.business.borrow.service.dto.RefundDTO;
+import com.jeeplus.business.drive.service.dto.DriveApplyDTO;
+import com.jeeplus.business.goOut.service.dto.GoOutDTO;
+import com.jeeplus.common.utils.ResponseUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@Api("借款管理")
+@RestController
+@RequestMapping(value = "/borrow")
+public class BorrowController {
+
+    @Resource
+    private BorrowService borrowService;
+
+
+
+    /**
+     * 借款管理列表
+     */
+    @ApiOperation(value = "借款管理列表")
+    @GetMapping(value = "/findList")
+    public ResponseEntity<IPage<BorrowDTO>> applyList(BorrowDTO borrowDTO, Page<BorrowDTO> page) throws Exception {
+        IPage<BorrowDTO> pageList=borrowService.findPageList(borrowDTO,page);
+        return ResponseEntity.ok(pageList);
+    }
+
+    /**
+     * 根据id查询数据
+     */
+    @ApiOperation(value = "根据id查询数据")
+    @GetMapping(value = "findById")
+    public ResponseEntity<BorrowDTO> findById(@RequestParam String id){
+        BorrowDTO borrowDTO=borrowService.findById(id);
+        return ResponseEntity.ok(borrowDTO);
+    }
+
+    /**
+     * 新增或修改
+     */
+    @ApiOperation(value = "新增或修改")
+    @PostMapping(value = "/saveForm")
+    public ResponseEntity saveForm(@RequestBody BorrowDTO borrowDTO) throws Exception {
+        String id=borrowService.save(borrowDTO);
+        return ResponseUtil.newInstance().add("businessTable","jy_borrow_money").add("businessId",id).ok("操作成功");
+    }
+
+    /**
+     * 根据id修改状态status
+     * @param
+     */
+    @ApiOperation(value = "根据id修改状态status")
+    @PostMapping(value = "/updateStatusById")
+    public void updateStatusById(@RequestBody BorrowDTO borrowDTO) {
+        borrowService.updateStatusById(borrowDTO);
+    }
+
+    /**
+     * 根据id进行删除
+     */
+    @ApiOperation(value = "根据id进行删除")
+    @DeleteMapping(value = "/delete")
+    public ResponseEntity<String> deleteById(@RequestParam String id){
+        String s = borrowService.deleteById(id);
+        return ResponseEntity.ok(s);
+    }
+
+    /**
+     * 添加/修改借款归还
+     */
+    @ApiOperation(value = "新增或修改借款归还")
+    @PostMapping(value = "/saveRefund")
+    public ResponseEntity saveRefund(@RequestBody RefundDTO refundDTO) throws Exception {
+        String id=borrowService.saveRefund(refundDTO);
+        return ResponseUtil.newInstance().add("businessTable","jy_refund").add("businessId",id).ok("操作成功");
+    }
+
+    /**
+     * 根据id修改状态status
+     * @param
+     */
+    @ApiOperation(value = "根据id修改状态status")
+    @PostMapping(value = "/updateRefundById")
+    public void updateRefundById(@RequestBody RefundDTO refundDTO) {
+        borrowService.updateRefundById(refundDTO);
+    }
+
+
+    /**
+     * 管理员修改
+     */
+    @ApiOperation(value = "管理员修改")
+    @PostMapping(value = "/adminEditForm")
+    public void adminEditForm(@RequestBody BorrowDTO borrowDTO){
+        borrowService.adminEditForm(borrowDTO);
+    }
+
+
+}

+ 43 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/domain/BorrowMoney.java

@@ -0,0 +1,43 @@
+package com.jeeplus.business.borrow.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+@TableName("jy_borrow_money")
+public class BorrowMoney extends BaseEntity {
+
+    /**
+     * 编号
+     */
+    private String no;
+
+    /**
+     * 借款理由
+     */
+    private String reason;
+
+    /**
+     * 借款金额大小写
+     */
+    private String moneyLower;
+    private String money;
+
+    /**
+     * 实际借款金额
+     */
+    private String finalMoney;
+
+    /**
+     * 流程
+     */
+    private String procInsId;
+    private String processDefinitionId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 33 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/domain/Refund.java

@@ -0,0 +1,33 @@
+package com.jeeplus.business.borrow.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+@TableName("jy_refund")
+public class Refund extends BaseEntity {
+
+    /**
+     * 还款金额(小写)
+     */
+    private String refundLower;
+
+    //还款金额(大写)
+    private String refund;
+
+    //借款表id
+    private String borrowId;
+
+    /**
+     * 流程
+     */
+    private String procInsId;
+    private String processDefinitionId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+}

+ 29 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/mapper/BorrowMapper.java

@@ -0,0 +1,29 @@
+package com.jeeplus.business.borrow.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.business.borrow.domain.BorrowMoney;
+import com.jeeplus.business.borrow.domain.Refund;
+import com.jeeplus.business.borrow.service.dto.BorrowDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface BorrowMapper extends BaseMapper<BorrowMoney> {
+    @InterceptorIgnore(tenantLine = "true")
+    IPage<BorrowDTO> findPageList(@Param(Constants.WRAPPER) QueryWrapper<BorrowDTO> queryWrapper, Page<BorrowDTO> page);
+    @InterceptorIgnore(tenantLine = "true")
+    BorrowDTO findById(@Param("id") String id);
+
+    void updateStatusById(@Param("id") String id, @Param("status") String status);
+
+    void updateRefundById(@Param("id")String id, @Param("status")String status);
+    @InterceptorIgnore(tenantLine = "true")
+    void updateInfoById(@Param("borrowMoney") BorrowMoney borrowMoney);
+    @InterceptorIgnore(tenantLine = "true")
+    void updateRefundInfoById(@Param("refundInfo") Refund refundInfo);
+}

+ 10 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/mapper/RefundMapper.java

@@ -0,0 +1,10 @@
+package com.jeeplus.business.borrow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.business.borrow.domain.Refund;
+import lombok.Data;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface RefundMapper extends BaseMapper<Refund> {
+}

+ 102 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/mapper/xml/BorrowMapper.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.business.borrow.mapper.BorrowMapper">
+
+    <select id="findPageList" resultType="com.jeeplus.business.borrow.service.dto.BorrowDTO">
+        select
+            a.id,
+            a.create_by_id,
+            a.create_time,
+            a.no,
+            a.reason,
+            a.money_lower,
+            a.money,
+            a.final_money,
+            a.proc_ins_id,
+            a.process_definition_id,
+            a.status,
+            re.refund_lower,
+            re.id as refundId,
+            re.proc_ins_id as procInsIdRefund,
+            re.process_definition_id as procDefIdRefund,
+            re.status as refundStatus,
+            so.name as officeName,
+            su.name as createName,
+            art1.ID_ as task_id,
+            art2.ID_ as task_id_refund
+
+        from jy_borrow_money a
+        left join jy_refund re on a.id = re.borrow_id
+        left join sys_user su on a.create_by_id = su.id and su.del_flag = '0'
+        left join sys_office so on su.office_id = so.id and so.del_flag = '0'
+        LEFT JOIN act_ru_task art1 ON a.proc_ins_id = art1.PROC_INST_ID_
+        LEFT JOIN act_ru_task art2 ON re.proc_ins_id = art2.PROC_INST_ID_
+        ${ew.customSqlSegment}
+        ORDER BY a.update_time DESC
+    </select>
+
+    <select id="findById" resultType="com.jeeplus.business.borrow.service.dto.BorrowDTO">
+        select
+            a.id,
+            a.create_by_id,
+            a.create_time,
+            a.no,
+            a.reason,
+            a.money_lower,
+            a.money,
+            a.final_money,
+            a.proc_ins_id,
+            a.process_definition_id,
+            a.status,
+            re.borrow_id as borrowId,
+            re.refund_lower,
+            re.refund,
+            re.id as refundId,
+            re.proc_ins_id as procInsIdRefund,
+            re.process_definition_id as procDefIdRefund,
+            re.status as refundStatus,
+            so.name as officeName,
+            su.name as createName,
+            art1.ID_ as task_id,
+            art2.ID_ as task_id_refund
+
+        from jy_borrow_money a
+        left join jy_refund re on a.id = re.borrow_id
+        left join sys_user su on a.create_by_id = su.id and su.del_flag = '0'
+        left join sys_office so on su.office_id = so.id and so.del_flag = '0'
+        LEFT JOIN act_ru_task art1 ON a.proc_ins_id = art1.PROC_INST_ID_
+        LEFT JOIN act_ru_task art2 ON re.proc_ins_id = art2.PROC_INST_ID_
+        where a.id=#{id} or re.id = #{id}
+    </select>
+
+    <update id="updateStatusById">
+        update jy_borrow_money set status = #{status} where id=#{id}
+    </update>
+
+    <update id="updateRefundById">
+        update jy_refund set status = #{status} where id=#{id}
+    </update>
+
+    <update id="updateInfoById">
+        update
+            jy_borrow_money
+        set
+            money = #{borrowMoney.money},
+            money_lower = #{borrowMoney.moneyLower},
+            final_money = #{borrowMoney.finalMoney}
+        where id=#{borrowMoney.id}
+    </update>
+
+    <update id="updateRefundInfoById">
+        update
+            jy_refund
+        set
+            refund=#{refundInfo.refund},
+            refund_lower = #{refundInfo.refundLower}
+        where id=#{refundInfo.id}
+    </update>
+
+
+</mapper>

+ 216 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/service/BorrowService.java

@@ -0,0 +1,216 @@
+package com.jeeplus.business.borrow.service;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.business.borrow.domain.BorrowMoney;
+import com.jeeplus.business.borrow.domain.Refund;
+import com.jeeplus.business.borrow.mapper.BorrowMapper;
+import com.jeeplus.business.borrow.mapper.RefundMapper;
+import com.jeeplus.business.borrow.service.dto.BorrowDTO;
+import com.jeeplus.business.borrow.service.dto.RefundDTO;
+import com.jeeplus.business.project.service.dto.JyProjectDTO;
+import com.jeeplus.common.TokenProvider;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.feign.IWorkAttachmentApi;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.UUID;
+@Service
+public class BorrowService {
+
+    @Resource
+    private BorrowMapper borrowMapper;
+
+    @Resource
+    private RefundMapper refundMapper;
+
+
+    /**
+     * 列表管理
+     * @param borrowDTO
+     * @param page
+     * @return
+     */
+    public IPage<BorrowDTO> findPageList(BorrowDTO borrowDTO, Page<BorrowDTO> page) throws Exception {
+        QueryWrapper<BorrowDTO> queryWrapper = QueryWrapperGenerator.buildQueryCondition(borrowDTO, BorrowDTO.class);
+        queryWrapper.eq("a.del_flag",0);
+        //编号
+        if (StringUtils.isNotBlank(borrowDTO.getNo())){
+            queryWrapper.like("a.no",borrowDTO.getNo());
+        }
+        //原因
+        if (StringUtils.isNotBlank(borrowDTO.getReason())){
+            queryWrapper.like("a.reason",borrowDTO.getReason());
+        }
+        //借款人
+        if (StringUtils.isNotBlank(borrowDTO.getCreateById())){
+            queryWrapper.eq("a.create_by_id",borrowDTO.getCreateById());
+        }
+        //借款人部门
+        if (StringUtils.isNotBlank(borrowDTO.getOfficeId())){
+            queryWrapper.eq("so.id",borrowDTO.getOfficeId());
+        }
+        //借款时间
+        if (borrowDTO.getCreateDates() != null && borrowDTO.getCreateDates().length > 0) {
+            queryWrapper.between("a.create_time", borrowDTO.getCreateDates()[0], borrowDTO.getCreateDates()[1]);
+        }
+        //借款金额
+        if (borrowDTO.getBorrowAmounts() != null) {
+            if (StringUtils.isNotEmpty(borrowDTO.getBorrowAmounts()[0])) {
+                queryWrapper.ge("a.money_lower", Double.parseDouble(borrowDTO.getBorrowAmounts()[0]));
+            }
+            if (borrowDTO.getBorrowAmounts().length>1 && StringUtils.isNotEmpty(borrowDTO.getBorrowAmounts()[1])) {
+                queryWrapper.le("a.money_lower", Double.parseDouble(borrowDTO.getBorrowAmounts()[1]));
+            }
+        }
+        IPage<BorrowDTO> pageList=borrowMapper.findPageList(queryWrapper,page);
+        return pageList;
+    }
+
+    /**
+     * 根据id查询数据
+     * @param id
+     * @return
+     */
+    public BorrowDTO findById(String id) {
+        BorrowDTO borrowDTO=borrowMapper.findById(id);
+        return borrowDTO;
+    }
+
+    /**
+     * 新增/修改
+     * @param borrowDTO
+     * @return
+     */
+    public String save(BorrowDTO borrowDTO) throws Exception {
+        if (StringUtils.isNotBlank(borrowDTO.getId())){
+            return update(borrowDTO);
+        }
+        return add(borrowDTO);
+    }
+
+    private String add(BorrowDTO borrowDTO) throws Exception {
+        BorrowMoney borrowMoney = new BorrowMoney();
+        //获取当前登录人信息
+        UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken());
+        //生成借款编号
+        String borrowNo = SpringUtil.getBean ( IWorkAttachmentApi.class ).genSerialNum(userDTO.getCompanyDTO().getId(), BorrowDTO.BIZ_CODE,TokenProvider.getCurrentToken());
+        //生成id
+        String id = UUID.randomUUID().toString().replace("-", "");
+
+        borrowMoney.setId(id);
+        borrowMoney.setNo(borrowNo);
+        borrowMoney.setCreateById(userDTO.getId());
+        borrowMoney.setCreateTime(new Date());
+        borrowMoney.setUpdateById(userDTO.getId());
+        borrowMoney.setUpdateTime(new Date());
+        borrowMoney.setMoneyLower(borrowDTO.getMoneyLower());//借款金额小写
+        borrowMoney.setMoney(borrowDTO.getMoney());//借款金额大写
+        borrowMoney.setFinalMoney(borrowDTO.getMoneyLower());//剩余借款金额
+        borrowMoney.setStatus(borrowDTO.getStatus());
+        borrowMoney.setReason(borrowDTO.getReason()); //借款用途
+        borrowMapper.insert(borrowMoney);
+
+        //在还款表中生成一条数据
+        Refund refund = new Refund();
+        refund.setBorrowId(id);
+        refund.setStatus("0");
+        refundMapper.insert(refund);
+
+        return id;
+    }
+
+    private String update(BorrowDTO borrowDTO){
+        //获取当前登录人信息
+        UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken());
+        BorrowMoney borrowMoney = new BorrowMoney();
+        BeanUtils.copyProperties(borrowDTO,borrowMoney);
+
+        borrowMoney.setUpdateById(userDTO.getId());
+        borrowMoney.setUpdateTime(new Date());
+        borrowMoney.setFinalMoney(borrowDTO.getMoneyLower());
+        borrowMapper.updateById(borrowMoney);
+
+        return borrowDTO.getId();
+    }
+
+
+    /**
+     * 根据id修改状态
+     * @param borrowDTO
+     */
+    public void updateStatusById(BorrowDTO borrowDTO) {
+        borrowMapper.updateStatusById(borrowDTO.getId(),borrowDTO.getStatus());
+    }
+
+    /**
+     * 根据id进行删除
+     * @param id
+     * @return
+     */
+    public String deleteById(String id) {
+        borrowMapper.deleteById(id);
+        return "删除成功";
+    }
+
+    /**
+     * 添加或修改借款归还
+     * @param refundDTO
+     * @return
+     */
+    public String saveRefund(RefundDTO refundDTO) {
+        //获取当前登录人信息
+        UserDTO userDTO = SpringUtil.getBean ( IUserApi.class ).getByToken(TokenProvider.getCurrentToken());
+        //修改借款归还中的数据
+        Refund refund = new Refund();
+        BeanUtils.copyProperties(refundDTO,refund);
+        refund.setUpdateById(userDTO.getId());
+        refund.setUpdateTime(new Date());
+        refundMapper.updateById(refund);
+        //查找出借款中的借款金额
+        Refund id = refundMapper.selectById(refundDTO.getId());
+        BorrowMoney borrowMoney = borrowMapper.selectById(id.getBorrowId());
+        //同时修改借款中的剩余借款金额
+        BorrowMoney borrow = new BorrowMoney();
+        borrow.setFinalMoney(refundDTO.getFinalMoney());
+        borrow.setId(borrowMoney.getId());
+        borrowMapper.updateById(borrow);
+        return refundDTO.getId();
+    }
+
+    /**
+     * 根据id修改借款归还状态
+     * @param refundDTO
+     */
+    public void updateRefundById(RefundDTO refundDTO) {
+        borrowMapper.updateRefundById(refundDTO.getId(),refundDTO.getStatus());
+    }
+
+    /**
+     * 管理员修改
+     * @param borrowDTO
+     */
+    public void adminEditForm(BorrowDTO borrowDTO) {
+        //修改借款数据
+        BorrowMoney borrowMoney = new BorrowMoney();
+        borrowMoney.setFinalMoney(borrowDTO.getFinalMoney());
+        borrowMoney.setMoneyLower(borrowDTO.getMoneyLower());
+        borrowMoney.setMoney(borrowDTO.getMoney());
+        borrowMoney.setId(borrowDTO.getId());
+        borrowMapper.updateInfoById(borrowMoney);
+        //修改还款数据
+        Refund refundInfo = new Refund();
+        refundInfo.setRefund(borrowDTO.getRefund());
+        refundInfo.setRefundLower(borrowDTO.getRefundLower());
+        refundInfo.setId(borrowDTO.getRefundId());
+        borrowMapper.updateRefundInfoById(refundInfo);
+    }
+}

+ 74 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/service/dto/BorrowDTO.java

@@ -0,0 +1,74 @@
+package com.jeeplus.business.borrow.service.dto;
+
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+public class BorrowDTO extends BaseEntity {
+    //借款编号(字典值)
+    public static final String BIZ_CODE = "38";
+
+    /**
+     * 编号
+     */
+    private String no;
+
+    /**
+     * 借款理由
+     */
+    private String reason;
+
+    /**
+     * 借款金额大小写
+     */
+    private String moneyLower;
+    private String money;
+
+    /**
+     * 实际借款金额
+     */
+    private String finalMoney;
+
+    /**
+     * 流程
+     */
+    private String procInsId;
+    private String processDefinitionId;
+    private String taskId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 部门名称
+     */
+    private String officeName;
+    private String officeId;
+
+    //借款人
+    private String createName;
+
+    //借款时间
+    private String[] createDates;
+
+    //对冲金额(还款金额)
+    private String refundLower;
+    private String refund;
+
+    //借款金额
+    private String[] borrowAmounts;
+
+    //还款id
+    private String refundId;
+
+    //还款流程
+    private String procInsIdRefund;
+    private String procDefIdRefund;
+    private String taskIdRefund;
+
+    //还款状态
+    private String refundStatus;
+
+}

+ 37 - 0
jeeplus-modules/jeeplus-business/src/main/java/com/jeeplus/business/borrow/service/dto/RefundDTO.java

@@ -0,0 +1,37 @@
+package com.jeeplus.business.borrow.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+@TableName("jy_refund")
+public class RefundDTO extends BaseEntity {
+
+    /**
+     * 还款金额(小写)
+     */
+    private String refundLower;
+
+    //还款金额(大写)
+    private String refund;
+
+    //借款表id
+    private String borrowId;
+
+    /**
+     * 流程
+     */
+    private String procInsId;
+    private String processDefinitionId;
+    private String taskId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    //剩余借款金额
+    private String finalMoney;
+
+}

+ 104 - 0
jeeplus-modules/jeeplus-flowable/src/main/java/com/jeeplus/modules/flowable/listener/BorrowListener.java

@@ -0,0 +1,104 @@
+package com.jeeplus.modules.flowable.listener;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.jeeplus.extension.domain.FlowCopy;
+import com.jeeplus.extension.service.FlowCopyService;
+import com.jeeplus.flowable.model.ActRuTaskInfo;
+import com.jeeplus.flowable.model.Flow;
+import com.jeeplus.flowable.service.FlowTaskService;
+import com.jeeplus.flowable.service.MyNoticeService;
+import com.jeeplus.sys.feign.IPostApi;
+import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.service.dto.PostDTO;
+import com.jeeplus.sys.service.dto.UserDTO;
+import lombok.SneakyThrows;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.ExecutionListener;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+@Component("BorrowListener")
+public class BorrowListener implements ExecutionListener {
+    @SneakyThrows
+    public void notify(DelegateExecution delegateExecution) {
+        String eventName = delegateExecution.getEventName ( );
+        System.out.println("--------- delegateExecution -----------" + delegateExecution);
+
+        if ( "start".equals ( eventName ) ) {
+            System.out.println ( "start=========" );
+        } else if ( "end".equals ( eventName ) ) {
+            //根据这里的 delegateExecution的id去act_ru_task表中查该流程的数据 对应表中的EXECUTION_ID_
+            ActRuTaskInfo task = SpringUtil.getBean(MyNoticeService.class).getTaskInfoByID(delegateExecution.getId());
+
+            if (null != task) {
+                List<Flow> flows = SpringUtil.getBean(FlowTaskService.class).historicTaskList(task.getProcInstId());
+                //根据PROC_DEF_ID_去act_re_deployment中查询流程的名称
+                String substring = task.getProcDefId().substring(0, task.getProcDefId().indexOf(":"));
+                String actName = SpringUtil.getBean(FlowTaskService.class).getActNameByDefId(substring);
+
+                String titleName = "";
+                // 根据流程定义ID查询流程实例
+                ProcessInstance processInstance = SpringUtil.getBean(RuntimeService.class).createProcessInstanceQuery()
+                        .processInstanceId(task.getProcInstId())
+                        .singleResult();
+
+                if (processInstance != null) {
+                    // 获取流程实例标题变量名(假设标题存储在名为"title"的变量中)
+                    String titleVariableName = "title";
+
+                    // 查询流程实例的标题变量
+                    Object title = SpringUtil.getBean(RuntimeService.class).getVariable(processInstance.getId(), titleVariableName);
+
+                    if (title != null) {
+                        titleName = title.toString();
+                    } else {
+                        // 如果标题变量不存在或者没有值,可以返回默认标题
+                        titleName = "";
+                    }
+                }
+                Flow flow = new Flow();
+                for (int i=0;i<flows.size();i++){
+                    if (flows.get(i).getComment().getMessage().equals("发起流程")){
+                        flow = flows.get(i);
+                    }
+                }
+
+                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+                UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getById(flow.getAssigneeId());
+                //获取到岗位为财务和出纳的人员信息
+                ArrayList<UserDTO> userDTOS = new ArrayList<>();
+
+                PostDTO postDTOByName = SpringUtil.getBean(IPostApi.class).getPostDTOByName("财务");
+                PostDTO postDTOByName1 = SpringUtil.getBean(IPostApi.class).getPostDTOByName("出纳");
+                List<UserDTO> listByPostId = SpringUtil.getBean(IUserApi.class).findListByPostId(postDTOByName.getId());
+                userDTOS.addAll(listByPostId);
+                List<UserDTO> listByPostId1 = SpringUtil.getBean(IUserApi.class).findListByPostId(postDTOByName1.getId());
+                userDTOS.addAll(listByPostId1);
+                String finalTitleName = titleName;
+                userDTOS.stream().forEach(item->{
+                    FlowCopy flowCopy = new FlowCopy();
+                    flowCopy.setProcDefId(task.getProcDefId());
+//                        flowCopy.setProcDefId(task.getProcDefId());
+                    flowCopy.setProcInsName(finalTitleName);
+                    flowCopy.setProcInsId(task.getProcInstId());
+                    flowCopy.setUserId(item.getId());
+                    SpringUtil.getBean(FlowCopyService.class).save(flowCopy);
+
+                });
+
+
+            }
+
+            System.out.println ( "end=========" );
+        } else if ( "take".equals ( eventName ) ) {//连线监听
+            System.out.println ( "take=========" );
+        }
+
+    }
+}