|
|
@@ -0,0 +1,526 @@
|
|
|
+package com.ydtech.modules.order.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.util.ArrayUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.ydtech.components.ZhongmeiRequestComponents;
|
|
|
+import com.ydtech.constants.enums.InsuranceRisk;
|
|
|
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
|
|
|
+import com.ydtech.core.page.HttpResult;
|
|
|
+import com.ydtech.exception.SystemException;
|
|
|
+import com.ydtech.modules.fee.service.FeeRuleSchemeService;
|
|
|
+import com.ydtech.modules.ins.model.request.Response;
|
|
|
+import com.ydtech.modules.ins.model.vo.*;
|
|
|
+import com.ydtech.modules.ins.model.ya.CarModelDTO;
|
|
|
+import com.ydtech.modules.ins.model.zm.ZmCarModel;
|
|
|
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
|
|
|
+import com.ydtech.modules.order.components.ZhongmeiRequestApiComponents;
|
|
|
+import com.ydtech.modules.order.components.zhongmei.ZhongmeiRepeatInsuranceComponents;
|
|
|
+import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
|
|
|
+import com.ydtech.modules.order.convert.SimpleStadarCarDTOConvert;
|
|
|
+import com.ydtech.modules.order.entity.InsAreaCompany;
|
|
|
+import com.ydtech.modules.order.entity.InsOrders;
|
|
|
+import com.ydtech.modules.order.entity.TaxArrears;
|
|
|
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseRequestHead;
|
|
|
+import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceRequest;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.BaseRequestHead;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.AuditStatusEnum;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.DocumentTypeEnum;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.PaymentStatusEnum;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.SubmitStatus;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.request.*;
|
|
|
+import com.ydtech.modules.order.entity.api.zhongmei.response.*;
|
|
|
+import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
|
|
|
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
|
|
|
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
|
|
|
+import com.ydtech.modules.order.entity.vo.*;
|
|
|
+import com.ydtech.modules.order.service.*;
|
|
|
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
|
|
|
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
|
|
|
+import com.ydtech.utils.CalculateUtils;
|
|
|
+import com.ydtech.utils.baidu.FileUtil;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.core.ParameterizedTypeReference;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
|
|
|
+
|
|
|
+ private final InsOrdersService insOrdersService;
|
|
|
+
|
|
|
+ private final InsAreaCompanyService insAreaCompanyService;
|
|
|
+
|
|
|
+ private final InsTaskImagesService insTaskImagesService;
|
|
|
+
|
|
|
+ private final ZhongmeiRequestApiComponents zhongmeiRequestApiComponents;
|
|
|
+
|
|
|
+
|
|
|
+ private final ZhongmeiRequestComponents zhongmeiRequestComponents;
|
|
|
+
|
|
|
+ private final PtlAgreementAttributionService ptlAgreementAttributionService;
|
|
|
+
|
|
|
+ private final ConfigureParametersComponents configureParametersComponents;
|
|
|
+
|
|
|
+ private final FeeRuleSchemeService feeRuleSchemeService;
|
|
|
+
|
|
|
+ private final InsFeeOrderService insFeeOrderService;
|
|
|
+
|
|
|
+ private final ZhongmeiRepeatInsuranceComponents zhongmeiRepeatInsuranceComponents;
|
|
|
+
|
|
|
+ @Value("${upload.file.path}")
|
|
|
+ private String uploadFilePath;
|
|
|
+
|
|
|
+ @Value("${upload.file.url}")
|
|
|
+ private String showFileUrl;
|
|
|
+
|
|
|
+ @Value("${api.url}")
|
|
|
+ private String apiUrl;
|
|
|
+
|
|
|
+ public HuaTaiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService,
|
|
|
+ ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, ZhongmeiRequestComponents zhongmeiRequestComponents,
|
|
|
+ ConfigureParametersComponents configureParametersComponents, PtlAgreementAttributionService ptlAgreementAttributionService,
|
|
|
+ FeeRuleSchemeService feeRuleSchemeService, InsFeeOrderService insFeeOrderService, ZhongmeiRepeatInsuranceComponents zhongmeiRepeatInsuranceComponents) {
|
|
|
+ this.insOrdersService = insOrdersService;
|
|
|
+ this.insAreaCompanyService = insAreaCompanyService;
|
|
|
+ this.insTaskImagesService = insTaskImagesService;
|
|
|
+ this.zhongmeiRequestApiComponents = zhongmeiRequestApiComponents;
|
|
|
+ this.zhongmeiRequestComponents = zhongmeiRequestComponents;
|
|
|
+ this.configureParametersComponents = configureParametersComponents;
|
|
|
+ this.ptlAgreementAttributionService = ptlAgreementAttributionService;
|
|
|
+ this.feeRuleSchemeService = feeRuleSchemeService;
|
|
|
+ this.insFeeOrderService = insFeeOrderService;
|
|
|
+ this.zhongmeiRepeatInsuranceComponents = zhongmeiRepeatInsuranceComponents;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void modelInquiry(String modelName, List<ModelsQueryResponse.SimpleStadarCarDTO> simpleStadarCarDTOS) {
|
|
|
+ if (!simpleStadarCarDTOS.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("modelName", modelName);
|
|
|
+ Response<List<ZmCarModel>> model = zhongmeiRequestComponents.modelQuery(map, new ParameterizedTypeReference<Response<List<ZmCarModel>>>() {
|
|
|
+ });
|
|
|
+ List<ZmCarModel> data = model.getData();
|
|
|
+ if (data.isEmpty()) {
|
|
|
+ throw new SystemException("未查到你想要的车型");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (ZmCarModel zmCarModel : data) {
|
|
|
+ simpleStadarCarDTOS.add(new ModelsQueryResponse.SimpleStadarCarDTO(zmCarModel));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<List<CarModelDTO>> modelsQuery(String modelName) {
|
|
|
+ ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
|
|
|
+ modelsQueryResponse.setModelName(modelName);
|
|
|
+// List<ModelsQueryResponse.SimpleStadarCarDTO> car = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
|
|
|
+ List<ModelsQueryResponse.SimpleStadarCarDTO> car = new ArrayList<>();
|
|
|
+ modelInquiry(modelName, car);
|
|
|
+
|
|
|
+ List<CarModelDTO> map = SimpleStadarCarDTOConvert.INSTANCE.map(car);
|
|
|
+ return HttpResult.ok(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<AccidentalDrivingVo> zmQuoteVo) {
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ String agreementId = zmQuoteVo.getAgreementId();
|
|
|
+ // 账号信息
|
|
|
+ PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
|
|
|
+ // 通过 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, ptlAgreementAttribution);
|
|
|
+
|
|
|
+ BaseRequestHead baseRequestHead = new BaseRequestHead(zmConfigureParameters);
|
|
|
+
|
|
|
+ CarInfoVo carInfo = quoteInfo.getCarInfo();
|
|
|
+ // 2. 查询车型
|
|
|
+ ModelsQueryRequest modelsQueryResponse = new ModelsQueryRequest();
|
|
|
+ modelsQueryResponse.setModelName(carInfo.getModelcname());
|
|
|
+ modelsQueryResponse.setBrand(carInfo.getBrandName());
|
|
|
+ modelsQueryResponse.setHead(baseRequestHead);
|
|
|
+ List<ModelsQueryResponse.SimpleStadarCarDTO> simpleStadarCarDTOS = zhongmeiRequestApiComponents.modelQuery(modelsQueryResponse, ModelsQueryResponse.class);
|
|
|
+
|
|
|
+ // 2.1 使用爬虫接口调用车型
|
|
|
+ modelInquiry(carInfo.getModelcname(), simpleStadarCarDTOS);
|
|
|
+
|
|
|
+ // 2.2 过滤车型
|
|
|
+ ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO =
|
|
|
+ new CarModelsFilterUtils<ModelsQueryResponse.SimpleStadarCarDTO>().to(simpleStadarCarDTOS, carInfo);
|
|
|
+
|
|
|
+ //座位数根据前端传入的赋值
|
|
|
+ if(StringUtils.isNotEmpty(carInfo.getSeatCount())){
|
|
|
+ int seatCount = Integer.parseInt(carInfo.getSeatCount());
|
|
|
+ simpleStadarCarDTO.setApprovedPassengersCapacity(seatCount);
|
|
|
+ }
|
|
|
+ // 3 组装参数
|
|
|
+ QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO, zmQuoteVo.getAccidentalDrivingVo(), zmConfigureParameters);
|
|
|
+ quotedPriceRequest.setHead(baseRequestHead);
|
|
|
+
|
|
|
+ QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
|
|
|
+ QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
|
|
|
+ //这里调用费用匹配功能
|
|
|
+ feeRuleSchemeService.dealFeeOrderInfo(quoteInfo,quoteRespVo,ptlAgreementAttribution.getId(),quotedPriceResponse.getBusinessNo());
|
|
|
+ return responseOrder(quotedPriceResponse, quoteRespVo, ptlAgreementAttribution);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> audit(String companyId) {
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
|
|
|
+
|
|
|
+ InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
|
|
|
+ JSONObject ownerinfo = insOrders.getApplyinfo();
|
|
|
+ CustomerInfoVo customerInfoVo = ownerinfo.toJavaObject(CustomerInfoVo.class);
|
|
|
+ // 2. 提交核保
|
|
|
+ SubmitResponse response = submitForUnderwriting(insAreaCompany.getId(), insOrders.getFrameno(), customerInfoVo, zmConfigureParameters);
|
|
|
+ // 3. 人工核保
|
|
|
+ if (SubmitStatus.S_3.getCode().equals(response.getSubmitStatus())) {
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_AUDIT.getCode());
|
|
|
+ if(StringUtils.isNotEmpty(response.getSubmitNotion())){
|
|
|
+ insAreaCompany.setAuditopinion(response.getSubmitNotion());
|
|
|
+ }
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ return HttpResult.error(response.getSubmitNotion());
|
|
|
+ }
|
|
|
+ zhongmeiRequestApiComponents.validationResults(response);
|
|
|
+ // 4. 投保单号
|
|
|
+ insAreaCompany.setPaymentLink(response.getPayUrl());
|
|
|
+ insAreaCompany.setJqapplyno(response.getForceProposalNo());
|
|
|
+ insAreaCompany.setSyapplyno(response.getBizProposalNo());
|
|
|
+// insAreaCompany.setJyapplyno(response.getAccidentProposalNo());
|
|
|
+ insAreaCompany.setInsOrderNo(response.getProposalNo());
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ return HttpResult.ok("核保成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> submitImage(String companyId) {
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
|
|
|
+
|
|
|
+ InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
|
|
|
+ // 2. 投保单号(总)
|
|
|
+ String insOrderNo = insAreaCompany.getId();
|
|
|
+
|
|
|
+ List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
|
|
|
+ if (insTaskImagesBase64s.isEmpty()) {
|
|
|
+ throw new SystemException("请检查影像是否上传了");
|
|
|
+ }
|
|
|
+ UploadImageRequest request = new UploadImageRequest(insTaskImagesBase64s, insOrderNo);
|
|
|
+ request.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+ zhongmeiRequestApiComponents.uploadImage(request, UploadImageResponse.class);
|
|
|
+ return HttpResult.ok("上传文件成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> underwritingCallback(CoverageRequest coverageRequest) {
|
|
|
+ try {
|
|
|
+ if (coverageRequest.getStatus() == PaymentStatusEnum.P_2.getCode()) {
|
|
|
+ // 主投保单号
|
|
|
+ String proposalNo = coverageRequest.getProposalNo();
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(proposalNo);
|
|
|
+ // 保单号
|
|
|
+ insAreaCompany.setJqpolicyno(coverageRequest.getForcePolicyNo());
|
|
|
+ insAreaCompany.setSypolicyno(coverageRequest.getBizPolicyNo());
|
|
|
+// insAreaCompany.setJypolicyno(coverageRequest.getAccidentPolicyNo());
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.debug("承保回调 {}", e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> auditCallback(ApprovedRequest approvedRequest) {
|
|
|
+ try {
|
|
|
+ // 主投保单号
|
|
|
+ String contractNo = approvedRequest.getContractNo();
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(contractNo);
|
|
|
+ if (AuditStatusEnum.S_1.getCode().equals(approvedRequest.getStatusCode())) {
|
|
|
+ insAreaCompany.setJqapplyno(approvedRequest.getProposalNoJ());
|
|
|
+ insAreaCompany.setSyapplyno(approvedRequest.getProposalNoS());
|
|
|
+// insAreaCompany.setJyapplyno(approvedRequest.getProposalNoCP());
|
|
|
+ insAreaCompany.setPaymentLink(approvedRequest.getPayUrl());
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
|
|
|
+ } else {
|
|
|
+ if(StringUtils.isNotEmpty(approvedRequest.getHandleText())){
|
|
|
+ insAreaCompany.setAuditopinion(approvedRequest.getHandleText());
|
|
|
+ }
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.TO_BACK.getCode());
|
|
|
+ }
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.debug("审核回调 {}", e.getMessage());
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> paymentEnquiry(String companyId) {
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
|
|
|
+
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
|
|
|
+
|
|
|
+ if (insAreaCompany.getOrderstatus().equals(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode())) {
|
|
|
+ return HttpResult.ok(InsOrderStatusEnum.ACCEPT_INSURANCE.getDesc());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 组装请求体
|
|
|
+ OrderStatusRequest orderStatusRequest = new OrderStatusRequest();
|
|
|
+ orderStatusRequest.setOrderNo(insAreaCompany.getId());
|
|
|
+ orderStatusRequest.setSubProposalNo(insAreaCompany.getInsOrderNo());
|
|
|
+ orderStatusRequest.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+
|
|
|
+ OrderStatusResponse orderStatusResponse = zhongmeiRequestApiComponents.orderStatus(orderStatusRequest, OrderStatusResponse.class);
|
|
|
+ String status = orderStatusResponse.getStatus();
|
|
|
+
|
|
|
+ // 3. 承保成功修改状态
|
|
|
+ if (status.equals(String.valueOf(PaymentStatusEnum.P_2.getCode()))) {
|
|
|
+ insAreaCompany.setJqpolicyno(orderStatusResponse.getSubContractNoJ());
|
|
|
+ insAreaCompany.setSypolicyno(orderStatusResponse.getSubContractNoS());
|
|
|
+// insAreaCompany.setJypolicyno(orderStatusResponse.getAccidentNo());
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+
|
|
|
+ return HttpResult.ok(PaymentStatusEnum.P_2.getMeaning());
|
|
|
+ }
|
|
|
+
|
|
|
+ return HttpResult.error(Enum.valueOf(PaymentStatusEnum.class, "P_" + status).getMeaning());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<List<String>> getPolicyPrint(PolicyPrintVo policyPrintVo) {
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(policyPrintVo.getCompanyId());
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
|
|
|
+ InsOrders order = insOrdersService.getById(insAreaCompany.getOrderno());
|
|
|
+ String licensePlate = order.getLicenseno();
|
|
|
+ String policyNo;
|
|
|
+ String code = DocumentTypeEnum.code(policyPrintVo.getType());
|
|
|
+ String riskCode = policyPrintVo.getRiskCode();
|
|
|
+ if (InsuranceRisk.TRAFFIC.getCode().equals(riskCode)) {
|
|
|
+ policyNo = insAreaCompany.getJqpolicyno();
|
|
|
+ } else if (InsuranceRisk.BUSINESS.getCode().equals(riskCode)) {
|
|
|
+ policyNo = insAreaCompany.getJqpolicyno();
|
|
|
+ } else {
|
|
|
+ throw new SystemException("险种代码不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 组装请求体
|
|
|
+ InsurancePolicyPrintRequest request = new InsurancePolicyPrintRequest();
|
|
|
+ request.setRiskCode(InsuranceTypeCorrespondence.getRisk().get(riskCode));
|
|
|
+ request.setPolicyNo(policyNo);
|
|
|
+ request.setDocumentType(code);
|
|
|
+ request.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+ InsurancePolicyPrintResponse response = zhongmeiRequestApiComponents.insurancePolicyPrint(request, InsurancePolicyPrintResponse.class);
|
|
|
+ if("1".equals(response.getStatusCode())){
|
|
|
+ List<String> urlList = response.getDownloadUrl();
|
|
|
+
|
|
|
+ if(urlList!=null && !urlList.isEmpty()){
|
|
|
+ String url = urlList.get(0);
|
|
|
+ String templateName = "";
|
|
|
+ if("DZ_AJ".equals(code)){
|
|
|
+ templateName = "-交强险标志.pdf";
|
|
|
+ }else if("DZ_AE".equals(code)){
|
|
|
+ if("0330".equals(request.getRiskCode())){
|
|
|
+ templateName = "-交强险保单.pdf";
|
|
|
+ }else {
|
|
|
+ templateName = "-商业险保单.pdf";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String transferUrl = gainCarInsPolicy(url, licensePlate + templateName, licensePlate);
|
|
|
+ List<String> transferUrlList = new ArrayList<>();
|
|
|
+ transferUrlList.add(transferUrl);
|
|
|
+ response.setDownloadUrl(transferUrlList);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ return HttpResult.error("中煤电子保单生成失败,请重试或联系中煤!");
|
|
|
+ }
|
|
|
+ return HttpResult.ok("下载成功", response.getDownloadUrl());
|
|
|
+ }
|
|
|
+
|
|
|
+ public String gainCarInsPolicy(String url, String fileName, String licensePlate) {
|
|
|
+ String dir = "carInsPolicy/" + licensePlate + "/";
|
|
|
+ return FileUtil.netUrlToFile(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @param orderNo 中煤订单号
|
|
|
+ * @param frameNo 车架号
|
|
|
+ * @param customerInfoVo 车辆信息
|
|
|
+ * @param zmConfigureParameters 中煤配置参数
|
|
|
+ * @return 核保请求参数
|
|
|
+ */
|
|
|
+ public SubmitResponse submitForUnderwriting(String orderNo, String frameNo, CustomerInfoVo customerInfoVo, ZmConfigureParameters zmConfigureParameters) {
|
|
|
+ SubmitRequest submitRequest = new SubmitRequest();
|
|
|
+ submitRequest.setBusinessNo(orderNo);
|
|
|
+ submitRequest.setVin(frameNo);
|
|
|
+ SubmitRequest.DeliveryInfoDTO deliveryInfoDTO = new SubmitRequest.DeliveryInfoDTO(customerInfoVo.getName(), customerInfoVo.getMobile(),
|
|
|
+ // 省
|
|
|
+ zmConfigureParameters.getProvince(),
|
|
|
+ // 市
|
|
|
+ zmConfigureParameters.getCity(),
|
|
|
+ // 县
|
|
|
+ zmConfigureParameters.getDistrict(), customerInfoVo.getAddr());
|
|
|
+ submitRequest.setDeliveryInfo(deliveryInfoDTO);
|
|
|
+ submitRequest.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+ return zhongmeiRequestApiComponents.submit(submitRequest, SubmitResponse.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ public QuoteRespVo getQuoteRespVo(QuotedPriceResponse quotedPriceResponse, BaseQuoteInfoVo yaQuoteInfoVo) {
|
|
|
+ double jqPremium = 0;
|
|
|
+ double syPremium = 0;
|
|
|
+ double jqDiscount = 0;
|
|
|
+ double syDiscount = 0;
|
|
|
+
|
|
|
+ if (!ObjectUtils.isEmpty(quotedPriceResponse.getForcePrimium())) {
|
|
|
+ jqPremium = quotedPriceResponse.getForcePrimium().getPremium();
|
|
|
+ }
|
|
|
+ if (!ObjectUtils.isEmpty(quotedPriceResponse.getBizPremium())) {
|
|
|
+ syPremium = quotedPriceResponse.getBizPremium().getSumPremium();
|
|
|
+ }
|
|
|
+
|
|
|
+ QuoteRespVo quoteRespVo = new QuoteRespVo();
|
|
|
+
|
|
|
+ List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
|
|
|
+ // 报价险种放入保费
|
|
|
+ List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
|
|
|
+
|
|
|
+ for(QuoteRiskRespVo quoteRiskRespVo:riskList1){
|
|
|
+ if (InsuranceRisk.TRAFFIC.getCode().equals(quoteRiskRespVo.getRiskCode())) {
|
|
|
+ quoteRespVo.setStartDateJq(quoteRiskRespVo.getStartDate());
|
|
|
+ quoteRespVo.setEndDateJq(quoteRiskRespVo.getEndDate());
|
|
|
+ } else if (InsuranceRisk.BUSINESS.getCode().equals(quoteRiskRespVo.getRiskCode())) {
|
|
|
+ quoteRespVo.setStartDateSy(quoteRiskRespVo.getStartDate());
|
|
|
+ quoteRespVo.setEndDateSy(quoteRiskRespVo.getEndDate());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<QuoteKindRespVo> kindList1 = new ArrayList<>();
|
|
|
+ QuoteKindRespVo kind;
|
|
|
+ List<QuotedPriceResponse.BizPremiumDTO.CoverageListDTO> coverageList;
|
|
|
+ if (!ObjectUtils.isEmpty(quotedPriceResponse.getBizPremium())) {
|
|
|
+ coverageList = quotedPriceResponse.getBizPremium().getCoverageList();
|
|
|
+ List<KindInfoVo> kindList = yaQuoteInfoVo.getKindList();
|
|
|
+ for (KindInfoVo kindInfoVo : kindList) {
|
|
|
+ kind = new QuoteKindRespVo();
|
|
|
+ kind.setKindCode(kindInfoVo.getKindCode());
|
|
|
+ kind.setKindName(kindInfoVo.getKindName());
|
|
|
+ kind.setAmount(kindInfoVo.getAmount());
|
|
|
+ int i = ArrayUtil.indexOf(InsuranceTypeCorrespondence.getJinZhangGuiType(), kindInfoVo.getKindCode());
|
|
|
+
|
|
|
+ QuotedPriceResponse.BizPremiumDTO.CoverageListDTO coverageListDTOS = coverageList.stream().filter(a -> a.getKindCode().equals(InsuranceTypeCorrespondence.getZmConnectInsuranceType()[i])).collect(Collectors.toList()).get(0);
|
|
|
+
|
|
|
+ kind.setCoveragePremium(coverageListDTOS.getPremium());
|
|
|
+ kind.setUnitAmount(kindInfoVo.getUnitAmount());
|
|
|
+ if (!ObjectUtils.isEmpty(kindInfoVo.getDeductibleRate())) {
|
|
|
+ kind.setDeductibleRate(Double.parseDouble(kindInfoVo.getDeductibleRate()));
|
|
|
+ }
|
|
|
+ kindList1.add(kind);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ quoteRespVo.setRiskList(riskList1);
|
|
|
+ quoteRespVo.setKindList(kindList1);
|
|
|
+ quoteRespVo.setJqPremium(jqPremium);
|
|
|
+ quoteRespVo.setSyPremium(syPremium);
|
|
|
+ quoteRespVo.setJqAdjustRate(String.valueOf(jqDiscount));
|
|
|
+ quoteRespVo.setSyAdjustRate(String.valueOf(syDiscount));
|
|
|
+ QuotedPriceResponse.TaxinfoDTO taxinfo = quotedPriceResponse.getTaxinfo();
|
|
|
+
|
|
|
+ double sumPayTax = ObjectUtils.isEmpty(taxinfo) ? 0 : taxinfo.getSumPayTax();
|
|
|
+ quoteRespVo.setCiSumPermium(CalculateUtils.add(jqPremium, sumPayTax));//交强险和车船税合计
|
|
|
+ quoteRespVo.setSumPermium(CalculateUtils.add(jqPremium, syPremium, sumPayTax));//保费合计
|
|
|
+ quoteRespVo.setTaxAmount(sumPayTax);//车船税
|
|
|
+ quoteRespVo.setTotalAdjustRate(0);
|
|
|
+ String zmScore = quotedPriceResponse.getPlatMain().getZmScore();
|
|
|
+ quoteRespVo.setILogPreUdwMess(zmScore);//评分
|
|
|
+ quoteRespVo.setOrderno(yaQuoteInfoVo.getOrderNo()); //订单号
|
|
|
+
|
|
|
+ return quoteRespVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public HttpResult<QuoteRespVo> responseOrder(QuotedPriceResponse quotedPriceResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
|
|
|
+ //保存订单信息
|
|
|
+ InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
|
|
|
+ insAreaCompany.setId(quotedPriceResponse.getBusinessNo());
|
|
|
+ insAreaCompany.setInsOrderNo(quotedPriceResponse.getBusinessNo());
|
|
|
+ // 车船税
|
|
|
+ TaxArrears taxArrears = new TaxArrears("往年欠税", quotedPriceResponse.getTaxinfo().getPrePayTax(), quotedPriceResponse.getTaxinfo().getDelayPayTax());
|
|
|
+ List<TaxArrears> taxArrearsList = Collections.singletonList(taxArrears);
|
|
|
+ insAreaCompany.setTaxArrears(JSON.parseArray(JSON.toJSONString(taxArrearsList)));
|
|
|
+
|
|
|
+ insAreaCompanyService.insertCompanyAndOrders(insAreaCompany);
|
|
|
+ quoteRespVo.setCompanyId(insAreaCompany.getId());
|
|
|
+ quoteRespVo.setTaxArrears(taxArrearsList);
|
|
|
+ return HttpResult.ok(quotedPriceResponse.getHead().getReturnMessage(), quoteRespVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> auditStatusQuery(String companyId) {
|
|
|
+ InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, insAreaCompany.getAgreementId());
|
|
|
+
|
|
|
+ if (insAreaCompany.getOrderstatus().equals(InsOrderStatusEnum.WAIT_PAY.getCode())) {
|
|
|
+ return HttpResult.ok(InsOrderStatusEnum.WAIT_PAY.getDesc());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 组装请求体
|
|
|
+ SubmitStatusQueryRequest submitStatusQueryRequest = new SubmitStatusQueryRequest();
|
|
|
+ submitStatusQueryRequest.setProposalNo(insAreaCompany.getInsOrderNo());
|
|
|
+ submitStatusQueryRequest.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+
|
|
|
+ SubmitStatusQueryResponse submitStatusQueryResponse = zhongmeiRequestApiComponents.submitStatus(submitStatusQueryRequest, SubmitStatusQueryResponse.class);
|
|
|
+ String underWriteInd = submitStatusQueryResponse.getUnderWriteInd();
|
|
|
+
|
|
|
+ // 3. 通过返回核保状态修改状态
|
|
|
+ if ("核保通过".equals(underWriteInd) || "自动核保".equals(underWriteInd)) {
|
|
|
+ insAreaCompany.setPaymentLink(submitStatusQueryResponse.getPayUrl());
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());//当核保状态返回核保通过时,调整保单状态为已核保待缴费
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ return HttpResult.ok(underWriteInd);
|
|
|
+ }else if("核保不通过".equals(underWriteInd)){//当状态为核保不通过时,调整保单状态为报价中
|
|
|
+ insAreaCompany.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode());
|
|
|
+ insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
|
|
|
+ return HttpResult.error("核保不通过:"+submitStatusQueryResponse.getIssuedReason());
|
|
|
+ }else {
|
|
|
+ return HttpResult.ok(underWriteInd);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> rideAccidentQuery(AccidentalDrivingQueryVo accidentalDrivingVo) {
|
|
|
+ // 1. 协议id获取配置实体
|
|
|
+ ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class, accidentalDrivingVo.getAgreementId());
|
|
|
+
|
|
|
+ // 2. 组装请求体
|
|
|
+ RideAccidentQueryRequest rideAccidentQueryRequest = new RideAccidentQueryRequest(zmConfigureParameters);
|
|
|
+ rideAccidentQueryRequest.setSeats(accidentalDrivingVo.getSeatNum());
|
|
|
+ rideAccidentQueryRequest.setHead(new BaseRequestHead(zmConfigureParameters));
|
|
|
+
|
|
|
+ RideAccidentQueryResponse rideAccidentQueryResponse = zhongmeiRequestApiComponents.rideAccidentQuery(rideAccidentQueryRequest, RideAccidentQueryResponse.class);
|
|
|
+
|
|
|
+ return HttpResult.ok("");
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|