/// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="orders"></param>
        /// <para>
        ///
        /// </para>
        /// <returns></returns>
        public bool PlaceOrder(Orders orders)
        {
            // 1.校验商品是否存在
            var product = productRepository.QueryDetail(orders.Pid);

            if (product == null)
            {
                throw new MsgException("商品不存在");
            }
            if (product.Status != 1)
            {
                throw new MsgException("商品已下架");
            }
            if (product.State != 0)
            {
                throw new MsgException("账户已禁用");
            }

            // 2.生成订单
            IDictionary <string, DbParameter[]> dictionary = new Dictionary <string, DbParameter[]>();

            orders.OrderId  = IdWorkTool.Instance().GetId();
            orders.AddTime  = DateTime.Now;
            orders.EditTime = DateTime.Now;
            orderRepository.CreateOrder(orders, ref dictionary);

            // 3.事务下单
            orderRepository.CommitTransactionLock(dictionary);
            return(true); // TODO::虚拟类商品无需做库存设置,如果雇主需要请在第二期计划里做
        }
        /// <summary>
        /// 批量创建订单
        /// </summary>
        /// <param name="orders"></param>
        /// <returns></returns>
        public void PlaceOrder(IList <Orders> orders, ref IDictionary <string, DbParameter[]> dictionary)
        {
            IDictionary <string, DbParameter[]> nDictionary = new Dictionary <string, DbParameter[]>();

            // 1.校验商品是否存在
            var product = productRepository.QueryDetails(string.Join(",", orders.Select(item => item.Pid).ToList()));

            if (product == null)
            {
                throw new MsgException("商品不存在");
            }
            if (product.Count < orders.Count)
            {
                throw new MsgException("清单中包含已下架的商品, 请您重新下单!");
            }

            // 2.生成订单
            var orderId = IdWorkTool.Instance().GetId();

            orders[0].OrderId  = orderId;
            orders[0].AddTime  = DateTime.Now;
            orders[0].EditTime = DateTime.Now;
            orders[0].Amount   = product.First(item => item.Pid == orders[0].Pid).Amount;
            orders[0].Sid      = product.First(item => item.Pid == orders[0].Pid).Sid;
            orderRepository.CreateOrder(orders[0], ref nDictionary);

            if (orders.Count > 1)
            {
                for (int i = 1; i < orders.Count; i++)
                {
                    var order = orders[i];
                    order.OrderId  = IdWorkTool.Instance().GetId();
                    order.ParentId = orderId;
                    order.AddTime  = DateTime.Now;
                    order.EditTime = DateTime.Now;
                    order.Amount   = product.First(item => item.Pid == order.Pid).Amount;
                    order.Sid      = product.First(item => item.Pid == order.Pid).Sid;
                    orderRepository.CreateOrder(order, ref nDictionary);
                }
            }

            dictionary = nDictionary;
        }
Beispiel #3
0
            public static Pays GetPayAccounts(int fromUid, int toUid, PayParam payParam)
            {
                payParam.SystemRecordId = IdWorkTool.Instance().GetId();
                Pays pays = new Pays()
                {
                    PayId          = payParam.SystemRecordId,
                    FromUid        = fromUid,
                    ToUid          = toUid,
                    ChannelType    = Constants.DynamicMap.DefaultChannelType,
                    ProductType    = Constants.DynamicMap.DefaultProductType,
                    TradeType      = Constants.DynamicMap.RechargeTradeType,
                    Remark         = payParam.Remark,
                    Amount         = payParam.Amount,
                    Status         = 0,
                    SystemRecordId = IdWorkTool.Instance().GetId()
                };

                return(pays);
            }
Beispiel #4
0
        /// <summary>
        /// 直接充值
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="amount"></param>
        /// <returns></returns>
        public bool DirectRecharge(int uid, double amount)
        {
            // 1.生成参数
            IDictionary <string, DbParameter[]> dictionary = new Dictionary <string, DbParameter[]>();
            PayParam payParam = RechargeUtil.GetDirectParam(uid, amount);

            // 2.生成流水账
            Pays payAccounts = RechargeUtil.GetPayAccounts(Constants.HotAccountID, uid, payParam);

            paysRepository.InsertAccounts(payAccounts, ref dictionary);

            // 3.生成往来账
            var list = new List <Accounts>()
            {
                new Accounts()
                {
                    AccountsId       = IdWorkTool.Instance().GetId(),
                    PayId            = payParam.SystemRecordId,
                    TradeAccountId   = payParam.ToUid,
                    TradeAccountName = payParam.ToUsername,
                    AccountsType     = 1,
                    Amount           = payParam.Amount,
                    Remark           = payParam.Remark,
                    Currency         = payParam.Currency,
                    AddTime          = DateTime.Now
                }
            };

            accountsRepository.BatchInsertAccounts(list, ref dictionary);


            // 4.目标账户进账
            var user = userRepository.SelectFinanceDetail(uid);

            walletRepository.PutAccounts(user.Uid, amount, user.Version, ref dictionary);

            return(walletRepository.CommitTransactionLock(dictionary));
        }
Beispiel #5
0
        /// <summary>
        /// 生成往来账
        /// </summary>
        /// <param name="payParam"></param>
        /// <returns></returns>
        private IList <Accounts> GetCurrentAccounts(PayParam payParam)
        {
            // 生成甲方账单
            Accounts owner = new Accounts()
            {
                AccountsId       = IdWorkTool.Instance().GetId(),
                PayId            = payParam.SystemRecordId,
                TradeAccountId   = payParam.FromUid,
                TradeAccountName = payParam.FromUsername,
                AccountsType     = 2,
                Amount           = payParam.Amount,
                Remark           = payParam.Remark == null ? "借" : payParam.Remark,
                Currency         = payParam.Currency,
                AddTime          = DateTime.Now
            };

            // 生成乙方账单
            Accounts customer = new Accounts()
            {
                AccountsId       = IdWorkTool.Instance().GetId(),
                PayId            = payParam.SystemRecordId,
                TradeAccountId   = payParam.ToUid,
                TradeAccountName = payParam.ToUsername,
                AccountsType     = 1,
                Amount           = payParam.Amount,
                Remark           = payParam.Remark == null ? "贷" : payParam.Remark,
                Currency         = payParam.Currency,
                AddTime          = DateTime.Now
            };

            var list = new List <Accounts>();

            list.Add(owner);
            list.Add(customer);
            return(list);
        }