1、审批顺序:审批时,从一级到五级逐级审批,回退时,由审批人员指定回退级别,如从五级审批退回到经办人(需要重新修改材料的人员处),每一级可以看到回退的信息;修改完成后,直接从经办人处到达五级审批或退回的审批人。被退回的信息修改完成后,直接从经办人到达五级审批或退回的审批人处,那么其他层级的审批人虽然不需要审批,但要能够看到重新修改后的信息。
说明:
(1)差旅费报销主表:service_reimbursement
标识字段:FlowLevel(当前审核级别 处于哪个阶段 0:申请;1:一级审核;2:二级审核;3:三级审核等; 4:四级审核等; 5:五级审核等);RecordStatus(记录状态 详见字典sys_travelexpensestatus)
(2)费用报销主表:service_fund
标识字段:FlowLevel(当前审核级别 处于哪个阶段 0:申请;1:一级审核;2:二级审核;3:三级审核等; 4:四级审核等; 5:五级审核等);RecordStatus(记录状态 详见字典sys_travelexpensestatus)
(3)审批流程设置表:service_fundflowrule
(4)审批流程记录表:service_fundflow

通过钉钉将消息发送给发起人,进行重新修改
已添加4个文件
已修改26个文件
921 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DingTalkController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/pom.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceFund.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceFundShared.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursement.java 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursementShared.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursementpayeeShared.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingTalkReqVo.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFundSharedMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceReimbursementSharedMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/DingTalkService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundSharedService.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceReimbursementSharedService.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundSharedServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementSharedServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceFundMapper.xml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceFundSharedMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementSharedMapper.xml 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementpayeeSharedMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DingTalkController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.web.controller.project;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import com.ruoyi.project.service.DingTalkService;
import com.taobao.api.ApiException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * é’‰é’‰æŽ¥å£
 *
 * @author liusheng
 * @date 2023-05-15
 */
@Api(description = "钉钉接口")
@RestController
@RequestMapping("/smartor/dingtalk")
@PropertySource(value = {"classpath:application-druid.yml"})
public class DingTalkController extends BaseController {
    @Value("${dingAppid}")
    private String dingAppid;
    @Value("${dingAppSecret}")
    private String dingAppSecret;
    @Autowired
    private DingTalkService dingTalkService;
    /**
     * å‘送钉钉消息
     *
     * @param dingTalkReqVo å‘送内容
     * @throws ApiException
     */
    @ApiOperation("发送钉钉消息")
    @PostMapping("/sendNotification")
    public AjaxResult sendNotification(@RequestBody DingTalkReqVo dingTalkReqVo) {
        Boolean aBoolean = dingTalkService.sendNotification(dingTalkReqVo);
        if (aBoolean) {
            return success();
        }
        return error();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java
@@ -493,10 +493,15 @@
                FlowLevel = FlowLevel + 1;
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                } else {
                RecordStatus = (FlowLevel + 1) * 2 - 1;
                FlowLevel = (FlowLevel - 1);
                if (FlowLevel < 0) {
                    FlowLevel = 0;
                    }
                }
            }
@@ -589,12 +594,30 @@
    @PutMapping
    @RepeatSubmit
    public AjaxResult edit(@RequestBody ServiceFund serviceFund) {
        List<ServiceFund> infoByInfoIdList = serviceFundService.getInfoByInfoId(serviceFund.getId());
        for (ServiceFund sf : infoByInfoIdList) {
            //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了
            if (sf.getBackflowlevel() == 100 || sf.getBackflowlevel() == 199) {
                ServiceFundShared serviceFundShared = DtoConversionUtils.sourceToTarget(serviceFund, ServiceFundShared.class);
                serviceFundShared.setId(null);
                serviceFundShared.setDel_flag(0);
                fundSharedService.save(serviceFundShared);
                //将fund表的审核状态改成100
                sf.setBackflowlevel(100);
                serviceFundService.updateById(sf);
                return success();
            } else {
        boolean bret = serviceFundService.updateById(serviceFund);
//        if (bret) {
//            addReiSharedDatd(serviceFund, 2);
//        }
        return toAjax(bret);
    }
        }
        return toAjax(false);
    }
    /**
     * åˆ é™¤è´¹ç”¨ç”³è¯·ä¸»
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java
@@ -2,6 +2,8 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.config.RuoYiConfig;
@@ -15,6 +17,7 @@
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.dto.ServiceReimbursementDto;
@@ -29,6 +32,7 @@
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Options;
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,10 +61,10 @@
    private IServiceReimbursementService serviceReimbursementService;
    @Autowired
    private IServiceReimbursementpayeeService reimbursementpayeeService;
    private IServiceReimbursementSharedService serviceReimbursementSharedService;
    @Autowired
    private IServiceReimbursementSharedService serviceReimbursementServiceShare;
    private IServiceReimbursementpayeeService reimbursementpayeeService;
    @Autowired
    private IServiceReimbursementdetailService serviceReimbursementdetailService;
@@ -70,6 +74,9 @@
    @Autowired
    private IServiceFundflowService serviceFundflowService;
    @Autowired
    private IServiceFundService serviceFundService;
    @Autowired
    private ISysPostService postService;
@@ -437,6 +444,7 @@
//        return 0;
//    }
    /**
     * å·®æ—…费上报
     */
@@ -445,6 +453,20 @@
    @PostMapping("/travelexpensereport")
    public AjaxResult travelexpensereport(@RequestBody CheckFundVO checkFundVO) {
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid());
        //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了
        if (serviceReimbursement.getBackflowlevel() == 100 || serviceReimbursement.getBackflowlevel() == 199) {
            //将修改的上报数据 æ–°å¢žä¸€æ¡
            ServiceReimbursementShared serviceReimbursementShared = DtoConversionUtils.sourceToTarget(serviceReimbursement, ServiceReimbursementShared.class);
            serviceReimbursementShared.setId(null);
            serviceReimbursementShared.setDelFlag(0L);
            serviceReimbursementSharedService.save(serviceReimbursementShared);
            //将退回阶段设置成100
            serviceReimbursement.setBackflowlevel(100L);
            serviceReimbursementService.updateById(serviceReimbursement);
            return success();
        }
        if (serviceReimbursement != null) {
            Integer TotalLevel = 0;
            LoginUser loginUser = getLoginUser();
@@ -453,10 +475,12 @@
            if (!postids.contains(2)) {
                serviceReimbursement.setFlowlevel(1L);
                serviceReimbursement.setBackflowlevel(1L);
                serviceReimbursement.setRecordstatus(2);
            } else {
                serviceReimbursement.setFlowlevel(0L);
                serviceReimbursement.setRecordstatus(0);
                serviceReimbursement.setBackflowlevel(0L);
            }
            if (!postids.contains(2)) {
@@ -489,6 +513,7 @@
    @PostMapping("/checkfund")
    public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) {
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid());
        if (serviceReimbursement != null) {
            Integer totalLevel = 0;
            LoginUser loginUser = getLoginUser();
@@ -514,6 +539,9 @@
            Integer CheckFlag = 0;
            Integer RecordStatus = serviceReimbursement.getRecordstatus();
            Integer FlowLevel = Integer.valueOf(serviceReimbursement.getFlowlevel().toString());
            if (Objects.isNull(serviceReimbursement.getBackflowlevel()) && !Objects.isNull(serviceReimbursement.getFlowlevel())) {
                serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel.toString()));
            }
            Integer OriginalFlowLevel = FlowLevel;
            if (checkFundVO.getFlowconclusion() == 1) {
                CheckFlag = 1;
@@ -530,16 +558,22 @@
                FlowLevel = FlowLevel + 1;
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                } else {
                    //下面是原来的写法,一级一级的往下退,医院现在不要这样搞了,下面这段代码先保留,等医院回心转意,再给放开
                RecordStatus = (FlowLevel + 1) * 2 - 1;
                FlowLevel = (FlowLevel - 1);
                if (FlowLevel < 0) {
                    FlowLevel = 0;
                }
            }
            }
            serviceReimbursement.setRecordstatus(RecordStatus);
            serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString()));
            ServiceFundflow serviceFundflow = new ServiceFundflow();
            SysUser user = loginUser.getUser();
            serviceFundflow.setFundid(serviceReimbursement.getId());
ruoyi-admin/src/main/resources/application.yml
@@ -140,3 +140,7 @@
  excludes: /system/notice
  # åŒ¹é…é“¾æŽ¥
  urlPatterns: /system/*,/monitor/*,/tool/*
#钉钉的密钥
dingAppid: dingn8iip5ubj7clrrsv
dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
ruoyi-project/pom.xml
@@ -27,6 +27,27 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- é˜¿é‡ŒJSON解析器 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.25</version>
        </dependency>
    </dependencies>
</project>
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceFund.java
@@ -205,6 +205,12 @@
    @ApiModelProperty("当前审核级别")
    private int flowlevel;
    /**
     * å¤„于哪个阶段 0:申请;1:一级审核;2:二级审核;3:三级审核等  100:医院财务  199:医院驳回
     */
    @ApiModelProperty("退回审核级别")
    private int backflowlevel;
    /** ç¨Žå‰é‡‘额 */
    @ApiModelProperty("税前金额")
    @Excel(name = "税前金额")
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceFundShared.java
@@ -256,5 +256,10 @@
    @Excel(name = "记录状态")
    private long serfunid;
    @ApiModelProperty("财务驳回信息:姓名+' '+时间+' '+意见")
    @Excel(name = "财务驳回信息:姓名+' '+时间+' '+意见")
    private String cxrjyj;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursement.java
@@ -19,157 +19,216 @@
 */
@Data
@ApiModel("报销申请")
public class ServiceReimbursement extends BaseEntity
{
public class ServiceReimbursement extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** $column.columnComment */
    /**
     * $column.columnComment
     */
    @ApiModelProperty("$column.columnComment")
    //数据库自增改成@TableId(type = IdType.AUTO)
    @TableId(type = IdType.AUTO)
    private Long id;
    /** æŠ¥é”€äººç¼–号 */
    /**
     * æŠ¥é”€äººç¼–号
     */
    @ApiModelProperty("报销人编号")
    @Excel(name = "报销人编号")
    private String userno;
    /** æŠ¥é”€äººå§“名 */
    /**
     * æŠ¥é”€äººå§“名
     */
    @ApiModelProperty("报销人姓名")
    @Excel(name = "报销人姓名")
    private String username;
    /** è¯ä»¶ç±»åž‹ æ ¹æ®å­—å…¸sys_IDType */
    /**
     * è¯ä»¶ç±»åž‹ æ ¹æ®å­—å…¸sys_IDType
     */
    @ApiModelProperty("证件类型 æ ¹æ®å­—å…¸sys_IDType")
    @Excel(name = "证件类型 æ ¹æ®å­—å…¸sys_IDType")
    private String idcardtype;
    /** è¯ä»¶å·ç  */
    /**
     * è¯ä»¶å·ç 
     */
    @ApiModelProperty("证件号码")
    @Excel(name = "证件号码")
    private String idcardno;
    /** è”系电话 */
    /**
     * è”系电话
     */
    @ApiModelProperty("联系电话")
    @Excel(name = "联系电话")
    private String phone;
    /** å¼€æˆ·é“¶è¡Œ */
    /**
     * å¼€æˆ·é“¶è¡Œ
     */
    @ApiModelProperty("开户银行")
    @Excel(name = "开户银行")
    private String depositbank;
    /** å¡å· */
    /**
     * å¡å·
     */
    @ApiModelProperty("卡号")
    @Excel(name = "卡号")
    private String bankcardno;
    /** åˆ†è¡Œåç§° */
    /**
     * åˆ†è¡Œåç§°
     */
    @ApiModelProperty("分行名称")
    @Excel(name = "分行名称")
    private String branchbankname;
    /** é“¶è¡Œå¡ç…§ç‰‡è·¯å¾„ å¤šä¸ªç”¨;分开 */
    /**
     * é“¶è¡Œå¡ç…§ç‰‡è·¯å¾„ å¤šä¸ªç”¨;分开
     */
    @ApiModelProperty("银行卡照片路径 å¤šä¸ªç”¨;分开")
    @Excel(name = "银行卡照片路径 å¤šä¸ªç”¨;分开")
    private String annexbankcard;
    /** é™„件路径 å¤šä¸ªç”¨;分开 */
    /**
     * é™„件路径 å¤šä¸ªç”¨;分开
     */
    @ApiModelProperty("附件路径 å¤šä¸ªç”¨;分开")
    @Excel(name = "附件路径 å¤šä¸ªç”¨;分开")
    private String annexfiles;
    /** ç”³è¯·é‡‘额 */
    /**
     * ç”³è¯·é‡‘额
     */
    @ApiModelProperty("申请金额")
    @Excel(name = "申请金额")
    private Double amountrequested;
    /** é¢„支费用 */
    /**
     * é¢„支费用
     */
    @ApiModelProperty("预支费用")
    @Excel(name = "预支费用")
    private Double prepaidamount;
    /** å‘票张数 */
    /**
     * å‘票张数
     */
    @ApiModelProperty("发票张数")
    @Excel(name = "发票张数")
    private Long invoicecount;
    /** é™„ä»¶æ•° */
    /**
     * é™„ä»¶æ•°
     */
    @ApiModelProperty("附件数")
    @Excel(name = "附件数")
    private Long attachcount;
    /** éƒ¨é—¨ä¸»ç®¡å·¥å· */
    /**
     * éƒ¨é—¨ä¸»ç®¡å·¥å·
     */
    @ApiModelProperty("部门主管工号")
    @Excel(name = "部门主管工号")
    private String managerno;
    /** éƒ¨é—¨ä¸»ç®¡åå­— */
    /**
     * éƒ¨é—¨ä¸»ç®¡åå­—
     */
    @ApiModelProperty("部门主管名字")
    @Excel(name = "部门主管名字")
    private String managername;
    /** éƒ¨é—¨ç¼–号 */
    /**
     * éƒ¨é—¨ç¼–号
     */
    @ApiModelProperty("部门编号")
    @Excel(name = "部门编号")
    private String deptmentno;
    /** éƒ¨é—¨åç§° */
    /**
     * éƒ¨é—¨åç§°
     */
    @ApiModelProperty("部门名称")
    @Excel(name = "部门名称")
    private String deptmentname;
    /** ä¸­å¿ƒç­¾å­— */
    /**
     * ä¸­å¿ƒç­¾å­—
     */
    @ApiModelProperty("中心签字")
    @Excel(name = "中心签字")
    private String opochecker;
    /** è´¢åŠ¡å‰¯é™¢é•¿ç­¾å­— */
    /**
     * è´¢åŠ¡å‰¯é™¢é•¿ç­¾å­—
     */
    @ApiModelProperty("财务副院长签字")
    @Excel(name = "财务副院长签字")
    private String finvicepresident;
    /** ä¸šåŠ¡å‰¯é™¢é•¿ç­¾å­— */
    /**
     * ä¸šåŠ¡å‰¯é™¢é•¿ç­¾å­—
     */
    @ApiModelProperty("业务副院长签字")
    @Excel(name = "业务副院长签字")
    private String busvicepresident;
    /** åŠžå…¬å®¤ä¸»ä»»ç­¾å­— */
    /**
     * åŠžå…¬å®¤ä¸»ä»»ç­¾å­—
     */
    @ApiModelProperty("办公室主任签字")
    @Excel(name = "办公室主任签字")
    private String officedirector;
    /** è´¢åŠ¡å®¤ä¸»ä»»ç­¾å­— */
    /**
     * è´¢åŠ¡å®¤ä¸»ä»»ç­¾å­—
     */
    @ApiModelProperty("财务室主任签字")
    @Excel(name = "财务室主任签字")
    private String financedirector;
    /** è´¢åŠ¡å®¡æ ¸ */
    /**
     * è´¢åŠ¡å®¡æ ¸
     */
    @ApiModelProperty("财务审核")
    @Excel(name = "财务审核")
    private String financechecher;
    /** å…³è”service_donatebaseinfo表的ID */
    /**
     * å…³è”service_donatebaseinfo表的ID
     */
    @ApiModelProperty("关联service_donatebaseinfo表的ID")
    @Excel(name = "关联service_donatebaseinfo表的ID")
    private Long infoid;
    /** æçŒ®è€…编号 */
    /**
     * æçŒ®è€…编号
     */
    @ApiModelProperty("捐献者编号")
    @Excel(name = "捐献者编号")
    private String donorno;
    /** è®°å½•状态 */
    /**
     * è®°å½•状态
     */
    @ApiModelProperty("记录状态")
    @Excel(name = "记录状态")
    private Integer recordstatus;
    /** ä¸Šä¼ æ ‡å¿— */
    /**
     * ä¸Šä¼ æ ‡å¿—
     */
    @ApiModelProperty("上传标志")
    @Excel(name = "上传标志")
    private String uploadflag;
    /** ä¸Šä¼ æ—¶é—´ */
    /**
     * ä¸Šä¼ æ—¶é—´
     */
    @ApiModelProperty("上传时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@@ -191,22 +250,35 @@
    @ApiModelProperty("总金额的大写")
    private String bigstrmoney;
    /** é™„件地址,add by yangjb 20221124 */
    /**
     * é™„件地址,add by yangjb 20221124
     */
    @ApiModelProperty("附件地址")
    private String fileurl;
    private String remark;
    /** å½“前审核级别 å¤„于哪个阶段 0:申请;1:一级审核;2:二级审核;3:三级审核等 */
    /**
     * å½“前审核级别 å¤„于哪个阶段 0:申请;1:一级审核;2:二级审核;3:三级审核等
     */
    @ApiModelProperty("当前审核级别")
    private Long flowlevel;
    /**
     * 99:审批驳回    100:上传医院  199:医院驳回
     */
    @ApiModelProperty("退回时的审核级别")
    private Long backflowlevel;
    /** è´¹ç”¨å½’属:0:其他人员;1:专职人员;2:协调员;3:专家;4:捐献者家属 */
    /**
     * è´¹ç”¨å½’属:0:其他人员;1:专职人员;2:协调员;3:专家;4:捐献者家属
     */
    @ApiModelProperty("费用归属")
    private String costtype;
    /** è´¹ç”¨å½’属描述 */
    /**
     * è´¹ç”¨å½’属描述
     */
    @ApiModelProperty("费用归属描述")
    private String costtypename;
@@ -229,6 +301,10 @@
    @ApiModelProperty("申请时间")
    private Date createTime;
    @ApiModelProperty("删除标志(0代表存在 1代表删除)")
    private Integer delFlag;
//    @ApiModelProperty("开始时间")
//    private Date starttime;
//
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursementShared.java
@@ -262,6 +262,9 @@
    @ApiModelProperty("捐献家属人数")
    private Integer donorrelatives;
    @ApiModelProperty("财务系统驳回信息:姓名+' '+时间+' '+意见")
    private String cxrjyj;
    @Override
    public String toString() {
        return "ServiceReimbursementShared{" +
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceReimbursementpayeeShared.java
@@ -59,6 +59,11 @@
    @Excel(name = "开户银行")
    private String bankname;
    /** åˆ é™¤ */
    @ApiModelProperty("删除")
    @Excel(name = "删除")
    private Integer delFlag;
    /** å¤‡æ³¨ */
    @ApiModelProperty("备注")
    @Excel(name = "备注")
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingTalkReqVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.ruoyi.project.domain.vo;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * é’‰é’‰æ¶ˆæ¯å‘送
 *
 * @author ls
 * @date 2023-07-14
 */
@Data
@ApiModel(value = "DingTalkReqVo", description = "钉钉消息发送")
public class DingTalkReqVo extends BaseEntity {
    /**
     * å‘送内容
     */
    @ApiModelProperty(value = "发送内容")
    private List<ConcurrentHashMap<String, String>> contents;
    /**
     * ç”¨æˆ·é’‰é’‰å·
     */
    @ApiModelProperty(value = "用户手机号")
    private String number;
    /**
     * éƒ¨é—¨ID
     */
    @ApiModelProperty(value = "部门ID")
    private Long deptId;
    /**
     * å‘送消息的标题
     */
    @ApiModelProperty(value = "发送消息的标题")
    private String title;
    /**
     * è·³è½¬url
     */
    @ApiModelProperty(value = "跳转url")
    private String url;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFundSharedMapper.java
@@ -24,4 +24,6 @@
    public List<ServiceFundShared> selectServiceFundSharedList(ServiceFundShared serviceFundShared);
    List<ServiceFundShared> getFundShareInfoById(Long fundid);
    Boolean delfundsharedInfoById(Long fundId);
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceFunddetailMapper.java
@@ -46,4 +46,7 @@
    public List<ServiceFunddetail> getDataBybeneficiaryNo(FunddetailReqVo funddetailReqVo);
    List<ServiceFunddetail> getTaxBeforeByBeneFiciaryNo(TaxMoneyVO taxMoneyV);
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceReimbursementSharedMapper.java
@@ -1,9 +1,10 @@
package com.ruoyi.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.project.domain.ServiceReimbursementShared;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
@@ -12,8 +13,8 @@
 * @author ruoyi
 * @date 2023-01-10
 */
public interface ServiceReimbursementSharedMapper extends BaseMapper<ServiceReimbursementShared>
{
@Mapper
public interface ServiceReimbursementSharedMapper extends BaseMapper<ServiceReimbursementShared> {
    /**
     * æŸ¥è¯¢æŠ¥é”€ç”³è¯·åˆ—表
     *
@@ -23,4 +24,6 @@
    public List<ServiceReimbursementShared> selectServiceReimbursementSharedList(ServiceReimbursementShared serviceReimbursementShared);
    List<ServiceReimbursementShared> getRemShareInfoByRemId(Long RemId);
    Boolean delResharedInfoById(Long id);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/DingTalkService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.project.service;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
/**
 * å®£æ•™åˆ†ç±»Service接口
 *
 * @author smartor
 * @date 2023-03-04
 */
public interface DingTalkService {
    /**
     * å‘送钉钉消息
     *
     * @param dingTalkReqVo
     */
    Boolean sendNotification(DingTalkReqVo dingTalkReqVo);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundSharedService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.project.domain.ServiceFundShared;
import com.ruoyi.project.domain.ServiceReimbursementShared;
import java.util.List;
@@ -11,8 +12,7 @@
 * @author ruoyi
 * @date 2023-03-27
 */
public interface IServiceFundSharedService extends IService<ServiceFundShared>
{
public interface IServiceFundSharedService extends IService<ServiceFundShared> {
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·ä¸»åˆ—表
@@ -20,6 +20,11 @@
     * @param serviceFundShared è´¹ç”¨ç”³è¯·ä¸»
     * @return è´¹ç”¨ç”³è¯·ä¸»é›†åˆ
     */
    public List<ServiceFundShared> queryList(ServiceFundShared serviceFundShared);
    List<ServiceFundShared> queryList(ServiceFundShared serviceFundShared);
    List<ServiceFundShared> queryFundShareList();
    List<ServiceFundShared> getFundShareInfoById(Long fundid);
    Boolean delfundsharedInfoById(Long fundId);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceReimbursementSharedService.java
@@ -11,8 +11,7 @@
 * @author ruoyi
 * @date 2023-01-10
 */
public interface IServiceReimbursementSharedService extends IService<ServiceReimbursementShared>
{
public interface IServiceReimbursementSharedService extends IService<ServiceReimbursementShared> {
    /**
     * æŸ¥è¯¢æŠ¥é”€ç”³è¯·åˆ—表
@@ -21,5 +20,15 @@
     * @return æŠ¥é”€ç”³è¯·é›†åˆ
     */
    public List<ServiceReimbursementShared> queryList(ServiceReimbursementShared serviceReimbursementShared);
    List<ServiceReimbursementShared> getRemShareInfoByRemId(Long remeid);
    /**
     * æŸ¥è¯¢è¢«é€€å›žçš„,并且没有删除的数据
     *
     * @return
     */
    List<ServiceReimbursementShared> queryReShareList();
    Boolean delResharedInfoById(Long remid);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
package com.ruoyi.project.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiUserListidRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiUserListidResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import com.ruoyi.project.service.DingTalkService;
import com.taobao.api.ApiException;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * æ™ºèƒ½ä¸­å¿ƒ
 *
 * @author ls
 * @date 2023-05-23
 */
@Service
@Log4j
public class DingTalkServiceImpl implements DingTalkService {
    @Value("${dingAppid}")
    private String dingAppid;
    @Value("${dingAppSecret}")
    private String dingAppSecret;
    @Override
    public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
        String body = null;
        List<String> userIdlist = new ArrayList();
        Boolean result = false;
        log.info("发送钉钉通知");
        String accessToken = null;
        try {
            accessToken = getAccessToken();
        } catch (ApiException e) {
            e.printStackTrace();
        }
        if (StringUtils.isNotEmpty(dingTalkReqVo.getNumber())) {
            DingTalkClient clientT = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getbymobile");
            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
            req.setMobile(dingTalkReqVo.getNumber());
            OapiV2UserGetbymobileResponse rsp = null;
            try {
                rsp = clientT.execute(req, accessToken);
                body = rsp.getBody();
                String jsonObject = JSONObject.parseObject(body).getJSONObject("result").get("userid").toString();
                userIdlist.add(jsonObject);
            } catch (ApiException e) {
                e.printStackTrace();
            }
        } else {
            DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
            OapiUserListidRequest request2 = new OapiUserListidRequest();
            request2.setDeptId(dingTalkReqVo.getDeptId()); // è®¾ç½®è¦èŽ·å–çš„éƒ¨é—¨ ID,这里以根部门为例675909059L
            // è®¾ç½®éƒ¨é—¨ ID,如果获取所有员工手机号,可以设置为根部门的 ID
            OapiUserListidResponse response2 = null;
            try {
                response2 = client3.execute(request2, accessToken);
            } catch (ApiException e) {
                e.printStackTrace();
            }
            body = response2.getBody();
            // è§£æžä¸ºJSONObject
            JSONObject jsonObject = JSONObject.parseObject(body);
            // æå–出JSONArray
            JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list"));
            // å°†JSONArray转为List列表
            String str = JSONObject.toJSONString(jsonArray);
            userIdlist = JSONObject.parseObject(str, List.class);
        }
        //userid数组
        for (String urid : userIdlist) {
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
            OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
            request.setUseridList(urid);
            request.setAgentId(1779052814L);
            request.setToAllUser(false);
            //发送内容处理
            List<ConcurrentHashMap<String, String>> contents = dingTalkReqVo.getContents();
            ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();
            for (int i = 0; i < contents.size(); i++) {
                ConcurrentHashMap<String, String> map = contents.get(i);
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();
                    formSeverityDesc.setKey(entry.getKey());
                    formSeverityDesc.setValue(entry.getValue());
                    objects.add(formSeverityDesc);
                }
            }
            OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
            msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
            msg.getOa().setMessageUrl(dingTalkReqVo.getUrl());
            msg.getOa().setPcMessageUrl(dingTalkReqVo.getUrl());
            msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
            //   msg.getOa().getHead().setText("你在说啥呢绒顶替苛夺阿斯蒂芬阿斯蒂芬");
            msg.getOa().getHead().setBgcolor("00409eff");
            msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
            msg.getOa().getBody().setTitle(dingTalkReqVo.getTitle());
            // msg.getOa().getBody().setContent("待处理:" + "123" + "条");
            msg.getOa().getBody().setForm(objects);
            msg.setMsgtype("oa");
            request.setMsg(msg);
            //  log.info("获取发送通知消息体和获取发送通知人完成");
            OapiMessageCorpconversationAsyncsendV2Response response = null;
            try {
                response = client.execute(request, accessToken);
            } catch (ApiException e) {
                e.printStackTrace();
            }
            //  log.info("消息任务ID"+response.getTaskId());
            System.out.println(response.getTaskId());
            result = response.isSuccess();
        }
        return result;
    }
    /**
     * èŽ·å– access_token
     */
    private String getAccessToken() throws ApiException {
        DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
        OapiGettokenRequest request = new OapiGettokenRequest();
        //Appkey
        request.setAppkey(dingAppid);
        //Appsecret
        request.setAppsecret(dingAppSecret);
        /*请求方式*/
        request.setHttpMethod("GET");
        OapiGettokenResponse response = client.execute(request);
        return response.getAccessToken();
    }
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -643,7 +643,6 @@
        return count;
    }
    int uploadOAFileAndUpdateDb(ServiceFundShared remShare) {
        //上传OA文件
        //String strUrl = "http://129.88.242.39:8899/seeyon/rest/token?userName=opo&password=127814f8-84e8-4304-84a5-a71573567efd&loginName=demo3";
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundSharedServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.domain.ServiceFundShared;
import com.ruoyi.project.domain.ServiceReimbursementShared;
import com.ruoyi.project.mapper.ServiceFundSharedMapper;
import com.ruoyi.project.service.IServiceFundSharedService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -171,9 +172,24 @@
    }
    @Override
    public List<ServiceFundShared> queryFundShareList() {
        LambdaQueryWrapper<ServiceFundShared> wrappers = Wrappers.lambdaQuery();
        wrappers.eq(ServiceFundShared::getDel_flag, 0);
        wrappers.isNotNull(ServiceFundShared::getCxrjyj);
        return this.list(wrappers);
    }
    @Override
    public  List<ServiceFundShared> getFundShareInfoById(Long fundid)
    {
        return serviceFundSharedMapper.getFundShareInfoById(fundid);
        // return  null;
    }
    @Override
    public Boolean delfundsharedInfoById(Long fundId) {
        return serviceFundSharedMapper.delfundsharedInfoById(fundId);
    }
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java
@@ -17,6 +17,7 @@
import com.ruoyi.project.service.IServiceReimbursementdetailSharedService;
import com.ruoyi.project.service.IServiceReimbursementpayeeSharedService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -72,6 +73,9 @@
    @Override
    public List<ServiceReimbursement> queryList(ServiceReimbursement serviceReimbursement) {
        LambdaQueryWrapper<ServiceReimbursement> wrappers = Wrappers.lambdaQuery();
        if (ObjectUtils.isNotEmpty(serviceReimbursement.getId())) {
            wrappers.eq(ServiceReimbursement::getId, serviceReimbursement.getId());
        }
        if (StringUtils.isNotBlank(serviceReimbursement.getCreateBy())) {
            wrappers.eq(ServiceReimbursement::getCreateBy, serviceReimbursement.getCreateBy());
        }
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementSharedServiceImpl.java
@@ -19,8 +19,7 @@
 * @date 2023-01-10
 */
@Service
public class ServiceReimbursementSharedServiceImpl extends ServiceImpl<ServiceReimbursementSharedMapper, ServiceReimbursementShared> implements IServiceReimbursementSharedService
{
public class ServiceReimbursementSharedServiceImpl extends ServiceImpl<ServiceReimbursementSharedMapper, ServiceReimbursementShared> implements IServiceReimbursementSharedService {
    @Autowired
@@ -158,14 +157,29 @@
        if (StringUtils.isNotBlank(serviceReimbursementShared.getFileid())){
            wrappers.eq(ServiceReimbursementShared::getFileid ,serviceReimbursementShared.getFileid());
        }
        return this.list(wrappers);
    }
    @Override
    public  List<ServiceReimbursementShared> getRemShareInfoByRemId(Long remeid)
    {
    public List<ServiceReimbursementShared> queryReShareList() {
        LambdaQueryWrapper<ServiceReimbursementShared> wrappers = Wrappers.lambdaQuery();
        wrappers.eq(ServiceReimbursementShared::getDelFlag, 0);
        wrappers.isNotNull(ServiceReimbursementShared::getCxrjyj);
        return this.list(wrappers);
    }
    @Override
    public List<ServiceReimbursementShared> getRemShareInfoByRemId(Long remeid) {
        return serviceReimbursementSharedMapper.getRemShareInfoByRemId(remeid);
       // return  null;
    }
    @Override
    public Boolean delResharedInfoById(Long id) {
        return serviceReimbursementSharedMapper.delResharedInfoById(id);
    }
}
ruoyi-project/src/main/resources/mapper/project/ServiceFundMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceFundMapper">
    
    <resultMap type="ServiceFund" id="ServiceFundResult">
    <resultMap type="com.ruoyi.project.domain.ServiceFund" id="ServiceFundResult">
        <result property="id"    column="ID"    />
        <result property="infoid"    column="InfoID"    />
        <result property="donorno"    column="DonorNo"    />
@@ -50,10 +50,59 @@
        <result property="flowlevel"    column="FlowLevel"    />
        <result property="pretaxcost"    column="PretaxCost"    />
        <result property="taxedcost"    column="TaxedCost"    />
        <result property="backflowlevel" column="backFlowLevel"/>
    </resultMap>
    <sql id="selectServiceFundVo">
        select ID, InfoID, DonorNo, DonorName, del_flag, create_by, create_time, update_by, update_time, UserNo, UserName, UnitName, UnitNo, UnitUserNo, PretaxCost, TaxedCost, Phone, AnnexBankCard, AnnexRegistForm, AmountRequested, ApplyType, PrepaidAmount, InvoiceCount, AttachCount, ManagerNo, ManagerName, DeptmentNo, DeptmentName, OPOchecker, FinVicePresident, BusVicePresident, OfficeDirector, FinanceDirector, FinanceChecher, TotalCost, ProcurementCost, ExpertCost, EthicsCost, MedicalCost, FamilyCost, AftercareCost, Remark, RecordStatus, uploadflag, uploadtime,FlowLevel from service_fund
        select ID,
               InfoID,
               DonorNo,
               DonorName,
               del_flag,
               create_by,
               create_time,
               update_by,
               update_time,
               UserNo,
               UserName,
               UnitName,
               UnitNo,
               UnitUserNo,
               PretaxCost,
               TaxedCost,
               Phone,
               AnnexBankCard,
               AnnexRegistForm,
               AmountRequested,
               ApplyType,
               PrepaidAmount,
               InvoiceCount,
               AttachCount,
               ManagerNo,
               ManagerName,
               DeptmentNo,
               DeptmentName,
               OPOchecker,
               FinVicePresident,
               BusVicePresident,
               OfficeDirector,
               FinanceDirector,
               FinanceChecher,
               TotalCost,
               ProcurementCost,
               ExpertCost,
               EthicsCost,
               MedicalCost,
               FamilyCost,
               AftercareCost,
               Remark,
               RecordStatus,
               uploadflag,
               uploadtime,
               backflowlevel,
               FlowLevel
        from service_fund
    </sql>
    <select id="selectServiceFundList" parameterType="ServiceFund" resultMap="ServiceFundResult">
@@ -64,7 +113,9 @@
            <if test="userno != null  and userno != ''"> and UserNo = #{userno}</if>
            <if test="username != null  and username != ''"> and UserName like concat('%', #{username}, '%')</if>
            <if test="applytype != null  and applytype != ''"> and ApplyType = #{applytype}</if>
            <if test="deptmentname != null  and deptmentname != ''"> and DeptmentName like concat('%', #{deptmentname}, '%')</if>
        <if test="deptmentname != null  and deptmentname != ''">and DeptmentName like concat('%', #{deptmentname},
            '%')
        </if>
            <if test="recordstatus != null"> and RecordStatus = #{recordstatus}</if>
            <if test="uploadflag != null  and uploadflag != ''"> and uploadflag = #{uploadflag}</if>
            <if test="uploadtime != null "> and uploadtime = #{uploadtime}</if>
@@ -79,7 +130,8 @@
    </select>
    <select id="getFundId" resultType="java.lang.Long">
        select max(ID) from service_fund
        select max(ID)
        from service_fund
        where infoid = #{infoid}
    </select>
    <select id="selectVOList" resultType="com.ruoyi.project.domain.vo.FundVO">
@@ -178,7 +230,8 @@
    </select>
    <select id="getListBypower" statementType="CALLABLE" resultType="com.ruoyi.project.domain.vo.SpFinancialExpensesFundOut">
    <select id="getListBypower" statementType="CALLABLE"
            resultType="com.ruoyi.project.domain.vo.SpFinancialExpensesFundOut">
        call SP_FINANCIAL_EXPENSES(#{PAUSERNO,mode=IN,jdbcType=VARCHAR},#{PAFUNDTYPE,mode=IN,jdbcType=INTEGER},#{PAAPPLICANT,mode=IN,jdbcType=VARCHAR},#{PAAPPLICATIONBEGTIME,mode=IN,jdbcType=VARCHAR},#{PAAPPLICATIONENDTIME,mode=IN,jdbcType=VARCHAR},#{PADEPARTMENT,mode=IN,jdbcType=VARCHAR},#{CHECKFLAG,mode=IN,jdbcType=INTEGER},#{APPLYTYPE,mode=IN,jdbcType=INTEGER})
    </select>
ruoyi-project/src/main/resources/mapper/project/ServiceFundSharedMapper.xml
@@ -116,5 +116,10 @@
            <if test="fileid != null  and fileid != ''"> and fileid = #{fileid}</if>
        </where>
    </select>
    <update id="delfundsharedInfoById">
        UPDATE service_fund_shared
        SET del_flag = 1
        WHERE ID = #{fundId}
          and del_flag != 1
    </update>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceFunddetailMapper.xml
@@ -235,4 +235,5 @@
        where create_time like concat(#{startTime}, '%') and beneficiaryNo=#{beneficiaryNo}
    </select>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementMapper.xml
@@ -4,7 +4,7 @@
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceReimbursementMapper">
    <resultMap type="ServiceReimbursement" id="ServiceReimbursementResult">
    <resultMap type="com.ruoyi.project.domain.ServiceReimbursement" id="ServiceReimbursementResult">
        <result property="id" column="ID"/>
        <result property="delFlag" column="del_flag"/>
        <result property="createBy" column="create_by"/>
@@ -55,6 +55,7 @@
        <result property="donorremark" column="donorremark"/>
        <result property="donoramount" column="donoramount"/>
        <result property="donorrelatives" column="donorrelatives"/>
        <result property="backflowlevel" column="backFlowLevel"/>
    </resultMap>
    <sql id="selectServiceReimbursementVo">
@@ -105,11 +106,12 @@
               donorbankcard,
               donorremark,
               donoramount,
               donorrelatives
               donorrelatives,
               backFlowLevel
        from service_reimbursement
    </sql>
    <select id="selectServiceReimbursementList" parameterType="ServiceReimbursement"
    <select id="selectServiceReimbursementList" parameterType="com.ruoyi.project.domain.ServiceReimbursement"
            resultMap="ServiceReimbursementResult">
        <include refid="selectServiceReimbursementVo"/>
        <where>
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementSharedMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceReimbursementSharedMapper">
    
    <resultMap type="ServiceReimbursementShared" id="ServiceReimbursementSharedResult">
    <resultMap type="com.ruoyi.project.domain.ServiceReimbursementShared" id="ServiceReimbursementSharedResult">
        <result property="id"    column="ID"    />
        <result property="delFlag"    column="del_flag"    />
        <result property="createBy"    column="create_by"    />
@@ -62,15 +62,71 @@
    </resultMap>
    <sql id="selectServiceReimbursementSharedVo">
        select ID, del_flag, create_by, create_time, update_by, update_time, UserNo, UserName, Travelers, IDCardType, IDCardNo, Phone, DepositBank, BankCardNo, BranchBankName, AnnexBankCard, AnnexFiles, AmountRequested, PrepaidAmount, InvoiceCount, AttachCount, ManagerNo, ManagerName, DeptmentNo, DeptmentName, OPOchecker, FinVicePresident, BusVicePresident, OfficeDirector, FinanceDirector, FinanceChecher, InfoID, DonorNo, DonorName, Reason, remark, RecordStatus, uploadflag, uploadtime, totalAmount, bigStrMoney, FlowLevel, costtype, costtypename, oaid, oabdzt, filename, fileid,reimid ,donorbank,donorbankcard,donorremark, donoramount,donorrelatives from service_reimbursement_shared
        select ID,
               del_flag,
               create_by,
               create_time,
               update_by,
               update_time,
               UserNo,
               UserName,
               Travelers,
               IDCardType,
               IDCardNo,
               Phone,
               DepositBank,
               BankCardNo,
               BranchBankName,
               AnnexBankCard,
               AnnexFiles,
               AmountRequested,
               PrepaidAmount,
               InvoiceCount,
               AttachCount,
               ManagerNo,
               ManagerName,
               DeptmentNo,
               DeptmentName,
               OPOchecker,
               FinVicePresident,
               BusVicePresident,
               OfficeDirector,
               FinanceDirector,
               FinanceChecher,
               InfoID,
               DonorNo,
               DonorName,
               Reason,
               remark,
               RecordStatus,
               uploadflag,
               uploadtime,
               totalAmount,
               bigStrMoney,
               FlowLevel,
               costtype,
               costtypename,
               oaid,
               oabdzt,
               filename,
               fileid,
               reimid,
               donorbank,
               donorbankcard,
               donorremark,
               donoramount,
               donorrelatives
        from service_reimbursement_shared
    </sql>
    <select id="getRemShareInfoByRemId" resultType="com.ruoyi.project.domain.ServiceReimbursementShared" resultMap="ServiceReimbursementSharedResult">
    <select id="getRemShareInfoByRemId" resultType="com.ruoyi.project.domain.ServiceReimbursementShared"
            resultMap="ServiceReimbursementSharedResult">
        <include refid="selectServiceReimbursementSharedVo"/>
        where reimid = #{RemId}
        where reimid = #{RemId} and del_flag!=1
    </select>
    <select id="selectServiceReimbursementSharedList" parameterType="ServiceReimbursementShared" resultMap="ServiceReimbursementSharedResult">
    <select id="selectServiceReimbursementSharedList" parameterType="com.ruoyi.project.domain.ServiceReimbursementShared"
            resultMap="ServiceReimbursementSharedResult">
        <include refid="selectServiceReimbursementSharedVo"/>
        <where>
            <if test="userno != null  and userno != ''"> and UserNo = #{userno}</if>
@@ -81,7 +137,9 @@
            <if test="phone != null  and phone != ''"> and Phone = #{phone}</if>
            <if test="depositbank != null  and depositbank != ''"> and DepositBank = #{depositbank}</if>
            <if test="bankcardno != null  and bankcardno != ''"> and BankCardNo = #{bankcardno}</if>
            <if test="branchbankname != null  and branchbankname != ''"> and BranchBankName like concat('%', #{branchbankname}, '%')</if>
            <if test="branchbankname != null  and branchbankname != ''">and BranchBankName like concat('%',
                #{branchbankname}, '%')
            </if>
            <if test="annexbankcard != null  and annexbankcard != ''"> and AnnexBankCard = #{annexbankcard}</if>
            <if test="annexfiles != null  and annexfiles != ''"> and AnnexFiles = #{annexfiles}</if>
            <if test="amountrequested != null "> and AmountRequested = #{amountrequested}</if>
@@ -89,12 +147,18 @@
            <if test="invoicecount != null "> and InvoiceCount = #{invoicecount}</if>
            <if test="attachcount != null "> and AttachCount = #{attachcount}</if>
            <if test="managerno != null  and managerno != ''"> and ManagerNo = #{managerno}</if>
            <if test="managername != null  and managername != ''"> and ManagerName like concat('%', #{managername}, '%')</if>
            <if test="managername != null  and managername != ''">and ManagerName like concat('%', #{managername},
                '%')
            </if>
            <if test="deptmentno != null  and deptmentno != ''"> and DeptmentNo = #{deptmentno}</if>
            <if test="deptmentname != null  and deptmentname != ''"> and DeptmentName like concat('%', #{deptmentname}, '%')</if>
            <if test="deptmentname != null  and deptmentname != ''">and DeptmentName like concat('%', #{deptmentname},
                '%')
            </if>
            <if test="opochecker != null  and opochecker != ''"> and OPOchecker = #{opochecker}</if>
            <if test="finvicepresident != null  and finvicepresident != ''"> and FinVicePresident = #{finvicepresident}</if>
            <if test="busvicepresident != null  and busvicepresident != ''"> and BusVicePresident = #{busvicepresident}</if>
            <if test="finvicepresident != null  and finvicepresident != ''">and FinVicePresident = #{finvicepresident}
            </if>
            <if test="busvicepresident != null  and busvicepresident != ''">and BusVicePresident = #{busvicepresident}
            </if>
            <if test="officedirector != null  and officedirector != ''"> and OfficeDirector = #{officedirector}</if>
            <if test="financedirector != null  and financedirector != ''"> and FinanceDirector = #{financedirector}</if>
            <if test="financechecher != null  and financechecher != ''"> and FinanceChecher = #{financechecher}</if>
@@ -109,7 +173,9 @@
            <if test="bigstrmoney != null  and bigstrmoney != ''"> and bigStrMoney = #{bigstrmoney}</if>
            <if test="flowlevel != null "> and FlowLevel = #{flowlevel}</if>
            <if test="costtype != null  and costtype != ''"> and costtype = #{costtype}</if>
            <if test="costtypename != null  and costtypename != ''"> and costtypename like concat('%', #{costtypename}, '%')</if>
            <if test="costtypename != null  and costtypename != ''">and costtypename like concat('%', #{costtypename},
                '%')
            </if>
            <if test="oaid != null  and oaid != ''"> and oaid = #{oaid}</if>
            <if test="oabdzt != null  and oabdzt != ''"> and oabdzt = #{oabdzt}</if>
            <if test="filename != null  and filename != ''"> and filename like concat('%', #{filename}, '%')</if>
@@ -117,4 +183,11 @@
        </where>
    </select>
    <update id="delResharedInfoById">
        UPDATE service_reimbursement_shared
        SET del_flag = 1
        WHERE id = #{id}
          and del_flag != 1
    </update>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementpayeeSharedMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceReimbursementpayeeSharedMapper">
    
    <resultMap type="ServiceReimbursementpayeeShared" id="ServiceReimbursementpayeeSharedResult">
    <resultMap type="com.ruoyi.project.domain.ServiceReimbursementpayeeShared" id="ServiceReimbursementpayeeSharedResult">
        <result property="id"    column="id"    />
        <result property="rpid"    column="rpid"    />
        <result property="rbid"    column="rbid"    />
@@ -31,7 +31,7 @@
        select id, rpid, rbid, orderno, persontype, personname, bankname, bankcardno, amount, phone, familyrelations, paiddate, remark, del_flag, create_by, create_time, update_by, update_time, uploadflag, uploadtime from service_reimbursementpayee_shared
    </sql>
    <select id="selectServiceReimbursementpayeeSharedList" parameterType="ServiceReimbursementpayeeShared" resultMap="ServiceReimbursementpayeeSharedResult">
    <select id="selectServiceReimbursementpayeeSharedList" parameterType="com.ruoyi.project.domain.ServiceReimbursementpayeeShared" resultMap="ServiceReimbursementpayeeSharedResult">
        <include refid="selectServiceReimbursementpayeeSharedVo"/>
        <where>
            <if test="rpid != null "> and rpid = #{rpid}</if>
ruoyi-quartz/pom.xml
@@ -34,6 +34,12 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-project</artifactId>
            <version>3.7.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1,7 +1,17 @@
package com.ruoyi.quartz.task;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import com.ruoyi.project.service.*;
import com.ruoyi.project.service.impl.DingTalkServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.ruoyi.common.utils.StringUtils;
import java.lang.reflect.Array;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
 * å®šæ—¶ä»»åŠ¡è°ƒåº¦æµ‹è¯•
@@ -9,20 +19,108 @@
 * @author ruoyi
 */
@Component("ryTask")
public class RyTask
{
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
    {
public class RyTask {
    @Autowired
    private DingTalkService dingTalkService;
    @Autowired
    private IServiceReimbursementSharedService serviceReimbursementSharedService;
    @Autowired
    private IServiceFundSharedService serviceFundSharedService;
    @Autowired
    private IServiceFundService serviceFundService;
    @Autowired
    private IServiceReimbursementService serviceReimbursementService;
    @Autowired
    private IServiceFundflowService fundflowService;
    public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
        System.out.println(StringUtils.format("执行多参方法: å­—符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i));
    }
    public void ryParams(String params)
    {
    public void ryParams(String params) {
        System.out.println("执行有参方法:" + params);
    }
    public void ryNoParams()
    {
    public void ryNoParams() {
        System.out.println("执行无参方法");
    }
    public void checkReportInfo() {
        //查出所有被医院退回的Fund数据
        List<ServiceFundShared> serviceFundShareds = serviceFundSharedService.queryFundShareList();
        for (ServiceFundShared serviceFundShared : serviceFundShareds) {
            String[] split = serviceFundShared.getCxrjyj().split("&");
            String phone = serviceFundShared.getPhone();
            //将分享里的该数据删除
            serviceFundSharedService.delfundsharedInfoById(serviceFundShared.getId());
            ServiceFund serviceFund = new ServiceFund();
            serviceFund.setId(serviceFundShared.getSerfunid());
            List<ServiceFund> serviceFunds = serviceFundService.queryList(serviceFund);
            ServiceFund serviceFund1 = serviceFunds.get(0);
            serviceFund1.setFlowlevel(0);
            serviceFund1.setDel_flag(0);
            serviceFund1.setBackflowlevel(199);
            serviceFundService.updateById(serviceFund1);
            sendMeg(split,phone);
        }
        //查出所有被医院退回的Reimbursement数据
        List<ServiceReimbursementShared> serviceReimbursementShareds = serviceReimbursementSharedService.queryReShareList();
        for (ServiceReimbursementShared serviceReimbursementShared : serviceReimbursementShareds) {
            String phone = serviceReimbursementShared.getPhone();
            String[] split = serviceReimbursementShared.getCxrjyj().split("&");
            //将分享里的该数据删除
            serviceReimbursementSharedService.delResharedInfoById(serviceReimbursementShared.getId());
            //将Flowlevel è®¾ç½®ä¸º0;
            ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
            serviceReimbursement.setId(serviceReimbursementShared.getReimid());
            List<ServiceReimbursement> serviceReimbursementList = serviceReimbursementService.queryList(serviceReimbursement);
            ServiceReimbursement serviceReimbursement1 = serviceReimbursementList.get(0);
            serviceReimbursement1.setFlowlevel(0L);
            serviceReimbursement1.setDelFlag(0);
            serviceReimbursement1.setBackflowlevel(199L);
            serviceReimbursementService.updateById(serviceReimbursement1);
            sendMeg(split,phone);
        }
    }
    public void sendMeg(String[] split,String phone) {
        //记录操作记录
        ServiceFundflow serviceFundflow = new ServiceFundflow();
        serviceFundflow.setCreateBy("admin");
        serviceFundflow.setCreateTime(new Date());
        serviceFundflow.setUpdateBy("admin");
        serviceFundflow.setUpdateTime(new Date());
        serviceFundflow.setCheckusername(split[0]);
        serviceFundflow.setFlowcontent(split[2]);
        serviceFundflow.setFlowconclusion(2);
        serviceFundflow.setFundtype(2);
        serviceFundflow.setFlowlevel(100);
        fundflowService.save(serviceFundflow);
        ArrayList<ConcurrentHashMap<String, String>> contentList = new ArrayList<>();
        ConcurrentHashMap map = new ConcurrentHashMap();
        map.put("审批人", split[0]);
        map.put("审批时间", split[1]);
        map.put("意见", split[2]);
        contentList.add(map);
        DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
        dingTalkReqVo.setTitle("财务系统驳回信息");
        dingTalkReqVo.setNumber("13634195431");
        dingTalkReqVo.setContents(contentList);
        dingTalkService.sendNotification(dingTalkReqVo);
    }
}