Browse Source

修改区域编码获取

785834757 2 years ago
parent
commit
279414c355

+ 7 - 0
src/main/java/com/ydtech/modules/admin/model/SysArea.java

@@ -41,6 +41,12 @@ public class SysArea implements Serializable {
     @TableField(value = "upper_code")
     private String upperCode;
 
+    /**
+     * 地区层级
+     */
+    @TableField(value = "level")
+    private Integer level;
+
     /**
      * 是否有效
      */
@@ -55,6 +61,7 @@ public class SysArea implements Serializable {
         this.areaCode = sysArea.areaCode;
         this.areaCname = sysArea.areaCname;
         this.upperCode = sysArea.upperCode;
+        this.level = sysArea.level;
         this.validStatus = sysArea.validStatus;
     }
 

+ 30 - 0
src/main/java/com/ydtech/modules/admin/model/vo/PersonAreaVo.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.admin.model.vo;
+
+import com.ydtech.modules.admin.model.SysArea;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+@Data
+public class PersonAreaVo implements Serializable {
+
+    private static final long serialVersionUID = -8235445978142897003L;
+
+    //省
+    private Integer provinceCode;
+    private String provinceName;
+
+
+    //市
+    private Integer CityCode;
+    private String CityName;
+
+    //区
+    private Integer CountyCode;
+    private String CountyName;
+
+
+}

+ 20 - 0
src/main/java/com/ydtech/modules/admin/service/SysAreaService.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.admin.model.SysArea;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.model.vo.SysAreaVo;
 
 import java.util.List;
@@ -18,4 +19,23 @@ public interface SysAreaService extends IService<SysArea> {
      */
     List<SysAreaVo> querySysArea();
 
+    /**
+     * 按照level查询
+     */
+    List<SysArea> queryByLevel(Integer level);
+
+    /**
+     * 获取所有上级数据
+     * @param sysArea
+     * @return
+     */
+    List<SysArea> queryAllParent(SysArea sysArea);
+
+    /**
+     * 通过地址身份证号 获取省市区
+     * @param address
+     * @return
+     */
+    PersonAreaVo queryByAddress(String address, String idcard);
+
 }

+ 62 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysAreaServiceImpl.java

@@ -1,8 +1,10 @@
 package com.ydtech.modules.admin.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.admin.dao.SysAreaMapper;
 import com.ydtech.modules.admin.model.SysArea;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.model.vo.SysAreaVo;
 import com.ydtech.modules.admin.service.SysAreaService;
 import org.springframework.stereotype.Service;
@@ -30,8 +32,67 @@ public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea>
         return map.get("0");
     }
 
-}
+    @Override
+    public List<SysArea> queryByLevel(Integer level) {
+        return baseMapper.selectList(new LambdaQueryWrapper<SysArea>().eq(SysArea::getLevel, level));
+    }
 
+    //递归查询他的所有上级
+    @Override
+    public List<SysArea> queryAllParent(SysArea sysArea) {
+        List<SysArea> list = new ArrayList<>();
+        list.add(sysArea);
+        if (sysArea.getLevel() == 1) {
+            return list;
+        }
+        SysArea parent = baseMapper.selectOne(new LambdaQueryWrapper<SysArea>().eq(SysArea::getAreaCode, sysArea.getUpperCode()));
+        list.addAll(queryAllParent(parent));
+        return list;
+    }
 
+    //查询所有的上级
+    @Override
+    public PersonAreaVo queryByAddress(String address, String idcard) {
+        PersonAreaVo personAreaVo = new PersonAreaVo();
+        //获取县级全部区划数据
+        List<SysArea> sysAreaVos = this.queryByLevel(3);
+        //被保人 赛选出的地址条件
+        List<SysArea> collect = sysAreaVos.stream().filter(item -> address.contains(item.getAreaCname())).collect(Collectors.toList());
+        //截取身份证的省级代码
+        String provincesCode  = idcard.substring(0, 3);
+        //获取省级的区划
+        List<SysArea> provincesArea = collect.stream().filter(item -> item.getAreaCode().substring(0, 3).equals(provincesCode)).collect(Collectors.toList());
+        //如果查不出来默认使用赛选出的第一个
+        if(provincesArea.size() == 0){
+            provincesArea.add(collect.get(0));
+        }
+        List<SysArea> sysAreas = this.queryAllParent(provincesArea.get(0));
+        sysAreas.sort((o1, o2) -> o2.getLevel() - o1.getLevel());
+        //如果等于2 说明是直辖市
+        if(sysAreas.size() >= 2){
+            if(sysAreas.size() == 2){
+                personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
+                personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
+                personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
+                personAreaVo.setCityName(sysAreas.get(0).getAreaCname());
+                personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
+                personAreaVo.setCountyName(sysAreas.get(1).getAreaCname());
+            }else{
+                personAreaVo.setProvinceCode(Integer.valueOf(sysAreas.get(0).getAreaCode()));
+                personAreaVo.setProvinceName(sysAreas.get(0).getAreaCname());
+                personAreaVo.setCityCode(Integer.valueOf(sysAreas.get(1).getAreaCode()));
+                personAreaVo.setCityName(sysAreas.get(1).getAreaCname());
+                personAreaVo.setCountyCode(Integer.valueOf(sysAreas.get(2).getAreaCode()));
+                personAreaVo.setCountyName(sysAreas.get(2).getAreaCname());
+            }
+        }else{
+            personAreaVo.setProvinceCode(Integer.parseInt(idcard.substring(0,2) + "0000"));
+            personAreaVo.setProvinceCode(Integer.parseInt(idcard.substring(0,4) + "00"));
+            personAreaVo.setProvinceCode(Integer.parseInt(idcard.substring(0,6)));
+        }
+        return personAreaVo;
+    }
+
+}
 
 

+ 16 - 15
src/main/java/com/ydtech/modules/order/entity/api/dajia/request/ODR1008Request.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.api.dajia.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaBaseRequest;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
 import com.ydtech.modules.order.entity.api.dajia.constants.*;
@@ -400,7 +401,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
         }
     }
 
-    public ODR1008Request(String orderNo,String busiId, BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters,ODR2009Response odr2009Response){
+    public ODR1008Request(String orderNo, String busiId, BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters, ODR2009Response odr2009Response, PersonAreaVo policyHolderPersonArea,PersonAreaVo insuredPersonArea){
         super("TQBD", ServiceCode.ODR1008.getCode());
         if(Objects.isNull(body))
         {
@@ -410,9 +411,9 @@ public class ODR1008Request extends DaJiaBaseRequest {
         //设置车主信息
         setVehicleOwnerInfo(quoteInfoVo);
         //设置投保人信息
-        setApplicantInfo(quoteInfoVo);
+        setApplicantInfo(quoteInfoVo,policyHolderPersonArea);
         //设置被保人信息
-        setInsuredInfo(quoteInfoVo);
+        setInsuredInfo(quoteInfoVo,insuredPersonArea);
         //设置车辆信息
         setVehicleInfo(quoteInfoVo,odr2009Response);
         //设置业务归属信息
@@ -480,7 +481,7 @@ public class ODR1008Request extends DaJiaBaseRequest {
     }
 
     //设置投保人信息
-    public void setApplicantInfo(BaseQuoteInfoVo quoteInfoVo){
+    public void setApplicantInfo(BaseQuoteInfoVo quoteInfoVo,PersonAreaVo policyHolderPersonArea){
         BodyDTO.ApplicantInfoDTO applicantInfoDTO = new BodyDTO.ApplicantInfoDTO();
         //设置证件号码
         applicantInfoDTO.setApplicantCCertfCde(quoteInfoVo.getPolicyHolderInfo().getIdentifyNumber());
@@ -511,16 +512,16 @@ public class ODR1008Request extends DaJiaBaseRequest {
         //国籍
 //        applicantInfoDTO.set(1);
         //省市县
-        applicantInfoDTO.setApplicantProvince(140000);
-        applicantInfoDTO.setApplicantCity(140100);
-        applicantInfoDTO.setApplicantCounty(140109);
-        applicantInfoDTO.setApplicantSuffixAddr("前锋街道");
-        applicantInfoDTO.setApplicantZipCde("030024");
+        applicantInfoDTO.setApplicantProvince(policyHolderPersonArea.getProvinceCode());
+        applicantInfoDTO.setApplicantCity(policyHolderPersonArea.getCityCode());
+        applicantInfoDTO.setApplicantCounty(policyHolderPersonArea.getCountyCode());
+        applicantInfoDTO.setApplicantSuffixAddr(quoteInfoVo.getPolicyHolderInfo().getAddr());
+//        applicantInfoDTO.setApplicantZipCde("030024");
         this.body.setApplicantInfo(applicantInfoDTO);
     }
 
     //设置被保人信息
-    public void setInsuredInfo(BaseQuoteInfoVo quoteInfoVo){
+    public void setInsuredInfo(BaseQuoteInfoVo quoteInfoVo,PersonAreaVo insuredPersonArea){
         BodyDTO.InsuredInfoDTO insuredInfoDTO = new BodyDTO.InsuredInfoDTO();
         //设置证件号码
         insuredInfoDTO.setInsuredCertfCde(quoteInfoVo.getInsuredPersonInfo().getIdentifyNumber());
@@ -549,12 +550,12 @@ public class ODR1008Request extends DaJiaBaseRequest {
         //身份证失效日期
         insuredInfoDTO.setInsuredTExpiredDate(quoteInfoVo.getInsuredPersonInfo().getIdentifyValidEndDate());
         //省市县
-        insuredInfoDTO.setInsuredProvince(140000);
-        insuredInfoDTO.setInsuredCity(140100);
-        insuredInfoDTO.setInsuredCounty(140109);
-        insuredInfoDTO.setInsuredSuffixAddr("千峰街道");
+        insuredInfoDTO.setInsuredProvince(insuredPersonArea.getProvinceCode());
+        insuredInfoDTO.setInsuredCity(insuredPersonArea.getCityCode());
+        insuredInfoDTO.setInsuredCounty(insuredPersonArea.getCountyCode());
+        insuredInfoDTO.setInsuredSuffixAddr(quoteInfoVo.getInsuredPersonInfo().getIdentifyValidEndDate());
         //邮编
-        insuredInfoDTO.setInsuredZipCde("030024");
+//        insuredInfoDTO.setInsuredZipCde("030024");
         this.body.setInsuredInfo(insuredInfoDTO);
     }
 

+ 35 - 4
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -7,6 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.SysArea;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
+import com.ydtech.modules.admin.model.vo.SysAreaVo;
+import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
@@ -71,6 +75,9 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
     @Autowired
     private InsTaskImagesService insTaskImagesService;
 
+    @Autowired
+    private SysAreaService sysAreaService;
+
     @Value("${upload.file.path}")
     private String uploadFilePath;
 
@@ -106,8 +113,9 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
      * @return
      * @throws Exception
      */
-    private ODR1008Response ConfirmationVehicleCustomerInformation(String orderNo, String busiId,BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters,ODR2009Response odr2009Request) throws Exception {
-        ODR1008Request odr1008Request = new ODR1008Request(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Request);
+    private ODR1008Response ConfirmationVehicleCustomerInformation(String orderNo, String busiId,BaseQuoteInfoVo quoteInfoVo, DaJiaConfigureParameters daJiaConfigureParameters,ODR2009Response odr2009Request,PersonAreaVo policyHolderPersonArea,PersonAreaVo insuredPersonArea) throws Exception {
+
+        ODR1008Request odr1008Request = new ODR1008Request(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Request,policyHolderPersonArea,insuredPersonArea);
         ODR1008Response odr1008Response = daJiaRequestApiComponents.carOrCustomInfoConfirm(odr1008Request);
         if(odr1008Response.getStatus().equals(Message.M0000.getCode())){
             //车辆与客户信息确认返回
@@ -130,6 +138,19 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
             DaJiaConfigureParameters daJiaConfigureParameters = new DaJiaConfigureParameters();
             configureParametersComponents.toEntity(daJiaConfigureParameters,t.getAgreementId());
             PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(t.getAgreementId());
+
+            //投保人区划信息
+            PersonAreaVo policyHolderPersonArea = sysAreaService.queryByAddress(quoteInfoVo.getPolicyHolderInfo().getAddr(), quoteInfoVo.getPolicyHolderInfo().getIdentifyNumber());
+
+            //被保人区划信息
+            PersonAreaVo insuredPersonArea = sysAreaService.queryByAddress(quoteInfoVo.getInsuredPersonInfo().getAddr(), quoteInfoVo.getInsuredPersonInfo().getIdentifyNumber());
+
+
+
+            //投保人 赛选出的地址条件
+//            List<SysArea> collect = sysAreaVos.stream().filter(item -> quoteInfoVo.getPolicyHolderInfo().getAddr().contains(item.getAreaCname())).collect(Collectors.toList());
+//            List<SysArea> sysAreas1 = sysAreaService.queryAllParent(collect1.get(0));
+
             // 1.获取业务订单号接口
             String orderNo = getOrderNo(daJiaConfigureParameters);
             //生成业务id  1008 1010 接口使用
@@ -140,7 +161,7 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
             ODR2009Response odr2009Response = daJiaRequestApiComponents.queryVehicleTypes(odr2009Request);
 
             // 3.车辆与客户信息确认
-            ODR1008Response odr1008Response = ConfirmationVehicleCustomerInformation(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Response);
+            ODR1008Response odr1008Response = ConfirmationVehicleCustomerInformation(orderNo,busiId,quoteInfoVo,daJiaConfigureParameters,odr2009Response,policyHolderPersonArea,insuredPersonArea);
             if(!odr1008Response.getStatus().equals(Message.M0000.getCode())){
                 throw new Exception("车辆与客户信息确认接口失败");
             }
@@ -169,6 +190,11 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
                 HttpResult<QuoteRespVo> quoteRespVoHttpResult = responseOrder(odr1009Response, quoteRespVo, ptlAgreementAttribution, orderNo, quoteInfoVo.getOrderNo(),busiId);
                 return quoteRespVoHttpResult;
             }else{
+                if(odr1009Response.getResult().getJqAppStatus().equals("0") && odr1009Response.getStatus().equals("0002")) {
+                    throw new Exception("报价失败,原因:"+odr1009Response.getResult().getJqAppStatusMessage());
+                }else if(odr1009Response.getResult().getSyAppStatus().equals("0") && odr1009Response.getStatus().equals("0002")) {
+                    throw new Exception("报价失败,原因:" + odr1009Response.getResult().getSyAppStatusMessage());
+                }
                 throw new Exception("报价失败");
             }
         }catch(Exception e){
@@ -380,8 +406,13 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
                     insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
                     return HttpResult.ok("核保成功");
                 }
+            }else{
+                if(odr1010Response.getResult().getJqAppStatus().equals("0") && odr1010Response.getStatus().equals("0003")){
+                    throw new RuntimeException("核保失败,原因:"+odr1010Response.getResult().getJqAppStatusMessage());
+                }else if(odr1010Response.getResult().getSyAppStatus().equals("0") && odr1010Response.getStatus().equals("0003")){
+                    throw new RuntimeException("核保失败,原因:"+odr1010Response.getResult().getSyAppStatusMessage());
+                }
             }
-//            return HttpResult.error("核保失败");
             throw new RuntimeException("核保失败");
         }catch(Exception e){
             throw new RuntimeException(e.getMessage());

+ 22 - 48
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -15,6 +15,8 @@ import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.constants.enums.dict.WhetherEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
+import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.esm.dao.EsmInsAttachInsureDetailsMapper;
 import com.ydtech.modules.esm.dao.EsmInsAttachInsureMapper;
 import com.ydtech.modules.esm.model.EsmInsAttachInsure;
@@ -135,6 +137,8 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
     private final VerificationCodeIdentification verificationCodeIdentification;
 
     private final  FeeRuleSchemeService feeRuleSchemeService;
+
+    private final SysAreaService sysAreaService;
     //==============================API 方式
     //
     public void gainVehicleModel(YcConfigureParameters ycConfigureParameters, CarInfoVo carInfo) {
@@ -1374,11 +1378,6 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         //投保人
         CustomerInfoVo applicant = yaQuoteInfoVo.getPolicyHolderInfo();
 
-        Map<String, String> ownerMap = null;
-        //被保人省市区
-        Map<String, String> insureMap = null;
-        Map<String, String> applicantMap = null;
-
         //车主省市区
         List<String> ownerProvinceData = owner.getProvinceData();
         //被保人省市区
@@ -1392,54 +1391,29 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             return;
         }
 
+        //车主地区信息
+        PersonAreaVo ownerPersonAreaVo = sysAreaService.queryByAddress(owner.getAddr(), owner.getIdentifyNumber());
+        //投保人地区信息
+        PersonAreaVo insuredPersonAreaVo = sysAreaService.queryByAddress(insured.getAddr(), insured.getIdentifyNumber());
+        //被保人地区信息
+        PersonAreaVo applicantPersonAreaVo = sysAreaService.queryByAddress(applicant.getAddr(), applicant.getIdentifyNumber());
 
-        if (CollUtil.isEmpty(ownerProvinceData)) {
-            ownerProvinceData = new ArrayList<>();
-            //处理地区 车主
-            ownerMap = gainRegionCode(owner.getAddr(), "车主");
-        }
-
-        if (CollUtil.isEmpty(insuredProvinceData)) {
-            insuredProvinceData = new ArrayList<>();
-            //处理地区 被保人
-            insureMap = gainRegionCode(insured.getAddr(), "被保人");
-        }
-
-        if (CollUtil.isEmpty(applicantProvinceData)) {
-            applicantProvinceData = new ArrayList<>();
-            //处理地区 投保人
-            applicantMap = gainRegionCode(applicant.getAddr(), "投保人");
-        }
-
-        StringBuffer sb = new StringBuffer();
-        if (null == ownerMap && CollUtil.isEmpty(ownerProvinceData)) {
-            sb.append("|永诚 - 车主地区自动解析失败,请手动填写。");
-        }
-        if (null == insureMap && CollUtil.isEmpty(insuredProvinceData)) {
-            sb.append("|永诚 - 被保人地区自动解析失败,请手动填写。");
-        }
-        if (null == applicantMap && CollUtil.isEmpty(applicantProvinceData)) {
-            sb.append("|永诚 - 投保人地区自动解析失败,请手动填写。");
-        }
-
-        if (StringUtils.isNotEmpty(sb)) throw new SystemException(sb.toString());
-
-        if (CollUtil.isNotEmpty(ownerMap)) {
-            ownerProvinceData.add(ownerMap.get("provinceCode"));
-            ownerProvinceData.add(ownerMap.get("cityCode"));
-            ownerProvinceData.add(ownerMap.get("areaCode"));
+        if (!Objects.isNull(ownerPersonAreaVo)) {
+            ownerProvinceData.add(ownerPersonAreaVo.getCountyCode().toString());
+            ownerProvinceData.add(ownerPersonAreaVo.getCityCode().toString());
+            ownerProvinceData.add(ownerPersonAreaVo.getProvinceCode().toString());
         }
 
-        if (CollUtil.isNotEmpty(insureMap)) {
-            insuredProvinceData.add(insureMap.get("provinceCode"));
-            insuredProvinceData.add(insureMap.get("cityCode"));
-            insuredProvinceData.add(insureMap.get("areaCode"));
+        if (!Objects.isNull(insuredPersonAreaVo)) {
+            insuredProvinceData.add(insuredPersonAreaVo.getCountyCode().toString());
+            insuredProvinceData.add(insuredPersonAreaVo.getCityCode().toString());
+            insuredProvinceData.add(insuredPersonAreaVo.getProvinceCode().toString());
         }
 
-        if (CollUtil.isNotEmpty(applicantMap)) {
-            applicantProvinceData.add(applicantMap.get("provinceCode"));
-            applicantProvinceData.add(applicantMap.get("cityCode"));
-            applicantProvinceData.add(applicantMap.get("areaCode"));
+        if (!Objects.isNull(applicantPersonAreaVo)) {
+            applicantProvinceData.add(applicantPersonAreaVo.getCountyCode().toString());
+            applicantProvinceData.add(applicantPersonAreaVo.getCityCode().toString());
+            applicantProvinceData.add(applicantPersonAreaVo.getProvinceCode().toString());
         }
 
         //构造参数