From e16f324071864d16b161033c8fa811444bbc015e Mon Sep 17 00:00:00 2001 From: fanzongzhe <285169773@qq.com> Date: Fri, 28 Jun 2024 17:56:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B7=E5=90=8E=E5=8E=86=E5=8F=B2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LoanRepaymentScheduleFeign.java | 11 + .../LoanRepaymentScheduleFeignFallback.java | 9 + .../historyData/HistoryDataImportVo.java | 46 +-- .../historyData/ReturnMsg.java | 16 ++ .../LoanRepaymentScheduleRest.java | 8 + .../LoanRepaymentScheduleService.java | 262 ++++++++++++++++++ 6 files changed, 336 insertions(+), 16 deletions(-) create mode 100644 anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/ReturnMsg.java diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java index ea19f8602d..8b40e45119 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java @@ -10,7 +10,11 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; @@ -80,6 +84,13 @@ public interface LoanRepaymentScheduleFeign { @ResponseBody ResultBean> selHistoryBySid(@RequestParam("sid") String sid); + @ApiOperation(value = "导入贷后历史数据") + @PostMapping("/importHistoryData") + public ResultBean importHistoryData( + @RequestParam(value = "file") MultipartFile file, + HttpServletRequest request, + HttpServletResponse response) throws IOException; + //-------------------------app接口-------------------- /** diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java index 2caa227850..c73fe84cd6 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java @@ -7,7 +7,11 @@ 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 org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; /** @@ -69,6 +73,11 @@ public class LoanRepaymentScheduleFeignFallback implements LoanRepaymentSchedule return null; } + @Override + public ResultBean importHistoryData(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException { + return null; + } + @Override public ResultBean> getRepaymentPlanList(PagerQuery pq) { return null; diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/HistoryDataImportVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/HistoryDataImportVo.java index 6805747aa2..1519893394 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/HistoryDataImportVo.java +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/HistoryDataImportVo.java @@ -26,45 +26,59 @@ public class HistoryDataImportVo { private String vinNo; @ApiModelProperty("消贷合同编号") private String loanContractNo; - @ApiModelProperty("资方合同号") + @ApiModelProperty("是否存在休眠或展期") + private String sleep; + @ApiModelProperty("主产品资方合同号") private String bankContractNo; - @ApiModelProperty("资方名称") + @ApiModelProperty("主产品资方名称") private String bankName; @ApiModelProperty("主产品期数") private String mainPeriod; - @ApiModelProperty("金融产品政策") + @ApiModelProperty("金融产品首付比例") + private String paymentRatio; + @ApiModelProperty("金融产品保证金比例") private String depositRatio; + @ApiModelProperty("实收保证金金额") + private String depositMoney; @ApiModelProperty("其他融资方合同号") private String otherBankNo; - @ApiModelProperty("其他融资方") + @ApiModelProperty("其他融资方名称") private String otherBankName; @ApiModelProperty("其他融期数") private String otherPeriod; - @ApiModelProperty("主产品首期还款日") + @ApiModelProperty("主产品首期应还日期") private String mainRepayDate; - @ApiModelProperty("主产品首期月还") + @ApiModelProperty("主产品第一期应还金额") private String mainFirstRepay; - @ApiModelProperty("主产品期间月还") + @ApiModelProperty("主产品中间期") private String mainMidRepay; - @ApiModelProperty("主产品期末月还") + @ApiModelProperty("主产品最后一期应还金额") private String mainLastRepay; - @ApiModelProperty("其他融首期还款日") + @ApiModelProperty("其他融首期应还日期") private String otherRepayDate; - @ApiModelProperty("其他融首期月还") + @ApiModelProperty("其他融第一期应还金额") private String otherFirstRepay; - @ApiModelProperty("其他融期间月还") + @ApiModelProperty("其他融中间期") private String otherMidRepay; - @ApiModelProperty("其他融期末月还") + @ApiModelProperty("其他融最后一期应还金额") private String otherLastRepay; - @ApiModelProperty("推送财务凭证部门编码") - private String cwDeptNo; + @ApiModelProperty("首期总月还") + private String mainAmount; @ApiModelProperty("销售部门编码") private String salesDeptNo; + @ApiModelProperty("销售部门") + private String salesDept; @ApiModelProperty("分公司编码") private String useOrgNo; - @ApiModelProperty("分公司垫款金额") + @ApiModelProperty("分公司") + private String useOrgName; + @ApiModelProperty("累欠本金(逾期月还)") + private String tiredMoney; + @ApiModelProperty("其中公司垫还资方金额") private String paymentMoney; - @ApiModelProperty("资金占用费") + @ApiModelProperty("垫还资方逾期利息") + private String interest; + @ApiModelProperty("资金占用费(逾期利息)") private String fund; } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/ReturnMsg.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/ReturnMsg.java new file mode 100644 index 0000000000..12fcd4d503 --- /dev/null +++ b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/historyData/ReturnMsg.java @@ -0,0 +1,16 @@ +package com.yxt.anrui.riskcenter.api.loanrepaymentschedule.historyData; + +import lombok.Data; + +import java.util.*; + +/** + * @author Fan + * @description + * @date 2024/6/28 14:13 + */ +@Data +public class ReturnMsg { + private Set setMsg; + private List list; +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java index d109a4ac50..855cc4ee9c 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java @@ -13,8 +13,11 @@ import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; @@ -85,6 +88,11 @@ public class LoanRepaymentScheduleRest implements LoanRepaymentScheduleFeign { return loanRepaymentScheduleService.selHistoryBySid(sid); } + @Override + public ResultBean importHistoryData(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException { + return loanRepaymentScheduleService.importHistoryData(file,request,response); + } + @Override public ResultBean> getRepaymentPlanList(PagerQuery pq) { ResultBean> rb = ResultBean.fireFail(); diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java index f02e9d9e45..180ab062ef 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java @@ -1,6 +1,7 @@ package com.yxt.anrui.riskcenter.biz.loanrepaymentschedule; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -39,6 +40,7 @@ import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDe import com.yxt.anrui.riskcenter.api.loanrepaymentplandetails.LoanRepaymentPlanDetailsDto; import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.*; import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.historyData.HistoryDataImportVo; +import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.historyData.ReturnMsg; import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutions; import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo; import com.yxt.anrui.riskcenter.api.loansolutionsotherpolicy.LoanSolutionsOtherpolicy; @@ -62,11 +64,20 @@ import com.yxt.common.core.vo.PagerVo; import com.yxt.messagecenter.api.message.MessageFeign; import com.yxt.messagecenter.api.message.PushMessageQuery; import com.yxt.messagecenter.api.message.PushSmsDto; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.InputStream; import java.math.BigDecimal; @@ -75,6 +86,8 @@ import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -4986,4 +4999,253 @@ public class LoanRepaymentScheduleService extends MybatisBaseService setMsg = returnMsg.getSetMsg(); + StringBuffer sbMsg = new StringBuffer(); + if (null != setMsg && setMsg.size() > 0) { + for (String s : setMsg) { + sbMsg.append(s).append(","); + } + sbMsg.delete(sbMsg.length() - 1, sbMsg.length()); + if (StringUtils.isNotBlank(sbMsg.toString())) { + return rb.setMsg(sbMsg.toString()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return rb.success(); + } + + private ReturnMsg getSheetVal(Sheet sheet) { + ReturnMsg returnMsg = new ReturnMsg(); + List voList = new ArrayList<>(); + Set setMsg = new HashSet<>(); + Row row1 = sheet.getRow(0); + Map header = new HashMap<>(); + Map map = new HashMap<>(); + for (int i = 0; i < row1.getPhysicalNumberOfCells(); i++) { + String trim = new String(); + try { + trim = getCellVal(row1.getCell(i)).toString().trim(); + String temp = getCellVal(row1.getCell(i)).toString().trim(); + if (StringUtils.isNotBlank(temp)) { + header.put(i, temp); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + for (int r = 1; r <= sheet.getLastRowNum(); r++) { + HistoryDataImportVo info = new HistoryDataImportVo(); + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + for (int i = 0; i < header.size(); i++) { +// String trim = new String(); + try { +// trim = getCellVal(row.getCell(i)).toString().trim(); + String temp = ""; + if (null != getCellVal(row.getCell(i))) { + temp = getCellVal(row.getCell(i)).toString().trim(); + } + String head = header.get(i); + String field = ""; + if (StringUtils.isNotBlank(temp)) { + field = temp; + } + if (head.equals("实际购车人名称")) { + info.setActualName(field); + } + if (head.equals("实际购车人电话")) { + info.setActualPhone(field); + } + if (head.equals("借款人(财务的客户)编码")) { + info.setBorrowerNo(field); + } + if (head.equals("借款人(财务的客户)名称")) { + info.setBorrowerName(field); + } + if (head.equals("车架号")) { + info.setVinNo(field); + } + if (head.equals("消贷合同编号")) { + info.setLoanContractNo(field); + } + if (head.equals("是否存在休眠或展期")) { + info.setSleep(field); + } + if (head.equals("主产品资方合同号")) { + info.setBankContractNo(field); + } + if (head.equals("主产品资方名称")) { + info.setBankName(field); + } + if (head.equals("主产品期数")) { + info.setMainPeriod(field); + } + if (head.equals("金融产品首付比例")) { + info.setPaymentRatio(field); + } + if (head.equals("金融产品保证金比例")) { + info.setDepositRatio(field); + } + if (head.equals("实收保证金金额")) { + info.setDepositMoney(field); + } + if (head.equals("其他融资方合同号")) { + info.setOtherBankNo(field); + } + if (head.equals("其他融资方名称")) { + info.setOtherBankName(field); + } + if (head.equals("其他融期数")) { + info.setOtherPeriod(field); + } + if (head.equals("主产品首期应还日期")) { + info.setMainRepayDate(field); + } + if (head.equals("主产品第一期应还金额")) { + info.setMainFirstRepay(field); + } + if (head.equals("主产品中间期")) { + info.setMainMidRepay(field); + } + if (head.equals("主产品最后一期应还金额")) { + info.setMainLastRepay(field); + } + if (head.equals("其他融首期应还日期")) { + info.setOtherRepayDate(field); + } + if (head.equals("其他融第一期应还金额")) { + info.setOtherFirstRepay(field); + } + if (head.equals("其他融中间期")) { + info.setOtherMidRepay(field); + } + if (head.equals("其他融最后一期应还金额")) { + info.setOtherLastRepay(field); + } + if (head.equals("首期总月还")) { + info.setMainAmount(field); + } + if (head.equals("销售部门编码")) { + info.setSalesDeptNo(field); + } + if (head.equals("销售部门")) { + info.setSalesDept(field); + } + if (head.equals("分公司编码")) { + info.setUseOrgNo(field); + } + if (head.equals("分公司")) { + info.setUseOrgName(field); + } + if (head.equals("累欠本金(逾期月还)")) { + info.setTiredMoney(field); + } + if (head.equals("其中公司垫还资方金额")) { + info.setPaymentMoney(field); + } + if (head.equals("垫还资方逾期利息")) { + info.setInterest(field); + } + if (head.equals("资金占用费(逾期利息)")) { + info.setFund(field); + } + } catch (Exception e) { + e.printStackTrace(); + continue; + } + } + voList.add(info); + } + returnMsg.setList(voList); + return returnMsg; + } + + public Object getCellVal(Cell cell) { + Object obj = null; + if (cell != null) { + switch (cell.getCellTypeEnum()) { + case BOOLEAN: + obj = cell.getBooleanCellValue(); + break; + case ERROR: + obj = cell.getErrorCellValue(); + break; + case NUMERIC: + obj = cell.getNumericCellValue(); + break; + case STRING: + obj = cell.getStringCellValue(); + break; + default: + break; + } + } + return obj; + } + + public boolean isNum(String s) { + if (org.apache.commons.lang3.StringUtils.isNotBlank(s)) { + if (s.contains(".")) { + return isNumeric(s); + } else { + return isNumericFirst(s); + } + } + return false; + } + + public boolean isNumeric(String s) { + String substring = s.substring(0, s.lastIndexOf(".")); + String substringLast = s.substring(s.lastIndexOf(".") + 1, s.length()); + if (substring != null && !"".equals(substring.trim()) || substringLast != null && !"".equals(substringLast.trim())) { + boolean matches = substring.matches("^[0-9]*$"); + boolean b = substringLast.matches("^[0-9]*$"); + if (matches && b) { + return true; + } else { + return false; + } + } else + return false; + } + + public boolean isNumericFirst(String str) { + Pattern pattern = Pattern.compile("[0-9]*"); + System.out.println(str); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + } + }