liusheng
2025-08-12 65314b14210a175bae095649584614973b3619df
代码提交
已添加1个文件
已修改19个文件
1858 ■■■■ 文件已修改
ruoyi-admin/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java 235 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonateorgan.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonationwitness.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceProcessVO.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceReimbursementSharedMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundService.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundflowruleService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceReimbursementService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java 699 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java 497 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceFundSharedMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementSharedMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml
@@ -8,8 +8,8 @@
        <version>3.7.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
<!--    <packaging>war</packaging>-->
    <packaging>jar</packaging>
    <packaging>war</packaging>
    <!--    <packaging>jar</packaging>-->
    <artifactId>smartor-opo</artifactId>
    <description>
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java
@@ -20,7 +20,6 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.ServiceFunddetailMapper;
import com.ruoyi.project.service.*;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysUserService;
@@ -60,13 +59,7 @@
    @Autowired
    private IServiceFundService serviceFundService;
    @Autowired
    private IServiceFundSharedService fundSharedService;
    @Autowired
    private ServiceFunddetailMapper serviceFunddetailMapper;
    @Autowired
    private IServiceFunddetailService serviceFunddetailService;
    @Autowired
    private IServiceFunddetailSharedService funddetailSharedService;
    @Autowired
    private IServiceFundflowruleService serviceFundflowruleService;
    @Autowired
@@ -97,6 +90,43 @@
        configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
    }
    /**
     * è‡´è¿œç³»ç»Ÿæµç¨‹é€€å›ž
     *
     * @param serviceProcessDocVO
     * @return
     */
    @PostMapping("/backdocument")
    public AjaxResult backDocument(@RequestBody ServiceProcessDocVO serviceProcessDocVO) {
        log.info("致远系统流程退回入参:{}", serviceProcessDocVO);
        if (serviceProcessDocVO.getBackCode() == null || StringUtils.isEmpty(serviceProcessDocVO.getApplytype())) {
            return AjaxResult.error("入能为空,请检查入参!!");
        }
        serviceFundService.backDocument(serviceProcessDocVO);
        return AjaxResult.success("退回成功");
    }
    /**
     * è‡´è¿œç³»ç»Ÿæµç¨‹é€€å›žå®¡æ‰¹æ—¥å¿—
     *
     * @param serviceProcessVO
     * @return
     */
    @PostMapping("/processlog")
    public AjaxResult processlog(@RequestBody ServiceProcessVO serviceProcessVO) {
        log.info("致远系统流程退回审批日志入参:{}", serviceProcessVO);
        if (serviceProcessVO.getBackCode() == null || StringUtils.isEmpty(serviceProcessVO.getApplytype())) {
            return AjaxResult.error("入能为空,请检查入参!!");
        }
        Boolean processlog = serviceFundService.processlog(serviceProcessVO);
        if (!processlog) return AjaxResult.error("审批记录失败");
        return AjaxResult.success("审批记录成功");
    }
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·ä¸»åˆ—表
@@ -292,192 +322,13 @@
    @PostMapping("/checkfund")
    public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) {
        log.info("serviceFundController---checkFund的入参值checkFundVO :{}", checkFundVO);
        ServiceFund serviceFund = serviceFundService.getById(checkFundVO.getFundid());
        if (serviceFund != null) {
            Integer TotalLevel = 0;
            LoginUser loginUser = getLoginUser();
            ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
            serviceFundflowrule.setFundtype(2);
            serviceFundflowrule.setApplytype(serviceFund.getApplytype());
            serviceFundflowrule.setCheckuserno(loginUser.getUsername());
            log.info("serviceFundController---checkFund---queryList的入参值serviceFundflowrule:{}", serviceFundflowrule);
            List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
            if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员无此记录审核权限");
            }
            if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceFund.getFlowlevel()) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员与此记录的审核级别不符");
            }
            if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
                TotalLevel = serviceFundflowrules.get(0).getTotallevel();
            }
            Integer CheckFlag = 0;
            Integer RecordStatus = serviceFund.getRecordstatus();
            Integer FlowLevel = serviceFund.getFlowlevel().intValue();
            Integer OriginalFlowLevel = FlowLevel;
            if (checkFundVO.getFlowconclusion() == 1) {
                CheckFlag = 1;
                if (TotalLevel == 0) {
                    RecordStatus = 99;
                } else {
                    if (TotalLevel == FlowLevel + 1) {
                        RecordStatus = 99;
                    } else {
                        RecordStatus = (FlowLevel + 1) * 2;
                    }
                }
                FlowLevel = FlowLevel + 1;
                if (serviceFund.getFlowlevel() == Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1) && serviceFund.getBackflowlevel() == 100) {
                    log.info("财务退回再提交,出纳再次审批,之后提交到财务");
                    //说明是财务退回再提交的.需要出纳再看一遍,没问题之后,往分享表里新增
//                    serviceFundService.addFundSharedInfo(serviceFund.getId());
                    serviceFund.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
                    serviceFund.setRecordstatus(99);
                    serviceFund.setUploadStates(1);
                    serviceFundService.updateById(serviceFund);
                    //保存审批流程表
                    ServiceFundflow serviceFundflow = new ServiceFundflow();
                    SysUser user = loginUser.getUser();
                    serviceFundflow.setFundid(serviceFund.getId());
                    serviceFundflow.setCheckuserno(user.getUserName());
                    serviceFundflow.setCheckusername(user.getNickName());
                    serviceFundflow.setFundtype(2);
                    serviceFundflow.setApplytype(serviceFund.getApplytype());
                    serviceFundflow.setFlowconclusion(CheckFlag);
                    serviceFundflow.setFlowcontent("通过");
                    Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
                    return AjaxResult.success();
                }
                //记录一下,下一级的审批,以便于下一级退回后,发起者提交时,能再提到当前审批层级
                serviceFund.setBackflowlevel(FlowLevel);
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                    RecordStatus = -1;
                    logger.info("serviceFund进来了吗?????? :{},{}", RecordStatus, FlowLevel);
                    System.out.println("serviceFund进来了吗??????");
                } else {
                    RecordStatus = (FlowLevel + 1) * 2 - 1;
                    FlowLevel = (FlowLevel - 1);
                    if (FlowLevel < 0) {
                        FlowLevel = 0;
                    }
                }
                SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
                ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
                ConcurrentHashMap map = new ConcurrentHashMap();
                map.put("审批人:", loginUser.getUser().getUserName());
                map.put("审批时间:", new Date());
                map.put("意见:", "不通过");
                if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) map.put("意见:", checkFundVO.getFlowcontent());
                contentList.add(map);
                DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
                dingTalkReqVo.setTitle("财务系统驳回信息");
                dingTalkReqVo.setNumber(sysUser.getPhonenumber());
                dingTalkReqVo.setContents(contentList);
                dingTalkService.sendNotification(dingTalkReqVo);
            }
            serviceFund.setRecordstatus(RecordStatus);
            serviceFund.setFlowlevel(FlowLevel.longValue());
            //  serviceFund.setBackflowlevel(serviceFund.getFlowlevel());
            ServiceFundflow serviceFundflow = new ServiceFundflow();
            SysUser user = loginUser.getUser();
            serviceFundflow.setFundid(serviceFund.getId());
            serviceFundflow.setCheckuserno(user.getUserName());
            serviceFundflow.setCheckusername(user.getNickName());
            serviceFundflow.setFundtype(2);
            serviceFundflow.setApplytype(serviceFund.getApplytype());
            serviceFundflow.setFlowconclusion(CheckFlag);
            if (org.apache.commons.lang.StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
            } else {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
            }
            serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
            Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
            log.info("sserviceFund保存的的值是-------- :{}", aBoolean);
            //053审批通过之后,就需要把“办公室主任”的名字填上
            if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
                serviceFund.setOfficedirector(user.getNickName());
                serviceFund.setUploadStates(1);
            }
            System.out.println("serviceFund的值是--------:" + serviceFund);
            log.info("开始更新的的值是--------");
//            ServiceFund updateServiceFund = new ServiceFund();
//            updateServiceFund.setRecordstatus(serviceFund.getRecordstatus());
//            updateServiceFund.setFlowlevel(serviceFund.getFlowlevel());
            Boolean aBoolean1 = serviceFundService.updateById(serviceFund);
            log.info("integer更新的的值是-------- :{}", aBoolean1);
            ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
            serviceSystemmessage.setFundtype(2);
            serviceSystemmessage.setApplytype(serviceFund.getApplytype());
            serviceSystemmessage.setSenduserno(user.getUserName());
            serviceSystemmessage.setSendusername(user.getNickName());
            serviceSystemmessage.setReceiveuserno(serviceFund.getUserno());
            serviceSystemmessage.setReceiveusername(serviceFund.getUsername());
            serviceSystemmessage.setUpdateTime(new Date());
            serviceSystemmessage.setUpdateBy(user.getNickName());
            serviceSystemmessage.setIsread(0);
            serviceSystemmessage.setMessagetype(1);
            serviceSystemmessage.setRelevantno(serviceFund.getId());
            if (CheckFlag == 1) {
                //通过
                if (serviceFund.getApplytype().equals("1")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
                } else if (serviceFund.getApplytype().equals("2")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的伦理专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
                } else if (serviceFund.getApplytype().equals("3")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的医学成本捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
                } else if (serviceFund.getApplytype().equals("4")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的办公费用申请已通过");
                } else if (serviceFund.getApplytype().equals("5")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的绩效申请已通过");
                }
            } else {
                //驳回
                if (serviceFund.getApplytype().equals("1")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
                } else if (serviceFund.getApplytype().equals("2")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的伦理专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
                } else if (serviceFund.getApplytype().equals("3")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的医学成本捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
                } else if (serviceFund.getApplytype().equals("4")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的办公费用申请已驳回,原因: " + checkFundVO.getFlowcontent() + "");
                } else if (serviceFund.getApplytype().equals("5")) {
                    serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                    serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的绩效申请已驳回,原因: " + checkFundVO.getFlowcontent() + "");
                }
            }
            iServiceSystemmessageService.save(serviceSystemmessage);
            return AjaxResult.success();
        } else {
            return AjaxResult.error(HttpStatus.NO_CONTENT, "费用编号不正确");
        LoginUser loginUser = getLoginUser();
        Map<String, String> map = serviceFundService.checkFund(checkFundVO,loginUser);
        Set<String> keys = map.keySet();
        for (String s : keys) {
            if (!s.equals("200")) return AjaxResult.error(map.get(s));
        }
        return AjaxResult.success();
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java
@@ -85,9 +85,6 @@
    @Autowired
    private ISysPostService postService;
    @Autowired
    private IServiceSystemmessageService ServiceSystemmessage;
    private static Configuration configuration = null;
    public ServiceReimbursementController() {
@@ -379,188 +376,12 @@
    @PostMapping("/checkfund")
    public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) {
        log.info("审核费用的入参 : {}", checkFundVO);
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid());
        log.info("审核费用的serviceReimbursementService.getById返参 : {}", serviceReimbursement);
        if (serviceReimbursement != null) {
            Integer totalLevel = 0;
            LoginUser loginUser = getLoginUser();
            ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
            serviceFundflowrule.setFundtype(1);
            serviceFundflowrule.setApplytype("0");
            serviceFundflowrule.setCheckuserno(loginUser.getUsername());
            List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
            log.info("审核费用的serviceFundflowruleService.queryList返参 : {}", serviceFundflowrules.size());
            if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员无此记录审核权限");
            }
            if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceReimbursement.getFlowlevel()) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员与此记录的审核级别不符");
            }
            if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
                totalLevel = serviceFundflowrules.get(0).getTotallevel();
            }
            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;
                if (totalLevel == 0) {
                    //99 å–消
                    RecordStatus = 99;
                } else {
                    if (totalLevel == FlowLevel + 1) {
                        RecordStatus = 99;
                    } else {
                        RecordStatus = (FlowLevel + 1) * 2;
                    }
                }
                if (serviceReimbursement.getFlowlevel() == 1 && serviceReimbursement.getBackflowlevel() == 100) {
                    log.info("出差补贴被 è´¢åŠ¡é€€å›žå†æäº¤ï¼Œå‡ºçº³å†æ¬¡å®¡æ‰¹ï¼Œä¹‹åŽæäº¤åˆ°è´¢åŠ¡:{}", serviceReimbursement.getId());
                    //说明是财务退回再提交的.需要出纳再看一遍,没问题之后,往分享表里新增
//                    serviceReimbursementService.addSharedData(serviceReimbursement.getId());
                    serviceReimbursement.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
                    serviceReimbursement.setRecordstatus(99);
                    serviceReimbursement.setUploadStates(1);
                    boolean b = serviceReimbursementService.updateById(serviceReimbursement);
                    log.info("是否修改成功:{}", b);
                    //保存审批流程表
                    ServiceFundflow serviceFundflow = new ServiceFundflow();
                    SysUser user = loginUser.getUser();
                    serviceFundflow.setFundid(serviceReimbursement.getId());
                    serviceFundflow.setCheckuserno(user.getUserName());
                    serviceFundflow.setCheckusername(user.getNickName());
                    serviceFundflow.setFundtype(1);
                    serviceFundflow.setApplytype("0");
                    serviceFundflow.setFlowconclusion(CheckFlag);
                    serviceFundflow.setFlowcontent("通过");
                    serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
                    Boolean aBoolean = serviceFundflowService.save(serviceFundflow);
                    return AjaxResult.success();
                }
                FlowLevel = FlowLevel + 1;
                serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel));
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                    RecordStatus = -1;
                } else {
                    //下面是原来的写法,一级一级的往下退,医院现在不要这样搞了,下面这段代码先保留,等医院回心转意,再给放开
                    RecordStatus = (FlowLevel + 1) * 2 - 1;
                    FlowLevel = (FlowLevel - 1);
                    if (FlowLevel < 0) {
                        FlowLevel = 0;
                    }
                }
                SysUser sysUser = sysUserService.selectUserByUserName(serviceReimbursement.getUserno());
                ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
                ConcurrentHashMap map = new ConcurrentHashMap();
                map.put("审批人:", loginUser.getUser().getUserName());
                map.put("审批时间:", new Date());
                map.put("意见:", "不通过");
                if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) map.put("意见:", checkFundVO.getFlowcontent());
                contentList.add(map);
                DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
                dingTalkReqVo.setTitle("财务系统驳回信息");
                dingTalkReqVo.setNumber(sysUser.getPhonenumber());
                dingTalkReqVo.setContents(contentList);
                dingTalkService.sendNotification(dingTalkReqVo);
            }
            serviceReimbursement.setRecordstatus(RecordStatus);
            serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString()));
            ServiceFundflow serviceFundflow = new ServiceFundflow();
            SysUser user = loginUser.getUser();
            serviceFundflow.setFundid(serviceReimbursement.getId());
            serviceFundflow.setCheckuserno(user.getUserName());
            serviceFundflow.setCheckusername(user.getNickName());
            serviceFundflow.setFundtype(1);
            serviceFundflow.setApplytype("0");
            serviceFundflow.setFlowconclusion(CheckFlag);
            if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
            } else {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
            }
            serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
            serviceFundflowService.save(serviceFundflow);
            List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId());
            log.info("postService.selectPostListByUserId : {}", postids.size());
            if (!postids.contains(2) && !postids.contains(6) && (serviceReimbursement.getBackflowlevel() == null || serviceReimbursement.getBackflowlevel() == 0)) {
                if (CheckFlag == 2 && OriginalFlowLevel == 1) {
                    ServiceFundflow serviceFundflowAuto = new ServiceFundflow();
                    serviceFundflowAuto.setFundid(serviceReimbursement.getId());
                    serviceFundflowAuto.setCheckuserno(user.getUserName());
                    serviceFundflowAuto.setCheckusername(user.getNickName());
                    serviceFundflowAuto.setFundtype(1);
                    serviceFundflowAuto.setApplytype("0");
                    serviceFundflowAuto.setFlowconclusion(CheckFlag);
                    serviceFundflowAuto.setFlowcontent("非专职人员二级审核拒绝后直接退回到修改状态");
                    serviceFundflowAuto.setFlowlevel(1);
                    serviceFundflowService.save(serviceFundflowAuto);
                    serviceReimbursement.setRecordstatus(1);
                }
            }
            //053审批通过之后,就需要把“办公室主任”的名字填上
            if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
                serviceReimbursement.setOfficedirector(user.getNickName());
                serviceReimbursement.setUploadStates(1);
            }
            serviceReimbursementService.updateById(serviceReimbursement);
            ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
            serviceSystemmessage.setFundtype(1);
            serviceSystemmessage.setApplytype("0");
            serviceSystemmessage.setSenduserno(user.getUserName());
            serviceSystemmessage.setSendusername(user.getNickName());
            serviceSystemmessage.setReceiveuserno(serviceReimbursement.getUserno());
            serviceSystemmessage.setReceiveusername(serviceReimbursement.getUsername());
            serviceSystemmessage.setIsread(0);
            serviceSystemmessage.setMessagetype(1);
            serviceSystemmessage.setUpdateTime(new Date());
            serviceSystemmessage.setUpdateBy(user.getNickName());
            serviceSystemmessage.setRelevantno(serviceReimbursement.getId());
            log.info("CheckFlag的值 : {}", CheckFlag);
            if (CheckFlag == 1) {
                //通过
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的差旅报销单申请已通过");
                log.info("totalLevel的值 : {},  OriginalFlowLevel的值:{}", totalLevel, OriginalFlowLevel);
                //这一块放定时任务里做
//                if (totalLevel == OriginalFlowLevel + 1) {
//                    //所有数据新增到备份表
//                    serviceReimbursementService.addSharedData(checkFundVO.getFundid());
//                }
            } else {
                //驳回
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的差旅报销单申请被驳回,原因:" + checkFundVO.getFlowcontent() + "");
            }
            ServiceSystemmessage.save(serviceSystemmessage);
            return AjaxResult.success();
        } else {
            return AjaxResult.error(HttpStatus.NO_CONTENT, "费用编号不正确");
        Map<String, String> map = serviceReimbursementService.checkFund(getLoginUser(), checkFundVO);
        Set<String> keys = map.keySet();
        for (String s : keys) {
            if (!s.equals("200")) return AjaxResult.error(map.get(s));
        }
        return AjaxResult.success();
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -8,6 +8,8 @@
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.core.domain.model.LoginBodyByOpenID;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.model.ThirdLoginBody;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -67,6 +69,20 @@
    }
    /**
     * ç¬¬ä¸‰æ–¹èŽ·å–token   ï¼šè¿™é‡Œçš„password对应的是sys_user表里的ding_user_id
     *
     * @param thirdLoginBody
     * @return
     */
    @PostMapping("/getToken")
    public AjaxResult openidLogin(@RequestBody ThirdLoginBody thirdLoginBody) {
        AjaxResult ajax = AjaxResult.success();
        String token = loginService.getToken(thirdLoginBody.getUsername(), thirdLoginBody.getPassword());
        ajax.put(Constants.TOKEN, token);
        return ajax;
    }
    /**
     * ç™»å½•方法
     *
     * @param loginBody ç™»å½•信息
@@ -76,7 +92,7 @@
    @Log(title = "登录信息", businessType = BusinessType.OTHER)
    @PostMapping("/login")
    public AjaxResult login(@RequestBody LoginBody loginBody) {
        log.info("loginBody的入参是:{}",loginBody);
        log.info("loginBody的入参是:{}", loginBody);
        AjaxResult ajax = AjaxResult.success();
//        dingTalkService.deptidList(1L, 1);
        Map<String, Object> userIdMap = null;
ruoyi-admin/src/main/resources/application.yml
@@ -14,9 +14,9 @@
  # å¼€å‘环境 linux
  #  profile: /home/smartor/uploadFile
  # åŒ»é™¢çŽ¯å¢ƒ
  profile: E:/OPO/WEB/Upload
  profile: D:/OPO/WEB/Upload
  # å½’档路径
  archived: E:/OPO/WEB/archived/
  archived: D:/OPO/WEB/archived/
  # èŽ·å–ip地址开关
  addressEnabled: false
  # éªŒè¯ç ç±»åž‹ math æ•°ç»„计算 char å­—符验证
@@ -41,7 +41,7 @@
logging:
  file:
    # æ—¥å¿—路径 ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/logs,Linux配置 /home/ruoyi/logs,不填同级目录logs)
    path: E:/lihu/ls/logs
    path: D:/lihu/ls/logs
  level:
    com.ruoyi: debug
    org.springframework: warn
@@ -53,7 +53,7 @@
    # å›½é™…化资源文件路径
    basename: i18n/messages
  profiles:
    active: druid
    active: srm
  # æ–‡ä»¶ä¸Šä¼ 
  servlet:
    multipart:
@@ -123,6 +123,13 @@
  # åŒ¹é…é“¾æŽ¥
  urlPatterns: /system/*,/monitor/*,/tool/*
# åå‹æµç¨‹å‘起接口
xyurl: http://{{ip}}:{{port}}/seeyon/rest/bpm/process/start
rexyurl: http://{{ip}}:{{port}}/seeyon/rest/bpm/process/restart
#与协友交互的新功能开关 1开   2关
newSwitch: 2
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -21,7 +21,7 @@
/**
 * spring security配置
 *
 *
 * @author ruoyi
 */
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@@ -32,7 +32,7 @@
     */
    @Autowired
    private UserDetailsService userDetailsService;
    /**
     * è®¤è¯å¤±è´¥å¤„理类
     */
@@ -50,7 +50,7 @@
     */
    @Autowired
    private JwtAuthenticationTokenFilter authenticationTokenFilter;
    /**
     * è·¨åŸŸè¿‡æ»¤å™¨
     */
@@ -103,7 +103,7 @@
                // è¿‡æ»¤è¯·æ±‚
                .authorizeRequests()
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                .antMatchers("/login","/openidlogin", "/register", "/captchaImage").anonymous()
                .antMatchers("/login","/openidlogin", "/register", "/captchaImage", "/getToken").anonymous()
                .antMatchers(
                        HttpMethod.GET,
                        "/",
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -189,6 +189,18 @@
        return ajax;
    }
    public String getToken(String username, String code) {
        SysUser sysUser = sysUserMapper.selectUserByDingUserId(code);
        //查出来不对的话,就返回null
        if (!sysUser.getUserName().equals(username)) return null;
        LoginUser loginUser = new LoginUser();
        loginUser.setUserId(sysUser.getUserId());
        loginUser.setDeptId(sysUser.getDeptId());
        loginUser.setUser(sysUser);
        return tokenService.createToken(loginUser);
    }
    /**
     * è®°å½•登录信息
     *
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonateorgan.java
@@ -77,7 +77,7 @@
     * å™¨å®˜èŽ·å–æ—¶é—´
     */
    @ApiModelProperty("器官获取时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "器官获取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date organgettime;
@@ -85,7 +85,7 @@
     * é¢„计获取时间
     */
    @ApiModelProperty("预计获取时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "预计获取时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date estimatedtime;
@@ -135,7 +135,7 @@
     * ç§»æ¤æ—¶é—´
     */
    @ApiModelProperty("移植时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "移植时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date transplanttime;
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceDonationwitness.java
@@ -60,7 +60,7 @@
     * æ­»äº¡æ—¶é—´
     */
    @ApiModelProperty("死亡时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "死亡时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date deathtime;
@@ -95,7 +95,7 @@
     * æ‰‹æœ¯å¼€å§‹æ—¶é—´
     */
    @ApiModelProperty("手术开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "手术开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date operationbegtime;
@@ -103,7 +103,7 @@
     * æ‰‹æœ¯ç»“束时间
     */
    @ApiModelProperty("手术结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "手术结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date operationendtime;
@@ -175,7 +175,7 @@
     * è…¹ä¸»åŠ¨è„‰æ’ç®¡æ—¶é—´
     */
    @ApiModelProperty("腹主动脉插管时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "腹主动脉插管时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date abdominalaortacannulatime;
@@ -183,7 +183,7 @@
     * è…¹ä¸»åŠ¨è„‰çŒæ³¨æ—¶é—´
     */
    @ApiModelProperty("腹主动脉灌注时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "腹主动脉灌注时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date abdominalaortaperfusiontime;
@@ -191,7 +191,7 @@
     * é—¨é™è„‰æ’管时间
     */
    @ApiModelProperty("门静脉插管时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "门静脉插管时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date portalveincannulatime;
@@ -199,7 +199,7 @@
     * é—¨é™è„‰çŒæ³¨æ—¶é—´
     */
    @ApiModelProperty("门静脉灌注时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "门静脉灌注时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date portalveinperfusiontime;
@@ -207,7 +207,7 @@
     * è‚ºåŠ¨è„‰æ’ç®¡æ—¶é—´
     */
    @ApiModelProperty("肺动脉插管时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "肺动脉插管时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date pulmonaryarterycannulatime;
@@ -215,7 +215,7 @@
     * è‚ºåŠ¨è„‰çŒæ³¨æ—¶é—´
     */
    @ApiModelProperty("肺动脉灌注时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "肺动脉灌注时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date pulmonaryarteryperfusiontime;
@@ -223,7 +223,7 @@
     * ä¸»åŠ¨è„‰æ’ç®¡æ—¶é—´
     */
    @ApiModelProperty("主动脉插管时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "主动脉插管时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date aortacannulatime;
@@ -231,7 +231,7 @@
     * ä¸»åŠ¨è„‰çŒæ³¨æ—¶é—´
     */
    @ApiModelProperty("主动脉灌注时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "主动脉灌注时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date aortaperfusiontime;
@@ -262,6 +262,7 @@
     */
    @ApiModelProperty("协调员进手术室时间")
    @Excel(name = "协调员进手术室时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date coordinatorInOperating;
    /**
@@ -269,6 +270,7 @@
     */
    @ApiModelProperty("协调员出手术室时间")
    @Excel(name = "协调员出手术室时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date coordinatorOutOperating;
    /**
@@ -283,6 +285,7 @@
     */
    @ApiModelProperty("协调员签字时间")
    @Excel(name = "协调员签字时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date coordinatorSignTime;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/ServiceProcessVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
package com.ruoyi.project.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * ç¬¬ä¸‰æ–¹æµç¨‹é€€å›žå…¥å‚(致远公司退回的入参)
 *
 * @author ruoyi
 * @date 2022-01-24
 */
@Data
@ApiModel("第三方流程退回入参")
public class ServiceProcessVO extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * é€€å›žç±»åž‹     0:差旅费   1专家劳务费  2伦理专家劳务费  3医学成本  4办公费用  5绩效审批
     */
    @ApiModelProperty("退回类型     0:差旅费   1专家劳务费  2伦理专家劳务费  3医学成本  4办公费用  5绩效审批")
    @Excel(name = "退回类型     0:差旅费   1专家劳务费  2伦理专家劳务费  3医学成本  4办公费用  5绩效审批   ")
    private String applytype;
    /**
     * é€€å›žç¼–号(主键)
     */
    @ApiModelProperty("退回编号")
    @Excel(name = "退回编号(主键)")
    private Long backCode;
    /**
     * æµç¨‹å†…容,操作写意见建议
     */
    @ApiModelProperty("流程内容,操作写意见建议")
    @Excel(name = "流程内容,操作写意见建议")
    private String flowcontent;
    /**
     * é€€å›žåŽŸå› 
     */
    @ApiModelProperty("退流程结论 1:通过;2:驳回; å›žåŽŸå›  3:完结")
    @Excel(name = "流程结论 1:通过;2:驳回;")
    private Integer flowconclusion;
    /**
     * å®¡æ ¸äººç¼–号
     */
    @ApiModelProperty("审核人编号")
    @Excel(name = "审核人编号")
    private String checkuserno;
    /**
     * å®¡æ ¸äººå§“名
     */
    @ApiModelProperty("审核人姓名")
    @Excel(name = "审核人姓名")
    private String checkusername;
    @ApiModelProperty("校验时间")
    @Excel(name = "校验时间")
    private Date checkTime;
}
ruoyi-project/src/main/java/com/ruoyi/project/mapper/ServiceReimbursementSharedMapper.java
@@ -26,4 +26,6 @@
    List<ServiceReimbursementShared> getRemShareInfoByRemId(Long RemId);
    Boolean delResharedInfoById(Long id);
    Boolean delResharedInfoByReimid(Long reimid);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundService.java
@@ -4,9 +4,11 @@
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * è´¹ç”¨ç”³è¯·ä¸»Service接口
@@ -15,6 +17,15 @@
 * @date 2022-01-24
 */
public interface IServiceFundService extends IService<ServiceFund> {
    /**
     * è‡´è¿œç³»ç»Ÿæµç¨‹é€€å›ž
     * @param serviceProcessVO
     * @return
     */
    public Boolean backDocument(ServiceProcessDocVO serviceProcessVO);
    public Boolean processlog(ServiceProcessVO serviceProcessVO);
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·ä¸»åˆ—表
@@ -27,6 +38,8 @@
    public List<ServiceFund> queryInfoById(ServiceFund serviceFund);
    List<ServiceFund> getInfoByInfoId(Long infoid);
    public Map<String,String> checkFund(CheckFundVO checkFundVO, LoginUser loginUser);
    Long getFundId(Long infoid);
@@ -75,4 +88,4 @@
    public Boolean updateFundTaxIdById(Long id, Long fundTaxIds);
}
}
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceFundflowruleService.java
@@ -2,11 +2,14 @@
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.project.domain.ServiceFundflowrule;
import com.ruoyi.project.domain.vo.CheckFundVO;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * èµ„金审批规则Service接口
 *
 *
 * @author ruoyi
 * @date 2022-04-27
 */
@@ -15,7 +18,7 @@
    /**
     * æŸ¥è¯¢èµ„金审批规则列表
     *
     *
     * @param serviceFundflowrule èµ„金审批规则
     * @return èµ„金审批规则集合
     */
ruoyi-project/src/main/java/com/ruoyi/project/service/IServiceReimbursementService.java
@@ -1,10 +1,13 @@
package com.ruoyi.project.service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.dto.ServiceReimbursementDto;
import com.ruoyi.project.domain.vo.CheckFundVO;
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut;
/**
@@ -35,10 +38,9 @@
     */
    Boolean addSharedData(Long id);
    List<ServiceReimbursement> selectSearchList(ServiceReimbursementDto serviceReimbursementdto);
    List<SpFinancialExpensesReimbursementOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE,Integer CHECKSTATUS,String donorname);
    List<SpFinancialExpensesReimbursementOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS, String donorname);
    List<ServiceReimbursement> getInfoByInfoId(Long infoid);
@@ -46,4 +48,6 @@
    List<ServiceReimbursementEo> getRDInfoByItem(ServiceReimbursementEo serviceReimbursementEo);
    public Map<String, String> checkFund(LoginUser loginUser, CheckFundVO checkFundVO);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -7,34 +7,44 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.*;
import com.ruoyi.project.service.*;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysUserService;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@@ -50,6 +60,21 @@
    ServiceFundMapper serviceFundMapper;
    @Autowired
    private DingTalkService dingTalkService;
    @Autowired
    private IServiceFundflowruleService serviceFundflowruleService;
    @Autowired
    private IServiceFundflowService serviceFundflowService;
    @Autowired
    private SysUserRoleMapper sysUserRoleMapper;
    @Autowired
    SysUserMapper sysUserMapper;
    @Autowired
    ServiceFunddetailMapper serviceFunddetailMapper;
    @Autowired
@@ -57,6 +82,21 @@
    @Autowired
    ServiceReimbursementMapper serviceReimbursementMapper;
    @Autowired
    ServiceReimbursementSharedMapper serviceReimbursementSharedMapper;
    @Autowired
    private IServiceFundflowService fundflowService;
    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private IServiceSystemmessageService iServiceSystemmessageService;
    @Autowired
    IServiceReimbursementService iServiceReimbursementService;
    @Autowired
    IServiceFundSharedService sharedService;
@@ -82,6 +122,146 @@
    @Autowired
    private VExpertfeeTotalMapper vExpertfeeTotalMapper;
    @Value("${xyurl}")
    private String xyurl;
    @Value("${rexyurl}")
    private String rexyurl;
    @Value("${newSwitch}")
    private Integer newSwitch;
    @Value("${spring.profiles.active}")
    private String active;
    /**
     * è‡´è¿œç³»ç»Ÿæµç¨‹é€€å›ž
     *
     * @param serviceProcessVO
     * @return
     */
    @Override
    public Boolean backDocument(ServiceProcessDocVO serviceProcessVO) {
        String applytype = serviceProcessVO.getApplytype();
        if (applytype.equals("0")) {
            //差旅报销退回
            ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
            serviceReimbursement.setId(serviceProcessVO.getBackCode());
            List<ServiceReimbursement> serviceReimbursementList = iServiceReimbursementService.queryList(serviceReimbursement);
            ServiceReimbursement serviceReimbursement1 = serviceReimbursementList.get(0);
            serviceReimbursement1.setFlowlevel(100L);
            serviceReimbursement1.setDelFlag(0);
            serviceReimbursement1.setUploadStates(0);
            serviceReimbursement1.setBackflowlevel(199L);
            serviceReimbursement1.setRecordstatus(-1);
            iServiceReimbursementService.updateById(serviceReimbursement1);
            //删除share数据
            serviceReimbursementSharedMapper.delResharedInfoByReimid(serviceReimbursement1.getId());
        } else {
            //费用申请退回
            ServiceFund serviceFund = new ServiceFund();
            serviceFund.setId(serviceProcessVO.getBackCode());
            List<ServiceFund> serviceFunds = queryInfoById(serviceFund);
            ServiceFund serviceFund1 = serviceFunds.get(0);
            serviceFund1.setFlowlevel(100L);
            serviceFund1.setDel_flag(0);
            serviceFund1.setRecordstatus(-1);
            serviceFund1.setBackflowlevel(199);
            updateById(serviceFund1);
            //删除share数据
            serviceFundSharedMapper.delfundsharedInfoById(null, serviceFund1.getId());
            //这个消息发送,就不在这做了,在审批记录的接口里做(即日志接口)
            //sendMeg(serviceFund1.getApplytype(), sysUser.getPhonenumber());
        }
        return true;
    }
    /**
     * æµç¨‹å®¡æ‰¹æ—¥å¿—
     *
     * @param serviceProcessVO
     * @return
     */
    @Override
    public Boolean processlog(ServiceProcessVO serviceProcessVO) {
        String userNo = null;
        String userName = null;
        String phone = null;
        String applytype = null;
        Long flowlevel = null;
        if (serviceProcessVO.getApplytype().equals("0")) {
            ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
            serviceReimbursement.setId(serviceProcessVO.getBackCode());
            List<ServiceReimbursement> serviceReimbursementList = iServiceReimbursementService.queryList(serviceReimbursement);
            if (CollectionUtils.isEmpty(serviceReimbursementList)) {
                log.error("serviceReimbursementList没有查到数据:{}", serviceProcessVO.getBackCode());
                return false;
            }
            //这几个值,需要给下面用;  applytype,不能用传进来的,只能自己查
            userNo = serviceReimbursementList.get(0).getUserno();
            userName = serviceReimbursementList.get(0).getUsername();
            phone = serviceReimbursementList.get(0).getPhone();
            flowlevel = serviceReimbursementList.get(0).getFlowlevel();
            applytype = "0";
        } else {
            ServiceFund serviceFund = new ServiceFund();
            serviceFund.setId(serviceProcessVO.getBackCode());
            List<ServiceFund> serviceFunds = queryInfoById(serviceFund);
            if (CollectionUtils.isEmpty(serviceFunds)) {
                log.error("serviceFunds没有查到数据:{}", serviceProcessVO.getBackCode());
                return false;
            }
            userNo = serviceFunds.get(0).getUserno();
            userName = serviceFunds.get(0).getUsername();
            phone = serviceFunds.get(0).getPhone();
            flowlevel = serviceFunds.get(0).getFlowlevel();
            applytype = serviceFunds.get(0).getApplytype();
        }
        //将操作保存到fundflow表中
        ServiceFundflow serviceFundflow = new ServiceFundflow();
        serviceFundflow.setCreateBy("admin");
        serviceFundflow.setCreateTime(new Date());
        serviceFundflow.setUpdateBy("admin");
        serviceFundflow.setUpdateTime(new Date());
        serviceFundflow.setCheckusername(serviceProcessVO.getCheckusername());
        serviceFundflow.setFlowcontent(serviceProcessVO.getFlowcontent());
        serviceFundflow.setFlowconclusion(1);
        serviceFundflow.setFundtype(2);
        serviceFundflow.setFlowlevel(flowlevel.intValue());
        if (serviceProcessVO.getFlowconclusion() == 3) serviceFundflow.setFlowlevel(999);
        serviceFundflow.setApplytype(applytype);
        serviceFundflow.setFundid(serviceProcessVO.getBackCode());
        serviceFundflow.setCheckTime(serviceProcessVO.getCheckTime());
        fundflowService.save(serviceFundflow);
        SysUser sysUser = sysUserService.selectUserByUserName(userNo);
        sendMeg(serviceProcessVO, phone);
        //发送信息保存
        ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
        serviceSystemmessage.setFundtype(1);
        serviceSystemmessage.setSenduserno(sysUser.getUserName());
        serviceSystemmessage.setSendusername(sysUser.getNickName());
        serviceSystemmessage.setReceiveuserno(userNo);
        serviceSystemmessage.setReceiveusername(userName);
        serviceSystemmessage.setUpdateTime(new Date());
        serviceSystemmessage.setUpdateBy(sysUser.getNickName());
        serviceSystemmessage.setIsread(0);
        serviceSystemmessage.setMessagetype(1);
        serviceSystemmessage.setMessagetitle("财务系统信息");
        serviceSystemmessage.setMessagecontent(serviceProcessVO.getFlowcontent());
        iServiceSystemmessageService.save(serviceSystemmessage);
        return true;
    }
    /**
     * æŸ¥è¯¢è´¹ç”¨ç”³è¯·ä¸»åˆ—表(包含删除的)
@@ -153,6 +333,392 @@
        return serviceFundMapper.getInfoByInfoId(infoid);
    }
    @Override
    public Map<String, String> checkFund(CheckFundVO checkFundVO, LoginUser loginUser) {
        ServiceFund serviceFund = getById(checkFundVO.getFundid());
        Map<String, String> map = new HashMap<>();
        if (serviceFund == null) {
            map.put(HttpStatus.NO_CONTENT + "", "费用编号不正确");
            return map;
        }
        Integer TotalLevel = 0;
        ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
        serviceFundflowrule.setFundtype(2);
        serviceFundflowrule.setApplytype(serviceFund.getApplytype());
        serviceFundflowrule.setCheckuserno(loginUser.getUsername());
        log.info("serviceFundController---checkFund---queryList的入参值serviceFundflowrule:{}", serviceFundflowrule);
        List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
        if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
            map.put(HttpStatus.ERROR + "", "当前人员无此记录审核权限");
            return map;
        }
        if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceFund.getFlowlevel()) {
            map.put(HttpStatus.ERROR + "", "当前人员与此记录的审核级别不符");
            return map;
        }
        if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
            TotalLevel = serviceFundflowrules.get(0).getTotallevel();
        }
        Integer CheckFlag = 0;
        Integer RecordStatus = serviceFund.getRecordstatus();
        Integer FlowLevel = serviceFund.getFlowlevel().intValue();
        Integer OriginalFlowLevel = FlowLevel;
        if (checkFundVO.getFlowconclusion() == 1) {
            CheckFlag = 1;
            if (TotalLevel == 0) {
                RecordStatus = 99;
            } else {
                if (TotalLevel == FlowLevel + 1) {
                    RecordStatus = 99;
                } else {
                    RecordStatus = (FlowLevel + 1) * 2;
                }
            }
            FlowLevel = FlowLevel + 1;
            SysUser user = loginUser.getUser();
            if (serviceFund.getFlowlevel() == Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1) && serviceFund.getBackflowlevel() == 100) {
                log.info("财务退回再提交,出纳再次审批,之后提交到财务");
                serviceFund.setFinancechecher("审批人:" + user.getUserName() + " & å®¡æ‰¹æ—¶é—´" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & å®¡æ‰¹ç»“果:通过");
                serviceFund.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
                serviceFund.setRecordstatus(99);
                serviceFund.setUploadStates(1);
                updateById(serviceFund);
                //数据发送
                Boolean aBoolean1 = null;
                if (newSwitch == 1) {
                    aBoolean1 = sendData(serviceFund);
                    if (!aBoolean1) {
                        map.put("500", "发送失败");
                        return map;
                    }
                }
                //保存审批流程表
                ServiceFundflow serviceFundflow = new ServiceFundflow();
                serviceFundflow.setFundid(serviceFund.getId());
                serviceFundflow.setCheckuserno(user.getUserName());
                serviceFundflow.setCheckusername(user.getNickName());
                serviceFundflow.setFundtype(2);
                serviceFundflow.setApplytype(serviceFund.getApplytype());
                serviceFundflow.setFlowconclusion(CheckFlag);
                serviceFundflow.setFlowcontent("通过");
                Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
                map.put("200", "success");
                return map;
            }
            //如果当前登陆是财务,则进行记录
            List<Integer> roleIds = sysUserRoleMapper.getUserRoleByUserId(user.getUserId());
            if (roleIds != null && roleIds.contains(11)) {
                //11为财务
                serviceFund.setFinancechecher("审批人:" + user.getUserName() + " & å®¡æ‰¹æ—¶é—´" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & å®¡æ‰¹ç»“果:通过");
            }
            //记录一下,下一级的审批,以便于下一级退回后,发起者提交时,能再提到当前审批层级
            serviceFund.setBackflowlevel(FlowLevel);
        } else {
            CheckFlag = 2;
            if (CheckFlag == 2) {
                //应医院要求如果出现退回,直接退到发起者
                FlowLevel = 0;
                RecordStatus = -1;
                log.info("serviceFund进来了吗?????? :{},{}", RecordStatus, FlowLevel);
                System.out.println("serviceFund进来了吗??????");
            } else {
                RecordStatus = (FlowLevel + 1) * 2 - 1;
                FlowLevel = (FlowLevel - 1);
                if (FlowLevel < 0) {
                    FlowLevel = 0;
                }
            }
            SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
            ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
            ConcurrentHashMap cmap = new ConcurrentHashMap();
            cmap.put("审批人:", loginUser.getUser().getUserName());
            cmap.put("审批时间:", new Date());
            cmap.put("意见:", "不通过");
            if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) cmap.put("意见:", checkFundVO.getFlowcontent());
            contentList.add(cmap);
            DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
            dingTalkReqVo.setTitle("财务系统驳回信息");
            dingTalkReqVo.setNumber(sysUser.getPhonenumber());
            dingTalkReqVo.setContents(contentList);
            dingTalkService.sendNotification(dingTalkReqVo);
        }
        serviceFund.setRecordstatus(RecordStatus);
        serviceFund.setFlowlevel(FlowLevel.longValue());
        //  serviceFund.setBackflowlevel(serviceFund.getFlowlevel());
        ServiceFundflow serviceFundflow = new ServiceFundflow();
        SysUser user = loginUser.getUser();
        serviceFundflow.setFundid(serviceFund.getId());
        serviceFundflow.setCheckuserno(user.getUserName());
        serviceFundflow.setCheckusername(user.getNickName());
        serviceFundflow.setFundtype(2);
        serviceFundflow.setApplytype(serviceFund.getApplytype());
        serviceFundflow.setFlowconclusion(CheckFlag);
        if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
            serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
        } else {
            serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
        }
        serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
        Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
        log.info("sserviceFund保存的的值是-------- :{}", aBoolean);
        //053审批通过之后,就需要把“办公室主任”的名字填上
        if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
            serviceFund.setOfficedirector(user.getNickName());
            serviceFund.setUploadStates(1);
            //数据发送
            Boolean aBoolean1 = null;
            if (newSwitch == 1) {
                //搞一个开关,别影响老流程
                aBoolean1 = sendData(serviceFund);
                if (!aBoolean1) {
                    map.put("500", "发送失败");
                    return map;
                }
            }
        }
        System.out.println("serviceFund的值是--------:" + serviceFund);
        log.info("开始更新的的值是--------");
        Boolean aBoolean1 = updateById(serviceFund);
        log.info("integer更新的的值是-------- :{}", aBoolean1);
        ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
        serviceSystemmessage.setFundtype(2);
        serviceSystemmessage.setApplytype(serviceFund.getApplytype());
        serviceSystemmessage.setSenduserno(user.getUserName());
        serviceSystemmessage.setSendusername(user.getNickName());
        serviceSystemmessage.setReceiveuserno(serviceFund.getUserno());
        serviceSystemmessage.setReceiveusername(serviceFund.getUsername());
        serviceSystemmessage.setUpdateTime(new Date());
        serviceSystemmessage.setUpdateBy(user.getNickName());
        serviceSystemmessage.setIsread(0);
        serviceSystemmessage.setMessagetype(1);
        serviceSystemmessage.setRelevantno(serviceFund.getId());
        if (CheckFlag == 1) {
            //通过
            if (serviceFund.getApplytype().equals("1")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
            } else if (serviceFund.getApplytype().equals("2")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的伦理专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
            } else if (serviceFund.getApplytype().equals("3")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的医学成本捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过");
            } else if (serviceFund.getApplytype().equals("4")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的办公费用申请已通过");
            } else if (serviceFund.getApplytype().equals("5")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的绩效申请已通过");
            }
        } else {
            //驳回
            if (serviceFund.getApplytype().equals("1")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
            } else if (serviceFund.getApplytype().equals("2")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的伦理专家劳务费捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
            } else if (serviceFund.getApplytype().equals("3")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的医学成本捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被驳回,原因: " + checkFundVO.getFlowcontent() + "");
            } else if (serviceFund.getApplytype().equals("4")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的办公费用申请已驳回,原因: " + checkFundVO.getFlowcontent() + "");
            } else if (serviceFund.getApplytype().equals("5")) {
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的绩效申请已驳回,原因: " + checkFundVO.getFlowcontent() + "");
            }
        }
        iServiceSystemmessageService.save(serviceSystemmessage);
        map.put("200", "success");
        return map;
    }
    public Boolean sendData(ServiceFund serviceFund) {
        // fund和funddetail的数据获取
        addFundSharedInfo(serviceFund.getId());
        List<ServiceFundShared> fundShareInfos = serviceFundSharedMapper.getFundShareInfoById(serviceFund.getId());
        if (CollectionUtils.isEmpty(fundShareInfos)) return false;
        log.info("fundShareInfos的数据量为:{}", fundShareInfos.size());
        ServiceFunddetailShared serviceFunddetailShared = new ServiceFunddetailShared();
        serviceFunddetailShared.setFundid(fundShareInfos.get(0).getId());
        List<ServiceFunddetailShared> serviceFunddetailShareds = detailSharedService.queryList(serviceFunddetailShared);
        // æ•°æ®çš„封装
        Map<String, Object> map = new HashMap<>();
        Map<String, Object> data = new HashMap<>();
        //应用类型 å›ºå®šå€¼
        map.put("appName", "collaboration");
        // ä¸»è¡¨å­—段数据
        Map<String, Object> data2 = new HashMap<>();
        data2.put("formmain_0831", getformmain_0831(fundShareInfos.get(0)));
        // æ˜Žç»†è¡¨å­—段数据,与附件的处理
        Map<String, List<Map<String, Object>>> map1 = formson_0832(serviceFunddetailShareds);
        data2.put("formson_0832", map1.get("formson_0832"));
        data2.put("thirdAttachments", map1.get("annexfilesList"));
        data.put("data", data2);
        //模板编号,由致远方提供,该参数决定发起协同系统中哪个流程
        data.put("templateCode", "001");
        //是否为待发:0:新建-发送;1:新建-保存待发
        data.put("draft", "0");
        //协同标题区附件,Long型List,值为附件的Id。Id是附件接口响应结果中fileUrl字段的值
        data.put("attachments", null);
        //协同公文的id
        data.put("relateDoc", "col|123,456;doc|321,654");
        //未设置取模板设置的标题
        data.put("subject", "null");
        map.put("data", data);
        String strRes = null;
        if (!active.equals("druid")) {
            //如果是本地环境,就不调这个了
            if (serviceFund.getBackflowlevel() == 100L) {
                //再次发起
                strRes = HttpClientKit.postOpr(rexyurl, map.toString());
            } else {
                //首次发起
                strRes = HttpClientKit.postOpr(xyurl, map.toString());
            }
        }
        com.alibaba.fastjson2.JSONObject jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(strRes);
        String code = jsonObject.getJSONObject("code").toString();
        if (!code.equals("0")) {
            return false;
        }
        return true;
    }
    private Map<String, List<Map<String, Object>>> formson_0832(List<ServiceFunddetailShared> serviceFunddetailSharedList) {
        Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        List<Map<String, Object>> annexfilesList = new ArrayList<>();
        for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailSharedList) {
            Map<String, Object> map = new HashMap<>();
            map.put("序号1", serviceFunddetailShared.getOrderno());
            map.put("费用项目", serviceFunddetailShared.getItemname());
            map.put("税前金额", serviceFunddetailShared.getAmount());
            map.put("开户银行", serviceFunddetailShared.getDepositbank());
            map.put("卡号", serviceFunddetailShared.getBankcardno());
            map.put("收益人家属或专家", serviceFunddetailShared.getBeneficiaryname());
            map.put("税后金额", serviceFunddetailShared.getTaxamount());
            map.put("作废最终金额", null);
            String fpuuid = IdUtils.simpleUUID();
            map.put("发票附件", fpuuid);
            map.put("发票识别", null);
            map.put("识别人", null);
            map.put("税额", null);
            String qtuuid = IdUtils.simpleUUID();
            map.put("其他附件", qtuuid);
            map.put("项目编码", serviceFunddetailShared.getItemcode());
            map.put("预算项目", null);
            map.put("贷方科目", null);
            map.put("借方摘要", null);
            map.put("贷方摘要", null);
            map.put("识别备注", null);
            map.put("费用说明", null);
            list.add(map);
            //附件处理
            String annexfiles = serviceFunddetailShared.getAnnexfiles();
            String invoicefiles = serviceFunddetailShared.getInvoicefiles();
            int i = 0;
            if (StringUtils.isNotEmpty(annexfiles)) {
                List<RbDetailFile> parseArray = JSON.parseArray(annexfiles, RbDetailFile.class);
                for (RbDetailFile rbDetailFile : parseArray) {
                    Map<String, Object> thirdAttachments = new HashMap<>();
                    thirdAttachments.put("subReference", qtuuid);
                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
                    thirdAttachments.put("sort", i++);
                    annexfilesList.add(thirdAttachments);
                }
            }
            if (StringUtils.isNotEmpty(invoicefiles)) {
                List<RbDetailFile> parseArray = JSON.parseArray(invoicefiles, RbDetailFile.class);
                for (RbDetailFile rbDetailFile : parseArray) {
                    Map<String, Object> thirdAttachments = new HashMap<>();
                    thirdAttachments.put("subReference", fpuuid);
                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
                    thirdAttachments.put("sort", i++);
                    annexfilesList.add(thirdAttachments);
                }
            }
        }
        allMap.put("formson_0832", list);
        allMap.put("annexfilesList", annexfilesList);
        return allMap;
    }
    private Map<String, Object> getformmain_0831(ServiceFundShared serviceFundShared) {
        Map<String, Object> formmain_0831 = new HashMap<>();
        formmain_0831.put("捐献者姓名", serviceFundShared.getDonorname());
        formmain_0831.put("报销人员", serviceFundShared.getUsername());
        formmain_0831.put("业务区域", serviceFundShared.getDeptmentname());
        formmain_0831.put("经手人", serviceFundShared.getUsername());
        formmain_0831.put("填表时间", serviceFundShared.getApplyTime());
        formmain_0831.put("报销金额合计", serviceFundShared.getPretaxcost());
        formmain_0831.put("上传附件", null);
        formmain_0831.put("备注", null);
        formmain_0831.put("财务审批", serviceFundShared.getFinancechecher());
        formmain_0831.put("财务部负责人审批", serviceFundShared.getFinancedirector());
        formmain_0831.put("办公室主任审批", serviceFundShared.getOfficedirector());
        formmain_0831.put("业务副院长审批", serviceFundShared.getBusvicepresident());
        formmain_0831.put("财务副院长审批", serviceFundShared.getFinvicepresident());
        formmain_0831.put("中心负责人审批", serviceFundShared.getOpochecker());
        formmain_0831.put("支付方式", serviceFundShared.getZffs());
        formmain_0831.put("组长", null);
        formmain_0831.put("审批人员", null);
        formmain_0831.put("支付日期", serviceFundShared.getRiqi());
        formmain_0831.put("识别人-作废", null);
        formmain_0831.put("财务审批签字", serviceFundShared.getFinancedirector());
        formmain_0831.put("财务部负责人签字", serviceFundShared.getFinancedirector());
        formmain_0831.put("表达类型", null);
        formmain_0831.put("税前金额合计", serviceFundShared.getPretaxcost());
        formmain_0831.put("税额合计", serviceFundShared.getPretaxcost() - serviceFundShared.getTaxedcost());
        formmain_0831.put("表单编号1", null);
        formmain_0831.put("编码", null);
        formmain_0831.put("CIF账套配置1", null);
        formmain_0831.put(" é™¢åŒº", null);
        formmain_0831.put("是否支付", serviceFundShared.getIsdistribute());
        formmain_0831.put("凭证号", null);
        formmain_0831.put("银行回单", null);
        formmain_0831.put("OFD", null);
        formmain_0831.put("表单附件", null);
        formmain_0831.put("现金流量分析", null);
        formmain_0831.put("凭证类别", null);
        formmain_0831.put("税后金额合计", serviceFundShared.getTaxedcost());
        formmain_0831.put("历史审批记录", null);
        formmain_0831.put("表单编号", serviceFundShared.getBh());
        formmain_0831.put("历史审批单查询", null);
        return formmain_0831;
    }
    @Override
    public Long getFundId(Long infoid) {
@@ -192,7 +758,7 @@
            serviceFunddetailShareds.get(i).setId(null);
            //数据发送给财务
            try {
                uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
                if (!active.equals("druid")) uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
            } catch (Exception e) {
                e.printStackTrace();
                log.error("Exception中入参的ID为:{},异常信息为 ï¼š {}", id, e.getMessage());
@@ -964,9 +1530,7 @@
    int uploadOAFileAndUpdateDb(ServiceFunddetailShared remShare) throws Exception {
        //上传OA文件
        //String strUrl = "http://129.88.242.39:8899/seeyon/rest/token?userName=opo&password=127814f8-84e8-4304-84a5-a71573567efd&loginName=demo3";
        String strUrl = "http://129.88.242.39:8899/seeyon/rest/token";
        //String strUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/token";
        //上传文件成功后,去更新相关的数据库
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("userName", "opo");
@@ -1046,98 +1610,6 @@
        return 0;
    }
//    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";
//        String strUrl = "http://129.88.242.39:8899/seeyon/rest/token";
//        //String strUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/token";
//        //上传文件成功后,去更新相关的数据库
//
//
//        Map<String, Object> map = new HashMap<String, Object>();
//        map.put("userName", "opo");
//        map.put("password", "4126407a-9821-4874-be41-6568abd6dbe5");
//        map.put("loginName", "demo3");
//
//        JSONObject jsonObj = new JSONObject(map);
//
//        System.out.println("uploadOAFileAndUpdateDb + jsonObject" + jsonObj.toString() + "\r\n" + jsonObj.toJSONString());
//        String strRes = HttpClientKit.postOpr(strUrl, jsonObj.toString());//
//        //String strRes = HttpClientKit.postMsg(strUrl,jsonObj);//得到返回的token?
//
//        JSONObject json1 = JSONObject.parseObject(strRes);
//        strRes = json1.get("id").toString();
//
//        ///if(strRes.isEmpty() || "" == strRes) return -1;// ä¸ºç©ºä»£è¡¨å¤±è´¥
//
//        //下面需求调用文件的接口,调用成功返回后,得到filename和fileid ç”¨è¿™äºŒä¸ªå€¼åŽ»æ›´æ–°æ•°æ®
//
//        String filePath = RuoYiConfig.getUploadPath();
//        String strMutfileUrl = remShare.getAnnexbankcard();//可能存在多个地址,以,分开
//
//        String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=" + strRes;
//        //String strFUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/attachment?token="+strRes;
//        //strFUrl = String.format(strFUrl, strRes);
//
//        /*File test = null;
//        File file = new File("E:\\YYJQ\\OPO\\WEB\\Upload\\upload\\2023\\02\\17");
//        if (file.exists() && file.isDirectory()) {
//            // èŽ·å–æ‰€æœ‰ç›²ç›’æ–‡ä»¶å¤¹
//            File[] ones = file.listFiles();
//            for (File one : ones) {
//                test = one;
//            }
//        }*/
//
//        String filename = "";
//        String fileid = "";
//
//        String[] urlArray = strMutfileUrl.split(",");
//        for (int i = 0; i < urlArray.length; i++) {
//            String strOneFileName = urlArray[i];
//            String strTemp = strOneFileName.substring(15);
//            String strFile = filePath + strTemp;
//            //FileUploadUtils.getAbsoluteFile(filePath,strOneFileName);
//            String struploadResult = "";
//            File filetest = new File(strFile);
//            try {
//                struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//
//            //String strFRes = HttpClientKit.postMsg(strFUrl,jsonFObj);
//            if (struploadResult == null) return 0;
//            if (struploadResult.isEmpty()) return 0;
//
//            JSONObject jsonR = JSONObject.parseObject(struploadResult);
//
//            JSONArray jsonArr = jsonR.getJSONArray("atts");
//            for (int j = 0; j < jsonArr.size(); j++) {
//                JSONObject jsonRet = jsonArr.getJSONObject(j);
//                String name1 = jsonRet.get("filename").toString();
//                String id1 = jsonRet.get("fileUrl").toString();
//                filename += name1;
//                fileid += id1;
//                if (i != urlArray.length - 1) {
//                    filename += ",";
//                    fileid += ",";
//                }
//            }
//
//        }
//
//        long nId = remShare.getId();
//        remShare.setId(nId);
//        remShare.setFilename(filename);
//        remShare.setFileid(fileid);
//        boolean bRet = sharedService.updateById(remShare);
//        if (!bRet) return -1;
//
//        return 0;
//    }
    public long saveFund(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
@@ -1201,4 +1673,37 @@
        boolean b = serviceFunddetailMapper.updateTaxTime(serviceFunddetail);
        return b;
    }
    public void sendMeg(ServiceProcessVO serviceProcessVO, String phone) {
        //记录操作记录
        ServiceFundflow serviceFundflow = new ServiceFundflow();
        serviceFundflow.setCreateBy(serviceProcessVO.getCheckusername());
        serviceFundflow.setUpdateBy(serviceProcessVO.getCheckusername());
        serviceFundflow.setCheckusername(serviceProcessVO.getCheckusername());
        serviceFundflow.setCreateTime(new Date());
        serviceFundflow.setUpdateTime(new Date());
        serviceFundflow.setFlowcontent(serviceProcessVO.getFlowcontent());
        serviceFundflow.setFlowconclusion(serviceProcessVO.getFlowconclusion());
        if (serviceProcessVO.getApplytype() == "0") serviceFundflow.setFundtype(1);
        if (serviceProcessVO.getApplytype() == "1") serviceFundflow.setFundtype(2);
        serviceFundflow.setFlowlevel(100);
        serviceFundflow.setApplytype(serviceProcessVO.getApplytype());
        serviceFundflow.setFundid(serviceProcessVO.getBackCode());
        fundflowService.save(serviceFundflow);
        ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
        ConcurrentHashMap map = new ConcurrentHashMap();
        map.put("审批人:", serviceProcessVO.getCheckusername());
        map.put("审批时间:", serviceProcessVO.getCheckTime());
        map.put("意见:", serviceProcessVO.getFlowcontent());
        contentList.add(map);
        DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
        dingTalkReqVo.setTitle("财务系统信息");
        dingTalkReqVo.setNumber(phone);
        dingTalkReqVo.setContents(contentList);
        log.info("钉钉发送消息:{}", dingTalkReqVo);
        dingTalkService.sendNotification(dingTalkReqVo);
    }
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java
@@ -1,36 +1,43 @@
package com.ruoyi.project.service.impl;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.dto.ServiceReimbursementDto;
import com.ruoyi.project.domain.vo.CheckFundVO;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut;
import com.ruoyi.project.mapper.*;
import com.ruoyi.project.service.IServiceReimbursementSharedService;
import com.ruoyi.project.service.IServiceReimbursementdetailSharedService;
import com.ruoyi.project.service.IServiceReimbursementpayeeSharedService;
import com.ruoyi.project.service.*;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysUserService;
import com.sun.org.apache.bcel.internal.generic.NEW;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.Map;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.service.IServiceReimbursementService;
import org.springframework.transaction.annotation.Transactional;
/**
@@ -66,6 +73,40 @@
    @Autowired
    IServiceReimbursementpayeeSharedService payeeSharedService;
    @Autowired
    IServiceFundflowruleService serviceFundflowruleService;
    @Autowired
    IServiceFundflowService serviceFundflowService;
    @Autowired
    ISysUserService sysUserService;
    @Autowired
    private DingTalkService dingTalkService;
    @Autowired
    private ISysPostService postService;
    @Autowired
    private SysUserRoleMapper sysUserRoleMapper;
    @Autowired
    private IServiceSystemmessageService serviceSystemmessageService;
    @Value("${xyurl}")
    private String xyurl;
    @Value("${rexyurl}")
    private String rexyurl;
    @Value("${newSwitch}")
    private Integer newSwitch;
    @Value("${spring.profiles.active}")
    private String active;
    /**
     * æŸ¥è¯¢æŠ¥é”€ç”³è¯·åˆ—表
@@ -188,7 +229,6 @@
        //将组装好的数据插入到分享表中
        sharedService.save(serviceReimbursementShared);
//        //上传OA文件
//        uploadOAFileAndUpdateDb(serviceReimbursementShared);
        //将serviceReimbursementdetail表里的id赋值给Rdid; å°†serviceReimbursementShared里的ID赋值给RBID,并将serviceReimbursementdetailShared表里的id置空,由数据库重新生成
        for (int i = 0; i < details.size(); i++) {
            serviceReimbursementdetailShareds.get(i).setRdid(serviceReimbursementdetailShareds.get(i).getId());
@@ -197,7 +237,8 @@
            //上传OA文件
            log.info("上传OA文件方法的入参:{}", serviceReimbursementdetailShareds.get(i));
            try {
                uploadOAFileAndUpdateDb(serviceReimbursementdetailShareds.get(i));
                //如果是本地环境,就不调这个了
                if (!active.equals("druid")) uploadOAFileAndUpdateDb(serviceReimbursementdetailShareds.get(i));
            } catch (Exception e) {
                log.error("Exception中reimShare的入参id为:{}", serviceReimbursementShared.getId());
                if (serviceReimbursementShared.getId() != null) {
@@ -261,6 +302,440 @@
        return serviceReimbursementMapper.getRDInfoByItem(serviceReimbursementEo);
    }
    @Override
    public Map<String, String> checkFund(LoginUser loginUser, CheckFundVO checkFundVO) {
        Map<String, String> allMap = new HashMap<>();
        ServiceReimbursement serviceReimbursement = getById(checkFundVO.getFundid());
        log.info("审核费用的serviceReimbursementService.getById返参 : {}", serviceReimbursement);
        if (serviceReimbursement != null) {
            Integer totalLevel = 0;
            ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
            serviceFundflowrule.setFundtype(1);
            serviceFundflowrule.setApplytype("0");
            serviceFundflowrule.setCheckuserno(loginUser.getUsername());
            List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
            log.info("审核费用的serviceFundflowruleService.queryList返参 : {}", serviceFundflowrules.size());
            if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
                allMap.put(HttpStatus.ERROR + "", "当前人员无此记录审核权限");
                return allMap;
            }
            if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceReimbursement.getFlowlevel()) {
                allMap.put(HttpStatus.ERROR + "", "当前人员与此记录的审核级别不符");
                return allMap;
            }
            if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
                totalLevel = serviceFundflowrules.get(0).getTotallevel();
            }
            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;
                if (totalLevel == 0) {
                    //99 å–消
                    RecordStatus = 99;
                } else {
                    if (totalLevel == FlowLevel + 1) {
                        RecordStatus = 99;
                    } else {
                        RecordStatus = (FlowLevel + 1) * 2;
                    }
                }
                SysUser user = loginUser.getUser();
                if (serviceReimbursement.getFlowlevel() == 1 && serviceReimbursement.getBackflowlevel() == 100) {
                    log.info("出差补贴被 è´¢åŠ¡é€€å›žå†æäº¤ï¼Œå‡ºçº³å†æ¬¡å®¡æ‰¹ï¼Œä¹‹åŽæäº¤åˆ°è´¢åŠ¡:{}", serviceReimbursement.getId());
                    //说明是财务退回再提交的.需要出纳再看一遍,没问题之后,往分享表里新增
//                    serviceReimbursementService.addSharedData(serviceReimbursement.getId());
                    serviceReimbursement.setFinancechecher("审批人:" + user.getUserName() + " & å®¡æ‰¹æ—¶é—´" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & å®¡æ‰¹ç»“果:通过");
                    serviceReimbursement.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
                    serviceReimbursement.setRecordstatus(99);
                    serviceReimbursement.setUploadStates(1);
                    boolean b = updateById(serviceReimbursement);
                    log.info("是否修改成功:{}", b);
                    Boolean aBoolean1 = null;
                    if (newSwitch == 1) {
                        aBoolean1 = sendData(serviceReimbursement);
                        if (!aBoolean1) {
                            allMap.put("500", "发送失败");
                            return allMap;
                        }
                    }
                    //保存审批流程表
                    ServiceFundflow serviceFundflow = new ServiceFundflow();
                    serviceFundflow.setFundid(serviceReimbursement.getId());
                    serviceFundflow.setCheckuserno(user.getUserName());
                    serviceFundflow.setCheckusername(user.getNickName());
                    serviceFundflow.setFundtype(1);
                    serviceFundflow.setApplytype("0");
                    serviceFundflow.setFlowconclusion(CheckFlag);
                    serviceFundflow.setFlowcontent("通过");
                    serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
                    Boolean aBoolean = serviceFundflowService.save(serviceFundflow);
                    allMap.put("200", "success");
                    return allMap;
                }
                FlowLevel = FlowLevel + 1;
                serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel));
                //如果当前登陆是财务,则
                List<Integer> roleIds = sysUserRoleMapper.getUserRoleByUserId(user.getUserId());
                if (roleIds != null && roleIds.contains(11)) {
                    //11为财务
                    serviceReimbursement.setFinancechecher("审批人:" + user.getUserName() + " & å®¡æ‰¹æ—¶é—´" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & å®¡æ‰¹ç»“果:通过");
                }
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                    RecordStatus = -1;
                } else {
                    //下面是原来的写法,一级一级的往下退,医院现在不要这样搞了,下面这段代码先保留,等医院回心转意,再给放开
                    RecordStatus = (FlowLevel + 1) * 2 - 1;
                    FlowLevel = (FlowLevel - 1);
                    if (FlowLevel < 0) {
                        FlowLevel = 0;
                    }
                }
                SysUser sysUser = sysUserService.selectUserByUserName(serviceReimbursement.getUserno());
                ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
                ConcurrentHashMap map = new ConcurrentHashMap();
                map.put("审批人:", loginUser.getUser().getUserName());
                map.put("审批时间:", new Date());
                map.put("意见:", "不通过");
                if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) map.put("意见:", checkFundVO.getFlowcontent());
                contentList.add(map);
                DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
                dingTalkReqVo.setTitle("财务系统驳回信息");
                dingTalkReqVo.setNumber(sysUser.getPhonenumber());
                dingTalkReqVo.setContents(contentList);
                dingTalkService.sendNotification(dingTalkReqVo);
            }
            serviceReimbursement.setRecordstatus(RecordStatus);
            serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString()));
            ServiceFundflow serviceFundflow = new ServiceFundflow();
            SysUser user = loginUser.getUser();
            serviceFundflow.setFundid(serviceReimbursement.getId());
            serviceFundflow.setCheckuserno(user.getUserName());
            serviceFundflow.setCheckusername(user.getNickName());
            serviceFundflow.setFundtype(1);
            serviceFundflow.setApplytype("0");
            serviceFundflow.setFlowconclusion(CheckFlag);
            if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
            } else {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
            }
            serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
            serviceFundflowService.save(serviceFundflow);
            List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId());
            log.info("postService.selectPostListByUserId : {}", postids.size());
            if (!postids.contains(2) && !postids.contains(6) && (serviceReimbursement.getBackflowlevel() == null || serviceReimbursement.getBackflowlevel() == 0)) {
                if (CheckFlag == 2 && OriginalFlowLevel == 1) {
                    ServiceFundflow serviceFundflowAuto = new ServiceFundflow();
                    serviceFundflowAuto.setFundid(serviceReimbursement.getId());
                    serviceFundflowAuto.setCheckuserno(user.getUserName());
                    serviceFundflowAuto.setCheckusername(user.getNickName());
                    serviceFundflowAuto.setFundtype(1);
                    serviceFundflowAuto.setApplytype("0");
                    serviceFundflowAuto.setFlowconclusion(CheckFlag);
                    serviceFundflowAuto.setFlowcontent("非专职人员二级审核拒绝后直接退回到修改状态");
                    serviceFundflowAuto.setFlowlevel(1);
                    serviceFundflowService.save(serviceFundflowAuto);
                    serviceReimbursement.setRecordstatus(1);
                }
            }
            //053审批通过之后,就需要把“办公室主任”的名字填上
            if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
                serviceReimbursement.setOfficedirector(user.getNickName());
                serviceReimbursement.setUploadStates(1);
                Boolean aBoolean1 = null;
                if (newSwitch == 1) {
                    aBoolean1 = sendData(serviceReimbursement);
                    if (!aBoolean1) {
                        allMap.put("500", "发送失败");
                        return allMap;
                    }
                }
            }
            updateById(serviceReimbursement);
            ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
            serviceSystemmessage.setFundtype(1);
            serviceSystemmessage.setApplytype("0");
            serviceSystemmessage.setSenduserno(user.getUserName());
            serviceSystemmessage.setSendusername(user.getNickName());
            serviceSystemmessage.setReceiveuserno(serviceReimbursement.getUserno());
            serviceSystemmessage.setReceiveusername(serviceReimbursement.getUsername());
            serviceSystemmessage.setIsread(0);
            serviceSystemmessage.setMessagetype(1);
            serviceSystemmessage.setUpdateTime(new Date());
            serviceSystemmessage.setUpdateBy(user.getNickName());
            serviceSystemmessage.setRelevantno(serviceReimbursement.getId());
            log.info("CheckFlag的值 : {}", CheckFlag);
            if (CheckFlag == 1) {
                //通过
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的差旅报销单申请已通过");
                log.info("totalLevel的值 : {},  OriginalFlowLevel的值:{}", totalLevel, OriginalFlowLevel);
            } else {
                //驳回
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的差旅报销单申请被驳回,原因:" + checkFundVO.getFlowcontent() + "");
            }
            serviceSystemmessageService.save(serviceSystemmessage);
            allMap.put("200", "success");
        } else {
            allMap.put(HttpStatus.NO_CONTENT + "", "费用编号不正确");
        }
        return allMap;
    }
    public Boolean sendData(ServiceReimbursement serviceReimbursement) {
        // fund和funddetail的数据获取
        addSharedData(serviceReimbursement.getId());
        List<ServiceReimbursementShared> serviceReimbursementSharedList = sharedService.getRemShareInfoByRemId(serviceReimbursement.getId());
        if (org.springframework.util.CollectionUtils.isEmpty(serviceReimbursementSharedList)) return false;
        log.info("serviceReimbursementSharedList的数据量为:{}", serviceReimbursementSharedList.size());
        //detail详情
        ServiceReimbursementdetailShared serviceReimbursementdetailShared = new ServiceReimbursementdetailShared();
        serviceReimbursementdetailShared.setRbid(serviceReimbursementSharedList.get(0).getId());
        List<ServiceReimbursementdetailShared> serviceReimbursementdetailShareds = detailSharedService.queryList(serviceReimbursementdetailShared);
        //payee详情
        ServiceReimbursementpayeeShared serviceReimbursementpayeeShared = new ServiceReimbursementpayeeShared();
        serviceReimbursementpayeeShared.setRbid(serviceReimbursementSharedList.get(0).getId());
        List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds = payeeSharedService.queryList(serviceReimbursementpayeeShared);
        // æ•°æ®çš„封装
        Map<String, Object> map = new HashMap<>();
        Map<String, Object> data = new HashMap<>();
        //应用类型 å›ºå®šå€¼
        map.put("appName", "collaboration");
        // ä¸»è¡¨å­—段数据
        Map<String, Object> data2 = new HashMap<>();
        data2.put("formmain_1209", formmain_1209(serviceReimbursementSharedList.get(0)));
        // æ˜Žç»†è¡¨å­—段数据,与附件的处理
        Map<String, List<Map<String, Object>>> map1 = formson_1210(serviceReimbursementdetailShareds);
        data2.put("formson_1210", map1.get("formson_1210"));
        data2.put("thirdAttachments", map1.get("annexfilesList"));
        data2.put("formson_1211", formson_1211(serviceReimbursementpayeeShareds));
        data.put("data", data2);
        //模板编号,由致远方提供,该参数决定发起协同系统中哪个流程
        data.put("templateCode", "001");
        //是否为待发:0:新建-发送;1:新建-保存待发
        data.put("draft", "0");
        //协同标题区附件,Long型List,值为附件的Id。Id是附件接口响应结果中fileUrl字段的值
        data.put("attachments", null);
        //协同公文的id
        data.put("relateDoc", "col|123,456;doc|321,654");
        //未设置取模板设置的标题
        data.put("subject", "null");
        map.put("data", data);
        String strRes = null;
        if (!active.equals("druid")) {
            //如果是本地环境,就不调这个了
            if (serviceReimbursement.getBackflowlevel() == 100L) {
                strRes = HttpClientKit.postOpr(rexyurl, map.toString());
            } else {
                strRes = HttpClientKit.postOpr(xyurl, map.toString());
            }
        }
        com.alibaba.fastjson2.JSONObject jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(strRes);
        String code = jsonObject.getJSONObject("code").toString();
        if (!code.equals("0")) {
            return false;
        }
        return true;
    }
    private Map<String, List<Map<String, Object>>> formson_1210(List<ServiceReimbursementdetailShared> serviceReimbursementdetailSharedList) {
        Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        List<Map<String, Object>> annexfilesList = new ArrayList<>();
        for (ServiceReimbursementdetailShared reimbursementdetailShared : serviceReimbursementdetailSharedList) {
            Map<String, Object> map = new HashMap<>();
            map.put("交通工具", reimbursementdetailShared.getTraffictype());
            map.put("交通费", reimbursementdetailShared.getTrafficexpense());
            map.put("市内交通", reimbursementdetailShared.getTraffictype2());
            map.put("住宿费", reimbursementdetailShared.getHotelexpense());
            map.put("杂费", reimbursementdetailShared.getOtherexpense());
            map.put("伙食费报销", reimbursementdetailShared.getFoodexpenses());
            map.put("伙食费补助", reimbursementdetailShared.getFoodallowance());
            map.put("其他费用", reimbursementdetailShared.getOtherfeeamount());
            map.put("其他费用说明", reimbursementdetailShared.getOtherfeedesc());
            map.put("金额合计", null);
            map.put("出差时间起", reimbursementdetailShared.getStarttime());
            map.put("出发地点", reimbursementdetailShared.getDeparture());
            map.put("出差时间止", reimbursementdetailShared.getEndtime());
            map.put("出差目的地", reimbursementdetailShared.getDestination());
            map.put("天数", reimbursementdetailShared.getDays());
            map.put("实际报销金额", null);
            map.put("财务备注", reimbursementdetailShared.getRemark());
            map.put("id", reimbursementdetailShared.getRdid());
            map.put("出差人", reimbursementdetailShared.getPersonname());
            map.put("回交通工具", null);
            map.put("人员类别", reimbursementdetailShared.getPersontype());
            map.put("住宿费标准", null);
            map.put("住宿费标准合计", reimbursementdetailShared.getHotelexpense());
            String fpuuid = IdUtils.simpleUUID();
            map.put("发票附件", fpuuid);
            map.put("票据识别", null);
            map.put("识别人", null);
            map.put("序号1", null);
            String qtuuid = IdUtils.simpleUUID();
            map.put("其他附件", qtuuid);
            map.put("个人票夹用户", null);
            map.put("识别票据", null);
            list.add(map);
            //附件处理
            String annexfiles = reimbursementdetailShared.getAnnexfiles();
            String invoicefiles = reimbursementdetailShared.getInvoicefiles();
            int i = 0;
            if (StringUtils.isNotEmpty(annexfiles)) {
                List<RbDetailFile> parseArray = JSON.parseArray(annexfiles, RbDetailFile.class);
                for (RbDetailFile rbDetailFile : parseArray) {
                    Map<String, Object> thirdAttachments = new HashMap<>();
                    thirdAttachments.put("subReference", qtuuid);
                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
                    thirdAttachments.put("sort", i++);
                    annexfilesList.add(thirdAttachments);
                }
            }
            if (StringUtils.isNotEmpty(invoicefiles)) {
                List<RbDetailFile> parseArray = JSON.parseArray(invoicefiles, RbDetailFile.class);
                for (RbDetailFile rbDetailFile : parseArray) {
                    Map<String, Object> thirdAttachments = new HashMap<>();
                    thirdAttachments.put("subReference", fpuuid);
                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
                    thirdAttachments.put("sort", i++);
                    annexfilesList.add(thirdAttachments);
                }
            }
        }
        allMap.put("formson_1210", list);
        allMap.put("annexfilesList", annexfilesList);
        return allMap;
    }
    private List<Map<String, Object>> formson_1211(List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds) {
        Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
        List<Map<String, Object>> list = new ArrayList<>();
        for (ServiceReimbursementpayeeShared serviceReimbursementpayeeShared : serviceReimbursementpayeeShareds) {
            Map<String, Object> map = new HashMap<>();
            map.put("收款人", serviceReimbursementpayeeShared.getPersonname());
            map.put("卡号", serviceReimbursementpayeeShared.getBankcardno());
            map.put("开户银行", serviceReimbursementpayeeShared.getBankname());
            map.put("打款金额", serviceReimbursementpayeeShared.getAmount());
            map.put("人员类别打款", serviceReimbursementpayeeShared.getPersontype());
            map.put("核算项目", null);
            map.put("预算项目", null);
            map.put("借方摘要", null);
            map.put("贷方摘要", null);
            list.add(map);
        }
        return list;
    }
    private Map<String, Object> formmain_1209(ServiceReimbursementShared serviceReimbursementShared) {
        Map<String, Object> formmain_1209 = new HashMap<>();
        formmain_1209.put("报销日期", serviceReimbursementShared.getApplyTime());
        formmain_1209.put("出差人-作废", null);
        formmain_1209.put("报销人", serviceReimbursementShared.getUsername());
        formmain_1209.put("区域组长", serviceReimbursementShared.getManagername());
        formmain_1209.put("出差事由", serviceReimbursementShared.getReason());
        formmain_1209.put("天数合计", null);
        formmain_1209.put("交通费合计", serviceReimbursementShared.getTotalamount());
        formmain_1209.put("市内交通合计", null);
        formmain_1209.put("住宿费合计", null);
        formmain_1209.put("杂费合计", null);
        formmain_1209.put("伙食费报销合计", null);
        formmain_1209.put("伙食费补助合计", null);
        formmain_1209.put("其他费用合计", null);
        formmain_1209.put("领款金额大写", serviceReimbursementShared.getBigstrmoney());
        formmain_1209.put("领款金额", serviceReimbursementShared.getTotalamount());
        formmain_1209.put("财务审批", serviceReimbursementShared.getFinancechecher());
        formmain_1209.put("财务部负责人审批", serviceReimbursementShared.getFinancedirector());
        formmain_1209.put("办公室主任审批", serviceReimbursementShared.getOfficedirector());
        formmain_1209.put("备注", serviceReimbursementShared.getRemark());
        formmain_1209.put("业务副院长审批", serviceReimbursementShared.getBusvicepresident());
        formmain_1209.put("财务副院长审批", serviceReimbursementShared.getFinvicepresident());
        formmain_1209.put("中心负责人审批", serviceReimbursementShared.getOpochecker());
        formmain_1209.put("开户银行-作废", null);
        formmain_1209.put("卡号-作废", null);
        formmain_1209.put("支付方式", serviceReimbursementShared.getZffs());
        formmain_1209.put("组长", null);
        formmain_1209.put("审批人员", null);
        formmain_1209.put("支付日期", serviceReimbursementShared.getRiqi());
        formmain_1209.put("上传附件", null);
        formmain_1209.put("打款合计", null);
        formmain_1209.put("发票识别-作废", null);
        formmain_1209.put("识别人-作废", null);
        formmain_1209.put("财务审批签字", null);
        formmain_1209.put("财务部负责人审批签字", serviceReimbursementShared.getFinancedirector());
        formmain_1209.put("表单编号1", null);
        formmain_1209.put("CIF账套配置1", null);
        formmain_1209.put("院区", null);
        formmain_1209.put("业务区域", null);
        formmain_1209.put("贷方科目", null);
        formmain_1209.put("编码", null);
        formmain_1209.put("是否支付", null);
        formmain_1209.put("凭证号", null);
        formmain_1209.put("银行回单", null);
        formmain_1209.put("OFD", null);
        formmain_1209.put("表单附件", null);
        formmain_1209.put("10204", null);
        formmain_1209.put("现金流量分析", null);
        formmain_1209.put("捐献者", serviceReimbursementShared.getDonorname());
        formmain_1209.put("凭证类别", null);
        formmain_1209.put("合计", null);
        formmain_1209.put("实际合计", null);
        formmain_1209.put("伙食补助合计", null);
        formmain_1209.put("历史审批记录", null);
        formmain_1209.put("表单编号", serviceReimbursementShared.getBh());
        formmain_1209.put("历史审批巨鹿查询", null);
        return formmain_1209;
    }
    public int uploadOAFileAndUpdateDb(ServiceReimbursementdetailShared remShare) throws Exception {
        log.info("uploadOAFileAndUpdate方法的入参:{}", remShare);
ruoyi-project/src/main/resources/mapper/project/ServiceFundSharedMapper.xml
@@ -122,7 +122,7 @@
               riqi,
               bh,
               checkstatus,
               applytime,
               apply_time,
               performancetype
        from service_fund_shared
    </sql>
@@ -130,7 +130,7 @@
    <select id="getFundShareInfoById" resultType="com.ruoyi.project.domain.ServiceFundShared"
            resultMap="ServiceFundSharedResult">
        <include refid="selectServiceFundSharedVo"/>
        where serfunid = #{fundid}
        where serfunid = #{fundid} and del_flag=0
    </select>
    <select id="selectServiceFundSharedList" parameterType="ServiceFundShared" resultMap="ServiceFundSharedResult">
@@ -193,8 +193,8 @@
        SET del_flag = 1
        WHERE
        del_flag != 1
        <if test="fundId != null"> and ID = #{fundId}</if>
        <if test="serfunid != null"> and serfunid = #{serfunid}</if>
        <if test="fundId != null">and ID = #{fundId}</if>
        <if test="serfunid != null">and serfunid = #{serfunid}</if>
    </update>
ruoyi-project/src/main/resources/mapper/project/ServiceReimbursementSharedMapper.xml
@@ -205,5 +205,12 @@
        WHERE id = #{id}
          and del_flag != 1
    </update>
    <update id="delResharedInfoByReimid">
        UPDATE service_reimbursement_shared
        SET del_flag   = 1,
            update_time = sysdate()
        WHERE reimid = #{reimid}
          and del_flag != 1
    </update>
</mapper>
</mapper>
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
@@ -38,6 +38,14 @@
    public int countUserRoleByRoleId(Long roleId);
    /**
     * é€šè¿‡userId获取用户角色ID
     *
     * @param userId
     * @return
     */
    public List<Integer> getUserRoleByUserId(Long userId);
    /**
     * æ‰¹é‡æ–°å¢žç”¨æˆ·è§’色信息
     *
     * @param userRoleList ç”¨æˆ·è§’色列表
ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
@@ -12,33 +12,37 @@
    <delete id="deleteUserRoleByUserId" parameterType="Long">
        delete from sys_user_role where user_id=#{userId}
    </delete>
    <select id="countUserRoleByRoleId" resultType="Integer">
        select count(1) from sys_user_role where role_id=#{roleId}
        select count(1) from sys_user_role where role_id=#{roleId}
    </select>
    <select id="getUserRoleByUserId" resultType="Integer">
        select role_id from sys_user_role where user_id=#{userId}
    </select>
    <delete id="deleteUserRole" parameterType="Long">
         delete from sys_user_role where user_id in
         <foreach collection="array" item="userId" open="(" separator="," close=")">
             #{userId}
        </foreach>
        </foreach>
     </delete>
    <insert id="batchUserRole">
        insert into sys_user_role(user_id, role_id) values
        <foreach item="item" index="index" collection="list" separator=",">
            (#{item.userId},#{item.roleId})
        </foreach>
    </insert>
    <delete id="deleteUserRoleInfo" parameterType="SysUserRole">
        delete from sys_user_role where user_id=#{userId} and role_id=#{roleId}
    </delete>
    <delete id="deleteUserRoleInfos">
        delete from sys_user_role where role_id=#{roleId} and user_id in
         <foreach collection="userIds" item="userId" open="(" separator="," close=")">
             #{userId}
            </foreach>
            </foreach>
    </delete>
</mapper>
</mapper>