/** * 新增课程及编辑课程方法 * 新增时只添加主表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; }