function _callbackSchooldata($school) { $school['first_char'] = getFirstChar($school['name']); return $school; }
public function serialMatch_release_presubmit() { // 检查提交的比赛是否符合提交条件 if ($_POST['ensureArrange'] == 1) { for ($i = 1; $i <= $groupNum; $i++) { // 循环组 for ($j = 1; $j < $eachGroupAmount;) { // 组内循环成员 if ($_POST[$groupArray[$i] . $j] == null || $_POST[$groupArray[$i] . $j] == '') { $this->error('有部分球员未安排赛事,请重新安排!'); } } } } // 获取系列赛id $id0 = $_GET['id']; $groupNum = $_POST['groupNum']; $type = $_GET['type']; if ($id0 == null || $id0 == '') { $this->error('无有效参数!'); } $s = new SaeStorage(); // 获取基本情况 $ACTIVITY = M('activity'); $activity0 = $ACTIVITY->where('id=' . $id0)->getField('id, title, content, start_time, end_time, headcount, cover, scale_num, state, result, champion_id'); $activity = current($activity0); if ($activity['cover'] != 1 || $s->fileExists("imgdomain", 'post/' . $id0 . '.jpg') == FALSE) { $activity['cover'] = "__IMG__/activity.jpg"; } else { $activity['cover'] = $s->getUrl("imgdomain", 'post/' . $id0 . '.jpg'); } // 赛事安排类型 $matchArrangeType = 0; // 0表示小组赛,1表示淘汰赛,2表示超出系统安排范围 // 参赛总人数 $ACTIVITY = M('activity'); $headcount = $ACTIVITY->where('id=' . $_GET['id'])->GetField('headcount'); // 如果是淘汰赛,计算系统预设的分组数、每组人数和轮空数 $groupNum = 0; $eachGroupAmount = 0; $groupVoidArray = array(); // 轮空数组 $groupArray = array("1" => "A", "2" => "B", "3" => "C", "4" => "D", "5" => "E", "6" => "F", "7" => "G", "8" => "H"); $groupRoundNum = 0; // 淘汰赛 if ($type == 1) { $matchArrangeType = 1; if ($headcount <= 8) { $groupNum = 2; $diff = 8 - $headcount; // 轮空数 $eachGroupAmount = 4; $groupRoundNum = 2; $scaleNum = 8; } else { if ($headcount <= 16) { $groupNum = 2; $diff = 16 - $headcount; // 轮空数 $eachGroupAmount = 8; $groupRoundNum = 3; $scaleNum = 16; } else { if ($headcount <= 32) { $groupNum = 4; $diff = 32 - $headcount; // 轮空数 $eachGroupAmount = 8; $groupRoundNum = 3; $scaleNum = 32; } else { if ($headcount <= 64) { $groupNum = 4; $diff = 64 - $headcount; // 轮空数 $eachGroupAmount = 16; $groupRoundNum = 4; $scaleNum = 64; } else { if ($headcount <= 128) { $groupNum = 8; $diff = 128 - $headcount; // 轮空数 $eachGroupAmount = 16; $groupRoundNum = 4; $scaleNum = 128; } else { if ($headcount <= 256) { $groupNum = 8; $diff = 256 - $headcount; // 轮空数 $eachGroupAmount = 32; $groupRoundNum = 5; $scaleNum = 256; } else { $matchArrangeType = 2; } } } } } } // 计算每组轮空数 if ($matchArrangeType != 2) { $j = 1; $round = 1; for ($i = 1; $i <= $diff; $i++) { $groupVoidArray[$j][$round * 2] = 1; $j++; if ($j > $groupNum) { $round++; $j = 1; } } } } else { $matchArrangeType = 0; $groupNum = $_POST['groupNum']; $eachGroupAmount = floor($headcount / $groupNum); $offset = $groupNum - $headcount % $groupNum; if ($offset > 0) { $eachGroupAmount++; } // 计算每组轮空情况 $j = $groupNum; for ($i = 1; $i <= $offset; $i++) { $groupVoidArray[$j][$eachGroupAmount] = 1; $j--; } } // --------------确认安排赛事--------------- if ($_POST['ensureArrange'] == 1) { // 更新activity $ACTIVITY = M('activity'); $ACTIVITY->id = $id0; $ACTIVITY->scale_num = $scaleNum; $ACTIVITY->group_num = $groupNum; $SERIAL_MATCH_USER = M('serial_match_user'); $SERIAL_BASE_MATCH = M('serial_base_match'); $BASE_MATCH = M('base_match'); // serialMatchUser表提交数据变量 $serialMatchUserItemArray = array(); $serialMatchUserItemArray['serial_match_id'] = $id0; $serialMatchUserItemArray['round'] = 1; $serialMatchUserItemArray['type'] = $type; $serialMatchUserArray = array(); // serialBaseMatch表提交数据变量 $serialBaseMatchItemArray = array(); $serialBaseMatchItemArray['serial_match_id'] = $id0; $serialBaseMatchItemArray['type'] = $type; $serialBaseMatchArray = array(); // baseMatch表提交数据变量 $baseMatchArray = array(); $baseMatchArray['serial_match_id'] = $id0; $baseMatchArray['state'] = 0; $baseMatchArray['update_user'] = $_SESSION['tennis-user']['id']; $d = date('Y-m-d H:i:s'); $baseMatchArray['update_date'] = $d; $baseMatchArray['start_date'] = $activity['start_time']; $baseMatchArray['end_date'] = $activity['end_time']; $sIndex = 0; // 存储到serial_match_user变量中 for ($i = 1; $i <= $groupNum; $i++) { for ($j = 1; $j <= $eachGroupAmount; $j++) { if ($_POST[$groupArray[$i] . $j] != 0) { $serialMatchUserItemArray['user_id'] = $_POST[$groupArray[$i] . $j]; $serialMatchUserItemArray['group'] = $groupArray[$i]; $serialMatchUserItemArray['no'] = $j; $serialMatchUserArray[$sIndex] = $serialMatchUserItemArray; $sIndex++; } } } // 更新serial_match_user表 $result = $SERIAL_MATCH_USER->addAll($serialMatchUserArray); if ($result === false) { $this->error("保存serial_match_user出问题了,请联系管理员!"); } $sIndex = 0; // 分类型更新base_match,serial_base_match // 小组赛 if ($type == 0) { for ($i = 1; $i <= $groupNum; $i++) { // 循环组 for ($j = 1; $j < $eachGroupAmount; $j++) { // 组内循环成员 for ($k = $j + 1; $k <= $eachGroupAmount; $k++) { // 组内成员全排列 if ($_POST[$groupArray[$i] . $j] != 0 && $_POST[$groupArray[$i] . $k] != 0) { $tmp_id = $BASE_MATCH->data($baseMatchArray)->add(); if ($tmp_id === false) { $this->error("保存base_match出问题了,请联系管理员!"); } else { // 存储到serial_base_match变量中 $serialBaseMatchItemArray['base_match_id'] = $tmp_id; $serialBaseMatchItemArray['player1_id'] = $_POST[$groupArray[$i] . $j]; $serialBaseMatchItemArray['player2_id'] = $_POST[$groupArray[$i] . $k]; $serialBaseMatchItemArray['group1'] = $groupArray[$i]; $serialBaseMatchItemArray['group2'] = $groupArray[$i]; $serialBaseMatchItemArray['no1'] = $j; $serialBaseMatchItemArray['no2'] = $k; $serialBaseMatchArray[$sIndex] = $serialBaseMatchItemArray; $sIndex++; } } } } } // 更新serial_base_match $result = $SERIAL_BASE_MATCH->addAll($serialBaseMatchArray); if ($result === false) { $this->error("保存serial_base_match出问题了,请联系管理员!"); } } else { if ($type == 1) { // 排列小组内淘汰赛 $tmp_each_group_amount = $eachGroupAmount; $r = 1; for (; $r <= $groupRoundNum; $r++) { for ($i = 1; $i <= $groupNum; $i++) { // 循环组 for ($j = 1; $j < $tmp_each_group_amount;) { // 组内循环成员 $tmp_id = $BASE_MATCH->data($baseMatchArray)->add(); if ($tmp_id === false) { $this->error("保存base_match出问题了,请联系管理员!"); } else { // 存储到serial_base_match变量中 $serialBaseMatchItemArray['base_match_id'] = $tmp_id; if ($r == 1) { $serialBaseMatchItemArray['player1_id'] = $_POST[$groupArray[$i] . $j]; $serialBaseMatchItemArray['player2_id'] = $_POST[$groupArray[$i] . ($j + 1)]; } else { $serialBaseMatchItemArray['player1_id'] = -1; $serialBaseMatchItemArray['player2_id'] = -1; } $serialBaseMatchItemArray['group1'] = $groupArray[$i]; $serialBaseMatchItemArray['group2'] = $groupArray[$i]; $serialBaseMatchItemArray['round1'] = $r; $serialBaseMatchItemArray['round2'] = $r; $serialBaseMatchItemArray['no1'] = $j; $serialBaseMatchItemArray['no2'] = $j + 1; $serialBaseMatchArray[$sIndex] = $serialBaseMatchItemArray; $sIndex++; } $j += 2; } } $tmp_each_group_amount /= 2; } // 排列小组出线后淘汰赛 $tmp_each_group_amount *= $groupNum; while ($tmp_each_group_amount >= 1) { $j = 1; while ($j < $tmp_each_group_amount) { // 组内循环成员 $tmp_id = $BASE_MATCH->data($baseMatchArray)->add(); if ($tmp_id === false) { $this->error("保存base_match出问题了,请联系管理员!"); } else { // 存储到serial_base_match变量中 $serialBaseMatchItemArray['base_match_id'] = $tmp_id; $serialBaseMatchItemArray['player1_id'] = -1; $serialBaseMatchItemArray['player2_id'] = -1; $serialBaseMatchItemArray['group1'] = 'S'; $serialBaseMatchItemArray['group2'] = 'S'; $serialBaseMatchItemArray['round1'] = $r; $serialBaseMatchItemArray['round2'] = $r; $serialBaseMatchItemArray['no1'] = $j; $serialBaseMatchItemArray['no2'] = $j + 1; $serialBaseMatchArray[$sIndex] = $serialBaseMatchItemArray; $sIndex++; } $j += 2; } $r++; $tmp_each_group_amount /= 2; } // 更新serial_base_match $result = $SERIAL_BASE_MATCH->addAll($serialBaseMatchArray); if ($result === false) { $this->error("保存serial_base_match出问题了,请联系管理员!"); } } } // 完成安排,跳转到赛事页面 $this->success('安排成功!', '__APP__/Admin/Match/serialMatch_update_detail?id=' . $id0); } // 获取参赛选手列表 $playerList = array(); $all_players_id = array(); $ACTIVITY_USER = M('activity_user'); $player = $ACTIVITY_USER->where('activity_id=' . $_GET['id'])->join('INNER JOIN user ON user.id=activity_user.user_id')->getField('user.id, user_id, truename'); foreach ($player as $key => $value) { $firstChar = getFirstChar($value['truename']); $user_name = $value['truename']; $user_id = $value['user_id']; $playerList[$user_id]['id'] = $user_id; $playerList[$user_id]['name'] = $user_name; $playerList[$user_id]['letter'] = $firstChar; array_push($all_players_id, $value['user_id']); } // 获取已安排参赛选手及对应位置 // 已安排选手列表 $has_set_players = array(); // 等待随机插入的选手列表 $rand_players = array(); // 安排好用于返回的选手 $players = array(); // 获取已安排选手列表 for ($i = 1; $i <= $groupNum; $i++) { for ($j = 1; $j <= $eachGroupAmount; $j++) { $index = $groupArray[$i] . $j; if ($_POST[$index] > 0) { // 已安排 array_push($has_set_players, $_POST[$index]); } } } // 获取未安排选手列表 $rand_players = array_diff($all_players_id, $has_set_players); shuffle($rand_players); // 安排这些未安排选手 for ($i = 1; $i <= $groupNum; $i++) { for ($j = 1; $j <= $eachGroupAmount; $j++) { $index = $groupArray[$i] . $j; if ($_POST[$index] == null || $_POST[$index] == '') { // 待安排 $tmp_id = array_shift($rand_players); if ($tmp_id == null || $tmp_id == '') { break; } $players[$groupArray[$i]][$j][id] = $tmp_id; $players[$groupArray[$i]][$j][name] = $playerList[$tmp_id]['name']; $players[$groupArray[$i]][$j][letter] = $playerList[$tmp_id]['letter']; } else { if ($_POST[$index] > 0) { $tmp_id = $_POST[$index]; $players[$groupArray[$i]][$j][id] = $tmp_id; $players[$groupArray[$i]][$j][name] = $playerList[$tmp_id]['name']; $players[$groupArray[$i]][$j][letter] = $playerList[$tmp_id]['letter']; } } } } // 字母列表 $letterList = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); // 返回参数 $this->assign("id", $_GET['id']); $this->assign("matchArrangeType", $matchArrangeType); $this->assign("groupVoidArray", $groupVoidArray); $this->assign("groupNum", $groupNum); $this->assign("eachGroupAmount", $eachGroupAmount); $this->assign("groupArray", $groupArray); $this->assign("activity", $activity); $this->assign("players", $players); $this->assign("letterList", $letterList); $this->assign("hasSetPlayer", 1); $this->assign("groupNum", $groupNum); $this->display(); }
public function otheradd() { $names = I('post.names'); $campus = I('post.campus'); $room = I('post.room'); $number = I('post.number'); $unit = I('post.unit'); if ($names == '' || $campus == '' || $room == '' || $number == '' || $unit == '') { $this->ajaxReturn("数据为空"); } elseif ($names == '请选择' || $campus == '请选择' || $room == '请选择') { $this->ajaxReturn("请选择"); } elseif ($number <= 0) { $this->ajaxReturn("数量必须大于0"); } preg_match_all("/./u", $names, $arr); //拆分汉字 $arrayName = $arr[0]; //赋值名称字符串 $strname = getFirstChar($arrayName[0]); if (count($arrayName, 0) > 1) { for ($j = 1; $j < count($arrayName, 0); $j++) { $strname = $strname . getFirstChar($arrayName[$j]); } } $Other = M('AssetOther'); for ($i = 0; $i < $number; $i++) { $Other->create(); $Other->seq = $strname . '-' . NOW_TIME . '-' . $i; $Other->start = date("Y-m-d H:i:s", NOW_TIME); $Other->number = '1'; $Other->add(); } if ($Other) { $this->ajaxReturn(true); } else { $this->ajaxReturn("添加失败"); } }