FFMResolveImpl.java 3.7 KB
package com.tianbo.analysis.service.imp;

import com.tianbo.analysis.controller.bean.ResponseReason;
import com.tianbo.analysis.dao.FFMInfoDao;
import com.tianbo.analysis.dao.TBBaseAirportInfoDao;
import com.tianbo.analysis.exception.FFMResolveException;
import com.tianbo.analysis.model.FFMInfo;
import com.tianbo.analysis.model.ResultJson;
import com.tianbo.analysis.model.StatictisModel;
import com.tianbo.analysis.model.TBBaseAirportInfo;
import com.tianbo.analysis.service.FFMResolve;
import com.tianbo.util.Date.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.text.ParseException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
@Service
public class FFMResolveImpl implements FFMResolve {

    @Resource
    TBBaseAirportInfoDao airportInfoDao;

    @Resource
    FFMInfoDao ffmInfoDao;

    @Override
    public ResultJson resolve(FFMInfo ffmInfo) {
        ResultJson resultJson = new ResultJson();
        try{
            ffmInfo.textToStringList();
            ffmInfo.resolveFFMPart();
            List<FFMInfo> ffmInfoList = ffmInfo.resolve_ULD_Waybill();
            if (!ffmInfoList.isEmpty()){
                log.info("解析了{}个舱单",ffmInfoList.size());
                for (FFMInfo ffm :  ffmInfoList) {
                    //todo:国际转运判定,需要维护机场代码静态表
                    List<TBBaseAirportInfo> airportInfoList= airportInfoDao.checkInternal(ffm.getOriginatingstationBill(),ffm.getDestinationstationBill());
                    if (!airportInfoList.isEmpty() && airportInfoList.size()>1){
                        if (airportInfoList.get(0).getInternal().equals(airportInfoList.get(1).getInternal()) && "1".equals(airportInfoList.get(1).getInternal())){
                            ffm.setCustomsstatus("002");
                            log.info("运单{}为国际转运货物",ffm.getWaybillnomaster());
                        }
                    }else {
                        log.error("{}{}机场代码未备案",ffm.getOriginatingstationBill(),ffm.getDestinationstationBill());
                    }
                    ffm.setReportorder(String.valueOf(Integer.parseInt(ffm.getReportorder())));
                    int result = ffmInfoDao.insertSelective(ffm);
                    if (result <=0){
                        log.error("{}入库失败",ffm.getWaybillnomaster());
                    }
                    //todo:重复报文入库逻辑将以删除旧报文插入新报文为准
                }
                return new ResultJson("200","报文解析成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.toString());
            resultJson.setError(e.toString());
            resultJson.setResponseReason(ResponseReason.FFM_RESOLVE_FAILD);
        }
        return resultJson;
    }

    @Override
    public List<FFMInfo> unresolvedFlightnoList() {
        return ffmInfoDao.unresolvedFlightnoList();
    }

    @Override
    public List<FFMInfo> unresolvedFFMList(FFMInfo record) {
        return ffmInfoDao.unresolvedFFMList(record);
    }

    @Override
    public int delFlightno(FFMInfo record) {
        return ffmInfoDao.delFlightno(record);
    }

    @Override
    public int delByAutoidList(List<String> idList) {
        return ffmInfoDao.delByAutoidList(idList);
    }

    @Override
    public List<StatictisModel> selectDevList(String flightno, String subTime, String nowTime) {
        return ffmInfoDao.selectDevList(flightno,subTime,nowTime);
    }
}