yaozhixue vor 1 Jahr
Ursprung
Commit
878e782629

BIN
1689189386840342530.jpeg


+ 1 - 1
src/main/java/com/zfire/jiasm/syncdata/download/order/InstallBusinessApi.java

@@ -76,7 +76,7 @@ public class InstallBusinessApi {
         // 提取待落本地表的数据
         lcls = itfTblAzAssignLcLsDownloadService.lambdaQuery()
                 .eq(ItfTblAzAssignLcLsDownload::getSynStatus, SynStatusEnum.UN_SYN.getCode())
-                // .eq(ItfTblAzAssignLcLsDownload::getSynReqId,4041)// 测试使用
+                // .eq(ItfTblAzAssignLcLsDownload::getSynReqId,4042)// 测试使用
                 .orderByAsc(ItfTblAzAssignLcLsDownload::getSynReqId)
                 .list();
 

+ 3 - 0
src/main/java/com/zfire/jiasm/syncdata/service/PublicService.java

@@ -104,4 +104,7 @@ public interface PublicService {
     // 获取安装工单对应的师傅信息
     Worker getInstallOrderWorker(Long azrenid);
 
+    // 安装工单的省市区对应关系
+    void installOrderSSQJ(OrderBase orderBase);
+
 }

+ 4 - 2
src/main/java/com/zfire/jiasm/syncdata/service/impl/OrderServiceImpl.java

@@ -107,7 +107,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderBaseMapper, OrderBase> im
         // 分销商城订单需要写日志表这里不再处理
 
         // 省市区单独处理
-        shPositionTopt(orderBase);
+        // shPositionTopt(orderBase);
+        publicService.installOrderSSQJ(orderBase);
         // 派工方式,新创建订单时 azren 名称不为空时为手动派工  (dispatch_flag派工方式 A=自动派工 B=手动派工)
         if (StringUtils.isNotEmpty(orderBase.getDispatchFlag())){
             orderBase.setDispatchFlag("B");
@@ -433,7 +434,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderBaseMapper, OrderBase> im
         setWebsit(item, orderBase);
 
         // 省市区单独处理
-        shPositionTopt(orderBase);
+        // shPositionTopt(orderBase);
+        publicService.installOrderSSQJ(orderBase);
         // 派工方式,新创建订单时 azren 名称不为空时为手动派工  (dispatch_flag派工方式 A=自动派工 B=手动派工)
         if (StringUtils.isNotEmpty(orderBase.getDispatchFlag())){
             orderBase.setDispatchFlag("B");

+ 269 - 0
src/main/java/com/zfire/jiasm/syncdata/service/impl/PublicServiceImpl.java

@@ -15,6 +15,7 @@ import com.zfire.jiasm.syncdata.plus.entity.*;
 import com.zfire.jiasm.syncdata.plus.service.*;
 import com.zfire.jiasm.syncdata.response.*;
 import com.zfire.jiasm.syncdata.service.PublicService;
+import com.zfire.jiasm.syncdata.test;
 import com.zfire.jiasm.syncdata.utils.MyBeanUtils;
 import com.zfire.jiasm.syncdata.utils.RedisUtil;
 import com.zfire.jiasm.syncdata.utils.ResponseHelper;
@@ -22,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -83,6 +85,14 @@ public class PublicServiceImpl implements PublicService {
     RedisUtil redis;
     @Resource
     ItfTblWangdianWxgDownloadService itfTblWangdianWxgDownloadService;
+    @Resource
+    StreetService streetService;
+    @Resource
+    AreaService areaService;
+    @Resource
+    BrandLbsRelateService brandLbsRelateService;
+    @Autowired
+    LbsAmapService lbsAmapService;
 
 
     private static String ALISMS_RESERVE = "尊敬的客户,您好!师傅上门时间为%s,服务网点电话:%s,如本次上门时间与您的安排有冲突,请拨打服务网点电话联系,我们将竭诚为您服务!";
@@ -1148,6 +1158,265 @@ public class PublicServiceImpl implements PublicService {
         return wos;
     }
 
+
+    // 安装工单的省市区对应关系
+    @Override
+    public void installOrderSSQJ(OrderBase orderBase){
+        // 先查 lbs_amap表 1省,2市,3区,4街道 找到直接返回
+        Integer flag = getLbsAmap(orderBase);
+        if (flag>3){
+            return;
+        }
+
+        // 再查 BrandLbsRelate 表
+        getBrandLbsRelate(orderBase,flag);
+
+        // 根据地址设置经纬度
+        setLocationByAddress(orderBase);
+    }
+
+    private void setLocationByAddress(OrderBase orderBase) {
+        if (StringUtils.isEmpty(orderBase.getLng()) || StringUtils.isEmpty(orderBase.getLat())) {
+            String add = "";
+            if (StringUtils.isNotEmpty(orderBase.getProvince())) {
+                add = add + orderBase.getProvince();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getCity())) {
+                add = add + orderBase.getCity();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getArea())) {
+                add = add + orderBase.getArea();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getStreet())) {
+                add = add + orderBase.getStreet();
+            }
+            if (StringUtils.isEmpty(add)) {
+                return;
+            }
+            String lngLat = getLocationByAddress(add);
+            if (StringUtils.isEmpty(lngLat)) {
+                return;
+            }
+            List<String> result = Arrays.asList(lngLat.split(","));
+
+            orderBase.setLng(result.get(0));
+            orderBase.setLat(result.get(1));
+        }
+    }
+
+    private void getBrandLbsRelate(OrderBase orderBase, Integer flag) {
+        // 格力总部的省市区为必填,可能无街道
+        if (StringUtils.isNotEmpty(orderBase.getStreet())){
+            // 提取格力总部的省市区街道信息  这里带上街道条件,可能查不到
+            Street street = streetService.lambdaQuery()
+                    .eq(Street::getStatus, 1)
+                    .eq(Street::getProvince, orderBase.getProvince())
+                    .eq(Street::getCity, orderBase.getCity())
+                    .eq(Street::getArea, orderBase.getArea())
+                    .eq(Street::getStreet, orderBase.getStreet())
+                    .last("limit 1")
+                    .one();
+            // 对应出平台的省市区街道信息 无对应关系时依总部的为准
+            if (street!=null){
+                getPosition(orderBase, street, flag);
+            } else {
+                // 总部区必选项 按区再次查询
+                List<Area> area = areaService.lambdaQuery()
+                        .eq(Area::getProvince, orderBase.getProvince())
+                        .eq(Area::getCity, orderBase.getCity())
+                        .eq(Area::getArea, orderBase.getArea()).list();
+
+                Street st = new Street();
+                if (CollectionUtils.isNotEmpty(area)){
+                    BeanUtils.copyProperties(area.get(0),st);
+                    getPosition(orderBase, st, flag);
+                    orderBase.setStreet("");
+                }
+            }
+        } else {
+            List<Area> area = areaService.lambdaQuery()
+                    .eq(Area::getProvince, orderBase.getProvince())
+                    .eq(Area::getCity, orderBase.getCity())
+                    .eq(Area::getArea, orderBase.getArea()).list();
+            Street st = new Street();
+            if (CollectionUtils.isNotEmpty(area)){
+                BeanUtils.copyProperties(area.get(0),st);
+                getPosition(orderBase, st, flag);
+                orderBase.setStreet("");
+            }
+        }
+
+
+        // getLocationByAddress
+        if (StringUtils.isEmpty(orderBase.getLng()) || StringUtils.isEmpty(orderBase.getLat())){
+            String add = "";
+            if (StringUtils.isNotEmpty(orderBase.getProvince())){
+                add = add + orderBase.getProvince();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getCity())){
+                add = add + orderBase.getCity();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getArea())){
+                add = add + orderBase.getArea();
+            }
+            if (StringUtils.isNotEmpty(orderBase.getStreet())){
+                add = add + orderBase.getStreet();
+            }
+            if (StringUtils.isEmpty(add)){
+                return;
+            }
+            String lngLat = getLocationByAddress(add);
+            if (StringUtils.isEmpty(lngLat)){
+                return;
+            }
+            List<String> result = Arrays.asList(lngLat.split(","));
+
+            orderBase.setLng(result.get(0));
+            orderBase.setLat(result.get(1));
+        }
+    }
+
+    // 1省,2市,3区,4街道
+    private Integer getLbsAmap(OrderBase orderBase){
+        // 先查 lbs_amap表
+        LbsAmap lbsAmap = lbsAmapService.lambdaQuery()
+                .eq(LbsAmap::getName,orderBase.getProvince())
+                .eq(LbsAmap::getLevel,"province")
+                .last("limit 1").one();
+        if (lbsAmap == null){
+            return 0;
+        }
+        //省
+        orderBase.setProvinceId(lbsAmap.getProvinceId());
+        orderBase.setProvince(lbsAmap.getProvinceName());
+
+        lbsAmap = lbsAmapService.lambdaQuery()
+                .eq(LbsAmap::getProvinceId,lbsAmap.getProvinceId())
+                .eq(LbsAmap::getName,orderBase.getCity())
+                .eq(LbsAmap::getLevel,"city")
+                .last("limit 1").one();
+        if (lbsAmap == null){
+            return 1;
+        }
+        //市
+        orderBase.setCityId(lbsAmap.getCityId());
+        orderBase.setCity(lbsAmap.getCityName());
+
+        lbsAmap = lbsAmapService.lambdaQuery()
+                .eq(LbsAmap::getProvinceId,lbsAmap.getProvinceId())
+                .eq(LbsAmap::getCityId,lbsAmap.getCityId())
+                .eq(LbsAmap::getName,orderBase.getArea())
+                .eq(LbsAmap::getLevel,"district")
+                .last("limit 1").one();
+        if (lbsAmap == null){
+            return 2;
+        }
+        //区
+        orderBase.setAreaId(lbsAmap.getAreaId());
+        orderBase.setArea(lbsAmap.getAreaName());
+
+        lbsAmap = lbsAmapService.lambdaQuery()
+                .eq(LbsAmap::getProvinceId,lbsAmap.getProvinceId())
+                .eq(LbsAmap::getCityId,lbsAmap.getCityId())
+                .eq(LbsAmap::getAreaId,lbsAmap.getAreaId())
+                .eq(LbsAmap::getName,orderBase.getStreet())
+                .eq(LbsAmap::getLevel,"street")
+                .last("limit 1").one();
+        if (lbsAmap == null){
+            return 3;
+        }
+        //街道
+        orderBase.setStreetId(lbsAmap.getLbsId());
+        orderBase.setStreet(lbsAmap.getName());
+
+        return 4;
+    }
+
+    private void getPosition(OrderBase orderBase, Street street, Integer flag) {
+        //省市区,有时无街道,这里不提取街道信息
+        List<BrandLbsRelate> br = brandLbsRelateService.lambdaQuery()
+                .eq(BrandLbsRelate::getDel,0)
+                .eq(BrandLbsRelate::getProvinceId, street.getProvinceId())
+                .eq(BrandLbsRelate::getCityId, street.getCityId())
+                .eq(BrandLbsRelate::getAreaId, street.getAreaId())
+                .isNotNull(BrandLbsRelate::getLbsProvinceId)
+                .isNotNull(BrandLbsRelate::getLbsCityId)
+                .isNotNull(BrandLbsRelate::getLbsDistrictId).list();
+
+        if (br !=null && br.size()>0){
+            if (flag==0){
+                //省
+                orderBase.setProvinceId(br.get(0).getLbsProvinceId());
+                orderBase.setProvince(br.get(0).getLbsProvinceName());
+                //市
+                orderBase.setCityId(br.get(0).getLbsCityId());
+                orderBase.setCity(br.get(0).getLbsCityName());
+                //区
+                orderBase.setAreaId(br.get(0).getLbsDistrictId());
+                orderBase.setArea(br.get(0).getLbsDistrictName());
+            } else if (flag==1){
+                //市
+                orderBase.setCityId(br.get(0).getLbsCityId());
+                orderBase.setCity(br.get(0).getLbsCityName());
+                //区
+                orderBase.setAreaId(br.get(0).getLbsDistrictId());
+                orderBase.setArea(br.get(0).getLbsDistrictName());
+            } else if (flag==2){
+                //区
+                orderBase.setAreaId(br.get(0).getLbsDistrictId());
+                orderBase.setArea(br.get(0).getLbsDistrictName());
+            }
+        } else {
+            // 找不到依总部的为准
+            if (StringUtils.isEmpty(orderBase.getProvinceId())){
+                orderBase.setProvinceId(street.getProvinceId());
+            }
+            if (StringUtils.isEmpty(orderBase.getCityId())){
+                orderBase.setCityId(street.getCityId());
+            }
+            if (StringUtils.isEmpty(orderBase.getAreaId())){
+                orderBase.setAreaId(street.getAreaId());
+            }
+            if (StringUtils.isEmpty(orderBase.getStreetId())){
+                orderBase.setStreetId(street.getStreetId());
+            }
+            if (StringUtils.isEmpty(orderBase.getStreet()) &&
+                    StringUtils.isEmpty(street.getStreet())){
+                orderBase.setStreet(street.getStreet());
+            }
+            return;
+        }
+
+        // 提取街道信息
+        if (StringUtils.isNotEmpty(orderBase.getStreet())){
+            //街道单独处理
+            br = brandLbsRelateService.lambdaQuery()
+                    .eq(BrandLbsRelate::getDel,0)
+                    .eq(BrandLbsRelate::getProvinceId, street.getProvinceId())
+                    .eq(BrandLbsRelate::getCityId, street.getCityId())
+                    .eq(BrandLbsRelate::getAreaId, street.getAreaId())
+                    .eq(BrandLbsRelate::getStreetId,street.getStreetId())
+                    .isNotNull(BrandLbsRelate::getLbsProvinceId)
+                    .isNotNull(BrandLbsRelate::getLbsCityId)
+                    .isNotNull(BrandLbsRelate::getLbsDistrictId)
+                    .isNotNull(BrandLbsRelate::getLbsStreetId).list();
+            if (br !=null && br.size()>0){
+                orderBase.setStreetId(br.get(0).getLbsStreetId());
+                orderBase.setStreet(br.get(0).getLbsStreetName());
+            }
+        } else {
+            // 先街道时依总部为准
+            if (StringUtils.isEmpty(orderBase.getStreetId()) &&
+                    StringUtils.isNotEmpty(street.getStreetId())){
+                orderBase.setStreetId(street.getStreetId());
+            }
+            if (StringUtils.isEmpty(orderBase.getStreet()) &&
+                    StringUtils.isNotEmpty(street.getStreet())){
+                orderBase.setStreet(street.getStreet());
+            }
+        }
+    }
+
     private String getFaOrderSmsfsma(String phone) {
         Random random = new Random(System.currentTimeMillis());
         String fsma="";