public void Post(long studentId, BalanceRefundOrderRequest request)
 {
     request.CreatorId   = base.CurrentUser.UserId;
     request.CreatorName = base.CurrentUser.UserName;
     request.CreateTime  = DateTime.Now;
     new BalanceRefundOrderServices(base.SchoolId, studentId).Transact(request, base.CurrentUser.CompanyId);
 }
        /// <summary>
        /// 数据校验
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-12-05</para>
        /// </summary>
        /// <param name="refundRequest">余额退费请求对象</param>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:
        /// 15. 转出余额不足
        /// 23. 该学生已经没有余额可退
        /// </exception>
        private void CheckBeforeTransact(BalanceRefundOrderRequest refundRequest)
        {
            //1、获取学生的余额信息
            decimal balance = new WalletService(this._schoolId, this._studentId, null).Balance;

            //检查用户是否还有余额
            if (balance == 0)
            {
                throw new BussinessException((byte)ModelType.Order, 23);
            }
            //检查用户余额是否足够转出
            if (refundRequest.RefundAmount > balance)
            {
                throw new BussinessException((byte)ModelType.Order, 15);
            }
        }
        /// <summary>
        /// 保存余额退费的支付信息
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-08</para>
        /// </summary>
        /// <param name="unitOfWork">事务单元</param>
        /// <param name="refundRequest">余额退费请求对象</param>
        /// <param name="refundOrderId">退费订单Id</param>
        private void AddRefundPay(UnitOfWork unitOfWork, BalanceRefundOrderRequest refundRequest, long refundOrderId)
        {
            var             rep       = unitOfWork.GetCustomRepository <TblOdrRefundPayRepository, TblOdrRefundPay>();
            TblOdrRefundPay refundPay = new TblOdrRefundPay
            {
                RefundPayId   = IdGenerator.NextId(),
                SchoolId      = this._schoolId,
                RefundOrderId = refundOrderId,
                RefundType    = (int)RefundType.RefundToParent,
                BankName      = refundRequest.BankName,
                BankCardNo    = refundRequest.BankCardNo,
                BankUserName  = refundRequest.BankUserName,
                Remark        = refundRequest.Reason,
                CreateTime    = refundRequest.CreateTime
            };

            rep.Add(refundPay);
        }
        /// <summary>
        /// 添加余额退费的其他扣费项
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-17</para>
        /// </summary>
        /// <param name="unitOfWork">事务单元</param>
        /// <param name="refundRequest">余额退费请求对象</param>
        /// <param name="refundOrderId">退费订单Id</param>
        private void AddRefundOrderCost(UnitOfWork unitOfWork, BalanceRefundOrderRequest refundRequest, long refundOrderId)
        {
            if (!refundRequest.OtherCostRequest.Any())
            {
                return;
            }
            var rep = unitOfWork.GetCustomRepository <TblOdrRefundOrderCostRepository, TblOdrRefundOrderCost>();
            List <TblOdrRefundOrderCost> refundOrderCosts = refundRequest.OtherCostRequest.Select(m => new TblOdrRefundOrderCost
            {
                Amount            = m.CostAmount,
                SchoolId          = this._schoolId,
                CostId            = m.CostId,
                CreateTime        = refundRequest.CreateTime,
                RefundClassCostId = IdGenerator.NextId(),
                RefundOrderId     = refundOrderId
            }).ToList();

            rep.Add(refundOrderCosts);
        }
        /// <summary>
        /// 保存退费订单信息
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-08</para>
        /// </summary>
        /// <param name="unitOfWork">事务单元</param>
        /// <param name="refundRequest">余额退费请求对象</param>
        /// <param name="refundOrderId">退费订单Id</param>
        /// <returns></returns>
        private async Task <TblOdrRefundOrder> AddRefundOrder(UnitOfWork unitOfWork, BalanceRefundOrderRequest refundRequest, long refundOrderId)
        {
            var rep = unitOfWork.GetCustomRepository <TblOdrRefundOrderRepository, TblOdrRefundOrder>();
            TblOdrRefundOrder refundOrder = new TblOdrRefundOrder
            {
                RefundOrderId     = refundOrderId,
                SchoolId          = this._schoolId,
                StudentId         = this._studentId,
                OrderNo           = base.CreateOrderNo(refundOrderId),
                OrderType         = (int)OrderTradeType.BalanceOrder,
                TotalDeductAmount = this.GetOtherCostAmount(refundRequest.OtherCostRequest),//扣款项统计 refundRequest.TotalDeductAmount,
                Amount            = refundRequest.RefundAmount,
                OrderStatus       = (int)OrderStatus.Paid,
                CancelUserId      = string.Empty,
                CancelDate        = null,
                CancelRemark      = string.Empty,
                CreatorId         = refundRequest.CreatorId,
                CreatorName       = refundRequest.CreatorName,
                CreateTime        = refundRequest.CreateTime
            };
            await rep.AddTask(refundOrder);

            return(refundOrder);
        }