/**
  * 依据实际情况返回WorkInfoHistoryBaseBO的子类对象
  *
  * @param boParam 用于接收从Action类中传入的参数,是各参数列表的组合,包括smRangeID,givenDate等信息
  * @return WorkInfoHistoryBaseBO的子类对象
  */
 public WorkInfoHistoryBaseBO createBOByUserAndRange(HistoryWorkInfoCreateBOParam boParam) {
   WorkInfoHistoryBaseBO bo = null;
   String id = boParam.getSmRangeID(); // 短信的RangeID
   UserInfo userInfo = boParam.getUserInfo();
   HistoryWorkInfoConditionBean bean = boParam.getBean(); // 传入的界面查询bean
   String userType = userInfo.getType();
   if (id == null) { // 如果短信的RangeID为空,意味着与短信无关,则与历史曲线有关
     id = getRangeID(userType, bean); // 得到适用于历史曲线的rangeID
   }
   if (UserType.PROVINCE.equals(userType)) { // 如果是省移动用户
     if ("11".equals(id)) { // 如果所选范围是“全省范围“
       bo = createBOProvinceMobile(null); // 操作省移动BO子类中实现的方法
     } else {
       bo = createBOCityMobile(id); // 操作市移动BO子类中实现的方法
     }
   } else if (UserType.SECTION.equals(userType)) { // 如果是市移动用户
     // 如果所选范围为用户所在地市
     if ("12".equals(id)) {
       bo = createBOCityMobile(userInfo.getRegionid()); // 操作市移动BO子类中实现的方法
     } else {
       bo = createBOCityContractor(id); // 操作市代维BO子类中实现的方法
     }
   } else if (UserType.CONTRACTOR.equals(userType)) { // 如果是市代维用户
     // 如果所选范围为用户所在代维公司
     if ("22".equals(id)) {
       bo = createBOCityContractor(userInfo.getDeptID()); // 操作市代维BO子类中实现的方法
     } else {
       bo = createBOPatrolman(id); // 操作巡检组BO子类中实现的方法
     }
   }
   return bo;
 }
 /**
  * 创建BO对象
  *
  * @param boParam 用于接收从Action类中传入的参数,是各参数列表的组合,包括smRangeID,givenDate等信息
  * @return BO对象
  */
 public WorkInfoHistoryBaseBO createBO(HistoryWorkInfoCreateBOParam boParam) {
   this.theBoParam = boParam;
   if (theBoParam == null) {
     logger.info("boParam is null");
   } else {
     logger.info(theBoParam.getUserInfo().getRegionID());
   }
   // 依据参数创建BO对象
   WorkInfoHistoryBaseBO bo = createBOByUserAndRange(theBoParam);
   if (bo == null) {
     logger.info("bo is null");
   }
   bo.setBoParam(theBoParam);
   return bo;
 }