diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java index 6c9f5951c6..b13f6ef26e 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java @@ -40,6 +40,7 @@ import com.yxt.anrui.buscenter.api.busbillapplication.*; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder; import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel; import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice; +import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle; import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp; import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication; import org.apache.ibatis.annotations.Mapper; @@ -101,4 +102,8 @@ public interface BusBillApplicationMapper extends BaseMapper BaseVehicle selectByVinSid(String vehSid); CrmCustomerTemp selectByCustomerSid(String openTickSid); + + BaseVehicle selectVinNoByVinSid(String vehSid); + + BusSalesOrderVehicle selectByBorrowSid(@Param("contractNo") String contractNo, @Param("vehSid") String vehSid); } \ No newline at end of file diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml index 116c447b24..fa6879e603 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml @@ -129,4 +129,14 @@ + + + + \ No newline at end of file diff --git a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java index 64a7782aef..4446ee8f23 100644 --- a/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java +++ b/anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java @@ -53,6 +53,7 @@ import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder; import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderDetailsVo; import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel; import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice; +import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle; import com.yxt.anrui.buscenter.biz.busbillfile.BusBillFileService; import com.yxt.anrui.buscenter.biz.busbilltrailer.BusBillTrailerService; import com.yxt.anrui.buscenter.biz.busbillvehicle.BusBillVehicleService; @@ -68,8 +69,11 @@ import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication; import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationDto; import com.yxt.anrui.fin.api.finbilltrailer.FinBillTrailerDto; import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleDto; +import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicing; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo; import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign; +import com.yxt.anrui.riskcenter.api.loannoguaranteecreditreview.LoanNoGuaranteeCreditReviewDetailsVo; +import com.yxt.anrui.riskcenter.api.loannoguaranteecreditreview.LoanNoGuaranteeCreditReviewFeign; import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeign; import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo; import com.yxt.common.base.config.component.DocPdfComponent; @@ -122,6 +126,8 @@ public class BusBillApplicationService extends MybatisBaseService saveOrUpdateDto(BusBillApplicationDto dto) { ResultBean rb = ResultBean.fireFail(); @@ -1106,7 +1112,7 @@ public class BusBillApplicationService extends MybatisBaseService filesList = new ArrayList<>(); + //根据合同号查询销售订单数据 + BusSalesOrder busSalesOrder = baseMapper.selectByContract(contractNo); + SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData(); + BusSalesOrderModel busSalesOrderModel = baseMapper.selectByOrderSid(busSalesOrder.getSid()); + BusSalesOrderPrice busSalesOrderPrice = baseMapper.selectByPrices(busSalesOrder.getSid()); + if ("1".equals(busSalesOrder.getPayTypeKey())) {//全款 + List finBillVehicles = dto.getFinBillVehicles(); + //按开票名称sid分组 + Map> groupedByOpenTickSid = finBillVehicles.stream() + .collect(Collectors.groupingBy(BusBillVehicleDto::getOpenTickSid)); + //遍历分组并组装每组的数据 + groupedByOpenTickSid.forEach((openTickSid, sameOpenTickSidList) -> { + Map map = new HashMap<>(); + Map carMap = new HashMap<>(); + Map filemap = new HashMap<>(); + Map checkMap = new HashMap<>(); + FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.fetchDetailsVoBySid(openTickSid).getData(); + if (!openTickSid.equals(busSalesOrder.getAffiliatedCompanySid())) { + BusBillVehicleDto finBillVehicleDto = sameOpenTickSidList.get(0); + //生成开票申请书 + if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) { + ResultBean invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid()); + if (invoicingDetailsVoResultBean.getData() != null) { + map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName()); + } + } + map.put("contractNo", busSalesOrder.getContractNo()); + List list = new ArrayList<>(); + //====================================主车开始 + BillFileVo billFileVo = new BillFileVo(); + if (busSalesOrderModel != null) { + billFileVo.setCarName(busSalesOrderModel.getModelName()); + billFileVo.setNum(String.valueOf(sameOpenTickSidList.size())); + billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString()); + } + + billFileVo.setOpenPrice(dto.getOneBillMoney()); + billFileVo.setType(finBillVehicleDto.getBillTypeValue());//开票类型 + List vinNoString = new ArrayList<>(); + List lllList = new ArrayList<>(); + BillFileVo finalBillFileVo = billFileVo; + sameOpenTickSidList.forEach(v -> { + //车架号 + BaseVehicle baseVehicle = baseMapper.selectVinNoByVinSid(v.getVehSid()); + if(baseVehicle != null){ + finalBillFileVo.setVinNo(baseVehicle.getVinNo()); + } + List finBillTrailers = dto.getFinBillTrailers(); + finBillTrailers.removeAll(Collections.singleton(null)); + finBillTrailers = finBillTrailers.stream().filter(vv -> vv.getVinNo().contains(v.getVinNo())).collect(Collectors.toList()); + lllList.addAll(finBillTrailers); + + list.add(finalBillFileVo); + }); + + //==========================主车结束 + Map carNameMap = new HashMap<>(); + if (!lllList.isEmpty()) { + for (int i = 0; i < lllList.size(); i++) { + List trailerVinString = new ArrayList<>(); + BusBillTrailerDto finBillTrailerDto = lllList.get(i); + billFileVo = new BillFileVo(); + BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo()); + if (baseTrailer != null) { + BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid()); + if (baseTrailerModel != null) { + String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue(); + + billFileVo.setCarName(carName); + billFileVo.setVinNo(baseTrailer.getVinNo()); + billFileVo.setOpenPrice(finBillTrailerDto.getOneBillMoney()); + billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString()); + billFileVo.setType(finBillTrailerDto.getBillTypeValue()); + list.add(billFileVo); + } + } + } + } + + map.put("list", list); + map.put("name", finBillVehicleDto.getOpenTickName()); + String date = DateUtil.today(); + List dateString = Arrays.asList(date.split("-")); + String year = dateString.get(0); + String month = dateString.get(1); + String day = dateString.get(2); + map.put("year", year); + map.put("month", month); + map.put("day", day); + finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.fetchDetailsVoBySid(openTickSid).getData(); + if (!"02".equals(finBillVehicleDto.getBillTypeKey()) && finCompanyInvoicingDetailsVo != null) {//机动车 + if (finCompanyInvoicingDetailsVo != null) { + //生成车辆登记合同 + if (busSalesOrder != null) { + carMap.put("Yf", busSalesOrder.getCustomerName()); + carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称 + } + carMap.put("contractNo", "D" + map.get("contractNo")); + if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) { + ResultBean invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid()); + if (invoicingDetailsVoResultBean.getData() != null) { + carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName()); + } + } + carMap.put("date", date); + List carContractListVos = new ArrayList<>(); + for (BusBillVehicleDto salesOrderVehicle : sameOpenTickSidList) { + CarContractListVo carContractListVo = new CarContractListVo(); + BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid()); + carContractListVo.setBrand(baseVehicle.getModelName()); + carContractListVo.setVinNo(baseVehicle.getVinNo()); + carContractListVo.setEnginNo(baseVehicle.getEngineNo()); + carContractListVos.add(carContractListVo); + } + carMap.put("carLists", carContractListVos); + } + } + } + + if("1".equals(busSalesOrder.getPayTypeKey())){ + if (loanSolutions != null) { + if (!dto.getOneBillMoney().equals(loanSolutions.getMainVehicleAmount())) { + String remarks = ""; + String date = DateUtil.today(); + List dateString = Arrays.asList(date.split("-")); + String year = dateString.get(0); + String month = dateString.get(1); + String day = dateString.get(2); + filemap.put("year", year); + filemap.put("month", month); + filemap.put("day", day); + if (finCompanyInvoicingDetailsVo != null) { + filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称 + filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//乙方 + filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号 + filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//乙方证件号码 + filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址 + } else { + CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid()); + if (crmCustomerTemp != null) { + filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称 + filemap.put("customerName", crmCustomerTemp.getName());//乙方 + filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号 + filemap.put("idNo", crmCustomerTemp.getIDNumber());//乙方证件号码 + filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址 + } + } + filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型 + remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。"; + filemap.put("remarks", remarks); + filemap.put("busSid", busSalesOrder.getSid()); + ResultBean> mapResultBean = commonContractFeign.getModelMap(filemap); + checkMap = mapResultBean.getData(); + //生成新车空白合同 + checkMap.put("totalPrice", ""); + checkMap.put("priceRemarks", ""); + checkMap.put("depositTotal", ""); + checkMap.put("createOrgName", ""); + checkMap.put("payTypeKey", busSalesOrder.getPayTypeKey()); + } + } + } + try { + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + ExecutorService pool = new ThreadPoolExecutor(1, 2, + 1000, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); + + if (!map.isEmpty()) { + Future future1 = pool.submit(() -> { + return getInvoiceApplyFile(map); + }); + if (StringUtils.isNotBlank(future1.get())) { + File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get()); + filesList.add(file); + } + } + if (!carMap.isEmpty()) { + Future future2 = pool.submit(() -> { + return getCarFile(carMap); + }); + if (StringUtils.isNotBlank(future2.get())) { + File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get()); + filesList.add(file); + } + } + if("1".equals(busSalesOrder.getPayTypeKey())){ + Map finalCheckMap = checkMap; + if (!finalCheckMap.isEmpty()) { + Future future3 = pool.submit(() -> { + return blackFile(finalCheckMap); + }); + if (StringUtils.isNotBlank(future3.get())) { + File file = new File(docPdfComponent.getUploadTemplateUrl() + future3.get()); + filesList.add(file); + } + } + } + + + } catch (Exception e) { + e.printStackTrace(); + log.error("生成文件失败:==========================" + e.getMessage()); + } + + }); + if (filesList.size() > 0) { + String typeName = contractNo + "开票附件.pdf"; + try { + File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName); + fileUrl = typeName; + } + }else{ + if(StringUtils.isNotBlank(loanSolutions.getTypeKey())){//非担保、生成开票申请书和车辆登记合同 + List finBillVehicles = dto.getFinBillVehicles(); + for (BusBillVehicleDto v : finBillVehicles) { + BusSalesOrderVehicle busSalesOrderVehicle = baseMapper.selectByBorrowSid(dto.getContractNo(), v.getVehSid()); + LoanNoGuaranteeCreditReviewDetailsVo loanNoGuaranteeCreditReviewDetailsVo = loanNoGuaranteeCreditReviewFeign.selByBorrSid(busSalesOrderVehicle.getBorrowerSid()).getData(); + if ("2".equals(loanNoGuaranteeCreditReviewDetailsVo.getType())) {//登记在挂靠公司 + v.setOpenTickSid(loanNoGuaranteeCreditReviewDetailsVo.getAffiliatedCompanySid()); + v.setOpenTickName(loanNoGuaranteeCreditReviewDetailsVo.getAffiliatedCompany()); + v.setBillTypeKey(busSalesOrder.getBillingTypeKey()); + v.setBillTypeValue(busSalesOrder.getBillingType()); + } + } + //按开票名称sid分组 + Map> groupedByOpenTickSid = finBillVehicles.stream() + .collect(Collectors.groupingBy(BusBillVehicleDto::getOpenTickSid)); + //遍历分组并组装每组的数据 + groupedByOpenTickSid.forEach((openTickSid, sameOpenTickSidList) -> { + Map map = new HashMap<>(); + Map carMap = new HashMap<>(); + BusBillVehicleDto finBillVehicleDto = sameOpenTickSidList.get(0); + //生成开票申请书 + if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) { + ResultBean invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid()); + if (invoicingDetailsVoResultBean.getData() != null) { + map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName()); + } + } + map.put("contractNo", busSalesOrder.getContractNo()); + List list = new ArrayList<>(); + //====================================主车开始 + BillFileVo billFileVo = new BillFileVo(); + if (busSalesOrderModel != null) { + billFileVo.setCarName(busSalesOrderModel.getModelName()); + billFileVo.setNum(String.valueOf(sameOpenTickSidList.size())); + billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString()); + } + + billFileVo.setOpenPrice(dto.getOneBillMoney()); + billFileVo.setType(finBillVehicleDto.getBillTypeValue());//开票类型 + List vinNoString = new ArrayList<>(); + List lllList = new ArrayList<>(); + BillFileVo finalBillFileVo = billFileVo; + sameOpenTickSidList.forEach(v -> { + //车架号 + BaseVehicle baseVehicle = baseMapper.selectVinNoByVinSid(v.getVehSid()); + if(baseVehicle != null){ + finalBillFileVo.setVinNo(baseVehicle.getVinNo()); + } + List finBillTrailers = dto.getFinBillTrailers(); + finBillTrailers.removeAll(Collections.singleton(null)); + finBillTrailers = finBillTrailers.stream().filter(vv -> vv.getVinNo().contains(v.getVinNo())).collect(Collectors.toList()); + lllList.addAll(finBillTrailers); + list.add(finalBillFileVo); + }); + + //==========================主车结束 + Map carNameMap = new HashMap<>(); + if (!lllList.isEmpty()) { + for (int i = 0; i < lllList.size(); i++) { + List trailerVinString = new ArrayList<>(); + BusBillTrailerDto finBillTrailerDto = lllList.get(i); + billFileVo = new BillFileVo(); + BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo()); + if (baseTrailer != null) { + BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid()); + if (baseTrailerModel != null) { + String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue(); + billFileVo.setCarName(carName); + billFileVo.setVinNo(baseTrailer.getVinNo()); + billFileVo.setOpenPrice(finBillTrailerDto.getOneBillMoney()); + billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString()); + billFileVo.setType(finBillTrailerDto.getBillTypeValue()); + list.add(billFileVo); + } + } + } + } + map.put("list", list); + map.put("name", finBillVehicleDto.getOpenTickName()); + String date = DateUtil.today(); + List dateString = Arrays.asList(date.split("-")); + String year = dateString.get(0); + String month = dateString.get(1); + String day = dateString.get(2); + map.put("year", year); + map.put("month", month); + map.put("day", day); + FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.fetchDetailsVoBySid(openTickSid).getData(); + if (!"02".equals(finBillVehicleDto.getBillTypeKey()) && finCompanyInvoicingDetailsVo != null) {//机动车 + if (finCompanyInvoicingDetailsVo != null) { + //生成车辆登记合同 + if (busSalesOrder != null) { + carMap.put("Yf", busSalesOrder.getCustomerName()); + carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称 + } + carMap.put("contractNo", "D" + map.get("contractNo")); + if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) { + ResultBean invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid()); + if (invoicingDetailsVoResultBean.getData() != null) { + carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName()); + } + } + carMap.put("date", date); + List carContractListVos = new ArrayList<>(); + for (BusBillVehicleDto salesOrderVehicle : sameOpenTickSidList) { + CarContractListVo carContractListVo = new CarContractListVo(); + BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid()); + carContractListVo.setBrand(baseVehicle.getModelName()); + carContractListVo.setVinNo(baseVehicle.getVinNo()); + carContractListVo.setEnginNo(baseVehicle.getEngineNo()); + carContractListVos.add(carContractListVo); + } + carMap.put("carLists", carContractListVos); + } + } + try { + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + ExecutorService pool = new ThreadPoolExecutor(1, 2, + 1000, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); + + if (!map.isEmpty()) { + Future future1 = pool.submit(() -> { + return getInvoiceApplyFile(map); + }); + if (StringUtils.isNotBlank(future1.get())) { + File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get()); + filesList.add(file); + } + } + if (!carMap.isEmpty()) { + Future future2 = pool.submit(() -> { + return getCarFile(carMap); + }); + if (StringUtils.isNotBlank(future2.get())) { + File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get()); + filesList.add(file); + } + } + } catch (Exception e) { + e.printStackTrace(); + log.error("生成文件失败:==========================" + e.getMessage()); + } + }); + if (filesList.size() > 0) { + String typeName = contractNo + "开票附件.pdf"; + try { + File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName); + fileUrl = typeName; + } + + } + + } + if(StringUtils.isNotBlank(fileUrl)){ + BusBillApplication finBillApplication = fetchBySid(dto.getSid()); + finBillApplication.setFileUrl(fileUrl); + baseMapper.updateById(finBillApplication); + } + return fileUrl; } } \ No newline at end of file