Ver código fonte

Merge remote-tracking branch 'origin/test-dismantle' into test-dismantle

# Conflicts:
#	src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
785834757 2 anos atrás
pai
commit
38d64b3931

+ 7 - 2
src/main/java/com/ydtech/modules/order/components/bohai/BoHaiRequestApiComponent.java

@@ -6,11 +6,13 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ydtech.config.properties.BohaiApiConfigurationProperties;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.order.entity.api.bohai.BoHaiEncrypted;
 import com.ydtech.modules.order.entity.api.bohai.constants.RequestType;
 import com.ydtech.modules.order.entity.api.bohai.constants.ResponseCode;
 import com.ydtech.modules.order.entity.api.bohai.request.*;
 import com.ydtech.modules.order.entity.api.bohai.response.*;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.modules.order.utils.SignatureUtils;
 import lombok.RequiredArgsConstructor;
@@ -21,6 +23,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.List;
 import java.util.Map;
 
 
@@ -104,8 +107,10 @@ public class BoHaiRequestApiComponent {
      * @param request 车辆查询请求实体
      * @return 响应
      */
-    public VehicleTypeQueryResponse vehicleTypeQuery(VehicleTypeQueryRequest request, String sysSourceCode) throws Exception {
-        return verificationResponse(request, properties.getUrl(), VehicleTypeQueryResponse.class, sysSourceCode, RequestType.Z00004);
+    public VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleTypeQuery(VehicleTypeQueryRequest request, String sysSourceCode, CarInfoVo carInfoVo) throws Exception {
+        VehicleTypeQueryResponse vehicleTypeQueryResponse =  verificationResponse(request, properties.getUrl(), VehicleTypeQueryResponse.class, sysSourceCode, RequestType.Z00004);
+        List<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO> vehicleModels = vehicleTypeQueryResponse.getData().getVehicleModels();
+        return new CarModelsFilterUtils<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO>().to(vehicleModels, carInfoVo);
     }
 
     /**

+ 41 - 20
src/main/java/com/ydtech/modules/order/components/pingan/PinganRequestApiComponents.java

@@ -1,31 +1,20 @@
 package com.ydtech.modules.order.components.pingan;
 
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ydtech.config.properties.PingAnApiConfigurationProperties;
-import com.ydtech.constants.InsuranceEnum;
-import com.ydtech.modules.order.entity.api.bohai.BoHaiEncrypted;
-import com.ydtech.modules.order.entity.api.bohai.constants.RequestType;
-import com.ydtech.modules.order.entity.api.bohai.request.BoHaiBaseRequest;
-import com.ydtech.modules.order.entity.api.bohai.response.BoHaiBaseResponse;
-import com.ydtech.modules.order.entity.api.pingan.constants.RequestUrl;
-import com.ydtech.modules.order.entity.api.pingan.request.PingAnBaseRequest;
-import com.ydtech.modules.order.entity.api.pingan.response.PingAnBaseResponse;
-import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
-import com.ydtech.modules.order.utils.InsuranceLog;
-import com.ydtech.modules.order.utils.PingAnRSAUtils;
-import com.ydtech.modules.order.utils.SignatureUtils;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.order.entity.api.pingan.request.CarConfirmRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.IndexRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.SearchPAVehicleListRequest;
+import com.ydtech.modules.order.entity.api.pingan.response.CarConfirmResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.IndexResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import lombok.RequiredArgsConstructor;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.Map;
+import java.util.List;
 
 @Component
 @RequiredArgsConstructor
@@ -35,6 +24,7 @@ public class PinganRequestApiComponents {
 
     private final PingAnApiConfigurationProperties properties;
 
+
     /**
      * 加密请求
      *
@@ -78,7 +68,38 @@ public class PinganRequestApiComponents {
 //    }
 
 
+    /**
+     * 标的信息
+     * @param indexRequest
+     * @return
+     */
+    public IndexResponse index(IndexRequest indexRequest) {
+        return new IndexResponse();
+    }
+
+    /**
+     * 平安车型搜索接口
+     *
+     * @param searchPAVehicleListRequest 平安车型请求参数
+     * @param carInfoVo                  晋掌柜车型
+     * @return 平安车型
+     */
+    public SearchPAVehicleListResponse.ModelsDto searchPAVehicle(SearchPAVehicleListRequest searchPAVehicleListRequest,
+                                                                 CarInfoVo carInfoVo) {
+        SearchPAVehicleListResponse searchPAVehicleListResponse = new SearchPAVehicleListResponse();
+        List<SearchPAVehicleListResponse.ModelsDto> models = searchPAVehicleListResponse.getModels();
+        return new CarModelsFilterUtils<SearchPAVehicleListResponse.ModelsDto>().to(models, carInfoVo);
+    }
 
+    /**
+     * 车辆确认接口
+     *
+     * @param carConfirmRequest
+     * @return
+     */
+    public CarConfirmResponse carConfirm(CarConfirmRequest carConfirmRequest) {
+        return new CarConfirmResponse();
+    }
 
 
 }

+ 63 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/CarConfirmRequest.java

@@ -1,6 +1,11 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -20,6 +25,9 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     private String isInternetBusiness;
 
+    /**
+     *  车辆信息
+     */
     private VehicleDTO vehicle;
 
     private RegisterDTO register;
@@ -56,6 +64,22 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     private String developmentStage;
 
+    public CarConfirmRequest(PingAnConfigureParameters parameters, BaseQuoteInfoVo quoteInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
+        this.setUserId(parameters.getUserId());
+        CarInfoVo carInfo = quoteInfo.getCarInfo();
+//        this.vehicle = new VehicleDTO(carInfo, modelsDto);
+
+        // 车主
+        CustomerInfoVo ownerInfo = quoteInfo.getOwnerInfo();
+        // 投保人信息
+        CustomerInfoVo policyHolderInfo = quoteInfo.getPolicyHolderInfo();
+        // 被保人信息
+        CustomerInfoVo insuredPersonInfo = quoteInfo.getInsuredPersonInfo();
+
+
+
+    }
+
     @Data
     public static class VehicleDTO implements Serializable {
 
@@ -69,7 +93,13 @@ public class CarConfirmRequest extends PingAnBaseRequest {
         private String vehicleStyleUniqueId;
         private String autoModelName;
         private String seats;
+        /**
+         * 整备质量(吨)
+         */
         private String wholeWeight;
+        /**
+         * 核定载质量(吨)
+         */
         private String tonNumber;
         private String exhaustMeasure;
         private String power;
@@ -87,6 +117,39 @@ public class CarConfirmRequest extends PingAnBaseRequest {
         private String vehicleCodeForShangHai;
         private String specialCarLicense;
 
+//        public VehicleDTO(CarInfoVo carInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
+//            this.registerDate = carInfo.getRegisterDate();
+//            this.frameNo = carInfo.getFrameNo();
+//            this.engineNo = carInfo.getEngineNo();
+//
+////            this.modelCode = modelsDto.getmod;
+//            this.paModelCode = modelsDto.getPaModelCode();
+//            this.modelIndex = modelsDto.getModelIndex();
+////            this.vehicleStyleUniqueId = vehicleStyleUniqueId;
+//            this.autoModelName = modelsDto.getModelName();
+//            this.seats = carInfo.getSeatCount();
+//
+//            this.wholeWeight = String.valueOf(Float.parseFloat(carInfo.getCompleteKerbMass()) / 1000);
+//            this.tonNumber = tonNumber;
+//
+//            this.exhaustMeasure = modelsDto.getExhaustMeasure();
+////            this.power = modelsDto.get;
+//            this.vehicleCertiType = vehicleCertiType;
+//            this.vehicleCertiNo = vehicleCertiNo;
+//            this.vehicleCertiDate = vehicleCertiDate;
+//            this.invoiceDate = invoiceDate;
+//            this.useAttribute = useAttribute;
+//            this.useAttributDetailCode = useAttributDetailCode;
+//            this.ownAttribute = ownAttribute;
+//            this.offerLastPolicyFlag = offerLastPolicyFlag;
+//            this.isOfferLocalUseProof = isOfferLocalUseProof;
+//            this.shanghaiVehicleType = shanghaiVehicleType;
+//            this.isNewEnergyVehicle = isNewEnergyVehicle;
+//            this.vehicleCodeForShangHai = vehicleCodeForShangHai;
+//            this.specialCarLicense = specialCarLicense;
+//        }
+
+
     }
 
 

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/IndexRequest.java

@@ -1,5 +1,7 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -38,6 +40,15 @@ public class IndexRequest extends PingAnBaseRequest {
 
     private boolean isAllowRepeat;
 
+    public IndexRequest(PingAnConfigureParameters parameters, CarInfoVo carInfoVo) {
+        this.setUserId(parameters.getUserId());
+        this.cityCode = parameters.getCityCode();
+        this.inputBy = parameters.getInputBy();
+        this.saleCode = parameters.getSaleCode();
+        this.vehicle = new VehicleDTO(carInfoVo);
+        this.isAllowRepeat = false;
+    }
+
     @Data
     public static class VehicleDTO implements Serializable {
 
@@ -53,6 +64,12 @@ public class IndexRequest extends PingAnBaseRequest {
          */
         private String frameNo;
 
+
+        public VehicleDTO(CarInfoVo carInfoVo) {
+            this.licenseNo = carInfoVo.getLicenseNo();
+            this.frameNo = carInfoVo.getFrameNo();
+        }
+
     }
 
     @Data

+ 9 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SearchPAVehicleListRequest.java

@@ -1,8 +1,10 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 
 /**
@@ -21,4 +23,11 @@ public class SearchPAVehicleListRequest extends PingAnBaseRequest {
      */
     private String keyword;
 
+    public SearchPAVehicleListRequest(String userId, String flowid, String keyword) {
+        this.setUserId(userId);
+        this.setFlowid(flowid);
+
+        this.keyword = keyword;
+    }
+
 }

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/IndexResponse.java

@@ -4,6 +4,7 @@ package com.ydtech.modules.order.entity.api.pingan.response;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.List;
@@ -16,6 +17,7 @@ import java.util.List;
 @AllArgsConstructor
 @EqualsAndHashCode(callSuper = true)
 @Data
+@NoArgsConstructor
 public class IndexResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = 6550972601202599801L;

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PingAnBaseResponse.java

@@ -13,4 +13,9 @@ public class PingAnBaseResponse implements Serializable {
 
     private String resultCode;
 
+    /**
+     * 流程ID
+     */
+    private String flowid;
+
 }

+ 12 - 1
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/SearchPAVehicleListResponse.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.order.entity.api.pingan.response;
 
+import com.ydtech.modules.order.entity.filter.CarModelsFilter;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.List;
 
 
@@ -26,7 +28,7 @@ public class SearchPAVehicleListResponse extends PingAnBaseResponse {
     @AllArgsConstructor
     @NoArgsConstructor
     @Data
-    public static class ModelsDto {
+    public static class ModelsDto implements Serializable, CarModelsFilter  {
 
         /**
          * 车型编码索引
@@ -106,6 +108,15 @@ public class SearchPAVehicleListResponse extends PingAnBaseResponse {
          */
         private String vehicleType;
 
+        @Override
+        public String getCarYear() {
+            return this.marketDate;
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return this.price;
+        }
     }
 
 }

+ 19 - 1
src/main/java/com/ydtech/modules/order/entity/config/PingAnConfigureParameters.java

@@ -13,7 +13,25 @@ import lombok.Data;
 @Data
 public class PingAnConfigureParameters implements ConfigureParameters {
 
-
+    /**
+     * 合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+     */
+    private String userId;
+
+    /**
+     * 由平安提供数据字段
+     */
+    private String cityCode;
+
+    /**
+     * 平安好伙伴外网录单账号
+     */
+    private String inputBy;
+
+    /**
+     * 车商编码/合作网点编码
+     */
+    private String saleCode;
 
 
 }

+ 1 - 4
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -123,11 +123,8 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         // 2 车型查询接口
         CarInfoVo carInfo = quoteInfoVo.getCarInfo();
         VehicleTypeQueryRequest vehicleTypeQueryRequest = new VehicleTypeQueryRequest(parameters, carInfo.getModelcname(), orderNo);
-        VehicleTypeQueryResponse vehicleTypeQueryResponse = boHaiRequestApiComponent.vehicleTypeQuery(vehicleTypeQueryRequest,
-                parameters.getSysSourceCode());
-        List<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO> vehicleModels = vehicleTypeQueryResponse.getData().getVehicleModels();
         VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleModelsDTO =
-                new CarModelsFilterUtils<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO>().to(vehicleModels, quoteInfoVo.getCarInfo());
+                boHaiRequestApiComponent.vehicleTypeQuery(vehicleTypeQueryRequest, parameters.getSysSourceCode(), carInfo);
 
         // 3 车辆确认接口
         // 车主信息

+ 174 - 59
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -2,12 +2,15 @@ package com.ydtech.modules.order.service.impl;
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.components.OrderComponents;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.constants.enums.dict.insurance.NatureOfVehicleUse;
@@ -15,17 +18,17 @@ import com.ydtech.constants.sys.SystemConstant;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.RoleConstants;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.SysUserRole;
-import com.ydtech.modules.order.entity.po.InsOrdersCarInfo;
-import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
-import com.ydtech.modules.order.service.InsOrdersCarInfoService;
-import com.ydtech.modules.order.service.InsOrdersCarUserInfoService;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserRoleService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.ins.dao.InsFileMapper;
 import com.ydtech.modules.ins.model.InsOrdersExcel;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
 import com.ydtech.modules.ins.model.vo.*;
@@ -38,31 +41,28 @@ import com.ydtech.modules.order.convert.MapToYaExtendInfoDto;
 import com.ydtech.modules.order.dao.InsOrdersMapper;
 import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.bo.InsOrdersBo;
-import com.ydtech.modules.order.entity.BasePageResult;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.InsOrdersTrack;
 import com.ydtech.modules.order.entity.bo.UnderwritingRulesBo;
 import com.ydtech.modules.order.entity.crawler.response.CrawlerVerifyPaymentResponse;
 import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
 import com.ydtech.modules.order.entity.po.*;
-import com.ydtech.modules.order.entity.vo.OrderVo;
 import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.entity.vo.OrderVo;
 import com.ydtech.modules.order.entity.vo.ya.YaExtendInfoDto;
-import com.ydtech.modules.order.service.InsAreaCompanyService;
-import com.ydtech.modules.order.service.InsOrdersService;
-import com.ydtech.modules.order.service.InsOrdersTrackService;
-import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.order.service.*;
+import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.utils.SnowFlakeUtil;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -70,8 +70,11 @@ import org.springframework.util.ObjectUtils;
 import javax.validation.constraints.NotBlank;
 import java.io.File;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.ydtech.modules.order.constants.OrderCacheConstant.*;
+
 /**
  * @author wenkaisen
  * @description 针对表【ins_orders(保险订单表)】的数据库操作Service实现
@@ -80,10 +83,18 @@ import java.util.stream.Collectors;
 @Service
 public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders> implements InsOrdersService {
 
+    private final OrderComponents orderComponents;
+
     private final SysUserService sysUserService;
 
     private final SysUserRoleService sysUserRoleService;
 
+    private final EsmUserReferrerService esmUserReferrerService;
+
+    private final SysDeptService sysDeptService;
+
+    private final StringRedisTemplate redisTemplate;
+
     private final InsAreaCompanyService insAreaCompanyService;
 
     private final InsFeeAuditService insFeeAuditService;
@@ -94,50 +105,61 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     private final InsOrdersTrackService insOrdersTrackService;
 
-    @Autowired
-    InsOrdersCarUserInfoService insOrdersCarUserInfoService;
+    private final InsFileMapper insFileMapper;
 
     @Autowired
-    InsOrdersCarInfoService insOrdersCarInfoService;
+    private InsFeeOrderNewService insFeeOrderNewService;
 
     @Autowired
-    InsAreaCompanyRiskService insAreaCompanyRiskService;
+    private InsOrdersCarInfoService insOrdersCarInfoService;
+    
+    @Autowired
+    private InsOrdersCarUserInfoService insOrdersCarUserInfoService;
 
     @Autowired
-    InsAreaCompanyKindService insAreaCompanyKindService;
+    private InsOrdersCustomerService insOrdersCustomerService;
 
     @Autowired
-    InsAreaCompanyTaxArrearsService insAreaCompanyTaxArrearsService;
+    private InsOrdersKindService insOrdersKindService;
 
     @Autowired
-    InsAreaCompanyCarInfoService insAreaCompanyCarInfoService;
+    private InsOrdersRiskService insOrdersRiskService;
 
     @Autowired
-    InsAreaCompanyCarUserInfoService insAreaCompanyCarUserInfoService;
+    private InsOrdersTaxService insOrdersTaxService;
 
     @Autowired
-    InsOrdersTaxService insOrdersTaxService;
+    private InsAreaCompanyRiskService insAreaCompanyRiskService;
 
     @Autowired
-    InsOrdersService insOrdersService;
+    private InsAreaCompanyKindService insAreaCompanyKindService;
+    
+
 
     @Value("${upload.file.path}")
     private String uploadFilePath;
 
-    public InsOrdersServiceImpl(SysUserService sysUserService,
+    public InsOrdersServiceImpl(OrderComponents orderComponents, SysUserService sysUserService,
                                 SysUserRoleService sysUserRoleService,
-                                @Lazy InsAreaCompanyService insAreaCompanyService,
+                                EsmUserReferrerService esmUserReferrerService, SysDeptService sysDeptService,
+                                StringRedisTemplate redisTemplate, @Lazy InsAreaCompanyService insAreaCompanyService,
                                 PtlAgreementService ptlAgreementService,
                                 @Lazy FeeRuleSchemeServiceImpl feeRuleSchemeService,
-                                InsFeeAuditService insFeeAuditService,
-                                InsOrdersTrackService insOrdersTrackService) {
+                                InsFeeAuditService insFeeAuditService, InsOrdersTrackService insOrdersTrackService,
+                                InsFileMapper insFileMapper) {
+
+        this.orderComponents = orderComponents;
         this.sysUserService = sysUserService;
         this.sysUserRoleService = sysUserRoleService;
+        this.esmUserReferrerService = esmUserReferrerService;
+        this.sysDeptService = sysDeptService;
+        this.redisTemplate = redisTemplate;
         this.insAreaCompanyService = insAreaCompanyService;
         this.ptlAgreementService = ptlAgreementService;
         this.feeRuleSchemeService = feeRuleSchemeService;
         this.insFeeAuditService = insFeeAuditService;
         this.insOrdersTrackService = insOrdersTrackService;
+        this.insFileMapper = insFileMapper;
     }
 
 
@@ -160,6 +182,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             return;
         }
 
+        String orderStatus = insAreaCompany.getOrderstatus();
+
         if (!ObjectUtils.isEmpty(insAreaCompany)) {
             InsOrders insOrders = getById(insAreaCompany.getOrderno());
             String companyStatus = "";
@@ -211,6 +235,90 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return insOrders;
     }
 
+    /**
+     * @param userId      当前登录人id
+     * @param quoteInfoVo 报价信息
+     * @return
+     */
+    @Override
+    public InsOrders generateOrder(String userId, BaseQuoteInfoVo quoteInfoVo) {
+        String realUserId = userId;//实际跟单业务人默认登录人
+        boolean daikeFlag = false;//是否代客录单业务
+        //添加出单员报价的逻辑,
+        boolean isCdy = false;//是否出单员标志
+        if (StringUtils.isNotEmpty(userId)) {
+            SysUserRole userRole = sysUserRoleService.selectByUserId(userId);
+            if (19 == userRole.getRoleId()) {
+                isCdy = true;
+            }
+        }
+        if (isCdy) {
+            //如果是出单员  获取最终实际业务员
+            SysUser user = sysUserService.getById(realUserId);
+            realUserId = user.getOperatorCode();
+        } else {
+            //如果传递的业务归属人且与登录人不一致,则是代客录单业务
+            if (StringUtils.isNotEmpty(quoteInfoVo.getUserId()) && !userId.equals(quoteInfoVo.getUserId())) {
+                //实际跟单业务人变更为手工选择的人
+                realUserId = quoteInfoVo.getUserId();
+                daikeFlag = true;
+            }
+        }
+
+        // 1. 验证订单参数
+        orderComponents.checkEmpty(quoteInfoVo);
+        SysUser user = sysUserService.getById(realUserId);
+        SysDept dept = sysDeptService.getById(user.getDeptId());
+        // 2 构造订单
+        InsOrders insOrders = new InsOrders(user, dept, quoteInfoVo);
+        if (daikeFlag) {//当时代客录单业务时,才需要赋值该字段
+            insOrders.setOperatorid(userId);//赋值代客录单操作人为登录人
+        }
+        if (isCdy) {//赋值出单员  操作人为登录人
+            insOrders.setOperatorid(userId);
+        }
+        InsOrders insOrders1 = baseMapper.selectById(quoteInfoVo.getOrderNo());
+
+        //需要赋值代录单人ID
+
+        if (ObjectUtils.isEmpty(insOrders1)) {
+            insOrders1 = insOrders;
+        }
+
+        if (!quoteInfoVo.getCarInfo().getLicenseNo().equals(insOrders1.getLicenseno())) {
+            throw new SystemException("1001", "车牌与此订单不符,请重新录单");
+        }
+
+        // 3 订单操作
+        if (!realUserId.equals(insOrders1.getUserid()) || StringUtils.isEmpty(quoteInfoVo.getOrderNo())) {
+            // 存入订单
+            String orderno = IdGenerate.nextId();
+            insOrders.setOrderno(orderno);
+            // 将报价号返回
+            long l = new SnowFlakeUtil().nextId();
+            insOrders.setQuoteno(String.valueOf(l));
+            boolean save = this.saveAndTrajectories(insOrders);
+            if (!save) {
+                throw new SystemException("订单生成失败");
+            }
+
+        } else {
+            // 修改订单
+            insOrders.setOrderno(quoteInfoVo.getOrderNo());
+            this.updateById(insOrders);
+        }
+        // 4 将报价信息存入redis 中
+        String s = JSON.toJSONString(quoteInfoVo);
+        redisTemplate.opsForValue().set(QUOTE_INFO_KEY + insOrders.getOrderno(), s, QUOTE_INFO_KEY_TIME, TimeUnit.DAYS);
+
+        // 5 生成承包规则参数
+        UnderwritingRulesBo underwritingRulesBo = new UnderwritingRulesBo(quoteInfoVo);
+        String rules = JSON.toJSONString(underwritingRulesBo);
+        redisTemplate.opsForValue().set(QUOTE_RULES_KEY + insOrders.getOrderno(), rules, QUOTE_RULES_KEY_TIME,
+                TimeUnit.HOURS);
+
+        return insOrders;
+    }
 
     /**
      * 新的查询分页接口
@@ -228,7 +336,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         boolean isCdy = false;
         if (StringUtils.isNotEmpty(orderQueryVo.getUserId())) {
             SysUserRole userRole = sysUserRoleService.selectByUserId(orderQueryVo.getUserId());
-            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
+            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) {
+                //团队长可查询下面所有人员订单
                 isTeamLeader = true;
             }
             if (19 == userRole.getRoleId()) {
@@ -240,7 +349,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         Page<InsOrders> orderVoPage = baseMapper.queryPageOrder(page, orderQueryVo, isTeamLeader, isCdy);
         Long total = baseMapper.queryPageOrderCount(orderQueryVo, isTeamLeader, isCdy);
         orderVoPage.setTotal(total);
-        return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(), orderVoPage.getPages()
+        return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(),
+                orderVoPage.getPages()
                 , orderVoPage.getRecords());
     }
 
@@ -255,7 +365,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (StringUtils.isNotEmpty(orderQueryVo.getUserId())) {
             SysUserRole userRole = sysUserRoleService.selectByUserId(orderQueryVo.getUserId());
 
-            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
+            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) {
+                //团队长可查询下面所有人员订单
                 isTeamLeader = true;
             }
 
@@ -279,11 +390,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
 
         if (isCdy) {//如果是出单员查询时,只查自己的  与代客录单一致,查operatorid (手机前端userid传过来是出单用户,直接用该字段查询查operatorid)
-            wrapper.eq(StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getOperatorid,
-                    orderQueryVo.getUserId());
+            wrapper.eq(StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getOperatorid, orderQueryVo.getUserId());
         } else {
-            wrapper.eq(!isTeamLeader && StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getUserid,
-                    orderQueryVo.getUserId());
+            wrapper.eq(!isTeamLeader && StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getUserid, orderQueryVo.getUserId());
         }
 
         Page<InsOrders> page = new Page<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize());
@@ -291,8 +400,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (StringUtils.isNotEmpty(orderQueryVo.getCompanyId())) {
             List<InsAreaCompany> list = insAreaCompanyService.query().select("DISTINCT orderno").eq("company_id",
                     orderQueryVo.getCompanyId()).list();
-            List<String> collect =
-                    list.stream().map(InsAreaCompany::getOrderno).distinct().collect(Collectors.toList());
+            List<String> collect = list.stream().map(InsAreaCompany::getOrderno).distinct().collect(Collectors.toList());
             if (!collect.isEmpty()) {
                 wrapper.in(InsOrders::getOrderno, collect);
             }
@@ -308,8 +416,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
 
         if (StringUtils.isNotEmpty(orderQueryVo.getAuditStatus()) && orderQueryVo.getAuditStatus().equals("0")) {
-            List<InsFeeAudit> list =
-                    insFeeAuditService.query().select("DISTINCT orderno").eq("auditstatus", "1").list();
+            List<InsFeeAudit> list = insFeeAuditService.query().select("DISTINCT orderno").eq("auditstatus", "1").list();
             List<String> collect = list.stream().map(InsFeeAudit::getOrderno).distinct().collect(Collectors.toList());
 
             if (!collect.isEmpty()) {
@@ -390,12 +497,24 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             //非车
             if (!ObjectUtils.isEmpty(insOrdersExcel.getCrossInsurance())) {
-                List<DrivingInsuranceDto> drivingInsuranceDtos =
-                        insOrdersExcel.getCrossInsurance().toJavaList(DrivingInsuranceDto.class);
-                if (!drivingInsuranceDtos.isEmpty()) {
-                    String policyNumber = drivingInsuranceDtos.get(0).getPolicyNumber();
-                    insOrdersExcel.setJyPolicyno(policyNumber);
+
+                if(String.valueOf(PtlApiType.PTL_API_2.getCode()).equals(insOrdersExcel.getApiType())){
+                    List<CrawlerVerifyPaymentResponse.DrivingInsurancesDTO> drivingInsurancesDTOS =
+                            insOrdersExcel.getCrossInsurance().toJavaList(CrawlerVerifyPaymentResponse.DrivingInsurancesDTO.class);
+                    if (!drivingInsurancesDTOS.isEmpty()) {
+                        String policyNumber = drivingInsurancesDTOS.get(0).getPolicy();
+                        insOrdersExcel.setJyPolicyno(policyNumber);
+                    }
+                }else {
+                    List<DrivingInsuranceDto> drivingInsuranceDtos =
+                            insOrdersExcel.getCrossInsurance().toJavaList(DrivingInsuranceDto.class);
+                    if (!drivingInsuranceDtos.isEmpty()) {
+                        String policyNumber = drivingInsuranceDtos.get(0).getPolicyNumber();
+                        insOrdersExcel.setJyPolicyno(policyNumber);
+                    }
                 }
+
+
             }
 
             // 设置险种信息
@@ -431,8 +550,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class, insOrdersExcels));
         } else {
             if (folder.mkdirs()) {
-                return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class,
-                        insOrdersExcels));
+                return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class, insOrdersExcels));
             } else {
                 throw new SystemException("文件导出失败");
             }
@@ -516,6 +634,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
         //新增费用明细信息
 //        QueryOrderFeeVo queryOrderFeeVo = feeRuleSchemeService.queryFeeOrderInfo(companyId);
+        //查询费用信息
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                .eq(InsFeeOrderNew::getInsOrderNo, companyId));
 //        orderAndAreaCompany.setOrderCommissionVo(queryOrderFeeVo.getOrderCommissionVo());
 //        orderAndAreaCompany.setAdjustFeeDescVo(queryOrderFeeVo.getAdjustFeeDescVo());
         boolean isShowOrderFee = false;
@@ -542,7 +663,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         //add 解决返回null页面错误  lig 2023-09-14
         if (null == orderAndAreaCompany.getExtendInfo()) orderAndAreaCompany.setExtendInfo("");
-        if (null == orderAndAreaCompany.getCrossInsurance()) orderAndAreaCompany.setCrossInsurance(JSON.parseArray("[]"));
+        if (null == orderAndAreaCompany.getCrossInsurance())
+            orderAndAreaCompany.setCrossInsurance(JSON.parseArray("[]"));
         if (null == orderAndAreaCompany.getKindinfo()) orderAndAreaCompany.setKindinfo(JSON.parseArray("[]"));
         if (null == orderAndAreaCompany.getFeeStatus()) orderAndAreaCompany.setFeeStatus("0");
 
@@ -553,6 +675,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     public InsOrdersEditingVo revise(String orderNo) {
         InsOrders insOrders = getById(orderNo);
+        List<InsAreaCompany> insAreaCompanyList =
+                insAreaCompanyService.lambdaQuery().eq(InsAreaCompany::getOrderno, orderNo).orderByDesc(InsAreaCompany::getCreatetime).list();
+        insOrders.setInsAreaCompanyList(insAreaCompanyList);
         InsOrdersEditingVo insOrdersEditingVo = new InsOrdersEditingVo();
 
 
@@ -766,7 +891,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         insOrdersTaxService.remove(new LambdaQueryWrapper<InsOrdersTax>().eq(InsOrdersTax::getOrderNo,insOrders.getOrderno()));
         insOrdersTaxService.saveOrUpdate(insOrdersTax);
 
-        insOrdersService.saveOrUpdate(insOrders);
+        this.saveOrUpdate(insOrders);
     }
 
 
@@ -800,17 +925,6 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
 
-    @Autowired
-    private InsOrdersCustomerService insOrdersCustomerService;
-
-    @Autowired
-    private InsOrdersKindService insOrdersKindService;
-
-    @Autowired
-    private InsOrdersRiskService insOrdersRiskService;
-
-    @Autowired
-    private InsOrdersTaxService InsOrdersTaxService;
 
     @Override
     @Transactional
@@ -888,7 +1002,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         // 3 车船税信息
         VehicleAndVesselTax vehicleAndVesselTax = insOrdersBo.getVehicleAndVesselTax();
         InsOrdersTax insOrdersTax = new InsOrdersTax(orderNo, vehicleAndVesselTax);
-        InsOrdersTaxService.save(insOrdersTax);
+        insOrdersTaxService.save(insOrdersTax);
         // 4 交强商业信息表
         List<KindInfoVo> kind = insOrdersBo.getKing();
         List<InsOrdersKind> kindList = InsOrdersKind.buildKindList(orderNo, kind);
@@ -901,6 +1015,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         SysUser sysUser = (SysUser) saSession.get(SaSession.USER);
         final InsOrdersTrack insOrdersTrack = new InsOrdersTrack(insOrders, sysUser.getId(), sysUser.getName());
         insOrdersTrackService.save(insOrdersTrack);
+        this.baseMapper.insert(insOrders);
         return true;
     }
 

+ 44 - 0
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -1,23 +1,67 @@
 package com.ydtech.modules.order.service.impl;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.components.pingan.PinganRequestApiComponents;
+import com.ydtech.modules.order.entity.api.pingan.request.CarConfirmRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.IndexRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.SearchPAVehicleListRequest;
+import com.ydtech.modules.order.entity.api.pingan.response.CarConfirmResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.IndexResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.bohai.BoHaiQuoteAccidentVo;
 import com.ydtech.modules.order.service.PingAnOrderApiService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 
 @Service
+@RequiredArgsConstructor
 public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
 
+    private final PinganRequestApiComponents pinganRequestApiComponents;
+
+    private final PtlAgreementAttributionService ptlAgreementAttributionService;
+
+    private final ConfigureParametersComponents configureParametersComponents;
+
+
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo) {
+        // 协议id获取配置实体
+        String agreementId = quoteVo.getAgreementId();
+        // 账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+        // 通过 协议id获取配置实体
+        PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
+                ptlAgreementAttribution);
+        // 车型查询
+        CarInfoVo carInfo = quoteInfo.getCarInfo();
+
+        // 1. 标的信息
+        IndexRequest indexRequest = new IndexRequest(parameters, carInfo);
+        IndexResponse indexResponse = pinganRequestApiComponents.index(indexRequest);
+        String flowid = indexResponse.getFlowid();
+
+
+        // 2. 车型查询
+        SearchPAVehicleListRequest searchPAVehicleListRequest = new SearchPAVehicleListRequest(parameters.getUserId(),
+                carInfo.getModelcname(), flowid);
+        SearchPAVehicleListResponse.ModelsDto modelsDto = pinganRequestApiComponents.searchPAVehicle(searchPAVehicleListRequest, carInfo);
 
+        // 2. 车辆信息确认
+        CarConfirmRequest carConfirmRequest = new CarConfirmRequest(parameters, quoteInfo, modelsDto);
+        CarConfirmResponse carConfirmResponse = pinganRequestApiComponents.carConfirm(carConfirmRequest);
 
 
         return null;

+ 7 - 0
src/main/java/com/ydtech/modules/ser/model/SerAnnualAuditOrder.java

@@ -81,6 +81,13 @@ public class SerAnnualAuditOrder implements Serializable {
     @ApiModelProperty(value = "服务价格")
     private Double servicePrice;
 
+    /**
+     * 订单状态
+     */
+    @TableField(value = "order_status")
+    @ApiModelProperty(value = "订单状态")
+    private String orderStatus;
+
     /**
      * 创建时间
      */

+ 7 - 0
src/main/java/com/ydtech/modules/ser/model/vo/SerAnnualAuditOrderQueryVo.java

@@ -78,6 +78,13 @@ public class SerAnnualAuditOrderQueryVo extends PageRequest implements Serializa
     @ApiModelProperty(value = "服务价格")
     private Double servicePrice;
 
+    /**
+     * 订单状态
+     */
+    @TableField(value = "order_status")
+    @ApiModelProperty(value = "订单状态")
+    private String orderStatus;
+
     /**
      * 创建时间
      */

+ 3 - 0
src/main/java/com/ydtech/modules/ser/service/impl/SerAnnualAuditOrderServiceImpl.java

@@ -25,6 +25,9 @@ public class SerAnnualAuditOrderServiceImpl implements SerAnnualAuditOrderServic
         serAnnualAuditOrder.setId(IdGenerate.nextId());
         LocalDateTime date = LocalDateTime.now();
         serAnnualAuditOrder.setCreateTime(date);
+        serAnnualAuditOrder.setTestPriceNotIncluded(150.00);
+        serAnnualAuditOrder.setServicePrice(150.00);
+        serAnnualAuditOrder.setOrderStatus("待支付");
         serAnnualAuditOrderMapper.insert(serAnnualAuditOrder);
         return HttpResult.ok("订单生成成功", serAnnualAuditOrder);
     }