liusheng
2024-02-29 90c52bfb0f6f1092917277c6aeb0b00e428d0c47
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFundController.java
@@ -1,55 +1,80 @@
package com.ruoyi.web.controller.project;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.NotRepeatCommit;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.tax.TaxtUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
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.ServiceFunddetailMapper;
import com.ruoyi.project.service.*;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysPostService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Options;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
import static com.ruoyi.web.controller.project.ServiceReimbursementController.convert;
/**
 * 费用申请主Controller
 *
 *
 * @author ruoyi
 * @date 2022-01-24
 */
@Slf4j
@Api("费用申请主")
@RestController
@RequestMapping("/project/fund")
public class ServiceFundController extends BaseController
{
public class ServiceFundController extends BaseController {
    private static Configuration configuration = null;
    @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
@@ -64,8 +89,22 @@
    private IServiceSystemmessageService ServiceSystemmessage;
    @Autowired
    private IServiceFundSharedService fundServiceShare;
    private IBaseOnlyvalueService baseOnlyvalueService;
    @Autowired
    private IServiceExternalpersonService externalpersonService;
    @Autowired
    private ISysPostService postService;
    @Autowired
    private DataSourceTransactionManager transactionManager;
    @Autowired
    private TransactionDefinition transactionDefinition;
    @Autowired
    private ISysDeptService sysDeptService;
    public ServiceFundController() {
        configuration = new Configuration();
@@ -78,16 +117,17 @@
    @ApiOperation("查询费用申请主列表")
    //@PreAuthorize("@ss.hasPermi('project:fund:list')")
    @GetMapping("/list")
    public TableDataInfo list(ServiceFund serviceFund)
    {
    public TableDataInfo list(ServiceFund serviceFund) {
        startPage();
        //List<ServiceFund> list = serviceFundService.queryList(serviceFund);
        SysUser user = SecurityUtils.getLoginUser().getUser();
        serviceFund.setUsername(user.getNickName());
        List<ServiceFund> list = serviceFundService.selectServiceFundList(serviceFund);
        return getDataTable(list);
    }
    @GetMapping("/listnew")
    public TableDataInfo listnew(FundVO fundVO){
    public TableDataInfo listnew(FundVO fundVO) {
        startPage();
        List<FundVO> list = serviceFundService.selectVOList(fundVO);
        return getDataTable(list);
@@ -99,67 +139,82 @@
    @ApiOperation("根据权限显示审核列表")
    @Log(title = "根据权限显示审核列表", businessType = BusinessType.OTHER)
    @GetMapping("/listbypower")
    public TableDataInfo getListBypower(SpFinancialExpensesIn spFinancialExpensesIn)
    {
    public TableDataInfo getListBypower(SpFinancialExpensesIn spFinancialExpensesIn) {
        LoginUser loginUser = getLoginUser();
        String APPLICANT=spFinancialExpensesIn.getAPPLICANT();
        String APPLICATIONBEGTIME=spFinancialExpensesIn.getAPPLICATIONBEGTIME();
        String APPLICATIONENDTIME=spFinancialExpensesIn.getAPPLICATIONENDTIME();
        Integer CHECKFLAG=spFinancialExpensesIn.getCHECKFLAG();
        Integer APPLYTYPE=spFinancialExpensesIn.getAPPLYTYPE();
        Integer pageNum=spFinancialExpensesIn.getPageNum();
        Integer pageSize=spFinancialExpensesIn.getPageSize();
        String APPLICANT = spFinancialExpensesIn.getAPPLICANT();
        String APPLICATIONBEGTIME = spFinancialExpensesIn.getAPPLICATIONBEGTIME();
        String APPLICATIONENDTIME = spFinancialExpensesIn.getAPPLICATIONENDTIME();
        Integer CHECKFLAG = spFinancialExpensesIn.getCHECKFLAG();
        Integer APPLYTYPE = spFinancialExpensesIn.getAPPLYTYPE();
        Integer pageNum = spFinancialExpensesIn.getPageNum();
        Integer pageSize = spFinancialExpensesIn.getPageSize();
        Integer checkstatus = spFinancialExpensesIn.getCheckstatus();
        if(pageNum==null)
        {
            pageNum=1;
        String donorname = spFinancialExpensesIn.getDonorname();
        if (StringUtils.isEmpty(donorname)) {
            donorname = null;
        }
        if (pageNum == null) {
            pageNum = 1;
        }
        if(pageSize==null)
        {
            pageSize=10;
        if (pageSize == null) {
            pageSize = 10;
        }
        if(APPLICANT==null)
        {
            APPLICANT="";
        if (APPLICANT == null) {
            APPLICANT = "";
        }
        if(APPLICATIONBEGTIME==null)
        {
            APPLICATIONBEGTIME="";
        if (APPLICATIONBEGTIME == null) {
            APPLICATIONBEGTIME = "";
        }
        if(APPLICATIONENDTIME==null)
        {
            APPLICATIONENDTIME="";
        if (APPLICATIONENDTIME == null) {
            APPLICATIONENDTIME = "";
        }
        //startPage();
        List<SpFinancialExpensesFundOut> list = serviceFundService.getListBypower(loginUser.getUsername(),2,APPLICANT,APPLICATIONBEGTIME,APPLICATIONENDTIME,loginUser.getDeptId().toString(),CHECKFLAG,APPLYTYPE);
        //return getDataTable(list);
        return getCustomDataTable(list,pageNum,pageSize);
        List<SpFinancialExpensesFundOut> list = serviceFundService.getListBypower(loginUser.getUsername(), 2, APPLICANT, APPLICATIONBEGTIME, APPLICATIONENDTIME, loginUser.getDeptId().toString(), CHECKFLAG, APPLYTYPE, checkstatus, donorname);
        //通过捐献者过滤
        if (StringUtils.isNotEmpty(spFinancialExpensesIn.getDonorname())) {
            list = list.stream().filter(obj -> obj.getDonorname().contains(spFinancialExpensesIn.getDonorname())).collect(Collectors.toList());
        }
        //通过金额过滤
        if (spFinancialExpensesIn.getMoney() != null) {
            list = list.stream().filter(reimbursementOut -> new BigDecimal(reimbursementOut.getPretaxcost()).compareTo(new BigDecimal(spFinancialExpensesIn.getMoney())) == 0).collect(Collectors.toList());
        }
        Collections.sort(list, new Comparator<SpFinancialExpensesFundOut>() {
            @Override
            public int compare(SpFinancialExpensesFundOut o1, SpFinancialExpensesFundOut o2) {
                return o1.getCreateTime().compareTo(o2.getCreateTime());
            }
        });
        return getCustomDataTable(list, pageNum, pageSize);
    }
    @ApiOperation("查询费用申请主列表")
    //@PreAuthorize("@ss.hasPermi('project:fund:list')")
    @GetMapping(value = "/getInfo/{infoid}")
    public AjaxResult getInfoByInfoId(@PathVariable("infoid") Long infoid)
    {
    public AjaxResult getInfoByInfoId(@PathVariable("infoid") Long infoid) {
        return AjaxResult.success(serviceFundService.getInfoByInfoId(infoid));
    }
    @GetMapping("/getFundId/{infoid}")
    public AjaxResult getFundId(@PathVariable("infoid") Long infoid){
    public AjaxResult getFundId(@PathVariable("infoid") Long infoid) {
        return AjaxResult.success(serviceFundService.getFundId(infoid));
    }
    @GetMapping("/getFundDetail/{id}")
    public AjaxResult getFundDetail(@PathVariable("id") Long id){
        return AjaxResult.success(serviceFundService.getFundDetail(id));
    }
//    @GetMapping("/addFundSharedInfo/{id}")
//    public AjaxResult addFundSharedInfo(@PathVariable("id") Long id) {
//        return AjaxResult.success(serviceFundService.addFundSharedInfo(id));
//    }
    /**
     * 导出费用申请主列表
@@ -168,13 +223,11 @@
    //@PreAuthorize("@ss.hasPermi('project:fund:export')")
    @Log(title = "费用申请主", businessType = BusinessType.EXPORT)
    @GetMapping("/export")
    public AjaxResult export(ServiceFund serviceFund)
    {
    public AjaxResult export(ServiceFund serviceFund) {
        List<ServiceFund> list = serviceFundService.queryList(serviceFund);
        ExcelUtil<ServiceFund> util = new ExcelUtil<ServiceFund>(ServiceFund.class);
        return util.exportExcel(list, "费用申请主数据");
    }
    /**
@@ -183,8 +236,7 @@
    @ApiOperation("获取费用申请主详细信息")
    //@PreAuthorize("@ss.hasPermi('project:fund:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return AjaxResult.success(serviceFundService.getById(id));
    }
@@ -194,405 +246,488 @@
    @ApiOperation("新增费用申请主")
    //@PreAuthorize("@ss.hasPermi('project:fund:add')")
    @Log(title = "费用申请主", businessType = BusinessType.INSERT)
    @PostMapping
    @PostMapping("/add")
    @RepeatSubmit
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public AjaxResult add(@RequestBody ServiceFund serviceFund)
    {
    public AjaxResult add(@RequestBody ServiceFund serviceFund) {
        boolean b = serviceFundService.save(serviceFund);
        Long id = serviceFund.getId();
        if(b)
        {
            addReiSharedDatd(serviceFund,1);
        }
//        if (b) {
//            addReiSharedDatd(serviceFund, 1);
//        }
        return AjaxResult.success(id);
    }
    public  int addReiSharedDatd(ServiceFund serviceFund,int nType)
    {
        //remShare = ;
        ServiceFundShared remShare = null;
        if(nType == 1)
        {
            remShare = new ServiceFundShared();
            remShare.setSerfunid(serviceFund.getId());
        }
        else //modify
        {
            List<ServiceFundShared> remlist = fundServiceShare.getFundShareInfoById(serviceFund.getId());
            if(remlist!=null)
                remShare =remlist.get(0);
        }
        remShare.setDonorno(serviceFund.getDonorno());
        remShare.setDonorname(serviceFund.getDonorname());
        remShare.setUserno(serviceFund.getUserno());
        remShare.setUsername(serviceFund.getUsername());
        remShare.setUnitname(serviceFund.getUnitname());
        remShare.setUnitno(serviceFund.getUnitno());
        remShare.setUnituserno(serviceFund.getUnituserno());
        remShare.setPhone(serviceFund.getPhone());
        remShare.setAnnexbankcard(serviceFund.getAnnexbankcard());
        remShare.setAnnexregistform(serviceFund.getAnnexregistform());
        Double nTemp= serviceFund.getPretaxcost();
        if( nTemp == null) nTemp = 0d;
        remShare.setPretaxcost(BigDecimal.valueOf(nTemp));
        //remShare.setAnnexfiles(serviceReimbursement.getAnnexfiles());
        // remShare.setAmountrequested(BigDecimal.valueOf(serviceReimbursement.getAmountrequested()));
        nTemp= serviceFund.getTaxedcost();
        if( nTemp == null) nTemp = 0d;
        remShare.setTaxedcost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getTotalcost();
        if( nTemp == null) nTemp = 0d;
        remShare.setTotalcost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getExpertcost();
        if(nTemp == null) nTemp = 0.0;
        remShare.setExpertcost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getEthicscost();
        if(nTemp == null) nTemp = 0.0;
        remShare.setEthicscost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getMedicalcost();
        if(nTemp == null) nTemp = 0.0;
        remShare.setMedicalcost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getFamilycost();
        if(nTemp == null) nTemp = 0.0;
        remShare.setFamilycost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getAftercarecost();
        if(nTemp == null) nTemp = 0.0;
        remShare.setAftercarecost(BigDecimal.valueOf(nTemp));
        nTemp = serviceFund.getAmountrequested();
        if(nTemp == null) nTemp = 0.0;
        remShare.setAmountrequested(BigDecimal.valueOf(nTemp));
//    public int addReiSharedDatd(ServiceFund serviceFund, int nType) {
//        //remShare = ;
//        ServiceFundShared remShare = null;
//        if (nType == 1) {
//            remShare = new ServiceFundShared();
//            remShare.setSerfunid(serviceFund.getId());
//        } else //modify
//        {
//            List<ServiceFundShared> remlist = fundServiceShare.getFundShareInfoById(serviceFund.getId());
//            if (remlist != null) remShare = remlist.get(0);
//        }
//
//        remShare.setDonorno(serviceFund.getDonorno());
//        remShare.setDonorname(serviceFund.getDonorname());
//        remShare.setUserno(serviceFund.getUserno());
//        remShare.setUsername(serviceFund.getUsername());
//        remShare.setUnitname(serviceFund.getUnitname());
//        remShare.setUnitno(serviceFund.getUnitno());
//        remShare.setUnituserno(serviceFund.getUnituserno());
//        remShare.setPhone(serviceFund.getPhone());
//        remShare.setAnnexbankcard(serviceFund.getAnnexbankcard());
//        remShare.setAnnexregistform(serviceFund.getAnnexregistform());
//        Double nTemp = serviceFund.getPretaxcost();
//        if (nTemp == null) nTemp = 0d;
//        remShare.setPretaxcost(BigDecimal.valueOf(nTemp));
//        //remShare.setAnnexfiles(serviceReimbursement.getAnnexfiles());
//        // remShare.setAmountrequested(BigDecimal.valueOf(serviceReimbursement.getAmountrequested()));
//
//        nTemp = serviceFund.getTaxedcost();
//        if (nTemp == null) nTemp = 0d;
//        remShare.setTaxedcost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getTotalcost();
//        if (nTemp == null) nTemp = 0d;
//        remShare.setTotalcost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getExpertcost();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setExpertcost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getEthicscost();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setEthicscost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getMedicalcost();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setMedicalcost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getFamilycost();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setFamilycost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getAftercarecost();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setAftercarecost(BigDecimal.valueOf(nTemp));
//
//        nTemp = serviceFund.getAmountrequested();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setAmountrequested(BigDecimal.valueOf(nTemp));
//
//
//        remShare.setApplytype(serviceFund.getApplytype());
//
//        nTemp = serviceFund.getPrepaidamount();
//        if (nTemp == null) nTemp = 0.0;
//        remShare.setPrepaidamount(BigDecimal.valueOf(nTemp));
//
//        remShare.setInvoicecount(serviceFund.getInvoicecount());
//        remShare.setAttachcount(serviceFund.getAttachcount());
//        remShare.setManagerno(serviceFund.getManagerno());
//        remShare.setManagername(serviceFund.getManagername());
//        remShare.setDeptmentno(serviceFund.getDeptmentno());
//        remShare.setDeptmentname(serviceFund.getDeptmentname());
//        remShare.setOpochecker(serviceFund.getOpochecker());
//        remShare.setFinvicepresident(serviceFund.getFinvicepresident());
//        remShare.setBusvicepresident(serviceFund.getBusvicepresident());
//        remShare.setOfficedirector(serviceFund.getOfficedirector());
//        remShare.setFinancedirector(serviceFund.getFinancedirector());
//        remShare.setFinancechecher(serviceFund.getFinancechecher());
//        //remShare.setIsdistribute(serviceFund.getIsdistribute());
//        remShare.setRecordstatus(serviceFund.getRecordstatus());
//        remShare.setUploadflag(serviceFund.getUploadflag());
//        remShare.setUploadtime(serviceFund.getUploadtime());
//        long nLevel = serviceFund.getFlowlevel();
//        remShare.setFlowlevel(nLevel);
//
//        remShare.setInfoid(serviceFund.getInfoid());
//
//        //remShare.setOaid(serviceReimbursement.getOaid());
//        //remShare.setDonorno(serviceReimbursement.getDonorno());
//
//        boolean bRet = false;
//        if (nType == 1) {
//            bRet = fundServiceShare.save(remShare);
//        } else {
//            //remShare.setId(serviceReimbursement.);
//            bRet = fundServiceShare.updateById(remShare);
//        }
//
//        //if(!bRet) return -1;
//        String strMutfileUrl = remShare.getAnnexbankcard();
//        //有附件时才调用第三方进行上传
//        if (strMutfileUrl == null) return 0;
//        if (strMutfileUrl.isEmpty()) return 0;
//
//        try {
//            uploadOAFileAndUpdateDb(remShare);
//        } catch (Exception e) {
//            logger.error("调用第三方接口出错!");
//            e.printStackTrace();
//        }
//
//        //此处保存成功后要上传OA,保存返回值
//
//        return 0;
//    }
        remShare.setApplytype(serviceFund.getApplytype());
        nTemp = serviceFund.getPrepaidamount();
        if(nTemp == null) nTemp = 0.0;
        remShare.setPrepaidamount(BigDecimal.valueOf(nTemp));
        remShare.setInvoicecount(serviceFund.getInvoicecount());
        remShare.setAttachcount(serviceFund.getAttachcount());
        remShare.setManagerno(serviceFund.getManagerno());
        remShare.setManagername(serviceFund.getManagername());
        remShare.setDeptmentno(serviceFund.getDeptmentno());
        remShare.setDeptmentname(serviceFund.getDeptmentname());
        remShare.setOpochecker(serviceFund.getOpochecker());
        remShare.setFinvicepresident(serviceFund.getFinvicepresident());
        remShare.setBusvicepresident(serviceFund.getBusvicepresident());
        remShare.setOfficedirector(serviceFund.getOfficedirector());
        remShare.setFinancedirector(serviceFund.getFinancedirector());
        remShare.setFinancechecher(serviceFund.getFinancechecher());
        //remShare.setIsdistribute(serviceFund.getIsdistribute());
        remShare.setRecordstatus(serviceFund.getRecordstatus());
        remShare.setUploadflag(serviceFund.getUploadflag());
        remShare.setUploadtime(serviceFund.getUploadtime());
        long nLevel = serviceFund.getFlowlevel();
        remShare.setFlowlevel(nLevel);
        remShare.setInfoid(serviceFund.getInfoid());
        //remShare.setOaid(serviceReimbursement.getOaid());
        //remShare.setDonorno(serviceReimbursement.getDonorno());
        boolean bRet = false;
        if(nType==1)
        {
            bRet = fundServiceShare.save(remShare);
        }
        else
        {
            //remShare.setId(serviceReimbursement.);
            bRet = fundServiceShare.updateById(remShare);
        }
        //if(!bRet) return -1;
        String strMutfileUrl = remShare.getAnnexbankcard();
        //有附件时才调用第三方进行上传
        if(strMutfileUrl == null) return 0;
        if(strMutfileUrl.isEmpty()) return 0;
        try
        {
            uploadOAFileAndUpdateDb(remShare);
        }
        catch (Exception e)
        {
            logger.error("调用第三方接口出错!");
            e.printStackTrace();
        }
        //此处保存成功后要上传OA,保存返回值
        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 = fundServiceShare.updateById(remShare);
        if(!bRet) return -1;
        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 = fundServiceShare.updateById(remShare);
//        if (!bRet) return -1;
//
//        return 0;
//    }
    /**
     * 新增费用汇总
     */
    @ApiOperation("新增费用汇总")
    @Log(title = "新增费用汇总", businessType = BusinessType.INSERT)
    @PostMapping("/addnew")
    @PostMapping("/addOrUpdateNew")
    @RepeatSubmit
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public AjaxResult addnew(@RequestBody ServiceFundVO serviceFundVO)
    {
        boolean b = serviceFundService.save(serviceFundVO);
        Long id = serviceFundVO.getId();
        if(b)
        {
            addReiSharedDatd(serviceFundVO,1);
        }
        List<ServiceFunddetail> serviceFunddetails=serviceFundVO.getServiceFunddetails();
        serviceFunddetails.forEach(item->item.setFundid(id));
        serviceFunddetailService.saveBatch(serviceFunddetails);
        return AjaxResult.success(id);
    public AjaxResult addOrUpdateNew(@RequestBody ServiceFundVO serviceFundVO) {
        return AjaxResult.success(serviceFundService.addOrUpdateNew(serviceFundVO));
    }
    /**
     * 审核费用
     */
    @ApiOperation("审核费用")
    @Log(title = "审核费用", businessType = BusinessType.OTHER)
    @RepeatSubmit
//    @Log(title = "审核费用", businessType = BusinessType.OTHER)
    @PostMapping("/checkfund")
    public AjaxResult checkFund(@RequestBody 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());
                List<ServiceFundflowrule> serviceFundflowrules= serviceFundflowruleService.queryList(serviceFundflowrule);
    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 == 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.get(0).getFlowlevel() - 1 != serviceFund.getFlowlevel()) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员与此记录的审核级别不符");
            }
                if(serviceFundflowrules!=null && serviceFundflowrules.stream().count()>0)
                {
                    TotalLevel=serviceFundflowrules.get(0).getTotallevel();
                }
            if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
                TotalLevel = serviceFundflowrules.get(0).getTotallevel();
            }
                Integer CheckFlag=0;
                Integer RecordStatus=serviceFund.getRecordstatus();
                Integer FlowLevel=serviceFund.getFlowlevel();
                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;
                }
                else
                {
                    CheckFlag=2;
                    RecordStatus = (FlowLevel+1)*2 - 1;
                    FlowLevel=(FlowLevel-1);
                    if(FlowLevel<0)
                    {
                        FlowLevel=0;
            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;
                serviceFund.setRecordstatus(RecordStatus);
                serviceFund.setFlowlevel(FlowLevel);
                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 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;
                    }
                }
            }
            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());
                serviceFundflow.setFlowlevel(OriginalFlowLevel+1);
                serviceFundflowService.save(serviceFundflow);
                serviceFundService.updateById(serviceFund);
                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.setIsread(0);
                serviceSystemmessage.setMessagetype(1);
                serviceSystemmessage.setRelevantno(serviceFund.getId());
                if(CheckFlag==1)
                {
                    //通过
                    serviceSystemmessage.setMessagetitle(""+(OriginalFlowLevel+1)+"级审核通过");
                    serviceSystemmessage.setMessagecontent("您"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime())+"提交的关于捐献案例【"+serviceFund.getDonorname()+"】的费用申请已通过"+(OriginalFlowLevel+1)+"级审核");
                }
                else
                {
                    //驳回
                    serviceSystemmessage.setMessagetitle(""+(OriginalFlowLevel+1)+"级审核驳回");
                    serviceSystemmessage.setMessagecontent("您"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime())+"提交的关于捐献案例【"+serviceFund.getDonorname()+"】的费用申请已被"+(OriginalFlowLevel+1)+"级审核驳回,原因为"+checkFundVO.getFlowcontent()+"");
                }
                ServiceSystemmessage.save(serviceSystemmessage);
                return AjaxResult.success();
            } else {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
            }
            else
            {
                return AjaxResult.error(HttpStatus.NO_CONTENT,"费用编号不正确");
            serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
            Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
            log.info("sserviceFund保存的的值是-------- :{}", aBoolean);
            //001审批通过之后,就需要把“办公室主任”的名字填上
            if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("001")) {
                serviceFund.setOfficedirector(user.getNickName());
                serviceFund.setUploadStates(2);
            }
            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.setIsread(0);
            serviceSystemmessage.setMessagetype(1);
            serviceSystemmessage.setRelevantno(serviceFund.getId());
            if (CheckFlag == 1) {
                //通过
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的关于捐献案例【" + serviceFund.getDonorname() + "】的费用申请已通过" + (OriginalFlowLevel + 1) + "级审核");
//                if (TotalLevel == OriginalFlowLevel + 1) {
//                    serviceFundService.addFundSharedInfo(checkFundVO.getFundid());
//                }
            } else {
                //驳回
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "提交的关于捐献案例【" + serviceFund.getDonorname() + "】的费用申请已被" + (OriginalFlowLevel + 1) + "级审核驳回,原因为" + checkFundVO.getFlowcontent() + "");
            }
            ServiceSystemmessage.save(serviceSystemmessage);
            return AjaxResult.success();
        } else {
            return AjaxResult.error(HttpStatus.NO_CONTENT, "费用编号不正确");
        }
    }
    /**
     * 修改费用申请主
     * 费用上报
     */
    @ApiOperation("修改费用申请主")
    //@PreAuthorize("@ss.hasPermi('project:fund:edit')")
    @Log(title = "费用申请主", businessType = BusinessType.UPDATE)
    @PutMapping
    @RepeatSubmit
    public AjaxResult edit(@RequestBody ServiceFund serviceFund)
    {
        boolean bret = serviceFundService.updateById(serviceFund);
        if(bret)
        {
            addReiSharedDatd(serviceFund,2);
    @ApiOperation("费用上报")
    @Log(title = "费用上报", businessType = BusinessType.UPDATE)
    @PostMapping("/fundEdit")
    @RepeatSubmit
    public AjaxResult fundEdit(@RequestBody ServiceFundVO serviceFundVO) {
        ServiceFund serviceFund = DtoConversionUtils.sourceToTarget(serviceFundVO, ServiceFund.class);
        log.info("修改费用申请入参:{}", serviceFund);
        List<ServiceFund> infoByInfoIdList = serviceFundService.queryInfoById(serviceFund);
        log.info("修改费用申请,通过入参查询 serviceFundService.queryInfoById数据为空,入参:{}", infoByInfoIdList.size());
        if (CollectionUtils.isEmpty(infoByInfoIdList)) {
            Long id = serviceFundService.addOrUpdateNew(serviceFundVO);
            serviceFund.setId(id);
        }
        return toAjax(bret);
        Long flowLavel = null;
        LoginUser loginUser = getLoginUser();
        //查询必审人
        ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
        serviceFundflowrule.setApplytype(serviceFund.getApplytype());
        serviceFundflowrule.setMustAudite(1);
        List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
        log.info("fund必审人的等级为:{}", serviceFundflowrules.get(0).getFlowlevel());
        for (ServiceFund sf : infoByInfoIdList) {
            sf.setApplyTime(new Date());
            //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了
            if (sf.getBackflowlevel() != null && sf.getBackflowlevel() == 199) {
                //将fund表的审核状态改成100
                sf.setBackflowlevel(100);
                //退回再提交,需要再到出纳那里
                sf.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1));
                sf.setRecordstatus(0);
                serviceFundService.updateById(sf);
//                //往分享表里新增
//                serviceFundService.addFundSharedInfo(serviceFund.getId());
                return success();
            } else if (sf.getBackflowlevel() != null && sf.getBackflowlevel() == 100) {
                //财务退回的数据再提交,到出纳那里没有过,再退回,导致backflowlevel是100,
                //退回再提交,需要再到出纳那里
                sf.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1));
                sf.setRecordstatus(2);
                serviceFundService.updateById(sf);
            } else if (sf.getBackflowlevel() != null && sf.getBackflowlevel() >= serviceFundflowrules.get(0).getFlowlevel()) {
                //聂科退回的,也需要先到出纳那里
                sf.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1));
                sf.setRecordstatus(2);
                serviceFundService.updateById(sf);
            } else {
                Integer TotalLevel = 0;
                List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId());
                if (!postids.contains(2)) {
                    serviceFund.setRecordstatus(2);
                    if (serviceFund.getBackflowlevel() != null) {
                        serviceFund.setFlowlevel(serviceFund.getBackflowlevel().longValue());
                    } else {
                        serviceFund.setBackflowlevel(serviceFundflowrules.get(0).getFlowlevel() - 1);
                        serviceFund.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1));
                    }
                } else {
                    serviceFund.setRecordstatus(0);
                    if (serviceFund.getBackflowlevel() != null) {
                        serviceFund.setFlowlevel(serviceFund.getBackflowlevel().longValue());
                    } else {
                        serviceFund.setFlowlevel(0L);
                        serviceFund.setBackflowlevel(0);
                    }
                }
                //   serviceFund.setFlowlevel(sf.getBackflowlevel());
                boolean bret = serviceFundService.updateById(serviceFund);
                log.info("serviceFundService.updateById返参:{}", bret);
                return toAjax(bret);
            }
        }
        return toAjax(false);
    }
    /**
     * 删除费用申请主
@@ -600,9 +735,8 @@
    @ApiOperation("删除费用申请主")
    //@PreAuthorize("@ss.hasPermi('project:fund:remove')")
    @Log(title = "费用申请主", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
    @GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(serviceFundService.removeByIds(Arrays.asList(ids)));
    }
@@ -613,28 +747,28 @@
    @GetMapping(value = "/downloadLW/{id}")
    public Map downloadInfoLW(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataLW(dataMap,id);
        getDataLW(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("专家劳务费发放申请单.ftl");
            t = configuration.getTemplate("专家劳务费发放申请单(1).ftl");
        } catch (IOException e) {
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "专家劳务费发放申请单_"+dataMap.get("XM")+"_"+ newTime;
        String name = "专家劳务费发放申请单_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -644,8 +778,9 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
@@ -659,15 +794,18 @@
        String date = formatter.format(dt);
        String time = date.substring(0, 10);
        dataMap.put("TBYYMMDD",time);
        dataMap.put("BXDFJ", serviceFund.getAttachcount() == 0 ? "   " : serviceFund.getAttachcount());
        dataMap.put("XZBH", serviceFund.getBh() == null ? "" : serviceFund.getBh());
        dataMap.put("ZB", serviceFund.getDeptmentname() == null ? "" : serviceFund.getDeptmentname());
        dataMap.put("TBYYMMDD", time);
        dataMap.put("BXDFJ", serviceFund.getAttachcount() == null ? "   " : serviceFund.getAttachcount());
        dataMap.put("JXZXM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname());
        dataMap.put("JSR", serviceFund.getUsername() == null ? "" : serviceFund.getUsername());
        dataMap.put("FYXM1", "支付专家费用,其中税前金额" + serviceFund.getPretaxcost() + "元,税后金额" + serviceFund.getTaxedcost() + "元。");
//        dataMap.put("FYXM1", "支付专家费用,其中税前金额" + serviceFund.getPretaxcost() + "元,税后金额" + serviceFund.getTaxedcost() + "元。");
        dataMap.put("FYXM1", "人体器官捐献专家劳务费:" + serviceFund.getPretaxcost() + "元 (其中税后费用由中心承担税费)。");
        dataMap.put("FYXM2", "");
        dataMap.put("FYXM3", "");
        dataMap.put("JEXS", serviceFund.getAmountrequested());
        dataMap.put("JEDS", convert(serviceFund.getAmountrequested()) + "整");
        dataMap.put("JEXS", serviceFund.getPretaxcost());
        dataMap.put("JEDS", convert(serviceFund.getPretaxcost()) + "整");
        dataMap.put("BXBZ", serviceFund.getRemark() == null ? "" : serviceFund.getRemark());
@@ -680,14 +818,15 @@
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double sq = 0;
        double ks = 0;
        double sh = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("XH", f.getItemcode() == null ? "" : f.getItemcode());
            String itemName = f.getItemname() == null ? "" : f.getItemname();
@@ -710,11 +849,72 @@
            newsList.add(map);
        }
        dataMap.put("list",newsList);
        //  专家劳务费统计表
        List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
        dataMap.put("SQHJ",sq);
        dataMap.put("KSHJ",ks);
        dataMap.put("SHHJ",sh);
        List<Double> sqljList = new ArrayList<>();
        List<Double> ksljList = new ArrayList<>();
        List<Double> shljList = new ArrayList<>();
        //根据”科目类型名称“,来计算税前总和,税金总和,税后总和
        Map<String, ServiceFunddetailAssort> funddetailMap = new HashMap<>();
        for (ServiceFunddetail serviceFunddetail : fd) {
            boolean b = funddetailMap.containsKey(serviceFunddetail.getSubjecttypename());
            if (b == true) {
                ServiceFunddetailAssort serviceFunddetailAssort = funddetailMap.get(serviceFunddetail.getSubjecttypename());
                serviceFunddetailAssort.setKSXJ(serviceFunddetailAssort.getKSXJ() + serviceFunddetail.getTaxamount());
                serviceFunddetailAssort.setSQXJ(serviceFunddetailAssort.getSQXJ() + serviceFunddetail.getAmount());
                serviceFunddetailAssort.setSHXJ(serviceFunddetailAssort.getSHXJ() + serviceFunddetail.getTaxedamount());
            } else {
                funddetailMap.put(serviceFunddetail.getSubjecttypename(), new ServiceFunddetailAssort());
                ServiceFunddetailAssort serviceFunddetailAssort = funddetailMap.get(serviceFunddetail.getSubjecttypename());
                serviceFunddetailAssort.setKSXJ(serviceFunddetailAssort.getKSXJ() + serviceFunddetail.getTaxamount());
                serviceFunddetailAssort.setSQXJ(serviceFunddetailAssort.getSQXJ() + serviceFunddetail.getAmount());
                serviceFunddetailAssort.setSHXJ(serviceFunddetailAssort.getSHXJ() + serviceFunddetail.getTaxedamount());
            }
        }
        funddetailMap.forEach((FWFL, serviceFunddetailAssort) -> {
            Map<String, Object> map1 = new HashMap<String, Object>();
            map1.put("FWFL", FWFL);
            map1.put("SQXJ", serviceFunddetailAssort.getSQXJ());
            map1.put("KSXJ", serviceFunddetailAssort.getKSXJ());
            map1.put("SHXJ", serviceFunddetailAssort.getSHXJ());
            sqljList.add(serviceFunddetailAssort.getSQXJ());
            ksljList.add(serviceFunddetailAssort.getKSXJ());
            shljList.add(serviceFunddetailAssort.getSHXJ());
            lists.add(map1);
        });
        double sqxj = 0;
        double kslj = 0;
        double shlj = 0;
        for (Double sqx : sqljList) {
            sqxj += sqx;
        }
        for (Double ksl : ksljList) {
            kslj += ksl;
        }
        for (Double shl : shljList) {
            shlj += shl;
        }
        //数据封装
        dataMap.put("list", newsList);
        for (int i = 0; i < lists.size(); i++) {
            Map<String, Object> map = lists.get(i);
            map.put("XH", i + 1);
        }
        dataMap.put("item", lists);
        dataMap.put("SQHJ", sq);
        dataMap.put("KSHJ", ks);
        dataMap.put("SHHJ", sh);
        dataMap.put("SQLJ", sqxj);
        dataMap.put("KSLJ", kslj);
        dataMap.put("SHLJ", shlj);
    }
@@ -726,13 +926,13 @@
    @GetMapping(value = "/downloadSH/{id}")
    public Map downloadInfoSH(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataSH(dataMap,id);
        getDataSH(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("捐献者善后成本表.ftl");
@@ -740,14 +940,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "捐献者善后成本表_"+dataMap.get("XM")+"_"+ newTime;
        String name = "捐献者善后成本表_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -757,8 +957,8 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        return map;
    }
@@ -781,14 +981,14 @@
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double sq = 0;
        double ks = 0;
        double sh = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            count++;
            map.put("XH", count);
            map.put("FWNR", f.getItemname() == null ? "" : f.getItemname());
@@ -808,11 +1008,11 @@
            newsList.add(map);
        }
        dataMap.put("list",newsList);
        dataMap.put("list", newsList);
        dataMap.put("SQHJ",sq);
        dataMap.put("KSHJ",ks);
        dataMap.put("SHHJ",sh);
        dataMap.put("SQHJ", sq);
        dataMap.put("KSHJ", ks);
        dataMap.put("SHHJ", sh);
    }
@@ -823,13 +1023,13 @@
    @GetMapping(value = "/downloadSS/{id}")
    public Map downloadInfoSS(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataSS(dataMap,id);
        getDataSS(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("捐献者家属交通食宿费用表.ftl");
@@ -837,14 +1037,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "捐献者家属交通食宿费用表_"+dataMap.get("XM")+"_"+ newTime;
        String name = "捐献者家属交通食宿费用表_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -854,13 +1054,15 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
    private void getDataSS(Map dataMap, Long id) {
        ServiceFund serviceFund = serviceFundService.getById(id);
        log.info("通过id查询数据的结果:{}", serviceFund);
        if (serviceFund == null) {
            throw new ServiceException("下载失败,用户信息出错", HttpStatus.NO_CONTENT);
        }
@@ -878,12 +1080,12 @@
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double hj = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            count++;
            map.put("XH", count);
            map.put("FWNR", f.getItemname() == null ? "" : f.getItemname());
@@ -897,98 +1099,201 @@
            newsList.add(map);
        }
        dataMap.put("list",newsList);
        dataMap.put("JEHJ",hj);
        dataMap.put("list", newsList);
        dataMap.put("JEHJ", hj);
    }
    /**
     * 下载捐献者医学成本统计表
     * 下载捐献者医学、办公、绩效成本统计表
     */
    @ApiOperation("捐献者医学成本统计表")
    @ApiOperation("捐献者医学、办公、绩效成本统计表")
    @GetMapping(value = "/downloadYX/{id}")
    public Map downloadInfoYX(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataYX(dataMap,id);
        String dataYX = getDataYX(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("医学成本费用申请单.ftl");
            //专家劳务费申请 1    伦理评估劳务费申请 2    医学成本费用申请 3     办公费用报销申请 4   绩效费用报销申请 5
            if (dataYX.equals("3")) {
                t = configuration.getTemplate("医学成本费用申请单.ftl");
            } else if (dataYX.equals("4")) {
                t = configuration.getTemplate("办公费用申请单.ftl");
            } else if (dataYX.equals("5")) {
                t = configuration.getTemplate("绩效费用申请单.ftl");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "医学成本费用申请单_"+dataMap.get("XM")+"_"+ newTime;
        String name = null;
        if (dataYX.equals("3")) {
            name = "医学成本费用申请单_" + dataMap.get("XM") + "_" + newTime;
        } else if (dataYX.equals("4")) {
            name = "办公费用申请单_" + dataMap.get("XM") + "_" + newTime;
        } else if (dataYX.equals("5")) {
            name = "绩效费用申请单_" + dataMap.get("XM") + "_" + newTime;
        }
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        try {
            t.process(dataMap, out);
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
    private void getDataYX(Map dataMap, Long id) {
    private String getDataYX(Map dataMap, Long id) {
        ServiceFund serviceFund = serviceFundService.getById(id);
        log.info("通过id获取医学、办公、绩效成本的fund信息为:{}", serviceFund);
        if (serviceFund == null) {
            throw new ServiceException("下载失败,用户信息出错", HttpStatus.NO_CONTENT);
        }
        ServiceExternalperson infoByUserNo = null;
        if (StringUtils.isNotBlank(serviceFund.getUserno())) {
            infoByUserNo = externalpersonService.getInfoByUserNo(serviceFund.getUserno());
        }
        List<ServiceFunddetail> fd = serviceFunddetailService.getAllDetailsByFDIDHZ(id);
        if (serviceFund.getApplytype().equals("5")) {
            //绩效的详情如果小于3行,默认要等于3行
            if (fd.size() < 3) {
                for (int i = 0; i <= 3 - fd.size(); i++) {
                    ServiceFunddetail serviceFunddetail = new ServiceFunddetail();
                    serviceFunddetail.setQuantity(0.00);
                    serviceFunddetail.setPrice(0.00);
                    serviceFunddetail.setAmount(0.00);
                    fd.add(serviceFunddetail);
                }
            }
        }
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        Date dt = serviceFund.getCreateTime();
//        Date dt = serviceFund.getCreateTime();
        Date dt = serviceFund.getApplyTime();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = formatter.format(dt);
        String time = date.substring(0, 10);
        List<Map<String, Object>> newList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
        int seqno = 0;
        dataMap.put("TBYYMMDD",time);
        dataMap.put("ZB", serviceFund.getDeptmentname() == null ? "" : serviceFund.getDeptmentname());
        dataMap.put("XZBH", serviceFund.getBh() == null ? "" : serviceFund.getBh());
        dataMap.put("TBYYMMDD", time);
        dataMap.put("BXDFJ", serviceFund.getAttachcount() == 0 ? "   " : serviceFund.getAttachcount());
        dataMap.put("JXZXM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname());
        dataMap.put("JSR", serviceFund.getUsername() == null ? "" : serviceFund.getUsername());
        dataMap.put("YWZ", serviceFund.getDeptmentname() == null ? "" : serviceFund.getDeptmentname());
        dataMap.put("ZHUZANG", serviceFund.getManagername() == null ? "" : serviceFund.getManagername());
        for(ServiceFunddetail f : fd) {
            seqno++;
            Map<String, Object> map=new HashMap<String, Object>();
            map.put("seqno", seqno);
        if (StringUtils.isEmpty(serviceFund.getRemark())) {
            dataMap.put("FYMC", LocalDate.now().getYear() + "年" + LocalDate.now().getMonthValue() + "月人体器官获取服务管理中心工作人员绩效");
        } else {
            dataMap.put("FYMC", serviceFund.getRemark().substring(0, serviceFund.getRemark().length() - 2) + "人体器官获取服务管理中心工作人员绩效");
        }
        String bz = "";
        int i = 0;
        if (!serviceFund.getApplytype().equals("5")) {
            for (ServiceFunddetail f : fd) {
                seqno++;
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("seqno", seqno);
                //如果是医疗成本,则把银行卡加上每条明细的后面
                if (serviceFund.getApplytype().equals("3")) {
                    i = i + 1;
                    bz += f.getBeneficiaryname() == null ? "(" + i + ")" : "(" + i + ")" + f.getBeneficiaryname() + ",";
                    bz += "金额 : " + f.getAmount() + "元" + ",";
                    bz += f.getDepositbank() == null ? "" : f.getDepositbank() + ": ";
                    bz += f.getBankcardno() == null ? "" : f.getBankcardno();
                    bz += "<w:br/>";
                }
                if (serviceFund.getApplytype().equals("4")) {
                    i = i + 1;
                    bz += f.getBeneficiaryname() == null ? "(" + i + ")" : "(" + i + ")" + f.getBeneficiaryname() + ",";
                    bz += "金额 : " + f.getAmount() + "元" + ",";
                    bz += f.getDepositbank() == null ? "" : f.getDepositbank() + ": ";
                    bz += f.getBankcardno() == null ? "" : f.getBankcardno();
                    bz += "<w:br/>";
                }
                String fyxm = "";
                fyxm += f.getItemname() == null ? "" : f.getItemname();
                fyxm += f.getAmount() + "元";
                if (f.getItemname() == null && f.getAmount() == 0.0) {
                    fyxm = "";
                }
                map.put("FYXM", fyxm);
                newList.add(map);
            }
        } else {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("seqno", 1);
            String fyxm = "";
            fyxm += f.getItemname() == null ? "" : f.getItemname();
            fyxm += f.getAmount() + "元";
            fyxm += "(";
            fyxm += f.getUnitname() == null ? "" : f.getUnitname() + ";";
            fyxm += f.getDepositbank() == null ? "" : f.getDepositbank() + ": ";
            fyxm += f.getBankcardno() == null ? "" : f.getBankcardno();
            fyxm += ")";
            if (StringUtils.isEmpty(serviceFund.getRemark())) {
                fyxm += LocalDate.now().getYear() + "年" + LocalDate.now().getMonthValue() + "月人体器官获取服务管理中心工作人员绩效,共计";
            } else {
                fyxm += serviceFund.getRemark().substring(0, serviceFund.getRemark().length() - 2) + "人体器官获取服务管理中心工作人员绩效,共计";
            }
            fyxm += serviceFund.getPretaxcost() + "元";
            if (serviceFund.getPretaxcost() == null && serviceFund.getPretaxcost() == 0.0) {
                fyxm = "";
            }
            map.put("FYXM", fyxm);
            newList.add(map);
            Map<String, Object> objectObjectHashMap = new HashMap<>();
            objectObjectHashMap.put("seqno", 2);
            objectObjectHashMap.put("FYXM", "");
            newList.add(objectObjectHashMap);
            Map<String, Object> objectObjectHashMap2 = new HashMap<>();
            objectObjectHashMap2.put("seqno", 3);
            objectObjectHashMap2.put("FYXM", "");
            newList.add(objectObjectHashMap2);
        }
        //合并单元格
        checkList(newList);
        dataMap.put("items", newList);
        dataMap.put("JEXS", serviceFund.getAmountrequested());
        dataMap.put("JEDS", convert(serviceFund.getAmountrequested()) + "整");
        dataMap.put("BXBZ", serviceFund.getRemark() == null ? "" : serviceFund.getRemark());
        dataMap.put("JEXS", serviceFund.getPretaxcost());
        dataMap.put("JEDS", convert(serviceFund.getPretaxcost()) + "整");
//        dataMap.put("JEXS", serviceFund.getAmountrequested());
//        dataMap.put("JEDS", convert(serviceFund.getAmountrequested()) + "整");
        //备注里放的是经办人的银行卡信息
        dataMap.put("BXBZ", serviceFund.getApplytype().equals("3") || serviceFund.getApplytype().equals("4") ? bz : infoByUserNo == null ? "" : infoByUserNo.getBranchbankname() + "  " + infoByUserNo.getBankcardno());
        dataMap.put("YZ", serviceFund.getPresident() == null ? "" : serviceFund.getPresident());
        dataMap.put("CWFYZ", serviceFund.getFinvicepresident() == null ? "" : serviceFund.getFinvicepresident());
        dataMap.put("YWFYZ", serviceFund.getBusvicepresident() == null ? "" : serviceFund.getBusvicepresident());
        dataMap.put("BGSZR", serviceFund.getOfficedirector() == null ? "" : serviceFund.getOfficedirector());
        dataMap.put("CWBZR", serviceFund.getFinancedirector() == null ? "" : serviceFund.getFinancedirector());
        dataMap.put("CWSH", serviceFund.getFinancechecher() == null ? "" : serviceFund.getFinancechecher());
        dataMap.put("YYMMDD", time);
        dataMap.put("XM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname());
@@ -996,16 +1301,16 @@
        dataMap.put("ZZ", serviceFund.getManagername() == null ? "" : serviceFund.getManagername());
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double hj = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            count++;
            map.put("XH", count);
            map.put("FWNR", f.getItemname() == null ? "" : f.getItemname());
            map.put("DW", f.getUnitname() == null ? "" : f.getUnitname());
            map.put("DW", f.getBeneficiaryname() == null ? "" : f.getBeneficiaryname());
            map.put("SL", f.getQuantity() == 0.00 ? "" : f.getQuantity());
            map.put("JG", f.getPrice() == 0.00 ? "" : f.getPrice());
@@ -1018,6 +1323,21 @@
        dataMap.put("list", newsList);
        dataMap.put("BYHJ", hj);
        dataMap.put("BGSZR2", serviceFund.getOfficedirector() == null ? "" : serviceFund.getOfficedirector());
        dataMap.put("CWBZR2", serviceFund.getFinancedirector() == null ? "" : serviceFund.getFinancedirector());
        dataMap.put("CWSH2", serviceFund.getFinancechecher() == null ? "" : serviceFund.getFinancechecher());
        return serviceFund.getApplytype();
    }
    public List<Map<String, Object>> checkList(List<Map<String, Object>> list) {
        String start = "<w:vMerge w:val='restart'/>";
        String end = "<w:vMerge/>";
        list.get(0).put("start", start);
        for (int i = 1; i < list.size(); i++) {
            list.get(i).put("end", end);
        }
        return list;
    }
@@ -1028,13 +1348,13 @@
    @GetMapping(value = "/downloadBX/{id}")
    public Map downloadInfoBX(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataBX(dataMap,id);
        getDataBX(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("费用报销单.ftl");
@@ -1042,14 +1362,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "费用报销单_"+dataMap.get("XM")+"_"+ newTime;
        String name = "费用报销单_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -1059,8 +1379,9 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
@@ -1102,7 +1423,7 @@
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("获取费用支出汇总表.ftl");
@@ -1110,14 +1431,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "获取费用支出汇总表_"+dataMap.get("XM")+"_"+ newTime;
        String name = "获取费用支出汇总表_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -1127,8 +1448,9 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
@@ -1140,9 +1462,9 @@
        dataMap.put("JSR", "");
        List<ServiceFunddetail> fd = new ArrayList<>();
        for(ServiceFund s : serviceFunds){
        for (ServiceFund s : serviceFunds) {
            List<ServiceFunddetail> l = serviceFunddetailService.getAllDetailsByFDIDHZ(s.getId());
            for(ServiceFunddetail df : l){
            for (ServiceFunddetail df : l) {
                fd.add(df);
            }
        }
@@ -1258,226 +1580,224 @@
        double sh52 = 0;
        double shhj = 0;
        for(ServiceReimbursement sr : serviceReimbursements1){
        for (ServiceReimbursement sr : serviceReimbursements1) {
            f28 += sr.getAmountrequested();
            sh28 += sr.getAmountrequested();
        }
        for(ServiceReimbursement sr : serviceReimbursements2){
        for (ServiceReimbursement sr : serviceReimbursements2) {
            f51 += sr.getAmountrequested();
            sh51 += sr.getAmountrequested();
        }
        for(ServiceFunddetail s : fd){
            if(s.getItemid() == 1){
        for (ServiceFunddetail s : fd) {
            if (s.getItemid() == 1) {
                f1 += s.getAmount();
                sh1 += s.getTaxedamount();
            }
            if(s.getItemid() == 2){
            if (s.getItemid() == 2) {
                f2 += s.getAmount();
                sh2 += s.getTaxedamount();
            }
            if(s.getItemid() == 3){
            if (s.getItemid() == 3) {
                f3 += s.getAmount();
                sh3 += s.getTaxedamount();
            }
            if(s.getItemid() == 4){
            if (s.getItemid() == 4) {
                f4 += s.getAmount();
                sh4 += s.getTaxedamount();
            }
            if(s.getItemid() == 5){
            if (s.getItemid() == 5) {
                f5 += s.getAmount();
                sh5 += s.getTaxedamount();
            }
            if(s.getItemid() == 6){
            if (s.getItemid() == 6) {
                f6 += s.getAmount();
                sh6 += s.getTaxedamount();
            }
            if(s.getItemid() == 7){
            if (s.getItemid() == 7) {
                f7 += s.getAmount();
                sh7 += s.getTaxedamount();
            }
            if(s.getItemid() == 8){
            if (s.getItemid() == 8) {
                f8 += s.getAmount();
                sh8 += s.getTaxedamount();
            }
            if(s.getItemid() == 9){
            if (s.getItemid() == 9) {
                f9 += s.getAmount();
                sh9 += s.getTaxedamount();
            }
            if(s.getItemid() == 10){
            if (s.getItemid() == 10) {
                f10 += s.getAmount();
                sh10 += s.getTaxedamount();
            }
            if(s.getItemid() == 11){
            if (s.getItemid() == 11) {
                f11 += s.getAmount();
                sh11 += s.getTaxedamount();
            }
            if(s.getItemid() == 12){
            if (s.getItemid() == 12) {
                f12 += s.getAmount();
                sh12 += s.getTaxedamount();
            }
            if(s.getItemid() == 13){
            if (s.getItemid() == 13) {
                f13 += s.getAmount();
                sh13 += s.getTaxedamount();
            }
            if(s.getItemid() == 14){
            if (s.getItemid() == 14) {
                f14 += s.getAmount();
                sh14 += s.getTaxedamount();
            }
            if(s.getItemid() == 15){
            if (s.getItemid() == 15) {
                f15 += s.getAmount();
                sh15 += s.getTaxedamount();
            }
            if(s.getItemid() == 16){
            if (s.getItemid() == 16) {
                f16 += s.getAmount();
                sh16 += s.getTaxedamount();
            }
            if(s.getItemid() == 17){
            if (s.getItemid() == 17) {
                f17 += s.getAmount();
                sh17 += s.getTaxedamount();
            }
            if(s.getItemid() == 18){
            if (s.getItemid() == 18) {
                f18 += s.getAmount();
                sh18 += s.getTaxedamount();
            }
            if(s.getItemid() == 19){
            if (s.getItemid() == 19) {
                f19 += s.getAmount();
                sh19 += s.getTaxedamount();
            }
            if(s.getItemid() == 20){
            if (s.getItemid() == 20) {
                f20 += s.getAmount();
                sh20 += s.getTaxedamount();
            }
            if(s.getItemid() == 21){
            if (s.getItemid() == 21) {
                f21 += s.getAmount();
                sh21 += s.getTaxedamount();
            }
            if(s.getItemid() == 22){
            if (s.getItemid() == 22) {
                f22 += s.getAmount();
                sh22 += s.getTaxedamount();
            }
            if(s.getItemid() == 23){
            if (s.getItemid() == 23) {
                f23 += s.getAmount();
                sh23 += s.getTaxedamount();
            }
            if(s.getItemid() == 24){
            if (s.getItemid() == 24) {
                f24 += s.getAmount();
                sh24 += s.getTaxedamount();
            }
            if(s.getItemid() == 25){
            if (s.getItemid() == 25) {
                f25 += s.getAmount();
                sh25 += s.getTaxedamount();
            }
            if(s.getItemid() == 26){
            if (s.getItemid() == 26) {
                f26 += s.getAmount();
                sh26 += s.getTaxedamount();
            }
            if(s.getItemid() == 27){
            if (s.getItemid() == 27) {
                f27 += s.getAmount();
                sh27 += s.getTaxedamount();
            }
            if(s.getItemid() == 29){
            if (s.getItemid() == 29) {
                f29 += s.getAmount();
                sh29 += s.getTaxedamount();
            }
            if(s.getItemid() == 30){
            if (s.getItemid() == 30) {
                f30 += s.getAmount();
                sh30 += s.getTaxedamount();
            }
            if(s.getItemid() == 31){
            if (s.getItemid() == 31) {
                f31 += s.getAmount();
                sh31 += s.getTaxedamount();
            }
            if(s.getItemid() == 32){
            if (s.getItemid() == 32) {
                f32 += s.getAmount();
                sh32 += s.getTaxedamount();
            }
            if(s.getItemid() == 33){
            if (s.getItemid() == 33) {
                f33 += s.getAmount();
                sh33 += s.getTaxedamount();
            }
            if(s.getItemid() == 34){
            if (s.getItemid() == 34) {
                f34 += s.getAmount();
                sh34 += s.getTaxedamount();
            }
            if(s.getItemid() == 35){
            if (s.getItemid() == 35) {
                f35 += s.getAmount();
                sh35 += s.getTaxedamount();
            }
            if(s.getItemid() == 36){
            if (s.getItemid() == 36) {
                f36 += s.getAmount();
                sh36 += s.getTaxedamount();
            }
            if(s.getItemid() == 37){
            if (s.getItemid() == 37) {
                f37 += s.getAmount();
                sh37 += s.getTaxedamount();
            }
            if(s.getItemid() == 38){
            if (s.getItemid() == 38) {
                f38 += s.getAmount();
                sh38 += s.getTaxedamount();
            }
            if(s.getItemid() == 39){
            if (s.getItemid() == 39) {
                f39 += s.getAmount();
                sh39 += s.getTaxedamount();
            }
            if(s.getItemid() == 40){
            if (s.getItemid() == 40) {
                f40 += s.getAmount();
                sh40 += s.getTaxedamount();
            }
            if(s.getItemid() == 41){
            if (s.getItemid() == 41) {
                f41 += s.getAmount();
                sh41 += s.getTaxedamount();
            }
            if(s.getItemid() == 42){
            if (s.getItemid() == 42) {
                f42 += s.getAmount();
                sh42 += s.getTaxedamount();
            }
            if(s.getItemid() == 43){
            if (s.getItemid() == 43) {
                f43 += s.getAmount();
                sh43 += s.getTaxedamount();
            }
            if(s.getItemid() == 44){
            if (s.getItemid() == 44) {
                f44 += s.getAmount();
                sh44 += s.getTaxedamount();
            }
            if(s.getItemid() == 45){
            if (s.getItemid() == 45) {
                f45 += s.getAmount();
                sh45 += s.getTaxedamount();
            }
            if(s.getItemid() == 46){
            if (s.getItemid() == 46) {
                f46 += s.getAmount();
                sh46 += s.getTaxedamount();
            }
            if(s.getItemid() == 47){
            if (s.getItemid() == 47) {
                f47 += s.getAmount();
                sh47 += s.getTaxedamount();
            }
            if(s.getItemid() == 48){
            if (s.getItemid() == 48) {
                f48 += s.getAmount();
                sh48 += s.getTaxedamount();
            }
            if(s.getItemid() == 49){
            if (s.getItemid() == 49) {
                f49 += s.getAmount();
                sh49 += s.getTaxedamount();
            }
            if(s.getItemid() == 50){
            if (s.getItemid() == 50) {
                f50 += s.getAmount();
                sh50 += s.getTaxedamount();
            }
            if(s.getItemid() == 52){
            if (s.getItemid() == 52) {
                f52 += s.getAmount();
                sh52 += s.getTaxedamount();
            }
        }
        hj = f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 + f13 + f14 + f15 + f16 + f17 + f18 + f19 + f20 + f21 + f22 + f23 + f24 + f25 + f26 + f27 + f28 + f29 + f30 + f31 + f32 + f33 + f34 + f35
                + f36 + f37 + f38 + f39 + f40 + f41 + f42 + f43 + f44 + f45 + f46 + f47 + f48 + f49 + f50 + f51 + f52;
        hj = f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 + f13 + f14 + f15 + f16 + f17 + f18 + f19 + f20 + f21 + f22 + f23 + f24 + f25 + f26 + f27 + f28 + f29 + f30 + f31 + f32 + f33 + f34 + f35 + f36 + f37 + f38 + f39 + f40 + f41 + f42 + f43 + f44 + f45 + f46 + f47 + f48 + f49 + f50 + f51 + f52;
        shhj = sh1 + sh2 + sh3 + sh4 + sh5 + sh6 + sh7 + sh8 + sh9 + sh10 + sh11 + sh12 + sh13 + sh14 + sh15 + sh16 + sh17 + sh18 + sh19 + sh20 + sh21 + sh22 + sh23 + sh24 + sh25 + sh26 + sh27 + sh28 + sh29 + sh30 + sh31 + sh32 + sh33 + sh34 + sh35
                + sh36 + sh37 + sh38 + sh39 + sh40 + sh41 + sh42 + sh43 + sh44 + sh45 + sh46 + sh47 + sh48 + sh49 + sh50 + sh51 + sh52;
        shhj = sh1 + sh2 + sh3 + sh4 + sh5 + sh6 + sh7 + sh8 + sh9 + sh10 + sh11 + sh12 + sh13 + sh14 + sh15 + sh16 + sh17 + sh18 + sh19 + sh20 + sh21 + sh22 + sh23 + sh24 + sh25 + sh26 + sh27 + sh28 + sh29 + sh30 + sh31 + sh32 + sh33 + sh34 + sh35 + sh36 + sh37 + sh38 + sh39 + sh40 + sh41 + sh42 + sh43 + sh44 + sh45 + sh46 + sh47 + sh48 + sh49 + sh50 + sh51 + sh52;
        dataMap.put("FY1", f1 == 0 ? "" : f1);
        dataMap.put("FY2", f2 == 0 ? "" : f2);
@@ -1531,7 +1851,7 @@
        dataMap.put("FY50", f50 == 0 ? "" : f50);
        dataMap.put("FY51", f51 == 0 ? "" : f51);
        dataMap.put("FY52", f52 == 0 ? "" : f52);
        dataMap.put("FY53", hj  == 0 ? "" : hj);
        dataMap.put("FY53", hj == 0 ? "" : hj);
        dataMap.put("SH1", sh1 == 0 ? "" : sh1);
        dataMap.put("SH2", sh2 == 0 ? "" : sh2);
@@ -1597,13 +1917,13 @@
    @GetMapping(value = "/downloadLWF/{id}")
    public Map downloadInfoLWF(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataLWF(dataMap,id);
        getDataLWF(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("器官获取专家劳务费统计表.ftl");
@@ -1611,14 +1931,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "器官获取专家劳务费统计表_"+dataMap.get("XM")+"_"+ newTime;
        String name = "器官获取专家劳务费统计表_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -1628,8 +1948,9 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
@@ -1644,6 +1965,7 @@
        String date = formatter.format(dt);
        String time = date.substring(0, 10);
        dataMap.put("XZBH", serviceFund.getBh() == null ? "" : serviceFund.getBh());
        dataMap.put("YYMMDD", time);
        dataMap.put("XM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname());
        dataMap.put("GZRY", serviceFund.getUsername() == null ? "" : serviceFund.getUsername());
@@ -1653,12 +1975,12 @@
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double hj = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            count++;
            map.put("XH", count);
            map.put("FWNR", f.getItemname() == null ? "" : f.getItemname());
@@ -1666,12 +1988,12 @@
            map.put("DW", f.getUnitname() == null ? "" : f.getUnitname());
            map.put("ZW", f.getTitle() == null ? "" : f.getTitle());
            map.put("SFZH", f.getIdcardno() == null ? "" : f.getIdcardno());
            map.put("JE", f.getAmount() == 0  ? "" : f.getAmount());
            map.put("JE", f.getAmount() == 0 ? "" : f.getAmount());
            hj += f.getAmount();
            newsList.add(map);
        }
        dataMap.put("list",newsList);
        dataMap.put("list", newsList);
        dataMap.put("HJ", hj);
@@ -1684,13 +2006,13 @@
    @GetMapping(value = "/downloadLL/{id}")
    public Map downloadInfoLL(@PathVariable("id") Long id) throws IOException {
        Map dataMap = new HashMap();
        getDataLL(dataMap,id);
        getDataLL(dataMap, id);
        String filePath = getClass().getResource("/template/").getPath();
        System.out.println(filePath);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
        configuration.setDirectoryForTemplateLoading(new File(filePath));
        Template t=null;
        Template t = null;
        try {
            //捐献表.ftl为要装载的模板
            t = configuration.getTemplate("伦理专家劳务费发放申请单.ftl");
@@ -1698,14 +2020,14 @@
            e.printStackTrace();
        }
        String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis());
        String name = "伦理专家劳务费发放申请单_"+dataMap.get("XM")+"_"+ newTime;
        String name = "伦理专家劳务费发放申请单_" + dataMap.get("XM") + "_" + newTime;
        //输出文档路径及名称
        File outFile = new File(RuoYiConfig.getProfile()+"/download/wordtemplate/"+name+".doc");
        File outFile = new File(RuoYiConfig.getProfile() + "/download/wordtemplate/" + name + ".doc");
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
@@ -1715,8 +2037,9 @@
        } catch (TemplateException e) {
            e.printStackTrace();
        }
        Map<String ,Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/"+name+".doc");
        Map<String, Object> map = new HashMap<>();
        map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc");
        map.put("downloadName", name + ".doc");
        return map;
    }
@@ -1730,7 +2053,9 @@
        String date = formatter.format(dt);
        String time = date.substring(0, 10);
        dataMap.put("TBYYMMDD",time);
        dataMap.put("ZB", serviceFund.getDeptmentname() == null ? "" : serviceFund.getDeptmentname());
        dataMap.put("XZBH", serviceFund.getBh() == null ? "" : serviceFund.getBh());
        dataMap.put("TBYYMMDD", time);
        dataMap.put("BXDFJ", serviceFund.getAttachcount() == 0 ? "   " : serviceFund.getAttachcount());
        dataMap.put("JXZXM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname());
        dataMap.put("JSR", serviceFund.getUsername() == null ? "" : serviceFund.getUsername());
@@ -1751,14 +2076,14 @@
        if (fd == null) {
            throw new ServiceException("下载失败,没有对应信息", HttpStatus.NO_CONTENT);
        }
        List<Map<String, Object>> newsList = new ArrayList<Map<String,Object>>();
        List<Map<String, Object>> newsList = new ArrayList<Map<String, Object>>();
        int count = 0;
        double sq = 0;
        double ks = 0;
        double sh = 0;
        for(ServiceFunddetail f : fd){
            Map<String, Object> map=new HashMap<String, Object>();
        for (ServiceFunddetail f : fd) {
            Map<String, Object> map = new HashMap<String, Object>();
            count++;
            map.put("XH", count);
            map.put("FWNR", f.getItemname() == null ? "" : f.getItemname());
@@ -1770,7 +2095,7 @@
            map.put("KH", f.getBankcardno() == null ? "" : f.getBankcardno());
            map.put("SQ", f.getAmount() == 0.00 ? "" : String.format("%.2f", f.getAmount()).toString() + "");
            sq += f.getAmount();
            map.put("KS", f.getTaxamount() == 0.00 ? "" : String.format("%.2f",f.getTaxamount()).toString() + "");
            map.put("KS", f.getTaxamount() == 0.00 ? "" : String.format("%.2f", f.getTaxamount()).toString() + "");
            ks += f.getTaxamount();
            map.put("SH", f.getTaxedamount() == 0.00 ? "" : String.format("%.2f", f.getTaxedamount()).toString() + "");
            sh += f.getTaxedamount();
@@ -1778,14 +2103,13 @@
            newsList.add(map);
        }
        dataMap.put("list",newsList);
        dataMap.put("list", newsList);
        dataMap.put("SQHJ", String.format("%.2f", sq).toString() + "");
        dataMap.put("KSHJ", String.format("%.2f", ks).toString() + "");
        dataMap.put("SHHJ", String.format("%.2f", sh).toString() + "");
        dataMap.put("SQZE", String.format("%.2f", sh).toString() + "");
    }
@@ -1795,7 +2119,7 @@
     */
    @ApiOperation("展示费用细节")
    @GetMapping(value = "/showFundDetailOne/{id}")
    public AjaxResult showFundDetailOne(@PathVariable Long id){
    public AjaxResult showFundDetailOne(@PathVariable Long id) {
        ServiceFund serviceFund = serviceFundService.getById(id);
        return AjaxResult.success(serviceFundService.showFundDetailOne(serviceFund));
    }
@@ -1805,7 +2129,7 @@
     */
    @ApiOperation("展示费用细节")
    @GetMapping(value = "/showFundDetailTwo/{infoid}")
    public AjaxResult showFundDetailTwo(@PathVariable Long infoid){
    public AjaxResult showFundDetailTwo(@PathVariable Long infoid) {
        return AjaxResult.success(serviceFundService.showFundDetailTwo(infoid));
@@ -1814,14 +2138,57 @@
    /**
     * 费用类型计数
     */
//    @NotRepeatCommit(key = "param:arg[1]", value = 30000)
    @ApiOperation("费用类型计数")
    @GetMapping(value = "/countItem/{infoid}/{itemid}")
    public AjaxResult countItem(@PathVariable Long infoid, @PathVariable Long itemid){
    public AjaxResult countItem(@PathVariable Long infoid, @PathVariable Long itemid) {
        return AjaxResult.success(serviceFundService.countItem(infoid, itemid));
    }
    /**
     * 绩效计算
     */
    @ApiOperation("绩效计算")
    @Log(title = "绩效计算", businessType = BusinessType.INSERT)
    @PostMapping("/performance")
    @RepeatSubmit
    public AjaxResult performance(@RequestBody ServiceFundVO serviceFundVO) {
        return AjaxResult.success(serviceFundService.performance(serviceFundVO));
    }
    /**
     * 合计个税
     */
    @NotRepeatCommit(key = "param:arg[1]", value = 30000)
    @ApiOperation("合计个税")
    @Log(title = "合计个税", businessType = BusinessType.INSERT)
    @PostMapping("/totaltax")
    public AjaxResult totaltax(@RequestBody TotalTaxVO totalTaxVO) {
        Map<String, List<ServiceFunddetailExcel>> totaltax = serviceFundService.totaltax(totalTaxVO);
        if (ObjectUtils.isEmpty(totaltax)) {
            throw new BaseException("合计个税失败");
        }
        Set<String> strings = totaltax.keySet();
        String key2 = null;
        for (String key : strings) {
            key2 = key;
        }
        ExcelUtil<ServiceFunddetailExcel> util = new ExcelUtil<ServiceFunddetailExcel>(ServiceFunddetailExcel.class);
        AjaxResult ajaxResult = util.exportExcel(totaltax.get(key2), key2);
        String msg = (String) ajaxResult.get("msg");
        Map dataMap = new HashMap();
        dataMap.put("downloadUrl", "/profile/download/" + msg);
        dataMap.put("downloadName", msg);
        return AjaxResult.success(dataMap);
    }
}