Browse Source

逾期对账,垫款下载pdf

master
fanzongzhe 1 year ago
parent
commit
c053dbcd22
  1. 4
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanbepadsincereapply/LoanBePadsincereApplyFeign.java
  2. 5
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanbepadsincereapply/LoanBePadsincereApplyFeignFallback.java
  3. 4
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeign.java
  4. 5
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbepadsincereapply/LoanBePadsincereApplyRest.java
  5. 187
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbepadsincereapply/LoanBePadsincereApplyService.java
  6. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbuckleapply/LoanBuckleApplyService.java
  7. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanmonthlyaccrualapply/LoanMonthlyAccrualApplyService.java
  8. 5
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinRest.java
  9. 163
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinService.java
  10. 2
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java
  11. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml
  12. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java
  13. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loantransferpaymentapply/LoanTransferPaymentApplyService.java
  14. 2543
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/overDue.ftl
  15. 3317
      anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/padsincere.ftl
  16. 3
      工作内容需要的文档/单据模板/财务凭证打印模板/逾期对账/overDue.ftl
  17. 36
      工作内容需要的文档/单据模板/财务凭证打印模板/逾期对账/逾期对账.docx

4
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanbepadsincereapply/LoanBePadsincereApplyFeign.java

@ -87,6 +87,10 @@ public interface LoanBePadsincereApplyFeign {
@ResponseBody @ResponseBody
public ResultBean delBySids(@RequestBody String[] sids); public ResultBean delBySids(@RequestBody String[] sids);
@ApiOperation("下载垫还审批dpf")
@PostMapping("/bepadsincereCreatePdf")
public ResultBean<String> bepadsincereCreatePdf(@RequestParam("sid") String sid);
@ApiOperation("根据SID获取一条记录") @ApiOperation("根据SID获取一条记录")
@GetMapping("/fetchDetailsBySid/{sid}") @GetMapping("/fetchDetailsBySid/{sid}")
@ResponseBody @ResponseBody

5
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanbepadsincereapply/LoanBePadsincereApplyFeignFallback.java

@ -75,6 +75,11 @@ public class LoanBePadsincereApplyFeignFallback implements LoanBePadsincereApply
return ResultBean.fireFail().setMsg("接口anrui-riskcenter/loanbepadsincereapply/delBySids无法访问"); return ResultBean.fireFail().setMsg("接口anrui-riskcenter/loanbepadsincereapply/delBySids无法访问");
} }
@Override
public ResultBean<String> bepadsincereCreatePdf(String sid) {
return null;
}
@Override @Override
public ResultBean<LoanBePadsincereApplyDetailsVo> fetchDetailsBySid(String sid){ public ResultBean<LoanBePadsincereApplyDetailsVo> fetchDetailsBySid(String sid){
ResultBean rb = ResultBean.fireFail(); ResultBean rb = ResultBean.fireFail();

4
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanoverduefin/LoanOverdueFinFeign.java

@ -43,6 +43,10 @@ public interface LoanOverdueFinFeign {
@ApiOperation(value = "下载模板") @ApiOperation(value = "下载模板")
public void downloadExcel(); public void downloadExcel();
@ApiOperation("下载逾期对账审批dpf")
@PostMapping("/overdueCreatePdf")
public ResultBean<String> overdueCreatePdf(@RequestParam("sid") String sid);
@ApiOperation(value = "导入") @ApiOperation(value = "导入")
@PostMapping("/getExcelInfo") @PostMapping("/getExcelInfo")
ResultBean<List<ExcelFinVo>> getExcelInfo(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request, @RequestParam(value = "useOrgSid") String useOrgSid) throws IOException; ResultBean<List<ExcelFinVo>> getExcelInfo(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request, @RequestParam(value = "useOrgSid") String useOrgSid) throws IOException;

5
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbepadsincereapply/LoanBePadsincereApplyRest.java

@ -122,6 +122,11 @@ public class LoanBePadsincereApplyRest implements LoanBePadsincereApplyFeign {
return loanBePadsincereApplyService.delAllBySids(sids); return loanBePadsincereApplyService.delAllBySids(sids);
} }
@Override
public ResultBean<String> bepadsincereCreatePdf(String sid) {
return loanBePadsincereApplyService.bepadsincereCreatePdf(sid);
}
@Override @Override
@ApiOperation("根据SID获取一条记录") @GetMapping("/fetchDetailsBySid/{sid}") @ApiOperation("根据SID获取一条记录") @GetMapping("/fetchDetailsBySid/{sid}")

187
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbepadsincereapply/LoanBePadsincereApplyService.java

@ -62,6 +62,7 @@ import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum; import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.portal.api.flow.PCHistTaskListAndCommentList;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign; import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo; import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
@ -75,21 +76,30 @@ import com.yxt.anrui.riskcenter.api.loanbepadsincereveh.LoanBePadsincereVehDetai
import com.yxt.anrui.riskcenter.api.loanbepadsincereveh.LoanBePadsincereVehDto; import com.yxt.anrui.riskcenter.api.loanbepadsincereveh.LoanBePadsincereVehDto;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFile; import com.yxt.anrui.riskcenter.api.loanfile.LoanFile;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFileEnum; import com.yxt.anrui.riskcenter.api.loanfile.LoanFileEnum;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.MonthlyAccrualSourceLCVo;
import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory; import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory;
import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanPlanDetailsVoForFundVoucher; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanPlanDetailsVoForFundVoucher;
import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails;
import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanMoneyVo; import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanMoneyVo;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentScheduleDetailsVo; import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentScheduleDetailsVo;
import com.yxt.anrui.riskcenter.api.loantransferpaymentapply.LoanTransferPaymentApply;
import com.yxt.anrui.riskcenter.api.loantransferpaymentapply.LoanTransferPaymentRecordVo;
import com.yxt.anrui.riskcenter.api.loantransferpaymentrecord.LoanTransferPaymentRecord; import com.yxt.anrui.riskcenter.api.loantransferpaymentrecord.LoanTransferPaymentRecord;
import com.yxt.anrui.riskcenter.biz.loanbepadsincereveh.LoanBePadsincereVehService; import com.yxt.anrui.riskcenter.biz.loanbepadsincereveh.LoanBePadsincereVehService;
import com.yxt.anrui.riskcenter.biz.loanfile.LoanFileService; import com.yxt.anrui.riskcenter.biz.loanfile.LoanFileService;
import com.yxt.anrui.riskcenter.biz.loanrepaymentplandetails.LoanRepaymentPlanDetailsService; import com.yxt.anrui.riskcenter.biz.loanrepaymentplandetails.LoanRepaymentPlanDetailsService;
import com.yxt.anrui.riskcenter.biz.loanrepaymentschedule.LoanRepaymentScheduleService; import com.yxt.anrui.riskcenter.biz.loanrepaymentschedule.LoanRepaymentScheduleService;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.utils.ConstantUtils;
import com.yxt.common.base.utils.DateUtils; import com.yxt.common.base.utils.DateUtils;
import com.yxt.common.base.utils.WordConvertUtils;
import com.yxt.messagecenter.api.message.Message;
import com.yxt.messagecenter.api.message.MessageFeign; import com.yxt.messagecenter.api.message.MessageFeign;
import com.yxt.messagecenter.api.message.MessageFlowVo; import com.yxt.messagecenter.api.message.MessageFlowVo;
import com.yxt.messagecenter.api.message.MessageFlowableQuery; import com.yxt.messagecenter.api.message.MessageFlowableQuery;
import com.yxt.messagecenter.api.messagelist.MessageList;
import com.yxt.messagecenter.api.messagelist.MessageListFeign;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.PagerUtil;
@ -119,6 +129,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.Comparator.comparing;
/** /**
* Project: anrui-riskcenter(垫款申请) <br/> * Project: anrui-riskcenter(垫款申请) <br/>
* File: LoanBePadsincereApplyService.java <br/> * File: LoanBePadsincereApplyService.java <br/>
@ -134,7 +146,12 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
public class LoanBePadsincereApplyService extends MybatisBaseService<LoanBePadsincereApplyMapper, LoanBePadsincereApply> { public class LoanBePadsincereApplyService extends MybatisBaseService<LoanBePadsincereApplyMapper, LoanBePadsincereApply> {
@Autowired
private DocPdfComponent docPdfComponent;
@Autowired
private MessageListFeign messageListFeign;
@Autowired
private com.yxt.anrui.portal.api.flow.FlowableFeign flowableFeignPro;
@Autowired @Autowired
private SysUserFeign sysUserFeign; private SysUserFeign sysUserFeign;
@Autowired @Autowired
@ -1228,4 +1245,172 @@ public class LoanBePadsincereApplyService extends MybatisBaseService<LoanBePadsi
} }
return rb.success(); return rb.success();
} }
public ResultBean<String> bepadsincereCreatePdf(String sid) {
ResultBean rb = ResultBean.fireFail();
String finalPath = "";
String filePath = "";
Map<String, Object> dataMap = new HashMap();
List<Map<String, Object>> newList = new ArrayList<>();
LoanBePadsincereApply data = fetchBySid(sid);
if (null != data) {
if (!data.getNodeState().equals("已办结")) {
return rb.setMsg("无法下载没有办结的审批记录。");
}
List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.BEPADSINCERE.getAttachType());
if (!files.isEmpty()) {
List<String> stringList = new ArrayList<>();
for (LoanFile file : files) {
if (StringUtils.isNotBlank(file.getFileName()) && StringUtils.isNotBlank(file.getFileType())) {
stringList.add(file.getFileName() + "." + file.getFileType());
}
}
if (!stringList.isEmpty()) {
filePath = String.join(",", stringList);
}
}
dataMap.put("createTime", DateUtil.formatDate(data.getCreateTime()));
if (StringUtils.isNotBlank(data.getUseOrgName())) {
dataMap.put("company", data.getUseOrgName());
}
if (StringUtils.isNotBlank(data.getCreateByName())) {
dataMap.put("applyName", data.getCreateByName());
}
if (StringUtils.isNotBlank(data.getDeptName())) {
dataMap.put("dept", data.getDeptName());
}
if (StringUtils.isNotBlank(data.getBillNo())) {
dataMap.put("billNo", data.getBillNo());
}
if (StringUtils.isNotBlank(data.getFinPaymentFormValue())) {
dataMap.put("payWay", data.getFinPaymentFormValue());
}
if (StringUtils.isNotBlank(data.getPaymentRemarks())) {
dataMap.put("payRemarks", data.getPaymentRemarks());
}
if (StringUtils.isNotBlank(data.getRemarks())) {
dataMap.put("otherShow", data.getRemarks());
}
if (StringUtils.isNotBlank(filePath)) {
dataMap.put("filePath", filePath);
}
BigDecimal sumMoney = new BigDecimal(0);
//获取审批记录
if (StringUtils.isNotBlank(data.getProcInstSid())) {
List<PCHistTaskListAndCommentList> flowRecordVo = flowableFeignPro.flowRecordAndComment(data.getProcInstSid(), "1").getData();
List<MonthlyAccrualSourceLCVo> sourceLCVos = new ArrayList<>();
for (PCHistTaskListAndCommentList flowTask : flowRecordVo) {
if (flowTask.getFlowableRecordVo() != null) {
Map<String, Object> flowableRecordVo = flowTask.getFlowableRecordVo();
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
List<Map<String, Object>> taskUserInfos = ConstantUtils.getListData(flowableRecordVo, "taskUserInfos");
Map<String, Object> comment = ConstantUtils.getMap(flowableRecordVo, "comment");
String assigneeName = (String) taskUserInfos.get(0).get("assigneeName");
String comment1 = (String) comment.get("comment");
sourceLCVo.setName(assigneeName);
sourceLCVo.setComment(comment1);
sourceLCVo.setSpsj(flowableRecordVo.get("finishTime").toString());
sourceLCVos.add(sourceLCVo);
} else {
Map<String, Object> processCommentVo = flowTask.getProcessCommentVo();
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
sourceLCVo.setName(processCommentVo.get("title").toString());
sourceLCVo.setComment(processCommentVo.get("content").toString());
sourceLCVo.setSpsj(processCommentVo.get("time").toString());
sourceLCVos.add(sourceLCVo);
}
}
List<Message> messages = messageFeign.selectByBusinessSid(data.getSid()).getData();
if (messages.size() > 0) {
for (Message message : messages) {
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
String receiverNames = "";
List<MessageList> messageLists = messageListFeign.fetchByMainSid(message.getSid()).getData();
if (messageLists.size() > 0) {
for (MessageList messageList : messageLists) {
receiverNames = receiverNames + messageList.getReceiverName() + ",";
}
}
sourceLCVo.setName("系统");
sourceLCVo.setComment("抄送 " + receiverNames.substring(0, receiverNames.lastIndexOf(",")));
sourceLCVo.setSpsj(DateUtil.format(message.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
sourceLCVos.add(sourceLCVo);
}
}
sourceLCVos.sort(comparing(MonthlyAccrualSourceLCVo::getSpsj));
dataMap.put("lcList", sourceLCVos);
}
List<LoanBePadsincereVehDetailsVo> records = loanBePadsincereVehService.selByMainSid(sid);
if (!records.isEmpty()) {
int sortNo = 1;
for (LoanBePadsincereVehDetailsVo record : records) {
Map<String, Object> map = new HashMap<>();
LoanRepaymentPlanDetails details = loanRepaymentPlanDetailsService.fetchMainBankByBusVinSid(record.getBusVinSid());
if (null != details) {
map.put("sortNo", String.valueOf(sortNo++));
if (StringUtils.isNotBlank(record.getLoanContractNo())) {
map.put("loanNo", record.getLoanContractNo());
}
if (StringUtils.isNotBlank(details.getDept())) {
map.put("saleDept", details.getDept());
}
if (StringUtils.isNotBlank(record.getVinNo())) {
map.put("vinNo", record.getVinNo());
}
if (StringUtils.isNotBlank(record.getBankName())) {
map.put("bankName", record.getBankName());
}
if (StringUtils.isNotBlank(record.getBankContractNo())) {
map.put("bankNo", record.getBankContractNo());
}
if (StringUtils.isNotBlank(record.getBorrowerName())) {
map.put("borrowerName", record.getBorrowerName());
}
if (StringUtils.isNotBlank(record.getPeriod())) {
map.put("period", record.getPeriod());
}
if (StringUtils.isNotBlank(record.getSysBeMoney())) {
map.put("overDueMoney", record.getSysBeMoney());
}
if (StringUtils.isNotBlank(record.getBankBeMoney())) {
map.put("bankOverMoney", record.getBankBeMoney());
}
if (StringUtils.isNotBlank(record.getBankBeInter())) {
map.put("beInter", record.getBankBeInter());
}
if (StringUtils.isNotBlank(record.getPadMoney())) {
map.put("padMoney", record.getPadMoney());
sumMoney = sumMoney.add(new BigDecimal(record.getPadMoney()));
}
}
newList.add(map);
}
dataMap.put("amount", sumMoney.toString());
}
dataMap.put("newList", newList);
String temp = "/template/";
String targetPath = docPdfComponent.getUploadTemplateUrl();
try {
//获取模板
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/vouchers/padsincere.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);
}
} }

3
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanbuckleapply/LoanBuckleApplyService.java

@ -1238,6 +1238,9 @@ public class LoanBuckleApplyService extends MybatisBaseService<LoanBuckleApplyMa
List<Map<String, Object>> newList = new ArrayList<>(); List<Map<String, Object>> newList = new ArrayList<>();
LoanBuckleApply data = fetchBySid(sid); LoanBuckleApply data = fetchBySid(sid);
if (null != data) { if (null != data) {
if (!data.getNodeState().equals("已办结")) {
return rb.setMsg("无法下载没有办结的审批记录。");
}
List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.BUCKLE_APPLY.getAttachType()); List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.BUCKLE_APPLY.getAttachType());
if (!files.isEmpty()) { if (!files.isEmpty()) {
List<String> stringList = new ArrayList<>(); List<String> stringList = new ArrayList<>();

3
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanmonthlyaccrualapply/LoanMonthlyAccrualApplyService.java

@ -1053,6 +1053,9 @@ public class LoanMonthlyAccrualApplyService extends MybatisBaseService<LoanMonth
List<Map<String, Object>> newList = new ArrayList<>(); List<Map<String, Object>> newList = new ArrayList<>();
LoanMonthlyAccrualApply data = fetchBySid(sid); LoanMonthlyAccrualApply data = fetchBySid(sid);
if (null != data) { if (null != data) {
if (!data.getNodeState().equals("已办结")) {
return rb.setMsg("无法下载没有办结的审批记录。");
}
List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.ACCRUALAPPLY.getAttachType()); List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.ACCRUALAPPLY.getAttachType());
if (!files.isEmpty()) { if (!files.isEmpty()) {
List<String> stringList = new ArrayList<>(); List<String> stringList = new ArrayList<>();

5
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinRest.java

@ -71,6 +71,11 @@ public class LoanOverdueFinRest implements LoanOverdueFinFeign {
ExportExcelUtils.export(fileNameURL, list, DownloadExcelVo.class, response); ExportExcelUtils.export(fileNameURL, list, DownloadExcelVo.class, response);
} }
@Override
public ResultBean<String> overdueCreatePdf(String sid) {
return loanOverdueFinService.overdueCreatePdf(sid);
}
@Override @Override
public ResultBean<List<ExcelFinVo>> getExcelInfo(MultipartFile file, HttpServletRequest request,String useOrgSid) throws IOException { public ResultBean<List<ExcelFinVo>> getExcelInfo(MultipartFile file, HttpServletRequest request,String useOrgSid) throws IOException {
return loanOverdueFinService.getExcelInfo(file, request,useOrgSid); return loanOverdueFinService.getExcelInfo(file, request,useOrgSid);

163
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanoverduefin/LoanOverdueFinService.java

@ -12,6 +12,7 @@ import com.yxt.anrui.base.common.enums.BillTypeEnum;
import com.yxt.anrui.base.common.utils.Rule; import com.yxt.anrui.base.common.utils.Rule;
import com.yxt.anrui.base.common.utils.domain.BillNo; import com.yxt.anrui.base.common.utils.domain.BillNo;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder; import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.flowable.api.flow.FlowableFeign; import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowDelegateQuery; import com.yxt.anrui.flowable.api.flow2.FlowDelegateQuery;
@ -21,6 +22,7 @@ import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo; import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum; import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.portal.api.flow.PCHistTaskListAndCommentList;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign; import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo; import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
@ -28,6 +30,11 @@ import com.yxt.anrui.portal.api.sysuser.PrivilegeQuery;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign; import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo; import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanbepadsincereapply.ReturnExcelInfo; import com.yxt.anrui.riskcenter.api.loanbepadsincereapply.ReturnExcelInfo;
import com.yxt.anrui.riskcenter.api.loanbuckleapply.LoanBuckleApply;
import com.yxt.anrui.riskcenter.api.loanbuckleapplyrecord.LoanBuckleApplyRecord;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFile;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFileEnum;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.MonthlyAccrualSourceLCVo;
import com.yxt.anrui.riskcenter.api.loanoverduefin.*; import com.yxt.anrui.riskcenter.api.loanoverduefin.*;
import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverFinApplyDelegateQuery; import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverFinApplyDelegateQuery;
import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeQuery; import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeQuery;
@ -35,17 +42,25 @@ import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyNodeVo;
import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyTaskQuery; import com.yxt.anrui.riskcenter.api.loanoverduefin.flowable.OverdueApplyTaskQuery;
import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinAppDetailsVo; import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinAppDetailsVo;
import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto; import com.yxt.anrui.riskcenter.api.loanoverduefindetails.LoanOverdueFinDetailsDto;
import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentScheduleDetailsVo; import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentScheduleDetailsVo;
import com.yxt.anrui.riskcenter.biz.loanoverduefindetails.LoanOverdueFinDetailsService; import com.yxt.anrui.riskcenter.biz.loanoverduefindetails.LoanOverdueFinDetailsService;
import com.yxt.anrui.riskcenter.biz.loanrepaymentplandetails.LoanRepaymentPlanDetailsService;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.ConstantUtils;
import com.yxt.common.base.utils.PagerUtil; 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.query.PagerQuery;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo; import com.yxt.common.core.vo.PagerVo;
import com.yxt.messagecenter.api.message.Message;
import com.yxt.messagecenter.api.message.MessageFeign; import com.yxt.messagecenter.api.message.MessageFeign;
import com.yxt.messagecenter.api.message.MessageFlowVo; import com.yxt.messagecenter.api.message.MessageFlowVo;
import com.yxt.messagecenter.api.message.MessageFlowableQuery; import com.yxt.messagecenter.api.message.MessageFlowableQuery;
import com.yxt.messagecenter.api.messagelist.MessageList;
import com.yxt.messagecenter.api.messagelist.MessageListFeign;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
@ -66,6 +81,8 @@ import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static java.util.Comparator.comparing;
/** /**
* @description: * @description:
* @author: dimengzhe * @author: dimengzhe
@ -74,6 +91,10 @@ import java.util.stream.Collectors;
@Service @Service
public class LoanOverdueFinService extends MybatisBaseService<LoanOverdueFinMapper, LoanOverdueFin> { public class LoanOverdueFinService extends MybatisBaseService<LoanOverdueFinMapper, LoanOverdueFin> {
@Autowired
private MessageListFeign messageListFeign;
@Autowired
private com.yxt.anrui.portal.api.flow.FlowableFeign flowableFeignPro;
@Autowired @Autowired
private SysUserFeign sysUserFeign; private SysUserFeign sysUserFeign;
@Autowired @Autowired
@ -92,6 +113,10 @@ public class LoanOverdueFinService extends MybatisBaseService<LoanOverdueFinMapp
private FlowTaskFeign flowTaskFeign; private FlowTaskFeign flowTaskFeign;
@Autowired @Autowired
private FlowableFeign flowableFeign; private FlowableFeign flowableFeign;
@Autowired
private LoanRepaymentPlanDetailsService loanRepaymentPlanDetailsService;
@Autowired
private DocPdfComponent docPdfComponent;
public PagerVo<LoanOverdueFinVo> listPageVo(PagerQuery<LoanOverdueFinQuery> pq) { public PagerVo<LoanOverdueFinVo> listPageVo(PagerQuery<LoanOverdueFinQuery> pq) {
LoanOverdueFinQuery query = pq.getParams(); LoanOverdueFinQuery query = pq.getParams();
@ -894,4 +919,142 @@ public class LoanOverdueFinService extends MybatisBaseService<LoanOverdueFinMapp
} }
return rb.success().setData(loanOverdueFinAppVo); return rb.success().setData(loanOverdueFinAppVo);
} }
public ResultBean<String> overdueCreatePdf(String sid) {
ResultBean rb = ResultBean.fireFail();
String finalPath = "";
Map<String, Object> dataMap = new HashMap();
List<Map<String, Object>> newList = new ArrayList<>();
LoanOverdueFin data = fetchBySid(sid);
if (null != data) {
if (!data.getNodeState().equals("已办结")) {
return rb.setMsg("无法下载没有办结的审批记录。");
}
dataMap.put("createTime", DateUtil.formatDate(data.getCreateTime()));
if (StringUtils.isNotBlank(data.getUseOrgName())) {
dataMap.put("company", data.getUseOrgName());
}
if (StringUtils.isNotBlank(data.getCreateByName())) {
dataMap.put("applyName", data.getCreateByName());
}
if (StringUtils.isNotBlank(data.getCreateDept())) {
dataMap.put("dept", data.getCreateDept());
}
if (StringUtils.isNotBlank(data.getRemarks())) {
dataMap.put("remarks", data.getRemarks());
}
if (StringUtils.isNotBlank(data.getFiles())) {
dataMap.put("filePath", data.getFiles());
}
if (StringUtils.isNotBlank(data.getStopDate())) {
dataMap.put("endTime", data.getStopDate());
}
if (StringUtils.isNotBlank(data.getBillNo())) {
dataMap.put("billNo", data.getBillNo());
}
//获取审批记录
if (StringUtils.isNotBlank(data.getProcInstId())) {
List<PCHistTaskListAndCommentList> flowRecordVo = flowableFeignPro.flowRecordAndComment(data.getProcInstId(), "1").getData();
List<MonthlyAccrualSourceLCVo> sourceLCVos = new ArrayList<>();
for (PCHistTaskListAndCommentList flowTask : flowRecordVo) {
if (flowTask.getFlowableRecordVo() != null) {
Map<String, Object> flowableRecordVo = flowTask.getFlowableRecordVo();
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
List<Map<String, Object>> taskUserInfos = ConstantUtils.getListData(flowableRecordVo, "taskUserInfos");
Map<String, Object> comment = ConstantUtils.getMap(flowableRecordVo, "comment");
String assigneeName = (String) taskUserInfos.get(0).get("assigneeName");
String comment1 = (String) comment.get("comment");
sourceLCVo.setName(assigneeName);
sourceLCVo.setComment(comment1);
sourceLCVo.setSpsj(flowableRecordVo.get("finishTime").toString());
sourceLCVos.add(sourceLCVo);
} else {
Map<String, Object> processCommentVo = flowTask.getProcessCommentVo();
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
sourceLCVo.setName(processCommentVo.get("title").toString());
sourceLCVo.setComment(processCommentVo.get("content").toString());
sourceLCVo.setSpsj(processCommentVo.get("time").toString());
sourceLCVos.add(sourceLCVo);
}
}
List<Message> messages = messageFeign.selectByBusinessSid(data.getSid()).getData();
if (messages.size() > 0) {
for (Message message : messages) {
MonthlyAccrualSourceLCVo sourceLCVo = new MonthlyAccrualSourceLCVo();
String receiverNames = "";
List<MessageList> messageLists = messageListFeign.fetchByMainSid(message.getSid()).getData();
if (messageLists.size() > 0) {
for (MessageList messageList : messageLists) {
receiverNames = receiverNames + messageList.getReceiverName() + ",";
}
}
sourceLCVo.setName("系统");
sourceLCVo.setComment("抄送 " + receiverNames.substring(0, receiverNames.lastIndexOf(",")));
sourceLCVo.setSpsj(DateUtil.format(message.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
sourceLCVos.add(sourceLCVo);
}
}
sourceLCVos.sort(comparing(MonthlyAccrualSourceLCVo::getSpsj));
dataMap.put("lcList", sourceLCVos);
}
List<LoanOverdueFinDetailsDto> records = loanOverdueFinDetailsService.selectByMainSid(sid);
if (!records.isEmpty()) {
int sortNo = 1;
for (LoanOverdueFinDetailsDto applyRecord : records) {
Map<String, Object> map = new HashMap<>();
LoanRepaymentPlanDetails details = loanRepaymentPlanDetailsService.fetchMainBankByBusVinSid(applyRecord.getBusVinSid());
if (null != details) {
map.put("sortNo", String.valueOf(sortNo++));
if (StringUtils.isNotBlank(details.getLoanContractNo())) {
map.put("loanNo", details.getLoanContractNo());
}
if (StringUtils.isNotBlank(details.getVinNo())) {
map.put("vinNo", details.getVinNo());
}
if (StringUtils.isNotBlank(details.getBorrowerName())) {
map.put("borrowerName", details.getBorrowerName());
}
if (StringUtils.isNotBlank(details.getDept())) {
map.put("saleDept", details.getDept());
}
if (StringUtils.isNotBlank(applyRecord.getOverdueMoney())) {
map.put("overDueMoney", applyRecord.getOverdueMoney());
}
if (StringUtils.isNotBlank(applyRecord.getTiredDeficiency())) {
map.put("tiredMoney", applyRecord.getTiredDeficiency());
}
if (StringUtils.isNotBlank(applyRecord.getDiffMoney())) {
map.put("diffMoney", applyRecord.getDiffMoney());
}
}
newList.add(map);
}
}
dataMap.put("newList", newList);
String temp = "/template/";
String targetPath = docPdfComponent.getUploadTemplateUrl();
try {
//获取模板
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/vouchers/overDue.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);
}
} }

2
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.java

@ -77,4 +77,6 @@ public interface LoanRepaymentPlanDetailsMapper extends BaseMapper<LoanRepayment
LoanPlanDetailsVoForFundVoucher pushFund(@Param("busVinSid") String busVinSid); LoanPlanDetailsVoForFundVoucher pushFund(@Param("busVinSid") String busVinSid);
List<LoanPlanDetailsVoForLateVoucher> selPushLaterVoucherOnBuckle(@Param("planSids") List<String> planSids); List<LoanPlanDetailsVoForLateVoucher> selPushLaterVoucherOnBuckle(@Param("planSids") List<String> planSids);
LoanRepaymentPlanDetails fetchMainBankByBusVinSid(@Param("busVinSid") String busVinSid);
} }

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsMapper.xml

@ -770,4 +770,8 @@
#{item} #{item}
</foreach> </foreach>
</select> </select>
<select id="fetchMainBankByBusVinSid"
resultType="com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetails">
select * from loan_repayment_plan_details where busVinSid =#{busVinSid} and policyOrOther = '0' limit 1
</select>
</mapper> </mapper>

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentplandetails/LoanRepaymentPlanDetailsService.java

@ -313,4 +313,8 @@ public class LoanRepaymentPlanDetailsService extends MybatisBaseService<LoanRepa
public LoanPlanDetailsVoForFundVoucher getLoanPlanDetailsVoForFundVoucher(String busVinSid) { public LoanPlanDetailsVoForFundVoucher getLoanPlanDetailsVoForFundVoucher(String busVinSid) {
return baseMapper.pushFund(busVinSid); return baseMapper.pushFund(busVinSid);
} }
public LoanRepaymentPlanDetails fetchMainBankByBusVinSid(String busVinSid) {
return baseMapper.fetchMainBankByBusVinSid(busVinSid);
}
} }

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loantransferpaymentapply/LoanTransferPaymentApplyService.java

@ -1305,6 +1305,9 @@ public class LoanTransferPaymentApplyService extends MybatisBaseService<LoanTran
List<Map<String, Object>> newList = new ArrayList<>(); List<Map<String, Object>> newList = new ArrayList<>();
LoanTransferPaymentApply data = fetchBySid(sid); LoanTransferPaymentApply data = fetchBySid(sid);
if (null != data) { if (null != data) {
if (!data.getNodeState().equals("已办结")) {
return rb.setMsg("无法下载没有办结的审批记录。");
}
List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.TRANSFERPAYMENT.getAttachType()); List<LoanFile> files = loanFileService.selectByLinkSid(data.getSid(), LoanFileEnum.TRANSFERPAYMENT.getAttachType());
if (!files.isEmpty()) { if (!files.isEmpty()) {
List<String> stringList = new ArrayList<>(); List<String> stringList = new ArrayList<>();
@ -1441,6 +1444,7 @@ public class LoanTransferPaymentApplyService extends MybatisBaseService<LoanTran
} }
newList.add(map); newList.add(map);
} }
dataMap.put("amount", sumMoney.toString());
} }
dataMap.put("newList", newList); dataMap.put("newList", newList);
String temp = "/template/"; String temp = "/template/";

2543
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/overDue.ftl

File diff suppressed because it is too large

3317
anrui-riskcenter/anrui-riskcenter-biz/src/main/resources/ftl/vouchers/padsincere.ftl

File diff suppressed because it is too large

3
工作内容需要的文档/单据模板/财务凭证打印模板/逾期对账/overDue.ftl

File diff suppressed because one or more lines are too long

36
工作内容需要的文档/单据模板/财务凭证打印模板/逾期对账/逾期对账.docx

@ -0,0 +1,36 @@
逾期对账审批
${company!}
申请时间:${createTime!}
审批编号:${billNo!}
申请人:
${applyName!}
申请部门:
${dept!}
数据截止时间:
${endTime!}
备注:
${remarks!}
附件:
${filePath!}
审批流程
${lc.comment!}
${lc.name!}
${lc.spsj!}
逾期客户列表
序号
贷款合同号
车架号
贷款人
销售部门
平台逾期金额
财务累欠金额
差异金额
${list.sortNo!}
${list.loanNo!}
${list.vinNo!}
${list.borrowerName!}
${list.saleDept!}
${list.overDueMoney!}
${list.tiredMoney!}
${list.diffMoney!}
Loading…
Cancel
Save