liusheng
2024-03-19 519886a70d630e3cdd6c0f40f55fcebc6e780dc5
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -1,35 +1,41 @@
package com.ruoyi.project.service.impl;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.tax.TaxtUtils;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.*;
import com.ruoyi.project.service.IServiceFundSharedService;
import com.ruoyi.project.service.IServiceFunddetailService;
import com.ruoyi.project.service.IServiceFunddetailSharedService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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 com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.service.IServiceFundService;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
import com.ruoyi.project.mapper.*;
import com.ruoyi.project.service.*;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 费用申请主Service业务层处理
@@ -67,6 +73,12 @@
    @Autowired
    private IServiceFunddetailService serviceFunddetailService;
    @Autowired
    private VExpertfeeExpertMapper vExpertfeeExpertMapper;
    @Autowired
    private VExpertfeeTotalMapper vExpertfeeTotalMapper;
    /**
     * 查询费用申请主列表(包含删除的)
@@ -82,6 +94,9 @@
        }
        if (serviceFund.getId() != null) {
            wrappers.eq(ServiceFund::getId, serviceFund.getId());
        }
        if (serviceFund.getFundTaxId() != null) {
            wrappers.eq(ServiceFund::getFundTaxId, serviceFund.getFundTaxId());
        }
        if (StringUtils.isNotBlank(serviceFund.getUserno())) {
            wrappers.eq(ServiceFund::getUserno, serviceFund.getUserno());
@@ -103,6 +118,15 @@
        }
        if (serviceFund.getUploadtime() != null) {
            wrappers.eq(ServiceFund::getUploadtime, serviceFund.getUploadtime());
        }
        if (serviceFund.getUploadStates() != null) {
            wrappers.eq(ServiceFund::getUploadStates, serviceFund.getUploadStates());
        }
        if (serviceFund.getFlowlevel() != null) {
            wrappers.eq(ServiceFund::getFlowlevel, serviceFund.getFlowlevel());
        }
        if (serviceFund.getJxrq() != null) {
            wrappers.eq(ServiceFund::getJxrq, serviceFund.getJxrq());
        }
        return this.list(wrappers);
    }
@@ -131,12 +155,23 @@
    }
    @Override
    @Transactional
    @Transactional(rollbackFor = Exception.class)
    public Boolean addFundSharedInfo(Long id) {
        log.info("fund表的id:{}", id);
        //判断一下,share表是否已经存在了
        Map<String, Object> map = new HashMap<>();
        map.put("serfunid", id);
        map.put("del_flag", 0);
        List<ServiceFundShared> serviceFundSharedList = serviceFundSharedMapper.selectByMap(map);
        if (!CollectionUtils.isEmpty(serviceFundSharedList)) {
            return true;
        }
        ServiceFund serviceFund = serviceFundMapper.selectById(id);
        ServiceFundShared serviceFundShared = DtoConversionUtils.sourceToTarget(serviceFund, ServiceFundShared.class);
        serviceFundShared.setSerfunid(serviceFundShared.getId());
        serviceFundShared.setId(null);
        log.info("数据都插进去了吗? {}", serviceFundShared);
        sharedService.save(serviceFundShared);
        //fundId为主表的ID
@@ -153,7 +188,14 @@
            //数据发送给财务
            uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
        }
        boolean result = detailSharedService.saveBatch(serviceFunddetailShareds);
        boolean result = false;
        for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailShareds) {
            if (ObjectUtils.isNotEmpty(serviceFunddetailShared)) {
                result = detailSharedService.save(serviceFunddetailShared);
            } else {
                log.info("serviceFunddetailShared为空了!!!");
            }
        }
        return result;
    }
@@ -647,14 +689,18 @@
    }
    @Override
    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE) {
        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE);
    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS, String donorname) {
        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE, CHECKSTATUS, donorname);
    }
    @Override
    public List<SpFinancialExpensesFundOut> getExpertfeeList(SpSelectExpertfee spSelectExpertfee) {
        return serviceFundMapper.getExpertfeeList(spSelectExpertfee.getPaApplyType(), spSelectExpertfee.getDonorname(), spSelectExpertfee.getPacheckno(), spSelectExpertfee.getCheckstatus(), spSelectExpertfee.getPadepartno(), spSelectExpertfee.getPausername());
    }
    @Override
    public int countItem(Long infoid, Long itemid) {
        List<ServiceFund> serviceFunds = serviceFundMapper.getInfoByInfoId(infoid);
        int count = 0;
        for (ServiceFund s : serviceFunds) {
            long fundid = s.getId();
@@ -666,89 +712,234 @@
    }
    @Override
    @Transactional
    @Transactional(rollbackFor = Exception.class)
    public Long addOrUpdateNew(ServiceFundVO serviceFundVO) {
        Long id = null;
        if (serviceFundVO.getId() == null) {
            save(serviceFundVO);
            id = serviceFundVO.getId();
        } else {
            updateById(serviceFundVO);
            id = serviceFundVO.getId();
        }
        List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            System.out.println("serviceFunddetails为空喽");
            return null;
        }
        // 用于记录税前、税后的总和
        double taxBefore = 0.0;
        double taxAfter = 0.0;
        //将数据保存到fund表
        serviceFundVO.setUploadStates(0);
        id = saveFund(serviceFundVO);
        for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
            serviceFunddetailVO.setFundid(id);
            //將附件转成json
            if (!CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())) {
                serviceFunddetailVO.setAnnexfiles(JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList()));
            }
            if (serviceFunddetailVO.getTaxedamount() != null && serviceFunddetailVO.getAmount() != null && serviceFunddetailVO.getTaxedamount() != 0.0 && serviceFunddetailVO.getAmount() != 0.0) {
                // 税前税后都不为空
        List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
        BigDecimal bigDecimal = new BigDecimal(0.0);
        if (!CollectionUtils.isEmpty(serviceFunddetails)) {
            // 保存详情数据
            for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
                //去掉身份证的首尾空格
                if (StringUtils.isNotEmpty(serviceFunddetailVO.getIdcardno())) {
                    serviceFunddetailVO.setIdcardno(serviceFunddetailVO.getIdcardno().trim());
                }
                if (StringUtils.isEmpty(serviceFunddetailVO.getBankcardno())) {
                    throw new BaseException("请检查银行卡号是否为空,姓名:" + serviceFunddetailVO.getBeneficiaryname());
                }
                serviceFunddetailVO.setFundid(id);
                //將附件转成json
                if (!CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())) {
                    serviceFunddetailVO.setAnnexfiles(JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList()));
                } else {
                    serviceFunddetailVO.setAnnexfiles(null);
                }
                if (!CollectionUtils.isEmpty(serviceFunddetailVO.getInvoicefilesList())) {
                    serviceFunddetailVO.setInvoicefiles(JSON.toJSONString(serviceFunddetailVO.getInvoicefilesList()));
                } else {
                    serviceFunddetailVO.setInvoicefiles(null);
                }
                ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
                if (serviceFunddetailVO.getId() == null) {
                    serviceFunddetailService.save(serviceFunddetail);
                } else {
                    serviceFunddetailService.updateById(serviceFunddetail);
                }
                //计算税金
                if (serviceFunddetail.getAmount() != null) {
                    taxBefore = taxBefore + serviceFunddetail.getAmount();
                }
                if (serviceFunddetail.getTaxedamount() != null) {
                    taxAfter = taxAfter + serviceFunddetail.getTaxedamount();
                }
                continue;
            } else if (serviceFunddetailVO.getTaxedamount() != null && serviceFunddetailVO.getTaxedamount() != 0.0) {
                // 税后求税前,如果是专家费申请  或 伦理专家费申请   才会计算税前税后
                if (StringUtils.isNotEmpty(serviceFundVO.getApplytype()) && serviceFundVO.getApplytype().equals("1") || serviceFundVO.getApplytype().equals("2")) {
                    Double taxationBefore = Double.valueOf(TaxtUtils.getTaxationBefore(BigDecimal.valueOf(serviceFunddetailVO.getTaxedamount())));
                    // 税金
                    String taxation = TaxtUtils.getTaxation(BigDecimal.valueOf(taxationBefore));
                    serviceFunddetailVO.setAmount(Double.valueOf(taxationBefore));
                    serviceFunddetailVO.setTaxamount(Double.parseDouble(taxation));
                }
            } else if (serviceFunddetailVO.getAmount() != null && serviceFunddetailVO.getAmount() != 0.0) {
                // 税前求税后,如果是专家费申请  或 伦理专家费申请   才会计算税前税后
                if (StringUtils.isNotEmpty(serviceFundVO.getApplytype()) && serviceFundVO.getApplytype().equals("1") || serviceFundVO.getApplytype().equals("2")) {
                    double tax = Double.parseDouble(TaxtUtils.getTaxation(BigDecimal.valueOf(serviceFunddetailVO.getAmount())));
                    BigDecimal taxAfterMoney = BigDecimal.valueOf(serviceFunddetailVO.getAmount()).subtract(BigDecimal.valueOf(tax));
                    serviceFunddetailVO.setTaxamount(tax);
                    serviceFunddetailVO.setTaxedamount(taxAfterMoney.doubleValue());
                }
            }
            //根据id判断是新增还是修改
            ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
            if (serviceFunddetailVO.getId() == null) {
                serviceFunddetailService.save(serviceFunddetail);
            } else {
                serviceFunddetailService.updateById(serviceFunddetail);
            }
//            if (serviceFundVO.getApplytype().equals("1") || serviceFundVO.getApplytype().equals("2")) {
            //如果是专家费申请  或 伦理专家费申请   才会计算税前税后
            if (serviceFunddetail.getAmount() != null) {
                taxBefore = taxBefore + serviceFunddetail.getAmount();
            }
            if (serviceFunddetail.getTaxedamount() != null) {
                taxAfter = taxAfter + serviceFunddetail.getTaxedamount();
                bigDecimal = bigDecimal.add(BigDecimal.valueOf(serviceFunddetailVO.getAmount()));
            }
        }
        //将税前、税后金额更新到fund表中
        serviceFundVO.setPretaxcost(taxBefore);
        serviceFundVO.setTaxedcost(taxAfter);
        updateById(serviceFundVO);
        serviceFundVO.setPretaxcost(bigDecimal.doubleValue());
        serviceFundMapper.updateById(serviceFundVO);
        return id;
    }
    @Override
    public Map<String, Long> performance(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
        id = saveFund(serviceFundVO);
        List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            System.out.println("serviceFunddetails为空喽");
            return null;
        }
        //总税前
        Double pretaxcosts = 0.00;
        //总税后
        Double taxedcosts = 0.00;
        for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
            serviceFunddetailVO.setFundid(id);
            ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
            Map<String, Double> performance = serviceFunddetailService.performance(serviceFunddetail);
            if (!performance.isEmpty()) {
                Double amount = performance.get("amount");
                Double taxedamount = performance.get("taxedamount");
                pretaxcosts = pretaxcosts + amount;
                taxedcosts = taxedcosts + taxedamount;
            }
            serviceFundVO.setPretaxcost(pretaxcosts);
            serviceFundVO.setTaxedcost(taxedcosts);
            updateById(serviceFundVO);
        }
        Map map = new HashMap();
        map.put("fundId", id);
        return map;
    }
    @Override
    public Map<String, List<ServiceFunddetailExcel>> totaltax(TotalTaxVO totalTaxVO) {
        if (CollectionUtils.isEmpty(totalTaxVO.getFundids())) {
            throw new BaseException("请勾选之后,再进行合计个税");
        }
        Map<String, List<ServiceFunddetailExcel>> map = new HashMap<>();
        if (totalTaxVO.getIsTaxAfter() == null) {
            //如何为空,默认当没有算过税,进行合计
            totalTaxVO.setIsTaxAfter(0);
        }
        List<ServiceFunddetail> serviceFunddetails = serviceFunddetailMapper.totlaTax(totalTaxVO.getFundids());
        if (CollectionUtils.isEmpty(serviceFunddetails)) {
            throw new BaseException("查询的详情数据为空");
        }
        //用于返回excel
        List<ServiceFunddetailExcel> serviceFunddetailList = new ArrayList<>();
        if (totalTaxVO.getIsTaxAfter() == 1) {
            //通过受益人名称,将税前、税后的值相加
            Map<String, Double> sumAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getAmount)));
            Map<String, Double> sumTaxdAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getTaxedamount)));
            for (String key : sumAmount.keySet()) {
                ServiceFunddetailExcel serviceFunddetailExcel = new ServiceFunddetailExcel();
                serviceFunddetailExcel.setAmount(sumAmount.getOrDefault(key, 0.0));
                serviceFunddetailExcel.setTaxedamount(sumTaxdAmount.getOrDefault(key, 0.0));
                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
                    if (serviceFunddetail2.getBeneficiaryname().equals(key)) {
                        serviceFunddetailExcel.setIdcardno(serviceFunddetail2.getIdcardno());
                        serviceFunddetailExcel.setBankcardno(serviceFunddetail2.getBankcardno());
                        serviceFunddetailExcel.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        serviceFunddetailExcel.setDepositbank(serviceFunddetail2.getDepositbank());
                        serviceFunddetailExcel.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        serviceFunddetailExcel.setDonorname(serviceFunddetail2.getDonorname());
                        serviceFunddetailExcel.setPhone(serviceFunddetail2.getPhone());
                        break;
                    }
                }
                serviceFunddetailList.add(serviceFunddetailExcel);
            }
            //返回算过税之后的,合计
            map.put("合计个税(税后)", serviceFunddetailList);
            return map;
        } else {
            a:
            for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
                ServiceFunddetailExcel sfeBefore = new ServiceFunddetailExcel();
                ServiceFunddetailExcel sfeAfter = new ServiceFunddetailExcel();
                for (ServiceFunddetailExcel serviceFunddetailExcel : serviceFunddetailList) {
                    //判断一下,该受益人是否已经计算过,已经计算过了,就不算了
                    if (serviceFunddetail.getBeneficiaryname().trim().equals(serviceFunddetailExcel.getBeneficiaryname().trim())) {
                        continue a;
                    }
                }
                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
                    if (StringUtils.isEmpty(serviceFunddetail2.getServicesscopename())) {
                        ServiceFund serviceFund = null;
                        if (serviceFunddetail2.getFundid() == null) {
                            serviceFund = serviceFundMapper.selectById(serviceFunddetail2.getFundid());
                        }
                        throw new BaseException("服务说明为空,请检查后再计算,捐献者为 :" + serviceFund.getDonorname());
                    }
                    if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && !(serviceFunddetail2.getServicesscopename().equals("税后"))) {
                        //累计税前
                        sfeBefore.setIdcardno(serviceFunddetail2.getIdcardno());
                        sfeBefore.setBankcardno(serviceFunddetail2.getBankcardno());
                        sfeBefore.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        sfeBefore.setDepositbank(serviceFunddetail2.getDepositbank());
                        sfeBefore.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        sfeBefore.setDonorname(serviceFunddetail2.getDonorname());
                        sfeBefore.setPhone(serviceFunddetail2.getPhone());
                        if (sfeBefore.getAmount() == null) {
                            sfeBefore.setAmount(serviceFunddetail2.getAmount());
                        } else {
                            sfeBefore.setAmount(sfeBefore.getAmount() + serviceFunddetail2.getAmount());
                        }
                        sfeBefore.setTaxedamount(null);
                    } else if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && serviceFunddetail2.getServicesscopename().equals("税后")) {
                        //累计税后
                        sfeAfter.setIdcardno(serviceFunddetail2.getIdcardno());
                        sfeAfter.setBankcardno(serviceFunddetail2.getBankcardno());
                        sfeAfter.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
                        sfeAfter.setDepositbank(serviceFunddetail2.getDepositbank());
                        sfeAfter.setBranchbankname(serviceFunddetail2.getBranchbankname());
                        sfeAfter.setDonorname(serviceFunddetail2.getDonorname());
                        sfeAfter.setPhone(serviceFunddetail2.getPhone());
                        sfeAfter.setAmount(null);
                        if (sfeAfter.getTaxedamount() == null) {
                            sfeAfter.setTaxedamount(serviceFunddetail2.getTaxedamount());
                        } else {
                            sfeAfter.setTaxedamount(sfeAfter.getTaxedamount() + serviceFunddetail2.getTaxedamount());
                        }
                    }
                }
                //将计算好的税前总值、税后总值,放到List中
                if (ObjectUtils.isNotEmpty(sfeBefore.getBeneficiaryname())) serviceFunddetailList.add(sfeBefore);
                if (ObjectUtils.isNotEmpty(sfeAfter.getBeneficiaryname())) serviceFunddetailList.add(sfeAfter);
            }
            //返回算税之前的,合计
            map.put("合计个税(税前)", serviceFunddetailList);
            return map;
        }
    }
    @Override
    public Map<String, Object> exportFeeSum(Integer faxId) {
        List<VExpertfeeTotal> list = vExpertfeeTotalMapper.selectVExpertfeeTotalListByTaxId(faxId);
        ExcelUtil<VExpertfeeTotal> util = new ExcelUtil<VExpertfeeTotal>(VExpertfeeTotal.class);
        AjaxResult ajaxResult = util.exportExcel(list, "vExpertfeeTotal");
        String filePath = RuoYiConfig.getDownloadPath() + ajaxResult.get("msg");
        List<VExpertfeeExpert> list2 = vExpertfeeExpertMapper.selectVExpertfeeExpertListByFaxId(faxId);
        ExcelUtil<VExpertfeeExpert> util2 = new ExcelUtil<VExpertfeeExpert>(VExpertfeeExpert.class);
        AjaxResult ajaxResult1 = util2.exportExcel(list2, "vExpertfeeExpert");
        List<String> list1 = new ArrayList<>();
        list1.add(ajaxResult.get("msg").toString());
        list1.add(ajaxResult1.get("msg").toString());
        String name = "专家费汇总单" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx";
        mergeExcel(list1, RuoYiConfig.getDownloadPath() + name);
        for (String path : list1) {
            new File(RuoYiConfig.getDownloadPath() + path).delete();
        }
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name);
        map.put("downloadName", name);
        return map;
    }
    int uploadOAFileAndUpdateDb(ServiceFunddetailShared remShare) {
        //上传OA文件
@@ -773,42 +964,66 @@
        String filePath = RuoYiConfig.getUploadPath();
        String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=" + strRes;
        List<RbDetailFile> parseArray2 = new ArrayList<>();
        List<RbDetailFile> invoicefilesList = new ArrayList<>();
        //普通附件
        List<RbDetailFile> parseArray = JSON.parseArray(remShare.getAnnexfiles(), RbDetailFile.class);
        for (int i = 0; i < parseArray.size(); i++) {
            RbDetailFile rbDetailFile = parseArray.get(i);
            log.info("filePath的修改:{}", filePath);
            String url = rbDetailFile.getUrl();
            //file用的是绝对位置
            String substring = url.substring(url.indexOf("/profile/upload") + "/profile/upload".length());
//            String strFile = rbDetailFile.getUrl().replace(filePath, "/profile/upload");
            File filetest = new File(filePath + substring);
        //发票附件
        List<RbDetailFile> invoicefilesArray = JSON.parseArray(remShare.getInvoicefiles(), RbDetailFile.class);
        log.info("parseArray的值 : {}, invoicefilesArray的值 : {},", parseArray, invoicefilesArray);
            try {
                String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
                log.info("第三方传回的数据: {}", struploadResult);
                if (StringUtils.isEmpty(struploadResult)) {
                    log.info("HttpClientKit.sendPostWithFile 请求为空了 filetest:{},  strFUrl:{} ", filetest, strFUrl);
                    return 0;
                }
                //获取fileid
                JSONObject jsonR = JSONObject.parseObject(struploadResult);
                JSONArray jsonArr = jsonR.getJSONArray("atts");
                log.info("第三方传回的数据获取的atts : {}", jsonArr);
                for (int j = 0; j < jsonArr.size(); j++) {
                    JSONObject jsonRet = jsonArr.getJSONObject(j);
                    rbDetailFile.setFileid(jsonRet.get("fileUrl").toString());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            parseArray2.add(rbDetailFile);
        }
        remShare.setAnnexfiles(JSON.toJSONString(parseArray2));
        log.info("ServiceReimbursementdetailShared 是否加上了fileid : {}", remShare);
        //普通附件
        uploadFile(filePath, strFUrl, parseArray2, parseArray, remShare, "1");
        //发票附件
        uploadFile(filePath, strFUrl, invoicefilesList, invoicefilesArray, remShare, "2");
        return 0;
    }
    private Integer uploadFile(String filePath, String strFUrl, List<RbDetailFile> parseArray2, List<RbDetailFile> parseArray, ServiceFunddetailShared remShare, String flag) {
        if (!CollectionUtils.isEmpty(parseArray)) {
            for (int i = 0; i < parseArray.size(); i++) {
                RbDetailFile rbDetailFile = parseArray.get(i);
                log.info("filePath的修改:{}", filePath);
                String url = rbDetailFile.getUrl();
                //file用的是绝对位置
                String substring = url.substring(url.indexOf("/profile/upload") + "/profile/upload".length());
//            String strFile = rbDetailFile.getUrl().replace(filePath, "/profile/upload");
                System.out.println("fund服务的filePath + substring: " + filePath + substring);
                File filetest = new File(filePath + substring);
                try {
                    String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
                    log.info("第三方传回的数据: {}", struploadResult);
                    if (StringUtils.isEmpty(struploadResult)) {
                        log.error("HttpClientKit.sendPostWithFile 请求为空了 filetest:{},  strFUrl:{} ", filetest, strFUrl);
                        return 0;
                    }
                    //获取fileid
                    JSONObject jsonR = JSONObject.parseObject(struploadResult);
                    JSONArray jsonArr = jsonR.getJSONArray("atts");
                    log.info("第三方传回的数据获取的atts : {}", jsonArr);
                    for (int j = 0; j < jsonArr.size(); j++) {
                        JSONObject jsonRet = jsonArr.getJSONObject(j);
                        rbDetailFile.setFileid(jsonRet.get("fileUrl").toString());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                parseArray2.add(rbDetailFile);
            }
            if (flag.equals("1")) {
                //如果flag为1,则是普通
                remShare.setAnnexfiles(JSON.toJSONString(parseArray2));
            } else if (flag.equals("2")) {
                //如果flag为2,则是发票
                remShare.setInvoicefiles(JSON.toJSONString(parseArray2));
            }
            log.info("ServiceReimbursementdetailShared 是否加上了fileid : {}", remShare);
        }
        return 0;
    }
//    int uploadOAFileAndUpdateDb(ServiceFundShared remShare) {
//        //上传OA文件
@@ -902,4 +1117,60 @@
//        return 0;
//    }
    public long saveFund(ServiceFundVO serviceFundVO) {
        Long id = null;
        //将数据保存到fund表
        if (ObjectUtils.isNotEmpty(serviceFundVO) && serviceFundVO.getId() == null) {
            serviceFundVO.setCheckstatus(serviceFundVO.getCheckstatus() == null ? 1 : 2);
            save(serviceFundVO);
            id = serviceFundVO.getId();
        } else {
            updateById(serviceFundVO);
            id = serviceFundVO.getId();
        }
        return id;
    }
    public void mergeExcel(List<String> files, String outputFile) {
        try {
            Workbook resultWorkbook = new XSSFWorkbook();
            for (String file : files) {
                InputStream is1 = new FileInputStream(RuoYiConfig.getDownloadPath() + file);
                Workbook workbook1 = new XSSFWorkbook(is1);
                Sheet sheet1 = workbook1.getSheetAt(0);
                // 复制第一个文件的Sheet
                Sheet newSheet1 = resultWorkbook.createSheet(file.substring(0, file.indexOf(".")));
                for (Row row : sheet1) {
                    Row newRow = newSheet1.createRow(row.getRowNum());
                    int columns = row.getLastCellNum();
                    for (int i = 0; i < columns; i++) {
                        newSheet1.setColumnWidth(i, 5000);
                        Cell cell = row.getCell(i);
                        Cell newCell = newRow.createCell(cell.getColumnIndex());
                        newCell.setCellValue(cell.getStringCellValue());
                        // 创建单元格样式
                        CellStyle style = resultWorkbook.createCellStyle();
                        style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
                        style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
                        if (row.getRowNum() == 0) {
                            // 设置第一行背景色
                            style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
                            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                        }
                        newCell.setCellStyle(style);
                    }
                }
            }
            FileOutputStream out = new FileOutputStream(outputFile);
            resultWorkbook.write(out);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Transactional(rollbackFor = Exception.class)
    public Boolean updateFundTaxIdById(Long id, Long fundTaxId) {
        return serviceFundMapper.updateFundTaxIdById(id, fundTaxId);
    }
}