function actionSendSystemMsg() { //$uid = (int)self::getParam('uid'); $userstr = self::getParam('uid'); $sec = self::getParam('sec'); $content = self::getParam('content'); $desc = self::getParam('desc'); $items = self::getParam('items'); $ready_id = self::getParam('ready_id'); foreach ((array) $items as $value) { $tag = $value['tag']; $num = intval($value['num']); if ($tag == 'gem' && $num > 100000) { echo "error, 元宝不能大于100000"; exit; } } $key = uniqid(); $msg = array('key' => $key, 'time' => app()->now, 'content' => $content, 'type' => 'system'); if ($userstr != "all") { $uids = explode(',', $userstr); $itemmsg = ""; foreach ($uids as $uid) { $uid = getApp()->getRealUid($uid, $sec); $sec = getApp()->getRealSec($sec); $player = new model_Player($uid, $sec); $level = $player->objectGet("base", "level"); foreach ((array) $items as $key => $value) { $tag = $value['tag']; $num = intval($value['num']); if ($tag == 'qiyu_zhidian') { $zhidian_lvl = max(1, $level * 3 - 34); for ($i = 0; $i < $num; $i++) { $items[] = array('tag' => 'qiyu_zhidian', 'level' => $zhidian_lvl, 'num' => 1); } unset($items[$key]); } } if (is_array($items) && count($items) > 0) { $msg['status'] = 'award'; #$msg['content'].="\n$desc"; $cdkey = model_Cdkey::gen($items, $desc, 1, 'def'); $msg['cdkey'] = $cdkey; } $r = model_Chat::sendMsg($msg, $uid, 'origin', $sec); } } else { $r = model_Chat::send($msg, 2, "", "toall", $sec); } if ($r) { $mon = new PL_Db_Mongo(DbConfig::getMongodb('userlogin')); $mon->switchColl('msgready'); $mon = $mon->getmc(); $id = $mon->update(array('ready_id' => (int) $ready_id), array('$set' => array('applicant_status' => 0, 'check_man' => $_SERVER['PHP_AUTH_USER']))); echo json_encode(array('s' => 'OK')); } }
/** * 测试分区 */ function actionTestSec() { $is_test = self::getParam('is_test'); $section_list = array_keys(getApp()->getSectionConfig()); $status = "ok"; $msg = ''; $result = array(); try { foreach ($section_list as $value) { $mc = new PL_Db_Mongo(DbConfig::getSecMongodb("users", $value)); $mc->switchColl($value . "_users"); $fields = array("_id", "level", "exp", "_it", "init_time"); $cond = array(); $user = $mc->findOne($cond, $fields); $result[$value] = $user; if (empty($user)) { $status = 1001; $msg .= "{$value区未查找到用户信息}<br />"; //$status = "error"; } } echo $status; if ($is_test) { echo "<pre>"; echo $msg; echo "user data:<br/>"; var_dump($result); } } catch (Exception $ex) { $status = "error"; echo $status; echo "<pre>"; echo $msg; echo "user data:<br/>"; var_dump($result); var_dump($ex); } }
/** * @author 符璨 * @desc * 从cdkey_task取出待处理的cdkey任务进行处理 * 批量生成cdkey */ public static function action_gen_cdkey() { $redis = DbConfig::getRedis('realtime_stat'); $process_id = getmypid(); //从cdkey中取出一条状态为0(未处理cdkey生成记录),并更新为1(正在处理) $mc = new PL_Db_Mongo(DbConfig::getMongodb('userlogin')); $mc->switchColl('cdkey_task'); $cdkey_task = $mc->findOne(array('status' => 0)); //没有待处理的任务 if ($cdkey_task == NULL) { return; } glog::info("[{$process_id}] gen cdkey worker started", 'cdkey'); $task_id = $cdkey_task['_id']; $mc->update(array('_id' => $task_id), array('$set' => array('status' => 1))); $pa = $cdkey_task; unset($pa['status']); $num = $pa['num']; $task_id = $cdkey_task['_id']; //根据cdkey_task的内容生成cdkey $mc->switchColl('cdkey'); while ($num--) { $pa['_id'] = model_Cdkey::genCdkey(13); $pa['task_id'] = $task_id->__toString(); //try以防有重复的cdkey try { $cdkey = $mc->insert($pa); //redis中统计当前已生成的cdkey数目 $redis->hIncrBy('cdkey_task', $task_id, 1); $redis->lpush("cdkey_{$task_id}", $pa['_id']); } catch (Exception $ex) { $exception_cnt--; $num++; glog::info("[{$process_id}] gen cdkey worker:Duplicated _id {$pa['_id']}", 'cdkey'); if (!$exception_cnt) { break; } continue; } $exception_cnt = 10; } $mc->switchColl('cdkey_task'); $mc->update(array('_id' => $task_id), array('$set' => array('status' => 2))); $redis->hDel('cdkey_task', $task_id); glog::info("[{$process_id}] gen cdkey worker completed", 'cdkey'); }