cyzhao 4 gadi atpakaļ
vecāks
revīzija
7d826f8aca

+ 1 - 1
Gameserver/Amfphp/configs/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2021-06-21 18:09:57
+ // 日期: 2021-06-22 10:11:54
 ////////////////////
 namespace loyalsoft;
 /**

+ 1 - 1
Gameserver/Amfphp/model/Const/GameConfig.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2021-06-21 18:09:57
+ // 日期: 2021-06-22 10:11:54
 ////////////////////
 
 /**

+ 7 - 2
Gameserver/Amfphp/model/Const/sm_item_base.php

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2021-06-18 17:56:25
+ // 日期: 2021-06-22 09:56:03
 ////////////////////
 
 
@@ -131,9 +131,14 @@ class sm_item_base
     public $channel;
 
     /**
-    * @var Int32 竞拍初始价格 default(0) 
+    * @var Int32 竞拍初始价格不得低于此价格 default(0) 
     */
     public $auctionPrice;
 
+    /**
+    * @var Int32 是否可拍卖 default(0) 
+    */
+    public $canAuction;
+
 }
 

+ 17 - 1
Gameserver/Amfphp/model/User/Ins_AuctionItemModel.php

@@ -87,5 +87,21 @@ class Ins_AuctionItemModel {
     public $currpeopleid; # 当前最高价者ID
     public $currpeoplename; # 当前最高价者昵称
     public $result; # 拍卖结果, 结算以后会有:成交,流拍
-
+    
+    
+    /**
+     * 
+     * @param array $arr 来源
+     * @return AuctionItemModel 
+     */
+    public static function LoadModel($dic) {
+        $ret = new Ins_AuctionItemModel();      
+        foreach ($ret as $key => $value) {
+            if (StlUtil::dictHasProperty($dic, $key)) {
+                $ret->$key = $dic->$key;
+            }
+        }
+        
+        return $ret;
+    }
 }

+ 161 - 33
Gameserver/Amfphp/process/AuctionProc.php

@@ -32,8 +32,10 @@ class AuctionProc {
      * 获取全部拍卖信息
      */
     static function GetAuctionItemsInfo() {
-        $obj = self::getAuctionUserItemListCache(req()->zoneid);
-
+        $obj = self::getAuctionUserItemListCache();
+        if ($obj == null || $obj->ts < TimeUtil::tsCurrent(-3)) { # 查不到缓存,或者缓存是3秒以前的
+            $obj = self::updateAuctionUserItemListCache(); # 更新玩家列表
+        }
         $ret = array(
             "auctionitems" => $obj->data,
                 //"bidRecord" => $req->userInfo->privateState->arrUserlAucBidItems # 加一个出价记录
@@ -48,10 +50,12 @@ class AuctionProc {
     /**
      * 玩家上架拍品信息
      */
-    static function GetUserUploadAuctionItems() {
+    static function GetUserUploadAuctionItems() {       
+        $list = self::getMyAuctionItems();#上架信息
+        
         UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
-                    "store" => "ok",
+                    "auction" => $list,
         ));
     }
 
@@ -59,21 +63,39 @@ class AuctionProc {
      * 玩家竞拍信息
      */
     static function GetUserAuctionItems() {
+        $result = self::selectMyAuctionBid();
+        
         UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
-                    "store" => "ok",
+                    "auction" => $result,
         ));
     }
 
     /**
-     * 竞拍/一口价
+     * 竞拍/一口价-----暂时没有竞拍,只有一口价
      */
     static function UserAuctionBidItem() {
-
-
+        list($uId) = req()->paras;
+        $aucItem = self::getAuctionItem($uId);
+        $price = $itemMo->buyoutPrice + intval($itemMo->buyoutPrice * 0.05);
+        my_Assert(req()->userInfo->game->baseInfo->cash >=$price, ErrCode::notenough_cash_msg);
+        //扣除钻石--交易费用 + 手续费
+        req()->userInfo->game->baseInfo->cash -= $price; 
+               
+        //更新表里的交易状态
+        $aucItem->result = "完成";
+        $aucItem->currpeopleid = req()->uid;
+        $aucItem->currpeoplename = req()->userInfo->game->baseInfo->name;
+        self::settleAuctionItem($aucItem); # 更新数据库
+//更新拍品缓存
+        $obj = self::updateAuctionUserItemListCache();        
+//发送邮件,给拍品
+        $sList = explode(',', $aucItem->contents);
+        EmailProc::SendAuctionItemsMail($zoneid, $uid, $sList[0], $sList[1]); 
+              
         UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
-                    "store" => "ok",
+                    "auction" => $obj,
         ));
     }
 
@@ -81,9 +103,16 @@ class AuctionProc {
      * 取消出售
      */
     static function CancelAuction() {
+        list($uId) = req()->paras;
+        $aucItem = self::getAuctionItem($uId);
+        $aucItem->result = "取消出售";
+        
+        self::updateAuctionItemState($aucItem);
+        $obj = self::updateAuctionUserItemListCache();
+                    
         UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
-                    "store" => "ok",
+                    "auction" => $obj,
         ));
     }
 
@@ -94,8 +123,7 @@ class AuctionProc {
     static function UploadAuctionItems() {
         list($itemId, $num, $price, $buyoutPrice) = req()->paras; //上传拍品的 id 数量 竞拍价 一口价
 
-        $user = req()->userInfo->game;
-        //$items = $user->store->items;
+        $user = req()->userInfo->game; 
 
         my_Assert(StlUtil::dictHasProperty($user->store->items, $itemId), ErrCode::store_itemno_err); # 参数合法性判断
         $auctionPrice = GameConfig::item_base_getItem($itemId)->auctionPrice;
@@ -105,31 +133,27 @@ class AuctionProc {
 
         $aucItem = new Ins_AuctionItemModel();
         $aucItem->addstep = 1;
+        $aucItem->contents = $itemId.",".$num;
         $aucItem->startprice = $price;
         $aucItem->buyoutPrice = $buyoutPrice;
-//        $aucItem->cxtId = $itemId;
-//        $aucItem->cxtNum = $num;
         $aucItem->startts = time();
-        $aucItem->endts = glc()->AuctionEndTs * 60 * 60 + time(); # 24小时
-        if (!GAME_ONLINE) {
-            $aucItem->endts = self::tsCurrHour(1); # 内网1小时。
-        }
-        $aucItem->sellerid = $req->oid;
-        $aucItem->sellername = $user->name;
-        $aucItem->zoneid = $req->zoneid;
+        $aucItem->endts = glc()->AuctionEndTs * 60 * 60 + time(); # 24小时 
+        $aucItem->sellerid = req()->uid;
+        $aucItem->sellername = $user->baseInfo->name;
+        $aucItem->zoneid = req()->zoneid;
         $err = self::insertNewUserAuctionItem($aucItem);
-        if ($err != ErrCode::succeed) { # 数据库操作失误
-            $resp = ResponseVo ::myErrResponse($req, $err);
-        } else { # 插入成功后,更新缓存
-            # 写入玩家数据
-            UserProc::updateUserInfo($req); # 包括手续费
-            self::updateAuctionUserItemListCache($req); # 更新缓存
-            $resp = ResponseVo ::myRetResponse($req, "succeed"); # 更新下客户端的拍品列表
+        if($err == 0){
+            return ;
         }
-
+        
+        # 插入成功后,更新缓存
+        # 写入玩家数据   
+        $auctionDic = self::updateAuctionUserItemListCache(); # 更新缓存
+        req()->userInfo->game = $user;      
         UserProc::updateUserInfo();                                             # 回写玩家数据
         return Resp::ok(array(
-                    "store" => "ok",
+                    "store" => $user->store,
+                    "auction"=>$auctionDic,#拍品
         ));
     }
 
@@ -139,8 +163,7 @@ class AuctionProc {
      * @return array
      */
     static function getAuctionUserItemListCache($zoneid) {
-//        gMem()->hget($key, $itemId);
-//        return $mem->get(MemKey::auctionItemListCache($zoneid));
+        return gMem()->get(self::auctionItemListCache(req()->zoneid));
     }
 
     /**
@@ -150,5 +173,110 @@ class AuctionProc {
     static function auctionItemListCache($zoneid) {
         return "auction-user-itemlist" . "-zone" . $zoneid;
     }
-
+    
+    /**
+     * 插入新的玩家拍品
+     * @param Ins_AuctionItemModel $aucItem
+     */
+    static function insertNewUserAuctionItem($aucItem) {
+        $paydb = daoInst();              
+        $sql = "INSERT INTO `tab_auctionitems` (contents,startprice,buyoutPrice,startts,endts,sellerid,sellername,auchistory,zoneid) VALUES ('%s',%d,%d,%d,%d,'%s','%s','{}',%d)";
+        $query = sprintf($sql, $aucItem->contents, $aucItem->startprice,$aucItem->buyoutPrice,$aucItem->startts, #
+                $aucItem->endts, $aucItem->sellerid, mysql_real_escape_string($aucItem->sellername), $aucItem->zoneid);
+       $result = $paydb->exec($query);           
+        return $result;
+    }
+    
+    /**
+     * 更新玩家拍卖拍品列表缓存
+     * @param type $mem
+     * @return array
+     */
+    static function updateAuctionUserItemListCache() {     
+        $aucOfficial = self::getAuctionUserItemList(req()->zoneid); // 查询拍品列表
+        $obj = array(
+            'ts' => CommUtil:: tsCurrent(),
+            'data' => $aucOfficial
+        );
+            
+        gMem()->set(self:: auctionItemListCache($zoneid), $obj); # 写入缓存
+        return json_decode(json_encode($obj));
+    }
+    /**
+     * 取今天的玩家拍卖拍品集合
+     * @return array
+     */
+    static function getAuctionUserItemList($zoneid = 1) {
+        $now = time(); # 当前时间戳
+        $sql = "SELECT * from tab_auctionitems WHERE zoneid=$zoneid and $now < endts and $now > startts"; 
+        $paydb = daoInst();
+        $result = $paydb->query($sql)->fetchAll();
+        return $result; # 索引数组
+    }
+    
+    /**
+     * 查询某个拍品
+     * @param type $aucItemId
+     * @return type
+     */
+    static function getAuctionItem($aucItemId) {
+        $sql = "SELECT * from tab_auctionitems WHERE itemid = $aucItemId";
+        $paydb = daoInst();
+        $result = $paydb->query($sql)->fetchAll();
+      
+        return $result[0]; # 索引数组
+    }
+    
+    /**
+     * 结算更新
+     * @param AuctionItemModel $aucItem
+     */
+    static function settleAuctionItem($aucItem) {
+        $sql = "UPDATE `tab_auctionitems` set result = '%s',currpeopleid = '%s',currpeoplename = '%s' where itemid=%s";
+        $query = sprintf($sql, $aucItem->result, $aucItem->currpeopleid,$aucItem->currpeoplename, $aucItem->itemid);
+        $paydb = daoInst();
+        $paydb->exec($sql);             
+    }
+    
+    /**
+     * 
+     * @param type $aucItem
+     */
+    static function updateAuctionItemState($aucItem) {
+        $sql = "UPDATE `tab_auctionitems` set result = '%s' where itemid=%s";
+        $query = sprintf($sql, $aucItem->result, $aucItem->itemid);
+        $paydb = daoInst();
+        $paydb->exec($sql);             
+    }
+    
+    /**
+     * 查询我的上架拍品的信息
+     * @return type
+     */
+    static function getMyAuctionItems() {
+        $ts = time();
+        $zoneid = req()->zoneid;
+        $uid = req()->uid;
+        $db = daoInst();
+        $sql = "select * from tab_auctionitems where zoneid=$zoneid and sellerid = '$uid' and datediff(from_unixtime($ts),from_unixtime(startts))<=7";
+        $result = $db->query($sql)->fetchAll();
+       
+        return $result;
+    }
+    /**
+     * 玩家的竞拍信息
+     * @param type $zoneid
+     * @param type $oid
+     * @return type
+     */
+    static function selectMyAuctionBid() {   
+        $zoneid = req()->zoneid;
+        $oid = req()->uid;
+            
+        $db = daoInst();
+        $sql = "select * from tab_auctionitems where zoneid=$zoneid and currpeopleid = '$oid'";
+        $result = $db->query($sql)->fetchAll();
+        
+        return $result;
+    }
 }

+ 18 - 0
Gameserver/Amfphp/process/EmailProc.php

@@ -344,6 +344,24 @@ class EmailProc {
                 "请领取", "$itemid, $num");
         self::InsertMail($zoneid, $uid, $mail);
     }
+    
+    //----------------拍卖邮件
+    /**
+     * 竞拍得到道具邮件
+     * @param type $zoneid
+     * @param type $uid
+     * @param type $itemid
+     * @param type $num
+     */
+    public static function SendAuctionItemsMail($zoneid, $uid, $itemid, $num) {
+        $name = GameConfig::item_base_getItem($itemid)->name;
+        
+        $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "拍卖邮件", #
+                "恭喜竞拍".$name."成功请领取", "$itemid, $num");
+        self::InsertMail($zoneid, $uid, $mail);
+    }
+    
+    
 
 // </editor-fold>
 //