数据库查询数据,数据处理导出EXCEL

基于生产者消费者模型建立

1.这里是主线程调用两个子线程
public class LogExcelMain  {
   public static final String TABLE_NAME="x_temp_tabminutedata_log";//数据库表名字
    public static void main(String[] args) throws Exception {
        testMain();
    }
       public static synchronized Map<String,Object> testMain() {
         Map<String,Object> reMap = new HashMap<String,Object>();
         CountDownLatch latch  = null;
         //根据站台导出excel表
         String s="M1858  M1322 M1321 M1318 M1317";
         s=s.replaceAll("\\s{1,}", " ");//去掉空格 剩下一个
         List listStationID =  Arrays.asList(s.split(" "));
         String sql="";
         for(int i=0;i<listStationID.size();i++){
            sql="SELECT StationID,ObservTime,InsertTime,Wd1m,Ws1m,Wd2m,Ws2m,Wd10m,Ws10m,WdMax,WsMax,Wd_ss,Ws_ss,Wd_JD,Ws_JD,TT,TMax,TMin,Tw,RH,RHMin,Vapor,Td,Pp,SeaPressure,PMax,PMaxTime,PMin,PMinTime,Rain60min,R1M,R1H,Backup1,Backup2,Rain60Min2,R1M2,R1H2,Rain60Min3,R1M3,R1H3,Evaporation,Sun,CloudHeight,CloudCount,Weather,EvaporationSum,SunSum,WaterLevelM,LowCloudCount,SnowDepth,Sleet,WireIcing,FrozenSoil,LightingFrequency,TT_C,TMax_C,Tmin_C,RadiationShieldWs_C,Ws2m_C,Ws10m_C,WsMax_C,WsJD1M_C,WsJD_C,QC,WsMaxTime,TMaxTime,RHMinTime,TMaxTime_C,WsMaxTime_C,WsJDTime_C,Ws_JD_Time,TMinTime,TMinTime_C " +
                  "FROM "+TABLE_NAME+" where StationID='"+listStationID.get(i)+"'";
            System.out.println("查询"+TABLE_NAME+"数据语句:"+sql);
            try{
               System.out.println("开始导出数据...");
               latch = new CountDownLatch(2);
                //为多生产者和多消费者分别开创的线程池
                 ThreadPoolExecutor productPool =
                         new ThreadPoolExecutor(5, 10, 60, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10000), new ThreadPoolExecutor.CallerRunsPolicy());
                 ThreadPoolExecutor consumerPool1 =
                         new ThreadPoolExecutor(10, 20, 60, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10000), new ThreadPoolExecutor.CallerRunsPolicy());
               //生产数据
                 productPool.execute(new LogDataProducer(latch,sql));
               //new Thread() 消费数据
               Thread.sleep(1000);
                 consumerPool1.execute(new CreatExcelConsumer(latch));
                 productPool.shutdown();//关闭线程池
                 consumerPool1.shutdown();//关闭线程池
               latch.await();
               reMap.put("retcode", "1");
               System.out.println("导出数据结束!");
               return reMap;
            } catch(Exception e){
               System.out.println(e.getMessage());
               latch.countDown();
               System.out.println("数据库同步失败!");
               reMap.put("retcode", "0");
               return reMap;
            }//catch
         }//for
         return reMap;
      }// testMain()

}

2.这里是生产者,并且进行数据处理,存入有序阻塞队列

public class LogDataProducer implements Runnable{ private CountDownLatch latch; private String sql; public LogDataProducer(CountDownLatch latch,String sql) { this.latch = latch; this.sql = sql; } @Override public void run() { // TODO 自动生成的方法存根 GBaseConnection gbaseConnection=new GBaseConnection(); Connection conn = null; try { conn = gbaseConnection.getDBConnection(null); } catch (Exception e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } try { conn.setAutoCommit(false); } catch (SQLException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); }//关闭自动提交 ResultSet rs = null; PreparedStatement pstm = null; try { //预编译 pstm=conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } try { pstm = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } try { pstm.setFetchSize(Integer.MIN_VALUE); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } try { rs = pstm.executeQuery(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } ResultSetMetaData md = null; try { md = rs.getMetaData(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }// 获得查询表结构的字段属性 // LinkedHashMap<String,Object> returnMap= new LinkedHashMap<>();// 返回map数据 try { int number=0; while (rs.next()) { LinkedHashMap<String,Object> returnMap= new LinkedHashMap<>();//存放 数据 for(int i = 1 ; i<= md.getColumnCount() ; i++){ String columnName = md.getColumnLabel(i); String columnValue = rs.getString(i); returnMap.put(columnName, columnValue); } number++; //放入队伍中============ if (number==1){ System.out.println("======开始准备放入队伍======"); } Object StationID = returnMap.get("StationID"); int nullNumber=0; //台站七要素TT if ("M1944".equals(StationID)||"M1943".equals(StationID)||"M1942".equals(StationID)||"M1941".equals(StationID)||"M1940".equals(StationID)||"M1938".equals(StationID)||"M1937".equals(StationID)||"M1936".equals(StationID)||"M1935".equals(StationID)||"M1934".equals(StationID)||"M1933".equals(StationID)||"M1932".equals(StationID)||"M1931".equals(StationID)||"M1930".equals(StationID)||"M1929".equals(StationID)||"M1928".equals(StationID)||"M1927".equals(StationID)||"M1926".equals(StationID)||"M1925".equals(StationID)||"M1924".equals(StationID)||"M1923".equals(StationID)||"M1922".equals(StationID)||"M1921".equals(StationID)||"M1920".equals(StationID)||"M1919".equals(StationID)||"M1918".equals(StationID)||"M1917".equals(StationID)||"M1916".equals(StationID)||"M1915".equals(StationID)||"M1914".equals(StationID)||"M1904".equals(StationID)||"M1864".equals(StationID)||"M1422".equals(StationID)||"M1421".equals(StationID)||"M1421".equals(StationID)||"M1373".equals(StationID)||"M1331".equals(StationID)||"M1330".equals(StationID)||"M1329".equals(StationID)||"M1220".equals(StationID)||"M1218".equals(StationID)||"M1181".equals(StationID)||"M1180".equals(StationID)||"M1179".equals(StationID)||"M1127".equals(StationID)||"M1095".equals(StationID)||"M1086".equals(StationID)||"M1085".equals(StationID)||"M1056".equals(StationID) ||"M1035".equals(StationID)){ for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("V1".equals(key)||"V10".equals(key)||"VMin".equals(key)||"VMinTime".equals(key)||"V10Min".equals(key)||"V10MinTime".equals(key)||"RHMin".equals(key)||"RH".equals(key)||"Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"PMinTime".equals(key)||"PMin".equals(key)||"PMaxTime".equals(key)||"PMax".equals(key)||"SeaPressure".equals(key)||"Pp".equals(key)||"Vapor".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key) ||"TT".equals(key)){ // if(value==null){ // nullNumber+=1;//最后nullNumber是缺失的要素数量 // returnMap.put((String) key, "缺失"); // }else{ // returnMap.put((String) key, value); // } if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue7.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //1要素 else if ("M0752".equals(StationID)||"M0751".equals(StationID)||"M0703".equals(StationID)||"M0702".equals(StationID)||"M0701".equals(StationID)||"M0672".equals(StationID)||"M0671".equals(StationID)||"M0670".equals(StationID)||"M0669".equals(StationID)||"M0668".equals(StationID)||"M0667".equals(StationID)||"M0666".equals(StationID)||"M0665".equals(StationID)||"M0664".equals(StationID)||"M0663".equals(StationID)||"M0662".equals(StationID)||"M0661".equals(StationID)||"M0660".equals(StationID)||"M0659".equals(StationID)||"M0658".equals(StationID)||"M0657".equals(StationID)||"M0656".equals(StationID)||"M0655".equals(StationID)||"M0654".equals(StationID)||"M0653".equals(StationID)||"M0652".equals(StationID)||"M0651".equals(StationID)||"M0601".equals(StationID)||"M0556".equals(StationID)||"M0555".equals(StationID)||"M0554".equals(StationID)||"M0553".equals(StationID)||"M0552".equals(StationID)||"M0551".equals(StationID)||"M0509".equals(StationID)||"M0508".equals(StationID)||"M0507".equals(StationID)||"M0506".equals(StationID)||"M0505".equals(StationID)||"M0504".equals(StationID)||"M0503".equals(StationID)||"M0502".equals(StationID)||"M0501".equals(StationID)||"M0469".equals(StationID)||"M0468".equals(StationID)||"M0467".equals(StationID)||"M0466".equals(StationID)||"M0465".equals(StationID)||"M0464".equals(StationID)||"M0463".equals(StationID)||"M0462".equals(StationID)||"M0461".equals(StationID)||"M0460".equals(StationID)||"M0459".equals(StationID)||"M0458".equals(StationID)||"M0457".equals(StationID)||"M0456".equals(StationID)||"M0455".equals(StationID)||"M0454".equals(StationID)||"M0453".equals(StationID)||"M0452".equals(StationID)||"M0451".equals(StationID)||"M0405".equals(StationID)||"M0404".equals(StationID)||"M0403".equals(StationID)||"M0402".equals(StationID)||"M0401".equals(StationID)||"M0353".equals(StationID)||"M0352".equals(StationID)||"M0351".equals(StationID)||"M0321".equals(StationID)||"M0320".equals(StationID)||"M0319".equals(StationID)||"M0318".equals(StationID)||"M0317".equals(StationID)||"M0316".equals(StationID)||"M0315".equals(StationID)||"M0314".equals(StationID)||"M0313".equals(StationID)||"M0312".equals(StationID)||"M0311".equals(StationID)||"M0310".equals(StationID)||"M0309".equals(StationID)||"M0308".equals(StationID)||"M0307".equals(StationID)||"M0306".equals(StationID)||"M0305".equals(StationID)||"M0304".equals(StationID)||"M0303".equals(StationID)||"M0302".equals(StationID)||"M0301".equals(StationID)||"M0201".equals(StationID)||"M0139".equals(StationID)||"M0138".equals(StationID)||"M0137".equals(StationID)||"M0136".equals(StationID)||"M0135".equals(StationID)||"M0134".equals(StationID)||"M0133".equals(StationID)||"M0132".equals(StationID)||"M0131".equals(StationID)||"M0130".equals(StationID)||"M0129".equals(StationID)||"M0128".equals(StationID)||"M0127".equals(StationID)||"M0126".equals(StationID)||"M0125".equals(StationID)||"M0124".equals(StationID)||"M0123".equals(StationID)||"M0122".equals(StationID)||"M0121".equals(StationID)||"M0120".equals(StationID)||"M0119".equals(StationID)||"M0118".equals(StationID)||"M0117".equals(StationID)||"M0116".equals(StationID)||"M0115".equals(StationID)||"M0114".equals(StationID)||"M0113".equals(StationID)||"M0112".equals(StationID)||"M0111".equals(StationID)||"M0110".equals(StationID)||"M0109".equals(StationID)||"M0108".equals(StationID)||"M0107".equals(StationID)||"M0106".equals(StationID)||"M0105".equals(StationID)||"M0104".equals(StationID)||"M0103".equals(StationID)||"M0102".equals(StationID)||"M0101".equals(StationID)||"M0070".equals(StationID)||"M0069".equals(StationID)||"M0068".equals(StationID)||"M0067".equals(StationID)||"M0066".equals(StationID)||"M0065".equals(StationID)||"M0064".equals(StationID)||"M0063".equals(StationID)||"M0062".equals(StationID)||"M0061".equals(StationID)||"M0014".equals(StationID)||"M0013".equals(StationID)||"M0012".equals(StationID)||"M0011".equals(StationID)||"M0010".equals(StationID)||"M0009".equals(StationID)||"M0008".equals(StationID)||"M0007".equals(StationID)||"M0006".equals(StationID)||"M0005".equals(StationID)||"M0004".equals(StationID)||"M0003".equals(StationID)||"M0002".equals(StationID)||"M0001".equals(StationID) ){ for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("Rain60min".equals(key)||"R1H".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue1.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //台站6要素 else if ("M1946".equals(StationID)||"M1945".equals(StationID)||"M1913".equals(StationID)||"M1912".equals(StationID)||"M1911".equals(StationID)||"M1910".equals(StationID)||"M1909".equals(StationID)||"M1908".equals(StationID)||"M1907".equals(StationID)||"M1906".equals(StationID)||"M1905".equals(StationID)||"M1903".equals(StationID)||"M1902".equals(StationID)||"M1901".equals(StationID)||"M1861".equals(StationID)||"M1860".equals(StationID)||"M1854".equals(StationID)||"M1809".equals(StationID)||"M1807".equals(StationID)||"M1769".equals(StationID)||"M1768".equals(StationID)||"M1763".equals(StationID)||"M1755".equals(StationID)||"M1753".equals(StationID)||"M1751".equals(StationID)||"M1712".equals(StationID)||"M1703".equals(StationID)||"M1701".equals(StationID)||"M1666".equals(StationID)||"M1663".equals(StationID)||"M1661".equals(StationID)||"M1656".equals(StationID)||"M1654".equals(StationID)||"M1651".equals(StationID)||"M1620".equals(StationID)||"M1616".equals(StationID)||"M1615".equals(StationID)||"M1612".equals(StationID)||"M1608".equals(StationID)||"M1606".equals(StationID)||"M1604".equals(StationID)||"M1603".equals(StationID)||"M1602".equals(StationID)||"M1566".equals(StationID)||"M1565".equals(StationID)||"M1562".equals(StationID)||"M1560".equals(StationID)||"M1559".equals(StationID)||"M1557".equals(StationID)||"M1556".equals(StationID)||"M1555".equals(StationID)||"M1554".equals(StationID)||"M1552".equals(StationID)||"M1551".equals(StationID)||"M1504".equals(StationID)||"M1502".equals(StationID)||"M1458".equals(StationID)||"M1455".equals(StationID)||"M1454".equals(StationID)||"M1451".equals(StationID)||"M1419".equals(StationID)||"M1418".equals(StationID)||"M1415".equals(StationID)||"M1406".equals(StationID)||"M1403".equals(StationID)||"M1374".equals(StationID)||"M1372".equals(StationID)||"M1371".equals(StationID)||"M1361".equals(StationID)||"M1359".equals(StationID)||"M1358".equals(StationID)||"M1357".equals(StationID)||"M1356".equals(StationID)||"M1355".equals(StationID)||"M1328".equals(StationID)||"M1324".equals(StationID)||"M1318".equals(StationID)||"M1316".equals(StationID)||"M1312".equals(StationID)||"M1307".equals(StationID)||"M1304".equals(StationID)||"M1302".equals(StationID)||"M1301".equals(StationID)||"M1268".equals(StationID)||"M1265".equals(StationID)||"M1263".equals(StationID)||"M1262".equals(StationID)||"M1260".equals(StationID)||"M1255".equals(StationID)||"M1254".equals(StationID)||"M1252".equals(StationID)||"M1213".equals(StationID)||"M1212".equals(StationID)||"M1210".equals(StationID)||"M1209".equals(StationID)||"M1207".equals(StationID)||"M1205".equals(StationID)||"M1201".equals(StationID)||"M1185".equals(StationID)||"M1184".equals(StationID)||"M1183".equals(StationID)||"M1182".equals(StationID)||"M1176".equals(StationID)||"M1172".equals(StationID)||"M1169".equals(StationID)||"M1166".equals(StationID)||"M1163".equals(StationID)||"M1162".equals(StationID)||"M1161".equals(StationID)||"M1160".equals(StationID)||"M1155".equals(StationID)||"M1154".equals(StationID)||"M1153".equals(StationID)||"M1126".equals(StationID)||"M1124".equals(StationID)||"M1123".equals(StationID)||"M1119".equals(StationID)||"M1112".equals(StationID)||"M1111".equals(StationID)||"M1108".equals(StationID)||"M1106".equals(StationID)||"M1104".equals(StationID)||"M1103".equals(StationID)||"M1102".equals(StationID)||"M1101".equals(StationID)||"M1097".equals(StationID)||"M1096".equals(StationID)||"M1094".equals(StationID)||"M1091".equals(StationID)||"M1090".equals(StationID)||"M1088".equals(StationID)||"M1083".equals(StationID)||"M1082".equals(StationID)||"M1081".equals(StationID)||"M1080".equals(StationID)||"M1078".equals(StationID)||"M1074".equals(StationID)||"M1073".equals(StationID)||"M1072".equals(StationID)||"M1071".equals(StationID)||"M1066".equals(StationID)||"M1063".equals(StationID)||"M1055".equals(StationID)||"M1054".equals(StationID)||"M1053".equals(StationID)||"M1052".equals(StationID)||"M1047".equals(StationID)||"M1046".equals(StationID)||"M1043".equals(StationID)||"M1029".equals(StationID)||"M1014".equals(StationID)||"M1012".equals(StationID)||"M1008".equals(StationID)||"M1006".equals(StationID)||"M1005".equals(StationID)||"M1004".equals(StationID) ||"M1002".equals(StationID)){ for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("PMinTime".equals(key)||"PMin".equals(key)||"PMaxTime".equals(key)||"PMax".equals(key)||"SeaPressure".equals(key)||"Pp".equals(key)||"Vapor".equals(key)||"RHMin".equals(key)||"RH".equals(key)||"Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key)||"TT".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue6.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //站点6要素 //TODO 能见度 else if ("M1037".equals(StationID)||"M1038".equals(StationID)||"M1070".equals(StationID)||"M1116".equals(StationID) ||"M1369".equals(StationID)) { for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("V1".equals(key)||"V10".equals(key)||"VMin".equals(key)||"VMinTime".equals(key)||"V10Min".equals(key)||"V10MinTime".equals(key)||"RHMin".equals(key)||"RH".equals(key)||"Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key)||"TT".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue6v.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //台站5要素统计 相对湿度 else if ("M1859".equals(StationID)||"M1858".equals(StationID)||"M1811".equals(StationID)||"M1810".equals(StationID)||"M1808".equals(StationID)||"M1762".equals(StationID)||"M1759".equals(StationID)||"M1711".equals(StationID)||"M1702".equals(StationID)||"M1614".equals(StationID)||"M1613".equals(StationID)||"M1611".equals(StationID)||"M1558".equals(StationID)||"M1509".equals(StationID)||"M1508".equals(StationID)||"M1507".equals(StationID)||"M1506".equals(StationID)||"M1505".equals(StationID)||"M1503".equals(StationID)||"M1459".equals(StationID)||"M1457".equals(StationID)||"M1456".equals(StationID)||"M1414".equals(StationID)||"M1413".equals(StationID)||"M1412".equals(StationID)||"M1411".equals(StationID)||"M1368".equals(StationID)||"M1367".equals(StationID)||"M1327".equals(StationID)||"M1322".equals(StationID)||"M1321".equals(StationID)||"M1320".equals(StationID)||"M1306".equals(StationID)||"M1258".equals(StationID)||"M1214".equals(StationID)||"M1211".equals(StationID)||"M1175".equals(StationID)||"M1174".equals(StationID)||"M1173".equals(StationID)||"M1171".equals(StationID)||"M1168".equals(StationID)||"M1164".equals(StationID)||"M1125".equals(StationID)||"M1068".equals(StationID) ||"M1067".equals(StationID)) { for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"RHMin".equals(key)||"RH".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key)||"TT".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue5.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //站点5要素 气压 else if ("M1856".equals(StationID)||"M1765".equals(StationID)||"M1704".equals(StationID)||"M1417".equals(StationID)||"M1402".equals(StationID)||"M1401".equals(StationID)||"M1351".equals(StationID)||"M1314".equals(StationID)||"M1310".equals(StationID)||"M1305".equals(StationID)||"M1264".equals(StationID)||"M1159".equals(StationID)||"M1158".equals(StationID)||"M1157".equals(StationID)||"M1023".equals(StationID) ||"M1017".equals(StationID)) { for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"PMinTime".equals(key)||"PMin".equals(key)||"PMaxTime".equals(key)||"PMax".equals(key)||"SeaPressure".equals(key)||"Pp".equals(key)||"Vapor".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key)||"TT".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue5p.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); } //四要素 else if ("M1863".equals(StationID)||"M1862".equals(StationID)||"M1855".equals(StationID)||"M1853".equals(StationID)||"M1852".equals(StationID)||"M1851".equals(StationID)||"M1806".equals(StationID)||"M1805".equals(StationID)||"M1804".equals(StationID)||"M1803".equals(StationID)||"M1802".equals(StationID)||"M1801".equals(StationID)||"M1764".equals(StationID)||"M1761".equals(StationID)||"M1760".equals(StationID)||"M1758".equals(StationID)||"M1757".equals(StationID)||"M1756".equals(StationID)||"M1754".equals(StationID)||"M1752".equals(StationID)||"M1710".equals(StationID)||"M1709".equals(StationID)||"M1708".equals(StationID)||"M1707".equals(StationID)||"M1706".equals(StationID)||"M1705".equals(StationID)||"M1667".equals(StationID)||"M1660".equals(StationID)||"M1659".equals(StationID)||"M1658".equals(StationID)||"M1657".equals(StationID)||"M1655".equals(StationID)||"M1653".equals(StationID)||"M1652".equals(StationID)||"M1619".equals(StationID)||"M1610".equals(StationID)||"M1609".equals(StationID)||"M1607".equals(StationID)||"M1605".equals(StationID)||"M1601".equals(StationID)||"M1563".equals(StationID)||"M1561".equals(StationID)||"M1553".equals(StationID)||"M1511".equals(StationID)||"M1510".equals(StationID)||"M1501".equals(StationID)||"M1453".equals(StationID)||"M1452".equals(StationID)||"M1410".equals(StationID)||"M1409".equals(StationID)||"M1408".equals(StationID)||"M1407".equals(StationID)||"M1404".equals(StationID)||"M1370".equals(StationID)||"M1366".equals(StationID)||"M1365".equals(StationID)||"M1364".equals(StationID)||"M1363".equals(StationID)||"M1362".equals(StationID)||"M1360".equals(StationID)||"M1354".equals(StationID)||"M1353".equals(StationID)||"M1352".equals(StationID)||"M1326".equals(StationID)||"M1325".equals(StationID)||"M1319".equals(StationID)||"M1317".equals(StationID)||"M1315".equals(StationID)||"M1313".equals(StationID)||"M1309".equals(StationID)||"M1308".equals(StationID)||"M1303".equals(StationID)||"M1261".equals(StationID)||"M1259".equals(StationID)||"M1257".equals(StationID)||"M1256".equals(StationID)||"M1253".equals(StationID)||"M1251".equals(StationID)||"M1208".equals(StationID)||"M1206".equals(StationID)||"M1204".equals(StationID)||"M1203".equals(StationID)||"M1202".equals(StationID)||"M1170".equals(StationID)||"M1167".equals(StationID)||"M1165".equals(StationID)||"M1151".equals(StationID)||"M1114".equals(StationID)||"M1113".equals(StationID)||"M1110".equals(StationID)||"M1109".equals(StationID)||"M1107".equals(StationID)||"M1105".equals(StationID)||"M1098".equals(StationID)||"M1092".equals(StationID)||"M1089".equals(StationID)||"M1087".equals(StationID)||"M1084".equals(StationID)||"M1065".equals(StationID)||"M1064".equals(StationID)||"M1062".equals(StationID)||"M1061".equals(StationID)||"M1060".equals(StationID)||"M1059".equals(StationID)||"M1058".equals(StationID)||"M1057".equals(StationID)||"M1051".equals(StationID)||"M1048".equals(StationID)||"M1025".equals(StationID)||"M1024".equals(StationID)||"M1022".equals(StationID)||"M1021".equals(StationID)||"M1020".equals(StationID)||"M1019".equals(StationID)||"M1018".equals(StationID)||"M1016".equals(StationID)||"M1015".equals(StationID)||"M1013".equals(StationID)||"M1011".equals(StationID)||"M1010".equals(StationID)||"M1009".equals(StationID)||"M1007".equals(StationID)||"M1003".equals(StationID) ||"M1001".equals(StationID)){ for (Map.Entry<String,Object> entry : returnMap.entrySet()) { Object value=entry.getValue(); Object key=entry.getKey();//缺少的要素 if("Ws_JD_Time".equals(key)||"Ws_JD".equals(key)||"Ws_ss".equals(key)||"WsMax".equals(key)||"Ws10m".equals(key)||"Ws2m".equals(key)||"WsMaxTime".equals(key)||"Wd_JD".equals(key)||"Wd_ss".equals(key)||"WdMax".equals(key)||"Wd10m".equals(key)||"Wd2m".equals(key)||"R1H".equals(key)||"Rain60min".equals(key)||"TMinTime".equals(key)||"TMaxTime".equals(key)||"TMin".equals(key)||"TMax".equals(key)||"TT".equals(key)){ if(value==null){ nullNumber+=1;//最后nullNumber是缺失的要素数量 } returnMap.put((String) key, value==null?"缺失":value); } } returnMap.put("缺失要素的数量" , nullNumber); // ConstStationID.queue4.put(returnMap); ConstStationID.queueStatinonID.put(returnMap); //四要素结束 } //开始返回数据 if (number%10==0&&number!=0){ System.out.println(Thread.currentThread().getName() + "放入队列中数量:"+number); } // if (number%1000==0&&number!=0){ // System.out.println(Thread.currentThread().getName() + "放入队列中数量:"+number); // } }//while END conn.commit(); System.out.println(Thread.currentThread().getName() + "查询数量结束,总计:"+number); rs.close(); pstm.close(); conn.close(); conn = null; } catch (SQLException | InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } finally{ latch.countDown(); } } public static final String DB_URL="jdbc:mysql://www.sunsheen.cn:13383/hntjbdh";//"jdbc:gbase://10.155.90.80:5258/USR_SOD" public static final String DB_USER="hntjbdh";//"gbase" public static final String DB_PASS="hntjbdh@123";//"gbase20110531" public static final String DB_DRIVER="com.mysql.jdbc.Driver";//"com.gbase.jdbc.Driver" // public static final String TABLE_NAME="x_temp_tabhourdata_log";//数据库表名字 public class GBaseConnection implements IConnection { @Override public Connection getDBConnection(HashMap<String, Object> data)throws Exception { Connection con = null; Class.forName(DB_DRIVER); // String url = "jdbc:gbase://" + data.get("ip")+":" + data.get("port") + "/" + data.get("name"); // String user = (String) data.get("account"); // String password = (String) data.get("password"); // String url = "jdbc:gbase://" + "10.155.90.80" + ":" + "5258" + "/" + "USR_SOD"; String url =DB_URL; String user = DB_USER; String password = DB_PASS; con = DriverManager.getConnection(url, user, password); return con; } } }

3.这里是消费者,拿取有序阻塞队列的数据,写入EXCEL

public class CreatExcelConsumer implements Runnable{

   private  CountDownLatch latch;
// private  String fileAddress;
   public CreatExcelConsumer(CountDownLatch latch ) {
      this.latch = latch;
   }

   @Override
   public void run() {
      // TODO 自动生成的方法存根
       System.out.println("数据加载...");
       String fileAddress="";
       int number=0;
       while(true){
          HashMap<String, Object> mapStatinonID= new HashMap<>();

          try {
             if(ConstStationID.queueStatinonID.size() == 0) {
                break;
             }
             number ++;
            mapStatinonID=ConstStationID.queueStatinonID.take();
            if (number%10==0&&number!=0){
               System.out.println(Thread.currentThread().getName() + "队列拿取数量:"+number);
            }
         } catch (InterruptedException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
         }
          String StationID = (String) mapStatinonID.get("StationID");
         fileAddress="d:/StationID/"+(String)StationID+"缺失数据日志表.xls";
//       createExcel(fileAddress,mapStatinonID,ConstStationID.queueStatinonID);

         //**************************************

           List<Map> mapArrayList = new ArrayList<>();
           mapArrayList.add(mapStatinonID);
//         System.out.println(Thread.currentThread().getName() + "数据转成Excel...");

           boolean flag=fileExist(fileAddress);
           try {
               if(flag){
                   //创建工作簿
                   XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(fileAddress));
                   SXSSFWorkbook wb = new SXSSFWorkbook(xwb);
                   //读取第一个工作表
                   SXSSFSheet sheet = (SXSSFSheet) wb.getSheetAt(0);
                   sheet.setRandomAccessWindowSize(-1);
                   //读取最后一行
                   XSSFSheet sheet1 = xwb.getSheetAt(0);
                   int maxRow = sheet1.getLastRowNum();
//                 System.out.println("最后一行是:"+maxRow);
                   //设置行高
                   sheet.setDefaultRowHeight((short) (2 * 256));
                   //设置列宽
                   sheet.setColumnWidth(0, 4000);

                   sheet.setColumnWidth(1, 4000);

                   sheet.setColumnWidth(2, 4000);

                   XSSFFont font= (XSSFFont) wb.createFont();

                   font.setFontName("宋体");

                   font.setFontHeightInPoints((short) 16);//获得表格第一行
                   FileOutputStream fileOutputStream= new FileOutputStream(fileAddress);
                   SXSSFRow rows;
                   SXSSFCell cells;//循环拿到的数据给所有行每一列设置对应的值
                   for (int i = 0; i < mapArrayList.size(); i++) {//在这个sheet页里创建一行

                       rows = (SXSSFRow) sheet.createRow(maxRow+i + 1);//该行创建一个单元格,在该单元格里设置值
//                   rows=sheet.createRow((short)(sheet.getLastRowNum()+i+1));
                       ArrayList<Object> key = new ArrayList<>();
                       ArrayList<Object> value = new ArrayList<>();
                       String data = "";
                       int j=0;
                       for (Map.Entry<String, Object> entry:mapStatinonID.entrySet()){
                           key.add(entry.getKey());
                           value.add(entry.getValue());
                           cells= (SXSSFCell) rows.createCell(j);
                           cells.setCellValue(String.valueOf(value.get(j)));
                           j+=1;
                       }
                   }
                   try{
                       wb.write(fileOutputStream);
                       fileOutputStream.close();
                       wb.close();
                   }catch(IOException e) {
                       e.printStackTrace();
                   }

               }else {
                   File file= new File(fileAddress);
                   FileOutputStream fileOutputStream= new FileOutputStream(file);

                   //定义一个新的工作簿
                   XSSFWorkbook wb1 = new XSSFWorkbook();
                   //创建一个Sheet页
                   SXSSFWorkbook wb = new SXSSFWorkbook(wb1, 100);
                   wb.setCompressTempFiles(true);
                   SXSSFSheet sheet = (SXSSFSheet) wb.createSheet("First sheet");
                   sheet.setRandomAccessWindowSize(-1);
                   //设置行高
                   sheet.setDefaultRowHeight((short) (2 * 256));
                   //设置列宽
                   sheet.setColumnWidth(0, 4000);

                   sheet.setColumnWidth(1, 4000);

                   sheet.setColumnWidth(2, 4000);

                   XSSFFont font= (XSSFFont) wb.createFont();

                   font.setFontName("宋体");

                   font.setFontHeightInPoints((short) 16);//获得表格第一行
                   SXSSFRow row = (SXSSFRow) sheet.createRow(0);//根据需要给第一行每一列设置标题
                   SXSSFCell cell;
                   int k=0;
                   for (Map.Entry<String, Object> entry:mapStatinonID.entrySet()){
                       cell= (SXSSFCell) row.createCell(k);
                       cell.setCellValue(entry.getKey());
                       k++;
                   }
                   SXSSFRow rows;
                   SXSSFCell cells;//循环拿到的数据给所有行每一列设置对应的值
                   for (int i = 0; i < mapArrayList.size(); i++) {//在这个sheet页里创建一行
                       rows = (SXSSFRow) sheet.createRow(i + 1);//该行创建一个单元格,在该单元格里设置值
//                   rows=sheet.createRow((short)(sheet.getLastRowNum()+i+1));
                       ArrayList<Object> key = new ArrayList<>();
                       ArrayList<Object> value = new ArrayList<>();
                       String data = "";
                       int j=0;
                       for (Map.Entry<String, Object> entry:mapStatinonID.entrySet()){
                           key.add(entry.getKey());
                           value.add(entry.getValue());
                           cells= (SXSSFCell) rows.createCell(j);
                           cells.setCellValue(String.valueOf(value.get(j)));
                           j+=1;
                       }
                   }
                   try{
                       wb.write(fileOutputStream);
                       fileOutputStream.close();
                       wb.close();
                   }catch(IOException e) {
                       e.printStackTrace();
                   }
               }//else
           } catch (IOException e) {
               e.printStackTrace();
           }

    

       }//while end
      System.out.println(Thread.currentThread().getName() + "写入数据数量:"+number);
       System.out.println("数据加载完成...");


   //run end
   }

    //判断文件是否存在
    public static boolean fileExist(String filePath){
        boolean flag = false;
        File file = new File(filePath);
        flag = file.exists();
        return flag;
    }

}
public class ConstStationID {

  public volatile static  ArrayBlockingQueue<HashMap<String,Object>> queueStatinonID =
          new ArrayBlockingQueue<HashMap<String,Object>>(10000);
}

猜你喜欢

转载自blog.csdn.net/Temp_1998_H/article/details/122672428
今日推荐