Exemple #1
0
        public MessageCode RefreshStatus()
        {
            DateTime date = DateTime.Now;

            foreach (var item in _transferDic.Values)
            {
                if (date >= item.TransferDuration)
                {
                    item.Status = 3;//流拍。 从数据库删除
                    if (TransferMainMgr.Delete(item.TransferId))
                    {
                        var mail = new MailBuilder(item.SellId, item.ItemCode, item.ItemName, EnumMailType.TransferRunOff);
                        if (!mail.Save(item.SellZoneName))
                        {
                            SystemlogMgr.Error("邮件发送失败",
                                               "邮件发送失败,ManagerId:" + item.SellId + ",ZoneName:" + item.SellZoneName + ",ItemCode:" +
                                               item.ItemCode);
                        }
                        Remove(item.TransferId);
                    }
                }
            }
            foreach (var entity in _tenTransferList)
            {
                //过了10分钟的放到另外一个字典
                if (entity.TransferStartTime.AddMinutes(10) < date)
                {
                    _transferDic.TryAdd(entity.TransferId, entity);
                }
            }
            _tenTransferList = _tenTransferList.FindAll(r => r.TransferStartTime.AddMinutes(10) > date);
            Sort();
            return(MessageCode.Success);
        }
Exemple #2
0
        /// <summary>
        /// 下架
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="transferId"></param>
        /// <param name="zoneName"></param>
        /// <returns></returns>
        public MessageCodeResponse SoldOut(Guid managerId, Guid transferId, string zoneName)
        {
            MessageCodeResponse response = new MessageCodeResponse();

            try
            {
                if (!IsOpen(managerId, zoneName))
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.TransferNotOpen));
                }
                var info = GetInfo(transferId);
                if (info == null || info.Status == 1)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemSoldOut));
                }
                if (info.Status == 2)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.ItemHaveSellOut));
                }
                if (info.SellId != managerId)
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NotSoldOutAuthority));
                }
                info.Status     = 1;
                info.UpdateTime = DateTime.Now;
                if (!TransferMainMgr.Delete(transferId))
                {
                    return(ResponseHelper.Create <MessageCodeResponse>(MessageCode.NbUpdateFail));
                }
                Remove(transferId);
                var mail = new MailBuilder(managerId, info.ItemCode, info.ItemName, EnumMailType.TransferSoldOut);
                if (!mail.Save(info.SellZoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + info.SellId + ",ZoneName:" + info.SellZoneName + ",ItemCode:" +
                                       info.ItemCode);
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("下架", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #3
0
        public TransferThread(int domainId)
        {
            _domainId = domainId;
            var transferList = TransferMainMgr.GetTransferList(_domainId);

            _transferDic     = new ConcurrentDictionary <Guid, TransferMainEntity>();
            _tenTransferList = new List <TransferMainEntity>();
            foreach (var item in transferList)
            {
                item.TransferDurationTick = ShareUtil.GetTimeTick(item.TransferDuration);
                item.TransferDurationTick = ShareUtil.GetTimeTick(item.TransferDuration);
                if (DateTime.Now < item.TransferStartTime.AddMinutes(10))
                {
                    var modId = ShareUtil.GetTableMod(item.TransferId);
                    item.ModId = modId;
                    _tenTransferList.Add(item);
                }
                else
                {
                    _transferDic.TryAdd(item.TransferId, item);
                }
            }
            Sort();
        }
Exemple #4
0
        /// <summary>
        /// 获取我的拍卖列表
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="zoneName"></param>
        /// <returns></returns>
        public AuctionItemResponse GetMyAuctionList(Guid managerId, string zoneName)
        {
            var response = new AuctionItemResponse();

            response.Data = new AuctionItemEntity();
            try
            {
                var manager = NbManagerMgr.GetById(managerId, zoneName);
                if (manager == null)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.AdMissManager));
                }
                if (!IsOpen(managerId, zoneName, manager))
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.TransferNotOpen));
                }
                //已经挂牌了多少个
                var number = TransferMainMgr.GetTransferNumber(managerId);
                //最多可以挂牌多少个
                var gambleCountMax = CacheFactory.VipdicCache.GetEffectValue(manager.VipLevel, EnumVipEffect.TransferNumber);
                response.Data.MyTransferList     = GetMyTransfer(managerId);
                response.Data.MaxTransferNumber  = gambleCountMax;
                response.Data.HaveTransferNumber = number;
                var goldBarEntity = ScoutingGoldbarMgr.GetById(managerId, zoneName);
                if (goldBarEntity != null)
                {
                    response.Data.MyGoldBar = goldBarEntity.GoldBarNumber;
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("获取我的拍卖列表", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #5
0
        /// <summary>
        /// 开始拍卖
        /// </summary>
        /// <param name="managerId"></param>
        /// <param name="zoneName"></param>
        /// <param name="itemId"></param>
        /// <param name="price"></param>
        /// <param name="transferDuration"></param>
        public AuctionItemResponse AuctionItem(Guid managerId, string zoneName, Guid itemId, int price, int transferDuration)
        {
            var response = new AuctionItemResponse();

            response.Data = new AuctionItemEntity();
            try
            {
                DateTime date    = DateTime.Now;
                var      manager = NbManagerMgr.GetById(managerId, zoneName);
                if (manager == null)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.AdMissManager));
                }
                if (!IsOpen(managerId, zoneName, manager))
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.TransferNotOpen));
                }
                //已经挂牌了多少个
                var number = TransferMainMgr.GetTransferNumber(managerId);
                //最多可以挂牌多少个
                var gambleCountMax = CacheFactory.VipdicCache.GetEffectValue(manager.VipLevel, EnumVipEffect.TransferNumber);
                if (gambleCountMax <= number)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.TransferNumberMax));
                }
                var package = ItemCore.Instance.GetPackage(managerId, EnumTransactionType.Transfer, zoneName);
                if (package == null)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.NbNoPackage));
                }

                if (price < 2)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.StartPriceSmall));
                }
                var item = package.GetItem(itemId);
                if (item == null)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.ItemNotExists));
                }
                if (!item.IsDeal)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.NotDeal));
                }
                var strength = item.GetStrength();
                if (strength > 1)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.NotDeal));
                }
                var iteminfo = CacheFactory.ItemsdicCache.GetItem(item.ItemCode);
                if (iteminfo == null)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.ItemNotExists));
                }
                //默认86400秒  24小时
                TransferMainEntity entity = new TransferMainEntity(ShareUtil.GenerateComb(), _domainId, item.ItemCode, iteminfo.ItemName,
                                                                   new byte[0], manager.Name, managerId, zoneName, price, "",
                                                                   "", 0, Guid.Empty, date, date.AddDays(1), 0, 0, 0, date, date);

                var messageCode = package.Delete(itemId);
                if (messageCode != MessageCode.Success)
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(messageCode));
                }
                if (!package.Save())
                {
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.NbUpdateFail));
                }
                if (!TransferMainMgr.Insert(entity))
                {
                    messageCode = package.AddItem(item.ItemCode);
                    if (messageCode != MessageCode.Success)
                    {
                        SystemlogMgr.Error("拍卖返还物品失败",
                                           "拍卖返还物品失败,managerId:" + managerId + ",zoneName:" + zoneName + "物品ID:" + item.ItemCode);
                    }
                    return(ResponseHelper.Create <AuctionItemResponse>(MessageCode.NbUpdateFail));
                }
                package.Shadow.Save();
                entity.TransferDurationTick = ShareUtil.GetTimeTick(entity.TransferDuration);
                entity.TransferDurationTick = ShareUtil.GetTimeTick(entity.TransferDuration);
                var modId = ShareUtil.GetTableMod(entity.TransferId);
                entity.ModId = modId;
                _tenTransferList.Add(entity);
                Sort();
                response.Data.MyTransferList     = GetMyTransfer(managerId);
                response.Data.MaxTransferNumber  = gambleCountMax;
                response.Data.HaveTransferNumber = number + 1;
                var goldBarEntity = ScoutingGoldbarMgr.GetById(managerId, zoneName);
                if (goldBarEntity != null)
                {
                    response.Data.MyGoldBar = goldBarEntity.GoldBarNumber;
                }
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("开始拍卖", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }
Exemple #6
0
        /// <summary>
        /// 竞拍
        /// </summary>
        /// <param name="transferId"></param>
        /// <param name="managerId"></param>
        /// <param name="zoneName"></param>
        /// <returns></returns>
        public AuctionResponse Auction(Guid transferId, Guid managerId, string zoneName)
        {
            AuctionResponse response = new AuctionResponse();

            try
            {
                if (!IsOpen(managerId, zoneName))
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.TransferNotOpen));
                }
                var entity = GetInfo(transferId);
                if (entity == null)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut));
                }
                var goldBarEntity = ScoutingGoldbarMgr.GetById(managerId, zoneName);
                if (goldBarEntity == null || goldBarEntity.GoldBarNumber < entity.Price)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ScoutingGoldBarNot));
                }
                if (entity.Status == 1)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemSoldOut));
                }
                if (entity.Status == 2)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.ItemHaveSellOut));
                }
                if (entity.SellId == managerId)
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NotBuyOneself));
                }
                goldBarEntity.GoldBarNumber = goldBarEntity.GoldBarNumber - entity.Price;
                //手续费 5%
                int poundage = entity.Price * 5 / 100;
                if (poundage == 0)
                {
                    poundage = 1;
                }
                else if (poundage > 20)
                {
                    poundage = 20;
                }

                GoldbarRecordEntity auctionRecord = new GoldbarRecordEntity();
                auctionRecord.IsAdd         = false;
                auctionRecord.ManagerId     = managerId;
                auctionRecord.Number        = entity.Price;
                auctionRecord.OperationType = (int)EnumTransactionType.Transfer;
                auctionRecord.RowTime       = DateTime.Now;

                entity.DealEndId       = managerId;
                entity.DealEndPrice    = entity.Price;
                entity.DealEndZoneName = zoneName;
                entity.Status          = 2;
                entity.UpdateTime      = DateTime.Now;
                entity.Poundage        = poundage;
                if (!TransferMainMgr.Update(entity))
                {
                    entity.Status = 0;
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail));
                }
                if (!ScoutingGoldbarMgr.Update(goldBarEntity, null, zoneName))
                {
                    return(ResponseHelper.Create <AuctionResponse>(MessageCode.NbUpdateFail));
                }

                Remove(transferId);
                //出售人邮件
                var sellMail = new MailBuilder(entity.SellId, entity.ItemName, EnumCurrencyType.GoldBar,
                                               entity.Price - poundage);
                //购买人邮件
                var buyMail = new MailBuilder(managerId, entity.ItemCode, entity.ItemName, entity.Price);
                if (!sellMail.Save(entity.SellZoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + entity.SellId + ",ZoneName:" + entity.SellZoneName + ",GoldBarNumber:" +
                                       (entity.Price - poundage));
                }
                if (!buyMail.Save(zoneName))
                {
                    SystemlogMgr.Error("邮件发送失败",
                                       "邮件发送失败,ManagerId:" + managerId + ",ZoneName:" + zoneName + ",GoldBarNumber:" +
                                       (entity.Price - poundage));
                }
                GoldbarRecordMgr.Insert(auctionRecord, null, zoneName);
                response.Data         = new AuctionEntity();
                response.Data.GoldBar = goldBarEntity.GoldBarNumber;
            }
            catch (Exception ex)
            {
                SystemlogMgr.Error("竞拍", ex);
                response.Code = (int)MessageCode.NbParameterError;
            }
            return(response);
        }