$redis_conf['host'], 'port' => $redis_conf['port'], 'passwd' => $redis_conf['passwd'] )); return $r; } protected function getMysql($account_id) { $mysql_conf = getMysqlConfig(crc32($account_id)); $conn = new phpcommon\Mysql(array( 'host' => $mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => DBNAME_PREFIX . $mysql_conf['instance_id'] )); return $conn; } protected function getMailMysql() { $mysql_conf = getMysqlConfig(1); $conn = new phpcommon\Mysql(array( 'host' => $mysql_conf['host'], 'port' => $mysql_conf['port'], 'user' => $mysql_conf['user'], 'passwd' => $mysql_conf['passwd'], 'dbname' => MAILDBNAME )); return $conn; } public function list() { $account_id = $_REQUEST['account_id']; //登录校验 $login = loginVerify($account_id, $_REQUEST['session_id']); if (!$login) { phpcommon\sendError(ERR_USER_BASE + 1, 'session无效'); return; } $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $mailconn = $this->getMailMysql(); if (!$mailconn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家1'); return; } $userrow = $conn->execQueryOne( 'SELECT create_time FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id ) ); if (!$userrow) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $usercreate = $userrow['create_time']; $nowtime = time(); $mailrows = $mailconn->execQuery( ' SELECT mail_id, subject, content, attachments FROM t_mail WHERE 1=1 AND deleted=0 ' . ' AND (user_reg_start_time=0 OR user_reg_end_time=0 OR (user_reg_start_time<:createtime AND user_reg_end_time>:createtime) ' . ' AND expiretime>:nowtime ' . ' AND recipients="" OR recipients LIKE "%:accountid%";', array( ':createtime' => $usercreate, ':nowtime' => $nowtime, ':accountid' => $account_id ) ); $usermails = array(); $newmails = array(); if ($mailrows) { $usermailrows = $conn->execQuery( 'SELECT * FROM t_inbox WHERE account_id=:accountid AND expiretime>:nowtime AND createtime>:nowtime-86400*30 ORDER BY idx DESC LIMIT 30;', array( ':accountid' => $account_id, ':nowtime' => $nowtime, ) ); if ($usermailrows) { foreach ($mailrows as $mailitem) { $mailstatus = 0; $found = false; foreach ($usermailrows as $usermailitem) { if ($mailitem['mail_id'] != $usermailitem['mail_id']) { continue; } $found = true; if ($usermailitem['state'] > 2) { //user deleted continue; } $mailstatus = $usermailitem['state']; } $tmpmail = array( 'id' => $mailitem['mail_id'], 'status' => $mailstatus, 'title' => $mailitem['subject'], 'from' => 'system', 'content' => $mailitem['content'], 'attachment' => json_decode($mailitem['attachments']) ); array_push($usermails, $tmpmail); if (!$found) { array_push($newmails, array( 'mail_id' => $mailitem['mail_id'], 'expiretime' => $mailitem['expiretime'] )); } } } } echo json_encode(array( 'errcode' => 0, 'errmsg' => '', 'mails' => $usermails, )); foreach ($newmails as $newitem) { $ret = $conn->execScript( 'INSERT INTO t_inbox(accoun_id, mail_id, state, expiretime, createtime, modifytime) ' . ' VALUES(:account_id, :mailid, 0, :status, :expiretime, :create_time, :modify_time) ' . ' ON DUPLICATE KEY UPDATE account_id=:account_id, mail_id=:mailid, state=:status, expiretime=:expiretime, modifytime=:modify_time;', array( ':account_id' => $account_id, ':mailid' => $newitem['mail_id'], ':expiretime' => $newitem['expiretime'], ':status' => 0, ':create_time' => $nowtime, ':modify_time' => $nowtime ) ); if (!$ret) { error_log("insert new mail error:" . $account_id . "," . $newitem['mail_id']); } } } public function action() { $account_id = $_REQUEST['account_id']; $act = $_REQUEST['type']; if ($act < 1 || $act > 3) { phpcommon\sendError(ERR_USER_BASE + 1, 'type无效'); return; } //登录校验 $login = loginVerify($account_id, $_REQUEST['session_id']); if (!$login) { phpcommon\sendError(ERR_USER_BASE + 1, 'session无效'); return; } $conn = $this->getMysql($account_id); if (!$conn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $mailconn = $this->getMailMysql(); if (!$mailconn) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家1'); return; } $userrow = $conn->execQueryOne( 'SELECT create_time FROM user WHERE accountid=:accountid;', array( ':accountid' => $account_id ) ); if (!$userrow) { phpcommon\sendError(ERR_USER_BASE + 1, '没有这个玩家'); return; } $usercreate = $userrow['create_time']; $nowtime = time(); $mailid = $_REQUEST['mailid']; $querystr = 'SELECT mail_id, subject, content, attachments FROM t_mail WHERE 1=1 AND deleted=0 ' . ' AND (user_reg_start_time=0 OR user_reg_end_time=0 OR (user_reg_start_time<:createtime AND user_reg_end_time>:createtime) ' . ' AND expiretime>:nowtime ' . ' AND recipients="" OR recipients LIKE "%:accountid%"'; $params = array( ':createtime' => $usercreate, ':nowtime' => $nowtime, ':accountid' => $account_id ); if ($mailid > 0) { $querystr = $querystr . ' AND mail_id=:mailid'; $params[':mailid'] = $mailid; } $mailrows = $mailconn->execQuery( $querystr . ';', $params ); if ($mailrows) { $querystr = 'SELECT * FROM t_inbox WHERE account_id=:accountid AND state<:state AND expiretime>:nowtime AND createtime>:nowtime-86400*30 '; $params = array( ':accountid' => $account_id, ':nowtime' => $nowtime, ':state' => $act ); if ($mailid > 0) { $querystr = $querystr . ' AND mail_id=:mailid'; $params[':mailid'] = $mailid; } $usermailrows = $conn->execQuery( $querystr . ' ORDER BY idx DESC LIMIT 30;', $params ); if ($usermailrows) { $mailidlist = '('; foreach ($mailrows as $mailitem) { foreach ($usermailrows as $usermailitem) { if ($mailitem['mail_id'] != $usermailitem['mail_id']) { continue; } $mailidlist = $mailidlist . $mailitem['mail_id'] . ','; if ($act == 2 && $mailitem['attachments'] != '') { //提取附件 $attachments = json_decode($mailitem['attachments'], true); $all_attachments = array_merge($all_attachments, $attachments); } } } $mailidlist = $mailidlist . '0)'; $ret = $conn->execScript( 'UPDATE t_inbox SET state=:state, modifytime=:modify_time ' . ' WHERE accountid=:account_id AND mail_id IN :mailidlist;', array( ':account_id' => $account_id, ':state' => $act, ':mailidlist' => $mailidlist, ':modify_time' => $nowtime ) ); if (!$ret) { error_log('update mail state error:' . $account_id . ',' . $act . ',' . $mailidlist); phpcommon\sendError(ERR_INTERNAL + 1, '系统繁忙'); return; } $item_list = array(); $all_attachments = array(); if ($act == 2) { foreach ($all_attachments as $attachment_item) { $itemid = $attachment_item['itemid']; $itemexists = false; foreach ($item_list as $key => $item) { if ($item['item_id'] == $itemid) { $itemexists = true; $item_list[$key]['item_num'] += $attachment_item['itemnum']; break; } } if (!$itemexists) { $item_list[] = array( 'item_id' => $attachment_item['itemid'], 'item_num' => $attachment_item['itemnum'] ); } } } $addreward = new classes\AddReward(); $all_item_list = array(); foreach ($item_list as $item) { $items = $addreward->addReward($item['item_id'], $item['item_num'], $account_id, 0, 0); foreach ($items as $i) { array_push($all_item_list, array( 'item_id' => $i['item_id'], 'item_num' => $i['item_num'], 'time' => 0, )); } } $coin_num = $addreward->getCoinNum($account_id); $diamond_num = $addreward->getDiamondNum($account_id); $adfree = $addreward->getAdfree($account_id); $privilege = new classes\Privilege(); $plustimes = $privilege->getCoinTimesPlus($account_id); echo json_encode(array( 'errcode' => 0, 'errmsg' => '', 'mailid' => $mailid, 'type' => $act, 'coin_nums' => $coin_num, 'diamond_nums' => $diamond_num, 'adfree' => $adfree, 'vip_plustime' => $plustimes, 'item_list' => $item_list, 'all_item_list' => $all_item_list, )); return; } } phpcommon\sendError(ERR_USER_BASE + 1, '没有邮件'); } }