Browse Source

Merge remote-tracking branch 'origin/master'

master
fanzongzhe 1 year ago
parent
commit
0275162714
  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. 6
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleout/BaseVehicleOutService.java
  5. 7
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleoutapply/BaseVehicleOutApplyService.java
  6. 7
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractRest.java
  7. 850
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/commoncontract/CommonContractService.java
  8. 2891
      anrui-base/anrui-base-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  9. 2896
      anrui-base/anrui-base-biz/src/main/resources/ftl/dai_orderacar.ftl
  10. 2908
      anrui-base/anrui-base-biz/src/main/resources/ftl/dai_orderacar_black.ftl
  11. 2
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busbillapplication/BusBillApplication.java
  12. 4
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/BusDeliveredApplyFeign.java
  13. 5
      anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/BusDeliveredApplyFeignFallback.java
  14. 21
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.java
  15. 27
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationMapper.xml
  16. 347
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busbillapplication/BusBillApplicationService.java
  17. 2
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyMapper.java
  18. 9
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyMapper.xml
  19. 5
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyRest.java
  20. 5
      anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java
  21. 1545
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/carContract.ftl
  22. 2891
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  23. 1535
      anrui-buscenter/anrui-buscenter-biz/src/main/resources/ftl/invoiceApply.ftl
  24. 23
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/BillFileVo.java
  25. 2
      anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/finbillapplication/FinBillApplication.java
  26. 20
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.java
  27. 28
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationMapper.xml
  28. 327
      anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/finbillapplication/FinBillApplicationService.java
  29. 1545
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/carContract.ftl
  30. 2891
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/dai_existingvehicles_black.ftl
  31. 1535
      anrui-fin/anrui-fin-biz/src/main/resources/ftl/invoiceApply.ftl
  32. 4
      anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
  33. 130
      anrui-riskcenter-ui/src/api/caseaction/caseaction.js
  34. 37
      anrui-riskcenter-ui/src/router/index.js
  35. 371
      anrui-riskcenter-ui/src/views/caseaction/caseaction.vue
  36. 302
      anrui-riskcenter-ui/src/views/caseaction/caseactionAdd.vue
  37. 215
      anrui-riskcenter-ui/src/views/caseaction/caseactionInfo.vue
  38. 148
      anrui-riskcenter-ui/src/views/caseaction/relation/selectContract.vue
  39. 17
      anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatareviewInfo.vue
  40. 12
      anrui-riskcenter-ui/src/views/homevisitdatareview/homevisitdatatobereviewed.vue
  41. 472
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionDaiBan.vue
  42. 287
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionEdit.vue
  43. 258
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/caseactionYiBan.vue
  44. 148
      anrui-riskcenter-ui/src/views/workFlow/susongFlow/relation/selectContract.vue
  45. 6
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loancaseexecuteapply/LoanCaseExecuteApplyDetailsVo.java
  46. 2
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrep.java
  47. 2
      anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loanhomevisitprep/LoanHomevisitPrepVo.java
  48. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepMapper.java
  49. 3
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepMapper.xml
  50. 1
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java
  51. 118
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/AppCaseExecuteApplyDetailsVo.java
  52. 63
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/AppCaseExecuteVehDetailsVo.java
  53. 61
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/CaseExecuteFeign.java
  54. 12
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/CaseExecuteFeignFallback.java
  55. 25
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/AppCaseExecuteDelegateQuery.java
  56. 17
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CaseExecuteQuery.java
  57. 42
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CaseExecuteTaskQuery.java
  58. 34
      anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CompleteCaseExecuteDto.java
  59. 5
      anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseappeal/CaseAppealService.java
  60. 86
      anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseexecute/CaseExecuteRest.java
  61. 168
      anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseexecute/CaseExecuteService.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) {

6
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleout/BaseVehicleOutService.java

@ -2189,13 +2189,13 @@ public class BaseVehicleOutService extends MybatisBaseService<BaseVehicleOutMapp
String assigneeName = (String) taskUserInfos.get(0).get("assigneeName");
String finishTime = (String) flowableRecordVo.get("finishTime");
finishTime = finishTime.substring(0, 10);
if ("Activity_0kodcz1".equals(taskDefKey) || "Activity_1x1eivz".equals(taskDefKey)) {
if ("Activity_0kodcz1".equals(taskDefKey) || "Activity_1x1eivz".equals(taskDefKey) || "Activity_0z6lkp9".equals(taskDefKey)) {
dataMap.put("makeName", assigneeName + finishTime);
} else if ("Activity_1bojg9v".equals(taskDefKey) || "Activity_13w5v5m".equals(taskDefKey)) {
dataMap.put("jrsp", assigneeName + finishTime);
} else if ("Activity_1f3fqeh".equals(taskDefKey) || "Activity_1v7kn5s".equals(taskDefKey) || "Activity_1xzxtct".equals(taskDefKey) || "Activity_1ohp3br".equals(taskDefKey)) {
} else if ("Activity_1f3fqeh".equals(taskDefKey) || "Activity_1v7kn5s".equals(taskDefKey) || "Activity_1xzxtct".equals(taskDefKey) || "Activity_1ohp3br".equals(taskDefKey) || "Activity_0jkgzwm".equals(taskDefKey)) {
dataMap.put("confirmName", assigneeName + finishTime);
} else if ("Activity_1kdrmgx".equals(taskDefKey) || "Activity_1tnvpt7".equals(taskDefKey) || "Activity_1461e4e".equals(taskDefKey)) {
} else if ("Activity_1kdrmgx".equals(taskDefKey) || "Activity_1tnvpt7".equals(taskDefKey) || "Activity_1461e4e".equals(taskDefKey) || "Activity_1byvcmy".equals(taskDefKey)) {
dataMap.put("cwsp", assigneeName + finishTime);
}
}

7
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicleoutapply/BaseVehicleOutApplyService.java

@ -93,6 +93,8 @@ public class BaseVehicleOutApplyService extends MybatisBaseService<BaseVehicleOu
@Autowired
private BusSalesOrderFeign busSalesOrderFeign;
@Autowired
private BusDeliveredApplyFeign busDeliveredApplyFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private FinVehicleInvoiceFeign finVehicleInvoiceFeign;
@ -213,8 +215,9 @@ public class BaseVehicleOutApplyService extends MybatisBaseService<BaseVehicleOu
record.setKpType(finVehicleInvoice.getBusinessState());
}
//出库类型
Integer i = busArrearsCarryVehicleDetailsFeign.selByVinSidAndYBJ(vinSid).getData();
if (i != null) {
Integer isQktc = busArrearsCarryVehicleDetailsFeign.selByVinSidAndYBJ(vinSid).getData();
Integer isQkck = busDeliveredApplyFeign.selByVinSidAndYBJ(vinSid).getData();
if (isQktc != null || isQkck != null) {
record.setCkType("欠款出库");
//欠款时长(天)
String saleDate = record.getSaleDate();

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);
}
}

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

@ -1120,6 +1120,184 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return url;
}
private String getDaiContractBlank(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String url = "";
map.put("totalPrice", "");
map.put("priceRemarks", "");
map.put("depositTotal", "");
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
//查询台数
String num = priceInfo.getNumber();
String remarks = "";
String ftl = "";
CommonContract commonContract = baseMapper.selectByBusSidss(dto.getBusSid());
if (commonContract != null) {
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);
}
BusSalesOrder busSalesOrder = baseMapper.selectByBusSids(dto.getBusSid());
if (busSalesOrder.getAffiliatedCompanyType() == 0) {
//根据挂靠公司sid查询信息
if (StringUtils.isNotBlank(busSalesOrder.getAffiliatedCompanySid())) {
BaseDistributor baseDistributor = baseDistributorService.fetchBySid(busSalesOrder.getAffiliatedCompanySid());
if (baseDistributor != null) {
map.put("invoiceName", baseDistributor.getDisName());//开票名称
map.put("customerName", baseDistributor.getDisName());//开票名称
map.put("invoiceNo", baseDistributor.getRegistNum());//纳税人识别号
map.put("idNo", baseDistributor.getRegistNum());//纳税人识别号
map.put("adds", baseDistributor.getRegistDetailAddress());//户籍地址
}
}
map.put("invoiceType", busSalesOrder.getBillingType());//开票类型
} else {
if (StringUtils.isNotBlank(busSalesOrder.getAffiliatedCompanySid())) {
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(busSalesOrder.getAffiliatedCompanySid());
if (crmCustomerTemp != null) {
map.put("invoiceName", crmCustomerTemp.getName());//开票名称
map.put("customerName", crmCustomerTemp.getName());//开票名称
map.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
map.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
map.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
map.put("invoiceType", busSalesOrder.getBillingType());//开票类型
}
map.put("createOrgName", "");
// 涉及高低开票的,需要打印两套合同,一套按照成交价打印(记账用),一套为价格空白的合同(开票用)
if ("1".equals(dto.getDiscountKey())) {
// 现车
if ("1".equals(busSalesOrder.getType()) && (StringUtils.isBlank(busSalesOrder.getNowCarUnknownVinNum()) || "0".equals(busSalesOrder.getNowCarUnknownVinNum()))) {
//获取模板
ftl = "dai_existingvehicles_black";
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
List<String> stringList = orderModelInfoVo.getOrderVinList();
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价: 元。";
} else {
remarks = "数量" + num + "台,单台成交价: 元。";
}
} else {
map.put("dayOne", "");
// 订车获取模板
ftl = "dai_orderacar_black";
remarks = "数量" + num + "台,单台成交价: 元。";
}
map.put("remarks", remarks);
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);
url = pdfName;
}
return url;
}
private String getDaiContractBlank2(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String url = "";
map.put("totalPrice", "");
map.put("priceRemarks", "");
map.put("depositTotal", "");
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
//查询台数
String num = priceInfo.getNumber();
String remarks = "";
String ftl = "";
CommonContract commonContract = baseMapper.selectByBusSidss(dto.getBusSid());
if (commonContract != null) {
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);
}
BusSalesOrder busSalesOrder = baseMapper.selectByBusSids(dto.getBusSid());
if (busSalesOrder.getAffiliatedCompanyType() == 0) {
//根据挂靠公司sid查询信息
if (StringUtils.isNotBlank(busSalesOrder.getAffiliatedCompanySid())) {
BaseDistributor baseDistributor = baseDistributorService.fetchBySid(busSalesOrder.getAffiliatedCompanySid());
if (baseDistributor != null) {
map.put("invoiceName", baseDistributor.getDisName());//开票名称
map.put("customerName", baseDistributor.getDisName());//开票名称
map.put("invoiceNo", baseDistributor.getRegistNum());//纳税人识别号
map.put("idNo", baseDistributor.getRegistNum());//纳税人识别号
map.put("adds", baseDistributor.getRegistDetailAddress());//户籍地址
}
}
map.put("invoiceType", busSalesOrder.getBillingType());//开票类型
} else {
if (StringUtils.isNotBlank(busSalesOrder.getAffiliatedCompanySid())) {
CrmCustomerTemp crmCustomerTemp = baseMapper.selectByCustomerSid(busSalesOrder.getAffiliatedCompanySid());
if (crmCustomerTemp != null) {
map.put("invoiceName", crmCustomerTemp.getName());//开票名称
map.put("customerName", crmCustomerTemp.getName());//开票名称
map.put("invoiceNo", crmCustomerTemp.getIDNumber());//纳税人识别号
map.put("idNo", crmCustomerTemp.getIDNumber());//纳税人识别号
map.put("adds", crmCustomerTemp.getCertificateAddress());//户籍地址
}
}
map.put("invoiceType", busSalesOrder.getBillingType());//开票类型
}
map.put("createOrgName", "");
// 涉及高低开票的,需要打印两套合同,一套按照成交价打印(记账用),一套为价格空白的合同(开票用)
if ("1".equals(dto.getDiscountKey())) {
// 现车
if ("1".equals(busSalesOrder.getType()) && (StringUtils.isBlank(busSalesOrder.getNowCarUnknownVinNum()) || "0".equals(busSalesOrder.getNowCarUnknownVinNum()))) {
//获取模板
ftl = "dai_existingvehicles_black";
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
List<String> stringList = orderModelInfoVo.getOrderVinList();
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价: 元。";
} else {
remarks = "数量" + num + "台,单台成交价: 元。";
}
} else {
map.put("dayOne", "");
// 订车获取模板
ftl = "dai_orderacar_black";
remarks = "数量" + num + "台,单台成交价: 元。";
}
map.put("remarks", remarks);
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() + "贷款新车买卖空白合同2_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
url = pdfName;
}
return url;
}
private String genCarSaleContractBlank2(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String url = "";
map.put("totalPrice", "");
@ -1426,79 +1604,265 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
return url;
}
private String getRisk(AppOrderDetailsVo appOrderDetailsVo, PrintConfirmDto dto) {
LoanTemplateQuotationQuery loanTemplateQuotationQuery = new LoanTemplateQuotationQuery();
loanTemplateQuotationQuery.setSalesOrderSid(appOrderDetailsVo.getBusSalesOrderSid());
loanTemplateQuotationQuery.setRevalencySchemeKey(dto.getRevalencySchemeKey());
ResultBean<String> resultBean = loanTemplateFeign.templateQuotationCreatePdf(loanTemplateQuotationQuery);
return resultBean.getData();
}
/**
* 生成 客户开票申请书 pdf
*
* @param dto
* @return
*/
private String genAdvanceInvoice(PrintConfirmDto dto, Map<String, Object> map) {
String url = "";
// 列表?待确认
List<AdvanceInvoiceListVo> list = new ArrayList<>();
AdvanceInvoiceListVo vo = new AdvanceInvoiceListVo();
vo.setInvoiceName("开票名称");
vo.setInvoiceMoney("开票金额");
vo.setInvoiceType("发票类型");
vo.setVINNo("002234329");
list.add(vo);
AdvanceInvoiceListVo vo1 = new AdvanceInvoiceListVo();
BeanUtil.copyProperties(vo, vo1);
vo1.setVINNo("002324345");
list.add(vo1);
map.put("list", list); // 列表
// 目标路径
String typeName = ContractTemplateEnum.CUSTOMERINVOICINGAPPLICATION.getName();
String docName = typeName + "(" + map.get("customerName") + ").doc";
Map<String, String> resultMap = docPdfComponent.createDocToPdf(map, typeName, docName);
url = resultMap.get("prefixTemplateUrl");
return url;
private String getDaiXContract(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String ftl = "";
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
//车架号集合
List<String> stringList = new ArrayList<>();
//查询台数
String num = "";
if (StringUtils.isNotBlank(dto.getBorrowerSid())) {
List<BusSalesOrderVehicle> busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(dto.getBusSid(), dto.getBorrowerSid()).getData();
num = String.valueOf(busSalesOrderVehicles.size());
for (BusSalesOrderVehicle busSalesOrderVehicle : busSalesOrderVehicles) {
stringList.add(busSalesOrderVehicle.getLinkNo().substring(busSalesOrderVehicle.getLinkNo().length() - 8));
}
/**
* 生成 车辆登记合同 pdf
*
* @param dto
* @return
*/
private String genVehicleRegistration(PrintConfirmDto dto, Map<String, Object> map) {
String url = "";
// 列表?待确认
List<VehicleRegistrationListVo> list = new ArrayList<>();
VehicleRegistrationListVo vo = new VehicleRegistrationListVo();
vo.setBrandName("陕汽");
vo.setVINNo("002234329");
vo.setEngineNo("672342642232323");
list.add(vo);
VehicleRegistrationListVo vo1 = new VehicleRegistrationListVo();
vo1.setBrandName("欧曼");
vo1.setVINNo("002324345");
vo1.setEngineNo("67234299923ad");
list.add(vo1);
map.put("list", list); // 列表
// 目标路径
String typeName = ContractTemplateEnum.VEHICLEREGISTRATION.getName();
String docName = typeName + "(" + map.get("customerName") + ").doc";
Map<String, String> resultMap = docPdfComponent.createDocToPdf(map, typeName, docName);
url = resultMap.get("prefixTemplateUrl");
return url;
} else {
num = priceInfo.getNumber();
stringList = orderModelInfoVo.getOrderVinList();
}
/**
* 生成 委托提车授权书 pdf
*
* @param dto
* @return
*/
private String genEntrustVehicle(PrintConfirmDto dto, Map<String, Object> map) {
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
String remarks = "";
CommonContract commonContract = baseMapper.selectByBusSidss(dto.getBusSid());
if (commonContract != null) {
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);
}
BusSalesOrder busSalesOrder = baseMapper.selectByBusSids(dto.getBusSid());
if (StringUtils.isNotBlank(dto.getCreateOrgName())) {
map.put("createOrgName", dto.getCreateOrgName());
} else {
if (StringUtils.isNotBlank(appOrderDetailsVo.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(appOrderDetailsVo.getUseOrgSid(), appOrderDetailsVo.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
}
if ("1".equals(busSalesOrder.getType()) && (StringUtils.isBlank(busSalesOrder.getNowCarUnknownVinNum()) || "0".equals(busSalesOrder.getNowCarUnknownVinNum()))) {
//获取模板
ftl = "dai_existingvehicles";
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
} else {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
} else {
map.put("dayOne", appOrderDetailsVo.getDepositInfo().getPayDepositDays());
//获取模板
ftl = "dai_orderacar";
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
map.put("remarks", remarks);
//车价合计
String totalPrice = new BigDecimal(priceInfo.getSingleFinalPrice()).multiply(new BigDecimal(num)).toString();
map.put("totalPrice", totalPrice);
//车价合计大写
String priceRemarks = "";
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
map.put("priceRemarks", priceRemarks);
//订金合计
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = new BigDecimal(depositInfo.getDeposit()).multiply(new BigDecimal(num)).toString();
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
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;
}
private String getDaiXContract2(PrintConfirmDto dto, Map<String, Object> map, AppOrderDetailsVo appOrderDetailsVo) {
String ftl = "";
AppOrderPriceInfoVo priceInfo = appOrderDetailsVo.getPriceInfo();
AppOrderModelInfoVo orderModelInfoVo = appOrderDetailsVo.getModelInfo();
//车架号集合
List<String> stringList = new ArrayList<>();
//查询台数
String num = "";
if (StringUtils.isNotBlank(dto.getBorrowerSid())) {
List<BusSalesOrderVehicle> busSalesOrderVehicles = busSalesOrderVehicleFeign.selectListByOrderSidAndDkrSid(dto.getBusSid(), dto.getBorrowerSid()).getData();
num = String.valueOf(busSalesOrderVehicles.size());
for (BusSalesOrderVehicle busSalesOrderVehicle : busSalesOrderVehicles) {
stringList.add(busSalesOrderVehicle.getLinkNo().substring(busSalesOrderVehicle.getLinkNo().length() - 8));
}
} else {
num = priceInfo.getNumber();
stringList = orderModelInfoVo.getOrderVinList();
}
//单台成交价
String transactionPrice = priceInfo.getSingleFinalPrice();
String remarks = "";
CommonContract commonContract = baseMapper.selectByBusSidss(dto.getBusSid());
if (commonContract != null) {
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);
}
BusSalesOrder busSalesOrder = baseMapper.selectByBusSids(dto.getBusSid());
if (StringUtils.isNotBlank(dto.getCreateOrgName())) {
map.put("createOrgName", dto.getCreateOrgName());
} else {
if (StringUtils.isNotBlank(appOrderDetailsVo.getPurchaseSystemSid())) {
ResultBean<FinCompanyInvoicingDetailsVo> invoicingDetailsVoResultBean = finCompanyInvoicingFeign.getDetailsByUseOrgAndSystem(appOrderDetailsVo.getUseOrgSid(), appOrderDetailsVo.getPurchaseSystemSid());
if (invoicingDetailsVoResultBean.getData() != null) {
map.put("createOrgName", invoicingDetailsVoResultBean.getData().getName());
}
}
}
if ("1".equals(busSalesOrder.getType()) && (StringUtils.isBlank(busSalesOrder.getNowCarUnknownVinNum()) || "0".equals(busSalesOrder.getNowCarUnknownVinNum()))) {
//获取模板
ftl = "dai_existingvehicles";
if (stringList.size() > 0) {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
} else {
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
} else {
map.put("dayOne", appOrderDetailsVo.getDepositInfo().getPayDepositDays());
//获取模板
ftl = "dai_orderacar";
remarks = "数量" + num + "台,单台成交价:" + transactionPrice + "元。";
}
map.put("remarks", remarks);
//车价合计
String totalPrice = new BigDecimal(priceInfo.getSingleFinalPrice()).multiply(new BigDecimal(num)).toString();
map.put("totalPrice", totalPrice);
//车价合计大写
String priceRemarks = "";
if (StringUtils.isNotBlank(totalPrice)) {
priceRemarks = TransformMoney.transform(TransformMoney.getDecimalStr(Double.valueOf(totalPrice).doubleValue()));
}
map.put("priceRemarks", priceRemarks);
//订金合计
AppOrderDepositInfoVo depositInfo = appOrderDetailsVo.getDepositInfo();
String depositTotal = new BigDecimal(depositInfo.getDeposit()).multiply(new BigDecimal(num)).toString();
if ("0".equals(depositTotal)) {
map.put("depositTotal", "/");
} else {
map.put("depositTotal", depositTotal);
}
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ftl/" + ftl + ".ftl");
//生成word文件名
String targetPath = docPdfComponent.getUploadTemplateUrl();
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() + "贷款新车买卖合同2_" + dateStr + seconds + ".pdf";
WordConvertUtils.doc2pdf(wordPath, targetPath, pdfName);
return pdfName;
}
private String getRisk(AppOrderDetailsVo appOrderDetailsVo, PrintConfirmDto dto) {
LoanTemplateQuotationQuery loanTemplateQuotationQuery = new LoanTemplateQuotationQuery();
loanTemplateQuotationQuery.setSalesOrderSid(appOrderDetailsVo.getBusSalesOrderSid());
loanTemplateQuotationQuery.setRevalencySchemeKey(dto.getRevalencySchemeKey());
ResultBean<String> resultBean = loanTemplateFeign.templateQuotationCreatePdf(loanTemplateQuotationQuery);
return resultBean.getData();
}
/**
* 生成 客户开票申请书 pdf
*
* @param dto
* @return
*/
private String genAdvanceInvoice(PrintConfirmDto dto, Map<String, Object> map) {
String url = "";
// 列表?待确认
List<AdvanceInvoiceListVo> list = new ArrayList<>();
AdvanceInvoiceListVo vo = new AdvanceInvoiceListVo();
vo.setInvoiceName("开票名称");
vo.setInvoiceMoney("开票金额");
vo.setInvoiceType("发票类型");
vo.setVINNo("002234329");
list.add(vo);
AdvanceInvoiceListVo vo1 = new AdvanceInvoiceListVo();
BeanUtil.copyProperties(vo, vo1);
vo1.setVINNo("002324345");
list.add(vo1);
map.put("list", list); // 列表
// 目标路径
String typeName = ContractTemplateEnum.CUSTOMERINVOICINGAPPLICATION.getName();
String docName = typeName + "(" + map.get("customerName") + ").doc";
Map<String, String> resultMap = docPdfComponent.createDocToPdf(map, typeName, docName);
url = resultMap.get("prefixTemplateUrl");
return url;
}
/**
* 生成 车辆登记合同 pdf
*
* @param dto
* @return
*/
private String genVehicleRegistration(PrintConfirmDto dto, Map<String, Object> map) {
String url = "";
// 列表?待确认
List<VehicleRegistrationListVo> list = new ArrayList<>();
VehicleRegistrationListVo vo = new VehicleRegistrationListVo();
vo.setBrandName("陕汽");
vo.setVINNo("002234329");
vo.setEngineNo("672342642232323");
list.add(vo);
VehicleRegistrationListVo vo1 = new VehicleRegistrationListVo();
vo1.setBrandName("欧曼");
vo1.setVINNo("002324345");
vo1.setEngineNo("67234299923ad");
list.add(vo1);
map.put("list", list); // 列表
// 目标路径
String typeName = ContractTemplateEnum.VEHICLEREGISTRATION.getName();
String docName = typeName + "(" + map.get("customerName") + ").doc";
Map<String, String> resultMap = docPdfComponent.createDocToPdf(map, typeName, docName);
url = resultMap.get("prefixTemplateUrl");
return url;
}
/**
* 生成 委托提车授权书 pdf
*
* @param dto
* @return
*/
private String genEntrustVehicle(PrintConfirmDto dto, Map<String, Object> map) {
String url = "";
// 目标路径
String typeName = ContractTemplateEnum.ENTRUSTPICKUPAUTHORIZATION.getName();
@ -2581,22 +2945,68 @@ public class CommonContractService extends MybatisBaseService<CommonContractMapp
}
}
} else {//贷款
Future<String> future1 = pool.submit(() -> {
return getDaiXContract(dto, map, appOrderDetailsVo);
});
Future<String> future1_2 = pool.submit(() -> {
return getDaiXContract2(dto, map, appOrderDetailsVo);
});
Future<String> future2 = null;
Future<String> future2_2 = null;
Future<String> future4 = null;
SolutionsDetailsVo loanSolutions = loanSolutionsFeign.selectDetailss(dto.getBusSid()).getData();
if (loanSolutions != null) {
if (StringUtils.isBlank(loanSolutions.getTypeKey())) {
//担保
} else {
//非担保
future2 = pool.submit(() -> {
return getDaiContractBlank(dto, map, appOrderDetailsVo);
});
future2_2 = pool.submit(() -> {
return getDaiContractBlank2(dto, map, appOrderDetailsVo);
});
//接收车辆委托书
future4 = pool.submit(() -> {
return getReceiveCar(dto, map, appOrderDetailsVo);
});
}
}
}
if ("2".equals(appOrderDetailsVo.getPayTypeKey())) {
Future<String> future10 = pool.submit(() -> {
return getRisk(appOrderDetailsVo, dto);
});
if (StringUtils.isNotBlank(future10.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future10.get());
if (StringUtils.isNotBlank(future1.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1.get());
filesList.add(file);
}
if (StringUtils.isNotBlank(future1_2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future1_2.get());
filesList.add(file);
}
if (future2 != null) {
if (StringUtils.isNotBlank(future2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2.get());
filesList.add(file);
}
}
if (future2_2 != null) {
if (StringUtils.isNotBlank(future2_2.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future2_2.get());
filesList.add(file);
}
}
if(future4 != null){
if (StringUtils.isNotBlank(future4.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future4.get());
filesList.add(file);
}
}
}
if ("2".equals(appOrderDetailsVo.getPayTypeKey())) {
Future<String> future10 = pool.submit(() -> {
return getRisk(appOrderDetailsVo, dto);
});
if (StringUtils.isNotBlank(future10.get())) {
File file = new File(docPdfComponent.getUploadTemplateUrl() + future10.get());
filesList.add(file);
}
}
@ -2765,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();

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

File diff suppressed because it is too large

2896
anrui-base/anrui-base-biz/src/main/resources/ftl/dai_orderacar.ftl

File diff suppressed because it is too large

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

File diff suppressed because it is too large

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;
}

4
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/BusDeliveredApplyFeign.java

@ -244,5 +244,7 @@ public interface BusDeliveredApplyFeign {
@ResponseBody
public ResultBean assignTask(@RequestBody DeliveredDelegateQuery query);
@ApiOperation("根据车辆sid和已办结流程状态查询是否为欠款出库")
@GetMapping("/selByVinSidAndYBJ/{vinSid}")
ResultBean<Integer> selByVinSidAndYBJ(@RequestParam("vinSid") String vinSid);
}

5
anrui-buscenter/anrui-buscenter-api/src/main/java/com/yxt/anrui/buscenter/api/busdeliveredapply/BusDeliveredApplyFeignFallback.java

@ -196,6 +196,11 @@ public class BusDeliveredApplyFeignFallback implements BusDeliveredApplyFeign {
return null;
}
@Override
public ResultBean<Integer> selByVinSidAndYBJ(String vinSid) {
return null;
}
@Override
public ResultBean complete(BusDeliveredApplyCompleteDto query) {
return null;

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{
//生成新车空白合同
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());
filemap.put("contractNo",busSalesOrder.getContractNo());
ResultBean<Map<String,Object>> mapResultBean = commonContractFeign.getModelMap(filemap);
checkMap = mapResultBean.getData();
}
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;
}
}

2
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyMapper.java

@ -122,4 +122,6 @@ public interface BusDeliveredApplyMapper extends BaseMapper<BusDeliveredApply> {
BaseVehicleState selectByBusVinSid(String sid);
int selectCountByVinSid(@Param("vinSid") String vinSid,@Param("contractNo") String contractNo);
int selByVinSidAndYBJ(String vinSid);
}

9
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyMapper.xml

@ -199,4 +199,13 @@
<select id="selectCountByVinSid" resultType="int">
select count(*) from anrui_fin.fin_vehicle_invoice where contractNo = #{contractNo} and vehicleSid = #{vinSid}
</select>
<select id="selByVinSidAndYBJ" resultType="int">
SELECT COUNT(bacvd.*)
FROM bus_delivered_apply_details bdad
LEFT JOIN bus_delivered_apply bda
ON bdad.`applySid` = bda.`sid`
WHERE bdad.`vinSid` = #{vinSid}
AND bda.`nodeState` = "已办结"
</select>
</mapper>

5
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyRest.java

@ -267,6 +267,11 @@ public class BusDeliveredApplyRest implements BusDeliveredApplyFeign {
return busDeliveredApplyService.assignTask(query);
}
@Override
public ResultBean<Integer> selByVinSidAndYBJ(String vinSid) {
return busDeliveredApplyService.selByVinSidAndYBJ(vinSid);
}
@Override
public ResultBean complete(BusDeliveredApplyCompleteDto query) {
BusinessVariables bv = new BusinessVariables();

5
anrui-buscenter/anrui-buscenter-biz/src/main/java/com/yxt/anrui/buscenter/biz/busdeliveredapply/BusDeliveredApplyService.java

@ -4815,4 +4815,9 @@ public class BusDeliveredApplyService extends MybatisBaseService<BusDeliveredApp
}
public ResultBean<Integer> selByVinSidAndYBJ(String vinSid) {
ResultBean rb = ResultBean.fireFail();
int i = baseMapper.selByVinSidAndYBJ(vinSid);
return rb.success().setData(i);
}
}

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())) {
//生成新车空白合同
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();
}
}
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

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

@ -14,8 +14,8 @@ public enum ProcDefEnum {
ORDERDEPOSITVEHICLEAPPROVE("简易订单-车辆预定", "process_pkyns85b:5:575008"),
ORDERAPPROVE("订单审批", "order_approve_96asleqi:1:227504"),
SALESPOLICY("销售政策审批流程", "process_biw9gfh7:3:917504"),
FINBILLAPPLICATION("开票申请流程", "process_hxys3ap3:6:5777504"),
QKFINBILLAPPLICATION("欠款开票申请流程", "process_q4evu61h:4:7265004"),
FINBILLAPPLICATION("开票申请流程", "process_hxys3ap3:7:8387504"),
QKFINBILLAPPLICATION("欠款开票申请流程", "process_q4evu61h:5:8387508"),
QKLPFINBILLAPPLICATION("欠款领票申请流程", "process_x9r8epty:7:7265008"),
ARREARSCARRYVEHICLE("欠款提车审批流程", "process_f2dkbvny:5:4975004"),
VEHICLEAPPLY("排产申请流程", "process_9egcg169:14:3120004"),

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

@ -0,0 +1,130 @@
import request from '@/utils/request'
export default {
// 查询分页列表
listPage: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/listPage',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
getListPage: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/loanContractListPage',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
saveOrUpdate: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/saveLawsuit',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
init: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/lawsuitInit',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
fetchBySid: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/details',
method: 'get',
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',
method: 'DELETE',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
// 提交流程
submit: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/submit',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(同意)
complete: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/complete',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(加签)
delegate: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/delegate',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(驳回)
reject: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/reject',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(终止)
breakProcess: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/breakProcess',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(撤回)
revokeProcess: function(params) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/revokeProcess',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 审批流程(同意)获取下一环节
getNextNodesForSubmit: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/getNextNodesForSubmit',
method: 'get',
params: data
})
},
// 审批流程(驳回)获取上一环节
getPreviousNodesForReject: function(data) {
return request({
url: '/riskcenter/v1/LoanLawsuitApply/getPreviousNodesForReject',
method: 'get',
params: data
})
}
}

37
anrui-riskcenter-ui/src/router/index.js

@ -743,6 +743,22 @@ export const constantRoutes = [
}
]
},
{
path: '/caseaction',
component: Layout,
redirect: '/caseaction',
meta: {
title: '案件诉讼管理'
},
children: [
{
path: '/caseaction/caseaction',
component: () => import('@/views/caseaction/caseaction.vue'),
name: 'CaseAction',
meta: { title: '案件诉讼管理', noCache: true }
}
]
},
// 流程审批
// 金融产品政策报备--编辑
@ -1251,6 +1267,27 @@ export const constantRoutes = [
component: () =>
import('@/views/workFlow/huigouFlow/buybackYiBan.vue'),
name: 'BuyBackYiBan'
},
// 案件诉讼管理--编辑
{
path: '/susongFlow/caseactionEdit',
component: () =>
import('@/views/workFlow/susongFlow/caseactionEdit.vue'),
name: 'CaseActionEdit'
},
// 案件诉讼管理--待办
{
path: '/susongFlow/caseactionDaiBan',
component: () =>
import('@/views/workFlow/susongFlow/caseactionDaiBan.vue'),
name: 'CaseActionDaiBan'
},
// 案件诉讼管理--已办
{
path: '/susongFlow/caseactionYiBan',
component: () =>
import('@/views/workFlow/susongFlow/caseactionYiBan.vue'),
name: 'CaseActionYiBan'
},
// 404 page must be placed at the end !!!
// { path: '*', redirect: '/404', hidden: true }

371
anrui-riskcenter-ui/src/views/caseaction/caseaction.vue

@ -0,0 +1,371 @@
<template>
<div class="app-container">
<!--列表页面-->
<div v-show="viewState == 1">
<button-bar view-title="诉讼申请管理" ref="btnbar" :btndisabled="btndisabled" @btnhandle="btnHandle"/>
<!--Start查询列表部分-->
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form ref="listQueryform" :inline="true" :model="listQuery" label-width="110px" class="tab-header">
<el-form-item label="分公司">
<el-input v-model="listQuery.params.useOrgName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请部门">
<el-input v-model="listQuery.params.createDept" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请人">
<el-input v-model="listQuery.params.createByName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请日期">
<el-date-picker v-model="listQuery.params.applyStartDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
<span style="padding: 0 8px"></span>
<el-date-picker v-model="listQuery.params.applyEndDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="办结日期">
<el-date-picker v-model="listQuery.params.closeStartDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
<span style="padding: 0 8px"></span>
<el-date-picker v-model="listQuery.params.closeEndDate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="贷款合同编号">
<el-input v-model="listQuery.params.loanContractNo" placeholder="" clearable/>
</el-form-item>
<el-form-item label="资方">
<el-input v-model="listQuery.params.bankName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="资方合同编号">
<el-input v-model="listQuery.params.bankContractNo" placeholder="" clearable/>
</el-form-item>
<el-form-item label="客户名称">
<el-input v-model="listQuery.params.customerName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="贷款人">
<el-input v-model="listQuery.params.loanName" placeholder="" clearable/>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" size="small" @click="handleFilter">查询</el-button>
<el-button type="primary" icon="el-icon-refresh" size="small" @click="handleReset">重置</el-button>
</div>
</div>
</div>
<!--End查询列表部分-->
<div class="listtop">
<div class="tit">诉讼申请列表</div>
<pageye v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--Start 主页面主要部分 -->
<div class="">
<el-table :key="tableKey" v-loading="listLoading" :data="list" :border="true" style="width: 100%;" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="50"/>
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center"/>
<el-table-column label="操作" width="180px" align="center">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="toEdit(scope.row)" :disabled="scope.row.nodeState =='发起申请' ? false : scope.row.nodeState == '待提交' ? false : true">办理</el-button>
<el-button type="primary" size="mini" @click="toInfo(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column label="状态" width="180px" header-align="center">
<template slot-scope="scope">
<span v-if="scope.row.nodeState=='待提交'" type="primary" size="mini">待提交</span>
<span v-else @click="flowRecord(scope.row)" class="bluezi">{{ scope.row.nodeState }}</span>
</template>
</el-table-column>
<el-table-column prop="useOrgName" label="分公司" align="center" width="130" />
<el-table-column prop="createDept" label="申请部门" align="center" width="130" />
<el-table-column prop="createByName" label="申请人" align="center" width="100" />
<el-table-column prop="applyDate" label="申请日期" align="center" width="100" />
<el-table-column prop="closeDate" label="办结日期" align="center" width="100" />
<el-table-column prop="lawsuitSubject" label="诉讼主体" align="center" width="140" />
<el-table-column prop="loanContractNo" label="贷款合同编号" align="center" width="160" />
<el-table-column prop="customerName" label="客户名称" align="center" width="100" />
<el-table-column prop="loanName" label="贷款人" align="center" min-width="100" />
<el-table-column prop="bankContractNo" label="资方合同编号" align="center" width="160" />
<el-table-column prop="bankName" label="资方" align="center" width="100" />
</el-table>
</div>
<!--End 主页面主要部分-->
<div class="pages">
<div class="tit"/>
<!-- 翻页 -->
<pagination v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--End查询列表部分-->
</div>
</div>
<!--新增及修改 -->
<caseactionAdd v-show="viewState == 2 || viewState == 3" ref="divAdd" @doback="resetState" @reloadlist="getList"/>
<!--详情-->
<caseactionInfo v-show="viewState == 4" ref="divInfo" @doback="resetState" />
<!-- 流程审批记录 -->
<el-dialog title="" :visible.sync="centerDialogVisible" width="78%" height="1%" :before-close="closeIt" center>
<iframe frameborder="0" id="iframe" style="width:100%;" scrolling="no" :src="this.centerDialogVisible === true ? url :''"></iframe>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import ButtonBar from '@/components/ButtonBar'
import req from '@/api/caseaction/caseaction'
import { getStorage } from '@/utils/auth'
import caseactionAdd from './caseactionAdd'
import caseactionInfo from './caseactionInfo'
export default {
name: 'CaseAction',
components: {
Pagination,
pageye,
ButtonBar,
caseactionAdd,
caseactionInfo
},
data() {
return {
url: '',
dialogHeight: '80%',
centerDialogVisible: false,
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'danger',
size: 'small',
icon: 'del',
btnKey: 'doDel',
btnLabel: '删除'
},
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
isSearchShow: false,
searchxianshitit: '显示查询条件',
viewState: 1, // 1 2 3 4
tableKey: 0,
list: [],
sids: [], // SIDs
FormLoading: false,
listLoading: false,
//
listQuery: {
current: 1,
size: 10,
total: 0,
params: {
createDept: '',
applyStartDate: '',
applyEndDate: '',
useOrgName: '',
createByName: '',
closeStartDate: '',
closeEndDate: '',
loanContractNo: '',
vinNo: '',
vehMark: '',
bankName: '',
bankContractNo: '',
customerName: '',
loanName: '',
orgPath: '',
menuUrl: '',
userSid: ''
}
}
}
},
created() {
//
this.getList()
},
mounted() {
// vuewindowpostMessagehandleMessage
window.addEventListener('message', this.handleMessage)
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
async handleMessage(event) {
var code = ''
if (event.data.params !== null && event.data.params !== undefined) {
code = event.data.params.code
}
if (code === 1) {
this.centerDialogVisible = false
} else if (code === 2) {
this.dialogHeight = event.data.params.data
this.setIframeHeight(document.getElementById('iframe'))
}
},
closeIt() {
this.url = ''
this.centerDialogVisible = false
},
setIframeHeight(iframe) {
iframe.height = this.dialogHeight
},
flowRecord(row) {
this.centerDialogVisible = true
var params = {
deployId: row.procDefId,
procInsId: row.procInstId,
token: getStorage()
}
this.url = '/#/flow/flowRecordForBusiness?data=' + encodeURI((JSON.stringify(params)))
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'doDel':
this.doDel()
break
case 'doClose':
this.doClose()
break
default:
break
}
},
// sid
handleSelectionChange(row) {
const aa = []
row.forEach(element => {
aa.push(element.sid)
})
this.sids = aa
},
//
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
var pageindex = index + 1 + pagestart
return pageindex
},
//
getList() {
this.listLoading = true
this.listQuery.params.userSid = window.sessionStorage.getItem('userSid')
this.listQuery.params.orgPath = window.sessionStorage.getItem('defaultOrgPath')
this.listQuery.params.menuUrl = this.$route.path
req.listPage(this.listQuery).then(response => {
this.listLoading = false
if (response.success) {
this.list = response.data.records
this.listQuery.total = response.data.total
} else {
this.list = []
this.listQuery.total = 0
}
})
},
//
handleFilter() {
this.listQuery.current = 1
this.getList()
},
//
handleReset() {
this.listQuery = {
current: 1,
size: 10,
total: 0,
params: {
createDept: '',
applyStartDate: '',
applyEndDate: '',
useOrgName: '',
createByName: '',
closeStartDate: '',
closeEndDate: '',
loanContractNo: '',
vinNo: '',
vehMark: '',
bankName: '',
bankContractNo: '',
customerName: '',
loanName: '',
orgPath: '',
menuUrl: '',
userSid: ''
}
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit(row) {
this.viewState = 3
this.$refs['divAdd'].showEdit(row)
},
toInfo(row) {
this.viewState = 4
this.$refs['divInfo'].showInfo(row)
},
//
doDel() {
if (this.sids.length === 0) {
this.$message({ showClose: true, type: 'error', message: '请选择至少一条记录进行删除操作' })
return
}
const tip = '请确认是否删除所选 ' + this.sids.length + ' 条记录?'
this.$confirm(tip, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.deleteBySids(this.sids).then(resp => {
if (resp.success) {
this.$message({ type: 'success', message: resp.msg, showClose: true })
}
this.getList()
loading.close()
}).catch(e => {
loading.close()
})
}).catch(() => {
})
},
//
resetState() {
this.viewState = 1
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
}
}
}
</script>
<style scoped>
</style>

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

@ -0,0 +1,302 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="toSelect">选择合同</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate()">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()">提交</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</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>
<el-form-item><span class="addinputInfo">{{ formobj.createDept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">贷款合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">贷款人</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">资方</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">诉讼主体</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.lawsuitSubject" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<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">
<template slot-scope="scope">
<el-button type="danger" size="small" @click="toDelete(scope.$index)">删除</el-button>
</template>
</el-table-column>
<el-table-column prop="vinNo" label="车架号" align="center" width="120"/>
<el-table-column prop="vehMark" label="车牌号" align="center" width="120"/>
<el-table-column prop="alRepaidMoney" label="已还金额" align="center" width="140"/>
<el-table-column prop="currentBeMoney" label="当前逾期金额" align="center" width="160"/>
<el-table-column prop="unexpiredMoney" label="未到期金额" align="center" width="150"/>
<el-table-column prop="price" label="垫资方月还" align="center" width="150"/>
<el-table-column prop="bankInterest" label="垫资方逾期利息" align="center" width="160"/>
<el-table-column prop="wheFundOccMoney" label="资金占用费" align="center" width="150"/>
<el-table-column label="总期数/当前期数" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.nper }}/{{ scope.row.currentPeriod }}</span>
</template>
</el-table-column>
<el-table-column prop="alRepaidMoneyConPeriod" label="已还金额换算期数" align="center" width="180"/>
<el-table-column prop="beOverdueMoneyAndPeriod" label="逾期金额换算期数" align="center" width="180"/>
<el-table-column prop="amount" label="车辆处置金额" align="center" width="160"/>
<el-table-column prop="owedTotal" label="欠款小计" align="center" width="140"/>
<el-table-column prop="deposit" label="贷款保证金" align="center" width="150"/>
<el-table-column prop="repo" label="是否回购" align="center" width="180"/>
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">欠款合计</div>
<el-form-item><span class="addinputInfo">{{ formobj.amountAll }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">风控进展描述</div>
<el-row>
<el-col :span="24">
<el-form-item><el-input v-model="formobj.progress" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</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,
financialschemeInfo
},
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
formobj: {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
},
rules: {}
}
},
methods: {
showAdd() {
this.viewTitle = '【新增】案件诉讼申请'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
this.formobj.orgPath = window.sessionStorage.getItem('defaultOrgPath')
},
showEdit(row) {
this.viewTitle = '【编辑】案件诉讼申请'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid({ sid: row.sid }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
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)
},
toDelete(index) {
this.formobj.vehList.splice(index, 1)
if (this.formobj.vehList.length > 0) {
let num = 0
for (var i = 0; i < this.formobj.vehList.length; i++) {
num += parseFloat(this.formobj.vehList[i].owedTotal !== '' ? this.formobj.vehList[i].owedTotal : 0)
}
this.formobj.amountAll = num
} else {
this.formobj.amountAll = 0
}
},
//
backData(value) {
this.viewState = 1
if (value !== '' && value !== null) {
req.init({ userSid: window.sessionStorage.getItem('userSid'), orgPath: window.sessionStorage.getItem('defaultOrgPath'), loanContractSid: value }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
}
},
resetState() {
this.viewState = 1
},
saveOrUpdate() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.saveOrUpdate(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '保存成功' })
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
if (this.formobj.vehList.length === 0) {
this.$message({ showClose: true, type: 'error', message: '已还与欠款情况列表不能为空' })
return
}
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '操作成功' })
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
}
this.submitdisabled = false
this.$emit('doback')
}
}
}
</script>
<style scoped>
.span-sty {
width: 100px !important;
}
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

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

@ -0,0 +1,215 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</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>
<el-form-item><span class="addinputInfo">{{ formobj.createDept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">贷款合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">贷款人</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">资方</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">诉讼主体</div>
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<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"/>
<el-table-column prop="vehMark" label="车牌号" align="center" width="120"/>
<el-table-column prop="alRepaidMoney" label="已还金额" align="center" width="140"/>
<el-table-column prop="currentBeMoney" label="当前逾期金额" align="center" width="160"/>
<el-table-column prop="unexpiredMoney" label="未到期金额" align="center" width="150"/>
<el-table-column prop="price" label="垫资方月还" align="center" width="150"/>
<el-table-column prop="bankInterest" label="垫资方逾期利息" align="center" width="160"/>
<el-table-column prop="wheFundOccMoney" label="资金占用费" align="center" width="150"/>
<el-table-column label="总期数/当前期数" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.nper }}/{{ scope.row.currentPeriod }}</span>
</template>
</el-table-column>
<el-table-column prop="alRepaidMoneyConPeriod" label="已还金额换算期数" align="center" width="180"/>
<el-table-column prop="beOverdueMoneyAndPeriod" label="逾期金额换算期数" align="center" width="180"/>
<el-table-column prop="amount" label="车辆处置金额" align="center" width="160"/>
<el-table-column prop="owedTotal" label="欠款小计" align="center" width="140"/>
<el-table-column prop="deposit" label="贷款保证金" align="center" width="150"/>
<el-table-column prop="repo" label="是否回购" align="center" width="180"/>
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">欠款合计</div>
<el-form-item><span class="addinputInfo">{{ formobj.amountAll }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">风控进展描述</div>
<el-row>
<el-col :span="24">
<el-form-item><span>{{ formobj.progress }}</span></el-form-item>
</el-col>
</el-row>
</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: '',
viewState: 1,
tableKey: 0,
index: 0,
formobj: {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
},
rules: {}
}
},
methods: {
showInfo(row) {
this.viewTitle = '案件诉讼申请详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid({ sid: row.sid }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
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: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
}
this.$emit('doback')
}
}
}
</script>
<style scoped>
.span-sty {
width: 100px !important;
}
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

148
anrui-riskcenter-ui/src/views/caseaction/relation/selectContract.vue

@ -0,0 +1,148 @@
<template>
<div class="app-container">
<div>
<div class="tab-header webtop">
<div>选择合同页面</div>
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form ref="listQueryform" :inline="true" :model="listQuery" label-width="120px" class="tab-header">
<el-form-item label="贷款合同编号" class="searchlist">
<el-input v-model="listQuery.params.loanContractNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="客户名称" class="searchlist">
<el-input v-model="listQuery.params.customerName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="贷款人" class="searchlist">
<el-input v-model="listQuery.params.loanName" placeholder="" clearable/>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" @click="handleFilter" size="small">查询</el-button>
<el-button type="primary" icon="el-icon-refresh" @click="handleReset" size="small">重置</el-button>
</div>
</div>
</div>
<div class="listtop">
<div class="tit">贷款合同列表</div>
</div>
<div class="">
<el-table :key="tableKey" ref="multipleTable" v-loading="listLoading" :data="list" border style="width: 100%">
<el-table-column width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column width="80" label="操作" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="toSelect(scope.row)">选择</el-button>
</template>
</el-table-column>
<el-table-column prop="loanContractNo" label="贷款合同编号" align="center" />
<el-table-column prop="customerName" label="客户名称" align="center" />
<el-table-column prop="loanName" label="贷款人" align="center" />
<el-table-column prop="bankName" label="资方" align="center" />
<el-table-column prop="bankContractNo" label="资方合同编号" align="center" />
</el-table>
</div>
<div class="pages">
<div class="tit"/>
<!-- 翻页 -->
<Pagination v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
</div>
</div>
</div>
</template>
<script>
import Pagination from '@/components/pagination'
import req from '@/api/caseaction/caseaction'
export default {
name: 'SelectContract',
components: {
Pagination
},
data() {
return {
isSearchShow: false,
searchxianshitit: '隐藏查询条件',
tableKey: 0,
list: [],
listLoading: false,
listQuery: {
current: 1,
size: 5,
params: {
userSid: '',
orgPath: '',
loanContractNo: '',
customerName: '',
loanName: ''
},
total: 0
}
}
},
methods: {
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
var pageindex = index + 1 + pagestart
return pageindex
},
//
handleReturn() {
this.$emit('doback')
},
//
getList() {
this.listLoading = true
req.getListPage(this.listQuery).then((response) => {
this.listLoading = false
if (response.success) {
this.listQuery.total = response.data.total
this.list = response.data.records
}
})
},
//
handleFilter() {
this.listQuery.current = 1
this.getList()
},
//
handleReset() {
this.listQuery.current = 1
this.listQuery.size = 5
this.listQuery.total = 0
this.listQuery.params.loanContractNo = ''
this.listQuery.params.customerName = ''
this.listQuery.params.loanName = ''
this.getList()
},
showData(orgPath) {
this.listQuery.params.orgPath = orgPath
this.listQuery.current = 1
this.listQuery.size = 5
this.listQuery.total = 0
this.getList()
},
toSelect(row) {
this.$emit('backData', row.loanContractSid)
}
}
}
</script>
<style scoped>
</style>

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

@ -1,10 +1,12 @@
<template>
<div class="app-container">
<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>
@ -173,6 +175,7 @@
</el-collapse>
</el-form>
</div>
</div>
<!-- 查看公司合同类 附件 -->
<el-dialog :visible.sync="dialogGSVisible" :append-to-body="true">
<el-image style="width: 150px; height: 150px" v-for="(item,index) in dialogGS_list" :key="index" :src="item" :preview-src-list="dialogGS_list">
@ -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: [],

12
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() {
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: {
//

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

@ -0,0 +1,472 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" @click="openCountersign('加签')"> </el-button>
<el-button type="primary" size="small" @click="openAgree('同意')"> </el-button>
<el-button type="danger" size="small" @click="openReject('驳回')"> </el-button>
<el-button type="danger" size="small" @click="openStop('终止')"> </el-button>
</div>
</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>
<el-form-item><span class="addinputInfo">{{ formobj.createDept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">贷款合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">贷款人</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">资方</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">诉讼主体</div>
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<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"/>
<el-table-column prop="vehMark" label="车牌号" align="center" width="120"/>
<el-table-column prop="alRepaidMoney" label="已还金额" align="center" width="140"/>
<el-table-column prop="currentBeMoney" label="当前逾期金额" align="center" width="160"/>
<el-table-column prop="unexpiredMoney" label="未到期金额" align="center" width="150"/>
<el-table-column prop="price" label="垫资方月还" align="center" width="150"/>
<el-table-column prop="bankInterest" label="垫资方逾期利息" align="center" width="160"/>
<el-table-column prop="wheFundOccMoney" label="资金占用费" align="center" width="150"/>
<el-table-column label="总期数/当前期数" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.nper }}/{{ scope.row.currentPeriod }}</span>
</template>
</el-table-column>
<el-table-column prop="alRepaidMoneyConPeriod" label="已还金额换算期数" align="center" width="180"/>
<el-table-column prop="beOverdueMoneyAndPeriod" label="逾期金额换算期数" align="center" width="180"/>
<el-table-column prop="amount" label="车辆处置金额" align="center" width="160"/>
<el-table-column prop="owedTotal" label="欠款小计" align="center" width="140"/>
<el-table-column prop="deposit" label="贷款保证金" align="center" width="150"/>
<el-table-column prop="repo" label="是否回购" align="center" width="180"/>
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">欠款合计</div>
<el-form-item><span class="addinputInfo">{{ formobj.amountAll }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">风控进展描述</div>
<el-row>
<el-col :span="24">
<el-form-item><span>{{ formobj.progress }}</span></el-form-item>
</el-col>
</el-row>
</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" >
<el-row v-show="countersignLink" style="border-top: 1px solid #e0e3eb">
<el-col :span="4" class="tleftb">
<span class="icon">*</span>加签人员:
</el-col>
<el-col :span="20">
<el-form-item>
<el-select v-model="countersign.assignee" placeholder="请选择" filterable>
<el-option v-for="item in options" :key="item.userSid" :label="item.staffName" :value="item.userSid">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="currentLink" style="border-top: 1px solid #e0e3eb">
<el-col :span="4" class="tleftb">
<span>当前环节:</span>
</el-col>
<el-col :span="20">
<el-form-item><span>{{ current.taskName }}->{{ nextNode.name }}</span></el-form-item>
</el-col>
</el-row>
<el-row :class="{rowClass:!currentLink}">
<el-col :span="4" class="tleftb">
<span>意见:</span>
</el-col>
<el-col :span="20">
<el-form-item><el-input size="small" v-model="dialogList.comment" placeholder="审批意见" class="addinputw" type="textarea" :autosize="{ minRows: 1, maxRows: 10}" clearable ></el-input></el-form-item>
</el-col>
</el-row>
<div style="text-align:center;margin-top: 20px;">
<el-button type="primary" size="mini" @click="reject"> </el-button>
<el-button type="info " size="mini" @click="nodeDialogVisible = false"> </el-button>
</div>
</el-form>
</el-dialog>
</div>
</template>
<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: '',
viewState: 1,
tableKey: 0,
index: 0,
formobj: {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
},
rules: {},
options: [],
operation: '', //
dialogList: {
comment: ''
},
startTask: true,
current: {
taskDefKey: '',
taskName: '' //
},
nextNode: {}, //
nodeDialogVisible: false,
currentLink: true,
countersignLink: false,
//
linkByParameter: {
businessSid: '',
comment: '',
instanceId: '',
taskId: '',
orgSidPath: '',
taskDefKey: '',
userSid: ''
},
//
countersign: {
taskId: '',
assignee: '',
userSid: '',
instanceId: '',
views: ''
}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
console.log('iframe页面获取的obj:', obj)
//
this.linkByParameter.businessSid = obj.businessSid
this.linkByParameter.instanceId = obj.instanceId
this.linkByParameter.taskId = obj.taskId
this.linkByParameter.taskDefKey = obj.taskDefKey
// this.linkByParameter.orgSidPath = window.sessionStorage.getItem('orgSidPath')
this.linkByParameter.userSid = window.sessionStorage.getItem('userSid')
this.current.taskDefKey = obj.taskDefKey
this.current.taskName = obj.taskName
//
this.countersign.taskId = obj.taskId
this.countersign.userSid = window.sessionStorage.getItem('userSid')
this.countersign.instanceId = obj.instanceId
//
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 400 + 'px'
}
}, '*')
},
methods: {
showInfo(sid) {
this.viewTitle = '案件诉讼申请详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid({ sid: sid }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
selectStaffListss().then((res) => {
if (res.success) {
this.options = res.data
}
})
},
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
this.currentLink = true
this.countersignLink = true
this.dialogList.comment = ''
req.getNextNodesForSubmit({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openAgree(val) {
this.operation = val
this.currentLink = true
this.countersignLink = false
this.dialogList.comment = '同意'
req.getNextNodesForSubmit({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openReject(val) {
this.operation = val
this.currentLink = true
this.countersignLink = false
this.dialogList.comment = ''
req.getPreviousNodesForReject({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openStop(val) {
this.operation = val
this.currentLink = false
this.countersignLink = false
this.dialogList.comment = ''
this.nodeDialogVisible = true
},
reject() {
if (this.operation === '同意') {
this.handleAgree()
} else if (this.operation === '驳回') {
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
} else {
this.handleReject()
}
} else if (this.operation === '终止') {
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
} else {
this.handleStop()
}
} else if (this.operation === '加签') {
this.handleCountersign()
}
},
/** 加签 */
handleCountersign() {
if (this.countersign.assignee === '') {
this.$message({ showClose: true, type: 'error', message: '请选择加签人员' })
return
}
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
return
}
this.countersign.views = this.dialogList.comment
req.delegate(this.countersign).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 同意任务 */
handleAgree() {
this.linkByParameter.comment = this.dialogList.comment
req.complete(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 驳回任务 */
handleReject() {
this.linkByParameter.comment = this.dialogList.comment
req.reject(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 终止任务 */
handleStop() {
this.linkByParameter.comment = this.dialogList.comment
req.breakProcess(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 100px !important;
}
.addinputInfo {
margin-left: 90px !important;
}
.rowClass{
border-top: 1px solid #E0E3EB;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

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

@ -0,0 +1,287 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="toSelect">选择合同</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate()">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()">提交</el-button>
</div>
</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>
<el-form-item><span class="addinputInfo">{{ formobj.createDept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">贷款合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">贷款人</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">资方</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">诉讼主体</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.lawsuitSubject" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<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">
<template slot-scope="scope">
<el-button type="danger" size="small" @click="toDelete(scope.$index)">删除</el-button>
</template>
</el-table-column>
<el-table-column prop="vinNo" label="车架号" align="center" width="120"/>
<el-table-column prop="vehMark" label="车牌号" align="center" width="120"/>
<el-table-column prop="alRepaidMoney" label="已还金额" align="center" width="140"/>
<el-table-column prop="currentBeMoney" label="当前逾期金额" align="center" width="160"/>
<el-table-column prop="unexpiredMoney" label="未到期金额" align="center" width="150"/>
<el-table-column prop="price" label="垫资方月还" align="center" width="150"/>
<el-table-column prop="bankInterest" label="垫资方逾期利息" align="center" width="160"/>
<el-table-column prop="wheFundOccMoney" label="资金占用费" align="center" width="150"/>
<el-table-column label="总期数/当前期数" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.nper }}/{{ scope.row.currentPeriod }}</span>
</template>
</el-table-column>
<el-table-column prop="alRepaidMoneyConPeriod" label="已还金额换算期数" align="center" width="180"/>
<el-table-column prop="beOverdueMoneyAndPeriod" label="逾期金额换算期数" align="center" width="180"/>
<el-table-column prop="amount" label="车辆处置金额" align="center" width="160"/>
<el-table-column prop="owedTotal" label="欠款小计" align="center" width="140"/>
<el-table-column prop="deposit" label="贷款保证金" align="center" width="150"/>
<el-table-column prop="repo" label="是否回购" align="center" width="180"/>
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">欠款合计</div>
<el-form-item><span class="addinputInfo">{{ formobj.amountAll }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">风控进展描述</div>
<el-row>
<el-col :span="24">
<el-form-item><el-input v-model="formobj.progress" clearable placeholder=""/></el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</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,
financialschemeInfo
},
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
formobj: {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
},
rules: {}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 400 + 'px'
}
}, '*')
},
methods: {
showInfo(sid) {
this.viewTitle = '【编辑】案件诉讼申请'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid({ sid: sid }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
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)
},
toDelete(index) {
this.formobj.vehList.splice(index, 1)
if (this.formobj.vehList.length > 0) {
let num = 0
for (var i = 0; i < this.formobj.vehList.length; i++) {
num += parseFloat(this.formobj.vehList[i].owedTotal !== '' ? this.formobj.vehList[i].owedTotal : 0)
}
this.formobj.amountAll = num
} else {
this.formobj.amountAll = 0
}
},
//
backData(value) {
this.viewState = 1
if (value !== '' && value !== null) {
req.init({ userSid: window.sessionStorage.getItem('userSid'), orgPath: window.sessionStorage.getItem('defaultOrgPath'), loanContractSid: value }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
}
},
resetState() {
this.viewState = 1
},
saveOrUpdate() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.saveOrUpdate(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '保存成功' })
// ()
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
if (this.formobj.vehList.length === 0) {
this.$message({ showClose: true, type: 'error', message: '已还与欠款情况列表不能为空' })
return
}
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '操作成功' })
// ()
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 100px !important;
}
.addinputInfo {
margin-left: 90px !important;
}
</style>

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

@ -0,0 +1,258 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="danger" size="small" @click="openRevoke()">撤回</el-button>
</div>
</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>
<el-form-item><span class="addinputInfo">{{ formobj.createDept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">贷款合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">贷款人</div>
<el-form-item><span class="addinputInfo">{{ formobj.loanName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">资方合同编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankContractNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">资方</div>
<el-form-item><span class="addinputInfo">{{ formobj.bankName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">诉讼主体</div>
<el-form-item><span class="addinputInfo">{{ formobj.lawsuitSubject }}</span></el-form-item>
</el-col>
</el-row>
<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"/>
<el-table-column prop="vehMark" label="车牌号" align="center" width="120"/>
<el-table-column prop="alRepaidMoney" label="已还金额" align="center" width="140"/>
<el-table-column prop="currentBeMoney" label="当前逾期金额" align="center" width="160"/>
<el-table-column prop="unexpiredMoney" label="未到期金额" align="center" width="150"/>
<el-table-column prop="price" label="垫资方月还" align="center" width="150"/>
<el-table-column prop="bankInterest" label="垫资方逾期利息" align="center" width="160"/>
<el-table-column prop="wheFundOccMoney" label="资金占用费" align="center" width="150"/>
<el-table-column label="总期数/当前期数" align="center" width="180">
<template slot-scope="scope">
<span>{{ scope.row.nper }}/{{ scope.row.currentPeriod }}</span>
</template>
</el-table-column>
<el-table-column prop="alRepaidMoneyConPeriod" label="已还金额换算期数" align="center" width="180"/>
<el-table-column prop="beOverdueMoneyAndPeriod" label="逾期金额换算期数" align="center" width="180"/>
<el-table-column prop="amount" label="车辆处置金额" align="center" width="160"/>
<el-table-column prop="owedTotal" label="欠款小计" align="center" width="140"/>
<el-table-column prop="deposit" label="贷款保证金" align="center" width="150"/>
<el-table-column prop="repo" label="是否回购" align="center" width="180"/>
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">欠款合计</div>
<el-form-item><span class="addinputInfo">{{ formobj.amountAll }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">风控进展描述</div>
<el-row>
<el-col :span="24">
<el-form-item><span>{{ formobj.progress }}</span></el-form-item>
</el-col>
</el-row>
</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: '',
viewState: 1,
tableKey: 0,
index: 0,
formobj: {
sid: '',
taskId: '',
instanceId: '',
userSid: '',
orgPath: '',
createDept: '',
createDeptSid: '',
createByName: '',
customerName: '',
customerSid: '',
loanName: '',
loanSid: '',
loanContractSid: '',
loanContractNo: '',
bankName: '',
bankContractNo: '',
useOrgSid: '',
useOrgName: '',
lawsuitSubject: '',
salesOrderSid: '',
applyDate: '',
progress: '',
amountAll: '',
vehList: []
},
//
linkByParameter: {
businessSid: '',
comment: '',
instanceId: '',
taskId: '',
orgSidPath: '',
taskDefKey: '',
userSid: ''
},
rules: {}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
console.log('iframe页面获取的obj:', obj)
//
this.linkByParameter.businessSid = obj.businessSid
this.linkByParameter.instanceId = obj.instanceId
this.linkByParameter.taskId = obj.taskId
this.linkByParameter.taskDefKey = obj.taskDefKey
this.linkByParameter.userSid = window.sessionStorage.getItem('userSid')
//
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 400 + 'px'
}
}, '*')
},
methods: {
showInfo(sid) {
this.viewTitle = '案件诉讼申请详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid({ sid: sid }).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
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('是否确认执行撤回操作', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRevoke()
}).catch(() => {
this.$message({
type: 'info',
message: '已取消撤回'
})
})
},
/** 撤回任务 */
handleRevoke() {
req.revokeProcess(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 100px !important;
}
.addinputInfo {
margin-left: 90px !important;
}
.titleOne {
padding: 7px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
</style>

148
anrui-riskcenter-ui/src/views/workFlow/susongFlow/relation/selectContract.vue

@ -0,0 +1,148 @@
<template>
<div class="app-container">
<div>
<div class="tab-header webtop">
<div>选择合同页面</div>
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
<div class="">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form ref="listQueryform" :inline="true" :model="listQuery" label-width="120px" class="tab-header">
<el-form-item label="贷款合同编号" class="searchlist">
<el-input v-model="listQuery.params.loanContractNo" placeholder="" clearable />
</el-form-item>
<el-form-item label="客户名称" class="searchlist">
<el-input v-model="listQuery.params.customerName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="贷款人" class="searchlist">
<el-input v-model="listQuery.params.loanName" placeholder="" clearable/>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" @click="handleFilter" size="small">查询</el-button>
<el-button type="primary" icon="el-icon-refresh" @click="handleReset" size="small">重置</el-button>
</div>
</div>
</div>
<div class="listtop">
<div class="tit">贷款合同列表</div>
</div>
<div class="">
<el-table :key="tableKey" ref="multipleTable" v-loading="listLoading" :data="list" border style="width: 100%">
<el-table-column width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column width="80" label="操作" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="toSelect(scope.row)">选择</el-button>
</template>
</el-table-column>
<el-table-column prop="loanContractNo" label="贷款合同编号" align="center" />
<el-table-column prop="customerName" label="客户名称" align="center" />
<el-table-column prop="loanName" label="贷款人" align="center" />
<el-table-column prop="bankName" label="资方" align="center" />
<el-table-column prop="bankContractNo" label="资方合同编号" align="center" />
</el-table>
</div>
<div class="pages">
<div class="tit"/>
<!-- 翻页 -->
<Pagination v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
</div>
</div>
</div>
</template>
<script>
import Pagination from '@/components/pagination'
import req from '@/api/caseaction/caseaction'
export default {
name: 'SelectContract',
components: {
Pagination
},
data() {
return {
isSearchShow: false,
searchxianshitit: '隐藏查询条件',
tableKey: 0,
list: [],
listLoading: false,
listQuery: {
current: 1,
size: 5,
params: {
userSid: '',
orgPath: '',
loanContractNo: '',
customerName: '',
loanName: ''
},
total: 0
}
}
},
methods: {
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
var pageindex = index + 1 + pagestart
return pageindex
},
//
handleReturn() {
this.$emit('doback')
},
//
getList() {
this.listLoading = true
req.getListPage(this.listQuery).then((response) => {
this.listLoading = false
if (response.success) {
this.listQuery.total = response.data.total
this.list = response.data.records
}
})
},
//
handleFilter() {
this.listQuery.current = 1
this.getList()
},
//
handleReset() {
this.listQuery.current = 1
this.listQuery.size = 5
this.listQuery.total = 0
this.listQuery.params.loanContractNo = ''
this.listQuery.params.customerName = ''
this.listQuery.params.loanName = ''
this.getList()
},
showData(orgPath) {
this.listQuery.params.orgPath = orgPath
this.listQuery.current = 1
this.listQuery.size = 5
this.listQuery.total = 0
this.getList()
},
toSelect(row) {
this.$emit('backData', row.loanContractSid)
}
}
}
</script>
<style scoped>
</style>

6
anrui-riskcenter/anrui-riskcenter-api/src/main/java/com/yxt/anrui/riskcenter/api/loancaseexecuteapply/LoanCaseExecuteApplyDetailsVo.java

@ -55,6 +55,12 @@ public class LoanCaseExecuteApplyDetailsVo implements Vo {
private String sid; // sid
@ApiModelProperty("备注")
private String remarks;
@ApiModelProperty("申请日期")
private String createTime;
@ApiModelProperty("创建人sid")
private String createBySid;
@ApiModelProperty("创建人")
private String createByName; // 创建人
@ApiModelProperty("申请编号")

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

@ -56,4 +56,6 @@ public class LoanHomevisitPrep extends BaseEntity {
private String saleOrderSid;
@ApiModelProperty("销售订单贷款人表sid")
private String saleOrderBorrowerSid;
@ApiModelProperty("模板下载路径")
private String downUrl;
}

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

@ -81,4 +81,6 @@ public class LoanHomevisitPrepVo implements Vo {
private String policyName;
@ApiModelProperty("合同生成状态")
private String createState;
@ApiModelProperty("模板下载路径")
private String downUrl;
}

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

@ -70,4 +70,7 @@ public interface LoanHomevisitPrepMapper extends BaseMapper<LoanHomevisitPrep> {
String initConSetUp(String sid);
LoanHomevisitPrepVo selectDetails(String sid);
@Update("update loan_homevisit_prep set downUrl = #{downUrl} where sid = #{sid}")
void updateDownUrl(@Param("sid") String sid,@Param("downUrl") String downUrl);
}

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

@ -21,7 +21,8 @@
bl.`borrowerSid` IS NULL,
'未生成',
'已生成'
) AS createState
) AS createState,
lp.downUrl
FROM
loan_homevisit_prep lp
LEFT JOIN anrui_buscenter.`bus_sales_order_borrower` bb

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

@ -567,6 +567,7 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
}
urlAllVo = docPdfComponent.getPrefixTemplateUrl() + urlAll;
}
baseMapper.updateDownUrl(sid,"/template/" + urlAll);
return rb.success().setData(urlAllVo);
}

118
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/AppCaseExecuteApplyDetailsVo.java

@ -0,0 +1,118 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.terminal.api.risk.caseexecute;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Project: anrui-riskcenter(案件执行立案申请) <br/>
* File: LoanCaseExecuteApplyVo.java <br/>
* Class: com.yxt.anrui.riskcenter.api.loancaseexecuteapply.LoanCaseExecuteApplyVo <br/>
* Description: 案件执行立案申请 视图数据对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2024-02-07 10:00:57 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Data
@ApiModel(value = "案件执行立案申请 视图数据详情", description = "案件执行立案申请 视图数据详情")
public class AppCaseExecuteApplyDetailsVo implements Vo {
private String sid; // sid
@ApiModelProperty("申请部门-申请人")
private String publishInfo;
@ApiModelProperty("申请日期")
private String time;
@ApiModelProperty("案件创建日期")
private String caseCreateDate;
@ApiModelProperty("公司负责人")
private String compHead;
@ApiModelProperty("法务部门负责人")
private String legalDeptHead;
@ApiModelProperty("案件编号")
private String caseNo;
@ApiModelProperty("案件类型")
private String caseType;
@ApiModelProperty("贷款合同编号")
private String loanContract;
@ApiModelProperty("贷款人")
private String lenderName;
@ApiModelProperty("贷款人证件号码")
private String lenderIdNo;
@ApiModelProperty("贷款人户籍/注册地址")
private String lenderAddress;
@ApiModelProperty("客户")
private String customName;
@ApiModelProperty("资方")
private String bankName;
@ApiModelProperty("资方合同编号")
private String bankContract;
@ApiModelProperty("欠款合计")
private String arrearsTotal;
@ApiModelProperty("是否全额诉讼")
private String isFullLitigation;
@ApiModelProperty("起诉金额合计")
private String sueMoneyTotal;
@ApiModelProperty("部分诉讼说明")
private String partProceRemarks;
@ApiModelProperty("判决日期")
private String judgDate;
@ApiModelProperty("判决结果")
private String judgResult;
@ApiModelProperty("判决金额")
private String judgMoney;
@ApiModelProperty("判决备注")
private String judgRemarks;
@ApiModelProperty("判决生效后回款金额")
private String judgPayMoney;
@ApiModelProperty("预执行立案日期")
private String executeRegisDate;
@ApiModelProperty("执行时限")
private String executeDeadline;
@ApiModelProperty("执行立案金额")
private String executeRegisMoney;
@ApiModelProperty("流程实例的sid")
private String procInsId;
@ApiModelProperty("任务id")
private String taskId;
@ApiModelProperty
private List<String> appPjclFiles;
@ApiModelProperty
private List<String> appZxclFiles;
@ApiModelProperty("上诉车辆")
private List<AppCaseExecuteVehDetailsVo> appCaseExecuteVehList;
}

63
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/AppCaseExecuteVehDetailsVo.java

@ -0,0 +1,63 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.terminal.api.risk.caseexecute;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Project: anrui-riskcenter(案件执行立案申请) <br/>
* File: LoanCaseExecuteVehVo.java <br/>
* Class: com.yxt.anrui.riskcenter.api.loancaseexecuteveh.LoanCaseExecuteVehVo <br/>
* Description: 案件执行立案车辆 视图数据对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2024-02-07 10:00:58 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Data
@ApiModel(value = "案件执行立案车辆 视图数据详情", description = "案件执行立案车辆 视图数据详情")
public class AppCaseExecuteVehDetailsVo implements Vo {
private String sid; // sid
@ApiModelProperty("车架号")
private String vinNo; // 车架号
@ApiModelProperty("车牌号")
private String carNum; // 车牌号
@ApiModelProperty("挂靠公司")
private String affiliatedCompany; // 挂靠公司
@ApiModelProperty("车辆状态")
private String carState; // 车辆状态
@ApiModelProperty("备注")
private String remarks;
}

61
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/CaseExecuteFeign.java

@ -0,0 +1,61 @@
package com.yxt.anrui.terminal.api.risk.caseexecute;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.AppCaseExecuteDelegateQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteTaskQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CompleteCaseExecuteDto;
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.*;
/**
* @Author
* @Date
* @Description
*/
@Api(tags = "案件上诉管理")
@FeignClient(
contextId = "terminal-CaseExecute",
name = "anrui-terminal",
path = "riskcenter/v1/caseexecute",
fallback = CaseExecuteFeignFallback.class)
public interface CaseExecuteFeign {
@ApiOperation("办理")
@PutMapping("/agreeCreditInfo")
@ResponseBody
ResultBean agreeCreditInfo(@RequestBody CompleteCaseExecuteDto dto);
@ApiOperation("驳回")
@PutMapping("/rejectCreditInfo")
@ResponseBody
ResultBean rejectCreditInfo(@RequestBody CaseExecuteTaskQuery query);
@ApiOperation("撤回")
@PutMapping("/recallCreditInfo")
@ResponseBody
ResultBean recallCreditInfo(@RequestBody CaseExecuteTaskQuery query);
@ApiOperation("终止")
@PutMapping("/stopCreditInfo")
@ResponseBody
ResultBean stopCreditInfo(@RequestBody CaseExecuteTaskQuery query);
@ApiOperation("获取流程操作标题")
@GetMapping("/getFlowOperateTitle")
@ResponseBody
ResultBean<String> getFlowOperateTitle(@SpringQueryMap CaseExecuteQuery query);
@ApiOperation(value = "加签")
@PutMapping(value = "/delegate")
@ResponseBody
public ResultBean delegate(@RequestBody AppCaseExecuteDelegateQuery delegateQuery);
@ApiOperation("案件上诉详情")
@GetMapping("/details/{sid}")
@ResponseBody
public ResultBean<AppCaseExecuteApplyDetailsVo> collectionDetail(@PathVariable("sid") String sid);
}

12
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/CaseExecuteFeignFallback.java

@ -0,0 +1,12 @@
package com.yxt.anrui.terminal.api.risk.caseexecute;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: dimengzhe
* @date: 2023/8/8
**/
@Component
public class CaseExecuteFeignFallback {
}

25
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/AppCaseExecuteDelegateQuery.java

@ -0,0 +1,25 @@
package com.yxt.anrui.terminal.api.risk.caseexecute.flowable;
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 AppCaseExecuteDelegateQuery {
@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;
}

17
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CaseExecuteQuery.java

@ -0,0 +1,17 @@
package com.yxt.anrui.terminal.api.risk.caseexecute.flowable;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CaseExecuteQuery implements Query {
private static final long serialVersionUID = -3563282658560745370L;
@ApiModelProperty(value = "节点key")
private String taskDefKey;
@ApiModelProperty(value = "业务sid")
private String businessSid;
@ApiModelProperty(value = "0 上一环节 1下一环节")
private Integer next;
}

42
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CaseExecuteTaskQuery.java

@ -0,0 +1,42 @@
package com.yxt.anrui.terminal.api.risk.caseexecute.flowable;
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;
@Data
public class CaseExecuteTaskQuery implements Query {
private static final long serialVersionUID = -6952737531036706114L;
/**
* 终止驳回撤回
*/
@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;
}

34
anrui-terminal/anrui-terminal-api/src/main/java/com/yxt/anrui/terminal/api/risk/caseexecute/flowable/CompleteCaseExecuteDto.java

@ -0,0 +1,34 @@
package com.yxt.anrui.terminal.api.risk.caseexecute.flowable;
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;
@Data
public class CompleteCaseExecuteDto implements Dto {
private static final long serialVersionUID = 7978653524636034916L;
@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;
private String orgPath;
}

5
anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseappeal/CaseAppealService.java

@ -68,10 +68,6 @@ public class CaseAppealService {
@Autowired
private LoanCaseAppealApplyFeign loanCaseAppealApplyFeign;
@Autowired
private LoanSolutionsFeign loanSolutionsFeign;
@Autowired
private CommonService commonService;
public ResultBean agreeCreditInfo(CompleteCaseAppealDto dto) {
ResultBean rb = ResultBean.fireFail();
@ -174,6 +170,7 @@ public class CaseAppealService {
appYscl.add(file.getUrl());
}
}
appCaseAppealApplyDetailsVo.setAppPjclFiles(appPjcl);
appCaseAppealApplyDetailsVo.setAppYsclFiles(appYscl);
List<LoanCaseAppealVehDetailsVo> loanCaseAppealVehList = loanCaseAppealApplyDetailsVo.getLoanCaseAppealVehList();
List<AppCaseAppealVehDetailsVo> appCaseAppealVehDetailsVos = new ArrayList<>();

86
anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseexecute/CaseExecuteRest.java

@ -0,0 +1,86 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.terminal.biz.risk.caseexecute;
import com.yxt.anrui.terminal.api.risk.caseappeal.AppCaseAppealApplyDetailsVo;
import com.yxt.anrui.terminal.api.risk.caseappeal.CaseAppealFeign;
import com.yxt.anrui.terminal.api.risk.caseappeal.flowable.AppCaseAppealDelegateQuery;
import com.yxt.anrui.terminal.api.risk.caseappeal.flowable.CaseAppealQuery;
import com.yxt.anrui.terminal.api.risk.caseappeal.flowable.CaseAppealTaskQuery;
import com.yxt.anrui.terminal.api.risk.caseappeal.flowable.CompleteCaseAppealDto;
import com.yxt.anrui.terminal.api.risk.caseexecute.AppCaseExecuteApplyDetailsVo;
import com.yxt.anrui.terminal.api.risk.caseexecute.CaseExecuteFeign;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.AppCaseExecuteDelegateQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteTaskQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CompleteCaseExecuteDto;
import com.yxt.common.core.result.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController("案件立案管理")
@RequestMapping("riskcenter/v1/caseexecute")
public class CaseExecuteRest implements CaseExecuteFeign {
@Autowired
private CaseExecuteService caseExecuteService;
@Override
public ResultBean agreeCreditInfo(CompleteCaseExecuteDto dto) {
return caseExecuteService.agreeCreditInfo(dto);
}
@Override
public ResultBean rejectCreditInfo(CaseExecuteTaskQuery query) {
return caseExecuteService.rejectCreditInfo(query);
}
@Override
public ResultBean recallCreditInfo(CaseExecuteTaskQuery query) {
return caseExecuteService.recallCreditInfo(query);
}
@Override
public ResultBean stopCreditInfo(CaseExecuteTaskQuery query) {
return caseExecuteService.stopCreditInfo(query);
}
@Override
public ResultBean<String> getFlowOperateTitle(CaseExecuteQuery query) {
return caseExecuteService.getFlowOperateTitle(query);
}
@Override
public ResultBean delegate(AppCaseExecuteDelegateQuery delegateQuery) {
return caseExecuteService.delegate(delegateQuery);
}
@Override
public ResultBean<AppCaseExecuteApplyDetailsVo> collectionDetail(String sid) {
return caseExecuteService.collectionDetail(sid);
}
}

168
anrui-terminal/anrui-terminal-biz/src/main/java/com/yxt/anrui/terminal/biz/risk/caseexecute/CaseExecuteService.java

@ -0,0 +1,168 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.terminal.biz.risk.caseexecute;
import cn.hutool.core.bean.BeanUtil;
import com.yxt.anrui.riskcenter.api.loancaseexecuteapply.LoanCaseExecuteApplyDetailsVo;
import com.yxt.anrui.riskcenter.api.loancaseexecuteapply.LoanCaseExecuteApplyFeign;
import com.yxt.anrui.riskcenter.api.loancaseexecuteapply.LoanCaseExecuteFile;
import com.yxt.anrui.riskcenter.api.loancaseexecuteapply.flowable.*;
import com.yxt.anrui.riskcenter.api.loancaseexecuteveh.LoanCaseExecuteVehDetailsVo;
import com.yxt.anrui.terminal.api.risk.caseexecute.AppCaseExecuteApplyDetailsVo;
import com.yxt.anrui.terminal.api.risk.caseexecute.AppCaseExecuteVehDetailsVo;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.AppCaseExecuteDelegateQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CaseExecuteTaskQuery;
import com.yxt.anrui.terminal.api.risk.caseexecute.flowable.CompleteCaseExecuteDto;
import com.yxt.common.core.result.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Service
public class CaseExecuteService {
@Autowired
private LoanCaseExecuteApplyFeign loanCaseExecuteApplyFeign;
public ResultBean agreeCreditInfo(CompleteCaseExecuteDto dto) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyCompleteDto loanCaseExecuteApplyCompleteDto = new LoanCaseExecuteApplyCompleteDto();
BeanUtil.copyProperties(dto, loanCaseExecuteApplyCompleteDto);
loanCaseExecuteApplyFeign.complete(loanCaseExecuteApplyCompleteDto);
return rb.success();
}
public ResultBean rejectCreditInfo(CaseExecuteTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyTaskQuery taskQuery = new LoanCaseExecuteApplyTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanCaseExecuteApplyFeign.reject(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean recallCreditInfo(CaseExecuteTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyTaskQuery taskQuery = new LoanCaseExecuteApplyTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanCaseExecuteApplyFeign.revokeProcess(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean stopCreditInfo(CaseExecuteTaskQuery query) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyTaskQuery taskQuery = new LoanCaseExecuteApplyTaskQuery();
BeanUtil.copyProperties(query, taskQuery);
ResultBean resultBean = loanCaseExecuteApplyFeign.breakProcess(taskQuery);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setData(resultBean.getData());
}
public ResultBean<String> getFlowOperateTitle(CaseExecuteQuery query) {
ResultBean<String> rb = ResultBean.fireFail();
//0 上一环节 1下一环节
int next = query.getNext();
LoanCaseExecuteApplyNodeQuery getNodeQuery = new LoanCaseExecuteApplyNodeQuery();
BeanUtil.copyProperties(query, getNodeQuery);
String data = "";
if (next == 0) {
ResultBean<List<LoanCaseExecuteApplyNodeVo>> previousNodesForReject = loanCaseExecuteApplyFeign.getPreviousNodesForReject(getNodeQuery);
if (previousNodesForReject.getSuccess()) {
previousNodesForReject.getData().removeAll(Collections.singleton(null));
data = previousNodesForReject.getData().get(0).getName();
} else {
return rb.setMsg(previousNodesForReject.getMsg());
}
} else if (next == 1) {
ResultBean<List<LoanCaseExecuteApplyNodeVo>> nextNodesForSubmit = loanCaseExecuteApplyFeign.getNextNodesForSubmit(getNodeQuery);
if (nextNodesForSubmit.getSuccess()) {
nextNodesForSubmit.getData().removeAll(Collections.singleton(null));
data = nextNodesForSubmit.getData().get(0).getName();
} else {
return rb.setMsg(nextNodesForSubmit.getMsg());
}
} else {
return rb.setMsg("参数错误:next");
}
return rb.success().setData(data);
}
public ResultBean delegate(AppCaseExecuteDelegateQuery delegateQuery) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyDelegateQuery delegateQuery1 = new
LoanCaseExecuteApplyDelegateQuery();
BeanUtil.copyProperties(delegateQuery, delegateQuery1);
loanCaseExecuteApplyFeign.delegate(delegateQuery1);
return rb.success();
}
public ResultBean<AppCaseExecuteApplyDetailsVo> collectionDetail(String sid) {
ResultBean rb = ResultBean.fireFail();
LoanCaseExecuteApplyDetailsVo loanCaseExecuteApplyDetailsVo = loanCaseExecuteApplyFeign.fetchDetailsBySid(sid).getData();
AppCaseExecuteApplyDetailsVo appCaseExecuteApplyDetailsVo = new AppCaseExecuteApplyDetailsVo();
BeanUtil.copyProperties(loanCaseExecuteApplyDetailsVo,appCaseExecuteApplyDetailsVo);
appCaseExecuteApplyDetailsVo.setPublishInfo(loanCaseExecuteApplyDetailsVo.getDeptName() + "-" + loanCaseExecuteApplyDetailsVo.getCreateByName());
appCaseExecuteApplyDetailsVo.setTime(loanCaseExecuteApplyDetailsVo.getCreateTime());
appCaseExecuteApplyDetailsVo.setProcInsId(loanCaseExecuteApplyDetailsVo.getProcInstSid());
List<LoanCaseExecuteFile> pjclFiles = loanCaseExecuteApplyDetailsVo.getPjclFiles();
List<String> appPjcl = new ArrayList<>();
if (pjclFiles != null && pjclFiles.size() > 0){
for (LoanCaseExecuteFile file : pjclFiles) {
appPjcl.add(file.getUrl());
}
}
List<LoanCaseExecuteFile> zxclFiles = loanCaseExecuteApplyDetailsVo.getZxclFiles();
List<String> appZxcl = new ArrayList<>();
if (zxclFiles != null && zxclFiles.size() > 0){
for (LoanCaseExecuteFile file : zxclFiles) {
appZxcl.add(file.getUrl());
}
}
appCaseExecuteApplyDetailsVo.setAppPjclFiles(appPjcl);
appCaseExecuteApplyDetailsVo.setAppZxclFiles(appZxcl);
List<LoanCaseExecuteVehDetailsVo> loanCaseExecuteVehList = loanCaseExecuteApplyDetailsVo.getLoanCaseExecuteVehList();
List<AppCaseExecuteVehDetailsVo> appCaseExecuteVehDetailsVos = new ArrayList<>();
for (LoanCaseExecuteVehDetailsVo loanCaseExecuteVehDetailsVo : loanCaseExecuteVehList) {
AppCaseExecuteVehDetailsVo appCaseExecuteVehDetailsVo = new AppCaseExecuteVehDetailsVo();
BeanUtil.copyProperties(loanCaseExecuteVehDetailsVo,appCaseExecuteVehDetailsVo);
appCaseExecuteVehDetailsVos.add(appCaseExecuteVehDetailsVo);
}
appCaseExecuteApplyDetailsVo.setAppCaseExecuteVehList(appCaseExecuteVehDetailsVos);
return rb.success().setData(appCaseExecuteApplyDetailsVo);
}
}
Loading…
Cancel
Save