/*
   * 查询批次下的所有学习中心
   *
   * @see
   * net.cedu.biz.enrollment.BranchEnrollQuotaBiz#findBranchEnrollQuotaByBId
   * (int)
   */
  public List<BranchEnrollQuota> findBranchEnrollQuotaByBId(int batchId) throws Exception {
    List<BranchEnrollQuota> branchenrollquotalst = null;
    PageParame p = new PageParame();
    String hqlparam = "";
    List<Object> list = new ArrayList<Object>();
    if (batchId != 0) {
      hqlparam += " and batchId =" + Constants.PLACEHOLDER;
      list.add(batchId);
    }
    hqlparam += " and deleteFlag=" + Constants.PLACEHOLDER;
    list.add(Constants.DELETE_FALSE);
    p.setHqlConditionExpression(hqlparam);
    p.setValues(list.toArray());

    Long[] branchenrollquotaids = branchenrollquotaDao.getIDs(p);

    if (branchenrollquotaids != null && branchenrollquotaids.length != 0) {
      branchenrollquotalst = new ArrayList<BranchEnrollQuota>();
      for (int i = 0; i < branchenrollquotaids.length; i++) {
        BranchEnrollQuota beq =
            this.findBranchEnrollQuotaById(Integer.valueOf(branchenrollquotaids[i].toString()));
        BranchEnrollQuota branchenrollquota = beq;
        Branch branch = branchBiz.findBranchById(branchenrollquota.getBranchId());
        if (branch != null) {
          branchenrollquota.setBranchName(branch.getName());
        }

        branchenrollquotalst.add(branchenrollquota);
      }
    }
    return branchenrollquotalst;
  }
 /*
  * 刷新并添加没有的学习中心指标
  *
  * @see net.cedu.biz.enrollment.BranchEnrollQuotaBiz#addRefreshBranchEnrollQuotaBybatchId(int, int)
  */
 public int addRefreshBranchEnrollQuotaBybatchId(int batchId, int userId) throws Exception {
   int count = 0;
   List<Object> lst = new ArrayList();
   String hql = "";
   // 批次
   hql += " and batchId=" + Constants.PLACEHOLDER;
   lst.add(batchId);
   // 未删除的
   hql += "and deleteFlag=" + Constants.PLACEHOLDER;
   lst.add(Constants.DELETE_FALSE);
   List<BranchEnrollQuota> brqlist = branchenrollquotaDao.getByProperty(hql, lst.toArray());
   List<Branch> branchlist =
       branchDao.getByProperty(
           " and parentId > "
               + Constants.PLACEHOLDER
               + "and deleteFlag="
               + Constants.PLACEHOLDER
               + " order by id desc ",
           new Object[] {BranchEnum.Parent.value(), Constants.DELETE_FALSE});
   if (brqlist != null && brqlist.size() > 0 && branchlist != null && branchlist.size() > 0) {
     int branchsize = branchlist.size();
     int brqsize = brqlist.size();
     if (branchsize <= brqsize) {
       count = 1;
     } else {
       int index = 0;
       for (Branch branch : branchlist) {
         boolean isback = false;
         for (BranchEnrollQuota brq : brqlist) {
           if (branch.getId() == brq.getId()) {
             isback = true;
             break;
           }
         }
         if (!isback) {
           BranchEnrollQuota beq = new BranchEnrollQuota();
           beq.setBatchId(batchId);
           beq.setBranchId(branch.getId());
           beq.setTarget(0);
           beq.setCreatorId(userId);
           beq.setCreatedTime(new Date());
           this.addBranchEnrollQuota(beq);
           index++;
         }
         if (brqsize + index >= branchsize) {
           break;
         }
       }
       count = 2;
     }
   }
   return count;
 }
  /*
   * 查询学习中心指标按批次和中心Id
   *
   * @see net.cedu.biz.enrollment.BranchEnrollQuotaBiz#
   * findBranchEnrollQuotaByBtachIdAndBranchId(int, int)
   */
  public BranchEnrollQuota findBranchEnrollQuotaByBtachIdAndBranchId(int batchId, int branchId)
      throws Exception {
    BranchEnrollQuota beq = null;
    PageParame p = new PageParame();
    String hqlparam = "";
    List<Object> list = new ArrayList<Object>();
    if (batchId != 0) {
      hqlparam += " and batchId=" + Constants.PLACEHOLDER;
      list.add(batchId);
    }
    if (branchId != 0) {
      hqlparam += " and branchId=" + Constants.PLACEHOLDER;
      list.add(branchId);
    }
    hqlparam += " and deleteFlag=";
    list.add(Constants.DELETE_FALSE);
    p.setHqlConditionExpression(hqlparam);
    p.setValues(list.toArray());
    Long[] branchenrollquotaids = branchenrollquotaDao.getIDs(p);
    if (branchenrollquotaids != null && branchenrollquotaids.length != 0) {

      for (int i = 0; i < branchenrollquotaids.length; i++) {
        // 修改人董溟浩,原作者循环取最后一个,逻辑有问题,所以改为跳过之前的直接取最后一个
        if (i == branchenrollquotaids.length - 1) {
          beq = new BranchEnrollQuota();
          beq = this.findBranchEnrollQuotaById(Integer.valueOf(branchenrollquotaids[i].toString()));
          GlobalEnrollBatch globalenrollbatch =
              globalenrollbatchBiz.findGlobalEnrollBatchById(beq.getBatchId());
          if (globalenrollbatch != null) {
            beq.setBatchName(globalenrollbatch.getBatch());
          }
          Branch branch = branchBiz.findBranchById(beq.getBranchId());
          if (branch != null) {
            beq.setBranchName(branch.getName());
          }
        }
      }
    }
    return beq;
  }
  /*
   * 批量添加学习中心指标
   *
   * @see
   * net.cedu.biz.enrollment.BranchEnrollQuotaBiz#addBranchEnrollQuotas(int,
   * int[], int[], int)
   */
  public boolean addBranchEnrollQuotas(
      int batchId, Object[] branchIds, Object[] branchTarget, int managerId) throws Exception {

    if (batchId != 0
        && branchIds != null
        && branchIds.length > 0
        && branchTarget != null
        && branchTarget.length > 0) {

      deleteBranchEnrollQuotaBybatchId(batchId);
      for (int i = 0; i < branchIds.length; i++) {
        BranchEnrollQuota beq = new BranchEnrollQuota();
        beq.setBatchId(batchId);
        beq.setBranchId(Integer.valueOf(branchIds[i].toString()));
        beq.setTarget(Integer.valueOf(branchTarget[i].toString()));
        beq.setCreatorId(managerId);
        beq.setCreatedTime(new Date());
        this.addBranchEnrollQuota(beq);
      }
      EnrollQuotaBatch eqb = eqbBiz.findEnrollQuotaBatchByQuotaIdBatchId(0, batchId);
      eqb.setTypes(Constants.STATUS_ENABLED);
      eqbBiz.updateEnrollQuotaBatch(eqb);
      return true;
    }
    return false;
  }
  /*
   * 查询学习中心指标
   *
   * @see
   * net.cedu.biz.enrollment.BranchEnrollQuotaBiz#findBranchEnrollQuotalist
   * (net.cedu.model.page.PageResult)
   */
  public List<BranchEnrollQuota> findBranchEnrollQuotalist(
      int batchId, PageResult<BranchEnrollQuota> pr) throws Exception {
    // 学习中心招生批次集合
    List<BranchEnrollQuota> branchEnrollQuotaList =
        branchenrollquotaDao.findBranchEnrollQuotaList(batchId);
    if (branchEnrollQuotaList != null && branchEnrollQuotaList.size() != 0) {
      BranchEnrollQuota branchenrollquota = null;
      // key:学习中心ID_全局批次ID_院校ID value:招生指标
      Map<String, Integer> targetMap = academyEnrollQuotaBiz.getTargetByBatch(batchId);
      // key:学习中心ID_全局批次ID_院校ID value:完成指标
      Map<String, Integer> targetComMap = studentDao.getCompleteCountAll(batchId);
      for (int i = 0; i < branchEnrollQuotaList.size(); i++) {
        branchenrollquota = branchEnrollQuotaList.get(i);
        // 学习中心名称
        Branch branch = branchBiz.findBranchById(branchenrollquota.getBranchId());
        if (branch != null) {
          branchenrollquota.setBranchName(branch.getName());
        }
        //
        List<Academy> academylst =
            academybatchbranchBiz.findAcademyByBranchIdAndGlobalBatchId(
                branchenrollquota.getBranchId(), branchenrollquota.getBatchId());
        if (academylst != null && academylst.size() > 0) {
          for (int j = 0; j < academylst.size(); j++) {
            // 克隆类
            Academy academy1 = academylst.get(j);
            Academy academy = academy1.clone();
            // 指标
            // academy.setTarget(getZhibiao(branchenrollquota.getBatchId(),branchenrollquota.getBranchId(), academy.getId()));
            Integer target = targetMap.get(branchenrollquota.getBranchId() + "_" + academy.getId());
            academy.setTarget(target == null ? 0 : target);
            // 完成指标
            // academy.setComplete(studentBiz.findStudentCount(batchId,academy.getId(),0));
            Integer targetCom =
                targetComMap.get(branchenrollquota.getBranchId() + "_" + academy.getId());
            academy.setComplete(targetCom == null ? 0 : targetCom);
            academylst.set(j, academy);
          }

          branchenrollquota.setAcademylst(academylst);
        }
      }
    }

    return branchEnrollQuotaList;
  }