diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java index adc9274d3b..1de957286f 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/CommonContractFeign.java +++ b/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> printConfirm(@RequestBody PrintConfirmDto dto); + @ApiOperation(value = "新车买卖合同打印pdf") + @PostMapping("/xcmmContract") + public ResultBean> xcmmContract(@RequestBody PrintConfirmDto dto); /******************************************************新车买卖合同审核(流程)******************************************************/ diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/PrintConfirmDto.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/PrintConfirmDto.java index 0314497ad1..3101f7c853 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/PrintConfirmDto.java +++ b/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; diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/xcmmContractQuery.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/commoncontract/xcmmContractQuery.java new file mode 100644 index 0000000000..93daa09486 --- /dev/null +++ b/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; +} diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java index 53ae886ab7..12716627a0 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java +++ b/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> xcmmContract(PrintConfirmDto dto) { + return commonContractService.xcmmContract(dto); + } + public List getSheetVal(Sheet sheet, int[] resultCell) throws ParseException { SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); List punishmentList = new ArrayList<>(); diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java index 444e97c2b4..30cd23a7ac 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java +++ b/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 map, AppOrderDetailsVo appOrderDetailsVo) { String ftl = ""; AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo(); + AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo(); + //车架号集合 + List stringList = new ArrayList<>(); //查询台数 - String num = priceInfo.getNumber(); + String num = ""; + if (StringUtils.isNotBlank(dto.getBorrowerSid())){ + List 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 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 map, AppOrderDetailsVo appOrderDetailsVo) { String ftl = ""; AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo(); + AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo(); + //车架号集合 + List stringList = new ArrayList<>(); //查询台数 - String num = priceInfo.getNumber(); + String num = ""; + if (StringUtils.isNotBlank(dto.getBorrowerSid())){ + List 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 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> xcmmContract(PrintConfirmDto dto) { + ResultBean> rb = ResultBean.fireFail(); + List list = new ArrayList<>(); + Map map = new HashMap<>(); + //客户信息 + CrmCustomerTemp crmCustomerTemp = crmCustomerTempFeign.fetchEntity(dto.getCustomerSid()).getData(); + //查询销售订单的信息 + ResultBean 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 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> listResultBean = busDepositFictitiousFeign.detailsList(depositInfo.getSid()); + List 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(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); + + Future future1 = pool.submit(() -> { + return genCarSaleContract(dto, map, appOrderDetailsVo); + }); + Future future1_2 = pool.submit(() -> { + return genCarSaleContract2(dto, map, appOrderDetailsVo); + }); + Future future8 = null; + List 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> printConfirm(PrintConfirmDto dto) { ResultBean> rb = ResultBean.fireFail(); List list = new ArrayList<>(); @@ -2983,4 +3351,6 @@ public class CommonContractService extends MybatisBaseService 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 finBillVehicles = dto.getFinBillVehicles(); for (FinBillVehicleDto finBillVehicle : finBillVehicles) { @@ -1403,6 +1394,14 @@ public class FinBillApplicationService extends MybatisBaseService 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 appMap = new HashMap<>(); appMap.put("sid", businessSid); variables.put("app", appMap); diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeign.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeign.java index 672884bd71..2956623862 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeign.java +++ b/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 saveLoanCon(@RequestParam("sid") String sid, @RequestParam("conSetUpKey") String conSetUpKey); @ApiOperation("确定贷款人推送家纺准备") @PostMapping("/saveHomeVisit") diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeignFallback.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeignFallback.java index d1a7e5c115..a38993e07c 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepFeignFallback.java +++ b/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 saveLoanCon(String sid, String conSetUpKey) { return null; } diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java index c05f58907e..e1a4ad897b 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanCreateSchedulePdfVo.java +++ b/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") diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java index c5d13da537..bf98c52aaf 100644 --- a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/LoanRepaymentSchedule.java +++ b/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("主产品期间月还") diff --git a/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/ScanRepaymentVo.java b/anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanrepaymentschedule/ScanRepaymentVo.java new file mode 100644 index 0000000000..0d555bec6a --- /dev/null +++ b/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 hashSet = new HashSet<>(); +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/RiskCenterApplication.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/RiskCenterApplication.java index 6baa88dd68..ec70a4e25e 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/RiskCenterApplication.java +++ b/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 { diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepRest.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepRest.java index 1e3835ef5b..aa448cc1d8 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepRest.java +++ b/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 saveLoanCon(String sid, String conSetUpKey) { return loanHomevisitPrepService.saveLoanCon(sid, conSetUpKey); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java index deec96b473..abd5f8009b 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java +++ b/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 listPageVo(PagerQuery pq) { LoanHomevisitPrepQuery query = pq.getParams(); @@ -235,8 +243,8 @@ public class LoanHomevisitPrepService extends MybatisBaseService saveLoanCon(String sid, String conSetUpKey) { + ResultBean rb = ResultBean.fireFail(); LoanHomevisitPrepVo loanHomevisitPrepVo = baseMapper.selectDetails(sid); List busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(loanHomevisitPrepVo.getSaleOrderSid(),loanHomevisitPrepVo.getBorrowerSid()).getData(); BusSalesOrder busSalesOrder = busSalesOrderFeign.fetchBySid(loanHomevisitPrepVo.getSaleOrderSid()).getData(); @@ -286,6 +294,31 @@ public class LoanHomevisitPrepService extends MybatisBaseService 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 printConfirmVos = commonContractFeign.xcmmContract(printConfirmDto).getData(); + String xcmmContractUrl = printConfirmVos.get(0).getDownloadUrl(); return rb.success(); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java index 22a2f7be91..e6c6544a60 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.java +++ b/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 getRepaymentPlanList(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); + + List scanRepayment(); } diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml index e3cfd860d2..2ff68ab780 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleMapper.xml @@ -24,4 +24,19 @@ ${ew.sqlSegment} + \ No newline at end of file diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java index 59e4841eb9..2ef5f0491d 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java +++ b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/LoanRepaymentScheduleService.java @@ -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 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(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 returnRepayDate(String firstDate, String period) { + String[] split = firstDate.split("-"); + String year = split[0]; + String month = split[1]; + String day = split[2]; + List 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 returnDayList(String firstDate, String period) { + String[] split = firstDate.split("-"); + String year = split[0]; + String month = split[1]; + String day = split[2]; + List 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 finalList = new ArrayList<>(); + if (!dateList.isEmpty()) { + for (String s : dateList) { + String finalDay = beforeThreeDay(s); + finalList.add(finalDay); + } + } + return finalList; + } + + public List scanRepaymentVos() { + List schedules = baseMapper.scanRepayment(); + return schedules; + } + /** * 还款计划表多台回显 * @@ -586,6 +853,7 @@ public class LoanRepaymentScheduleService extends MybatisBaseService getRepaymentPlanList(PagerQuery pq) { IPage page = PagerUtil.queryToPage(pq); diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/ScheduledRepaymentService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanrepaymentschedule/ScheduledRepaymentService.java new file mode 100644 index 0000000000..7f230e94d7 --- /dev/null +++ b/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 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 hashSet = new HashSet<>(); + List mainList = new ArrayList<>(); + if (StringUtils.isNotBlank(entity.getMainStartDate())) { + String mainStartDate = entity.getMainStartDate(); + String mainPeriod = entity.getMainPeriod(); + mainList = loanRepaymentScheduleService.returnDayList(mainStartDate, mainPeriod); + } + List 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 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); + } + } + } + } + } + } + } +} diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanwarrantinformation/LoanWarrantInformationService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanwarrantinformation/LoanWarrantInformationService.java index e9e94d18d8..834d2dc0f4 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanwarrantinformation/LoanWarrantInformationService.java +++ b/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 listPage(PagerQuery pq) { IPage page = PagerUtil.queryToPage(pq); LoanWarrantInformationQuery pagerQuery = pq.getParams();