/**
   * 更新用户信息
   *
   * @return 是否更新成功
   */
  private boolean updateRecord(record exist_record, record new_record) {
    try {
      System.out.print("update record");
      MongoDAO dao = MongoDAO.GetInstance();
      System.out.print("update record1");
      Document existing = new Document();
      existing.append("admission_number", exist_record.getAdmission_number());

      long num = dao.GetCollection("records").deleteMany(existing).getDeletedCount();
      System.out.print("remove record number = " + num);

      try {
        Map<String, Object> docMap = new_record.getDocMap();
        docMap.put("inHospital", true);
        docMap.put("leaveHospital", false);
        docMap.put("followup", false);
        dao.GetCollection("records").insertOne(new Document(docMap));
      } catch (Exception e) {
        e.printStackTrace();
        logger.error(e.toString());
        return false;
      }

      System.out.print("update record2");
    } catch (Exception e) {
      e.printStackTrace();
      logger.error(e.toString());
      return false;
    }
    return true;
  }
  /**
   * 取得正在住院的用户
   *
   * @return
   */
  public List<record> GetInhospitalRecords() {
    try {
      List<record> list = new ArrayList<record>();
      MongoDAO dao = MongoDAO.GetInstance();
      BasicDBObject cond = new BasicDBObject();
      cond.append("inHospital", new BasicDBObject("$eq", true));
      cond.append("leaveHospital", new BasicDBObject("$eq", false));
      FindIterable<Document> result = dao.GetCollection("records").find(cond);
      MongoCursor<Document> it = result.iterator();
      while (it.hasNext()) {
        Document doc = it.next();
        record fol = new record();
        fol.setAdmission_number(doc.getString("admission_number"));
        fol.setName(doc.getString("name"));
        fol.setWeixin_openid(doc.getString("weixin_openid"));
        fol.setInTime(doc.getDate("inTime"));

        System.out.print("\nname             = " + fol.getName());
        System.out.print("\nadmission_number = " + fol.getAdmission_number());
        System.out.print("\nweixin_openid    = " + fol.getWeixin_openid());
        System.out.print("\nintime           = " + fol.getInTime());
        list.add(fol);
        System.out.print("add to list finished");
      }
      System.out.print("list ready");
      return list;
    } catch (Exception e) {
      e.printStackTrace();
      logger.error(e.toString());
      return null;
    }
  }
 /**
  * 取得指定住院号的记录
  *
  * @param admissionNum 住院号
  * @return 住院记录
  */
 public record GetRecord(String admissionNum) {
   try {
     MongoDAO dao = MongoDAO.GetInstance();
     BasicDBObject cond = new BasicDBObject();
     cond.append("admission_number", new BasicDBObject("$eq", admissionNum));
     FindIterable<Document> result = dao.GetCollection("records").find(cond);
     MongoCursor<Document> it = result.iterator();
     if (it.hasNext()) {
       Document doc = it.next();
       record fol = new record();
       fol.setAdmission_number(doc.getString("admission_number"));
       fol.setName(doc.getString("name"));
       fol.setWeixin_openid(doc.getString("weixin_openid"));
       fol.setLeaveTime(doc.getDate("leaveTime"));
       fol.setInTime(doc.getDate("inTime"));
       fol.setDisease(doc.getString("disease"));
       return fol;
     }
     return null;
   } catch (Exception e) {
     e.printStackTrace();
     logger.error(e.toString());
     return null;
   }
 }
  /**
   * 新用户注册
   *
   * @return
   */
  public boolean addNewRecord(record rec) {
    try {
      System.out.print("add new record begin");

      record exist_record = this.GetRecord(rec.getAdmission_number());
      if (exist_record != null) {
        System.out.print("has record with same id");
        return this.updateRecord(exist_record, rec);
      }
      return this.insertRecord(rec);
    } catch (Exception e) {
      e.printStackTrace();
      logger.error(e.toString());
      return false;
    }
  }
 /** 插入新用户 */
 private boolean insertRecord(record rec) {
   System.out.print("insertRecord begin");
   try {
     MongoDAO dao = MongoDAO.GetInstance();
     System.out.print("insertRecord : insertOne record");
     Map<String, Object> docMap = rec.getDocMap();
     docMap.put("inHospital", true);
     docMap.put("leaveHospital", false);
     docMap.put("followup", false);
     dao.GetCollection("records").insertOne(new Document(docMap));
   } catch (Exception e) {
     e.printStackTrace();
     logger.error(e.toString());
     return false;
   }
   return true;
 }