| | |
| | | if(Constants.equalsInteger(Constants.ZERO,jkSketch.getForceUpdate()) && Constants.equalsInteger(model.getStatus(),Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路存在正在优化中,请耐心等待优化完成或者选择强制优化操作!"); |
| | | } |
| | | |
| | | if( jkSketch.getLineIdList() ==null || jkSketch.getLineIdList().size()==0 ){ |
| | | if( jkSketch.getLineIdList() ==null || jkSketch.getLineIdList().size()==0 ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请选择有效合理的线路进行优化操作!"); |
| | | } |
| | | //当前所有线路(符合条件的线路) |
| | |
| | | @Async |
| | | public void distanceCustomer( Category cate) { |
| | | try { |
| | | List<JkCustomer> customerList = cate.getCustomerList(); |
| | | List<JkCustomer> allList = cate.getCustomerList(); |
| | | List<JkCustomer> customerList = cate.getNeedList(); |
| | | String url = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GAODE_DISTANCE_GEOAPI_URL).getCode(); |
| | | Date date = new Date(); |
| | | BigDecimal cLatitude =new BigDecimal(0); |
| | |
| | | for (int j = start; j < end; j++) { |
| | | try { |
| | | log.error("交通规划========"+cate.getId()+"/"+cate.getName()+"/"+customerList.get(j).getName()+"=======cirle/index:"+finalI+"/"+index++); |
| | | dealDistancePerCustomer(customerList.get(j),url,date, finalCLatitude, finalCLongitude,customerList); |
| | | dealDistancePerCustomer(customerList.get(j),url,date, finalCLatitude, finalCLongitude,allList); |
| | | }catch (Exception e){ |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | if(navigationList.size()>0){ |
| | | jkCustomerNavigationMapper.delete(new UpdateWrapper<JkCustomerNavigation>().lambda() |
| | | .eq(JkCustomerNavigation::getStartId,c.getId()));//删除历史数据 |
| | | for (JkCustomerNavigation navigation:navigationList) { |
| | | jkCustomerNavigationMapper.delete(new UpdateWrapper<JkCustomerNavigation>().lambda() |
| | | .eq(JkCustomerNavigation::getIdIndex,navigation.getIdIndex()));//删除历史数据 |
| | | } |
| | | jkCustomerNavigationMapper.insert(navigationList);//插入最新数据 |
| | | } |
| | | } |
| | |
| | | } |
| | | c.setStatus(Constants.TWO); |
| | | categoryMapper.updateById(c);//更新任务执行状态 |
| | | c.setCustomerList(Constants.equalsInteger(model.getForceUpdate(),0)?needList:customerList); |
| | | c.setCustomerList(customerList); |
| | | c.setNeedList(Constants.equalsInteger(model.getForceUpdate(),0)?needList:customerList); |
| | | return c; |
| | | } |
| | | |
| | |
| | | |
| | | private void initCustomerDistance( List<JkSketchLine> lineList,JkSketch model,boolean updateLineDistance) { |
| | | List<JkSketchCustomer> customerList = model.getCustomerList(); |
| | | BigDecimal cLatitude =new BigDecimal(0); |
| | | BigDecimal cLongitude =new BigDecimal(0); |
| | | String comLocation = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_LOCATION).getCode(); |
| | | try { |
| | | String[] ss = comLocation.split(","); |
| | | cLongitude = new BigDecimal(ss[0]); |
| | | cLatitude = new BigDecimal(ss[1]); |
| | | }catch (Exception e){ |
| | | } |
| | | for(JkSketchCustomer c : customerList){ |
| | | List<DistanceMapParam> tmpList = new ArrayList<>(); |
| | | List<DistanceMapParam> distanceMapParamList = getListFromJsonStr(c.getDistanceJson()); |
| | |
| | | t0.setDistance(Constants.formatLongNum(c.getStartDistance()) ); |
| | | if(Constants.formatLongNum(c.getStartDistance()) <= 0){ |
| | | //园区前往该客户的距离,如果之前未获取过 |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"交通规划尚未完成,不满足优化条件!"); |
| | | t0.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude())); |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"交通规划尚未完成,不满足优化条件!"); |
| | | } |
| | | tmpList.add(t0); |
| | | for(JkSketchCustomer cm : customerList){ |
| | | //客户和客户之间的距离信息 |
| | | DistanceMapParam t = new DistanceMapParam(); |
| | | t.setId(cm.getCustomerId()); |
| | | DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList); |
| | | DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList); |
| | | if(param!=null){//如果之前已经获取过 |
| | | t = param; |
| | | }else{ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"交通规划尚未完成,不满足路程计算条件!"); |
| | | //如果未规划,按照直线距离 |
| | | t.setDistance(DistanceCalculator.calculateDistanceDecinal(cm.getLatitude(),cm.getLongitude(),c.getLatitude(),c.getLongitude())); |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"与客户:"+cm.getName()+"简交通规划尚未完成,不满足路程计算条件!"); |
| | | } |
| | | tmpList.add(t); |
| | | } |
| | |
| | | tt.setDistance(Constants.formatLongNum(c.getEndDistance())); |
| | | if(Constants.formatLongNum(c.getEndDistance()) <= 0){ |
| | | //该客户返回园区的距离 ,如果之前未获取过 |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"交通规划尚未完成,不满足路程计算条件!"); |
| | | tt.setDistance(DistanceCalculator.calculateDistanceDecinal(cLatitude,cLongitude,c.getLatitude(),c.getLongitude())); |
| | | // throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:"+c.getName()+"与起点交通规划尚未完成,不满足路程计算条件!"); |
| | | } |
| | | tmpList.add(tt); |
| | | c.setDistanceMapParamList(tmpList); |
| | |
| | | return list; |
| | | } |
| | | |
| | | private DistanceMapParam getParamByCustomerIds( Integer id1, List<DistanceMapParam> distanceMapParamList) { |
| | | public static DistanceMapParam getParamByCustomerIds( Integer id1, List<DistanceMapParam> distanceMapParamList) { |
| | | if(distanceMapParamList!=null){ |
| | | for(DistanceMapParam p :distanceMapParamList){ |
| | | if(Constants.equalsInteger(p.getId(),id1)){ |
| | |
| | | return null; |
| | | } |
| | | |
| | | private List<DistanceMapParam> getListFromJsonStr(String distanceJson) { |
| | | public static List<DistanceMapParam> getListFromJsonStr(String distanceJson) { |
| | | try { |
| | | return JSONObject.parseObject(distanceJson, new TypeReference<List<DistanceMapParam>>(){}.getType()); |
| | | }catch (Exception e){ |
| | |
| | | String errorMsg1 =""; |
| | | for(JkSketchCustomer c : customerList){ |
| | | if(c.getLatitude()==null || c.getLongitude() ==null){ |
| | | errorMsg += c.getName()+"-"+c.getName()+" | "; |
| | | errorMsg += c.getName()+" | "; |
| | | } |
| | | if(!Constants.equalsInteger(c.getDistanceStatus(),Constants.ONE)){ |
| | | errorMsg1 += c.getName()+"-"+c.getName()+" | "; |
| | | } |
| | | /* if(!Constants.equalsInteger(c.getDistanceStatus(),Constants.ONE)){ |
| | | errorMsg1 += c.getName()+" | "; |
| | | }*/ |
| | | } |
| | | if(StringUtils.isNotBlank(errorMsg)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客户:【"+errorMsg+"】定位信息不完整,不满足优化条件!"); |