liusheng
2025-08-12 65314b14210a175bae095649584614973b3619df
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);
    }
}