@Override public boolean save(MessageHeader header, ArrayList<ProductBean> lstBeans, String filename) { // TODO Auto-generated method stub String dataType = header.getProductType(); String source = header.getSource(); String yyyymmdd = header.getYyyymmdd(); String batchID = header.getBatchID(); StationFileHeader head = new StationFileHeader(CityType.NONE_6H); String title; String dateTimeStamp; String reportTime; long baseTime = header.getBaseTime(); Date date = new Date(baseTime); reportTime = String.format("%02d", date.getHours()); dateTimeStamp = yyyymmdd + reportTime; int stationCnt = lstBeans.size() / 28; head.init(source, dataType, dateTimeStamp, stationCnt); StationFileBody body = new StationFileBody(); // 根据list bean添加站点数据 for (ProductBean bean : lstBeans) { if (dataType.equals("SCMOC") && bean instanceof SCMOCBean) { SCMOCBean pb = (SCMOCBean) bean; String stationID = pb.getStation(); String forecastTime = String.format("%d", pb.getMinutesValid() / 60); ForecastTimeLine line = new ForecastTimeLine(forecastTime); line.addDataValue(pb.getTemperature()); line.addDataValue(pb.getHumidity()); // 相对湿度 line.addDataValue(pb.getWindDirection()); line.addDataValue(pb.getWindSpeed()); line.addDataValue(pb.getAirPressure()); line.addDataValue(pb.getPrecipitation()); // 降水量 line.addDataValue(pb.getCloud()); // 总云量 line.addDataValue(pb.getlCloud()); // 低运量 line.addDataValue(pb.getWeather()); // 天气现象 line.addDataValue(pb.getVisibility()); // 能见度 line.addDataValue(pb.gettMax()); // 最高温度 line.addDataValue(pb.gettMin()); // 最低温度 line.addDataValue(pb.gethMax()); // 最大相对湿度 line.addDataValue(pb.gethMin()); // 最小相对湿度 line.addDataValue(pb.getPrecipitation24H()); // 24小时降水量 line.addDataValue(pb.getrProbability12H()); // 12小时降水量 line.addDataValue(pb.getCloud12H()); line.addDataValue(pb.getlCloud12H()); line.addDataValue(pb.getWeather12H()); line.addDataValue(pb.getWindDirection12H()); line.addDataValue(pb.getWindSpeed12H()); if (stations.containsKey(stationID)) { MetaStation inf = stations.get(stationID); body.addStation(stationID, inf.getLon(), inf.getLat(), inf.getHeight(), line, 21); } else { body.addStation(stationID, -99.9f, -99.9f, -99.9f, line, 21); } } else if (dataType.equals("SPCC") && bean instanceof SPCCBean) { SPCCBean pb = (SPCCBean) bean; String stationID = pb.getStation(); String forecastTime = String.format("%d", pb.getMinutesValid() / 60); ForecastTimeLine line = new ForecastTimeLine(forecastTime); line.addDataValue(999.9f); line.addDataValue(999.9f); // 相对湿度 line.addDataValue(pb.getWindDirection()); line.addDataValue(pb.getWindLevel()); line.addDataValue(999.9f); line.addDataValue(999.9f); // 降水量 line.addDataValue(999.9f); // 总云量 line.addDataValue(999.9f); // 低运量 line.addDataValue(pb.getWeather()); // 天气现象 line.addDataValue(999.9f); // 能见度 line.addDataValue(pb.getTMax()); // 最高温度 line.addDataValue(pb.getTMin()); // 最低温度 line.addDataValue(999.9f); // 最大相对湿度 line.addDataValue(999.9f); // 最小相对湿度 line.addDataValue(999.9f); // 24小时降水量 line.addDataValue(999.9f); // 12小时降水量 line.addDataValue(999.9f); line.addDataValue(999.9f); line.addDataValue(999.9f); line.addDataValue(999.9f); line.addDataValue(999.9f); if (stations.containsKey(stationID)) { MetaStation inf = stations.get(stationID); body.addStation(stationID, inf.getLon(), inf.getLat(), inf.getHeight(), line, 21); } else { body.addStation(stationID, -99.9f, -99.9f, -99.9f, line, 21); } } } // 计算站点数量和替换filename的[FFF]pattern int lineCntPerStaion = 0; String maxFFF = ""; for (Map.Entry<String, StationObject> entry : body.getStationMap().entrySet()) { lineCntPerStaion = entry.getValue().getForecastLineCnt(); int size = entry.getValue().getForecastLineList().size(); maxFFF = entry.getValue().getForecastLineList().get(size - 1).getForecastTime(); break; } // 站点数量 stationCnt = lstBeans.size() / lineCntPerStaion; head.init(source, dataType, dateTimeStamp, stationCnt); // filename的[FFF]pattern int i_fff = Integer.valueOf(maxFFF); maxFFF = String.format("%03d", i_fff); filename = filename.replace("[FFF]", maxFFF); Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); String stamp = formatter.format(currentTime); filename = filename.replace("yyyymmddhhmiss", stamp); StationFileObj obj = new StationFileObj(head, body); StationWriter writer = new StationWriter(obj, filename); if (!writer.save()) { return false; } return true; }