Exemplo n.º 1
0
 /**
  * 新增课程及编辑课程方法
  * 新增时只添加主表t_course;编辑时同时编辑子表t_course_开头的子表
  * @param   array   $param  map<string, variant>类型的参数
  *          int     cors_id     课程ID,若为0则表新增;否则表编辑
  *          string  cors_name   课程名称
  *          int     cors_tiid   课程所属培训机构.编辑时不可修改
  *          int     cors_cmid   授课模式,编辑时不可修改
  *          int     cors_stunumtype 授课班级类型
  *          int     cors_flag   状态,-1已删 0禁用 1启用 大于1表待审
  *          string  cors_url    网址
  *          string  grade_id_str    形如1,2,3样式的年级ID列表,0表所有年级
  *          string  subject_id_str  形如1,2,3样式的学科ID列表,0表所有学科
  *          string  class_id_str    形如1,2,3样式的考试类型ID列表
  *          map<int,int> kid_knprocid_pairs 知识点列表,键为知识点ID,值为
  *                                  认知类型
  *          string  cors_memo       备注
  *          list<map<string, variant>>  cc_list 课程校区子表数据
  *                  int     cc_id       课程校区子表ID,若为0表示新增
  *                  int     cc_corsid   所属课程ID
  *                  int     cc_tcid     若为空则表示为一对一课程;否则表示
  *                                      班级授课所属的校区ID
  *                  int     cc_ctfid    教师来源ID
  *                  string  cc_classtime 上课时间
  *                  date    cc_begindate    开课日期
  *                  date    cc_enddate      结束日期
  *                  int     cc_startanytime 是否随时开课,一对一时该值方可
  *                                          为1(此时cc_begindate、cc_enddate
  *                                          为空),否则必须为0
  *                  int     cc_hours    课时
  *                  double  cc_price    课程费用
  *                  int     cc_provid   上课地址省
  *                  int     cc_cityid   上课地址市
  *                  int     cc_areaid   上课地址区
  *                  string  cc_addr     上课地址明细
  *                  string  cc_ctcperson    联系人
  *                  string  cc_ctcphone     联系电话
  */
 public function setCorsFunc($param)
 {
     $resp = new AjaxResponse();
     $cors_id = $param['cors_id'] = intval($param['cors_id']);
     $param = Func::param_copy($param, 'cors_id', 'cors_name', 'cors_tiid', 'cors_cmid', 'cors_stunumtype', 'cors_flag', 'cors_url', 'grade_id_str', 'subject_id_str', 'class_id_str', 'kid_knprocid_pairs', 'cors_memo', 'cc_list', 'kid_all');
     if ($param['cors_id'] == 0) {
         unset($param['cors_id']);
         unset($param['cc_list']);
         unset($param['cors_memo']);
         if (!isset($param['kid_knprocid_pairs'])) {
             $param['kid_knprocid_pairs'] = array();
         }
     } else {
         if ($param['cors_memo'] == '') {
             $param['cors_memo'] = NULL;
         }
     }
     if (isset($param['kid_knprocid_pairs'])) {
         if ($param['kid_all'] == '1') {
             $param['kid_knprocid_pairs'] = array(0 => 0);
         }
     } else {
         if ($param['kid_all'] == '1') {
             $param['kid_knprocid_pairs'] = array(0 => 0);
         }
     }
     unset($param['kid_all']);
     if ($param['cors_name'] == '') {
         $resp->alert('课程名称不可为空');
         return $resp;
     }
     if (!Validate::isInt($param['cors_tiid'])) {
         $resp->alert('所属培训机构不可为空');
         return $resp;
     }
     if (!Validate::isInt($param['cors_cmid']) || $param['cors_cmid'] < 1) {
         $resp->alert('授课模式必须选择');
         return $resp;
     }
     if (!Validate::isInt($param['cors_stunumtype']) || $param['cors_stunumtype'] < 1) {
         $resp->alert('班级类型必须选择');
         return $resp;
     }
     if ($param['cors_cmid'] == 1 && $param['cors_stunumtype'] != 1 || $param['cors_cmid'] != 1 && $param['cors_stunumtype'] == 1) {
         $resp->alert('授课模式和班级类型不匹配');
         return $resp;
     }
     if (!Validate::isInt($param['cors_flag'])) {
         $resp->alert('状态标志必须选择');
         return $resp;
     }
     if ($param['cors_url'] == '') {
         $param['cors_url'] = NULL;
     }
     if (!Validate::isJoinedIntStr($param['grade_id_str'])) {
         $resp->alert('年级必须选择');
         return $resp;
     }
     if (!Validate::isJoinedIntStr($param['subject_id_str'])) {
         $resp->alert('学科必须选择');
         return $resp;
     }
     if (isset($param['class_id_str']) && $param['class_id_str'] != '' && !Validate::isJoinedIntStr($param['subject_id_str'])) {
         $resp->alert('考试类型不正确');
         return $resp;
     }
     $param['gradeid_list'] = explode(',', $param['grade_id_str']);
     $param['subjectid_list'] = explode(',', $param['subject_id_str']);
     if (isset($param['class_id_str']) && $param['class_id_str'] != '') {
         $param['classid_list'] = explode(',', $param['class_id_str']);
     }
     if ($cors_id) {
         // 编辑功能
         $campus_num = count($param['cc_list']);
         if ($campus_num < 1) {
             $resp->alert('请至少添加一个校区');
             return $resp;
         }
         $err = NULL;
         $tcid_arr = array();
         for ($i = 0; $i < $campus_num; $i++) {
             $param['cc_list'][$i] = Func::param_copy($param['cc_list'][$i], 'cc_id', 'cc_corsid', 'cc_tcid', 'cc_ctfid', 'cc_classtime', 'cc_begindate', 'cc_enddate', 'cc_startanytime', 'cc_hours', 'cc_price', 'cc_provid', 'cc_cityid', 'cc_areaid', 'cc_addr', 'cc_ctcperson', 'cc_ctcphone', 'cct_ctid_str');
             $param['cc_list'][$i]['cc_corsid'] = $cors_id;
             $err_pre = '';
             if ($param['cors_cmid'] != 1) {
                 $err_pre = '第' . ($i + 1) . '个校区';
                 if (!Validate::isInt($param['cc_list'][$i]['cc_tcid'])) {
                     $err = $err_pre . '没有选择具体的培训校区';
                     break;
                 }
                 $param['cc_list'][$i]['cc_tcid'] = intval($param['cc_list'][$i]['cc_tcid']);
                 if ($param['cc_list'][$i]['cc_tcid']) {
                     $tcid_arr[] = intval($param['cc_list'][$i]['cc_tcid']);
                 }
             } else {
                 $err_pre = '第' . ($i + 1) . '个校区';
                 if ($param['cc_list'][$i]['cc_tcid'] == '') {
                     $param['cc_list'][$i]['cc_tcid'] = NULL;
                 } else {
                     if (!Validate::isInt($param['cc_list'][$i]['cc_tcid'])) {
                         $err = $err_pre . '没有选择具体的培训校区';
                         break;
                     }
                     $param['cc_list'][$i]['cc_tcid'] = intval($param['cc_list'][$i]['cc_tcid']);
                     if ($param['cc_list'][$i]['cc_tcid']) {
                         $tcid_arr[] = intval($param['cc_list'][$i]['cc_tcid']);
                     }
                 }
             }
             if (!isset($param['cc_list'][$i]['cct_ctid_str'])) {
                 $param['cc_list'][$i]['cct_ctid_str'] = '';
             }
             /*
                             if ($param['cc_list'][$i]['cct_ctid_str'] == '')
                             {
                $err = $err_pre . '请添加授课教师';
                break;
                             }
             */
             if (strlen($param['cc_list'][$i]['cct_ctid_str']) > 0) {
                 if (!Validate::isJoinedIntStr($param['cc_list'][$i]['cct_ctid_str'])) {
                     $err = $err_pre . '请添加正确的授课教师';
                     break;
                 }
                 $param['cc_list'][$i]['teacherid_list'] = explode(',', $param['cc_list'][$i]['cct_ctid_str']);
             } else {
                 $param['cc_list'][$i]['teacherid_list'] = array();
             }
             unset($param['cc_list'][$i]['cct_ctid_str']);
             if (!Validate::isInt($param['cc_list'][$i]['cc_ctfid'])) {
                 $err = $err_pre . '请选择教师来源';
                 break;
             }
             if ($param['cc_list'][$i]['cc_classtime'] == '') {
                 $err = $err_pre . '请填写课程时间';
                 break;
             }
             if ($param['cc_list'][$i]['cc_startanytime'] == '1') {
                 $param['cc_list'][$i]['cc_startanytime'] = 1;
             } else {
                 $param['cc_list'][$i]['cc_startanytime'] = 0;
                 if ($param['cc_list'][$i]['cc_begindate'] == '') {
                     $err = $err_pre . '请填写课程周期开课日期';
                     break;
                 }
                 if (!Validate::isDate($param['cc_list'][$i]['cc_begindate'])) {
                     $err = $err_pre . '请填写正确的课程周期开课日期';
                     break;
                 }
                 if ($param['cc_list'][$i]['cc_enddate'] == '') {
                     $err = $err_pre . '请填写课程周期结束日期';
                     break;
                 }
                 if (!Validate::isDate($param['cc_list'][$i]['cc_enddate'])) {
                     $err = $err_pre . '请填写正确的课程周期结束日期';
                     break;
                 }
                 if (strcmp($param['cc_list'][$i]['cc_enddate'], $param['cc_list'][$i]['cc_begindate']) < 0) {
                     $err = $err_pre . '课程结束日期应大于开始日期';
                     break;
                 }
             }
             if (!Validate::isInt($param['cc_list'][$i]['cc_hours'])) {
                 $err = $err_pre . '请填写课时';
                 break;
             }
             if (!is_numeric($param['cc_list'][$i]['cc_price'])) {
                 $err = $err_pre . '请填写课程收费';
                 break;
             }
             if ($param['cc_list'][$i]['cc_provid'] == '0') {
                 $err = $err_pre . '请选择上课地址所在省市区';
                 break;
             }
             if ($param['cc_list'][$i]['cc_addr'] == '') {
                 $err = $err_pre . '请填写上课地址';
                 break;
             }
         }
         if ($err) {
             $resp->alert($err);
             return $resp;
         }
         if (count($tcid_arr) > 0) {
             if (count($tcid_arr) != count(array_unique($tcid_arr))) {
                 $resp->alert('校区列表中有相同的机构校区,请检查');
                 return $resp;
             }
         }
     }
     try {
         if ($cors_id) {
             $db = Fn::db();
             $cc_id_arr = array();
             $rows = CourseModel::courseCampusList("cc_id", array('cc_corsid' => $cors_id));
             if ($rows) {
                 foreach ($rows as $row) {
                     $cc_id_arr[] = intval($row['cc_id']);
                 }
             }
             $bOk = false;
             if (!$db->beginTransaction()) {
                 throw new Exception('启动存储过程失败');
             }
             $set_cc_id_arr = array();
             try {
                 CourseModel::setCourse($param, false);
                 foreach ($param['cc_list'] as $row) {
                     $row['cc_id'] = intval($row['cc_id']);
                     if ($row['cc_id']) {
                         CourseModel::setCourseCampus($row, false);
                         $set_cc_id_arr[] = $row['cc_id'];
                     } else {
                         CourseModel::addCourseCampus($row, false);
                     }
                 }
                 $remove_cc_id_arr = array_diff($cc_id_arr, $set_cc_id_arr);
                 if ($remove_cc_id_arr) {
                     CourseModel::removeCourseCampus(implode(',', $remove_cc_id_arr), false);
                 }
                 $bOk = $db->commit();
                 if (!$bOk) {
                     $db->rollBack();
                 }
             } catch (Exception $e) {
                 $db->rollBack();
                 throw $e;
             }
             if ($bOk) {
                 admin_log('edit', 'course', "cors_id: {$cors_id}");
                 $resp->redirect(site_url('admin/course/corsinfo/' . $cors_id));
             } else {
                 $resp->alert('执行存储过程失败');
             }
         } else {
             // 新增
             $cors_id = CourseModel::addCourse($param);
             admin_log('add', 'course', "cors_id: {$cors_id}");
             $resp->redirect(site_url('admin/course/setcorsinfo/' . $cors_id));
         }
     } catch (Exception $e2) {
         $resp->alert($e2->getMessage());
     }
     return $resp;
 }