• 在 MongoDB 中查找缺失的数据包


      1 package syncPacker;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.File;
      5 import java.io.FileReader;
      6 import java.io.FileWriter;
      7 import java.io.IOException;
      8 import java.net.UnknownHostException;
      9 import java.util.ArrayList;
     10 import java.util.Date;
     11 import java.util.HashMap;
     12 import java.util.List;
     13 import java.util.Map;
     14 
     15 import org.apache.http.message.BasicNameValuePair;
     16 import org.apache.log4j.Logger;
     17 import org.springframework.beans.factory.annotation.Autowired;
     18 import org.springframework.beans.factory.annotation.Value;
     19 import org.springframework.stereotype.Service;
     20 
     21 import com.mongodb.BasicDBObject;
     22 import com.mongodb.DB;
     23 import com.mongodb.DBCollection;
     24 import com.mongodb.DBObject;
     25 import com.mongodb.Mongo;
     26 import com.pro.framework.action.BaseController;
     27 
     28 import logCenter.SendLog;
     29 import net.sf.json.JSONObject;
     30 import syncPacker.bean.PatentBibliographicChangeBean;
     31 import syncPacker.bean.SyncDataPackageBean;
     32 import utils.DateUtils;
     33 import utils.DatetimeUtils;
     34 import utils.HttpUtils;
     35 
     36 /**
     37  * 增量数据分块打包 全处理
     38  * 
     39  * http://localhost:8080/PatentSearchExtend/syncPacker!pack.action
     40  * 
     41  * http://10.78.2.21:8080/PatentSearchExtend/syncPacker!pack.action?bean.
     42  * tableName=E_BIBLIOGRAPHIC_CHANGE_TEMP&bean.maxRowsPerSyncPackerPackage= 10000
     43  */
     44 @Service
     45 public class SyncPacker_201603 extends BaseController {
     46 
     47     private static final long serialVersionUID = 1L;
     48 
     49     // 初始化:数据库接口
     50     @Autowired
     51     private SyncPackerDao dao;
     52 
     53     // 初始化:发送端地址
     54     @Value("${url_syncSender}")
     55     private String url_syncSender;
     56 
     57     // 初始化:本地文件存储路径
     58     @Value("${path_syncPacker_package}")
     59     private String path_syncPacker_package;
     60 
     61     // 初始化:读取最大数据包名称的地址
     62     @Value("${url_selectMaxPackageNumber}")
     63     private String url_selectMaxPackageNumber;
     64 
     65     // 初始化:存储最大数据包名称的地址
     66     @Value("${url_insertSyncDataPackage}")
     67     private String url_insertSyncDataPackage;
     68 
     69     // 初始化:查询条件Bean
     70     private SyncDataPackageBean bean = new SyncDataPackageBean();
     71     // 初始化:查询结果List
     72     private List<PatentBibliographicChangeBean> pbcList = new ArrayList<PatentBibliographicChangeBean>();
     73     // 初始化:形成的数据包名称
     74     private List<PatentBibliographicChangeBean> pbcList_withPackageName = new ArrayList<PatentBibliographicChangeBean>();
     75     // 初始化:已打包的增量数据ID表单
     76     private List<String> pdaIdList = new ArrayList<String>();
     77     // 初始化:用于删除数据的临时ID List
     78     private List<String> idPartList = new ArrayList<String>();
     79     // 初始化:传输协议
     80     private HttpUtils httpUtils = new HttpUtils();
     81     // 初始化:键值串
     82     private List<BasicNameValuePair> paramList = new ArrayList<BasicNameValuePair>();
     83     // 初始化:历史最大包编号
     84     private String maxPackageNumber;
     85     // 初始化:记录打包完成后的数据版本
     86     private Integer centerNodeDataVersion;
     87     // 发送远程日志
     88     private SendLog sendLog = new SendLog();
     89     // 记录本地日志
     90     private Logger logger = Logger.getLogger(SyncPacker_201603.class);
     91     // 初始化:判断程序是否正在运行
     92     public static boolean isRunning = false;
     93 
     94     // 本次处理完成后的最大包编号
     95     private String packedPackageNumber;
     96     // 用于返回json的成功信息
     97     private String success = "success";
     98     
     99 
    100     /** 文件补发用:指定数据重新打包 */
    101     // http://localhost:8080/PatentSearchExtend/syncPacker!packByPackageNumber.action?bean.packageNumberStart=000101&bean.packageNumberEnd=000102
    102     public String packByPackageNumber() throws Exception {
    103 
    104         logMemory("本次请求处理开始。", bean.getPackageNumberStart() + " - " + bean.getPackageNumberEnd() );
    105 
    106         String job_start = DateUtils.getCurrentTimeString(0);
    107         
    108         try {
    109             
    110 
    111             for ( int i = Integer.valueOf(bean.getPackageNumberStart()); 
    112                     i <= Integer.valueOf(bean.getPackageNumberEnd()); i++) {                
    113 
    114                 // 开始时间
    115                 String package_start = DateUtils.getCurrentTimeString(0);
    116                 
    117                 // 包编号
    118                 String packageNumber = String.format( "%06d", i );
    119                 
    120                 logMemory("开始,包编号:", packageNumber );
    121                 
    122                 //(1)读历史表
    123                 pbcList = selectList_changeHistory( packageNumber ); 
    124                 
    125                 if( null == pbcList ) {
    126                     logMemory("<span style="color:red;">数据为空 !!!</span>", "");
    127                     
    128                 } else{
    129                     logMemory("数据查询完毕,数据量为", String.valueOf( pbcList.size() ));
    130 
    131                     //(2)插入MongoDB
    132                     insertMongoDB( pbcList );
    133                     pbcList.clear();
    134                 };
    135                 
    136                 logMemory("传输结束,包编号:" + packageNumber ," 用时: "
    137                         + DatetimeUtils.getDistanceTimes_string(package_start, DateUtils.getCurrentTimeString(0)) );
    138             }
    139         } catch (Exception e) {
    140             // 日志输出
    141             logMemory("系统发生异常", e.getMessage());
    142             e.printStackTrace();
    143         }
    144         
    145         logMemory("本次请求处理完成,程序结束。", bean.getPackageNumberStart() + " - " + bean.getPackageNumberEnd()
    146                 + " 用时: " + DatetimeUtils.getDistanceTimes_string( job_start, DateUtils.getCurrentTimeString(0)) );
    147         
    148         return SUCCESS;
    149     }
    150     
    151 
    152     /**
    153      * 读历史表
    154      * @param packageNumber
    155      * @return
    156      */
    157     private List<PatentBibliographicChangeBean> selectList_changeHistory( String packageNumber ){
    158         
    159         for ( int i = 0; i < 100; i++ ) {
    160             
    161             try {
    162                 return dao.selectList_changeHistory( packageNumber );                
    163             } catch (Exception e) {
    164                 // TODO Auto-generated catch block
    165 //                e.printStackTrace();
    166                 logMemory("系统发生异常", e.getMessage());
    167                 try {
    168                     Thread.sleep(500);
    169                     logMemory("暂停 0.5 秒", "" );
    170                 } catch (InterruptedException e1) {
    171                     // TODO Auto-generated catch block
    172                     e1.printStackTrace();
    173                 }
    174             } 
    175         }// loop end
    176         return null ;
    177         
    178     }
    179     
    180     private PatentBibliographicChangeBean select_changeHistory( String packageNumber ){
    181         
    182         for ( int i = 0; i < 100; i++ ) {
    183             
    184             try {
    185                 return dao.select_changeHistory( packageNumber );                
    186             } catch (Exception e) {
    187                 // TODO Auto-generated catch block
    188 //                e.printStackTrace();
    189                 logMemory("系统发生异常", e.getMessage());
    190                 try {
    191                     Thread.sleep(500);
    192                     logMemory("暂停 0.5 秒", "" );
    193                 } catch (InterruptedException e1) {
    194                     // TODO Auto-generated catch block
    195                     e1.printStackTrace();
    196                 }
    197             } 
    198         }// loop end
    199         return null ;
    200         
    201     }
    202     
    203     
    204     
    205 
    206     /**
    207      * 插入 MongoDB
    208      */
    209     public void insertMongoDB( List<PatentBibliographicChangeBean> pbcList ) {    
    210 
    211         //# MongoDB(数据加载目标)
    212         String syncLoadIntoMongoDbService = "10.78.2.23:27017";
    213         String syncLoadIntoMongoDbName = "patent_search_extend";
    214         String syncLoadIntoMongoTable = "patent_bibliographic_20160319";
    215 
    216         // 加载开始
    217 //        logger.info(DateUtils.getNow() + " Load start: " + syncLoadIntoMongoDbService );
    218 
    219         Mongo m = null;
    220         try {
    221             m = new Mongo( syncLoadIntoMongoDbService );
    222         } catch (UnknownHostException e) {
    223             e.printStackTrace();
    224             logger.info(DateUtils.getNow() + " UnknownHostException:" + e.getMessage());
    225         }
    226 
    227         // 库名
    228         DB db = m.getDB( syncLoadIntoMongoDbName );
    229 //        logger.info( DateUtils.getNow() + " Db:" + syncLoadIntoMongoDbName );
    230 
    231         // 表名
    232         DBCollection collection = db.getCollection( syncLoadIntoMongoTable );
    233 //        logger.info(DateUtils.getNow() + " Table:" + syncLoadIntoMongoTable );
    234         
    235         // 循环列表,将每个元素插入数据库
    236         for( PatentBibliographicChangeBean pbcBean : pbcList ){
    237             
    238             
    239             
    240             //(1)读取一条著录数据
    241 //            JSONObject json = packByPackageNumber_readBibl( pbcBean.getId() );
    242             
    243 //            if( null == json ) return ;
    244 
    245             // 列,值
    246             BasicDBObject insDoc = new BasicDBObject();
    247             
    248             insDoc.put("abstract_No"    , pbcBean.getAbstract_No()    );
    249             insDoc.put("app_Addr"       , pbcBean.getApp_Addr()       );
    250             insDoc.put("app_Cn"         , pbcBean.getApp_Cn()         );
    251             insDoc.put("app_Country"    , pbcBean.getApp_Country()    );
    252             insDoc.put("app_Date"       , pbcBean.getApp_Date()       );
    253             insDoc.put("app_Name"       , pbcBean.getApp_Name()       );
    254             insDoc.put("app_Sn"         , pbcBean.getApp_Sn()         );
    255             insDoc.put("app_Type"       , pbcBean.getApp_Type()       );
    256             insDoc.put("app_Zip"        , pbcBean.getApp_Zip()        );
    257             insDoc.put("ecla"           , pbcBean.getEcla()           );
    258             insDoc.put("fi"             , pbcBean.getFi()             );
    259             insDoc.put("ft"             , pbcBean.getFt()             );
    260             insDoc.put("id"             , pbcBean.getId()             );
    261             insDoc.put("inv_Title"      , pbcBean.getInv_Title()      );
    262             insDoc.put("invent_Type"    , pbcBean.getInvent_Type()    );
    263             insDoc.put("inventor"       , pbcBean.getInventor()       );
    264             insDoc.put("ipc_Standard"   , pbcBean.getIpc_Standard()   );
    265             insDoc.put("locarno"        , pbcBean.getLocarno()        );
    266             insDoc.put("operation_Time" , pbcBean.getOperation_Time() );
    267             insDoc.put("operation_Type" , pbcBean.getOperation_Type() );
    268             insDoc.put("package_Number" , pbcBean.getPackage_Number() );
    269             insDoc.put("pct_App_Cn"     , pbcBean.getPct_App_Cn()     );
    270             insDoc.put("pct_App_Date"   , pbcBean.getPct_App_Date()   );
    271             insDoc.put("pct_App_Sn"     , pbcBean.getPct_App_Sn()     );
    272             insDoc.put("pct_Date"       , pbcBean.getPct_Date()       );
    273             insDoc.put("pct_Pub_Cn"     , pbcBean.getPct_Pub_Cn()     );
    274             insDoc.put("pct_Pub_Date"   , pbcBean.getPct_Pub_Date()   );
    275             insDoc.put("pct_Pub_Lang"   , pbcBean.getPct_Pub_Lang()   );
    276             insDoc.put("pct_Pub_Sn"     , pbcBean.getPct_Pub_Sn()     );
    277             insDoc.put("prn"            , pbcBean.getPrn()            );
    278             insDoc.put("prn_Cn"         , pbcBean.getPrn_Cn()         );
    279             insDoc.put("prn_Date"       , pbcBean.getPrn_Date()       );
    280             insDoc.put("prn_Sn"         , pbcBean.getPrn_Sn()         );
    281             insDoc.put("prn_Type"       , pbcBean.getPrn_Type()       );
    282             insDoc.put("pub_Cn"         , pbcBean.getPub_Cn()         );
    283             insDoc.put("pub_Date"       , pbcBean.getPub_Date()       );
    284             insDoc.put("pub_Sn"         , pbcBean.getPub_Sn()         );
    285             insDoc.put("pub_Type"       , pbcBean.getPub_Type()       );
    286             insDoc.put("uc"             , pbcBean.getUc()             );
    287             
    288             collection.insert(insDoc);
    289             insDoc.clear();
    290             
    291         }
    292 
    293         // 循环遍历pdaBeanList
    294 //        System.out.println("loading ...");
    295 //        logger.info(DateUtils.getNow() + " rows:" + pdaBeanList.size());
    296 
    297         // 当前记录编号
    298         // int currentRowNumber = 0;
    299 
    300         if ( m != null) m.close();
    301         
    302 //        System.out.println("Load finished.");
    303     }
    304     
    305 
    306     
    307     /**
    308      * 在 MongoDB 中查找缺失的数据包
    309      * @return
    310      * @throws Exception
    311      */
    312     public String findLostPackages_from_mongoDB() throws Exception {
    313         
    314 
    315         //# MongoDB(数据加载目标)
    316         String syncLoadIntoMongoDbService = "10.78.2.23:27017";
    317         String syncLoadIntoMongoDbName = "patent_search_extend";
    318         String syncLoadIntoMongoTable = "patent_bibliographic_20160319";
    319 
    320         // 加载开始
    321 //        logger.info(DateUtils.getNow() + " Load start: " + syncLoadIntoMongoDbService );
    322 
    323         Mongo m = null;
    324         try {
    325             m = new Mongo( syncLoadIntoMongoDbService );
    326         } catch (UnknownHostException e) {
    327             e.printStackTrace();
    328             logger.info(DateUtils.getNow() + " UnknownHostException:" + e.getMessage());
    329         }
    330 
    331         // 库名
    332         DB db = m.getDB( syncLoadIntoMongoDbName );
    333 //        logger.info( DateUtils.getNow() + " Db:" + syncLoadIntoMongoDbName );
    334 
    335         // 表名
    336         DBCollection collection = db.getCollection( syncLoadIntoMongoTable );
    337 //        logger.info(DateUtils.getNow() + " Table:" + syncLoadIntoMongoTable );        
    338         
    339         PatentBibliographicChangeBean pbcBean = new PatentBibliographicChangeBean();
    340         
    341 
    342         for ( int i = Integer.valueOf(bean.getPackageNumberStart()); 
    343                 i <= Integer.valueOf(bean.getPackageNumberEnd()); i++) {    
    344             
    345             //(1)从 Oracle 取一个著录ID
    346             pbcBean = select_changeHistory( String.format( "%06d", i ));
    347             
    348             if( null == pbcBean ) {
    349                 logMemory("数据为空!  ", "包编号:"+i+",著录ID:" + pbcBean.getId()  ); continue ;
    350             }
    351             
    352 //            logMemory("包编号:"+i+",著录ID:", pbcBean.getId() );
    353             
    354             //(2)查询 MongoDB 中是否存在        
    355             BasicDBObject docFind = new BasicDBObject( "id", pbcBean.getId() );
    356             DBObject findResult = collection.findOne( docFind );
    357             
    358             if( null == findResult || "".equals( findResult )){
    359                 logMemory("缺失  !!! ", "包编号:"+i+",著录ID:" + pbcBean.getId()  );
    360             }
    361         }
    362         
    363         // retrieve
    364 
    365 
    366         if ( m != null) m.close();
    367         
    368         
    369         return SUCCESS ;
    370     }
    371     
    372     
    373     
    374     
    375     
    376     
    377     
    378     
    379     
    380     
    381     
    382     
    383     
    384     
    385 
    386     /** 记录日志 */
    387     private void logMemory(String behavior, String content) {
    388         // 向服务器发送日志
    389 //        sendLog.send("syncPacker", behavior, content);
    390         // 记录本地日志
    391         logger.info(DateUtils.getNow() + " " + behavior + " :" + content);
    392         // 控制台输出日志
    393 //        System.out.println("syncPacker : " + DateUtils.getNow() + " " + behavior + " :" + content);
    394     }
    395 
    396     @Override
    397     public String insert() throws Exception {
    398         return null;
    399     }
    400 
    401     @Override
    402     public String update() throws Exception {
    403         return null;
    404     }
    405 
    406     @Override
    407     public String selectList() throws Exception {
    408         return null;
    409     }
    410 
    411     @Override
    412     public String delete() throws Exception {
    413         return null;
    414     }
    415 
    416     public static boolean isRunning() {
    417         return isRunning;
    418     }
    419 
    420     public static void setRunning(boolean isRunning) {
    421         SyncPacker_201603.isRunning = isRunning;
    422     }
    423 
    424     public Integer getCenterNodeDataVersion() {
    425         return centerNodeDataVersion;
    426     }
    427 
    428     public void setCenterNodeDataVersion(Integer centerNodeDataVersion) {
    429         this.centerNodeDataVersion = centerNodeDataVersion;
    430     }
    431 
    432     public String getSuccess() {
    433         return success;
    434     }
    435 
    436     public void setSuccess(String success) {
    437         this.success = success;
    438     }
    439 
    440     public String getMaxPackageNumber() {
    441         return maxPackageNumber;
    442     }
    443 
    444     public void setMaxPackageNumber(String maxPackageNumber) {
    445         this.maxPackageNumber = maxPackageNumber;
    446     }
    447 
    448     public String getPackedPackageNumber() {
    449         return packedPackageNumber;
    450     }
    451 
    452     public void setPackedPackageNumber(String packedPackageNumber) {
    453         this.packedPackageNumber = packedPackageNumber;
    454     }
    455 
    456     public SyncDataPackageBean getBean() {
    457         return bean;
    458     }
    459 
    460     public void setBean(SyncDataPackageBean bean) {
    461         this.bean = bean;
    462     }
    463 }
  • 相关阅读:
    js中的原生Ajax和JQuery中的Ajax
    this的用法
    static的特性
    时政20180807
    java compiler没有1.8怎么办
    Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)
    分词器
    [数算]有一个工程甲、乙、丙单独做,分别要48天、72天、96天完成
    一点感想
    解析Excel文件 Apache POI框架使用
  • 原文地址:https://www.cnblogs.com/livon/p/5302164.html
Copyright © 2020-2023  润新知