|  |  | 
 |  |  | package com.ruoyi.web.controller.project; | 
 |  |  |  | 
 |  |  | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; | 
 |  |  | 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.page.TableDataInfo; | 
 |  |  | import com.ruoyi.common.enums.BusinessType; | 
 |  |  | import com.ruoyi.common.exception.ServiceException; | 
 |  |  | import com.ruoyi.common.tax.TaxtUtils; | 
 |  |  | import com.ruoyi.common.exception.base.BaseException; | 
 |  |  | 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.ISysPostService; | 
 |  |  | import com.ruoyi.system.service.ISysUserService; | 
 |  |  | import freemarker.template.Configuration; | 
 |  |  | import freemarker.template.Template; | 
 |  |  | import freemarker.template.TemplateException; | 
 |  |  | 
 |  |  | import java.io.*; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.time.LocalDate; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.concurrent.ConcurrentHashMap; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | import static com.ruoyi.web.controller.project.ServiceReimbursementController.convert; | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFundService serviceFundService; | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFundSharedService fundSharedService; | 
 |  |  |     @Autowired | 
 |  |  |     private ServiceFunddetailMapper serviceFunddetailMapper; | 
 |  |  |     private IServiceFundSharedService serviceFundSharedService; | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFunddetailService serviceFunddetailService; | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFunddetailSharedService funddetailSharedService; | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFundflowruleService serviceFundflowruleService; | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceFundflowService serviceFundflowService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceDonatebaseinfoService serviceDonatebaseinfoService; | 
 |  |  |  | 
 |  |  | 
 |  |  |     private IServiceReimbursementService serviceReimbursementService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceSystemmessageService ServiceSystemmessage; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IBaseOnlyvalueService baseOnlyvalueService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IServiceExternalpersonService externalpersonService; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private ISysPostService postService; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public ServiceFundController() { | 
 |  |  |         configuration = new Configuration(); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 致远系统流程退回 | 
 |  |  |      * | 
 |  |  |      * @param serviceProcessDocVO | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @PostMapping("/backdocument") | 
 |  |  |     public AjaxResult backDocument(@RequestBody ServiceProcessDocVO serviceProcessDocVO) { | 
 |  |  |         log.info("致远系统流程退回入参:{}", serviceProcessDocVO); | 
 |  |  |         if (serviceProcessDocVO.getBackCode() == null || StringUtils.isEmpty(serviceProcessDocVO.getApplytype())) { | 
 |  |  |             return AjaxResult.error("入能为空,请检查入参!!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         serviceFundService.backDocument(serviceProcessDocVO); | 
 |  |  |         return AjaxResult.success("退回成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 致远系统流程退回审批日志 | 
 |  |  |      * | 
 |  |  |      * @param serviceProcessVO | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @PostMapping("/processlog") | 
 |  |  |     public AjaxResult processlog(@RequestBody ServiceProcessVO serviceProcessVO) { | 
 |  |  |         log.info("致远系统流程退回审批日志入参:{}", serviceProcessVO); | 
 |  |  |         if (serviceProcessVO.getBackCode() == null && StringUtils.isEmpty(serviceProcessVO.getApplytype())) { | 
 |  |  |             return AjaxResult.error("入能为空,请检查入参!!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Boolean processlog = serviceFundService.processlog(serviceProcessVO); | 
 |  |  |         if (!processlog) return AjaxResult.error("审批记录失败"); | 
 |  |  |         return AjaxResult.success("审批记录成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 修改编号与支付方式 | 
 |  |  |      * | 
 |  |  |      * @param serviceCodeAndPyaWay | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @PostMapping("/updatecodepayway") | 
 |  |  |     public AjaxResult updatecodepay(@RequestBody ServiceCodeAndPyaWay serviceCodeAndPyaWay) { | 
 |  |  |         log.info("致远系统编号与支付方式入参:{}", serviceCodeAndPyaWay); | 
 |  |  |         if (StringUtils.isEmpty(serviceCodeAndPyaWay.getApplytype()) || StringUtils.isEmpty(serviceCodeAndPyaWay.getBh()) || StringUtils.isEmpty(serviceCodeAndPyaWay.getZffs())) { | 
 |  |  |             return AjaxResult.error("入能为空,请检查入参!!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Boolean result = serviceFundService.updatecodepay(serviceCodeAndPyaWay); | 
 |  |  |         if (!result) return AjaxResult.error("修改失败"); | 
 |  |  |  | 
 |  |  |         return AjaxResult.success("修改成功"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 查询费用申请主列表 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("查询费用申请主列表") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:list')") | 
 |  |  |     //// @PreAuthorize("@ss.hasPermi('project:fund:list')") | 
 |  |  |     @GetMapping("/list") | 
 |  |  |     public TableDataInfo list(ServiceFund serviceFund) { | 
 |  |  |         startPage(); | 
 |  |  | 
 |  |  |         Integer APPLYTYPE = spFinancialExpensesIn.getAPPLYTYPE(); | 
 |  |  |         Integer pageNum = spFinancialExpensesIn.getPageNum(); | 
 |  |  |         Integer pageSize = spFinancialExpensesIn.getPageSize(); | 
 |  |  |         Integer checkstatus = spFinancialExpensesIn.getCheckstatus(); | 
 |  |  |  | 
 |  |  |         String donorname = spFinancialExpensesIn.getDonorname(); | 
 |  |  |         if (StringUtils.isEmpty(donorname)) { | 
 |  |  |             donorname = null; | 
 |  |  |         } | 
 |  |  |         if (pageNum == null) { | 
 |  |  |             pageNum = 1; | 
 |  |  |         } | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //startPage(); | 
 |  |  |         List<SpFinancialExpensesFundOut> list = serviceFundService.getListBypower(loginUser.getUsername(), 2, APPLICANT, APPLICATIONBEGTIME, APPLICATIONENDTIME, loginUser.getDeptId().toString(), CHECKFLAG, APPLYTYPE); | 
 |  |  |         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 (StringUtils.isNotEmpty(spFinancialExpensesIn.getDeptnos())) { | 
 |  |  |             list = list.stream().filter(obj -> obj.getDeptmentno().contains(spFinancialExpensesIn.getDeptnos())).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 o1.getApplyTime().compareTo(o2.getApplyTime()); | 
 |  |  |             } | 
 |  |  |         }); | 
 |  |  |         return getCustomDataTable(list, pageNum, pageSize); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据权限显示审核列表 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("根据权限显示审核列表") | 
 |  |  |     @Log(title = "根据权限显示审核列表", businessType = BusinessType.OTHER) | 
 |  |  |     @PostMapping("/getExpertfeeList") | 
 |  |  |     public TableDataInfo getExpertfeeList(@RequestBody SpSelectExpertfee spSelectExpertfee) { | 
 |  |  |         List<SpFinancialExpensesFundOut> expertfeeList = serviceFundService.getExpertfeeList(spSelectExpertfee); | 
 |  |  |         return getCustomDataTable(expertfeeList, spSelectExpertfee.getPageNum(), spSelectExpertfee.getPageSize()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @ApiOperation("查询费用申请主列表") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:list')") | 
 |  |  |     //// @PreAuthorize("@ss.hasPermi('project:fund:list')") | 
 |  |  |     @GetMapping(value = "/getInfo/{infoid}") | 
 |  |  |     public AjaxResult getInfoByInfoId(@PathVariable("infoid") Long infoid) { | 
 |  |  |         return AjaxResult.success(serviceFundService.getInfoByInfoId(infoid)); | 
 |  |  | 
 |  |  |      * 导出费用申请主列表 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("导出费用申请主列表") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:export')") | 
 |  |  |     //// @PreAuthorize("@ss.hasPermi('project:fund:export')") | 
 |  |  |     @Log(title = "费用申请主", businessType = BusinessType.EXPORT) | 
 |  |  |     @GetMapping("/export") | 
 |  |  |     public AjaxResult export(ServiceFund serviceFund) { | 
 |  |  | 
 |  |  |      * 获取费用申请主详细信息 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("获取费用申请主详细信息") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:query')") | 
 |  |  |     //// @PreAuthorize("@ss.hasPermi('project:fund:query')") | 
 |  |  |     @GetMapping(value = "/{id}") | 
 |  |  |     public AjaxResult getInfo(@PathVariable("id") Long id) { | 
 |  |  |         return AjaxResult.success(serviceFundService.getById(id)); | 
 |  |  | 
 |  |  |      * 新增费用申请主 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("新增费用申请主") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:add')") | 
 |  |  |     //// @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) { | 
 |  |  | 
 |  |  |         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)); | 
 |  |  | // | 
 |  |  | // | 
 |  |  | //        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; | 
 |  |  | //    } | 
 |  |  |     /** | 
 |  |  |      * fund表中,修改fundTaxId | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("fund表中,修改fundTaxId") | 
 |  |  |     @PostMapping("/editFundTaxId") | 
 |  |  |     public AjaxResult editFundTaxId(@RequestBody ServiceFund serviceFund) { | 
 |  |  |         boolean b = serviceFundService.updateFundTaxIdById(serviceFund.getId(), serviceFund.getFundTaxId()); | 
 |  |  |         return AjaxResult.success(b); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 新增费用汇总 | 
 |  |  | 
 |  |  |      * 审核费用 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("审核费用") | 
 |  |  |     @Log(title = "审核费用", businessType = BusinessType.OTHER) | 
 |  |  |     @RepeatSubmit | 
 |  |  | //    @Log(title = "审核费用", businessType = BusinessType.OTHER) | 
 |  |  |     @PostMapping("/checkfund") | 
 |  |  |     public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) { | 
 |  |  |         logger.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()); | 
 |  |  |             logger.info("serviceFundController---checkFund---queryList的入参值serviceFundflowrule:{}", serviceFundflowrule); | 
 |  |  |  | 
 |  |  |             List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule); | 
 |  |  |  | 
 |  |  |             if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) { | 
 |  |  |                 return AjaxResult.error(HttpStatus.ERROR, "当前人员无此记录审核权限"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceFund.getFlowlevel()) { | 
 |  |  |                 return AjaxResult.error(HttpStatus.ERROR, "当前人员与此记录的审核级别不符"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) { | 
 |  |  |                 TotalLevel = serviceFundflowrules.get(0).getTotallevel(); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             Integer CheckFlag = 0; | 
 |  |  |             Integer RecordStatus = serviceFund.getRecordstatus(); | 
 |  |  |             Integer FlowLevel = serviceFund.getFlowlevel().intValue(); | 
 |  |  |             Integer OriginalFlowLevel = FlowLevel; | 
 |  |  |             if (checkFundVO.getFlowconclusion() == 1) { | 
 |  |  |                 CheckFlag = 1; | 
 |  |  |                 if (TotalLevel == 0) { | 
 |  |  |                     RecordStatus = 99; | 
 |  |  |                 } else { | 
 |  |  |                     if (TotalLevel == FlowLevel + 1) { | 
 |  |  |                         RecordStatus = 99; | 
 |  |  |                     } else { | 
 |  |  |                         RecordStatus = (FlowLevel + 1) * 2; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 FlowLevel = FlowLevel + 1; | 
 |  |  |                 //记录一下,下一级的审批,以便于下一级退回后,发起者提交时,能再提到当前审批层级 | 
 |  |  |                 serviceFund.setBackflowlevel(FlowLevel); | 
 |  |  |             } else { | 
 |  |  |                 CheckFlag = 2; | 
 |  |  |                 if (CheckFlag == 2) { | 
 |  |  |                     //应医院要求如果出现退回,直接退到发起者 | 
 |  |  |                     FlowLevel = 0; | 
 |  |  |                     RecordStatus = -1; | 
 |  |  |                 } else { | 
 |  |  |                     RecordStatus = (FlowLevel + 1) * 2 - 1; | 
 |  |  |                     FlowLevel = (FlowLevel - 1); | 
 |  |  |                     if (FlowLevel < 0) { | 
 |  |  |                         FlowLevel = 0; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             serviceFund.setRecordstatus(RecordStatus); | 
 |  |  |             serviceFund.setFlowlevel(FlowLevel.longValue()); | 
 |  |  |             //  serviceFund.setBackflowlevel(serviceFund.getFlowlevel()); | 
 |  |  |  | 
 |  |  |             ServiceFundflow serviceFundflow = new ServiceFundflow(); | 
 |  |  |             SysUser user = loginUser.getUser(); | 
 |  |  |             serviceFundflow.setFundid(serviceFund.getId()); | 
 |  |  |             serviceFundflow.setCheckuserno(user.getUserName()); | 
 |  |  |             serviceFundflow.setCheckusername(user.getNickName()); | 
 |  |  |             serviceFundflow.setFundtype(2); | 
 |  |  |             serviceFundflow.setApplytype(serviceFund.getApplytype()); | 
 |  |  |             serviceFundflow.setFlowconclusion(CheckFlag); | 
 |  |  |             if (org.apache.commons.lang.StringUtils.isNotBlank(checkFundVO.getFlowcontent())) { | 
 |  |  |                 serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent()); | 
 |  |  |             } else { | 
 |  |  |                 serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过"); | 
 |  |  |             } | 
 |  |  |             serviceFundflow.setFlowlevel(OriginalFlowLevel + 1); | 
 |  |  |             serviceFundflowService.save(serviceFundflow); | 
 |  |  |  | 
 |  |  |             //001审批通过之后,就需要把“办公室主任”的名字填上 | 
 |  |  |             if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("001")) { | 
 |  |  |                 serviceFund.setOfficedirector(user.getNickName()); | 
 |  |  |             } | 
 |  |  |             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) + "级审核"); | 
 |  |  |                 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, "费用编号不正确"); | 
 |  |  |         log.info("serviceFundController---checkFund的入参值checkFundVO :{}", checkFundVO); | 
 |  |  |         LoginUser loginUser = getLoginUser(); | 
 |  |  |         Map<String, String> map = serviceFundService.checkFund(checkFundVO, loginUser); | 
 |  |  |         Set<String> keys = map.keySet(); | 
 |  |  |         for (String s : keys) { | 
 |  |  |             if (!s.equals("200")) return AjaxResult.error(map.get(s)); | 
 |  |  |         } | 
 |  |  |         return AjaxResult.success(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |     @Log(title = "费用上报", businessType = BusinessType.UPDATE) | 
 |  |  |     @PostMapping("/fundEdit") | 
 |  |  |     @RepeatSubmit | 
 |  |  |     public AjaxResult fundEdit(@RequestBody ServiceFund serviceFund) { | 
 |  |  |     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)) { | 
 |  |  |             return toAjax(false); | 
 |  |  |             Long id = serviceFundService.addOrUpdateNew(serviceFundVO); | 
 |  |  |             serviceFund.setId(id); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         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()); | 
 |  |  | //                //往分享表里新增 | 
 |  |  | //                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; | 
 |  |  |                 LoginUser loginUser = getLoginUser(); | 
 |  |  |                 SysUser user = loginUser.getUser(); | 
 |  |  |                 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(1); | 
 |  |  |                         serviceFund.setFlowlevel(1L); | 
 |  |  |                         serviceFund.setBackflowlevel(serviceFundflowrules.get(0).getFlowlevel() - 1); | 
 |  |  |                         serviceFund.setFlowlevel(Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1)); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     serviceFund.setRecordstatus(0); | 
 |  |  | 
 |  |  |         return toAjax(false); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 删除费用申请主 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("删除费用申请主") | 
 |  |  |     //@PreAuthorize("@ss.hasPermi('project:fund:remove')") | 
 |  |  |     //// @PreAuthorize("@ss.hasPermi('project:fund:remove')") | 
 |  |  |     @Log(title = "费用申请主", businessType = BusinessType.DELETE) | 
 |  |  |     @GetMapping("/remove/{ids}") | 
 |  |  |     public AjaxResult remove(@PathVariable Long[] ids) { | 
 |  |  | 
 |  |  |     @GetMapping(value = "/downloadLW/{id}") | 
 |  |  |     public Map downloadInfoLW(@PathVariable("id") Long id) throws IOException { | 
 |  |  |         Map dataMap = new HashMap(); | 
 |  |  |         getDataLW(dataMap, id); | 
 |  |  |         String dataLW = getDataLW(dataMap, id); | 
 |  |  |         String filePath = getClass().getResource("/template/").getPath(); | 
 |  |  |         System.out.println(filePath); | 
 |  |  |         //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载, | 
 |  |  | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         String newTime = String.valueOf(Calendar.getInstance().getTimeInMillis()); | 
 |  |  |         String name = "专家劳务费发放申请单_" + dataMap.get("XM") + "_" + newTime; | 
 |  |  |  | 
 |  |  |         String newName = null; | 
 |  |  |         if (Objects.isNull(dataMap.get("XM"))) { | 
 |  |  |             newName = dataMap.get("XM").toString().trim(); | 
 |  |  |         } | 
 |  |  |         String name = "专家劳务费发放申请单_" + newName + "_" + newTime; | 
 |  |  |         if (dataLW.equals("4")) { | 
 |  |  |             name = "办公费用申请单_" + newName + "_" + newTime; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //输出文档路径及名称 | 
 |  |  |         File outFile = new File(RuoYiConfig.getProfile() + "/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 getDataLW(Map dataMap, Long id) { | 
 |  |  |     private String getDataLW(Map dataMap, Long id) { | 
 |  |  |         ServiceFund serviceFund = serviceFundService.getById(id); | 
 |  |  |         if (serviceFund == null) { | 
 |  |  |             throw new ServiceException("下载失败,用户信息出错", HttpStatus.NO_CONTENT); | 
 |  |  | 
 |  |  |         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() == 0 ? "   " : serviceFund.getAttachcount()); | 
 |  |  |         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() + "元 (其中税后费用由中心承担税费)。"); | 
 |  |  |         if (serviceFund.getApplytype().equals("1")) { | 
 |  |  |             dataMap.put("FYXM1", "人体器官捐献专家劳务费:" + serviceFund.getPretaxcost() + "元 (其中税后费用由中心承担税费)。"); | 
 |  |  |         } else if (serviceFund.getApplytype().equals("4")) { | 
 |  |  |             dataMap.put("FYXM1", "办公费用:" + serviceFund.getPretaxcost()); | 
 |  |  |         } | 
 |  |  |         dataMap.put("FYXM2", ""); | 
 |  |  |         dataMap.put("FYXM3", ""); | 
 |  |  |         dataMap.put("JEXS", serviceFund.getPretaxcost()); | 
 |  |  | 
 |  |  |         dataMap.put("KSLJ", kslj); | 
 |  |  |         dataMap.put("SHLJ", shlj); | 
 |  |  |  | 
 |  |  |         return serviceFund.getApplytype(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         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); | 
 |  |  |         } | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 下载捐献者医学成本统计表 | 
 |  |  |      * 下载捐献者医学、办公、绩效成本统计表 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("捐献者医学成本统计表") | 
 |  |  |     @ApiOperation("捐献者医学、办公、绩效成本统计表") | 
 |  |  |     @GetMapping(value = "/downloadYX/{id}") | 
 |  |  |     public Map downloadInfoYX(@PathVariable("id") Long id) throws IOException { | 
 |  |  |         Map dataMap = new HashMap(); | 
 |  |  |         String dataYX = getDataYX(dataMap, id); | 
 |  |  |         String filePath = getClass().getResource("/template/").getPath(); | 
 |  |  |         log.info("filePath的值为:{}", filePath); | 
 |  |  |         System.out.println(filePath); | 
 |  |  |         //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载, | 
 |  |  |         configuration.setDirectoryForTemplateLoading(new File(filePath)); | 
 |  |  | 
 |  |  |         Template t = null; | 
 |  |  |         try { | 
 |  |  |             //捐献表.ftl为要装载的模板 | 
 |  |  |             //专家劳务费申请 1    伦理评估劳务费申请 2    医学成本费用申请 3     办公费用报销申请 4 | 
 |  |  |             //专家劳务费申请 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(); | 
 |  |  | 
 |  |  |             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"); | 
 |  |  |         Writer out = null; | 
 |  |  |  | 
 |  |  |         try { | 
 |  |  |             out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")); | 
 |  |  |  | 
 |  |  |         } catch (FileNotFoundException e1) { | 
 |  |  |             e1.printStackTrace(); | 
 |  |  |             log.error("FileNotFoundException报错信息是:{}", e1.getMessage()); | 
 |  |  | //            e1.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         try { | 
 |  |  |  | 
 |  |  |             t.process(dataMap, out); | 
 |  |  |         } catch (TemplateException e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             log.error("TemplateException报错信自是:{}", e.getMessage()); | 
 |  |  |             e.getMessage(); | 
 |  |  |         } | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); | 
 |  |  |         map.put("downloadName", name + ".doc"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     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())) { | 
 |  |  |         if (StringUtils.isNotBlank(serviceFund.getUserno()) && serviceFund.getApplytype().equals("5")) { | 
 |  |  |             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); | 
 |  |  | 
 |  |  |         dataMap.put("YWZ", serviceFund.getDeptmentname() == null ? "" : serviceFund.getDeptmentname()); | 
 |  |  |         dataMap.put("ZHUZANG", serviceFund.getManagername() == null ? "" : serviceFund.getManagername()); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         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; | 
 |  |  |         for (ServiceFunddetail f : fd) { | 
 |  |  |             seqno++; | 
 |  |  |         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", seqno); | 
 |  |  | //            String fyxm = ""; | 
 |  |  | //            fyxm += f.getItemname() == null ? "" : f.getItemname(); | 
 |  |  | //            fyxm += f.getAmount() + "元"; | 
 |  |  | //            //如果是医疗成本,则把银行卡加上每条明细的后面 | 
 |  |  | //            if (serviceFund.getApplytype().equals("3")) { | 
 |  |  | //                fyxm += "("; | 
 |  |  | //                fyxm += f.getUnitname() == null ? "" : f.getUnitname() + ";"; | 
 |  |  | //                fyxm += f.getDepositbank() == null ? "" : f.getDepositbank() + ": "; | 
 |  |  | //                fyxm += f.getBankcardno() == null ? "" : f.getBankcardno(); | 
 |  |  | //                fyxm += ")"; | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  |             //如果是医疗成本,则把银行卡加上每条明细的后面 | 
 |  |  |             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/>"; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             map.put("seqno", 1); | 
 |  |  |             String fyxm = ""; | 
 |  |  |             fyxm += f.getItemname() == null ? "" : f.getItemname(); | 
 |  |  |             fyxm += f.getAmount() + "元"; | 
 |  |  |             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("CWSH", serviceFund.getFinancechecher() == null ? "" : serviceFund.getFinancechecher()); | 
 |  |  |  | 
 |  |  |         dataMap.put("YYMMDD", time); | 
 |  |  |         dataMap.put("XM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname()); | 
 |  |  |         dataMap.put("XM", serviceFund.getDonorname() == null ? "" : serviceFund.getDonorname().trim()); | 
 |  |  |         dataMap.put("GZRY", serviceFund.getUsername() == null ? "" : serviceFund.getUsername()); | 
 |  |  |         dataMap.put("ZZ", serviceFund.getManagername() == null ? "" : serviceFund.getManagername()); | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); | 
 |  |  |         map.put("downloadName", name + ".doc"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); | 
 |  |  |         map.put("downloadName", name + ".doc"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); | 
 |  |  |         map.put("downloadName", name + ".doc"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("downloadUrl", "/profile/download/wordtemplate/" + name + ".doc"); | 
 |  |  |         map.put("downloadName", name + ".doc"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 费用类型计数 | 
 |  |  |      */ | 
 |  |  | //    @NotRepeatCommit(key = "param:arg[1]", value = 30000) | 
 |  |  |     @ApiOperation("费用类型计数") | 
 |  |  |     @GetMapping(value = "/countItem/{infoid}/{itemid}") | 
 |  |  |     public AjaxResult countItem(@PathVariable Long infoid, @PathVariable Long 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); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 导出专家报销费用汇总 | 
 |  |  |      */ | 
 |  |  |     @ApiOperation("导出专家报销费用汇总") | 
 |  |  |     @Log(title = "费用申请主", businessType = BusinessType.EXPORT) | 
 |  |  |     @GetMapping("/exportFeeSum/{faxId}") | 
 |  |  |     public Map<String, Object> exportFeeSum(@PathVariable Integer faxId) { | 
 |  |  |         Map<String, Object> map = serviceFundService.exportFeeSum(faxId); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |