微服务远程调用 RestTemplate
public class RostDispatchApplication {
public static void main(String[] args) {
//下面语句使得日志输出使用异步处理,减小输出日志对性能的影响
System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
SpringApplication.run(RostDispatchApplication.class, args);
}
/**
* 创建RestTemplate并注入Spring容器
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
二、实现类
public class RealityScheduleServiceImpl implements IRealityScheduleService {
@Resource
RealityScheduleMapper realityScheduleMapper;
@Resource
GlobalExceptionHandler globalExceptionHandler;
@Resource
PropertiesConfig config;
// 进行依赖注入
@Autowired
private RestTemplate restTemplate;
/**
* 分页查询实时排班信息
* @param params 查询条件
* @param pageIndex 页码
* @param pageCount 每页条数
* @return
*/
@Override
public ResponseData findListByPage(Map<String , Object> params,Integer pageIndex, Integer pageCount){
pageIndex = pageIndex == null || pageIndex < 1 ? 1 : pageIndex;
pageCount = pageCount == null ? 0 : pageCount;
try{
Page<RealitySchedule> page = new Page<>(pageIndex, pageCount);
Page<RealityScheduleEX> list = realityScheduleMapper.selectPageList(page,params);
List<RealityScheduleEX> resultList = list.getRecords();
String basicUrl =config.getBasicUrl();
// 进行数据的处理
if(CollectionUtils.isNotEmpty(resultList)){
/*--------------------微服务远程调用数据----------------------*/
// 获得线路id
List<BaseLineInfo> lineList = new ArrayList();
List<BaseVehicleInfo> vehicleList = new ArrayList();
Map<String,Object> vehicleSetList = new HashMap<>();
Map<String,Object> branchList = new HashMap<>();
List<Long> lineIds =resultList.stream().map(e -> e.getLineId()).collect(Collectors.toList());
// 获得车辆id
List<Long> vehicleIds = resultList.stream().map(e -> e.getVehicleId()).collect(Collectors.toList());
// 获得车组人员信息
List<String> vehicleSets = resultList.stream().map(e -> e.getVehicleSet()).collect(Collectors.toList());
// 获得网点信息
List<String> branches= resultList.stream().map(e -> e.getBranches()).collect(Collectors.toList());
String lineUrl = basicUrl+"base-line-info/getObjectByIds";
ResponseData result =restTemplate.postForObject(lineUrl,lineIds,ResponseData.class);
// 线路返回结果数据
if(result.getCode() == 200){
lineList = JsonUtil.json2List(JsonUtil.obj2json(result.getData()), BaseLineInfo.class);
}
// 获得车辆信息
ResponseData vehicleResult =restTemplate.postForObject(basicUrl+"base-vehicle-info/getObjectByIds",vehicleIds,ResponseData.class);
if(vehicleResult.getCode() == 200){
vehicleList = JsonUtil.json2List(JsonUtil.obj2json(vehicleResult.getData()), BaseVehicleInfo.class);
}
// 获得车组人员信息
ResponseData vehicleSetsResult =restTemplate.postForObject(basicUrl+"base-escort-person-info/getObjectByIds",vehicleSets,ResponseData.class);
if(vehicleSetsResult.getCode() == 200){
vehicleSetList = (Map<String,Object>)vehicleSetsResult.getData();
}
// 获得网点信息
ResponseData branchResult =restTemplate.postForObject(basicUrl+"base-branch-info/getObjectByIds",branches,ResponseData.class);
if(branchResult.getCode() == 200){
branchList = (Map<String,Object>)branchResult.getData();
}
/*--------------------对列表查询数据进行整合,供页面展示用----------------------*/
List<BaseLineInfo> finalLineList = lineList;
List<BaseVehicleInfo> finalVehicleList = vehicleList;
int num = resultList.size();
for(int i =0 ;i< num;i++){
RealityScheduleEX ex = resultList.get(i);
// 线路信息
BaseLineInfo lineInfo =finalLineList.stream().filter(line ->line.getId() == ex.getLineId()).findAny().orElse(null);
ex.setLineName(lineInfo.getLineName());
// 车牌号
BaseVehicleInfo vehicleInfo = finalVehicleList.stream().filter(v -> v.getId() == ex.getVehicleId()).findAny().orElse(null);
ex.setPlateNumber(vehicleInfo.getPlateNumber());
// 车组人员信息
ex.setPersonList(JsonUtil.json2List(JsonUtil.obj2json(vehicleSetList.get(String.valueOf(i))), BaseEscortPersonInfo.class));
// 网点信息,根据任务类型进行网点信息的赋值
String taskType = ex.getTaskType();
List<BaseBranchInfo> branch = JsonUtil.json2List(JsonUtil.obj2json(branchList.get(String.valueOf(i))), BaseBranchInfo.class);
if(taskType.equals(ConstantEnum.EARLY_TASK.getCode())) {
ex.setEarlyBranch(branch);
}
else if(taskType.equals(ConstantEnum.LATE_TASK.getCode())) {
ex.setLateBranch(branch);
}
else if(taskType.equals(ConstantEnum.SELF_TASK.getCode())) {
ex.setSelfDevices(branch);
}
else if(taskType.equals(ConstantEnum.BUSINESS_TASK.getCode())) {
ex.setDoorstep(branch);
}
else{
ex.setTempBranch(branch);
}
}
}
return ResponseUtil.success(list);
} catch (Exception e) {
log.error("", e);
return globalExceptionHandler.exceptionGet(e);
}
}
三、基础服务中的方法实现
public ResponseData getObjectByIds(@RequestBody List<String> ids ){
if (CollectionUtils.isNotEmpty(ids)) {
return baseBranchInfoService.getObjectByIds(ids);
}
else{
return ResponseUtil.error("未获取到网点信息!");
}
}
@Override
public ResponseData getObjectByIds(List<Long> ids) {
try {
QueryWrapper<BaseLineInfo> wrapper = new QueryWrapper<>();
wrapper.in("id", ids);
List<BaseLineInfo> list = baseLineInfoMapper.selectList(wrapper);
if (CollectionUtils.isNotEmpty(list)) {
return ResponseUtil.success(list);
} else {
return ResponseUtil.error(511,"未查找对应的线路信息");
}
} catch (Exception e) {
log.error("", e);
return globalExceptionHandler.exceptionGet(e);
}
}
}
浙公网安备 33010602011771号