public IHttpActionResult CheckStoreOrderPayState(PayDetailModelGet payDetailModelGet)
        {
            DataTable dtStoreOrderState = _storeOrderDal.CheckStoreOrderState(payDetailModelGet.OrderNo);

            if (dtStoreOrderState.Rows.Count != 1)
            {
                return(Json(new ResultDataModel <StoreOrderPayStateModelResult> {
                    Code = -1, Messages = "订单号不存在"
                }));
            }
            IList <StoreOrderPayStateModelResult> storeOrderPayStateModelResults =
                ModelConvertHelper <StoreOrderPayStateModelResult> .ConvertToModel(dtStoreOrderState);

            var model = storeOrderPayStateModelResults.FirstOrDefault();

            model.RealRank = _userInfoDal.CheckUserVipRank(Convert.ToUInt32(payDetailModelGet.UserId));
            return(Json(new ResultDataModel <StoreOrderPayStateModelResult> {
                Code = 0, Data = model
            }));
        }
        public IHttpActionResult PayStoreOrder(PayDetailModelGet payDetailModelGet)
        {
            try
            {
                if (string.IsNullOrEmpty(payDetailModelGet.PayPassword))
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "支付密码不能为空"
                    }));
                }
                DataTable dt = _storeOrderDal.QueryStoreOrderInfo(payDetailModelGet.OrderNo);
                if (dt.Rows.Count <= 0)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "订单不存在"
                    }));
                }
                UserCloudMinerDal userCloudMinerDal = new UserCloudMinerDal();
                int userRunningCount = userCloudMinerDal.QueryRunningCloudMinerCount(payDetailModelGet.UserId, Convert.ToInt32(dt.Rows[0]["CommodityId"]));
                if (Convert.ToInt32(dt.Rows[0]["PurchaseRestrictionCount"]) < userRunningCount + Convert.ToInt32(dt.Rows[0]["Count"]))
                {
                    _storeOrderDal.UpdateStoreOrderState(payDetailModelGet.OrderNo, "5");
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "已超出购买数量限制"
                    }));
                }
                bool checkPayPassowrd = _userInfoDal.CheckPayPassowrd(payDetailModelGet.UserId, payDetailModelGet.PayPassword);
                if (!checkPayPassowrd)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = 4106, Messages = "支付密码错误"
                    }));
                }
                if (payDetailModelGet.PayDetailModels == null)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "支付金额信息有误"
                    }));
                }
                if (payDetailModelGet.PayDetailModels.Count < 1 || payDetailModelGet.PayDetailModels.Count > 2)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "支付金额信息有误"
                    }));
                }
                if (payDetailModelGet.PayDetailModels.Count(n => n.CurrencyId == 0) != 1)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "支付金额信息有误"
                    }));
                }
                if (payDetailModelGet.PayDetailModels.Count == 2)
                {
                    try
                    {
                        if (payDetailModelGet.PayDetailModels.Where(n => n.CurrencyId == 0).ToList()[0].Amount < payDetailModelGet.PayDetailModels.Where(n => n.CurrencyId == 2).ToList()[0].Amount)
                        {
                            throw new Exception();
                        }
                    }
                    catch (Exception)
                    {
                        return(Json(new ResultDataModel <StoreOrderModelResult> {
                            Code = -1, Messages = "支付金额信息有误"
                        }));
                    }
                }
                DataTable dtWalletInfo = _walletInfoDal.QueryWalletInfo(payDetailModelGet.UserId);
                IList <WalletInfoModelResult> currencyInfoModelResults =
                    ModelConvertHelper <WalletInfoModelResult> .ConvertToModel(dtWalletInfo);

                if (currencyInfoModelResults.Count <= 0)
                {
                    LogHelper.error("支付商城订单失败:用户金额有误");
                    throw new Exception();
                }

                foreach (var item in payDetailModelGet.PayDetailModels)
                {
                    decimal amount = currencyInfoModelResults.FirstOrDefault(n => n.CurrencyId == item.CurrencyId).CanUseAmount;
                    if (amount < item.Amount)
                    {
                        return(Json(new ResultDataModel <StoreOrderModelResult> {
                            Code = 4302, Messages = "余额不足"
                        }));
                    }
                }

                bool b = TransactionService.AddStoreOrder(payDetailModelGet, null);
                return(Json(new ResultDataModel <StoreOrderModelResult> {
                    Code = b ? 0 : -1, Messages = ""
                }));
            }
            catch (Exception)
            {
                return(Json(new ResultDataModel <StoreOrderModelResult> {
                    Code = 4001, Messages = "服务器内部出现错误"
                }));
            }
        }
        /// <summary>
        /// 审核赠送商品订单
        /// </summary>
        /// <param name="modelGet"></param>
        /// <returns></returns>
        public IHttpActionResult AuditGaveCommodityStoreOrder(AuditGaveCommodityStoreOrderModelGet modelGet)
        {
            try
            {
                if (modelGet.OrderId <= 0 || modelGet.UserId <= 0)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "参数有误"
                    }));
                }
                if (!_userInfoDal.CheckIsShareholder(modelGet.UserId))
                {
                    LogHelper.warn("非法账户请求股东接口,非法账户:" + modelGet.UserId);
                    return(Json(new ResultDataModel <IList <StoreOrderModelResult> > {
                        Code = 4108, Messages = "非法账户,该操作已被记录,并提交给客服人员"
                    }));
                }
                DataTable dt = _storeOrderDal.QueryStoreOrderInfo(modelGet.OrderId);
                if (dt.Rows.Count <= 0)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "订单不存在"
                    }));
                }
                UserCloudMinerDal userCloudMinerDal = new UserCloudMinerDal();
                int userRunningCount = userCloudMinerDal.QueryRunningCloudMinerCount(Convert.ToInt32(dt.Rows[0]["ConsignorUserId"]), Convert.ToInt32(dt.Rows[0]["CommodityId"]));
                if (Convert.ToInt32(dt.Rows[0]["PurchaseRestrictionCount"]) < userRunningCount + Convert.ToInt32(dt.Rows[0]["Count"]))
                {
                    _storeOrderDal.UpdateStoreOrderState(modelGet.OrderId, "5");
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "已超出购买数量限制"
                    }));
                }
                if (modelGet.State != "0")
                {
                    _storeOrderDal.UpdateStoreOrderState(modelGet.OrderId, "6");
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = 0
                    }));
                }
                DataTable dtWalletInfo = _walletInfoDal.QueryCompanyWalletInfo(1);
                IList <WalletInfoModelResult> currencyInfoModelResults =
                    ModelConvertHelper <WalletInfoModelResult> .ConvertToModel(dtWalletInfo);

                if (currencyInfoModelResults.Count <= 0)
                {
                    LogHelper.error("审核赠送商品订单失败:公司金额金额有误");
                    throw new Exception();
                }
                decimal amount = currencyInfoModelResults.First(n => n.CurrencyId == 0).CanUseAmount;
                if (amount < Convert.ToDecimal(dt.Rows[0]["TotalPrice"]))
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = -1, Messages = "审核赠送商品订单失败:公司账户通证数量不足"
                    }));
                }
                PayDetailModelGet payDetailModelGet = new PayDetailModelGet();
                payDetailModelGet.OrderNo = Convert.ToString(dt.Rows[0]["OrderNo"]);
                payDetailModelGet.UserId  = Convert.ToInt32(dt.Rows[0]["BuyUserId"]);
                payDetailModelGet.PayDetailModels.Add(new StoreOrderPayDetailModel {
                    CurrencyId = 0, OrderNo = payDetailModelGet.OrderNo, Amount = Convert.ToDecimal(dt.Rows[0]["TotalPrice"])
                });
                CountdownEvent countdownEvent = new CountdownEvent(1);
                bool           b = TransactionService.AddStoreOrder(payDetailModelGet, countdownEvent);
                if (!b)
                {
                    return(Json(new ResultDataModel <StoreOrderModelResult> {
                        Code = 4001, Messages = "服务器内部出现错误"
                    }));
                }
                countdownEvent.Wait();
                string state = _storeOrderDal.CheckStoreOrderState(modelGet.OrderId);
                return(Json(new ResultDataModel <StoreOrderModelResult> {
                    Code = state == "1" ? 0 : -1, Messages = state == "1" ? "" : "审核失败"
                }));
            }
            catch (Exception)
            {
                return(Json(new ResultDataModel <StoreOrderModelResult> {
                    Code = 4001, Messages = "服务器内部出现错误"
                }));
            }
        }
Example #4
0
        /// <summary>
        /// 添加商城自营交易
        /// </summary>
        /// <param name="payDetailModelGet"></param>
        /// <param name="countdownEvent"></param>
        /// <returns></returns>
        public static bool AddStoreOrder(PayDetailModelGet payDetailModelGet, CountdownEvent countdownEvent)
        {
            try
            {
                TransactionInfo transactionInfo = new TransactionInfo();
                transactionInfo.PayeeUserId = 5;
                DataTable dt = StoreOrderDal.QueryStoreOrderInfo(payDetailModelGet.OrderNo);
                if (dt.Rows.Count != 1)
                {
                    return(false);
                }
                decimal amount = Convert.ToDecimal(dt.Rows[0]["TotalPrice"]);
                if (amount != payDetailModelGet.PayDetailModels.Sum(n => n.Amount))
                {
                    StoreOrderDal.UpdateStoreOrderState(transactionInfo.OrderId, "5");
                    return(false);
                }
                transactionInfo.PayUserId = Convert.ToInt32(dt.Rows[0]["BuyUserId"]);
                int consignorUserId = Convert.ToInt32(dt.Rows[0]["ConsignorUserId"]);
                transactionInfo.Type = "00";

                transactionInfo.OrderId = Convert.ToInt32(dt.Rows[0]["Id"]);
                int commodityId = Convert.ToInt32(dt.Rows[0]["CommodityId"]);
                int count       = Convert.ToInt32(dt.Rows[0]["Count"]);
                if (count < 1)
                {
                    throw new Exception("订单中云矿机数量有误 OrderId:" + transactionInfo.OrderId);
                }

                transactionInfo.No = GetTransactionNo(transactionInfo.Type, payDetailModelGet.UserId);
                transactionInfo.ExectionedAction += (state) =>
                {
                    StoreOrderDal.UpdateStoreOrderState(transactionInfo.OrderId, state);
                    if (state == "1")
                    {
                        UserCloudMinerDal.InsertUserCloudMiner(transactionInfo.OrderId, payDetailModelGet.OrderNo,
                                                               transactionInfo.No, consignorUserId, commodityId, count);
                        foreach (var item in payDetailModelGet.PayDetailModels)
                        {
                            StoreOrderDal.InsertPayDetail(transactionInfo.OrderId, item.CurrencyId, item.Amount);
                        }
                        DataTable dtUserVipInfo = UserInfoDal.QueryUserVipInfo(consignorUserId);
                        if (dtUserVipInfo.Rows.Count == 1)
                        {
                            //用户当前的VIP等级
                            int       userRank = Convert.ToInt32(dtUserVipInfo.Rows[0]["Rank"]);
                            DataTable dtVipUrCloudminerInfo = VipInfoDal.QueryVipUrCloudminerUpgrade(commodityId);
                            if (dtVipUrCloudminerInfo.Rows.Count <= 0)
                            {
                                return;
                            }
                            int commodityUrRank = Convert.ToInt32(dtVipUrCloudminerInfo.Rows[0]["Rank"]);
                            if (userRank < commodityUrRank)
                            {
                                int commodityUrVipId = Convert.ToInt32(dtVipUrCloudminerInfo.Rows[0]["Id"]);
                                UserInfoDal.UpdateUserVip(consignorUserId, commodityUrVipId);
                            }
                        }
                    }
                    if (countdownEvent != null)
                    {
                        countdownEvent.Signal();
                    }
                };

                foreach (var item in payDetailModelGet.PayDetailModels)
                {
                    TransactionPayDetail loansTransaction = new TransactionPayDetail();
                    loansTransaction.CurrencyId = item.CurrencyId;
                    loansTransaction.Amount     = item.Amount;
                    transactionInfo.LoansTransactions.Add(loansTransaction);
                    TransactionPayDetail borrowTransaction = new TransactionPayDetail();
                    borrowTransaction.CurrencyId = item.CurrencyId;
                    borrowTransaction.Amount     = item.Amount;
                    transactionInfo.BorrowTransactions.Add(borrowTransaction);
                }
                if (TransactionQueue.AddQueue(transactionInfo))
                {
                    StoreOrderDal.UpdateStoreOrderState(transactionInfo.OrderId, "4");
                    return(true);
                }
                return(false);
            }
            catch (Exception exception)
            {
                LogHelper.error("添加支付订单时错误:" + exception.Message);
                return(false);
            }
        }