Browse Source

Merge remote-tracking branch 'origin/master'

master
God 1 year ago
parent
commit
51412541bd
  1. 5
      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/CommonContractFeignFallback.java
  3. 2
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleactualsales/BaseVehicleActualSalesService.java
  4. 7
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java
  5. 282
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java
  6. 2
      anrui-base/anrui-base-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  7. 2
      anrui-base/anrui-base-biz/src/main/resources/ftl/dai_orderacar_black.ftl
  8. 2
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busbillapplication/BusBillApplication.java
  9. 21
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java
  10. 27
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml
  11. 347
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java
  12. 1545
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/carContract.ftl
  13. 2891
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  14. 1535
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/invoiceApply.ftl
  15. 23
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/BillFileVo.java
  16. 2
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/FinBillApplication.java
  17. 20
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.java
  18. 28
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.xml
  19. 327
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java
  20. 1545
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/carContract.ftl
  21. 2891
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  22. 1535
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/invoiceApply.ftl
  23. 1
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
  24. 8
      anrui-riskcenter-ui/src/api/caseaction/caseaction.js
  25. 27
      anrui-riskcenter-ui/src/views/caseaction/caseactionAdd.vue
  26. 30
      anrui-riskcenter-ui/src/views/caseaction/caseactionInfo.vue
  27. 359
      anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatareviewInfo.vue
  28. 14
      anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatatobereviewed.vue
  29. 30
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionDaiBan.vue
  30. 20
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionEdit.vue
  31. 30
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionYiBan.vue
  32. 55
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/LoanLawsuitApplyFeign.java
  33. 54
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/LoanLawsuitApplyFeignFallback.java
  34. 40
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/app/AppLawsuitDetailsVo.java
  35. 49
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/app/AppVehListVo.java
  36. 41
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitCompleteDto.java
  37. 26
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitDelegateQuery.java
  38. 26
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitGetNodeQuery.java
  39. 25
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitGetNodeVo.java
  40. 56
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitTaskQuery.java
  41. 21
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/SubmitLawsuitDto.java
  42. 8
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyMapper.java
  43. 46
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyMapper.xml
  44. 61
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyRest.java
  45. 533
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyService.java
  46. 43
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitDetailsVo.java
  47. 67
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitFeign.java
  48. 53
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitFeignFallback.java
  49. 46
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitVehVo.java
  50. 25
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/AppLawsuitDelegateQuery.java
  51. 46
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/AppLawsuitTaskQuery.java
  52. 35
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/CompleteLawsuitDto.java
  53. 21
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/LawsuitFlowableQuery.java
  54. 68
      anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/lawsuit/LawsuitRest.java
  55. 164
      anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/lawsuit/LawsuitService.java

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

@ -263,4 +263,9 @@ public interface CommonContractFeign {
@PostMapping("/getApprovalContractList")
@ResponseBody
ResultBean<PagerVo<ContractPageVo>> getApprovalContractList(@RequestBody PagerQuery<ContractPageQuery> query);
@ApiOperation("获取合同中部分信息")
@PostMapping("/getModelMap")
@ResponseBody
ResultBean<Map<String, Object>> getModelMap(@RequestBody Map<String, Object> map);
}

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

@ -279,4 +279,9 @@ public class CommonContractFeignFallback implements CommonContractFeign {
public ResultBean<PagerVo<ContractPageVo>> getApprovalContractList(PagerQuery<ContractPageQuery> query) {
return null;
}
@Override
public ResultBean<Map<String, Object>> getModelMap(Map<String, Object> map) {
return null;
}
}

2
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleactualsales/BaseVehicleActualSalesService.java

@ -389,6 +389,8 @@ public class BaseVehicleActualSalesService extends MybatisBaseService<BaseVehicl
if ("1".equals(dto.getIsPay())) {
if (dto.getDetailsPayList().size() > 0) {
payMoney = dto.getDetailsPayList().stream().map(BaseVehicleActualPayDto::getPayAccount).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add);
}else{
return rb.setMsg("付款明细不能为空");
}
}
if (payMoney.compareTo(salesMoney) > 0) {

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

@ -659,4 +659,11 @@ public class CommonContractRest implements CommonContractFeign {
PagerVo<ContractPageVo> pagerVo = PagerUtil.pageToVo(iPage, page);
return new ResultBean<PagerVo<ContractPageVo>>().success().setData(pagerVo);
}
@Override
public ResultBean<Map<String, Object>> getModelMap(Map<String, Object> map) {
ResultBean<Map<String, Object>> rb = ResultBean.fireFail();
Map<String,Object> checkMap = commonContractService.getModelMap(map);
return rb.success().setData(checkMap);
}
}

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

@ -3175,6 +3175,288 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return billNo;
}
public Map<String,Object> getModelMap(Map<String,Object> map){
String sid = map.get("busSid").toString();
//查询销售订单的信息
ResultBean<AppOrderDetailsVo> resultBean = busSalesOrderFeign.getSaleOrderDetails(sid);
AppOrderDetailsVo appOrderDetailsVo = resultBean.getData();
//甲方
String createOrgName = appOrderDetailsVo.getSalesOrg();
//乙方
String customerName = appOrderDetailsVo.getName();
//联系电话
String mobile = appOrderDetailsVo.getPhone();
//根据客户sid查询客户的身份证号
sid = appOrderDetailsVo.getCustomerSid();
//查询销售订单的车型信息
AppOrderModelInfoVo appOrderModelInfoVo = appOrderDetailsVo.getModelInfo();
//根据车型sid查询车型的全称
BaseVehicleModel baseVehicleModel = baseVehicleModelService.fetchBySid(appOrderModelInfoVo.getModelSid());
BaseModelConfig baseModelConfig = baseModelConfigService.fetchBySid(appOrderModelInfoVo.getConfigSid());
String modelName1 = baseVehicleModelService.appendModelName(baseVehicleModel);
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\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.toString() + "。";
//上装:外廓尺寸+颜色+上装名称、板材厚度、板材材质、篷布滑道、冷藏冷机、自卸液压盖板、底板加热、更多配置
if (appOrderDetailsVo.getTopInfo() != null) {
AppOrderTopInfoVo topInfo = appOrderDetailsVo.getTopInfo();
String topName = appOrderDetailsVo.getTopMessage();
topName = "上装:制造尺寸与公告一致、" + topName + "。";
//只有为公司采购时才显示
if ("01".equals(topInfo.getBuyTypeKey())) {
map.put("topName", topName);
}
}
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
//查询台数
String num = priceInfo.getNumber();
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
//优惠说明
//ToDo:discountDetail
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() + "份";
if (StringUtils.isNotBlank(vv.getDiscountExplain())) {
discountDetail = discountDetail + "(每份包含" + vv.getDiscountExplain() + ")。";
}
} else {
discountDetail = discountDetail + "价值" + vv.getPrice() + "元" + discountName + vv.getNumber() + "份";
if (StringUtils.isNotBlank(vv.getDiscountExplain())) {
discountDetail = discountDetail + "(每份包含" + vv.getDiscountExplain() + "),";
}
}
}
map.put("discountDetail", discountDetail);
}
//保险说明
String insuranceInfo = "保险说明:" + appOrderDetailsVo.getInsuranceInfoMessage() + "。";
//车价合计
String totalPrice = priceInfo.getTotalPrice();
String priceRemarks = "";
//车价合计大写
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
//交纳订金
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);
}
}
//车辆交付地点
//根据存放地点查询
String address = "";
if (StringUtils.isNotBlank(priceInfo.getPlannedPickUpLocationKey())) {
ScmWarehouseVo scmWarehouseVo = scmWarehouseFeign.fetchBySid(priceInfo.getPlannedPickUpLocationKey()).getData();
if (scmWarehouseVo != null) {
address = scmWarehouseVo.getWarehouseAttribute();
}
}
map.put("modelConfigs", modelAllName2.toString());
map.put("modelName", modelName);
map.put("modelConfig", modelConfig);
map.put("totalPrice", totalPrice);
map.put("priceRemarks", priceRemarks);
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
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 + "。");
}
}
return map;
}
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();

2
anrui-base/anrui-base-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl

@ -1280,7 +1280,7 @@
</w:r>
<w:r wsp:rsidRPr="00B738F3">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="等线" w:h-ansi="宋体" w:hint="fareast"/>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:sz w:val="20"/>
<w:sz-cs w:val="20"/>

2
anrui-base/anrui-base-biz/src/main/resources/ftl/dai_orderacar_black.ftl

@ -1224,7 +1224,7 @@
</w:r>
<w:r wsp:rsidRPr="0086369C">
<w:rPr>
<w:rFonts w:ascii="宋体" w:fareast="等线" w:h-ansi="宋体" w:hint="fareast"/>
<w:rFonts w:ascii="宋体" w:fareast="宋体" w:h-ansi="宋体" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="20"/>

2
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busbillapplication/BusBillApplication.java

@ -146,4 +146,6 @@ public class BusBillApplication extends BaseEntity {
private String qkkpBillNo;
@ApiModelProperty("出库申请sid")
private String ckSid;
private String fileUrl;
}

21
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java

@ -30,10 +30,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.base.api.basetrailer.BaseTrailer;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplication;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplicationDetailsVo;
import com.yxt.anrui.buscenter.api.busbillapplication.BusBillApplicationVo;
import com.yxt.anrui.buscenter.api.busbillapplication.*;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -80,4 +87,18 @@ public interface BusBillApplicationMapper extends BaseMapper<BusBillApplication>
BusBillApplication selectByContractNoAndSid(@Param("contractNo") String contractNo, @Param("vinSid") String vinSid);
FinBillApplication selectByNo(String billNo);
BusSalesOrder selectByContract(String contractNo);
BusSalesOrderModel selectByOrderSid(String sid);
BusSalesOrderPrice selectByPrices(String sid);
BaseTrailer selectByTrailerNo(String gcVinNo);
BaseTrailerModel selectByModelSid(String trailerModelSid);
BaseVehicle selectByVinSid(String vehSid);
CrmCustomerTemp selectByCustomerSid(String openTickSid);
}

27
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml

@ -102,4 +102,31 @@
<select id="selectByNo" resultType="com.yxt.anrui.fin.api.finbillapplication.FinBillApplication">
select bi.* from anrui_fin.fin_bill_application bi where bi.qkkpBillNo = #{billNo} order by id desc limit 1
</select>
<select id="selectByContract" resultType="com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder">
select * from anrui_buscenter.bus_sales_order where contractNo = #{contractNo}
</select>
<select id="selectByOrderSid" resultType="com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel">
select * from anrui_buscenter.bus_sales_order_model where salesOrderSid = #{sid}
</select>
<select id="selectByPrices" resultType="com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice">
select * from anrui_buscenter.bus_sales_order_price where salesOrderSid = #{sid}
</select>
<select id="selectByTrailerNo" resultType="com.yxt.anrui.base.api.basetrailer.BaseTrailer">
select * from anrui_base.base_trailer where vinNo = #{gcVinNo} order by id desc limit 1
</select>
<select id="selectByModelSid" resultType="com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel">
select * from anrui_base.base_trailer_model where sid = #{trailerModelSid}
</select>
<select id="selectByVinSid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle">
select * from anrui_base.base_vehicle where sid = #{vehSid}
</select>
<select id="selectByCustomerSid" resultType="com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp">
select * from anrui_crm.crm_customer_temp where sid = #{openTickSid}
</select>
</mapper>

347
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java

@ -27,12 +27,16 @@ package com.yxt.anrui.buscenter.biz.busbillapplication;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.base.api.basetrailer.*;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.base.api.basevehicleappendix.BaseVehicleAppendixFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateVo;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixFeign;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixVo;
import com.yxt.anrui.base.api.commoncontract.CarContractListVo;
import com.yxt.anrui.base.api.commoncontract.CommonContractFeign;
import com.yxt.anrui.buscenter.api.busbillfile.BusAttachTypeEnum;
import com.yxt.anrui.buscenter.api.busbillfile.BusBillFileDto;
@ -47,6 +51,7 @@ import com.yxt.anrui.buscenter.api.busdeliveredapply.BusDeliveredApply;
import com.yxt.anrui.buscenter.api.busdeliveredapplydetails.BusDeliveredApplyDetails;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.biz.busbillfile.BusBillFileService;
import com.yxt.anrui.buscenter.biz.busbilltrailer.BusBillTrailerService;
@ -57,19 +62,31 @@ import com.yxt.anrui.buscenter.api.busbilltrailer.BusBillTrailerVo;
import com.yxt.anrui.buscenter.biz.busdeliveredapply.BusDeliveredApplyService;
import com.yxt.anrui.buscenter.biz.busdeliveredapplydetails.BusDeliveredApplyDetailsService;
import com.yxt.anrui.buscenter.biz.bussalesorder.BusSalesOrderService;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.BillFileVo;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplication;
import com.yxt.anrui.fin.api.finbillapplication.FinBillApplicationDto;
import com.yxt.anrui.fin.api.finbilltrailer.FinBillTrailerDto;
import com.yxt.anrui.fin.api.finbillvehicle.FinBillVehicleDto;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingDetailsVo;
import com.yxt.anrui.fin.api.fincompanyinvoicing.FinCompanyInvoicingFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.WordConvertUtils;
import com.yxt.common.core.result.ResultBean;
import org.apache.commons.lang3.StringUtils;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.concurrent.*;
@Service
public class BusBillApplicationService extends MybatisBaseService<BusBillApplicationMapper, BusBillApplication> {
@ -98,6 +115,12 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
private BusDeliveredApplyDetailsService busDeliveredApplyDetailsService;
@Autowired
private FinCompanyInvoicingFeign finCompanyInvoicingFeign;
@Autowired
private CommonContractFeign commonContractFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private DocPdfComponent docPdfComponent;
public ResultBean<String> saveOrUpdateDto(BusBillApplicationDto dto) {
ResultBean rb = ResultBean.fireFail();
@ -112,6 +135,10 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
BeanUtil.copyProperties(dto, busBillApplication, "sid");
busBillApplication.setNum(busBillVehicles.size());
busBillApplication.setArrearsMoney("0");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
busBillApplication.setFileUrl(fileUrl);
}
save(busBillApplication);
//主车开票信息
for (BusBillVehicleDto busBillVehicleDto : busBillVehicles) {
@ -247,6 +274,10 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
}
BusBillApplication entity = fetchBySid(dtoSid);
BeanUtil.copyProperties(dto, entity, "id", "sid");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
entity.setFileUrl(fileUrl);
}
baseMapper.updateById(entity);
}
@ -491,4 +522,316 @@ public class BusBillApplicationService extends MybatisBaseService<BusBillApplica
public FinBillApplication selectByNo(String billNo) {
return baseMapper.selectByNo(billNo);
}
public String getFileUrl(BusBillApplicationDto dto) {
Map<String, Object> map = new HashMap<>();
Map<String, Object> carMap = new HashMap<>();
Map<String, Object> filemap = new HashMap<>();
Map<String,Object> checkMap = new HashMap<>();
String fileUrl = "";
String contractNo = dto.getContractNo();
//根据合同号查询销售订单数据
BusSalesOrder busSalesOrder = baseMapper.selectByContract(contractNo);
SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData();
List<BusBillVehicleDto> finBillVehicles = dto.getFinBillVehicles();
BusSalesOrderModel busSalesOrderModel = baseMapper.selectByOrderSid(busSalesOrder.getSid());
BusSalesOrderPrice busSalesOrderPrice = baseMapper.selectByPrices(busSalesOrder.getSid());
FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingFeign.fetchDetailsVoBySid(dto.getOpenTickSid()).getData();
if (!dto.getOpenTickSid().equals(busSalesOrder.getAffiliatedCompanySid())) {
//生成开票申请书
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
map.put("contractNo", busSalesOrder.getContractNo());
List<BillFileVo> list = new ArrayList<>();
BillFileVo billFileVo = new BillFileVo();
if (busSalesOrderModel != null) {
billFileVo.setCarName(busSalesOrderModel.getModelName());
billFileVo.setNum(String.valueOf(finBillVehicles.size()));
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setType(busSalesOrder.getBillingType());
list.add(billFileVo);
List<BusBillTrailerDto> finBillTrailers = dto.getFinBillTrailers();
finBillTrailers.removeAll(Collections.singleton(null));
Map<String, Object> carNameMap = new HashMap<>();
if (!finBillTrailers.isEmpty()) {
for (int i = 0; i < finBillTrailers.size(); i++) {
BusBillTrailerDto finBillTrailerDto = finBillTrailers.get(i);
billFileVo = new BillFileVo();
BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo());
if (baseTrailer != null) {
BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid());
if (baseTrailerModel != null) {
String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue();
if (carNameMap.containsKey(carName)) {
carNameMap.put(carName, Integer.parseInt(carNameMap.get(carName).toString()) + 1);
continue;
} else {
billFileVo.setType(busSalesOrder.getBillingType());
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setCarName(carName);
if (busSalesOrderModel != null) {
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
carNameMap.put(carName, 1);
list.add(billFileVo);
}
}
}
}
}
if (!list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
BillFileVo billFileVo1 = list.get(i);
String carName = billFileVo1.getCarName();
if (carNameMap.containsKey(carName)) {
billFileVo1.setNum(carNameMap.get(carName).toString());
}
}
}
map.put("list", list);
map.put("name",busSalesOrder.getAffiliatedCompany());
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
map.put("year", year);
map.put("month", month);
map.put("day", day);
if (!"02".equals(dto.getOpenTickTypeKey())) {
if (finCompanyInvoicingDetailsVo != null) {
//生成车辆登记合同
if (busSalesOrder != null) {
carMap.put("Yf", busSalesOrder.getCustomerName());
carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
}
carMap.put("contractNo", "D" + map.get("contractNo"));
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
carMap.put("date", date);
List<CarContractListVo> carContractListVos = new ArrayList<>();
for (BusBillVehicleDto salesOrderVehicle : finBillVehicles) {
CarContractListVo carContractListVo = new CarContractListVo();
BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid());
carContractListVo.setBrand(baseVehicle.getModelName());
carContractListVo.setVinNo(baseVehicle.getVinNo());
carContractListVo.setEnginNo(baseVehicle.getEngineNo());
carContractListVos.add(carContractListVo);
}
carMap.put("carLists", carContractListVos);
}
}
}
if (loanSolutions != null) {
if (!dto.getOneBillMoney().equals(loanSolutions.getMainVehicleAmount())) {
//生成新车空白合同
filemap.put("totalPrice", "");
filemap.put("priceRemarks", "");
filemap.put("depositTotal", "");
String remarks = "";
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
filemap.put("year", year);
filemap.put("month", month);
filemap.put("day", day);
if (finCompanyInvoicingDetailsVo != null) {
filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址
}else{
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid());
if (crmCustomerTemp != null) {
filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称
filemap.put("customerName", crmCustomerTemp.getName());//开票名称
filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型
filemap.put("createOrgName", "");
remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。";
filemap.put("remarks", remarks);
filemap.put("busSid",busSalesOrder.getSid());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
}
}else{
//生成新车空白合同
String remarks = "";
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
filemap.put("year", year);
filemap.put("month", month);
filemap.put("day", day);
if (finCompanyInvoicingDetailsVo != null) {
filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址
}else{
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid());
if (crmCustomerTemp != null) {
filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称
filemap.put("customerName", crmCustomerTemp.getName());//开票名称
filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型
remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。";
filemap.put("remarks", remarks);
filemap.put("busSid",busSalesOrder.getSid());
filemap.put("contractNo",busSalesOrder.getContractNo());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
checkMap.put("totalPrice", "");
checkMap.put("priceRemarks", "");
checkMap.put("depositTotal", "");
checkMap.put("createOrgName", "");
}
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());
List<File> filesList = new ArrayList<>();
if(!map.isEmpty()){
Future<String> future1 = pool.submit(() -> {
return getInvoiceApplyFile(map);
});
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
}
if(!carMap.isEmpty()){
Future<String> future2 = pool.submit(() -> {
return getCarFile(carMap);
});
if (StringUtils.isNotBlank(future2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get());
filesList.add(file);
}
}
Map<String, Object> finalCheckMap = checkMap;
if(!finalCheckMap.isEmpty()){
Future<String> future3 = pool.submit(() -> {
return blackFile(finalCheckMap);
});
if (StringUtils.isNotBlank(future3.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future3.get());
filesList.add(file);
}
}
if (filesList.size() > 0) {
String typeName = contractNo + "开票附件.pdf";
File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName);
System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName);
fileUrl =typeName;
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成文件失败:==========================" + e.getMessage());
}
return fileUrl;
}
public String blackFile(Map<String, Object> map) {
String ftl = "dai_existingvehicles_black";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "贷款新车买卖空白合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getInvoiceApplyFile(Map<String, Object> map) {
String ftl = "invoiceApply";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成文件名
String pdfName = map.get("contractNo").toString() + "开票申请书_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getCarFile(Map<String, Object> map) {
String ftl = "carContract";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "车辆登记合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
}

1545
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/carContract.ftl

File diff suppressed because it is too large

2891
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl

File diff suppressed because it is too large

1535
anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/invoiceApply.ftl

File diff suppressed because it is too large

23
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/BillFileVo.java

@ -0,0 +1,23 @@
package com.yxt.anrui.fin.api.finbillapplication;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/2/22
**/
@Data
public class BillFileVo {
@ApiModelProperty("车辆名称")
private String carName;
@ApiModelProperty("数量")
private String num;
@ApiModelProperty("合同单价")
private String price;
@ApiModelProperty("开票金额")
private String openPrice;
@ApiModelProperty("发票类型")
private String type;
}

2
anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/FinBillApplication.java

@ -146,4 +146,6 @@ public class FinBillApplication extends BaseEntity {
private String qkkpBillNo;
@ApiModelProperty("是否为单独新增")
private String showBtnStr;
private String fileUrl;
}

20
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.java

@ -30,8 +30,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.base.api.basetrailer.BaseTrailer;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp;
import com.yxt.anrui.fin.api.finbillapplication.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -98,4 +104,18 @@ public interface FinBillApplicationMapper extends BaseMapper<FinBillApplication>
@Select("select * from fin_bill_application where contractNo = #{contractNo} limit 1")
FinBillApplicationDetailsVo selectByCon(String contractNo);
BusSalesOrder selectByContract(String contractNo);
BusSalesOrderModel selectByOrderSid(String sid);
BusSalesOrderPrice selectByPrices(String sid);
BaseTrailer selectByTrailerNo(String gcVinNo);
BaseTrailerModel selectByModelSid(String trailerModelSid);
BaseVehicle selectByVinSid(String vehSid);
CrmCustomerTemp selectByCustomerSid(String openTickSid);
}

28
anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.xml

@ -191,4 +191,32 @@
ON bv.`loanContractSid` = lr.`loanContractSid`
where bo.contractNo = #{contractNo} and bv.linkSid = #{vinSid}
</select>
<select id="selectByContract" resultType="com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder">
select * from anrui_buscenter.bus_sales_order where contractNo = #{contractNo}
</select>
<select id="selectByOrderSid" resultType="com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel">
select * from anrui_buscenter.bus_sales_order_model where salesOrderSid = #{sid}
</select>
<select id="selectByPrices" resultType="com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice">
select * from anrui_buscenter.bus_sales_order_price where salesOrderSid = #{sid}
</select>
<select id="selectByTrailerNo" resultType="com.yxt.anrui.base.api.basetrailer.BaseTrailer">
select * from anrui_base.base_trailer where vinNo = #{gcVinNo} order by id desc limit 1
</select>
<select id="selectByModelSid" resultType="com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel">
select * from anrui_base.base_trailer_model where sid = #{trailerModelSid}
</select>
<select id="selectByVinSid" resultType="com.yxt.anrui.base.api.basevehicle.BaseVehicle">
select * from anrui_base.base_vehicle where sid = #{vehSid}
</select>
<select id="selectByCustomerSid" resultType="com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTemp">
select * from anrui_crm.crm_customer_temp where sid = #{openTickSid}
</select>
</mapper>

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

@ -31,12 +31,12 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.base.api.basedistributor.BaseDistributor;
import com.yxt.anrui.base.api.basedistributor.BaseDistributorFeign;
import com.yxt.anrui.base.api.baseinternalpurchase.flow.GetNodeVo;
import com.yxt.anrui.base.api.basetrailer.BaseTrailerDetailsVo;
import com.yxt.anrui.base.api.basetrailer.BaseTrailerFeign;
import com.yxt.anrui.base.api.basetrailer.TrailerVo;
import com.yxt.anrui.base.api.basetrailer.TraliveredVo;
import com.yxt.anrui.base.api.basetrailer.*;
import com.yxt.anrui.base.api.basetrailermodel.BaseTrailerModel;
import com.yxt.anrui.base.api.basevehicle.BaseVehicle;
import com.yxt.anrui.base.api.basevehicle.BaseVehicleFeign;
import com.yxt.anrui.base.api.basevehicleappendix.BaseVehicleAppendixFeign;
import com.yxt.anrui.base.api.basevehiclecertificate.BaseVehicleCertificateFeign;
@ -45,12 +45,13 @@ import com.yxt.anrui.base.api.basevehiclestate.BaseVehicleState;
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.commonappendix.CommonAppendix;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixFeign;
import com.yxt.anrui.base.api.commonappendix.CommonAppendixVo;
import com.yxt.anrui.base.api.commonappendix.CommonAttachTypeEnum;
import com.yxt.anrui.base.api.commoncontract.CommonContract;
import com.yxt.anrui.base.api.commoncontract.CommonContractFeign;
import com.yxt.anrui.base.api.commoncontract.*;
import com.yxt.anrui.base.common.enums.BillTypeEnum;
import com.yxt.anrui.base.common.enums.CommonContractEnum;
import com.yxt.anrui.base.common.utils.Rule;
import com.yxt.anrui.base.common.utils.domain.BillNo;
import com.yxt.anrui.buscenter.api.busarrearscarryvehicleapply.BusArrearsCarryVehicleApplyFeign;
@ -58,11 +59,17 @@ import com.yxt.anrui.buscenter.api.busarrearscarryvehicleapply.BusArrearsCarryVe
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrder;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderDetailsVo;
import com.yxt.anrui.buscenter.api.bussalesorder.BusSalesOrderFeign;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderContractNoDto;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderModelInfoVo;
import com.yxt.anrui.buscenter.api.bussalesorder.app.order.AppOrderPriceInfoVo;
import com.yxt.anrui.buscenter.api.bussalesorder.app.vin.VinListsVo;
import com.yxt.anrui.buscenter.api.bussalesordermodel.BusSalesOrderModel;
import com.yxt.anrui.buscenter.api.bussalesorderprice.BusSalesOrderPrice;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicle;
import com.yxt.anrui.buscenter.api.bussalesordervehicle.BusSalesOrderVehicleFeign;
import com.yxt.anrui.buscenter.api.busvalcustfiling.BusValcustFilingDto;
import com.yxt.anrui.buscenter.api.busvalcustfiling.BusValcustFilingFeign;
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.finbillapplication.*;
@ -104,12 +111,13 @@ import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.*;
import com.yxt.anrui.riskcenter.api.loanparameter.LoanParameterFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutionsFeign;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
import com.yxt.common.base.config.component.DocPdfComponent;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.*;
import com.yxt.common.base.utils.Base64;
import com.yxt.common.base.utils.ConstantUtils;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.WordUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -121,14 +129,12 @@ import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@ -213,6 +219,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
private BusValcustFilingFeign busValcustFilingFeign;
@Autowired
private SysParameterFeign sysParameterFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private DocPdfComponent docPdfComponent;
private QueryWrapper<FinBillApplication> createQueryWrapper(FinBillApplicationQuery query) {
// todo: 这里根据具体业务调整查询条件
@ -483,6 +493,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
finBillApplication.setBillNo(billNo);
finBillApplication.setNum(finBillVehicles.size());
finBillApplication.setArrearsMoney("0");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
finBillApplication.setFileUrl(fileUrl);
}
save(finBillApplication);
//主车开票信息
for (FinBillVehicleDto finBillVehicleDto : finBillVehicles) {
@ -664,6 +678,285 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
return rb.success().setMsg("修改成功").setData(dtoSid);
}
public String getFileUrl(FinBillApplicationDto dto) {
Map<String, Object> map = new HashMap<>();
Map<String, Object> carMap = new HashMap<>();
Map<String, Object> filemap = new HashMap<>();
Map<String,Object> checkMap = new HashMap<>();
String fileUrl = "";
String contractNo = dto.getContractNo();
//根据合同号查询销售订单数据
BusSalesOrder busSalesOrder = baseMapper.selectByContract(contractNo);
SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(busSalesOrder.getSid()).getData();
List<FinBillVehicleDto> finBillVehicles = dto.getFinBillVehicles();
BusSalesOrderModel busSalesOrderModel = baseMapper.selectByOrderSid(busSalesOrder.getSid());
BusSalesOrderPrice busSalesOrderPrice = baseMapper.selectByPrices(busSalesOrder.getSid());
FinCompanyInvoicingDetailsVo finCompanyInvoicingDetailsVo = finCompanyInvoicingService.fetchDetailsVoBySid(dto.getOpenTickSid());
if (!dto.getOpenTickSid().equals(busSalesOrder.getAffiliatedCompanySid())) {
//生成开票申请书
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingService.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
map.put("contractNo", busSalesOrder.getContractNo());
List<BillFileVo> list = new ArrayList<>();
BillFileVo billFileVo = new BillFileVo();
if (busSalesOrderModel != null) {
billFileVo.setCarName(busSalesOrderModel.getModelName());
billFileVo.setNum(String.valueOf(finBillVehicles.size()));
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setType(busSalesOrder.getBillingType());
list.add(billFileVo);
List<FinBillTrailerDto> finBillTrailers = dto.getFinBillTrailers();
finBillTrailers.removeAll(Collections.singleton(null));
Map<String, Object> carNameMap = new HashMap<>();
if (!finBillTrailers.isEmpty()) {
for (int i = 0; i < finBillTrailers.size(); i++) {
FinBillTrailerDto finBillTrailerDto = finBillTrailers.get(i);
billFileVo = new BillFileVo();
BaseTrailer baseTrailer = baseMapper.selectByTrailerNo(finBillTrailerDto.getGcVinNo());
if (baseTrailer != null) {
BaseTrailerModel baseTrailerModel = baseMapper.selectByModelSid(baseTrailer.getTrailerModelSid());
if (baseTrailerModel != null) {
String carName = "外廓-" + Integer.parseInt(baseTrailerModel.getAppearanceSizeLong()) / 1000 + "米" + "\t" + baseTrailerModel.getTrailerTypeValue();
if (carNameMap.containsKey(carName)) {
carNameMap.put(carName, Integer.parseInt(carNameMap.get(carName).toString()) + 1);
continue;
} else {
billFileVo.setType(busSalesOrder.getBillingType());
if (loanSolutions != null) {
if (StringUtils.isNotBlank(loanSolutions.getMainVehicleAmount())) {
billFileVo.setOpenPrice(loanSolutions.getMainVehicleAmount());
}
}
billFileVo.setCarName(carName);
if (busSalesOrderModel != null) {
billFileVo.setPrice(busSalesOrderPrice.getSingleFinalPrice().toString());
}
carNameMap.put(carName, 1);
list.add(billFileVo);
}
}
}
}
}
if (!list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
BillFileVo billFileVo1 = list.get(i);
String carName = billFileVo1.getCarName();
if (carNameMap.containsKey(carName)) {
billFileVo1.setNum(carNameMap.get(carName).toString());
}
}
}
map.put("list", list);
map.put("name",busSalesOrder.getAffiliatedCompany());
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
map.put("year", year);
map.put("month", month);
map.put("day", day);
if (!"02".equals(dto.getOpenTickTypeKey())) {
if (finCompanyInvoicingDetailsVo != null) {
//生成车辆登记合同
if (busSalesOrder != null) {
carMap.put("Yf", busSalesOrder.getCustomerName());
carMap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
}
carMap.put("contractNo", "D" + map.get("contractNo"));
if (StringUtils.isNotBlank(busSalesOrder.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingService.getDetailsByUseOrgAndSystem(busSalesOrder.getUseOrgSid(), busSalesOrder.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
carMap.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
carMap.put("date", date);
List<CarContractListVo> carContractListVos = new ArrayList<>();
for (FinBillVehicleDto salesOrderVehicle : finBillVehicles) {
CarContractListVo carContractListVo = new CarContractListVo();
BaseVehicle baseVehicle = baseMapper.selectByVinSid(salesOrderVehicle.getVehSid());
carContractListVo.setBrand(baseVehicle.getModelName());
carContractListVo.setVinNo(baseVehicle.getVinNo());
carContractListVo.setEnginNo(baseVehicle.getEngineNo());
carContractListVos.add(carContractListVo);
}
carMap.put("carLists", carContractListVos);
}
}
}
if (loanSolutions != null) {
if (!dto.getOneBillMoney().equals(loanSolutions.getMainVehicleAmount())) {
String remarks = "";
String date = DateUtil.today();
List<String> dateString = Arrays.asList(date.split("-"));
String year = dateString.get(0);
String month = dateString.get(1);
String day = dateString.get(2);
filemap.put("year", year);
filemap.put("month", month);
filemap.put("day", day);
if (finCompanyInvoicingDetailsVo != null) {
filemap.put("invoiceName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("customerName", finCompanyInvoicingDetailsVo.getName());//开票名称
filemap.put("invoiceNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("idNo", finCompanyInvoicingDetailsVo.getTaxpayerNo());//纳税人识别号
filemap.put("adds", finCompanyInvoicingDetailsVo.getAddress());//户籍地址
}else{
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(dto.getOpenTickSid());
if (crmCustomerTemp != null) {
filemap.put("invoiceName", crmCustomerTemp.getName());//开票名称
filemap.put("customerName", crmCustomerTemp.getName());//开票名称
filemap.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
filemap.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
filemap.put("invoiceType", dto.getOpenTickTypeValue());//开票类型
remarks = "数量" + finBillVehicles.size() + "台,单台成交价: 元。";
filemap.put("remarks", remarks);
filemap.put("busSid",busSalesOrder.getSid());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
//生成新车空白合同
checkMap.put("totalPrice", "");
checkMap.put("priceRemarks", "");
checkMap.put("depositTotal", "");
checkMap.put("createOrgName", "");
}
}
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());
List<File> filesList = new ArrayList<>();
if(!map.isEmpty()){
Future<String> future1 = pool.submit(() -> {
return getInvoiceApplyFile(map);
});
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
}
if(!carMap.isEmpty()){
Future<String> future2 = pool.submit(() -> {
return getCarFile(carMap);
});
if (StringUtils.isNotBlank(future2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get());
filesList.add(file);
}
}
Map<String, Object> finalCheckMap = checkMap;
if(!finalCheckMap.isEmpty()){
Future<String> future3 = pool.submit(() -> {
return blackFile(finalCheckMap);
});
if (StringUtils.isNotBlank(future3.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future3.get());
filesList.add(file);
}
}
if (filesList.size() > 0) {
String typeName = contractNo + "开票附件.pdf";
File allFile = WordConvertUtils.mulFile2One(filesList, docPdfComponent.getUploadTemplateUrl() + typeName);
System.out.println("-========" + docPdfComponent.getUploadTemplateUrl() + typeName);
fileUrl =typeName;
}
} catch (Exception e) {
e.printStackTrace();
log.error("生成文件失败:==========================" + e.getMessage());
}
return fileUrl;
}
public String blackFile(Map<String, Object> map) {
String ftl = "dai_existingvehicles_black";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "贷款新车买卖空白合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getInvoiceApplyFile(Map<String, Object> map) {
String ftl = "invoiceApply";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成文件名
String pdfName = map.get("contractNo").toString() + "开票申请书_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public String getCarFile(Map<String, Object> map) {
String ftl = "carContract";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
long seconds = System.currentTimeMillis();
String typeName = dateStr + seconds + ".doc";
File file = new File(targetPath + ftl + seconds + ".ftl");
File dir = new File(targetPath);
WordConvertUtils.inputStreamToFile(inputStream, file);
WordConvertUtils.creatWord1(map, file, targetPath, typeName, dir);
//新生成的word路径
String wordPath = targetPath + typeName;
//生成合同文件名
String pdfName = map.get("contractNo").toString() + "车辆登记合同_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
public void insertByDto(FinBillApplicationDto dto) {
FinBillApplication entity = new FinBillApplication();
BeanUtil.copyProperties(dto, entity, "id", "sid");
@ -677,6 +970,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
}
FinBillApplication entity = fetchBySid(dtoSid);
BeanUtil.copyProperties(dto, entity, "id", "sid");
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
entity.setFileUrl(fileUrl);
}
baseMapper.updateById(entity);
}
@ -2001,6 +2298,10 @@ public class FinBillApplicationService extends MybatisBaseService<FinBillApplica
//计算开票金额合计
BigDecimal totalBillMoney = oneBillMoney.multiply(new BigDecimal(finBillVehicles.size()));
finBillApplication.setTotalBillMoney(totalBillMoney);
String fileUrl = getFileUrl(dto);
if(StringUtils.isNotBlank(fileUrl)){
finBillApplication.setFileUrl(fileUrl);
}
save(finBillApplication);
//主车开票信息
for (FinBillVehicleDto finBillVehicleDto : finBillVehicles) {

1545
anrui-fin/anrui-fin-biz/src/main/resources/ftl/carContract.ftl

File diff suppressed because it is too large

2891
anrui-fin/anrui-fin-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl

File diff suppressed because it is too large

1535
anrui-fin/anrui-fin-biz/src/main/resources/ftl/invoiceApply.ftl

File diff suppressed because it is too large

1
anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java

@ -80,6 +80,7 @@ public enum ProcDefEnum {
LOANCASEAPPEALAPPLY("案件上诉申请", "process_0r2ruoxm:1:8215004"),
LOANCASEEXECUTEAPPLY("案件执行立案申请", "process_aeho48ap:1:8220004"),
LOANCASECLOSEAPPLY("案件结案申请", "process_llaxpwkd:1:8220008"),
LOANLAWSUITAPPLY("诉讼申请", "process_xc4lp97d:1:8380004"),
/******************************测试流程id*********************************************/

8
anrui-riskcenter-ui/src/api/caseaction/caseaction.js

@ -41,6 +41,14 @@ export default {
params: data
})
},
// 销售订单 -- 金融方案初始化
selectDetailss: function(data) {
return request({
url: '/riskcenter/v1/loansolutions/selectDetailss',
method: 'get',
params: data
})
},
deleteBySids: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/deleteBySids',

27
anrui-riskcenter-ui/src/views/caseaction/caseactionAdd.vue

@ -12,6 +12,7 @@
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<div style="font-size: 16px;text-align: right">金额单位</div>
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请部门</div>
@ -54,7 +55,10 @@
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.lawsuitSubject" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<div class="title">已还与欠款情况</div>
<div class="title titleOne">
<div>已还与欠款情况</div>
<el-button size="mini" type="primary" class="btntopblueline" @click="lookFinancial">金融方案</el-button>
</div>
<el-table :key="tableKey" :data="formobj.vehList" :index="index" border style="width: 100%">
<el-table-column fixed width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column fixed label="操作" align="center" width="80">
@ -99,17 +103,21 @@
</div>
<!-- 选择合同 -->
<selectContract v-show="viewState == 2" ref="divContract" @backData="backData" @doback="resetState"/>
<!-- 查看金融方案 -->
<financialschemeInfo v-show="viewState == 3" ref="divFinancial" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/caseaction/caseaction'
import selectContract from './relation/selectContract'
import financialschemeInfo from '@/components/publicPage/financialschemeInfo'
export default {
name: 'CaseActionAdd',
components: {
selectContract
selectContract,
financialschemeInfo
},
data() {
return {
@ -166,6 +174,14 @@ export default {
}
})
},
lookFinancial() {
req.selectDetailss({ businessSid: this.formobj.salesOrderSid }).then((res) => {
if (res.success) {
this.viewState = 3
this.$refs['divFinancial'].showInfo(res.data, '03')
}
})
},
toSelect() {
this.viewState = 2
this.$refs['divContract'].showData(this.formobj.orgPath)
@ -276,4 +292,11 @@ export default {
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

30
anrui-riskcenter-ui/src/views/caseaction/caseactionInfo.vue

@ -9,6 +9,7 @@
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<div style="font-size: 16px;text-align: right">金额单位</div>
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请部门</div>
@ -51,7 +52,10 @@
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">已还与欠款情况</div>
<div class="title titleOne">
<div>已还与欠款情况</div>
<el-button size="mini" type="primary" class="btntopblueline" @click="lookFinancial">金融方案</el-button>
</div>
<el-table :key="tableKey" :data="formobj.vehList" :index="index" border style="width: 100%">
<el-table-column fixed width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="vinNo" label="车架号" align="center" width="120"/>
@ -89,14 +93,20 @@
</el-form>
</div>
</div>
<!-- 查看金融方案 -->
<financialschemeInfo v-show="viewState == 3" ref="divFinancial" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/caseaction/caseaction'
import financialschemeInfo from '@/components/publicPage/financialschemeInfo'
export default {
name: 'CaseActionInfo',
components: {
financialschemeInfo
},
data() {
return {
viewTitle: '',
@ -144,6 +154,17 @@ export default {
}
})
},
lookFinancial() {
req.selectDetailss({ businessSid: this.formobj.salesOrderSid }).then((res) => {
if (res.success) {
this.viewState = 3
this.$refs['divFinancial'].showInfo(res.data, '03')
}
})
},
resetState() {
this.viewState = 1
},
handleReturn() {
this.formobj = {
sid: '',
@ -184,4 +205,11 @@ export default {
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

359
anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatareviewInfo.vue

@ -1,177 +1,180 @@
<template>
<div class="app-container">
<div class="tab-header webtop">
<!--标题-->
<div>{{ viewTitle }}</div>
<!--start 添加修改按钮-->
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
<div v-show="viewState == 1">
<div class="tab-header webtop">
<!--标题-->
<div>{{ viewTitle }}</div>
<!--start 添加修改按钮-->
<div>
<el-button type="primary" size="small" @click="lookReport()">家访考察报告</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" class="formaddcopy02">
<el-collapse v-model="activeNames" accordion>
<el-collapse-item title="家访见证类" name="1">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">定位信息</div>
<el-form-item><span class="addinputInfo">{{ formobj.locationStr }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">小区/村口照片</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.house" :key="index" :src="item" :preview-src-list="formobj.house"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">住所照片</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.doorway" :key="index" :src="item" :preview-src-list="formobj.doorway"/></el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="24">-->
<!-- <div class="span-sty colSty">客厅卧室照片</div>-->
<!-- <el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.indoor" :key="index" :src="item" :preview-src-list="formobj.indoor"/></el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="24">
<div class="span-sty colSty">签字合影照</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.groupPhoto" :key="index" :src="item" :preview-src-list="formobj.groupPhoto"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="资产类" name="2">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">银行卡</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.yhkImages" :key="index" :src="item" :preview-src-list="formobj.yhkImages"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">房产</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.houseProperty" :key="index" :src="item" :preview-src-list="formobj.houseProperty"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">车辆</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.carProperty" :key="index" :src="item" :preview-src-list="formobj.carProperty"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="公司合同类" name="3">
<el-table :key="tableKey" :data="formobj.loanXdCons" :index="index" border style="width: 100%">
<el-table-column width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column label="贷款人(合同号)" align="center">
<template slot-scope="scope">
<span>{{ scope.row.loanCotractNoShow }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div style="display: flex;flex-direction: row;justify-content: center;align-items: center">
<el-button style="margin-left: 10px" v-if="scope.row.loanCotractImages.length > 0" type="primary" size="mini" @click="lookGSFile(scope.row.loanCotractImages)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="资方合同类" name="4">
<el-table :key="tableZfKey" :data="formobj.loanZfCons" :index="index" border style="width: 100%">
<el-table-column width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column label="贷款人(合同号)" align="center">
<template slot-scope="scope">
<span>{{ scope.row.bankContractNoShow }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div style="display: flex;flex-direction: row;justify-content: center;align-items: center">
<el-button style="margin-left: 10px" v-if="scope.row.bankContractImages.length > 0" type="primary" size="mini" @click="lookZFFile(scope.row.bankContractImages)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="证明文件" name="5">
<div class="collapse">
<el-collapse v-model="activeName" accordion>
<el-collapse-item title="贷款人" name="1">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderIdCard" :key="index" :src="item" :preview-src-list="formobj.lenderIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderAccount" :key="index" :src="item" :preview-src-list="formobj.lenderAccount"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">婚姻证明</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderMarriageCertificate" :key="index" :src="item" :preview-src-list="formobj.lenderMarriageCertificate"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">驾驶本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderDriverBook" :key="index" :src="item" :preview-src-list="formobj.lenderDriverBook"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">银行流水</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderBankStatement" :key="index" :src="item" :preview-src-list="formobj.lenderBankStatement"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="配偶" name="2">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.spouseIdCard" :key="index" :src="item" :preview-src-list="formobj.spouseIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.spouseAccount" :key="index" :src="item" :preview-src-list="formobj.spouseAccount"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="担保人" name="3">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.guarantorIdCard" :key="index" :src="item" :preview-src-list="formobj.guarantorIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.guarantorAccount" :key="index" :src="item" :preview-src-list="formobj.guarantorAccount"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</div>
</el-collapse-item>
<el-collapse-item title="对存在的问题反馈:" name="6">
<el-row>
<el-col :span="24">
<el-form-item><span>{{ formobj.remarks }}</span></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" class="formaddcopy02">
<el-collapse v-model="activeNames" accordion>
<el-collapse-item title="家访见证类" name="1">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">定位信息</div>
<el-form-item><span class="addinputInfo">{{ formobj.locationStr }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">小区/村口照片</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.house" :key="index" :src="item" :preview-src-list="formobj.house"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">住所照片</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.doorway" :key="index" :src="item" :preview-src-list="formobj.doorway"/></el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="24">-->
<!-- <div class="span-sty colSty">客厅卧室照片</div>-->
<!-- <el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.indoor" :key="index" :src="item" :preview-src-list="formobj.indoor"/></el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="24">
<div class="span-sty colSty">签字合影照</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.groupPhoto" :key="index" :src="item" :preview-src-list="formobj.groupPhoto"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="资产类" name="2">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">银行卡</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.yhkImages" :key="index" :src="item" :preview-src-list="formobj.yhkImages"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">房产</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.houseProperty" :key="index" :src="item" :preview-src-list="formobj.houseProperty"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">车辆</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.carProperty" :key="index" :src="item" :preview-src-list="formobj.carProperty"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="公司合同类" name="3">
<el-table :key="tableKey" :data="formobj.loanXdCons" :index="index" border style="width: 100%">
<el-table-column width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column label="贷款人(合同号)" align="center">
<template slot-scope="scope">
<span>{{ scope.row.loanCotractNoShow }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div style="display: flex;flex-direction: row;justify-content: center;align-items: center">
<el-button style="margin-left: 10px" v-if="scope.row.loanCotractImages.length > 0" type="primary" size="mini" @click="lookGSFile(scope.row.loanCotractImages)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="资方合同类" name="4">
<el-table :key="tableZfKey" :data="formobj.loanZfCons" :index="index" border style="width: 100%">
<el-table-column width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column label="贷款人(合同号)" align="center">
<template slot-scope="scope">
<span>{{ scope.row.bankContractNoShow }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<div style="display: flex;flex-direction: row;justify-content: center;align-items: center">
<el-button style="margin-left: 10px" v-if="scope.row.bankContractImages.length > 0" type="primary" size="mini" @click="lookZFFile(scope.row.bankContractImages)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="证明文件" name="5">
<div class="collapse">
<el-collapse v-model="activeName" accordion>
<el-collapse-item title="贷款人" name="1">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderIdCard" :key="index" :src="item" :preview-src-list="formobj.lenderIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderAccount" :key="index" :src="item" :preview-src-list="formobj.lenderAccount"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">婚姻证明</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderMarriageCertificate" :key="index" :src="item" :preview-src-list="formobj.lenderMarriageCertificate"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">驾驶本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderDriverBook" :key="index" :src="item" :preview-src-list="formobj.lenderDriverBook"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">银行流水</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.lenderBankStatement" :key="index" :src="item" :preview-src-list="formobj.lenderBankStatement"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="配偶" name="2">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.spouseIdCard" :key="index" :src="item" :preview-src-list="formobj.spouseIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.spouseAccount" :key="index" :src="item" :preview-src-list="formobj.spouseAccount"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="担保人" name="3">
<el-row>
<el-col :span="24">
<div class="span-sty colSty">身份证</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.guarantorIdCard" :key="index" :src="item" :preview-src-list="formobj.guarantorIdCard"/></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty colSty">户口本</div>
<el-form-item><el-image style="width: 150px; height: 150px" class="addinputInfo" v-for="(item, index) in formobj.guarantorAccount" :key="index" :src="item" :preview-src-list="formobj.guarantorAccount"/></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</div>
</el-collapse-item>
<el-collapse-item title="对存在的问题反馈:" name="6">
<el-row>
<el-col :span="24">
<el-form-item><span>{{ formobj.remarks }}</span></el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
<!-- 查看公司合同类 附件 -->
<el-dialog :visible.sync="dialogGSVisible" :append-to-body="true">
@ -183,17 +186,24 @@
<el-image style="width: 150px; height: 150px" v-for="(item,index) in dialogZF_list" :key="index" :src="item" :preview-src-list="dialogZF_list">
</el-image>
</el-dialog>
<!-- 查看家访考察报告 -->
<homevisitreport v-show="viewState == 2" ref="divReport" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/homevisitdatareview/homevisitdatareview'
import homevisitreport from '../overduevehicle/relation/homevisitreport'
export default {
name: 'HomeVisitDataReviewInfo',
components: {
homevisitreport
},
data() {
return {
viewTitle: '',
viewState: 1,
tableKey: 0,
tableZfKey: 1,
index: 0,
@ -249,6 +259,13 @@ export default {
this.dialogZFVisible = true
this.dialogZF_list = row
},
lookReport() {
this.viewState = 2
this.$refs['divReport'].showInfo({ kcbgSid: this.formobj.homeVisitSid })
},
resetState() {
this.viewState = 1
},
handleReturn() {
this.formobj = {
carProperty: [],

14
anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatatobereviewed.vue

@ -152,6 +152,7 @@ import ButtonBar from '@/components/ButtonBar'
import homevisitdatareview from './homevisitdatareview'
import homevisitdatareviewAdd from './homevisitdatareviewAdd'
import homevisitdatareviewInfo from './homevisitdatareviewInfo'
import { getButtonPermissions } from '@/api/Common/dictcommons'
export default {
name: 'HomeVisitDataToBeReviewed',
@ -223,7 +224,18 @@ export default {
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
getButtonPermissions({ userSid: window.sessionStorage.getItem('userSid'), url: this.$route.path, type: 0 }).then((res) => {
if (res.success) {
for (var i = 0; i < res.data.length; i++) {
for (var k = 0; k < this.btnList.length; k++) {
if (res.data[i].buttonId === this.btnList[k].btnKey) {
this.btnList.splice(k, 1)
}
}
}
this.$refs['btnbar'].setButtonList(this.btnList)
}
})
},
methods: {
//

30
anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionDaiBan.vue

@ -12,6 +12,7 @@
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<div style="font-size: 16px;text-align: right">金额单位</div>
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请部门</div>
@ -54,7 +55,10 @@
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">已还与欠款情况</div>
<div class="title titleOne">
<div>已还与欠款情况</div>
<el-button size="mini" type="primary" class="btntopblueline" @click="lookFinancial">金融方案</el-button>
</div>
<el-table :key="tableKey" :data="formobj.vehList" :index="index" border style="width: 100%">
<el-table-column fixed width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="vinNo" label="车架号" align="center" width="120"/>
@ -92,6 +96,8 @@
</el-form>
</div>
</div>
<!-- 查看金融方案 -->
<financialschemeInfo v-show="viewState == 3" ref="divFinancial" @doback="resetState" />
<!-- 选择待办人 的弹出框-->
<el-dialog title="填写审批意见" :visible.sync="nodeDialogVisible" width="80%">
<el-form class="formadd" >
@ -136,9 +142,13 @@
<script>
import req from '@/api/caseaction/caseaction'
import { selectStaffListss } from '@/api/Common/dictcommons'
import financialschemeInfo from '../publicPage/financialschemeInfo'
export default {
name: 'CaseActionDaiBan',
components: {
financialschemeInfo
},
data() {
return {
viewTitle: '',
@ -255,6 +265,17 @@ export default {
}
})
},
lookFinancial() {
req.selectDetailss({ businessSid: this.formobj.salesOrderSid }).then((res) => {
if (res.success) {
this.viewState = 3
this.$refs['divFinancial'].showInfo(res.data, '03')
}
})
},
resetState() {
this.viewState = 1
},
//
openCountersign(val) {
this.operation = val
@ -441,4 +462,11 @@ export default {
.rowClass{
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

20
anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionEdit.vue

@ -11,6 +11,7 @@
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<div style="font-size: 16px;text-align: right">金额单位</div>
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请部门</div>
@ -53,7 +54,10 @@
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.lawsuitSubject" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<div class="title">已还与欠款情况</div>
<div class="title titleOne">
<div>已还与欠款情况</div>
<el-button size="mini" type="primary" class="btntopblueline" @click="lookFinancial">金融方案</el-button>
</div>
<el-table :key="tableKey" :data="formobj.vehList" :index="index" border style="width: 100%">
<el-table-column fixed width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column fixed label="操作" align="center" width="80">
@ -98,17 +102,21 @@
</div>
<!-- 选择合同 -->
<selectContract v-show="viewState == 2" ref="divContract" @backData="backData" @doback="resetState"/>
<!-- 查看金融方案 -->
<financialschemeInfo v-show="viewState == 3" ref="divFinancial" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/caseaction/caseaction'
import selectContract from './relation/selectContract'
import financialschemeInfo from '../publicPage/financialschemeInfo'
export default {
name: 'CaseActionEdit',
components: {
selectContract
selectContract,
financialschemeInfo
},
data() {
return {
@ -175,6 +183,14 @@ export default {
}
})
},
lookFinancial() {
req.selectDetailss({ businessSid: this.formobj.salesOrderSid }).then((res) => {
if (res.success) {
this.viewState = 3
this.$refs['divFinancial'].showInfo(res.data, '03')
}
})
},
toSelect() {
this.viewState = 2
this.$refs['divContract'].showData(this.formobj.orgPath)

30
anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionYiBan.vue

@ -9,6 +9,7 @@
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<div style="font-size: 16px;text-align: right">金额单位</div>
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请部门</div>
@ -51,7 +52,10 @@
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">已还与欠款情况</div>
<div class="title titleOne">
<div>已还与欠款情况</div>
<el-button size="mini" type="primary" class="btntopblueline" @click="lookFinancial">金融方案</el-button>
</div>
<el-table :key="tableKey" :data="formobj.vehList" :index="index" border style="width: 100%">
<el-table-column fixed width="80" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="vinNo" label="车架号" align="center" width="120"/>
@ -89,14 +93,20 @@
</el-form>
</div>
</div>
<!-- 查看金融方案 -->
<financialschemeInfo v-show="viewState == 3" ref="divFinancial" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/caseaction/caseaction'
import financialschemeInfo from '../publicPage/financialschemeInfo'
export default {
name: 'CaseActionYiBan',
components: {
financialschemeInfo
},
data() {
return {
viewTitle: '',
@ -179,6 +189,17 @@ export default {
}
})
},
lookFinancial() {
req.selectDetailss({ businessSid: this.formobj.salesOrderSid }).then((res) => {
if (res.success) {
this.viewState = 3
this.$refs['divFinancial'].showInfo(res.data, '03')
}
})
},
resetState() {
this.viewState = 1
},
/** 确认撤回任务 */
openRevoke() {
this.$confirm('是否确认执行撤回操作', '提示', {
@ -227,4 +248,11 @@ export default {
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

55
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/LoanLawsuitApplyFeign.java

@ -1,15 +1,24 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow.*;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.LoanMonthlyAccrualApplyQuery;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.LoanMonthlyAccrualApplyVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.app.AppRepurchaseDetailsVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.flow.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @description: 诉讼案件管理
@ -52,5 +61,51 @@ public interface LoanLawsuitApplyFeign {
public ResultBean deleteBySids(@RequestBody String[] sids);
//---------------------------flow------------------------------
@ApiOperation("提交")
@PostMapping("/submit")
public ResultBean submitRecordApplication(@RequestBody @Valid SubmitLawsuitDto dto);
@ApiOperation(value = "办理(同意)")
@PostMapping("/complete")
public ResultBean complete(@Valid @RequestBody LawsuitCompleteDto dto);
@ApiOperation(value = "撤回流程")
@PostMapping(value = "/revokeProcess")
public ResultBean revokeProcess(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody LawsuitTaskQuery query);
@ApiOperation(value = "驳回任务")
@PostMapping(value = "/reject")
public ResultBean taskReject(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody LawsuitTaskQuery query);
@ApiOperation(value = "终止任务")
@PostMapping(value = "/breakProcess")
public ResultBean breakProcess(@RequestBody LawsuitTaskQuery query);
@ApiOperation(value = "流程历史流转记录")
@GetMapping(value = "/task/flowRecord/{procInsId}/{deployId}")
public ResultBean flowRecord(@ApiParam(value = "流程实例id") @PathVariable(value = "procInsId") String procInsId);
@ApiOperation(value = "获取下一个环节")
@GetMapping(value = "/getNextNodesForSubmit")
ResultBean<List<LawsuitGetNodeVo>> getNextNodesForSubmit(@Valid @SpringQueryMap LawsuitGetNodeQuery query);
@ApiOperation(value = "获取上一个环节")
@GetMapping(value = "/getPreviousNodesForReject")
ResultBean<List<LawsuitGetNodeVo>> getPreviousNodesForReject(@Valid @SpringQueryMap LawsuitGetNodeQuery query);
@ApiOperation(value = "加签")
@PostMapping(value = "/delegate")
public ResultBean delegate(@RequestBody LawsuitDelegateQuery query);
//-----------------------------app----------------------------
@ApiOperation("app详情")
@GetMapping("/appDetail/{sid}")
@ResponseBody
public ResultBean<AppLawsuitDetailsVo> appDetail(@PathVariable("sid") String sid);
}

54
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/LoanLawsuitApplyFeignFallback.java

@ -1,10 +1,14 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author Administrator
* @description
@ -43,4 +47,54 @@ public class LoanLawsuitApplyFeignFallback implements LoanLawsuitApplyFeign {
public ResultBean deleteBySids(String[] sids) {
return null;
}
@Override
public ResultBean submitRecordApplication(SubmitLawsuitDto dto) {
return null;
}
@Override
public ResultBean complete(LawsuitCompleteDto dto) {
return null;
}
@Override
public ResultBean revokeProcess(LawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean taskReject(LawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean breakProcess(LawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean flowRecord(String procInsId) {
return null;
}
@Override
public ResultBean<List<LawsuitGetNodeVo>> getNextNodesForSubmit(LawsuitGetNodeQuery query) {
return null;
}
@Override
public ResultBean<List<LawsuitGetNodeVo>> getPreviousNodesForReject(LawsuitGetNodeQuery query) {
return null;
}
@Override
public ResultBean delegate(LawsuitDelegateQuery query) {
return null;
}
@Override
public ResultBean<AppLawsuitDetailsVo> appDetail(String sid) {
return null;
}
}

40
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/app/AppLawsuitDetailsVo.java

@ -0,0 +1,40 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Fan
* @description
* @date 2024/2/7 11:15
*/
@Data
public class AppLawsuitDetailsVo {
private String sid;
private String publishInfo; // 发起部门-发起人
private String time; //申请日期
private String taskId;
private String procInsId;
@ApiModelProperty("客户名称")
private String custName;
@ApiModelProperty("资方合同号")
private String bankContractNo;
@ApiModelProperty("贷款人")
private String borrName;
@ApiModelProperty("贷款合同号")
private String loanContractNo;
@ApiModelProperty("资方")
private String bankName;
@ApiModelProperty("销售订单sid")
private String salesOrderSid;
@ApiModelProperty("风控进展描述")
private String progress;
@ApiModelProperty("欠款合计")
private String amountAll;
private List<AppVehListVo> vehListVos = new ArrayList<>();
}

49
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/app/AppVehListVo.java

@ -0,0 +1,49 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/2/22 10:15
*/
@Data
public class AppVehListVo {
@ApiModelProperty("车牌号")
private String vehMark;
@ApiModelProperty("车架号")
private String vinNo;
//费用
@ApiModelProperty("已还金额")
private String alRepaidMoney; // 已还金额
@ApiModelProperty("当前逾期金额")
private String currentBeMoney; // 当前逾期金额
@ApiModelProperty("其中资金占用费")
private String wheFundOccMoney; // 资金占用费
@ApiModelProperty("未到期金额")
private String unexpiredMoney; // 未到期金额
@ApiModelProperty("总期数")
private String nper; // 总期数
@ApiModelProperty("当前期数")
private String currentPeriod; // 当前期数
@ApiModelProperty("已还金额换算期数")
private String alRepaidMoneyConPeriod; // 已还金额换算期数
@ApiModelProperty("逾期金额换算期数")
private String beOverdueMoneyAndPeriod; // 逾期金额换算期数
@ApiModelProperty("垫资方月还")
private String price;
@ApiModelProperty("垫资方逾期利息")
private String bankInterest;
@ApiModelProperty("车辆处置金额")
private String amount;
@ApiModelProperty("欠款小计")
private String owedTotal;
@ApiModelProperty("贷款保证金")
private String deposit;
@ApiModelProperty("是否回购")
private String repo;
}

41
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitCompleteDto.java

@ -0,0 +1,41 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Map;
/**
* @Author dimengzhe
* @Date 2022/6/28 9:01
* @Description
*/
@Data
public class LawsuitCompleteDto implements Dto {
private static final long serialVersionUID = 3240453987322803352L;
@ApiModelProperty(value = "用户sid")
@NotBlank(message = "参数错误:userSid")
private String userSid;
@ApiModelProperty(value = "用户全路径sid")
private String orgSidPath;
@ApiModelProperty(value = "节点id")
@NotBlank(message = "参数错误:taskDefKey")
private String taskDefKey;
@ApiModelProperty(value = "任务id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
@ApiModelProperty(value = "流程id")
@NotBlank(message = "参数错误:instanceId")
private String instanceId;
@ApiModelProperty(value = "意见")
@NotBlank(message = "参数错误:comment")
private String comment;
@ApiModelProperty(value = "业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
@ApiModelProperty(value = "分支字段及业务字段")
private Map<String, Object> formVariables;
}

26
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitDelegateQuery.java

@ -0,0 +1,26 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Administrator
* @description
* @date 2023/9/28 9:28
*/
@Data
public class LawsuitDelegateQuery {
@ApiModelProperty
private String userSid;
@ApiModelProperty("流程实例id")
// @JsonProperty("procInsId")
private String instanceId;
@ApiModelProperty("任务Id")
private String taskId;
@ApiModelProperty("审批人sid")
private String assignee;
@ApiModelProperty("填写意见")
private String views;
}

26
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitGetNodeQuery.java

@ -0,0 +1,26 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
/**
* @Author dimengzhe
* @Date 2022/6/28 10:42
* @Description
*/
@Data
public class LawsuitGetNodeQuery implements Query {
private static final long serialVersionUID = -5674867230708197611L;
@ApiModelProperty(value = "环节定义id")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
@ApiModelProperty(value = "分支字段及业务字段")
private Map<String, Object> formVariables;
}

25
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitGetNodeVo.java

@ -0,0 +1,25 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author dimengzhe
* @Date 2022/6/28 11:09
* @Description
*/
@Data
public class LawsuitGetNodeVo implements Vo {
private static final long serialVersionUID = 8802774014747063504L;
@ApiModelProperty(value = "节点名称")
private String name;
@ApiModelProperty(value = "节点id")
private String id;
@ApiModelProperty(value = "审批组")
private List<String> candidateGroups;
@ApiModelProperty(value = "是否是最后环节")
private String endTask;
}

56
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/LawsuitTaskQuery.java

@ -0,0 +1,56 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @Author dimengzhe
* @Date 2022/6/28 17:29
* @Description 终止撤回驳回查询参数
*/
@Data
public class LawsuitTaskQuery implements Query {
private static final long serialVersionUID = -4006020771892400451L;
/**
* 终止驳回撤回
*/
@ApiModelProperty("任务Id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
/**
* 终止驳回撤回
*/
@ApiModelProperty("业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
/**
* 终止驳回
*/
@ApiModelProperty("任务意见")
private String comment;
/**
* 终止撤回驳回
*/
@ApiModelProperty("用户Sid")
private String userSid;
/**
* 终止
*/
@ApiModelProperty("流程实例Id")
private String instanceId;
/*@ApiModelProperty("用户Id")
private String userId;
@ApiModelProperty("节点")
private String targetKey;
@ApiModelProperty("流程变量信息")
private Map<String, Object> values = new HashMap<>();
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers = new ArrayList<>();
@ApiModelProperty("审批组")
private List<String> candidateGroups = new ArrayList<>();*/
}

21
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanlawsuitapply/flow/SubmitLawsuitDto.java

@ -0,0 +1,21 @@
package com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.LoanLawsuitApplyDto;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApplyDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author dimengzhe
* @Date 2022/6/27 13:38
* @Description
*/
@Data
public class SubmitLawsuitDto extends LoanLawsuitApplyDto {
private static final long serialVersionUID = 378585162071125756L;
@ApiModelProperty("流程实例id")
private String instanceId;
@ApiModelProperty("任务id")
private String taskId;
}

8
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyMapper.java

@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.*;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApply;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
@ -40,4 +42,10 @@ public interface LoanLawsuitApplyMapper extends BaseMapper<LoanLawsuitApply> {
int selectBySid(String join);
IPage<LoanLawsuitApplyVo> listPage(IPage<LoanLawsuitApply> page, @Param(Constants.WRAPPER) QueryWrapper<LoanLawsuitApply> qw);
int updateFlowFiled(Map<String, Object> map);
int selCountByBusVinSid(@Param("busVinSids") List<String> busVinSids);
AppLawsuitDetailsVo appDetail(@Param("sid") String sid);
}

46
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyMapper.xml

@ -1,6 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.riskcenter.biz.loanlawsuitapply.LoanLawsuitApplyMapper">
<update id="updateFlowFiled">
UPDATE loan_lawsuit_apply
SET nodeState=#{nodeState}
, nodeSid=#{taskDefKey}
<if test="procDefId != null and procDefId != ''">
, procDefId=#{procDefId}
</if>
<if test="procInsId != null and procInsId != ''">
, procInstId=#{procInsId}
</if>
<if test="taskId != null and taskId != ''">
, taskId=#{taskId}
</if>
WHERE sid = #{sid}
</update>
<select id="loanContractListPage"
resultType="com.yxt.anrui.riskcenter.api.loanlawsuitapply.LoanContractVehList">
@ -111,4 +126,35 @@
${ew.sqlSegment}
</where>
</select>
<select id="selCountByBusVinSid" resultType="java.lang.Integer">
SELECT count(*)
FROM loan_lawsuit_veh AS v
LEFT JOIN loan_lawsuit_apply AS a ON v.mainSid = a.sid
WHERE a.nodeState != '待提交'
AND a.nodeState != '发起申请'
AND a.nodeState != '终止'
and v.busVinSid IN
<foreach collection="busVinSids" item="busVinSids" index="index" open="(" close=")" separator=",">
#{busVinSids}
</foreach>
</select>
<select id="appDetail" resultType="com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo">
SELECT
a.sid,
date_format( a.applyDate, '%Y-%m-%d' ) AS `time`,
CONCAT( a.createDept, '-', a.createByName ) AS publishInfo,
a.taskId,
a.procInstId as procInsId,
a.customerName AS custName,
a.bankContractNo,
a.loanName AS borrName,
a.loanContractNo,
a.bankName,
a.progress,
a.amountAll,
a.salesOrderSid
FROM
loan_lawsuit_apply AS a
</select>
</mapper>

61
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyRest.java

@ -1,9 +1,15 @@
package com.yxt.anrui.riskcenter.biz.loanlawsuitapply;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.*;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow.*;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.LoanMonthlyAccrualApplyVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApplyFeign;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.flow.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -12,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description:
* @author: fan
@ -59,4 +67,57 @@ public class LoanLawsuitApplyRest implements LoanLawsuitApplyFeign {
public ResultBean deleteBySids(String[] sids) {
return loanLawsuitApplyService.deleteBySids(sids);
}
@Override
public ResultBean submitRecordApplication(SubmitLawsuitDto dto) {
return loanLawsuitApplyService.submitRecordApplication(dto);
}
@Override
public ResultBean complete(LawsuitCompleteDto dto) {
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(dto, bv);
bv.setModelId(ProcDefEnum.LOANLAWSUITAPPLY.getProDefId());
return loanLawsuitApplyService.complete(bv);
}
@Override
public ResultBean revokeProcess(LawsuitTaskQuery query) {
return loanLawsuitApplyService.revokeProcess(query);
}
@Override
public ResultBean taskReject(LawsuitTaskQuery query) {
return loanLawsuitApplyService.taskReject(query);
}
@Override
public ResultBean breakProcess(LawsuitTaskQuery query) {
return loanLawsuitApplyService.breakProcess(query);
}
@Override
public ResultBean flowRecord(String procInsId) {
return loanLawsuitApplyService.flowRecord(procInsId);
}
@Override
public ResultBean<List<LawsuitGetNodeVo>> getNextNodesForSubmit(LawsuitGetNodeQuery query) {
return loanLawsuitApplyService.getNextNodesForSubmit(query);
}
@Override
public ResultBean<List<LawsuitGetNodeVo>> getPreviousNodesForReject(LawsuitGetNodeQuery query) {
return loanLawsuitApplyService.getPreviousNodesForReject(query);
}
@Override
public ResultBean delegate(LawsuitDelegateQuery query) {
return loanLawsuitApplyService.delegate(query);
}
@Override
public ResultBean<AppLawsuitDetailsVo> appDetail(String sid) {
return loanLawsuitApplyService.appDetail(sid);
}
}

533
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanlawsuitapply/LoanLawsuitApplyService.java

@ -1,16 +1,34 @@
package com.yxt.anrui.riskcenter.biz.loanlawsuitapply;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.yxt.anrui.flowable.api.flow.FlowableFeign;
import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo;
import com.yxt.anrui.flowable.api.flow2.FlowDelegateQuery;
import com.yxt.anrui.flowable.api.flow2.FlowFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign;
import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo;
import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.portal.api.sysorganization.SysOrganizationVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
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.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFile;
import com.yxt.anrui.riskcenter.api.loanfile.LoanFileEnum;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.*;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppVehListVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow.*;
import com.yxt.anrui.riskcenter.api.loanlawsuitveh.LoanLawsuitVeh;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.LoanMonthlyAccrualApply;
import com.yxt.anrui.riskcenter.api.loanmonthlyaccrualapply.LoanMonthlyAccrualApplyQuery;
@ -19,6 +37,8 @@ import com.yxt.anrui.riskcenter.api.loanrepaymentschedule.LoanSolutionsDetailsss
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApply;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApplyQuery;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApplyVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.app.AppRepurchaseDetailsVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.flow.*;
import com.yxt.anrui.riskcenter.api.loanrestorereportapply.AlrepaidAndArrVo;
import com.yxt.anrui.riskcenter.api.loansolutions.LoanSolutions;
import com.yxt.anrui.riskcenter.api.loansolutions.app.SolutionsDetailsVo;
@ -30,6 +50,9 @@ import com.yxt.common.base.utils.PagerUtil;
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.MessageFlowVo;
import com.yxt.messagecenter.api.message.MessageFlowableQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -37,9 +60,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
@ -50,6 +73,14 @@ import java.util.List;
@Service
public class LoanLawsuitApplyService extends MybatisBaseService<LoanLawsuitApplyMapper, LoanLawsuitApply> {
@Autowired
private FlowFeign flowFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
@Autowired
private FlowableFeign flowableFeign;
@Autowired
private MessageFeign messageFeign;
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
@ -270,6 +301,10 @@ public class LoanLawsuitApplyService extends MybatisBaseService<LoanLawsuitApply
public ResultBean<String> saveLawsuit(LoanLawsuitApplyDto dto) {
ResultBean rb = ResultBean.fireFail();
String sid = "";
List<LoanLawsuitVehVo> vehList1 = dto.getVehList();
if (vehList1.isEmpty()) {
return rb.setMsg("诉讼车辆列表不能为空!");
}
if (StringUtils.isNotBlank(dto.getSid())) {
sid = dto.getSid();
LoanLawsuitApply updateEntity = fetchBySid(sid);
@ -423,4 +458,496 @@ public class LoanLawsuitApplyService extends MybatisBaseService<LoanLawsuitApply
PagerVo<LoanLawsuitApplyVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
//-----------------------------------flow---------------------------------
/**
* 判断提交的流程是否被允许
*
* @param dto
* @return
*/
private synchronized int submitBusinessData(SubmitLawsuitDto dto, LoanLawsuitApply loanLawsuitApply) {
int r = 0;
if (StringUtils.isBlank(dto.getSid())) {
r = 1;
} else {
if (loanLawsuitApply != null) {
String businessTaskId = loanLawsuitApply.getTaskId();
if (StringUtils.isBlank(businessTaskId) && StringUtils.isBlank(dto.getTaskId())) {
//新提交
r = 1;
} else if (StringUtils.isNotBlank(businessTaskId) && businessTaskId.equals(dto.getTaskId())) {
//二次提交//只有数据一致的时候才能进行下一步
r = 2;
}
} else {
r = 3;
}
}
return r;
}
/**
* 更新流程相关的状态
*
* @param map
* @return
*/
private int updateFlowFiled(Map<String, Object> map) {
return baseMapper.updateFlowFiled(map);
}
public ResultBean submitRecordApplication(SubmitLawsuitDto dto) {
ResultBean rb = ResultBean.fireFail();
LoanLawsuitApply loanLawsuitApply = fetchBySid(dto.getSid());
int r = submitBusinessData(dto, loanLawsuitApply);
if (r == 3) {
return rb.setMsg("该申请不存在");
}
if (r == 0) {
return rb.setMsg("操作失败!提交的数据不一致");
}
List<LoanLawsuitVehVo> vehList1 = dto.getVehList();
if (vehList1.isEmpty()) {
return rb.setMsg("诉讼车辆列表不能为空!");
}
List<String> busVinSids = new ArrayList<>();
for (LoanLawsuitVehVo loanLawsuitVehVo : vehList1) {
busVinSids.add(loanLawsuitVehVo.getBusVinSid());
}
//判断当前车辆是否已在审批中
int count = baseMapper.selCountByBusVinSid(busVinSids);
if (count > 0) {
return rb.setMsg("当前所选车辆已经处于诉讼申请审批状态,无法提交!");
}
String businessSid = "";
//新增修改保存
ResultBean<String> resultBean = saveLawsuit(dto);
if (resultBean.getSuccess()) {
businessSid = resultBean.getData();
} else {
return rb.setMsg(resultBean.getMsg());
}
LoanLawsuitApply entity = fetchBySid(businessSid);
String orgSidPath = "";
if (StringUtils.isNotBlank(entity.getOrgSidPath())) {
orgSidPath = entity.getOrgSidPath();
} else {
SysUserVo data = sysUserFeign.fetchBySid(entity.getCreateBySid()).getData();
if (null != data) {
//根据staffSid获取用户的组织全路径
ResultBean<SysStaffOrg> staffOrgResultBean = sysStaffOrgFeign.getOrgByStaffSid(data.getStaffSid());
if (!staffOrgResultBean.getSuccess()) {
return rb.setMsg(staffOrgResultBean.getMsg());
}
//用户的组织全路径
orgSidPath = staffOrgResultBean.getData().getOrgSidPath();
}
}
List<String> orgPathList = Arrays.asList(orgSidPath.split("/"));
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(orgPathList.get(orgPathList.size() - 1)).getData();
if (sysOrganization == null) {
return rb.setMsg("当前所在的组织机构不存在");
}
if (StringUtils.isBlank(sysOrganization.getManagerSid())) {
// return rb.setMsg("当前所在的组织机构未设置主管人员");
sysOrganization.setManagerSid(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId());
}
//创建BusinessVariables实体对象
BusinessVariables bv = new BusinessVariables();
//流程中的参数赋值
Map<String, Object> variables = BeanUtil.beanToMap(dto);
Map<String, Object> appMap = new HashMap<>();
//若有网关,则赋值网关中判断的字段。
// boolean isTure = true;
// //去查询是否同意
// if (StringUtils.isNotBlank(entity.getSalesUserSid())) {
// if (!entity.getCreateBySid().equals(entity.getSalesUserSid())) {
// isTure = false;
// }
// }
// variables.put("isTure", isTure);
variables.put("businessSid", businessSid);
appMap.put("sid", businessSid);
variables.put("app", appMap);
// String orderNames = "<" + entity.getCustomer() + ">" + "欠款客户备案";
// variables.put("orderNames", orderNames);
LoanLawsuitApply loanLawsuitApply1 = fetchBySid(businessSid);
String msgBusinessSid = loanLawsuitApply1.getSid();
//用户的部门全路径sid
bv.setOrgSidPath(loanLawsuitApply1.getOrgSidPath());
//业务sid
bv.setBusinessSid(businessSid);
//用户sid
bv.setUserSid(dto.getUserSid());
bv.setFormVariables(variables);
// String nextNodeUserSids_ = sysOrganization.getManagerSid();
// bv.setNextNodeUserSids(nextNodeUserSids_);
// if (isTure) {
// bv.setNextNodeUserSids(nextNodeUserSids_);
// } else {
// bv.setNextNodeUserSids(entity.getSalesUserSid());
// }
//流程定义id
bv.setModelId(ProcDefEnum.LOANLAWSUITAPPLY.getProDefId());
if (r == 1) {
//流程定义id
bv.setModelId(ProcDefEnum.LOANLAWSUITAPPLY.getProDefId());
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
if (!voResultBean.getSuccess()) {
return rb.setMsg(voResultBean.getMsg());
}
UpdateFlowFieldVo ufVo = voResultBean.getData();
int i = updateFlowFiled(BeanUtil.beanToMap(ufVo));
//==================================添加线程
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());
Future future1 = pool.submit(() -> {
//极光推送
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(msgBusinessSid);
messageFlowableQuery.setModuleName("诉讼申请");
SysUserVo userVo = sysUserFeign.fetchBySid(loanLawsuitApply1.getCreateBySid()).getData();
if (userVo != null) {
if (StringUtils.isNotBlank(userVo.getName())) {
messageFlowableQuery.setMsgContent(userVo.getName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
}
}
messageFlowableQuery.setMsgTitle("诉讼申请");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
});
} catch (Exception e) {
e.printStackTrace();
}
//==================================添加线程
return voResultBean;
}
if (r == 2) {
// ToDo:驳回到发起人后再次提交
if (StringUtils.isBlank(dto.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
LoanLawsuitApply loanLawsuitApply2 = fetchBySid(dto.getSid());
bv.setTaskId(dto.getTaskId());
bv.setTaskDefKey(loanLawsuitApply2.getNodeSid());
bv.setComment("重新提交");
bv.setInstanceId(dto.getInstanceId());
return complete(bv);
}
return rb;
}
public ResultBean complete(BusinessVariables bv) {
ResultBean rb = ResultBean.fireFail();
String businessSid = bv.getBusinessSid();
LoanLawsuitApply loanLawsuitApply = this.fetchBySid(businessSid);
if (bv.getTaskId().equals(loanLawsuitApply.getTaskId())) {
bv.setOrgSidPath(loanLawsuitApply.getOrgSidPath());
//流程中的参数赋值
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
//若有网关,则赋值网关中判断的字段。
// boolean isTure = true;
// //去查询是否同意
// if (StringUtils.isNotBlank(loanCustomerRecord.getSalesUserSid())) {
// if (!loanCustomerRecord.getCreateBySid().equals(loanCustomerRecord.getSalesUserSid())) {
// isTure = false;
// }
// }
// variables.put("isTure", isTure);
// if (bv.getTaskDefKey().equals("Activity_1078xxs")) {
// if (StringUtils.isNotBlank(loanCustomerRecord.getManageSid())) {
// bv.setNextNodeUserSids(loanCustomerRecord.getManageSid());
// } else {
// bv.setNextNodeUserSids(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId());
// }
// }
variables.put("businessSid", businessSid);
appMap.put("sid", businessSid);
variables.put("app", appMap);
bv.setFormVariables(variables);
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
int i = updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
if ("Event_end".equals(resultBean.getData().getTaskDefKey())) {
LoanLawsuitApply lawsuitApply = fetchBySid(businessSid);
lawsuitApply.setCloseDate(new DateTime());
baseMapper.updateById(lawsuitApply);
} else {
//极光推送
loanLawsuitApply = fetchBySid(businessSid);
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
messageFlowVo.setProcDefId(loanLawsuitApply.getProcDefId());
messageFlowVo.setProcInsId(loanLawsuitApply.getProcInstId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("诉讼申请");
messageFlowableQuery.setMsgContent(loanLawsuitApply.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
messageFlowableQuery.setMsgTitle("诉讼申请");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
}
return rb.success().setData(resultBean.getData());
} else {
return rb.setMsg("操作失败!提交的数据不一致");
}
}
/**
* 撤回
*
* @param query
* @return
*/
public ResultBean revokeProcess(LawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
LoanLawsuitApply loanLawsuitApply = fetchBySid(query.getBusinessSid());
String businessTaskId = loanLawsuitApply.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.revokeProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
updateFlowFiled(BeanUtil.beanToMap(resultBean.getData()));
loanLawsuitApply = fetchBySid(query.getBusinessSid());
String procId = loanLawsuitApply.getProcInstId();
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(procId);
String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_();
String nextName = listResultBean.getData().get(0).getName_();
List<String> receiveSidList = Arrays.asList(nextNodeUserSids.split(","));
if ("发起申请".equals(nextName)) {
}
return rb.success().setData(resultBean.getData());
}
}
return rb.setMsg("操作失败,提交的数据不一致!");
}
public ResultBean taskReject(LawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
String businessSid = query.getBusinessSid();
LoanLawsuitApply loanLawsuitApply = fetchBySid(businessSid);
if (loanLawsuitApply == null) {
return rb.setMsg("该申请不存在");
}
String businessTaskId = loanLawsuitApply.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(query.getTaskId())) {
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
Map<String, Object> variables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
appMap.put("sid", businessSid);
variables.put("app", appMap);
//若有网关,则赋值网关中判断的字段。
// boolean isTure = true;
// //去查询是否同意
// if (StringUtils.isNotBlank(loanCustomerRecord.getSalesUserSid())) {
// if (!loanCustomerRecord.getCreateBySid().equals(loanCustomerRecord.getSalesUserSid())) {
// isTure = false;
// }
// }
// variables.put("isTure", isTure);
flowTaskVo.setValues(variables);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.taskReject(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
UpdateFlowFieldVo ufVo = resultBean.getData();
Map<String, Object> map = BeanUtil.beanToMap(ufVo);
//更新业务中的流程相关的参数
updateFlowFiled(map);
//极光推送
loanLawsuitApply = fetchBySid(businessSid);
MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery();
MessageFlowVo messageFlowVo = new MessageFlowVo();
BeanUtil.copyProperties(ufVo, messageFlowVo);
String procId = loanLawsuitApply.getProcInstId();
messageFlowVo.setProcInsId(procId);
messageFlowVo.setProcDefId(loanLawsuitApply.getProcDefId());
messageFlowableQuery.setUfVo(messageFlowVo);
messageFlowableQuery.setAppMap(appMap);
messageFlowableQuery.setBusinessSid(businessSid);
messageFlowableQuery.setModuleName("诉讼申请");
ResultBean<List<LatestTaskVo>> listResultBean = flowTaskFeign.getLatestTasks(procId);
String nextName = listResultBean.getData().get(0).getName_();
String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_();
List<String> receiveSidList = Arrays.asList(nextNodeUserSids.split(","));
// if (receiveSidList.size() == 1 && receiveSidList.get(0).equals(busVehicleApply.getCreateBySid())) {
if ("发起申请".equals(nextName)) {
messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交");
} else {
SysUserVo userVo = sysUserFeign.fetchBySid(loanLawsuitApply.getCreateBySid()).getData();
if (userVo != null) {
if (StringUtils.isNotBlank(userVo.getName())) {
messageFlowableQuery.setMsgContent(userVo.getName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批");
}
}
}
messageFlowableQuery.setMsgTitle("诉讼申请");
ResultBean<String> stringResultBean = messageFeign.pushMessage(messageFlowableQuery);
return rb.success();
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean breakProcess(LawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(query.getInstanceId())) {
return rb.setMsg("参数错误:instanceId");
}
if (StringUtils.isBlank(query.getUserSid())) {
return rb.setMsg("参数错误:userSid");
}
if (StringUtils.isBlank(query.getComment())) {
return rb.setMsg("请填写意见");
}
LoanLawsuitApply loanLawsuitApply = fetchBySid(query.getBusinessSid());
String businessTaskId = loanLawsuitApply.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (query.getUserSid().equals(loanLawsuitApply.getCreateBySid())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
updateFlowFiled(map);
//终止任务后操作
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(query.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(query, flowTaskVo);
ResultBean<UpdateFlowFieldVo> resultBean = flowableFeign.breakProcess(flowTaskVo);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
Map<String, Object> map = BeanUtil.beanToMap(resultBean.getData());
updateFlowFiled(map);
//终止任务后操作
return rb.success().setData(resultBean.getData());
}
}
}
return rb.setMsg("操作失败!提交的数据不一致!");
}
public ResultBean flowRecord(String procInsId) {
return flowTaskFeign.businessFlowRecord(procInsId);
}
public ResultBean<List<LawsuitGetNodeVo>> getNextNodesForSubmit(LawsuitGetNodeQuery query) {
ResultBean<List<LawsuitGetNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//根据业务sid查询排产信息
LoanLawsuitApply lawsuitApply = fetchBySid(query.getBusinessSid());
//若有网关,则赋值网关中判断的字段。
// boolean isTure = true;
// //去查询是否同意
// if (StringUtils.isNotBlank(loanCustomerRecord.getSalesUserSid())) {
// if (!loanCustomerRecord.getCreateBySid().equals(loanCustomerRecord.getSalesUserSid())) {
// isTure = false;
// }
// }
// variables.put("isTure", isTure);
bv.setFormVariables(variables);
bv.setModelId(lawsuitApply.getProcDefId());
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<LawsuitGetNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), LawsuitGetNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean<List<LawsuitGetNodeVo>> getPreviousNodesForReject(LawsuitGetNodeQuery query) {
ResultBean<List<LawsuitGetNodeVo>> rb = ResultBean.fireFail();
BusinessVariables bv = new BusinessVariables();
BeanUtil.copyProperties(query, bv);
//流程中的参数赋值、若有网关,则赋值网关中判断的字段。
Map<String, Object> variables = new HashMap<>();
//根据业务sid查询排产信息
LoanLawsuitApply lawsuitApply = fetchBySid(query.getBusinessSid());
// //若有网关,则赋值网关中判断的字段。
// boolean isTure = true;
// //去查询是否同意
// if (StringUtils.isNotBlank(loanCustomerRecord.getSalesUserSid())) {
// if (!loanCustomerRecord.getCreateBySid().equals(loanCustomerRecord.getSalesUserSid())) {
// isTure = false;
// }
// }
// variables.put("isTure", isTure);
bv.setFormVariables(variables);
bv.setModelId(lawsuitApply.getProcDefId());
ResultBean<List<Map<String, Object>>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv);
//判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo
List<LawsuitGetNodeVo> voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), LawsuitGetNodeVo.class)).collect(Collectors.toList());
return rb.success().setData(voList);
}
public ResultBean delegate(LawsuitDelegateQuery query) {
ResultBean rb = ResultBean.fireFail();
FlowDelegateQuery delegateQuery = new FlowDelegateQuery();
BeanUtil.copyProperties(query, delegateQuery);
flowFeign.delegate(delegateQuery);
return rb.success();
}
public ResultBean<AppLawsuitDetailsVo> appDetail(String sid) {
ResultBean rb = ResultBean.fireFail();
AppLawsuitDetailsVo vo = baseMapper.appDetail(sid);
if (null != vo) {
List<LoanLawsuitVehVo> voList = loanLawsuitVehService.selByMainSid(sid);
List<AppVehListVo> vehListVos = new ArrayList<>();
if (!voList.isEmpty()) {
for (LoanLawsuitVehVo loanLawsuitVehVo : voList) {
AppVehListVo appVehListVo = new AppVehListVo();
BeanUtil.copyProperties(loanLawsuitVehVo, appVehListVo);
vehListVos.add(appVehListVo);
}
vo.setVehListVos(vehListVos);
}
}
return rb.success().setData(vo);
}
}

43
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitDetailsVo.java

@ -0,0 +1,43 @@
package com.yxt.anrui.terminal.api.risk.lawsuit;
import com.yxt.anrui.terminal.api.base.common.CarModelVo;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
* @description
* @date 2023/11/13 15:38
*/
@Data
public class LawsuitDetailsVo implements Vo {
private String sid;
private String publishInfo; // 发起部门-发起人
private String time; //申请日期
private String taskId;
private String procInsId;
@ApiModelProperty("客户名称")
private String custName;
@ApiModelProperty("资方合同号")
private String bankContractNo;
@ApiModelProperty("贷款人")
private String borrName;
@ApiModelProperty("贷款合同号")
private String loanContractNo;
@ApiModelProperty("资方")
private String bankName;
@ApiModelProperty("销售订单sid")
private String salesOrderSid;
@ApiModelProperty("风控进展描述")
private String progress;
@ApiModelProperty("欠款合计")
private String amountAll;
private List<LawsuitVehVo> vehListVos = new ArrayList<>();
private CarModelVo jrfa;//金融方案
}

67
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitFeign.java

@ -0,0 +1,67 @@
package com.yxt.anrui.terminal.api.risk.lawsuit;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitDelegateQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitTaskQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.CompleteLawsuitDto;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.LawsuitFlowableQuery;
import com.yxt.common.core.result.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @description:
* @author: fzz
* @date: 2023/8/8
**/
@Api(tags = "诉讼申请")
@FeignClient(
contextId = "terminal-Lawsuit",
name = "anrui-terminal",
path = "/riskcenter/v1/Lawsuit",
fallback = LawsuitFeignFallback.class)
public interface LawsuitFeign {
@ApiOperation("详情")
@GetMapping("/appDetail/{sid}")
@ResponseBody
ResultBean<LawsuitDetailsVo> detail(@PathVariable("sid") String sid);
//-------------------------流程-----------------------------------------
@ApiOperation("办理")
@PutMapping("/agreeCreditInfo")
@ResponseBody
ResultBean agreeCreditInfo(@Valid @RequestBody CompleteLawsuitDto dto);
@ApiOperation("驳回")
@PutMapping("/rejectCreditInfo")
@ResponseBody
ResultBean rejectCreditInfo(@Valid @RequestBody AppLawsuitTaskQuery query);
@ApiOperation("撤回")
@PutMapping("/recallCreditInfo")
@ResponseBody
ResultBean recallCreditInfo(@Valid @RequestBody AppLawsuitTaskQuery query);
@ApiOperation("终止")
@PutMapping("/stopCreditInfo")
@ResponseBody
ResultBean stopCreditInfo(@Valid @RequestBody AppLawsuitTaskQuery query);
@ApiOperation("获取流程操作标题")
@GetMapping("/getFlowOperateTitle")
@ResponseBody
ResultBean<String> getFlowOperateTitle(@Valid @SpringQueryMap LawsuitFlowableQuery query);
@ApiOperation(value = "加签")
@PutMapping(value = "/delegate")
@ResponseBody
public ResultBean delegate(@RequestBody AppLawsuitDelegateQuery delegateQuery);
}

53
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitFeignFallback.java

@ -0,0 +1,53 @@
package com.yxt.anrui.terminal.api.risk.lawsuit;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitDelegateQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitTaskQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.CompleteLawsuitDto;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.LawsuitFlowableQuery;
import com.yxt.common.core.result.ResultBean;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: fzz
* @date:
**/
@Component
public class LawsuitFeignFallback implements LawsuitFeign {
@Override
public ResultBean<LawsuitDetailsVo> detail(String sid) {
return null;
}
@Override
public ResultBean agreeCreditInfo(CompleteLawsuitDto dto) {
return null;
}
@Override
public ResultBean rejectCreditInfo(AppLawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean recallCreditInfo(AppLawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean stopCreditInfo(AppLawsuitTaskQuery query) {
return null;
}
@Override
public ResultBean<String> getFlowOperateTitle(LawsuitFlowableQuery query) {
return null;
}
@Override
public ResultBean delegate(AppLawsuitDelegateQuery delegateQuery) {
return null;
}
}

46
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/LawsuitVehVo.java

@ -0,0 +1,46 @@
package com.yxt.anrui.terminal.api.risk.lawsuit;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/2/22 10:32
*/
@Data
public class LawsuitVehVo {
@ApiModelProperty("车牌号")
private String vehMark;
@ApiModelProperty("车架号")
private String vinNo;
//费用
@ApiModelProperty("已还金额")
private String alRepaidMoney; // 已还金额
@ApiModelProperty("当前逾期金额")
private String currentBeMoney; // 当前逾期金额
@ApiModelProperty("其中资金占用费")
private String wheFundOccMoney; // 资金占用费
@ApiModelProperty("未到期金额")
private String unexpiredMoney; // 未到期金额
@ApiModelProperty("总期数")
private String nper; // 总期数
@ApiModelProperty("当前期数")
private String currentPeriod; // 当前期数
@ApiModelProperty("已还金额换算期数")
private String alRepaidMoneyConPeriod; // 已还金额换算期数
@ApiModelProperty("逾期金额换算期数")
private String beOverdueMoneyAndPeriod; // 逾期金额换算期数
@ApiModelProperty("垫资方月还")
private String price;
@ApiModelProperty("垫资方逾期利息")
private String bankInterest;
@ApiModelProperty("车辆处置金额")
private String amount;
@ApiModelProperty("欠款小计")
private String owedTotal;
@ApiModelProperty("贷款保证金")
private String deposit;
@ApiModelProperty("是否回购")
private String repo;
}

25
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/AppLawsuitDelegateQuery.java

@ -0,0 +1,25 @@
package com.yxt.anrui.terminal.api.risk.lawsuit.flow;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Administrator
* @description
* @date 2023/9/28 10:16
*/
@Data
public class AppLawsuitDelegateQuery {
@ApiModelProperty
private String userSid;
@ApiModelProperty("流程实例id")
@JsonProperty("procInsId")
private String instanceId;
@ApiModelProperty("任务Id")
private String taskId;
@ApiModelProperty("审批人sid")
private String assignee;
@ApiModelProperty("填写意见")
private String views;
}

46
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/AppLawsuitTaskQuery.java

@ -0,0 +1,46 @@
package com.yxt.anrui.terminal.api.risk.lawsuit.flow;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author Administrator
* @description
* @date 2023/10/17 9:14
*/
@Data
public class AppLawsuitTaskQuery implements Query {
/**
* 终止驳回撤回
*/
@ApiModelProperty("任务Id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
/**
* 终止驳回撤回
*/
@ApiModelProperty("业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
/**
* 终止驳回
*/
@ApiModelProperty("任务意见")
private String comment;
/**
* 终止撤回驳回
*/
@ApiModelProperty("用户Sid")
private String userSid;
/**
* 终止
*/
@ApiModelProperty("流程实例Id")
@JsonProperty("procInsId")
private String instanceId;
}

35
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/CompleteLawsuitDto.java

@ -0,0 +1,35 @@
package com.yxt.anrui.terminal.api.risk.lawsuit.flow;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author Administrator
* @description
* @date 2023/10/17 9:13
*/
@Data
public class CompleteLawsuitDto implements Dto {
@ApiModelProperty(value = "任务id")
@NotBlank(message = "参数错误:taskId")
private String taskId;
@ApiModelProperty(value = "流程id")
@NotBlank(message = "参数错误:procInsId")
@JsonProperty("procInsId")
private String instanceId;
@ApiModelProperty(value = "意见")
private String comment;
@ApiModelProperty(value = "业务sid")
@NotBlank(message = "参数错误:businessSid")
private String businessSid;
@ApiModelProperty(value = "用户sid")
@NotBlank(message = "参数错误:userSid")
private String userSid;
@ApiModelProperty(value = "节点id")
@NotBlank(message = "参数错误:taskDefKey")
private String taskDefKey;
}

21
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/lawsuit/flow/LawsuitFlowableQuery.java

@ -0,0 +1,21 @@
package com.yxt.anrui.terminal.api.risk.lawsuit.flow;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class LawsuitFlowableQuery implements Query {
private static final long serialVersionUID = -5879668616710833830L;
@ApiModelProperty(value = "节点key")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
@ApiModelProperty(value = "0 上一环节 1下一环节")
@NotNull(message = "参数错误:next")
private Integer next;
}

68
anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/lawsuit/LawsuitRest.java

@ -0,0 +1,68 @@
package com.yxt.anrui.terminal.biz.risk.lawsuit;
import com.yxt.anrui.terminal.api.risk.lawsuit.LawsuitDetailsVo;
import com.yxt.anrui.terminal.api.risk.lawsuit.LawsuitFeign;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitDelegateQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitTaskQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.CompleteLawsuitDto;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.LawsuitFlowableQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.RepurchaseDetailsVo;
import com.yxt.anrui.terminal.api.risk.repurchase.RepurchaseFeign;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.AppRepurchaseDelegateQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.AppRepurchaseTaskQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.CompleteRepurchaseDto;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.RepurchaseFlowableQuery;
import com.yxt.common.core.result.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @description:
* @author: fzz
* @date:
**/
@Controller
@RequestMapping("/riskcenter/v1/Lawsuit")
public class LawsuitRest implements LawsuitFeign {
@Autowired
private LawsuitService lawsuitService;
@Override
public ResultBean<LawsuitDetailsVo> detail(String sid) {
return lawsuitService.detail(sid);
}
@Override
public ResultBean agreeCreditInfo(CompleteLawsuitDto dto) {
return lawsuitService.agreeCreditInfo(dto);
}
@Override
public ResultBean rejectCreditInfo(AppLawsuitTaskQuery query) {
return lawsuitService.rejectCreditInfo(query);
}
@Override
public ResultBean recallCreditInfo(AppLawsuitTaskQuery query) {
return lawsuitService.recallCreditInfo(query);
}
@Override
public ResultBean stopCreditInfo(AppLawsuitTaskQuery query) {
return lawsuitService.stopCreditInfo(query);
}
@Override
public ResultBean<String> getFlowOperateTitle(LawsuitFlowableQuery query) {
return lawsuitService.getFlowOperateTitle(query);
}
@Override
public ResultBean delegate(AppLawsuitDelegateQuery delegateQuery) {
return lawsuitService.delegate(delegateQuery);
}
}

164
anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/lawsuit/LawsuitService.java

@ -0,0 +1,164 @@
package com.yxt.anrui.terminal.biz.risk.lawsuit;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserFeign;
import com.yxt.anrui.portal.api.sysuser.SysUserVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.LoanLawsuitApplyFeign;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.app.AppLawsuitDetailsVo;
import com.yxt.anrui.riskcenter.api.loanlawsuitapply.flow.*;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.LoanRepurchaseApplyFeign;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.app.AppRepurchaseDetailsVo;
import com.yxt.anrui.riskcenter.api.loanrepurchaseapply.flow.*;
import com.yxt.anrui.terminal.api.base.common.CarModelVo;
import com.yxt.anrui.terminal.api.risk.lawsuit.LawsuitDetailsVo;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitDelegateQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.AppLawsuitTaskQuery;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.CompleteLawsuitDto;
import com.yxt.anrui.terminal.api.risk.lawsuit.flow.LawsuitFlowableQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.RepurchaseDetailsVo;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.AppRepurchaseDelegateQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.AppRepurchaseTaskQuery;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.CompleteRepurchaseDto;
import com.yxt.anrui.terminal.api.risk.repurchase.flow.RepurchaseFlowableQuery;
import com.yxt.anrui.terminal.biz.base.common.CommonService;
import com.yxt.common.core.result.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
* @description:
* @author: fzz
* @date:
**/
@Service
public class LawsuitService {
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private LoanLawsuitApplyFeign loanLawsuitApplyFeign;
@Autowired
private CommonService commonService;
public ResultBean<LawsuitDetailsVo> detail(String sid) {
ResultBean<LawsuitDetailsVo> rb = ResultBean.fireFail();
LawsuitDetailsVo vo = new LawsuitDetailsVo();
AppLawsuitDetailsVo data = loanLawsuitApplyFeign.appDetail(sid).getData();
if (null != data) {
BeanUtil.copyProperties(data, vo);
ResultBean<CarModelVo> getLoanSolution = commonService.getLoanSolution(data.getSalesOrderSid());
CarModelVo carModelVo = getLoanSolution.getData();
vo.setJrfa(carModelVo);
}
return rb.success().setData(vo);
}
public ResultBean agreeCreditInfo(CompleteLawsuitDto dto) {
ResultBean rb = ResultBean.fireFail();
//根据用户sid获取staffSid
ResultBean<SysUserVo> userVoResultBean = sysUserFeign.fetchBySid(dto.getUserSid());
if (!userVoResultBean.getSuccess()) {
return rb.setMsg(userVoResultBean.getMsg());
}
//根据staffSid获取用户的组织全路径
ResultBean<SysStaffOrg> staffOrgResultBean = sysStaffOrgFeign.getOrgByStaffSid(userVoResultBean.getData().getStaffSid());
if (!staffOrgResultBean.getSuccess()) {
return rb.setMsg(staffOrgResultBean.getMsg());
}
//用户的组织全路径
String orgSidPath = staffOrgResultBean.getData().getOrgSidPath();
LawsuitCompleteDto completeDto = new
LawsuitCompleteDto();
BeanUtil.copyProperties(dto, completeDto);
completeDto.setOrgSidPath(orgSidPath);
ResultBean resultBean = loanLawsuitApplyFeign.complete(completeDto);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean rejectCreditInfo(AppLawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LawsuitTaskQuery taskQuery = new
LawsuitTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanLawsuitApplyFeign.taskReject(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean recallCreditInfo(AppLawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LawsuitTaskQuery taskQuery = new
LawsuitTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanLawsuitApplyFeign.revokeProcess(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean stopCreditInfo(AppLawsuitTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LawsuitTaskQuery taskQuery = new
LawsuitTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanLawsuitApplyFeign.breakProcess(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean<String> getFlowOperateTitle(LawsuitFlowableQuery query) {
ResultBean<String> rb = ResultBean.fireFail();
//0 上一环节 1下一环节
int next = query.getNext();
LawsuitGetNodeQuery getNodeQuery = new
LawsuitGetNodeQuery();
BeanUtil.copyProperties(query, getNodeQuery);
String data = "";
if (next == 0) {
ResultBean<List<LawsuitGetNodeVo>> getPreviousNodesForReject = loanLawsuitApplyFeign.getPreviousNodesForReject(getNodeQuery);
if (getPreviousNodesForReject.getSuccess()) {
getPreviousNodesForReject.getData().removeAll(Collections.singleton(null));
data = getPreviousNodesForReject.getData().get(0).getName();
} else {
return rb.setMsg(getPreviousNodesForReject.getMsg());
}
} else if (next == 1) {
ResultBean<List<LawsuitGetNodeVo>> getNextNodesForSubmit = loanLawsuitApplyFeign.getNextNodesForSubmit(getNodeQuery);
if (getNextNodesForSubmit.getSuccess()) {
getNextNodesForSubmit.getData().removeAll(Collections.singleton(null));
data = getNextNodesForSubmit.getData().get(0).getName();
} else {
return rb.setMsg(getNextNodesForSubmit.getMsg());
}
} else {
return rb.setMsg("参数错误:next");
}
return rb.success().setData(data);
}
public ResultBean delegate(AppLawsuitDelegateQuery delegateQuery) {
ResultBean rb = ResultBean.fireFail();
LawsuitDelegateQuery delegateQuery1 = new
LawsuitDelegateQuery();
BeanUtil.copyProperties(delegateQuery, delegateQuery1);
ResultBean delegate = loanLawsuitApplyFeign.delegate(delegateQuery1);
return rb.success();
}
}
Loading…
Cancel
Save