Browse Source

Merge remote-tracking branch 'origin/master'

master
God 12 months ago
parent
commit
444dc7cc9a
  1. 6
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusLoancontractForRepayQuery.java
  2. 6
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusLoancontractForRepayVo.java
  3. 5
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusSalesOrderLoancontractFeign.java
  4. 5
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusSalesOrderLoancontractFeignFallback.java
  5. 49
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/LoanRepaymentPlanDetailsExportVo.java
  6. 2
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractMapper.java
  7. 49
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractMapper.xml
  8. 24
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractRest.java
  9. 191
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractService.java
  10. 10
      anrui-riskcenter-ui/src/api/repaymentschedule/repaymentschedule.js
  11. 90
      anrui-riskcenter-ui/src/views/repaymentschedule/repaymentschedule.vue
  12. 130
      anrui-riskcenter-ui/src/views/repaymentschedule/repaymentscheduleAdd.vue
  13. 14
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java
  14. 15
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java
  15. 9
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java
  16. 8
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java
  17. 6
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java
  18. 46
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml
  19. 13
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java
  20. 2376
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java

6
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusLoancontractForRepayQuery.java

@ -4,6 +4,9 @@ import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
* @description
@ -26,6 +29,7 @@ public class BusLoancontractForRepayQuery implements Query {
private String bankName;
@ApiModelProperty("金融产品名称")
private String policyName; // 金融产品名称
private String builded; //是否生成还款计划表
@ApiModelProperty("组织全路径")
private String orgPath;
@ApiModelProperty("菜单sid")
@ -34,4 +38,6 @@ public class BusLoancontractForRepayQuery implements Query {
private String menuUrl;
@ApiModelProperty("用户sid")
private String userSid;
private String createStartDate;
private String createEndDate;
}

6
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusLoancontractForRepayVo.java

@ -35,4 +35,10 @@ public class BusLoancontractForRepayVo implements Vo {
private String orderSid;
private String builded; //是否生成还款计划表
private boolean handleBtn; //ture 可以办理 false 不能
private String repaymentCreateTime; //生成时间
private String cwDeptNo; //财务中部门编码
private String mainAmount; //主产品还款总金额
private String otherAmount; //其他融还款总金额
private String amountAll; // 总金额
}

5
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusSalesOrderLoancontractFeign.java

@ -102,6 +102,11 @@ public interface BusSalesOrderLoancontractFeign {
@PostMapping("/setRepaymentState")
public ResultBean setRepaymentState(@RequestParam("sid") String sid, @RequestParam("createTime")String createTime);
@PostMapping("/exportExcel")
@ApiOperation(value = "还款计划表导出")
public void exportExcel(@RequestBody BusLoancontractForRepayQuery query);
@ApiOperation("推送融资放款的应收")
@PostMapping("/pushLoanOrder")
@ResponseBody

5
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/BusSalesOrderLoancontractFeignFallback.java

@ -97,6 +97,11 @@ public class BusSalesOrderLoancontractFeignFallback implements BusSalesOrderLoan
return null;
}
@Override
public void exportExcel(BusLoancontractForRepayQuery query) {
}
@Override
public ResultBean pushLoanOrder(LoanContractPush loanContractPush) {
return null;

49
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/bussalesorderloancontract/LoanRepaymentPlanDetailsExportVo.java

@ -0,0 +1,49 @@
package com.yxt.anrui.buscenter.api.bussalesorderloancontract;
import com.yxt.common.core.utils.ExportEntityMap;
import lombok.Data;
/**
* @author Administrator
* @description
* @date 2023/11/13 9:34
*/
@Data
public class LoanRepaymentPlanDetailsExportVo {
@ExportEntityMap(CnName = "序号", EnName = "rankNo")
private Integer rankNo;
@ExportEntityMap(CnName = "生成日期", EnName = "createTime")
private String createTime;
@ExportEntityMap(CnName = "客户", EnName = "customer")
private String customer;
@ExportEntityMap(CnName = " 销售专员", EnName = "staffName")
private String staffName;
@ExportEntityMap(CnName = "贷款人", EnName = "borrowerName")
private String borrowerName;
@ExportEntityMap(CnName = "车架号", EnName = "vinNo")
private String vinNo;
@ExportEntityMap(CnName = "车牌号", EnName = "vehMark")
private String vehMark;
@ExportEntityMap(CnName = "消贷合同号", EnName = "loanContractNo")
private String loanContractNo;
@ExportEntityMap(CnName = "资方合同号", EnName = "bankContractNo")
private String bankContractNo;
@ExportEntityMap(CnName = "资方", EnName = "bankName")
private String bankName;
@ExportEntityMap(CnName = "金融产品政策", EnName = "policyName")
private String policyName;
@ExportEntityMap(CnName = "期数", EnName = "period")
private String period;
@ExportEntityMap(CnName = "应还", EnName = "dueMoney")
private String dueMoney;
@ExportEntityMap(CnName = "应还日期", EnName = "dueDate")
private String dueDate;
@ExportEntityMap(CnName = "是否存在其他融", EnName = "policyOrOther")
private String policyOrOther;
@ExportEntityMap(CnName = "销售部门", EnName = "dept")
private String dept;
@ExportEntityMap(CnName = "分公司", EnName = "useOrgName")
private String useOrgName;
}

2
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractMapper.java

@ -94,4 +94,6 @@ public interface BusSalesOrderLoancontractMapper extends BaseMapper<BusSalesOrde
@Update("update bus_sales_order_loancontract set repaymentState = 1,repaymentCreateTime =#{createTime} where sid=#{sid}")
int setRepaymentState(@Param("sid") String sid,@Param("createTime") String createTime);
List<BusLoancontractForRepayVo> selLoancontractsForExport(@Param(Constants.WRAPPER) QueryWrapper<BusSalesOrderLoancontract> qw);
}

49
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractMapper.xml

@ -17,23 +17,24 @@
<select id="listPageForRepay"
resultType="com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusLoancontractForRepayVo">
SELECT
bs.sid as orderSid,
bs.orgName as orgName,
bs.staffName as staffName,
bs.useOrgName as useOrgName,
co.loanContractNo as loanContractNo,
co.borrowerName as borrowerName,
co.bankName as bankName,
co.bankContractNo as bankContractNo,
co.policyName as policyName,
co.sid as salesOrderSid,
bs.sid AS orderSid,
bs.orgName AS orgName,
bs.staffName AS staffName,
bs.useOrgName AS useOrgName,
co.loanContractNo AS loanContractNo,
co.borrowerName AS borrowerName,
co.bankName AS bankName,
co.bankContractNo AS bankContractNo,
co.policyName AS policyName,
co.sid AS salesOrderSid,
CASE
co.repaymentState
WHEN '1' THEN
'是'
WHEN '0' THEN
'否'
END AS builded
END AS builded,
DATE_FORMAT( co.repaymentCreateTime, '%Y-%m-%d' ) AS repaymentCreateTime
FROM
bus_sales_order_loancontract AS co
LEFT JOIN bus_sales_order AS bs ON co.salesOrderSid = bs.sid
@ -53,4 +54,30 @@
resultType="com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailed">
select * from anrui_fin.fin_uncollected_receivables_detailed where busVinSid = #{sid} and receivablesName = #{name}
</select>
<select id="selLoancontractsForExport"
resultType="com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusLoancontractForRepayVo">
SELECT
bs.sid AS orderSid,
bs.orgName AS orgName,
bs.staffName AS staffName,
bs.useOrgName AS useOrgName,
co.loanContractNo AS loanContractNo,
co.borrowerName AS borrowerName,
co.bankName AS bankName,
co.bankContractNo AS bankContractNo,
co.policyName AS policyName,
co.sid AS salesOrderSid,
CASE
co.repaymentState
WHEN '1' THEN
'是'
WHEN '0' THEN
'否'
END AS builded,
DATE_FORMAT( co.repaymentCreateTime, '%Y-%m-%d' ) AS repaymentCreateTime
FROM
bus_sales_order_loancontract AS co
LEFT JOIN bus_sales_order AS bs ON co.salesOrderSid = bs.sid
<where>${ew.sqlSegment}</where>
</select>
</mapper>

24
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractRest.java

@ -27,6 +27,7 @@ package com.yxt.anrui.buscenter.biz.bussalesorderloancontract;
import com.yxt.anrui.buscenter.api.busdeliveredapply.PushOtherDocument;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.*;
import com.yxt.common.base.utils.ExportExcelUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -35,6 +36,9 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
@ -58,7 +62,8 @@ public class BusSalesOrderLoancontractRest implements BusSalesOrderLoancontractF
@Autowired
private BusSalesOrderLoancontractService busSalesOrderLoancontractService;
@Autowired
private HttpServletResponse response;
@Override
@ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage")
@ -121,6 +126,23 @@ public class BusSalesOrderLoancontractRest implements BusSalesOrderLoancontractF
return rb.success().setData(pv);
}
@Override
public void exportExcel(BusLoancontractForRepayQuery query) {
//得到所有要导出的数据
List<LoanRepaymentPlanDetailsExportVo> list = busSalesOrderLoancontractService.exportExcel(query);
//定义导出的excel名字
String excelName = "还款计划表列表";
String fileNameURL = "";
try {
fileNameURL = URLEncoder.encode(excelName, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//导出车辆管理列表
ExportExcelUtils.export(fileNameURL, list, LoanRepaymentPlanDetailsExportVo.class, response);
}
@Override
public ResultBean setRepaymentState(String sid, String createTime) {
ResultBean rb = ResultBean.fireFail();

191
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/bussalesorderloancontract/BusSalesOrderLoancontractService.java

@ -198,6 +198,97 @@ public class BusSalesOrderLoancontractService extends MybatisBaseService<BusSale
return entity;
}
public List<LoanRepaymentPlanDetailsExportVo> exportExcel(BusLoancontractForRepayQuery pagerQuery) {
QueryWrapper<BusSalesOrderLoancontract> qw = new QueryWrapper<>();
//=======================
PrivilegeQuery privilegeQuery = new PrivilegeQuery();
privilegeQuery.setOrgPath(pagerQuery.getOrgPath());
privilegeQuery.setMenuSid(pagerQuery.getMenuSid());
privilegeQuery.setMenuUrl(pagerQuery.getMenuUrl());
privilegeQuery.setUserSid(pagerQuery.getUserSid());
ResultBean<String> defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery);
if (StringUtils.isNotBlank(defaultIdReltBean.getData())) {
//数据权限ID(1集团、2事业部、3分公司、4部门、5个人)
String orgSidPath = pagerQuery.getOrgPath();
orgSidPath = orgSidPath + "/";
int i1 = orgSidPath.indexOf("/");
int i2 = orgSidPath.indexOf("/", i1 + 1);
int i3 = orgSidPath.indexOf("/", i2 + 1);
int i4 = orgSidPath.indexOf("/", i3 + 1);
String orgLevelKey = defaultIdReltBean.getData();
if ("1".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i1);
qw.like("bs.orgSidPath", orgSidPath);
} else if ("2".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i2);
qw.like("bs.orgSidPath", orgSidPath);
} else if ("3".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i3);
qw.like("bs.orgSidPath", orgSidPath);
} else if ("4".equals(orgLevelKey)) {
orgSidPath = orgSidPath.substring(0, i4);
qw.like("bs.orgSidPath", orgSidPath);
} else if ("5".equals(orgLevelKey)) {
qw.eq("bs.createBySid", pagerQuery.getUserSid());
} else {
return new ArrayList<>();
}
} else {
return new ArrayList<>();
}
//=======================
//分公司
if (StringUtils.isNotBlank(pagerQuery.getUseOrgName())) {
qw.like("bs.useOrgName", pagerQuery.getUseOrgName());
}
//销售部门
if (StringUtils.isNotBlank(pagerQuery.getOrgName())) {
qw.like("bs.orgName", pagerQuery.getOrgName());
}
//销售专员
if (StringUtils.isNotBlank(pagerQuery.getStaffName())) {
qw.like("bs.staffName", pagerQuery.getStaffName());
}
//消贷合同编号
if (StringUtils.isNotBlank(pagerQuery.getLoanContractNo())) {
qw.like("co.loanContractNo", pagerQuery.getLoanContractNo());
}
//贷款人
if (StringUtils.isNotBlank(pagerQuery.getBorrowerName())) {
qw.like("co.borrowerName", pagerQuery.getBorrowerName());
}
//资方
if (StringUtils.isNotBlank(pagerQuery.getBankName())) {
qw.like("co.bankName", pagerQuery.getBankName());
}
//金融产品
if (StringUtils.isNotBlank(pagerQuery.getPolicyName())) {
qw.like("co.policyName", pagerQuery.getPolicyName());
}
//金融产品
if (StringUtils.isNotBlank(pagerQuery.getBuilded())) {
qw.like("co.repaymentState", pagerQuery.getBuilded());
}
String createStartTime = pagerQuery.getCreateStartDate();
String createEndTime = pagerQuery.getCreateEndDate();
qw.apply(StringUtils.isNotEmpty(createStartTime), "date_format (co.repaymentCreateTime,'%Y-%m-%d') >= date_format('" + createStartTime + "','%Y-%m-%d')").
apply(StringUtils.isNotEmpty(createEndTime), "date_format (co.repaymentCreateTime,'%Y-%m-%d') <= date_format('" + createEndTime + "','%Y-%m-%d')"
);
qw.ne("co.state", 0);
qw.eq("co.isDelete", 0);
qw.eq("co.busNo", "305");
qw.orderByDesc("co.createTime");
List<BusLoancontractForRepayVo> loancontracts = baseMapper.selLoancontractsForExport(qw);
if (!loancontracts.isEmpty()) {
List<String> sids = loancontracts.stream().map(BusLoancontractForRepayVo::getSalesOrderSid).collect(Collectors.toList());
List<LoanRepaymentPlanDetailsExportVo> exportVos = repaymentScheduleFeign.exportExcel(sids).getData();
if (!exportVos.isEmpty()) {
return exportVos;
}
}
return new ArrayList<>();
}
/**
* 消贷合同生成还款计划表列表
*
@ -256,8 +347,8 @@ public class BusSalesOrderLoancontractService extends MybatisBaseService<BusSale
qw.like("bs.orgName", pagerQuery.getOrgName());
}
//销售专员
if (StringUtils.isNotBlank(pagerQuery.getUseOrgName())) {
qw.like("bs.useOrgName", pagerQuery.getUseOrgName());
if (StringUtils.isNotBlank(pagerQuery.getStaffName())) {
qw.like("bs.staffName", pagerQuery.getStaffName());
}
//消贷合同编号
if (StringUtils.isNotBlank(pagerQuery.getLoanContractNo())) {
@ -275,8 +366,18 @@ public class BusSalesOrderLoancontractService extends MybatisBaseService<BusSale
if (StringUtils.isNotBlank(pagerQuery.getPolicyName())) {
qw.like("co.policyName", pagerQuery.getPolicyName());
}
qw.eq("co.state", 1);
//金融产品
if (StringUtils.isNotBlank(pagerQuery.getBuilded())) {
qw.like("co.repaymentState", pagerQuery.getBuilded());
}
String createStartTime = pagerQuery.getCreateStartDate();
String createEndTime = pagerQuery.getCreateEndDate();
qw.apply(StringUtils.isNotEmpty(createStartTime), "date_format (co.repaymentCreateTime,'%Y-%m-%d') >= date_format('" + createStartTime + "','%Y-%m-%d')").
apply(StringUtils.isNotEmpty(createEndTime), "date_format (co.repaymentCreateTime,'%Y-%m-%d') <= date_format('" + createEndTime + "','%Y-%m-%d')"
);
qw.ne("co.state", 0);
qw.eq("co.isDelete", 0);
qw.eq("co.busNo", "305");
qw.orderByDesc("co.createTime");
IPage<BusLoancontractForRepayVo> pagging = baseMapper.listPageForRepay(page, qw);
List<BusLoancontractForRepayVo> records = pagging.getRecords();
@ -293,14 +394,88 @@ public class BusSalesOrderLoancontractService extends MybatisBaseService<BusSale
record.setVinNo(String.join(",", stringVinNos));
}
}
// ResultBean<LoanRepaymentSchedule> repaymentSchedule = repaymentScheduleFeign.selByLoanContractSid(record.getSalesOrderSid());
// if (repaymentSchedule.getData() != null) {
ResultBean<LoanRepaymentSchedule> repaymentSchedule = repaymentScheduleFeign.selByLoanContractSid(record.getSalesOrderSid());
if (repaymentSchedule.getData() != null) {
LoanRepaymentSchedule schedule = repaymentSchedule.getData();
if (StringUtils.isNotBlank(schedule.getCwDeptNo())) {
record.setCwDeptNo(schedule.getCwDeptNo());
}
BigDecimal mainAmount; //主产品还款总金额
BigDecimal otherAmount; //其他融还款总金额
BigDecimal amountAll; // 总金额
//车辆数
BigDecimal vehCount = new BigDecimal(schedule.getVehCount());
if (StringUtils.isNotBlank(schedule.getIsDifferent())) {
if (schedule.getIsDifferent().equals("是")) {
//判断是否有一台车不同月还金额
//主产品期数
BigDecimal mainPeriod = new BigDecimal(schedule.getMainPeriod());
//主产品首期月还
BigDecimal mainFirstRepay = schedule.getMainFirstRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleMainFirstRepay());
//主产品期间月还
BigDecimal mainMidRepay = schedule.getMainMidRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleMainMidRepay()).multiply(mainPeriod.subtract(new BigDecimal("2")));
//主产品末期月还
BigDecimal mainLastRepay = schedule.getMainLastRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleMainLastRepay());
mainAmount = mainFirstRepay.add(mainMidRepay).add(mainLastRepay);
if (schedule.getIsOtherPolicy().equals("1")) {
//有其他融
//其他融期数
BigDecimal otherPeriod = new BigDecimal(schedule.getOtherPeriod());
//其他融首期月还
BigDecimal otherFirstRepay = schedule.getOtherFirstRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleOtherFirstRepay());
//其他融期间月还
BigDecimal otherMidRepay = schedule.getOtherMidRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleOtherMidRepay()).multiply(mainPeriod.subtract(new BigDecimal("2")));
//其他融末期月还
BigDecimal otherLastRepay = schedule.getOtherLastRepay().multiply(vehCount.subtract(new BigDecimal("1"))).add(schedule.getSingleOtherLastRepay());
otherAmount = otherFirstRepay.add(otherMidRepay).add(otherLastRepay);
amountAll = mainAmount.add(otherAmount);
record.setMainAmount(mainAmount.toString());
record.setOtherAmount(otherAmount.toString());
record.setAmountAll(amountAll.toString());
} else if (schedule.getIsOtherPolicy().equals("0")) {
//没有其他融
record.setMainAmount(mainAmount.toString());
record.setAmountAll(mainAmount.toString());
}
}
} else {
//主产品期数
BigDecimal mainPeriod = new BigDecimal(schedule.getMainPeriod());
//主产品首期月还
BigDecimal mainFirstRepay = schedule.getMainFirstRepay().multiply(vehCount);
//主产品期间月还
BigDecimal mainMidRepay = mainPeriod.subtract(new BigDecimal("2")).multiply(schedule.getMainMidRepay()).multiply(vehCount);
//主产品末期月还
BigDecimal mainLastRepay = schedule.getMainLastRepay().multiply(vehCount);
mainAmount = mainFirstRepay.add(mainMidRepay).add(mainLastRepay);
if (schedule.getIsOtherPolicy().equals("1")) {
//有其他融
//其他融期数
BigDecimal otherPeriod = new BigDecimal(schedule.getOtherPeriod());
//其他融首期月还
BigDecimal otherFirstRepay = schedule.getOtherFirstRepay().multiply(vehCount);
//其他融期间月还
BigDecimal otherMidRepay = otherPeriod.subtract(new BigDecimal("2")).multiply(schedule.getOtherMidRepay()).multiply(vehCount);
//其他融末期月还
BigDecimal otherLastRepay = schedule.getOtherLastRepay().multiply(vehCount);
otherAmount = otherFirstRepay.add(otherMidRepay).add(otherLastRepay);
amountAll = mainAmount.add(otherAmount);
record.setMainAmount(mainAmount.toString());
record.setOtherAmount(otherAmount.toString());
record.setAmountAll(amountAll.toString());
} else if (schedule.getIsOtherPolicy().equals("0")) {
//没有其他融
record.setMainAmount(mainAmount.toString());
record.setAmountAll(mainAmount.toString());
}
}
// record.setBuilded("是");
// List<LoanRepaymentHistory> histories = repaymentScheduleFeign.selHistoryBySid(repaymentSchedule.getData().getSid()).getData();
// if (histories.isEmpty() || histories == null) {
// record.setHandleBtn(true);
// }
// } else {
}
// else {
// record.setBuilded("否");
// if (StringUtils.isNotBlank(record.getBankContractNo())) {
// record.setHandleBtn(true);
@ -1095,7 +1270,7 @@ public class BusSalesOrderLoancontractService extends MybatisBaseService<BusSale
}
public int setRepaymentState(String sid,String createTime) {
return baseMapper.setRepaymentState(sid,createTime);
public int setRepaymentState(String sid, String createTime) {
return baseMapper.setRepaymentState(sid, createTime);
}
}

10
anrui-riskcenter-ui/src/api/repaymentschedule/repaymentschedule.js

@ -51,5 +51,15 @@ export default {
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
// 导出
exportExcel(data) {
return request({
url: '/buscenter/v1/bussalesorderloancontract/exportExcel',
method: 'post',
responseType: 'blob', // 表明返回服务器返回的数据类型
data: data,
headers: { 'Content-Type': 'application/json' }
})
}
}

90
anrui-riskcenter-ui/src/views/repaymentschedule/repaymentschedule.vue

@ -31,6 +31,16 @@
<el-form-item label="金融产品">
<el-input v-model="listQuery.params.policyName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="生成状态">
<el-select v-model="listQuery.params.builded" placeholder="请选择" clearable>
<el-option v-for="item in builded_list" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
</el-select>
</el-form-item>
<el-form-item label="生成日期">
<el-date-picker v-model="listQuery.params.createStartDate" :picker-options="pickerStartData(listQuery.params.createEndDate)" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
<span style="padding: 0 8px"></span>
<el-date-picker v-model="listQuery.params.createEndDate" :picker-options="pickerEndData(listQuery.params.createStartDate)" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" size="small" @click="handleFilter">查询
@ -55,16 +65,21 @@
<!-- <el-button type="primary" size="mini" @click="toInfo(scope.row)">查看</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="builded" label="是否已生成还款计划表" align="center" width="200"/>
<el-table-column prop="builded" label="生成状态" align="center" width="100"/>
<el-table-column prop="repaymentCreateTime" label="生成日期" align="center" width="100"/>
<el-table-column prop="useOrgName" label="分公司" align="center" width="120"/>
<el-table-column prop="orgName" label="销售部门" align="center" width="120"/>
<el-table-column prop="staffName" label="销售专员" align="center" width="100"/>
<el-table-column prop="loanContractNo" label="消贷合同编号" align="center" width="160"/>
<el-table-column prop="borrowerName" label="贷款人" align="center" width="100"/>
<el-table-column prop="vinNo" label="车架号" align="center" min-width="100"/>
<el-table-column prop="vinNo" label="车架号" align="center" min-width="180"/>
<el-table-column prop="cwDeptNo" label="财务部门编码" align="center" width="120"/>
<el-table-column prop="bankName" label="资方" align="center" width="100"/>
<el-table-column prop="bankContractNo" label="资方合同号" align="center" width="160"/>
<el-table-column prop="policyName" label="金融产品" align="center" width="300"/>
<el-table-column prop="mainAmount" label="主产品还款总金额" align="center" width="160"/>
<el-table-column prop="otherAmount" label="其它融还款总金额" align="center" width="160"/>
<el-table-column prop="amountAll" label="还款总计" align="center" width="120"/>
</el-table>
</div>
<!--End 主页面主要部分-->
@ -120,6 +135,13 @@ export default {
btnKey: 'downloadRepaymentPlan',
btnLabel: '下载还款计划表'
},
{
type: 'success',
size: 'small',
icon: 'export',
btnKey: 'doExport',
btnLabel: '导出'
},
{
type: 'info',
size: 'small',
@ -134,6 +156,16 @@ export default {
tableKey: 0,
list: [],
sids: [],
builded_list: [
{
dictKey: '1',
dictValue: '是'
},
{
dictKey: '0',
dictValue: '否'
}
],
state_list: [],
multipleSelection: [],
FormLoading: false,
@ -153,7 +185,10 @@ export default {
loanContractNo: '',
borrowerName: '',
bankName: '',
policyName: ''
policyName: '',
createStartDate: '',
createEndDate: '',
builded: ''
}
}
}
@ -177,6 +212,18 @@ export default {
})
},
methods: {
//
pickerStartData(newtime) {
return {
disabledDate(time) { return time.getTime() > new Date(newtime) - 1000 * 60 * 60 * 24 }
}
},
//
pickerEndData(newtime) {
return {
disabledDate(time) { return time.getTime() < new Date(newtime) - 1000 * 60 * 60 * 24 }
}
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -198,6 +245,9 @@ export default {
case 'doClose':
this.doClose()
break
case 'doExport':
this.doExport()
break
default:
break
}
@ -262,7 +312,10 @@ export default {
loanContractNo: '',
borrowerName: '',
bankName: '',
policyName: ''
policyName: '',
createStartDate: '',
createEndDate: '',
builded: ''
}
}
this.getList()
@ -319,6 +372,35 @@ export default {
this.$message({ showClose: true, type: 'error', message: '请至少选择一条记录进行下载操作' })
}
},
doExport() {
if (this.listQuery.params.createStartDate === '' || this.listQuery.params.createEndDate === '') {
this.$message({ showClose: true, type: 'error', message: '查询条件中的生成日期请选择开始日期和截止日期' })
return
}
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.exportExcel(this.listQuery.params).then((resp) => {
loading.close()
const blob = new Blob([resp], {
type: 'application/vnd.ms-excel'
})
const fileName = '消贷合同列表' + '.xls'
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'nonde'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
document.body.removeChild(elink)
}).catch(() => {
loading.close()
})
},
toInfo(row) {
this.viewState = 3
this.$refs['divInfo'].showInfo(row)

130
anrui-riskcenter-ui/src/views/repaymentschedule/repaymentscheduleAdd.vue

@ -98,6 +98,45 @@
</el-col>
</el-row>
</div>
<div v-if="different">
<el-row>
<el-col :span="24">
<el-form-item style="text-align: right"><el-checkbox style="margin-right: 5px" v-model="formobj.isDifferent" />其中一台车不同</el-form-item>
</el-col>
</el-row>
<div v-if="formobj.isDifferent">
<div class="title">主金融产品<span>{{ (formobj.policyName) }}</span></div>
<el-row>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>首期月还</div>
<el-form-item prop="singleMainFirstRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleMainFirstRepay" clearable placeholder=""/></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>期间月还</div>
<el-form-item prop="singleMainMidRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleMainMidRepay" clearable placeholder=""/></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>末期月还</div>
<el-form-item prop="singleMainLastRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleMainLastRepay" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
<div class="title">其它融<span>({{ formobj.otherPolicyName }})</span></div>
<el-row>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>首期月还</div>
<el-form-item prop="singleOtherFirstRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleOtherFirstRepay" clearable placeholder=""/></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>期间月还</div>
<el-form-item prop="singleOtherMidRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleOtherMidRepay" clearable placeholder=""/></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty"><span class="icon">*</span>末期月还</div>
<el-form-item prop="singleOtherLastRepay"><el-input class="addinputInfo addinputw" v-model="formobj.singleOtherLastRepay" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
</div>
</div>
</el-form>
</div>
</div>
@ -182,9 +221,76 @@ export default {
}
}
}
var singleMainFirstRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('主金融产品期间月还不能为空'))
} else {
if (value == '0') {
callback(new Error('主金融产品期间月还不能为零'))
} else {
callback()
}
}
}
var singleMainMidRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('主金融产品期间月还不能为空'))
} else {
if (value == '0') {
callback(new Error('主金融产品期间月还不能为零'))
} else {
callback()
}
}
}
var singleMainLastRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('主金融产品末期月还不能为空'))
} else {
if (value == '0') {
callback(new Error('主金融产品末期月还不能为零'))
} else {
callback()
}
}
}
var singleOtherFirstRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('其它融首期月还不能为空'))
} else {
if (value == '0') {
callback(new Error('其它融首期月还不能为零'))
} else {
callback()
}
}
}
var singleOtherMidRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('其它融期间月还不能为空'))
} else {
if (value == '0') {
callback(new Error('其它融期间月还不能为零'))
} else {
callback()
}
}
}
var singleOtherLastRepay = (rule, value, callback) => {
if (value === '') {
callback(new Error('其它融末期月还不能为空'))
} else {
if (value == '0') {
callback(new Error('其它融末期月还不能为零'))
} else {
callback()
}
}
}
return {
viewState: 1,
submitdisabled: false,
different: false,
formobj: {
salesOrderSid: '',
solutionsSid: '',
@ -208,6 +314,13 @@ export default {
otherMidRepay: '',
otherLastRepay: '',
isOtherPolicy: '',
isDifferent: false,
singleMainFirstRepay: '',
singleMainMidRepay: '',
singleMainLastRepay: '',
singleOtherFirstRepay: '',
singleOtherMidRepay: '',
singleOtherLastRepay: '',
userSid: '',
solutionsDetailsssVo: []
},
@ -219,6 +332,12 @@ export default {
otherFirstRepay: [{ required: true, validator: otherFirstRepay, trigger: 'blur' }],
otherMidRepay: [{ required: true, validator: otherMdRepay, trigger: 'blur' }],
otherLastRepay: [{ required: true, validator: otherLastRepay, trigger: 'blur' }],
singleMainFirstRepay: [{ required: true, validator: singleMainFirstRepay, trigger: 'blur' }],
singleMainMidRepay: [{ required: true, validator: singleMainMidRepay, trigger: 'blur' }],
singleMainLastRepay: [{ required: true, validator: singleMainLastRepay, trigger: 'blur' }],
singleOtherFirstRepay: [{ required: true, validator: singleOtherFirstRepay, trigger: 'blur' }],
singleOtherMidRepay: [{ required: true, validator: singleOtherMidRepay, trigger: 'blur' }],
singleOtherLastRepay: [{ required: true, validator: singleOtherLastRepay, trigger: 'blur' }],
otherBankNo: [{ required: true, message: '其它融资方合同号不能为空', trigger: 'blur' }],
otherRepayDate: [{ required: true, message: '其它融首期还款日不能为空', trigger: 'change' }]
}
@ -232,6 +351,9 @@ export default {
req.loanCreateSchedule({ salesOrderSid: sid }).then((res) => {
if (res.success) {
this.formobj = res.data
if (parseInt(this.formobj.vehCount) > 1) {
this.different = true
}
}
})
},
@ -295,10 +417,18 @@ export default {
otherMidRepay: '',
otherLastRepay: '',
isOtherPolicy: '',
isDifferent: false,
singleMainFirstRepay: '',
singleMainMidRepay: '',
singleMainLastRepay: '',
singleOtherFirstRepay: '',
singleOtherMidRepay: '',
singleOtherLastRepay: '',
userSid: '',
solutionsDetailsssVo: []
}
this.submitdisabled = false
this.different = false
this.$emit('doback')
}
}

14
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java

@ -61,4 +61,18 @@ public class LoanCreateSchedulePdfVo implements Vo {
private String sameBank;
private LoanSolutionsDetailsssVo solutionsDetailsssVo;
private String otherBankNo;
@ApiModelProperty("是否其中一台车不同")
private Boolean isDifferent ;
@ApiModelProperty("单独主产品首期月还")
private String singleMainFirstRepay;
@ApiModelProperty("单独主产品期间月还")
private String singleMainMidRepay;
@ApiModelProperty("单独主产品末期月还")
private String singleMainLastRepay;
@ApiModelProperty("单独其他融首期月还")
private String singleOtherFirstRepay;
@ApiModelProperty("单独其他融期间月还")
private String singleOtherMidRepay;
@ApiModelProperty("单独其他融末期月还")
private String singleOtherLastRepay;
}

15
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java

@ -74,6 +74,19 @@ public class LoanRepaymentSchedule extends BaseEntity {
private String otherBankNo;
@ApiModelProperty("推送财务凭证部门编码")
private String cwDeptNo;
@ApiModelProperty("是否其中一台车不同")
private String isDifferent ;
@ApiModelProperty("单独主产品首期月还")
private BigDecimal singleMainFirstRepay;
@ApiModelProperty("单独主产品期间月还")
private BigDecimal singleMainMidRepay;
@ApiModelProperty("单独主产品末期月还")
private BigDecimal singleMainLastRepay;
@ApiModelProperty("单独其他融首期月还")
private BigDecimal singleOtherFirstRepay;
@ApiModelProperty("单独其他融期间月还")
private BigDecimal singleOtherMidRepay;
@ApiModelProperty("单独其他融末期月还")
private BigDecimal singleOtherLastRepay;
}

9
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeign.java

@ -1,8 +1,8 @@
package com.yxt.anrui.riskcenter.api.loanrepaymentschedule;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusLoancontractForRepayQuery;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.LoanRepaymentPlanDetailsExportVo;
import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformationQuery;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformationVo;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -39,6 +39,11 @@ public interface LoanRepaymentScheduleFeign {
public ResultBean<LoanRepaymentSchedule> fetchBySid(@RequestParam("sid") String sid);
@PostMapping("/exportExcel")
@ApiOperation(value = "还款计划表导出")
public ResultBean<List<LoanRepaymentPlanDetailsExportVo>> exportExcel(@RequestBody List<String> sids);
@ApiOperation("生成还款计划表")
@PostMapping("/loanCreateSchedulePdf")
@ResponseBody

8
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentScheduleFeignFallback.java

@ -1,5 +1,7 @@
package com.yxt.anrui.riskcenter.api.loanrepaymentschedule;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusLoancontractForRepayQuery;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.LoanRepaymentPlanDetailsExportVo;
import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
@ -26,6 +28,12 @@ public class LoanRepaymentScheduleFeignFallback implements LoanRepaymentSchedule
return null;
}
@Override
public ResultBean exportExcel(List<String> sids) {
return null;
}
@Override
public ResultBean<String> loanCreateSchedulePdf(LoanCreateSchedulePdfVo dto) {
return null;

6
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java

@ -4,12 +4,12 @@ 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.buscenter.api.bussalesorderloancontract.LoanRepaymentPlanDetailsExportVo;
import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.*;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@ -40,4 +40,8 @@ public interface LoanRepaymentScheduleMapper extends BaseMapper<LoanRepaymentSch
List<MoneyAndPeriodVo> selPlansInfoByMainSidAndVinNo(@Param("mainSid") String mainSid, @Param("vinNo") String vinNo,@Param("mainOrOther") String mainOrOther);
String selSumAmountDueMoney(@Param("mainSid") String mainSid, @Param("vinNo") String vinNo,@Param("mainOrOther") String mainOrOther);
String selSumAmountDueMoneyByBusVinSid(@Param("mainSid") String mainSid,@Param("busVinSid") String busVinSid,@Param("mainOrOther") String mainOrOther);
List<LoanRepaymentPlanDetailsExportVo> selPlansExcel(@Param("sids") List<String> sids);
}

46
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml

@ -94,4 +94,48 @@
WHERE
scheduleSid = #{mainSid} AND policyOrOther = #{mainOrOther} AND vinNo LIKE CONCAT( '%', #{vinNo}, '%' )
</select>
</mapper>
<select id="selSumAmountDueMoneyByBusVinSid" resultType="java.lang.String">
SELECT
IFNULL(SUM(dueMoney),0)
FROM loan_repayment_plan_details
WHERE
scheduleSid = #{mainSid} AND policyOrOther = #{mainOrOther} AND busVinSid =#{busVinSid}
</select>
<select id="selPlansExcel"
resultType="com.yxt.anrui.buscenter.api.bussalesorderloancontract.LoanRepaymentPlanDetailsExportVo">
SELECT
@row_number := @row_number + 1 AS rankNo,
p.loanContractSid,
p.createTime,
p.customer,
p.staffName,
p.borrowerName,
p.vinNo,
p.vehMark,
p.loanContractNo,
p.bankContractNo,
p.bankName,
p.policyName,
p.period,
p.dueMoney,
p.dueDate,
CASE
p.policyOrOther
WHEN '1' THEN
'是'
WHEN '0' THEN
'否'
END AS policyOrOther,
p.dept,
p.useOrgName
FROM
loan_repayment_plan_details AS p,(
SELECT
@row_number := 0
) AS t
WHERE p.loanContractSid in
<foreach collection="sids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>

13
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleRest.java

@ -1,9 +1,11 @@
package com.yxt.anrui.riskcenter.biz.loanrepaymentschedule;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusLoancontractForRepayQuery;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.LoanRepaymentPlanDetailsExportVo;
import com.yxt.anrui.riskcenter.api.loanrepaymenthistory.LoanRepaymentHistory;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.*;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformationVo;
import com.yxt.common.base.utils.ExportExcelUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -12,6 +14,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
/**
@ -39,6 +44,12 @@ public class LoanRepaymentScheduleRest implements LoanRepaymentScheduleFeign {
return rb.success().setData(repaymentSchedule);
}
@Override
public ResultBean<List<LoanRepaymentPlanDetailsExportVo>> exportExcel(List<String> sids) {
return loanRepaymentScheduleService.exportExcel(sids);
}
@Override
public ResultBean<String> loanCreateSchedulePdf(LoanCreateSchedulePdfVo dto) {
return loanRepaymentScheduleService.loanCreateSchedulePdf(dto);

2376
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java

File diff suppressed because it is too large
Loading…
Cancel
Save