_getSelfMysql(), 't_shop_buy_record', array( 'account_id' => myself()->_getAccountId(), 'item_id' => $itemId, ) ); return $row; } public static function all() { $rows = SqlHelper::ormSelect( myself()->_getSelfMysql(), 't_shop_buy_record', array( 'account_id' => myself()->_getAccountId(), ) ); return array_map(function ($row) { $nowDaySeconds = myself()->_getNowDaySeconds(); if (!($row['last_buy_time'] >= $nowDaySeconds && $row['last_buy_time'] <= $nowDaySeconds + 3600 * 24)) { $row['this_day_buy_times'] = 0; } $mondaySeconds = myself()->_getMondaySeconds(); if (!($row['last_buy_time'] >= $mondaySeconds && $row['last_buy_time'] <= $mondaySeconds + 3600 * 24 * 7)) { $row['this_week_buy_times'] = 0; } return $row; }, $rows); } public static function allToHash() { $rows = self::all(); $buyRecordHash = array(); array_walk($rows, function ($row) use (&$buyRecordHash) { $buyRecordHash[$row['item_id']] = $row; }); return $buyRecordHash; } public static function toDto($row) { return array(); } public static function add($itemId, $itemNum) { SqlHelper::upsert( myself()->_getSelfMysql(), 't_shop_buy_record', array( 'account_id' => myself()->_getAccountId(), 'item_id' => $itemId, ), array( 'this_day_buy_times' => function () { $nowDaySeconds = myself()->_getNowDaySeconds(); $cond = " last_buy_time>=${nowDaySeconds} AND last_buy_time<=${nowDaySeconds} + 3600 * 24 "; return "CASE WHEN (${cond}) THEN this_day_buy_times + 1 ELSE 1 END"; }, 'this_week_buy_times' => function () { $mondaySeconds = myself()->_getMondaySeconds(); $cond = " last_buy_time>=${mondaySeconds} AND last_buy_time<=${mondaySeconds} + 3600 * 24 * 7 "; return "CASE WHEN (${cond}) THEN this_week_buy_times + 1 ELSE 1 END"; }, 'total_buy_times' => function () { return 'total_buy_times + 1'; }, 'last_buy_time' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ), array( 'account_id' => myself()->_getAccountId(), 'item_id' => $itemId, 'this_day_buy_times' => 1, 'this_week_buy_times' => 1, 'total_buy_times' => 1, 'last_buy_time' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ) ); } public static function addWithAddress($address, $itemId, $itemNum) { $account_id = ShopBuyRecord::getAccountId($address); SqlHelper::upsert( myself()->_getMysql($address), 't_shop_buy_record', array( 'account_id' => $account_id, 'item_id' => $itemId, ), array( 'this_day_buy_times' => function () { $nowDaySeconds = myself()->_getNowDaySeconds(); $cond = " last_buy_time>=${nowDaySeconds} AND last_buy_time<=${nowDaySeconds} + 3600 * 24 "; return "CASE WHEN (${cond}) THEN this_day_buy_times + 1 ELSE 1 END"; }, 'this_week_buy_times' => function () { $mondaySeconds = myself()->_getMondaySeconds(); $cond = " last_buy_time>=${mondaySeconds} AND last_buy_time<=${mondaySeconds} + 3600 * 24 * 7 "; return "CASE WHEN (${cond}) THEN this_week_buy_times + 1 ELSE 1 END"; }, 'total_buy_times' => function () { return 'total_buy_times + 1'; }, 'last_buy_time' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ), array( 'account_id' => $account_id, 'item_id' => $itemId, 'this_day_buy_times' => 1, 'this_week_buy_times' => 1, 'total_buy_times' => 1, 'last_buy_time' => myself()->_getNowTime(), 'createtime' => myself()->_getNowTime(), 'modifytime' => myself()->_getNowTime(), ) ); } private static function getAccountId($address) { $row = SqlHelper::ormSelectOne( myself()->_getMysql($address), 't_user', array( 'address' => $address ) ); return $row['account_id']; } }