This commit is contained in:
hujiabin 2024-07-23 15:21:48 +08:00
parent 6eddb8a053
commit ba998d8363
8 changed files with 171 additions and 47 deletions

View File

@ -1092,6 +1092,7 @@ class Emoji(object):
self.fields = [
['item_id', 0, 'item_id'],
['state', 0, '1:使用 0未使用'],
['left_time', 0, '剩余时间'],
]
class ChipPage(object):

View File

@ -1006,6 +1006,8 @@ CREATE TABLE `t_emoji` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`item_id` int(11) NOT NULL DEFAULT '0' COMMENT 'itemID',
`last_get_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后获得时间',
`valid_time` int(11) NOT NULL DEFAULT '0' COMMENT '有效时间',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),

View File

@ -0,0 +1,20 @@
begin;
DROP TABLE IF EXISTS `t_emoji`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_emoji` (
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
`account_id` varchar(60) NOT NULL DEFAULT '' COMMENT '账号id',
`item_id` int(11) NOT NULL DEFAULT '0' COMMENT 'itemID',
`last_get_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后获得时间',
`valid_time` int(11) NOT NULL DEFAULT '0' COMMENT '有效时间',
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
PRIMARY KEY (`idx`),
UNIQUE KEY `account_item_id` (`account_id`, `item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into version (version) values(2024052101);
commit;

View File

@ -1,6 +1,7 @@
<?php
require_once('services/LogService.php');
require_once('services/TimingPropService.php');
require_once('mt/Item.php');
require_once('models/Bag.php');
@ -569,6 +570,12 @@ class BaseAuthedController extends BaseController {
Avatar::addAvatar($itemMeta);
}
break;
case mt\Item::TIMING_PROP_TYPE:
{
$timingObj = new \services\TimingPropService();
$timingObj->handleProp($itemMeta);
}
break;
default:
{
$this->_addLog('additems', 'invalid_item', array(

View File

@ -4,38 +4,36 @@ require_once('models/Emoji.php');
use models\Emoji;
class EmojiController extends BaseAuthedController
{
// public function getEmojiList(){
// $this->_rspData(array(
// 'data' => array(
// array(
// 'item_id'=>200001,
// 'state'=>1,
// )
// ),
// 'use_emoji' => array(200001)
// ));
// }
public function getEmojiList(){
$list = Emoji::emojiList();
$emojiList = array();
Emoji::emojiList(function ($row) use (&$emojiList){
$tDo = Emoji::toDto($row);
if ($tDo['left_time'] > 0){
array_push($emojiList,Emoji::toDto($row));
}
});
$uses = Emoji::getUseEmoji();
$temp = array_map(function ($val){
return $val['item_id'];
},$uses);
$data = array();
foreach ($list as $val){
if(in_array($val, $temp)){
foreach ($emojiList as $val){
if(in_array($val['item_id'], $temp)){
array_push($data,
array(
'item_id'=>$val,
'item_id'=>$val['item_id'],
'state'=>1,
'left_time'=>$val['left_time'],
)
);
}else{
array_push($data,
array(
'item_id'=>$val,
'item_id'=>$val['item_id'],
'state'=>0,
'left_time'=>$val['left_time'],
)
);
}
@ -49,7 +47,16 @@ class EmojiController extends BaseAuthedController
public function setEmoji(){
$itemId = getReqVal('item_id', '');
$slotId = getReqVal('slot_id', 0);
if(! in_array($itemId,Emoji::emojiList())){
$emojiList = array();
Emoji::emojiList(function ($row) use (&$emojiList){
$tDo = Emoji::toDto($row);
if ($tDo['left_time'] > 0){
array_push($emojiList,Emoji::toDto($row));
}
});
if(! in_array($itemId,array_map(function ($val){
return $val['item_id'];
},$emojiList))){
$this->_rspErr(1, 'item_id parameter error');
return;
}
@ -65,18 +72,11 @@ class EmojiController extends BaseAuthedController
$this->_rspErr(1, 'The emoji has been used');
return;
}
if ($uses){
foreach ($uses as &$val){
if ($val['slot_id'] == $slotId){
$val['item_id'] = $itemId;
}
}
}else{
array_push($uses,array(
'item_id' => $itemId,
"slot_id" => $slotId
));
}
Emoji::updateEmoji( json_encode($uses));
$this->_rspOk();

View File

@ -10,46 +10,53 @@ class Emoji extends BaseModel
private static function defaultUseEmoji(){
return array(
array(
'item_id' => 200001,
'item_id' => 0,
"slot_id" => 1
),
array(
'item_id' => 200002,
'item_id' => 0,
"slot_id" => 2
),
array(
'item_id' => 200003,
'item_id' => 0,
"slot_id" => 3
),
array(
'item_id' => 200004,
'item_id' => 0,
"slot_id" => 4
),
array(
'item_id' => 200005,
'item_id' => 0,
"slot_id" => 5
),
array(
'item_id' => 200006,
'item_id' => 0,
"slot_id" => 6
),
);
}
private static function defaultEmoji(){
$default = array();
$meta = mt\Parameter::getByName('emoji_default');
if ($meta){
$default = explode('|',$meta['param_value']) ;
public static function emojiList($cb){
SqlHelper::ormSelect(
myself()->_getSelfMysql(),
't_emoji',
array(
'account_id'=> myself()->_getAccountId(),
),
function ($row) use($cb) {
$cb($row);
}
return $default;
);
}
public static function emojiList(){
$data = self::DefaultEmoji();
//查询用户新获得的表情t_emoji 表)
return $data;
public static function toDto($row){
return array(
'item_id' => $row['item_id'],
// 'valid_time' => $row['valid_time'],
'left_time' => max(0,$row['valid_time'] - (myself()->_getNowTime()-$row['last_get_time']) ),
);
}
public static function getUseEmoji(){
@ -62,10 +69,23 @@ class Emoji extends BaseModel
);
if ($row){
$useEmojiList = emptyReplace(json_decode($row['used'], true), array());
}else{
$useEmojiList= self::defaultUseEmoji();
$isUpdate = 0;
foreach ($useEmojiList as &$value){
$emojiDb = self::findEmoji($value['item_id']);
if ($emojiDb){
$emojiDto = self::toDto($emojiDb);
if ($emojiDto['left_time'] == 0){
$value['item_id'] = 0;
$isUpdate = 1;
}
}
}
if ($isUpdate){
self::updateEmoji(json_encode($useEmojiList));
}
}else{
$useEmojiList = self::defaultUseEmoji();
}
return $useEmojiList;
}
@ -89,4 +109,48 @@ class Emoji extends BaseModel
);
}
public static function findEmoji($itemId){
return SqlHelper::ormSelectOne(
myself()->_getSelfMysql(),
't_emoji',
array(
'account_id'=> myself()->_getAccountId(),
'item_id'=> $itemId,
)
);
}
public static function addEmoji($itemMeta,$time){
$row = self::findEmoji($itemMeta['id']);
if ($row){
$leftTime = max(0,$row['valid_time'] - (myself()->_getNowTime()-$row['last_get_time']) );
SqlHelper::update
(myself()->_getSelfMysql(),
't_emoji',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemMeta['id'],
),
array(
'last_get_time' => myself()->_getNowTime(),
'valid_time' => $leftTime + $time * 86400,
'modifytime' => myself()->_getNowTime(),
)
);
}else{
SqlHelper::insert
(myself()->_getSelfMysql(),
't_emoji',
array(
'account_id' => myself()->_getAccountId(),
'item_id' => $itemMeta['id'],
'last_get_time' => myself()->_getNowTime(),
'valid_time' => $time * 86400,
'createtime' => myself()->_getNowTime(),
'modifytime' => myself()->_getNowTime(),
)
);
}
}
}

View File

@ -111,6 +111,7 @@ class Item {
const TREASURE_BOX = 30;
const GOLD_SYN = 31;
const BATTLE_REWARD_BOX = 32;
const TIMING_PROP_TYPE = 33;
const FUNC_RENAME_CARD_SUBTYPE = 1;
const FUNC_GUILD_CARD_SUBTYPE = 3;

View File

@ -0,0 +1,29 @@
<?php
namespace services;
require_once('models/Emoji.php');
require_once('mt/Item.php');
use models\Emoji;
use mt\Item;
use phpcommon\SqlHelper;
class TimingPropService extends BaseService
{
const EMOJI_SUB_TYPE = 1;
public function handleProp($itemMeta){
if ($itemMeta['type'] != Item::TIMING_PROP_TYPE){
return;
}
switch ($itemMeta['sub_type']){
case self::EMOJI_SUB_TYPE :{
$emojiMeta = Item::get($itemMeta['relationship']);
if ($emojiMeta['type'] == Item::EMOJI_TYPE){
Emoji::addEmoji($emojiMeta , $itemMeta['Item_duration']);
}
}
break;
}
}
}