Browse Source

Merge remote-tracking branch 'origin/master'

master
dimengzhe 1 year ago
parent
commit
5199cb2a11
  1. 3
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java
  2. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/PrintConfirmDto.java
  3. 44
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/xcmmContractQuery.java
  4. 5
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java
  5. 392
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java
  6. 17
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java
  7. 2
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeign.java
  8. 2
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeignFallback.java
  9. 1
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java
  10. 2
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java
  11. 27
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/ScanRepaymentVo.java
  12. 2
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/RiskCenterApplication.java
  13. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepRest.java
  14. 37
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java
  15. 5
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java
  16. 15
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml
  17. 270
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java
  18. 217
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/ScheduledRepaymentService.java
  19. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanwarrantinformation/LoanWarrantInformationService.java

3
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java

@ -155,6 +155,9 @@ public interface CommonContractFeign {
@PostMapping("/printConfirm")
public ResultBean<List<PrintConfirmVo>> printConfirm(@RequestBody PrintConfirmDto dto);
@ApiOperation(value = "新车买卖合同打印pdf")
@PostMapping("/xcmmContract")
public ResultBean<List<PrintConfirmVo>> xcmmContract(@RequestBody PrintConfirmDto dto);
/******************************************************新车买卖合同审核(流程)******************************************************/

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/PrintConfirmDto.java

@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author liuguohui
* @version 1.0
@ -24,6 +26,9 @@ public class PrintConfirmDto implements Dto {
@ApiModelProperty("客户sid")
private String customerSid;
@ApiModelProperty("贷款人sid")
private String borrowerSid;
@ApiModelProperty("合同编号")
private String contractNo;

44
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/xcmmContractQuery.java

@ -0,0 +1,44 @@
package com.yxt.anrui.base.api.commoncontract;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("新车买卖合同条件")
@Data
public class xcmmContractQuery implements Query {
@ApiModelProperty("合同sid")
private String contractSid;
@ApiModelProperty("合同编号")
private String contractNo;
@ApiModelProperty("销售订单sid")
private String saleOrderSid;
@ApiModelProperty("客户sid")
private String customerSid;
@ApiModelProperty("客户名称")
private String customerName;
@ApiModelProperty("是否优惠:1是0否")
private String discountKey;
@ApiModelProperty("是否在保险公司购买保险:1是0否")
private String insuranceKey;
@ApiModelProperty("用户sid")
private String userSid;
@ApiModelProperty("甲方主体")
private String partyA;
@ApiModelProperty("乙方主体")
private String partyB;
@ApiModelProperty("预估报价方案")
private String revalencySchemeKey;
}

5
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java

@ -441,6 +441,11 @@ public class CommonContractRest implements CommonContractFeign {
return commonContractService.printConfirm(dto);
}
@Override
public ResultBean<List<PrintConfirmVo>> xcmmContract(PrintConfirmDto dto) {
return commonContractService.xcmmContract(dto);
}
public List getSheetVal(Sheet sheet, int[] resultCell) throws ParseException {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
List<CommonContract> punishmentList = new ArrayList<>();

392
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java

@ -47,6 +47,7 @@ import com.yxt.anrui.buscenter.api.busvehicleinformationhandover.BusVehicleInfor
import com.yxt.anrui.crm.api.crmcustomer.CrmCustomerFeign;
import com.yxt.anrui.crm.api.crmcustomerfile.CrmCustomerFileFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerFileDDto;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo;
import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleFeign;
@ -801,29 +802,56 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
private String genCarSaleContract(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String ftl = "";
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
//车架号集合
List<String> stringList = new ArrayList<>();
//查询台数
String num = priceInfo.getNumber();
String num = "";
if (StringUtils.isNotBlank(dto.getBorrowerSid())){
List<BusSalesOrderVehicle> busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(dto.getBusSid(),dto.getBorrowerSid()).getData();
num = String.valueOf(busSalesOrderVehicles.size());
for (BusSalesOrderVehicle busSalesOrderVehicle : busSalesOrderVehicles) {
stringList.add(busSalesOrderVehicle.getLinkNo().substring(busSalesOrderVehicle.getLinkNo().length() - 8));
}
}else {
num = priceInfo.getNumber();
stringList = orderModelInfoVo.getOrderVinList();
}
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
String remarks = "";
if ("现车".equals(appOrderDetailsVo.getOrderType())) {
//获取模板
ftl = "existingvehicles";
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
List<String> stringList = orderModelInfoVo.getOrderVinList();
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。车架号:" + String.join("、", stringList);
} else {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
} else {
map.put("dayOne", appOrderDetailsVo.getDepositInfo().getPayDepositDays());
map.put("dayOne", new BigDecimal(appOrderDetailsVo.getDepositInfo().getDeposit()).multiply(new BigDecimal(num)).toString());
//获取模板
ftl = "orderacar";
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
map.put("remarks", remarks);
//车价合计
String totalPrice = new BigDecimal(priceInfo.getSingleFinalPrice()).multiply(new BigDecimal(num)).toString();
map.put("totalPrice", totalPrice);
//车价合计大写
String priceRemarks = "";
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
map.put("priceRemarks", priceRemarks);
//订金合计
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = new BigDecimal(depositInfo.getDeposit()).multiply(new BigDecimal(num)).toString();
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
@ -845,29 +873,56 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
private String genCarSaleContract2(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String ftl = "";
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
//车架号集合
List<String> stringList = new ArrayList<>();
//查询台数
String num = priceInfo.getNumber();
String num = "";
if (StringUtils.isNotBlank(dto.getBorrowerSid())){
List<BusSalesOrderVehicle> busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(dto.getBusSid(),dto.getBorrowerSid()).getData();
num = String.valueOf(busSalesOrderVehicles.size());
for (BusSalesOrderVehicle busSalesOrderVehicle : busSalesOrderVehicles) {
stringList.add(busSalesOrderVehicle.getLinkNo().substring(busSalesOrderVehicle.getLinkNo().length() - 8));
}
}else {
num = priceInfo.getNumber();
stringList = orderModelInfoVo.getOrderVinList();
}
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
String remarks = "";
if ("现车".equals(appOrderDetailsVo.getOrderType())) {
//获取模板
ftl = "existingvehicles2";
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
List<String> stringList = orderModelInfoVo.getOrderVinList();
ftl = "existingvehicles";
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。车架号:" + String.join("、", stringList);
} else {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
} else {
map.put("dayOne", appOrderDetailsVo.getDepositInfo().getPayDepositDays());
map.put("dayOne", new BigDecimal(appOrderDetailsVo.getDepositInfo().getDeposit()).multiply(new BigDecimal(num)).toString());
//获取模板
ftl = "orderacar";
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
map.put("remarks", remarks);
//车价合计
String totalPrice = new BigDecimal(priceInfo.getSingleFinalPrice()).multiply(new BigDecimal(num)).toString();
map.put("totalPrice", totalPrice);
//车价合计大写
String priceRemarks = "";
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
map.put("priceRemarks", priceRemarks);
//订金合计
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = new BigDecimal(depositInfo.getDeposit()).multiply(new BigDecimal(num)).toString();
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
@ -1617,6 +1672,319 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return r;
}
public ResultBean<List<PrintConfirmVo>> xcmmContract(PrintConfirmDto dto) {
ResultBean<List<PrintConfirmVo>> rb = ResultBean.fireFail();
List<PrintConfirmVo> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
//客户信息
CrmCustomerTemp crmCustomerTemp = crmCustomerTempFeign.fetchEntity(dto.getCustomerSid()).getData();
//查询销售订单的信息
ResultBean<AppOrderDetailsVo> resultBean = busSalesOrderFeign.getSaleOrderDetails(dto.getBusSid());
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
AppOrderDetailsVo appOrderDetailsVo = resultBean.getData();
//查询销售订单的车型信息
AppOrderModelInfoVo appOrderModelInfoVo = appOrderDetailsVo.getModelInfo();
//根据车型sid查询车型的全称
BaseVehicleModel baseVehicleModel = baseVehicleModelService.fetchBySid(appOrderModelInfoVo.getModelSid());
BaseModelConfig baseModelConfig = baseModelConfigService.fetchBySid(appOrderModelInfoVo.getConfigSid());
String modelName = "车型:";
StringBuilder modeNameValue = new StringBuilder();
//车型名称(小名):系列+驱动+功能+空格+版本
if (StringUtils.isNotBlank(baseVehicleModel.getProductLineValue()) && !"-".equals(baseVehicleModel.getProductLineValue())) {
modeNameValue.append(baseVehicleModel.getProductLineValue());
}
//驱动
if (StringUtils.isNotBlank(baseVehicleModel.getDriveFormValue()) && !"-".equals(baseVehicleModel.getDriveFormValue())) {
modeNameValue.append(baseVehicleModel.getDriveFormValue());
}
//功能
if (StringUtils.isNotBlank(baseVehicleModel.getVehicleTypeValue()) && !"-".equals(baseVehicleModel.getVehicleTypeValue())) {
modeNameValue.append(baseVehicleModel.getVehicleTypeValue());
}
//版本
if (StringUtils.isNotBlank(baseVehicleModel.getVehicleVersionValue()) && !"-".equals(baseVehicleModel.getVehicleVersionValue())) {
modeNameValue.append(baseVehicleModel.getVehicleVersionValue());
}
modelName = modelName + modeNameValue.toString();
//车型全名称:发动机型号(空格)xxx马力+燃料+排放标准发动机、变速箱、缓速器、
// 后桥(若存在“桥”字样后不带“后桥”)、速比、轴距、悬架(若存在“悬架”字样后不带“悬架”)、
// 鞍座(若存在“鞍座”字样后不带“鞍座”)、燃料箱(若存在“油箱”字样后不带“燃料箱”)、轮胎(若存在“胎”字样后不带“轮胎”)、
// 轮毂材质、护轮罩。换行
//驾驶室+颜色驾驶室、导流罩、保险杠、后视镜、座椅、空调、独立热源、多媒体
StringBuilder modelAllName = new StringBuilder();
//发动机型号
if (StringUtils.isNotBlank(baseVehicleModel.getEngineTypeValue()) && !"-".equals(baseVehicleModel.getEngineTypeValue())) {
modelAllName.append(baseVehicleModel.getEngineTypeValue());
}
//马力
if (StringUtils.isNotBlank(baseVehicleModel.getPowerValue()) && !"-".equals(baseVehicleModel.getPowerValue())) {
modelAllName.append(" ").append(baseVehicleModel.getPowerValue()).append("马力");
}
//燃料
if (StringUtils.isNotBlank(baseVehicleModel.getFuelTypeValue()) && !"-".equals(baseVehicleModel.getFuelTypeValue())) {
modelAllName.append(baseVehicleModel.getFuelTypeValue());
}
//排放标准
if (StringUtils.isNotBlank(baseVehicleModel.getEmissionStandardValue()) && !"-".equals(baseVehicleModel.getEmissionStandardValue())) {
modelAllName.append(baseVehicleModel.getEmissionStandardValue());
}
modelAllName.append("发动机");
//变速箱
if (StringUtils.isNotBlank(baseVehicleModel.getGearboxTypeValue()) && !"-".equals(baseVehicleModel.getGearboxTypeValue())) {
modelAllName.append("、").append(baseVehicleModel.getGearboxTypeValue()).append("变速箱");
}
//缓速器
if (StringUtils.isNotBlank(baseModelConfig.getSlowMachine()) && !"-".equals(baseModelConfig.getSlowMachine())) {
modelAllName.append("、").append(baseModelConfig.getSlowMachine());
}
//后桥
if (StringUtils.isNotBlank(baseModelConfig.getRearAxleValue()) && !"-".equals(baseModelConfig.getRearAxleValue())) {
modelAllName.append("、").append(baseModelConfig.getRearAxleValue());
if (!baseModelConfig.getRearAxleValue().contains("桥")) {
modelAllName.append("后桥");
}
}
//速比
if (StringUtils.isNotBlank(baseModelConfig.getRearAxleRatio()) && !"-".equals(baseModelConfig.getRearAxleRatio())) {
modelAllName.append("、").append(baseModelConfig.getRearAxleRatio()).append("速比");
}
//轴距
if (StringUtils.isNotBlank(baseModelConfig.getWheelbase()) && !"-".equals(baseModelConfig.getWheelbase())) {
modelAllName.append("、").append(baseModelConfig.getWheelbase()).append("mm轴距");
}
//悬架
if (StringUtils.isNotBlank(baseModelConfig.getSuspension()) && !"-".equals(baseModelConfig.getSuspension())) {
modelAllName.append("、").append(baseModelConfig.getSuspension());
if (!baseModelConfig.getSuspension().contains("悬架")) {
modelAllName.append("悬架");
}
}
//鞍座
if (StringUtils.isNotBlank(baseModelConfig.getSaddle()) && !"-".equals(baseModelConfig.getSaddle())) {
modelAllName.append("、").append(baseModelConfig.getSaddle());
if (!baseModelConfig.getSaddle().contains("鞍座")) {
modelAllName.append("鞍座");
}
}
//燃料箱
if (StringUtils.isNotBlank(baseModelConfig.getFuelTank()) && !"-".equals(baseModelConfig.getFuelTank())) {
modelAllName.append("、").append(baseModelConfig.getFuelTank());
if (!baseModelConfig.getFuelTank().contains("油箱")) {
modelAllName.append("燃料箱");
}
}
//轮胎
if (StringUtils.isNotBlank(baseModelConfig.getTireSize()) && !"-".equals(baseModelConfig.getTireSize())) {
modelAllName.append("、").append(baseModelConfig.getTireSize());
if (!baseModelConfig.getTireSize().contains("胎")) {
modelAllName.append("轮胎");
}
}
//轮毂材质
if (StringUtils.isNotBlank(baseModelConfig.getHubMaterial()) && !"-".equals(baseModelConfig.getHubMaterial())) {
modelAllName.append("、").append(baseModelConfig.getHubMaterial());
}
//护轮罩
if (StringUtils.isNotBlank(baseModelConfig.getTireCover()) && !"-".equals(baseModelConfig.getTireCover())) {
modelAllName.append("、").append(baseModelConfig.getTireCover());
}
StringBuilder modelAllName2 = new StringBuilder();
modelAllName2.append("\t");
//驾驶室
if (StringUtils.isNotBlank(baseModelConfig.getSpecification()) && !"-".equals(baseModelConfig.getSpecification())) {
modelAllName2.append(baseModelConfig.getSpecification());
}
//颜色
if (StringUtils.isNotBlank(baseModelConfig.getCarColor()) && !"-".equals(baseModelConfig.getCarColor())) {
modelAllName2.append("/").append(baseModelConfig.getCarColor()).append("驾驶室");
}
//导流罩
if (StringUtils.isNotBlank(baseModelConfig.getBaffleModel()) && !"-".equals(baseModelConfig.getBaffleModel())) {
modelAllName2.append("、").append(baseModelConfig.getBaffleModel());
}
//保险杠
if (StringUtils.isNotBlank(baseModelConfig.getBumper()) && !"-".equals(baseModelConfig.getBumper())) {
modelAllName2.append("、").append(baseModelConfig.getBumper());
}
//后视镜
if (StringUtils.isNotBlank(baseModelConfig.getRearViewMirror()) && !"-".equals(baseModelConfig.getRearViewMirror())) {
modelAllName2.append("、").append(baseModelConfig.getRearViewMirror());
}
//座椅
if (StringUtils.isNotBlank(baseModelConfig.getSeat()) && !"-".equals(baseModelConfig.getSeat())) {
modelAllName2.append("、").append(baseModelConfig.getSeat());
if (!baseModelConfig.getSeat().contains("椅")) {
modelAllName2.append("座椅");
}
}
//空调
if (StringUtils.isNotBlank(baseModelConfig.getAirConditioner()) && !"-".equals(baseModelConfig.getAirConditioner())) {
modelAllName2.append("、").append(baseModelConfig.getAirConditioner());
}
//独立热源
if (StringUtils.isNotBlank(baseModelConfig.getIndependentSources()) && !"-".equals(baseModelConfig.getIndependentSources())) {
modelAllName2.append("、").append(baseModelConfig.getIndependentSources());
}
//多媒体
if (StringUtils.isNotBlank(baseModelConfig.getMultimedia()) && !"-".equals(baseModelConfig.getMultimedia())) {
modelAllName2.append("、").append(baseModelConfig.getMultimedia());
}
//特殊配置说明
if (StringUtils.isNotBlank(appOrderModelInfoVo.getSpecialInstructions())) {
modelAllName2.append("、").append("特殊配置说明:" + appOrderModelInfoVo.getSpecialInstructions());
}
modelAllName2.append("。");
String modelConfig = "配置:" + modelAllName + "。";
//上装:外廓尺寸+颜色+上装名称、板材厚度、板材材质、篷布滑道、冷藏冷机、自卸液压盖板、底板加热、更多配置
if (appOrderDetailsVo.getTopInfo() != null) {
AppOrderTopInfoVo topInfo = appOrderDetailsVo.getTopInfo();
String topName = appOrderDetailsVo.getTopMessage();
topName = "上装:制造尺寸与公告一致、" + topName + "。";
//只有为公司采购时才显示
if ("01".equals(topInfo.getBuyTypeKey())) {
map.put("topName", topName);
}
}
//优惠说明
String discountDetail = "";
if (StringUtils.isNotBlank(appOrderDetailsVo.getTotaldiscount())) {
List<AppOrderDiscountListVo> discountList = appOrderDetailsVo.getDiscountList();
discountDetail = "优惠说明:赠送价值" + appOrderDetailsVo.getTotaldiscount() + "元优惠包。包括";
for (int iii = 0; iii < discountList.size(); iii++) {
AppOrderDiscountListVo vv = discountList.get(iii);
String discountName = vv.getDiscountName();
if (iii == discountList.size() - 1) {
discountDetail = discountDetail + "价值" + vv.getPrice() + "元" + discountName + vv.getNumber() + "份(每份包含" + vv.getDiscountExplain() + ")。";
} else {
discountDetail = discountDetail + "价值" + vv.getPrice() + "元" + discountName + vv.getNumber() + "份(每份包含" + vv.getDiscountExplain() + "),";
}
}
map.put("discountDetail", discountDetail);
}
//交纳订金
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = depositInfo.getDepositTotal();
if ("02".equals(depositInfo.getDepositTypeKey())) {
ResultBean<List<BusDepositFictitiousDetailsVo>> listResultBean = busDepositFictitiousFeign.detailsList(depositInfo.getSid());
List<BusDepositFictitiousDetailsVo> listResultBeanData = listResultBean.getData();
listResultBeanData.removeAll(Collections.singleton(null));
if (!listResultBeanData.isEmpty()) {
String depositRemarks = "(其中";
for (int ii = 0; ii < listResultBeanData.size(); ii++) {
BusDepositFictitiousDetailsVo v = listResultBeanData.get(ii);
if (StringUtils.isNotBlank(v.getPayPath())) {
depositRemarks = depositRemarks + v.getDraweeName() + "在";
} else {
depositRemarks = depositRemarks + "乙方在";
}
if (ii == listResultBeanData.size() - 1) {
String b = v.getPaymentDate() + "转入甲方的" + v.getDeposit() + "元中的" + v.getPrice() + "元用于本次订金。";
depositRemarks = depositRemarks + b;
} else {
String b = v.getPaymentDate() + "转入甲方的" + v.getDeposit() + "元中的" + v.getPrice() + "元用于本次订金,";
depositRemarks = depositRemarks + b;
}
}
depositRemarks = depositRemarks + ")";
map.put("depositRemarks", depositRemarks);
}
}
map.put("createOrgName", dto.getCreateOrgName());
map.put("modelConfigs", modelAllName2.toString());
map.put("customerName", dto.getCustomerName());
map.put("mobile", crmCustomerTemp.getMobile());
map.put("idNo", crmCustomerTemp.getIDNumber());
map.put("modelName", modelName);
map.put("modelConfig", modelConfig);
if ("1".equals(appOrderDetailsVo.getIsInsurance())) {
//保险说明
String insuranceInfo = "保险说明:" + appOrderDetailsVo.getInsuranceInfoMessage() + "。";
map.put("insuranceInfo", insuranceInfo);
}
//车辆交付地点
//根据存放地点查询
String address = "";
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
if (StringUtils.isNotBlank(priceInfo.getPlannedPickUpLocationKey())) {
ScmWarehouseVo scmWarehouseVo = scmWarehouseFeign.fetchBySid(priceInfo.getPlannedPickUpLocationKey()).getData();
if (scmWarehouseVo != null) {
address = scmWarehouseVo.getWarehouseAttribute();
}
}
map.put("address", address);
//查询是否有公告型号
String publics = "公告型号:";
String publicModel = appOrderModelInfoVo.getPublicModel();
String publicModelSon = appOrderModelInfoVo.getPublicModelSon();
if (StringUtils.isNotBlank(publicModel)) {
publics = publics + publicModel;
map.put("publicModel", publics + "。");
if (StringUtils.isNotBlank(publicModelSon)) {
map.put("publicModel", publics + "、" + publicModelSon + "。");
}
}
map.put("contractNo", dto.getContractNo());
String url = "";
PrintConfirmVo printConfirmVo = null;
String urlAll = "";
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(1, 2,
1000, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
Future<String> future1 = pool.submit(() -> {
return genCarSaleContract(dto, map, appOrderDetailsVo);
});
Future<String> future1_2 = pool.submit(() -> {
return genCarSaleContract2(dto, map, appOrderDetailsVo);
});
Future<String> future8 = null;
List<File> filesList = new ArrayList<>();
if (future1 != null) {
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
}
if (future1_2 != null) {
if (StringUtils.isNotBlank(future1_2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1_2.get());
filesList.add(file);
}
}
//合并pdf文件
if (future8 != null) {
if (StringUtils.isNotBlank(future8.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future8.get());
filesList.add(file);
}
}
if (filesList.size() > 0) {
String typeName = appOrderDetailsVo.getPayType() + dto.getContractNo() + ".pdf";
File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName);
System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName);
urlAll = typeName;
}
if (StringUtils.isNotBlank(urlAll)) {
printConfirmVo = new PrintConfirmVo();
printConfirmVo.setName(MessageFormat.format("《{0}》", appOrderDetailsVo.getPayType() + dto.getContractNo()));
printConfirmVo.setDownloadUrl(docPdfComponent.getPrefixTemplateUrl() + urlAll);
list.add(printConfirmVo);
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成文件失败:==========================" + e.getMessage());
return rb.setMsg("生成文件失败");
}
return rb.success().setData(list);
}
public ResultBean<List<PrintConfirmVo>> printConfirm(PrintConfirmDto dto) {
ResultBean<List<PrintConfirmVo>> rb = ResultBean.fireFail();
List<PrintConfirmVo> list = new ArrayList<>();
@ -2983,4 +3351,6 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return rb.success().setData(records);
}
}

17
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java

@ -1350,15 +1350,6 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
public ResultBean submitFinBillApplication(SubmitFinBillApplicationDto dto) {
ResultBean rb = ResultBean.fireFail();
String contractNo = dto.getContractNo();
List<FinBillApplicationDetailsVo> finBillApplicationDetailsVos = baseMapper.selectByContractNo(contractNo);
/*if (finBillApplicationDetailsVos != null) {
for (FinBillApplicationDetailsVo finBillApplicationDetailsVo : finBillApplicationDetailsVos) {
String nodeState = finBillApplicationDetailsVo.getNodeState();
if (!"待提交".equals(nodeState) && !"已办结".equals(nodeState) && !"终止".equals(nodeState) && !"发起申请".equals(nodeState)) {
return rb.setMsg("该合同已有开票/欠款开票申请正在审批中,不可提交");
}
}
}*/
//判断车辆是否发起过开票申请
List<FinBillVehicleDto> finBillVehicles = dto.getFinBillVehicles();
for (FinBillVehicleDto finBillVehicle : finBillVehicles) {
@ -1403,6 +1394,14 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
BusinessVariables bv = new BusinessVariables();
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//判断是否担保贷款,若是,则isdbdk网关参数为true=============添加
BusSalesOrder busSalesOrder = busSalesOrderFeign.selectOrderByContractNo(contractNo).getData();
variables.put("isdbdk", "2".equals(busSalesOrder.getPayTypeKey()));
//判断是否是高低开,若是,则isAdj网关参数为true=============添加
BusSalesOrderPrice data = busSalesOrderFeign.selectByContractNo(contractNo).getData();
if (data != null) {
variables.put("isAdj", !data.getSingleFinalPrice().equals(finBillApplication.getOneBillMoney()));
}
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);

2
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeign.java

@ -89,7 +89,7 @@ public interface LoanHomevisitPrepFeign {
@ApiOperation("生成消贷合同")
@PostMapping("/saveLoanCon")
@ResponseBody
public ResultBean saveLoanCon(@RequestParam("sid") String sid, @RequestParam("conSetUpKey") String conSetUpKey);
public ResultBean<String> saveLoanCon(@RequestParam("sid") String sid, @RequestParam("conSetUpKey") String conSetUpKey);
@ApiOperation("确定贷款人推送家纺准备")
@PostMapping("/saveHomeVisit")

2
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeignFallback.java

@ -81,7 +81,7 @@ public class LoanHomevisitPrepFeignFallback implements LoanHomevisitPrepFeign {
}
@Override
public ResultBean saveLoanCon(String sid, String conSetUpKey) {
public ResultBean<String> saveLoanCon(String sid, String conSetUpKey) {
return null;
}

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

@ -16,6 +16,7 @@ import java.util.Date;
@Data
public class LoanCreateSchedulePdfVo implements Vo {
private String userSid;
@ApiModelProperty("销售订单sid")
private String salesOrderSid;
@ApiModelProperty("金融方案sid")

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

@ -44,6 +44,8 @@ public class LoanRepaymentSchedule extends BaseEntity {
private String mainPeriod;
@ApiModelProperty("主产品首期还款日")
private Date mainRepayDate;
@ApiModelProperty("主产品末期还款日")
private Date mainLastDate;
@ApiModelProperty("主产品首期月还")
private BigDecimal mainFirstRepay;
@ApiModelProperty("主产品期间月还")

27
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/ScanRepaymentVo.java

@ -0,0 +1,27 @@
package com.yxt.anrui.riskcenter.api.loanrepaymentschedule;
import lombok.Data;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
/**
* @author Administrator
* @description
* @date 2023/11/7 11:19
*/
@Data
public class ScanRepaymentVo {
private String sid;
private String sendSid;
private String staffSid;
private String mainStartDate;
private String borrowerSid;
private String mainPeriod;
private String otherPeriod;
private String otherStartDate;
private String borrowerName;
HashSet<String> hashSet = new HashSet<>();
}

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

@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* @author dimengzhe
@ -14,6 +15,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
"com.yxt.anrui.riskcenter"
})
@EnableDiscoveryClient
@EnableScheduling
@EnableFeignClients(basePackages = {"com.yxt.anrui.fin","com.yxt.anrui.portal","com.yxt.anrui.buscenter","com.yxt.messagecenter","com.yxt.anrui.crm","com.yxt.anrui.base","com.yxt.anrui.flowable"})
public class RiskCenterApplication {

3
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepRest.java

@ -25,6 +25,7 @@
*********************************************************/
package com.yxt.anrui.riskcenter.biz.loanhomevisitprep;
import com.yxt.anrui.base.api.commoncontract.PrintConfirmVo;
import com.yxt.anrui.riskcenter.api.loanhomevisitprep.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
@ -104,7 +105,7 @@ public class LoanHomevisitPrepRest implements LoanHomevisitPrepFeign {
}
@Override
public ResultBean saveLoanCon(String sid, String conSetUpKey) {
public ResultBean<String> saveLoanCon(String sid, String conSetUpKey) {
return loanHomevisitPrepService.saveLoanCon(sid, conSetUpKey);
}

37
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java

@ -31,8 +31,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateDto;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateEnum;
import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleStateFeign;
import com.yxt.anrui.base.api.commoncontract.CommonContract;
import com.yxt.anrui.base.api.commoncontract.CommonContractFeign;
import com.yxt.anrui.base.api.commoncontract.PrintConfirmDto;
import com.yxt.anrui.base.api.commoncontract.PrintConfirmVo;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontract;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontractDto;
@ -89,6 +95,8 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
private BusSalesOrderBorrowerFeign busSalesOrderBorrowerFeign;
@Autowired
private LoanHomevisitInvestigateService loanHomevisitInvestigateService;
@Autowired
private CommonContractFeign commonContractFeign;
public PagerVo<LoanHomevisitPrepVo> listPageVo(PagerQuery<LoanHomevisitPrepQuery> pq) {
LoanHomevisitPrepQuery query = pq.getParams();
@ -235,8 +243,8 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
return rb.success().setData(contractSetKey);
}
public ResultBean saveLoanCon(String sid, String conSetUpKey) {
ResultBean rb = ResultBean.fireFail();
public ResultBean<String> saveLoanCon(String sid, String conSetUpKey) {
ResultBean<String> rb = ResultBean.fireFail();
LoanHomevisitPrepVo loanHomevisitPrepVo = baseMapper.selectDetails(sid);
List<BusSalesOrderVehicle> busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(loanHomevisitPrepVo.getSaleOrderSid(),loanHomevisitPrepVo.getBorrowerSid()).getData();
BusSalesOrder busSalesOrder = busSalesOrderFeign.fetchBySid(loanHomevisitPrepVo.getSaleOrderSid()).getData();
@ -286,6 +294,31 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
busSalesOrderVehicleFeign.updateXDCon(busSalesOrderVehicle.getSid(), loanContractSid);
}
}
//贷款人生成车辆买卖合同
PrintConfirmDto printConfirmDto = new PrintConfirmDto();
CommonContract commonContract = commonContractFeign.selectByNo(loanHomevisitPrepVo.getContractNo()).getData();
printConfirmDto.setSid(commonContract.getSid());
printConfirmDto.setBusSid(loanHomevisitPrepVo.getSaleOrderSid());
BusSalesOrderBorrowerDetailsVo busSalesOrderBorrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(loanHomevisitPrepVo.getBorrowerSid()).getData();
printConfirmDto.setCustomerSid(busSalesOrderBorrowerDetailsVo.getCustomSid());
printConfirmDto.setBorrowerSid(busSalesOrderBorrowerDetailsVo.getSid());
printConfirmDto.setContractNo(loanHomevisitPrepVo.getContractNo());
printConfirmDto.setCustomerName(loanHomevisitPrepVo.getBorrowerName());
printConfirmDto.setDiscountKey("0");
printConfirmDto.setInsuranceKey("0");
LoanHomevisitPrep loanHomevisitPrep = fetchBySid(sid);
printConfirmDto.setUserSid(loanHomevisitPrep.getCreateBySid());
//查询销售订单的信息
ResultBean<AppOrderDetailsVo> resultBean = busSalesOrderFeign.getSaleOrderDetails(loanHomevisitPrepVo.getSaleOrderSid());
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
AppOrderDetailsVo appOrderDetailsVo = resultBean.getData();
//甲方
String createOrgName = appOrderDetailsVo.getSalesOrg();
printConfirmDto.setCreateOrgName(createOrgName);
List<PrintConfirmVo> printConfirmVos = commonContractFeign.xcmmContract(printConfirmDto).getData();
String xcmmContractUrl = printConfirmVos.get(0).getDownloadUrl();
return rb.success();
}

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

@ -8,10 +8,13 @@ import com.yxt.anrui.riskcenter.api.loanparameter.LoanParameter;
import com.yxt.anrui.riskcenter.api.loanparameter.LoanParameterVo;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.AppRepaymentPlanVo;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentSchedule;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.ScanRepaymentVo;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description:
@ -25,4 +28,6 @@ public interface LoanRepaymentScheduleMapper extends BaseMapper<LoanRepaymentSch
LoanRepaymentSchedule selectByContractSid(String salesOrderSid);
IPage<AppRepaymentPlanVo> getRepaymentPlanList(IPage<LoanRepaymentSchedule> page, @Param(Constants.WRAPPER) QueryWrapper<LoanWarrantInformation> qw);
List<ScanRepaymentVo> scanRepayment();
}

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

@ -24,4 +24,19 @@
${ew.sqlSegment}
</where>
</select>
<select id="scanRepayment"
resultType="com.yxt.anrui.riskcenter.api.loanrepaymentschedule.ScanRepaymentVo">
SELECT sid,
createBySid as sendSid,
staffSid,
mainPeriod,
otherPeriod,
borrowerSid,
borrowerName,
mainRepayDate as mainStartDate,
otherRepayDate as otherStartDate
FROM loan_repayment_schedule
WHERE curdate() &lt;= mainLastDate
and isDelete = 0
</select>
</mapper>

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

@ -4,9 +4,15 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.api.R;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.buscenter.api.bushandover.BusHandover;
import com.yxt.anrui.buscenter.api.bushandoveritems.BusHandoverItems;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign;
import com.yxt.anrui.buscenter.api.bussalesorder.SolutionsDetailsssVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontract;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontractDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderloancontract.BusSalesOrderLoancontractFeign;
@ -15,10 +21,16 @@ import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.buscenter.api.busvehicledatahandover.BusDataListPdfVo;
import com.yxt.anrui.buscenter.api.busvehicledatahandover.BusVehicleDataHandoverPdfVo;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.PrivilegeQuery;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserInfoVo;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanfinpolicy.LoanFinPolicyVo;
import com.yxt.anrui.riskcenter.api.loanmortgageinformationtransact.LoanMortgageInformationTransactDto;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.*;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutions;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
@ -28,23 +40,32 @@ import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformatio
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformationVo;
import com.yxt.anrui.riskcenter.biz.loansolutions.LoanSolutionsService;
import com.yxt.anrui.riskcenter.biz.loansolutionsotherpolicy.LoanSolutionsOtherpolicyService;
import com.yxt.anrui.riskcenter.biz.loanwarrantinformation.LoanWarrantInformationService;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.MsgWs;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.base.utils.WordConvertUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.messagecenter.api.message.MessageFeign;
import com.yxt.messagecenter.api.message.MessagePushTransferDto;
import com.yxt.messagecenter.api.messagelist.MessageListDto;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@ -74,6 +95,14 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
private DocPdfComponent docPdfComponent;
@Autowired
private BusSalesOrderFeign busSalesOrderFeign;
@Autowired
private BusSalesOrderBorrowerFeign busSalesOrderBorrowerFeign;
@Autowired
private CrmCustomerTempFeign crmCustomerTempFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private LoanWarrantInformationService loanWarrantInformationService;
/**
* 根据销售订单SID生成还款计划表回显
@ -131,6 +160,9 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
}
LoanRepaymentSchedule schedule = baseMapper.selectByContractSid(salesOrderSid);
if (null != schedule) {
if (StringUtils.isNotBlank(schedule.getCreateBySid())) {
vo.setUserSid(schedule.getCreateBySid());
}
// 主产品首期还款日
if (null != schedule.getMainRepayDate()) {
vo.setMainRepayDate(sdf.format(schedule.getMainRepayDate()));
@ -248,6 +280,9 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
BeanUtil.copyProperties(dto, entity, "id", "sid");
entity.setLoanContractSid(dto.getSalesOrderSid());
entity.setSalesOrderSid(orderSid);
if (StringUtils.isNotBlank(dto.getUserSid())) {
entity.setCreateBySid(dto.getUserSid());
}
BusSalesOrder busSalesOrder = busSalesOrderFeign.fetchBySid(orderSid).getData();
if (null != busSalesOrder) {
if (StringUtils.isNotBlank(busSalesOrder.getCreateBySid())) {
@ -265,7 +300,6 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
entity.setVinNo(String.join(",", stringVinNos));
}
}
BusSalesOrderLoancontractDetailsVo loancontractVo = busSalesOrderLoancontractFeign.fetchDetailsBySid(dto.getSalesOrderSid()).getData();
if (null != loancontractVo) {
if (StringUtils.isNotBlank(loancontractVo.getBorrowerSid())) {
@ -278,7 +312,118 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
entity.setPolicyName(loancontractVo.getPolicyName());
}
}
List<String> repayDate = returnRepayDate(dto.getMainRepayDate(), dto.getMainPeriod());
if (!repayDate.isEmpty()) {
String lastDate = repayDate.get(repayDate.size() - 1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(lastDate);
entity.setMainLastDate(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
baseMapper.insert(entity);
// 使用多线程推送站内信发送短信
try {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
ExecutorService pool = new ThreadPoolExecutor(2, 100,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
LoanRepaymentSchedule schedule = fetchBySid(entity.getSid());
Future future1 = pool.submit(() -> {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
if (null != schedule) {
String vinNo = "";
String customerPhone = "";
String month = "";
String day = "";
String period = "";
String customer = "";
String staffSid = "";
String sendSid = "";
String sendName = "";
String staffName = "";
String sendDept = "";
String sendDeptSid = "";
if (StringUtils.isNotBlank(schedule.getCreateBySid())) {
sendSid = schedule.getCreateBySid();
SysUserVo userVo = sysUserFeign.fetchBySid(sendSid).getData();
if (null != userVo) {
sendName = userVo.getName();
sendDept = userVo.getOrganizationName();
sendDeptSid = userVo.getOrganizationSid();
}
}
if (StringUtils.isNotBlank(schedule.getStaffSid())) {
staffSid = schedule.getStaffSid();
}
if (StringUtils.isNotBlank(schedule.getStaffName())) {
staffName = schedule.getStaffName();
}
if (StringUtils.isNotBlank(schedule.getBorrowerName())) {
customer = schedule.getBorrowerName();
}
if (StringUtils.isNotBlank(schedule.getMainPeriod())) {
period = schedule.getMainPeriod();
}
if (StringUtils.isNotBlank(schedule.getVinNo())) {
vinNo = schedule.getVinNo();
}
if (StringUtils.isNotBlank(schedule.getBorrowerSid())) {
String borrowerSid = schedule.getBorrowerSid();
BusSalesOrderBorrowerDetailsVo borrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(borrowerSid).getData();
if (null != borrowerDetailsVo) {
if (StringUtils.isNotBlank(borrowerDetailsVo.getCustomSid())) {
CrmCustomerTempVo customerTempVo = crmCustomerTempFeign.fetchSid(borrowerDetailsVo.getCustomSid()).getData();
if (null != customerTempVo) {
if (StringUtils.isNotBlank(customerTempVo.getMobile())) {
customerPhone = customerTempVo.getMobile();
}
}
}
}
}
if (schedule.getMainRepayDate() != null) {
String format = sdf.format(schedule.getMainRepayDate());
String[] split = format.split("-");
String sMonth = split[1];
String sDay = split[2];
if (Integer.parseInt(sMonth) < 10) {
sMonth = sMonth.replace("0", "");
}
if (Integer.parseInt(sDay) < 10) {
sDay = sDay.replace("0", "");
}
month = sMonth;
day = sDay;
}
String contentCustomer = "尊敬的客户:您的车架号为" + vinNo + "车辆,首期还款日为" + month + "月" + day + "日,期数为" + period + "期,每月" + day + "日为您的还款日,请及时还款。";
String res = MsgWs.SendWaitWorkMsg(customerPhone, contentCustomer);
System.out.println("还款发送短信:" + res);
System.out.println(contentCustomer);
String contentStaff = "您的贷款客户" + customer + "的还款计划表已生成";
//消息推送
MessagePushTransferDto messagePushTransferDto = new MessagePushTransferDto();
messagePushTransferDto.setMsgTypeSid("bc59c198-2d51-458f-913e-cbd8d7ef4799");
messagePushTransferDto.setMsgType("业务");
messagePushTransferDto.setMsgTitle("生成还款计划表");
messagePushTransferDto.setMsgContent(contentStaff);
messagePushTransferDto.setMsgSource("还款计划表");
messagePushTransferDto.setSenderSid(sendSid);
messagePushTransferDto.setSenderName(sendName);
messagePushTransferDto.setSenderDeptSid(sendDeptSid);
messagePushTransferDto.setSenderDeptName(sendDept);
messagePushTransferDto.setBusinessSid(schedule.getSid());
messagePushTransferDto.setReceiveSids(staffSid);
messagePushTransferDto.setReceiveNames(staffName);
messageFeign.pushTransferMessage(messagePushTransferDto);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
// 生成还款计划表pdf
String template = "/template/";
@ -297,6 +442,128 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
return rb.success().setData(returnPath);
}
/**
* 根据首期还款日+主产品期数推算主产品月还日期
*
* @param firstDate
* @param period
* @return
*/
public List<String> returnRepayDate(String firstDate, String period) {
String[] split = firstDate.split("-");
String year = split[0];
String month = split[1];
String day = split[2];
List<String> dateList = new ArrayList<>();
int p = Integer.parseInt(period);
String date = "";
String temp = "";
for (int i = 1; i <= p; i++) {
if (Integer.parseInt(month) < 10 && !month.equals("01")) {
temp = "0";
} else {
temp = "";
}
date = year + "-" + temp + month + "-" + day;
int m = Integer.parseInt(month);
month = String.valueOf(++m);
if (Integer.parseInt(month) > 12) {
int y = Integer.parseInt(year);
year = String.valueOf(++y);
month = "01";
}
dateList.add(date);
}
return dateList;
}
/**
* 返回三天之前时间
*
* @param day
* @return
*/
public String beforeThreeDay(String day) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(day);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -3);
return sdf.format(c.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
/**
* 返回三天之后时间
*
* @param day
* @return
*/
public String afterThreeDay(String day) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(day);
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 3);
return sdf.format(c.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
/**
* 返回提醒日期
*
* @param firstDate
* @param period
* @return
*/
public List<String> returnDayList(String firstDate, String period) {
String[] split = firstDate.split("-");
String year = split[0];
String month = split[1];
String day = split[2];
List<String> dateList = new ArrayList<>();
int p = Integer.parseInt(period);
String date = "";
String temp = "";
for (int i = 1; i <= p; i++) {
if (Integer.parseInt(month) < 10 && !month.equals("01")) {
temp = "0";
} else {
temp = "";
}
date = year + "-" + temp + month + "-" + day;
int m = Integer.parseInt(month);
month = String.valueOf(++m);
if (Integer.parseInt(month) > 12) {
int y = Integer.parseInt(year);
year = String.valueOf(++y);
month = "01";
}
dateList.add(date);
}
List<String> finalList = new ArrayList<>();
if (!dateList.isEmpty()) {
for (String s : dateList) {
String finalDay = beforeThreeDay(s);
finalList.add(finalDay);
}
}
return finalList;
}
public List<ScanRepaymentVo> scanRepaymentVos() {
List<ScanRepaymentVo> schedules = baseMapper.scanRepayment();
return schedules;
}
/**
* 还款计划表多台回显
*
@ -586,6 +853,7 @@ public class LoanRepaymentScheduleService extends MybatisBaseService<LoanRepayme
return rb.success().setData(list);
}
//---------------------app接口----------------------------
public PagerVo<AppRepaymentPlanVo> getRepaymentPlanList(PagerQuery<AppRepaymentPlanQuery> pq) {
IPage<LoanRepaymentSchedule> page = PagerUtil.queryToPage(pq);

217
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/ScheduledRepaymentService.java

@ -0,0 +1,217 @@
package com.yxt.anrui.riskcenter.biz.loanrepaymentschedule;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorderborrower.BusSalesOrderBorrowerFeign;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempFeign;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanRepaymentSchedule;
import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.ScanRepaymentVo;
import com.yxt.anrui.riskcenter.api.loanwarrantinformation.LoanWarrantInformation;
import com.yxt.anrui.riskcenter.biz.loanwarrantinformation.LoanWarrantInformationService;
import com.yxt.common.base.utils.MsgWs;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.messagecenter.api.message.MessageFeign;
import com.yxt.messagecenter.api.message.MessagePushTransferDto;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
/**
* @author Administrator
* @description
* @date 2023/11/7 14:02
*/
@Component
public class ScheduledRepaymentService {
@Autowired
private LoanRepaymentScheduleService loanRepaymentScheduleService;
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private BusSalesOrderBorrowerFeign busSalesOrderBorrowerFeign;
@Autowired
private CrmCustomerTempFeign crmCustomerTempFeign;
@Autowired
private BusSalesOrderVehicleFeign busSalesOrderVehicleFeign;
@Autowired
private LoanWarrantInformationService loanWarrantInformationService;
/**
* 定时任务每天扫描还款日期发送信息
*/
//@Scheduled(cron = "0 0 0 * * ?")
// @Scheduled(cron = "0 0/5 16 * * ?")
// @Scheduled(cron = "0/30 * * * * ?") //每30秒执行一次
// @Scheduled(cron = "0 0/5 * * * ?")
public void scanRepayment() {
List<ScanRepaymentVo> schedules = loanRepaymentScheduleService.scanRepaymentVos();
schedules.removeAll(Collections.singleton(null));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formatDate = sdf.format(new Date());
if (!schedules.isEmpty()) {
for (ScanRepaymentVo entity : schedules) {
HashSet<String> hashSet = new HashSet<>();
List<String> mainList = new ArrayList<>();
if (StringUtils.isNotBlank(entity.getMainStartDate())) {
String mainStartDate = entity.getMainStartDate();
String mainPeriod = entity.getMainPeriod();
mainList = loanRepaymentScheduleService.returnDayList(mainStartDate, mainPeriod);
}
List<String> otherList = new ArrayList<>();
if (StringUtils.isNotBlank(entity.getOtherStartDate())) {
String otherStartDate = entity.getOtherStartDate();
String otherPeriod = entity.getOtherPeriod();
otherList = loanRepaymentScheduleService.returnDayList(otherStartDate, otherPeriod);
}
mainList.addAll(otherList);
if (!mainList.isEmpty()) {
for (String s : mainList) {
hashSet.add(s);
}
entity.setHashSet(hashSet);
}
if (hashSet.contains(formatDate)) {
LoanRepaymentSchedule schedule = loanRepaymentScheduleService.fetchBySid(entity.getSid());
if (null != schedule) {
String vinNo = "";
String customerPhone = "";
String month = "";
String day = "";
String period = "";
String customer = "";
String staffSid = "";
String sendSid = "";
String sendName = "";
String staffName = "";
String sendDept = "";
String sendDeptSid = "";
String vinMark = "";
StringBuffer sbVinMark = new StringBuffer();
if (StringUtils.isNotBlank(schedule.getCreateBySid())) {
sendSid = schedule.getCreateBySid();
SysUserVo userVo = sysUserFeign.fetchBySid(sendSid).getData();
if (null != userVo) {
sendName = userVo.getName();
sendDept = userVo.getOrganizationName();
sendDeptSid = userVo.getOrganizationSid();
}
}
if (StringUtils.isNotBlank(schedule.getStaffSid())) {
staffSid = schedule.getStaffSid();
}
if (StringUtils.isNotBlank(schedule.getStaffName())) {
staffName = schedule.getStaffName();
}
if (StringUtils.isNotBlank(schedule.getBorrowerName())) {
customer = schedule.getBorrowerName();
}
if (StringUtils.isNotBlank(schedule.getMainPeriod())) {
period = schedule.getMainPeriod();
}
if (StringUtils.isNotBlank(schedule.getVinNo())) {
vinNo = schedule.getVinNo();
}
if (StringUtils.isNotBlank(schedule.getBorrowerSid())) {
String borrowerSid = schedule.getBorrowerSid();
BusSalesOrderBorrowerDetailsVo borrowerDetailsVo = busSalesOrderBorrowerFeign.fetchDetailsBySid(borrowerSid).getData();
if (null != borrowerDetailsVo) {
if (StringUtils.isNotBlank(borrowerDetailsVo.getCustomSid())) {
CrmCustomerTempVo customerTempVo = crmCustomerTempFeign.fetchSid(borrowerDetailsVo.getCustomSid()).getData();
if (null != customerTempVo) {
if (StringUtils.isNotBlank(customerTempVo.getMobile())) {
customerPhone = customerTempVo.getMobile();
}
}
}
}
String salesOrderSid = schedule.getSalesOrderSid();
List<BusSalesOrderVehicle> orderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(salesOrderSid, borrowerSid).getData();
if (!orderVehicles.isEmpty()) {
for (BusSalesOrderVehicle orderVehicle : orderVehicles) {
LoanWarrantInformation loanWarrantInformation = loanWarrantInformationService.fetchByBusVinSid(orderVehicle.getSid());
if (null != loanWarrantInformation) {
if (StringUtils.isNotBlank(loanWarrantInformation.getVehicleMark())) {
sbVinMark.append(loanWarrantInformation.getVehicleMark()).append(",");
}
}
}
if (sbVinMark.length() > 0) {
sbVinMark.delete(sbVinMark.length() - 1, sbVinMark.length());
vinMark = sbVinMark.toString();
}
}
}
String afterThreeDay = loanRepaymentScheduleService.afterThreeDay(formatDate);
if (StringUtils.isNotBlank(afterThreeDay)) {
String[] split = afterThreeDay.split("-");
String sMonth = split[1];
String sDay = split[2];
if (Integer.parseInt(sMonth) < 10) {
sMonth = sMonth.replace("0", "");
}
if (Integer.parseInt(sDay) < 10) {
sDay = sDay.replace("0", "");
}
month = sMonth;
day = sDay;
}
String contentCustomer = "尊敬的客户:您的车牌号为" + vinMark + "车辆,还款日为" + month + "月" + day + "日,请及时还款。";
String res = MsgWs.SendWaitWorkMsg(customerPhone, contentCustomer);
System.out.println("还款发送短信:" + res);
System.out.println(contentCustomer);
if (StringUtils.isNotBlank(entity.getMainStartDate())) {
String beforeThreeDay = loanRepaymentScheduleService.beforeThreeDay(entity.getMainStartDate());
if (beforeThreeDay.equals(formatDate)) {
String m = "";
String d = "";
String[] split = entity.getMainStartDate().split("-");
String fmonth = split[1];
String fday = split[2];
if (Integer.parseInt(fmonth) < 10) {
m = fmonth.replace("0", "");
} else {
m = fmonth;
}
if (Integer.parseInt(fday) < 10) {
d = fday.replace("0", "");
} else {
d = fday;
}
String contentStaff = "您的贷款客户" + customer + "的车辆首期还款日为" + m + "月" + d + "日,请及时提醒客户。";
System.out.println(contentStaff);
//消息推送
MessagePushTransferDto messagePushTransferDto = new MessagePushTransferDto();
messagePushTransferDto.setMsgTypeSid("bc59c198-2d51-458f-913e-cbd8d7ef4799");
messagePushTransferDto.setMsgType("业务");
messagePushTransferDto.setMsgTitle("提醒客户还款");
messagePushTransferDto.setMsgContent(contentStaff);
messagePushTransferDto.setMsgSource("还款计划表");
messagePushTransferDto.setSenderSid(sendSid);
messagePushTransferDto.setSenderName(sendName);
messagePushTransferDto.setSenderDeptSid(sendDeptSid);
messagePushTransferDto.setSenderDeptName(sendDept);
messagePushTransferDto.setBusinessSid(schedule.getSid());
messagePushTransferDto.setReceiveSids(staffSid);
messagePushTransferDto.setReceiveNames(staffName);
messageFeign.pushTransferMessage(messagePushTransferDto);
}
}
}
}
}
}
}
}

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanwarrantinformation/LoanWarrantInformationService.java

@ -69,6 +69,10 @@ public class LoanWarrantInformationService extends MybatisBaseService<LoanWarran
@Autowired
private FileUploadComponent fileUploadComponent;
public LoanWarrantInformation fetchByBusVinSid(String busVinSid) {
return baseMapper.fetchByBusVinSid(busVinSid);
}
public PagerVo<LoanWarrantInformationVo> listPage(PagerQuery<LoanWarrantInformationQuery> pq) {
IPage<LoanWarrantInformation> page = PagerUtil.queryToPage(pq);
LoanWarrantInformationQuery pagerQuery = pq.getParams();

Loading…
Cancel
Save