RailwayThirdManagerImpl.java 9.21 KB
/*
 * @(#)ApiLogManagerImpl.java
 *
 * Copyright (c) 2014-2017  xiniunet 版权所有
 * xiniunet. All rights reserved.
 *
 * This software is the confidential and proprietary
 * information of  xiniunet.
 * ("Confidential Information"). You shall not disclose
 * such Confidential Information and shall use it only
 * in accordance with the terms of the contract agreement
 * you entered into with xiniunet.
 */
package com.xiniunet.service.railway.biz;

import com.alibaba.fastjson.JSON;
import com.xiniunet.framework.base.BaseManagerImpl;
import com.xiniunet.framework.base.BaseResponse;
import com.xiniunet.framework.exception.ErrorType;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.railway.domain.TrainsDetail;
import com.xiniunet.railway.domain.TransPositionData;
import com.xiniunet.railway.request.ApiLogCreateRequest;
import com.xiniunet.railway.request.RailwayGetPositionRequest;
import com.xiniunet.railway.request.RailwayTransDetailGetRequest;
import com.xiniunet.railway.response.ApiLogCreateResponse;
import com.xiniunet.railway.response.RailwayGetPositionResponse;
import com.xiniunet.railway.response.RailwayTransDetailCountGetResponse;
import com.xiniunet.railway.response.RailwayTransDetailGetResponse;
import com.xiniunet.service.railway.dal.ApiLogMapper;
import com.xiniunet.service.railway.po.ApiLogPO;
import com.xiniunet.service.railway.util.RailwayThirdTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 远程调用日志的管理方法实现.
 *
 * @author xiniunet
 */
@Transactional
public class RailwayThirdManagerImpl extends BaseManagerImpl implements RailwayThirdManager {


    @Autowired
    private ApiLogManager apiLogManager;
    /**
     * 调用第三方接口
     * @param request
     * @return
     */
    @Override
    public RailwayGetPositionResponse getPosition(RailwayGetPositionRequest request,Passport passport){
        RailwayGetPositionResponse response = new RailwayGetPositionResponse();
        String url = "http://222.66.139.92:8080/positionService/getPosition.action";
        try
        {
            response = JSON.toJavaObject(RailwayThirdTools.railwayThird(url, request), response.getClass());
        }
        catch(Exception e)
        {
            response.addError(ErrorType.SYSTEM_ERROR, e.getMessage());
        }
        //插入日志信息
        ApiLogCreateRequest apiLogCreateRequest = new ApiLogCreateRequest();
        apiLogCreateRequest.setApiMethod("getPosition");
        SimpleDateFormat myFmt1=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
        Date now=new Date();
        String invokeTime=myFmt1.format(now);
        apiLogCreateRequest.setInvokeTime(invokeTime);
        apiLogCreateRequest.setRequestParam(com.alibaba.fastjson.JSON.toJSONString(request));
        apiLogCreateRequest.setResponse(com.alibaba.fastjson.JSON.toJSONString(response));
        apiLogCreateRequest.setDescription("调用第三方接口,获取行车位置");
        apiLogManager.create(apiLogCreateRequest,passport);
        return  response;
    }

    /**
     * 调用第三方接口(获取当前时间列车信息)
     * @param request
     * @param passport
     * @return
     */
    @Override
    public RailwayTransDetailCountGetResponse getTransCountDetail(RailwayTransDetailGetRequest request, Passport passport){
        RailwayTransDetailCountGetResponse railwayTransDetailCountGetResponse = new RailwayTransDetailCountGetResponse();
        RailwayTransDetailGetResponse response = new RailwayTransDetailGetResponse();
        List<TrainsDetail> trainsDetails = new ArrayList<>();
        String url = "http://222.66.139.92:8080/positionService/blueToolGetPosition.action";
        try
        {
            response = JSON.toJavaObject(RailwayThirdTools.railwayThird(url, request), response.getClass());
        }
        catch(Exception e)
        {
            response.addError(ErrorType.SYSTEM_ERROR, e.getMessage());
        }
        //插入日志信息
        ApiLogCreateRequest apiLogCreateRequest = new ApiLogCreateRequest();
        apiLogCreateRequest.setApiMethod("getTransDetail");
        SimpleDateFormat myFmt1=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
        Date now=new Date();
        String invokeTime=myFmt1.format(now);
        apiLogCreateRequest.setInvokeTime(invokeTime);
        apiLogCreateRequest.setRequestParam(com.alibaba.fastjson.JSON.toJSONString(request));
        apiLogCreateRequest.setResponse(com.alibaba.fastjson.JSON.toJSONString(response));
        apiLogCreateRequest.setDescription("调用第三方接口,获取当前时间列车信息");
        ApiLogCreateResponse apiLogCreateResponse =apiLogManager.create(apiLogCreateRequest,passport);
        if(apiLogCreateResponse.hasError()){
            response.addErrors(apiLogCreateResponse.getErrors());
            return railwayTransDetailCountGetResponse;
        }
        List<TransPositionData> list = response.getPositionData();
        Integer totalTrainCount = 0;
        Integer totalCarriageCount = 0;
        Map<String, List<TransPositionData>> resultMap= new HashMap<>(); // 最终要的结果
        if (list != null && list.size() > 0){
            List<TransPositionData> transPositionDataList = null;
            for (TransPositionData transPositionData : list){
                if(resultMap.containsKey(transPositionData.getTrainLineId())){
                    transPositionDataList = resultMap.get(transPositionData.getTrainLineId());
                }else{
                    transPositionDataList = new ArrayList<>();
                }
                transPositionDataList.add(transPositionData);
                resultMap.put(transPositionData.getTrainLineId(),transPositionDataList);
            }
            //遍历map中的键
            if(resultMap != null && resultMap.size() > 0){
                for (String key : resultMap.keySet()) {
                    TrainsDetail trainsDetail = new TrainsDetail();
                    trainsDetail.setTrainLineId(key);
                    int trainCount = resultMap.get(key).size();
                    int carriageCount = 0;
                    List<String > lineCarriageIds = new ArrayList<>();
                    //车厢数
                    List<TransPositionData> transPositionDatas = resultMap.get(key);
                    for (TransPositionData entity : transPositionDatas){
                        carriageCount += entity.getTrainCarriageIds().size();
                        lineCarriageIds.addAll(entity.getTrainCarriageIds());
                    }
                    trainsDetail.setTrainCarriageIds(lineCarriageIds);
                    trainsDetail.setTrainCarriageCount(carriageCount);
                    trainsDetail.setTrainCount(trainCount);
                    trainsDetails.add(trainsDetail);
                    totalCarriageCount += carriageCount;
                }

            }
            totalTrainCount = list.size();
        }
        railwayTransDetailCountGetResponse.setTrainCarriageCount(totalCarriageCount);
        railwayTransDetailCountGetResponse.setTrainCount(totalTrainCount);
        railwayTransDetailCountGetResponse.setTrainsDetails(trainsDetails);
        return  railwayTransDetailCountGetResponse;
    }
    /**
     * 调用第三方接口(获取当前时间列车信息)
     * @param request
     * @return
     */
    @Override
    public RailwayTransDetailGetResponse getTransDetail(RailwayTransDetailGetRequest request, Passport passport){
        RailwayTransDetailGetResponse response = new RailwayTransDetailGetResponse();
        String url = "http://222.66.139.92:8080/positionService/blueToolGetPosition.action";
        try
        {
            response = JSON.toJavaObject(RailwayThirdTools.railwayThird(url, request), response.getClass());
        }
        catch(Exception e)
        {
            response.addError(ErrorType.SYSTEM_ERROR, e.getMessage());
        }
        //插入日志信息
        ApiLogCreateRequest apiLogCreateRequest = new ApiLogCreateRequest();
        apiLogCreateRequest.setApiMethod("getTransDetail");
        SimpleDateFormat myFmt1=new SimpleDateFormat("yyyy-MM-dd  hh:mm:ss");
        Date now=new Date();
        String invokeTime=myFmt1.format(now);
        apiLogCreateRequest.setInvokeTime(invokeTime);
        apiLogCreateRequest.setRequestParam(com.alibaba.fastjson.JSON.toJSONString(request));
        apiLogCreateRequest.setResponse(com.alibaba.fastjson.JSON.toJSONString(response));
        apiLogCreateRequest.setDescription("调用第三方接口,获取当前时间列车信息");
        ApiLogCreateResponse apiLogCreateResponse = apiLogManager.create(apiLogCreateRequest,passport);
        if(apiLogCreateResponse.hasError()){
            response.addErrors(apiLogCreateResponse.getErrors());
            return response;
        }
        List<TransPositionData> list = response.getPositionData();
        if(list != null && list.size()>0){
            response.setPositionData(list);
        }
        return response;
    }
    /**
     * 验证对象
     *
     * @param apiLog   远程调用日志
     * @param passport 用户护照
     */
    private void checkValidate(ApiLogPO apiLog, Passport passport, BaseResponse response) {
        // TODO
    }
}