From 05b8a795113b18764dbfd250ed09ae36ae954d6b Mon Sep 17 00:00:00 2001 From: fanzongzhe <285169773@qq.com> Date: Tue, 16 Apr 2024 16:44:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E9=87=91=E5=8D=A0=E7=94=A8=E8=B4=B9?= =?UTF-8?q?=E8=AE=A1=E6=8F=90=E4=B8=8B=E8=BD=BDpdf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinCollectionConfirmationService.java | 9 + .../LoanPushFundHistory.java | 6 + .../LoanPushFundHistoryFeign.java | 17 + .../LoanPushFundHistoryFeignFallback.java | 18 + .../LoanPushFundHistoryPdfVo.java | 22 + .../LoanPushFundHistoryQuery.java | 23 + .../LoanPushFundHistoryVo.java | 21 + .../LoanPushFundHistoryMapper.java | 11 + .../LoanPushFundHistoryMapper.xml | 54 +- .../LoanPushFundHistoryRest.java | 23 + .../LoanPushFundHistoryService.java | 153 +- .../ScheduledRepaymentPlanDetailsService.java | 11 + .../src/main/resources/ftl/vouchers/fund.ftl | 1919 +++++++++++++++++ .../计提资金占用费/fund.ftl | 3 + .../计提资金占用费.docx | Bin 0 -> 17798 bytes 15 files changed, 2285 insertions(+), 5 deletions(-) create mode 100644 anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryPdfVo.java create mode 100644 anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryQuery.java create mode 100644 anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryVo.java create mode 100644 anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/fund.ftl create mode 100644 工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/fund.ftl create mode 100644 工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/计提资金占用费.docx diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java index 825366b23a..b5dd939aba 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincollectionconfirmation/FinCollectionConfirmationService.java @@ -3819,6 +3819,7 @@ public class FinCollectionConfirmationService extends MybatisBaseService fundHistoryList); + @ApiOperation("资金占用费计提列表") + @PostMapping("/listPage") + public ResultBean> listPage(@RequestBody PagerQuery pq); + + @ApiOperation("根据busVinSid查询上次计提时间") + @PostMapping("/getLastDateByBusVinSid") + public ResultBean getLastDateByBusVinSid(@RequestParam("busVinSid") String busVinSid); + + @ApiOperation("下载资金占用费计提记录dpf") + @PostMapping("/fundCreatePdf") + public ResultBean fundCreatePdf(@RequestParam("times") String times, @RequestParam("orgPath") String orgPath); } \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryFeignFallback.java index 8bd71a9c63..4d1deb3677 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryFeignFallback.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryFeignFallback.java @@ -1,6 +1,9 @@ package com.yxt.anrui.riskcenter.api.loanpushfundhistory; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; import org.springframework.stereotype.Component; import java.util.List; @@ -14,4 +17,19 @@ public class LoanPushFundHistoryFeignFallback implements LoanPushFundHistoryFeig public int saveHistory(List fundHistoryList) { return 0; } + + @Override + public ResultBean> listPage(PagerQuery pq) { + return null; + } + + @Override + public ResultBean getLastDateByBusVinSid(String busVinSid) { + return null; + } + + @Override + public ResultBean fundCreatePdf(String times, String orgPath) { + return null; + } } \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryPdfVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryPdfVo.java new file mode 100644 index 0000000000..e4c6fca88a --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryPdfVo.java @@ -0,0 +1,22 @@ +package com.yxt.anrui.riskcenter.api.loanpushfundhistory; + +import lombok.Data; + +/** + * @author Fan + * @description + * @date 2024/4/16 10:32 + */ +@Data +public class LoanPushFundHistoryPdfVo { + private Integer sortNo; + private String bankName; + private String bankNo; + private String vinNo; + private String borrowerName; + private String saleDept; + private String lastDate; + private String days; + private String money; + private String loanNo; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryQuery.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryQuery.java new file mode 100644 index 0000000000..c98a2d64d8 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryQuery.java @@ -0,0 +1,23 @@ +package com.yxt.anrui.riskcenter.api.loanpushfundhistory; + +import com.yxt.common.core.query.Query; +import lombok.Data; + +/** + * @author Fan + * @description + * @date 2024/4/16 8:38 + */ +@Data +public class LoanPushFundHistoryQuery implements Query { + +// private String loanContractNo;//贷款合同号 +// private String bankName; //资方 +// private String bankContractNo;//资方合同号 +// private String vinNo;//车架号 +// private String borrowerName; //贷款人 +// private String salesDept; //销售部门 + private String startTimes; //计提开始时间 + private String endTimes; //计提结束时间 + private String orgPath; +} diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryVo.java new file mode 100644 index 0000000000..a247d28298 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanpushfundhistory/LoanPushFundHistoryVo.java @@ -0,0 +1,21 @@ +package com.yxt.anrui.riskcenter.api.loanpushfundhistory; + +import com.yxt.common.core.vo.Vo; +import lombok.Data; + +/** + * @author Fan + * @description + * @date 2024/4/16 8:37 + */ +@Data +public class LoanPushFundHistoryVo implements Vo { +// private String loanContractNo;//贷款合同号 +// private String bankName; //资方 +// private String bankContractNo;//资方合同号 +// private String vinNo;//车架号 +// private String borrowerName; //贷款人 +// private String salesDept; //销售部门 + private String times; //计提时间 + private String money; //本次计提金额 +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.java index 3d03a2f02b..b2aefc38a4 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.java @@ -1,7 +1,12 @@ package com.yxt.anrui.riskcenter.biz.loanpushfundhistory; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistory; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryPdfVo; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryVo; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanPlanDetailsVoForFundVoucher; import com.yxt.anrui.riskcenter.api.loantransferpaymentrecord.LoanTransferPaymentRecord; import org.apache.ibatis.annotations.Mapper; @@ -15,4 +20,10 @@ public interface LoanPushFundHistoryMapper extends BaseMapper list); + + String getLastDateByBusVinSid(@Param("busVinSid") String busVinSid); + + IPage listPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + List getFundPdfList(@Param("times") String times, @Param("useOrgSid") String useOrgSid); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.xml index fb5c3044bd..a2d0718078 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.xml +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryMapper.xml @@ -4,10 +4,60 @@ - insert into loan_push_fund_history(sid,busVinSid,useOrgSid,useOrgName,fund) + insert into loan_push_fund_history(sid,busVinSid,useOrgSid,useOrgName,fund,lastAccrualDate) values - (#{item.sid},#{item.busVinSid},#{item.useOrgSid},#{item.useOrgName},#{item.fund}) + (#{item.sid},#{item.busVinSid},#{item.useOrgSid},#{item.useOrgName},#{item.fund},#{item.lastAccrualDate}) + + + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryRest.java index d31184bb03..38006462e4 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryRest.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryRest.java @@ -2,6 +2,12 @@ package com.yxt.anrui.riskcenter.biz.loanpushfundhistory; import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistory; import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryFeign; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryQuery; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryVo; +import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistoryVo; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; @@ -22,4 +28,21 @@ public class LoanPushFundHistoryRest implements LoanPushFundHistoryFeign { public int saveHistory(List fundHistoryList) { return loanPushFundHistoryService.saveLists(fundHistoryList); } + + @Override + public ResultBean> listPage(PagerQuery pq) { + ResultBean> rb = ResultBean.fireFail(); + PagerVo pv = loanPushFundHistoryService.listPage(pq); + return rb.success().setData(pv); + } + + @Override + public ResultBean getLastDateByBusVinSid(String busVinSid) { + return loanPushFundHistoryService.getLastDateByBusVinSid(busVinSid); + } + + @Override + public ResultBean fundCreatePdf(String times, String orgPath) { + return loanPushFundHistoryService.fundCreatePdf(times,orgPath); + } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryService.java index c804eea8e7..7ba89a0906 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanpushfundhistory/LoanPushFundHistoryService.java @@ -1,13 +1,34 @@ package com.yxt.anrui.riskcenter.biz.loanpushfundhistory; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign; +import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo; +import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistory; -import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanPlanDetailsVoForFundVoucher; -import com.yxt.anrui.riskcenter.api.loantransferpaymentrecord.LoanTransferPaymentRecord; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryPdfVo; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryQuery; +import com.yxt.anrui.riskcenter.api.loanpushfundhistory.LoanPushFundHistoryVo; +import com.yxt.common.base.config.component.DocPdfComponent; import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.PagerUtil; +import com.yxt.common.base.utils.WordConvertUtils; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.io.File; +import java.io.InputStream; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +import static java.util.Comparator.comparing; /** * @description: @@ -17,8 +38,134 @@ import java.util.List; @Service public class LoanPushFundHistoryService extends MybatisBaseService { + @Autowired + private SysStaffOrgFeign sysStaffOrgFeign; + @Autowired + private SysOrganizationFeign sysOrganizationFeign; + @Autowired + private DocPdfComponent docPdfComponent; + public int saveLists(List list) { return baseMapper.saveLists(list); } + public PagerVo listPage(PagerQuery pq) { + LoanPushFundHistoryQuery pagerQuery = pq.getParams(); + QueryWrapper qw = new QueryWrapper<>(); + ResultBean orgSidByPath = sysStaffOrgFeign.getOrgSidByPath(pagerQuery.getOrgPath()); + if (orgSidByPath.getSuccess()) { + qw.eq("a.useOrgSid", orgSidByPath.getData()); + } + String startDate = pagerQuery.getStartTimes(); + String endDate = pagerQuery.getEndTimes(); + qw.apply(StringUtils.isNotEmpty(startDate), "date_format(a.times,'%Y-%m-%d %H:%I') >= date_format('" + startDate + "','%Y-%m-%d %H:%I')"). + apply(StringUtils.isNotEmpty(endDate), "date_format(a.times,'%Y-%m-%d %H:%I') <= date_format('" + endDate + "','%Y-%m-%d %H:%I')" + ); + qw.groupBy("a.times", "a.useOrgSid"); + qw.orderByDesc("a.times"); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.listPage(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } + + public ResultBean getLastDateByBusVinSid(String busVinSid) { + ResultBean rb = ResultBean.fireFail(); + String returnTimes = baseMapper.getLastDateByBusVinSid(busVinSid); + if (StringUtils.isNotBlank(returnTimes)) { + return rb.success().setData(returnTimes); + } + return rb.success().setData(""); + } + + public ResultBean fundCreatePdf(String times, String orgPath) { + ResultBean rb = ResultBean.fireFail(); + String finalPath = ""; + Map dataMap = new HashMap(); + List> newList = new ArrayList<>(); + dataMap.put("percent", "日万七"); + String useOrgSid = ""; + ResultBean orgSidByPath = sysStaffOrgFeign.getOrgSidByPath(orgPath); + if (orgSidByPath.getSuccess()) { + useOrgSid = orgSidByPath.getData(); + ResultBean organizationVo = sysOrganizationFeign.fetchBySid(useOrgSid); + if (organizationVo.getSuccess()) { + SysOrganizationVo organizationVoData = organizationVo.getData(); + if (null != organizationVoData) { + dataMap.put("company", organizationVoData.getName()); + } + } + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date parse = null; + try { + parse = sdf.parse(times); + dataMap.put("times", sdf.format(parse)); + } catch (ParseException e) { + e.printStackTrace(); + } + List records = baseMapper.getFundPdfList(times, useOrgSid); + if (!records.isEmpty()) { + for (LoanPushFundHistoryPdfVo details : records) { + Map map = new HashMap<>(); + if (null != details) { + map.put("sortNo", details.getSortNo()); + if (StringUtils.isNotBlank(details.getLoanNo())) { + map.put("loanNo", details.getLoanNo()); + } + if (StringUtils.isNotBlank(details.getVinNo())) { + map.put("vinNo", details.getVinNo()); + } + if (StringUtils.isNotBlank(details.getBankName())) { + map.put("bankName", details.getBankName()); + } + if (StringUtils.isNotBlank(details.getBankNo())) { + map.put("bankNo", details.getBankNo()); + } + if (StringUtils.isNotBlank(details.getBorrowerName())) { + map.put("borrowerName", details.getBorrowerName()); + } + if (StringUtils.isNotBlank(details.getSaleDept())) { + map.put("saleDept", details.getSaleDept()); + } + if (StringUtils.isNotBlank(details.getLastDate())) { + map.put("lastDate", details.getLastDate()); + } + if (StringUtils.isNotBlank(details.getDays())) { + map.put("days", details.getDays()); + } + if (StringUtils.isNotBlank(details.getMoney())) { + map.put("money", details.getMoney()); + } + + } + newList.add(map); + } + } + dataMap.put("newList", newList); + String temp = "/template/"; + String targetPath = docPdfComponent.getUploadTemplateUrl(); + try { + //获取模板 + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/vouchers/fund.ftl"); + //生成word文件名 + String dateStr = DateUtil.format(new Date(), "yyyyMMdd"); + long seconds = System.currentTimeMillis(); + String typeName = dateStr + seconds + ".doc"; + File file = new File(targetPath + "templateVouchers" + seconds + ".ftl"); + File dir = new File(targetPath); + WordConvertUtils.inputStreamToFile(inputStream, file); + WordConvertUtils.creatWord1(dataMap, file, targetPath, typeName, dir); + //新生成的word路径 + String wordPath = targetPath + typeName; + String pdfName = "资金占用费计提" + dateStr + seconds + ".pdf"; + WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName); + finalPath = temp + pdfName; + } catch (NoClassDefFoundError e) { + e.printStackTrace(); + finalPath = targetPath; + } + + return rb.success().setData(finalPath); + } } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/ScheduledRepaymentPlanDetailsService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/ScheduledRepaymentPlanDetailsService.java index d5ded521d1..3cd0d64035 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/ScheduledRepaymentPlanDetailsService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/ScheduledRepaymentPlanDetailsService.java @@ -34,6 +34,8 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -164,6 +166,7 @@ public class ScheduledRepaymentPlanDetailsService { public void pushFundVoucher() { List useOrgSidList = loanRepaymentPlanDetailsService.selUseOrgSidListForFundVoucher(); useOrgSidList.removeAll(Collections.singleton(null)); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (!useOrgSidList.isEmpty()) { for (String u : useOrgSidList) { List fundVouchers = loanRepaymentPlanDetailsService.getFundForVoucher(u); @@ -255,6 +258,14 @@ public class ScheduledRepaymentPlanDetailsService { if (null != v.getDuePushMoney()) { loanPushFundHistory.setFund(v.getDuePushMoney()); } + String times = loanPushFundHistoryService.getLastDateByBusVinSid(v.getBusVinSid()).getData(); + if (StringUtils.isNotBlank(times)) { + try { + loanPushFundHistory.setLastAccrualDate(sdf.parse(times)); + } catch (ParseException e) { + e.printStackTrace(); + } + } fundHistoryList.add(loanPushFundHistory); } generalVoucher.setVoucherDetails(voucherDetails); diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/fund.ftl b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/fund.ftl new file mode 100644 index 0000000000..b87aa30224 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/fund.ftl @@ -0,0 +1,1919 @@ + + + + Administrator + FAN + 2024-04-12T01:09:00Z + 2024-04-16T02:24:10Z + 7200 + 1 + 0 + 0 + 0 + 0 + 0 + 14 + + + 2052-12.1.0.16729 + CBA12F6EAE3B4999AC52E9A4CB71CC29_13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 资金占用费计提 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${company!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 计提率:${percent!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 计提时间:${times!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 计提明细 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 序号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 贷款合同号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 资方 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 资方合同号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 车架号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 贷款人 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 销售部门 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 上次计提日期 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 计提天数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 本次计提金额 + + + + + <#list newList as list> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.sortNo!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.loanNo!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.bankName!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.bankNo!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.vinNo!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.borrowerName!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.saleDept!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.lastDate!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.days!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${list.money!} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PAGE \* MERGEFORMAT + + + + + + 1 + + + + + + 页 共 + + + + + + NUMPAGES \* MERGEFORMAT + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/fund.ftl b/工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/fund.ftl new file mode 100644 index 0000000000..efc4a0b9c4 --- /dev/null +++ b/工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/fund.ftl @@ -0,0 +1,3 @@ + + +AdministratorFAN2024-04-12T01:09:00Z2024-04-16T02:24:10Z7200100000142052-12.1.0.16729CBA12F6EAE3B4999AC52E9A4CB71CC29_13资金占用费计提 ${company!}计提率:${percent!}计提时间:${times!}计提明细序号贷款合同号资方资方合同号车架号贷款人销售部门上次计提日期计提天数本次计提金额${list.sortNo!}${list.loanNo!}${list.bankName!}${list.bankNo!}${list.vinNo!}${list.borrowerName!}${list.saleDept!}${list.lastDate!}${list.days!}${list.money!} PAGE \* MERGEFORMAT 1 页 共 NUMPAGES \* MERGEFORMAT 1 \ No newline at end of file diff --git a/工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/计提资金占用费.docx b/工作内容需要的文档/单据模板/财务凭证打印模板/计提资金占用费/计提资金占用费.docx new file mode 100644 index 0000000000000000000000000000000000000000..af39633d7426e7a904ddfcd5442bf10f78ebe8ae GIT binary patch literal 17798 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