/// <summary>
        /// 作废定金
        /// <para>作     者::Huang GaoLiang  </para>
        /// <para>创建时间:2018-10-30 </para>
        /// </summary>
        /// <param name="orderId">订金编号</param>
        /// <param name="cancelUserId">作废人操作编号</param>
        /// <param name="cancelUserName">作废人名称</param>
        /// <param name="cancelRemark">作废原因</param>
        /// <exception cref="BussinessException">
        /// 异常ID:5,数据异常
        /// 异常ID:8,余额不足,不能作废
        /// </exception>
        public override Task Cancel(long orderId, string cancelUserId, string cancelUserName, string cancelRemark)
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_DEPOSITORDERCANCEL, this._schoolId, orderId.ToString()))
            {
                // 根据订金编号查询订金信息
                TblOdrDepositOrder odrDepositOrder = _odrDepositOrderRepository.Value.GetOdrDepositOrder(orderId);

                if (odrDepositOrder == null)
                {
                    throw new BussinessException((byte)ModelType.Cash, 5);
                }

                // 1、数据校验
                OdrDepositOrderCancelVerification(odrDepositOrder);

                // 2、准备数据
                odrDepositOrder.OrderStatus    = (int)OrderStatus.Cancel;
                odrDepositOrder.CancelDate     = DateTime.Now;
                odrDepositOrder.CancelUserId   = cancelUserId;
                odrDepositOrder.CancelUserName = cancelUserName;
                odrDepositOrder.CancelRemark   = cancelRemark;

                // 3、作废之后,余额扣除掉相应的金额
                bool isWalletSufficient = WalletService.IsWalletSufficient(_schoolId, odrDepositOrder.StudentId, odrDepositOrder.Amount);

                if (!isWalletSufficient)
                {
                    throw new BussinessException((byte)ModelType.Cash, 8);
                }

                DepositOrderTrade orderTrade = new DepositOrderTrade(odrDepositOrder);

                using (UnitOfWork unitOfWork = new UnitOfWork())
                {
                    try
                    {
                        unitOfWork.BeginTransaction();

                        // 1、资金交易
                        TradeService tradeService = new TradeService(orderTrade, unitOfWork);
                        tradeService.Invalid();

                        // 2、订金
                        unitOfWork.GetCustomRepository <TblOdrDepositOrderRepository, TblOdrDepositOrder>().UpdateTask(odrDepositOrder).Wait();

                        // 3、收款交接
                        new OrderHandoverService(_schoolId).DeleteHandleOver(orderId, OrderTradeType.DepositOrder, unitOfWork);

                        unitOfWork.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        unitOfWork.RollbackTransaction();
                        throw ex;
                    }
                }
            }
            return(Task.CompletedTask);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 定金订单交易构造函数
        /// <para>作    者: Huang GaoLiang </para>
        /// <para>创建时间: 2018-09-07</para>
        /// </summary>
        /// <param name="entity">订金实体信息</param>
        public DepositOrderTrade(TblOdrDepositOrder entity)
        {
            this._entity = entity;

            switch (entity.OrderStatus)
            {
            case (int)OrderStatus.Paid:
                this._remark = "定金充值";
                break;

            case (int)OrderStatus.Cancel:
                this._remark = "定金作废";
                break;
            }
        }
        /// <summary>
        /// 添加订金
        /// <para>作     者:Huang GaoLiang </para>
        /// <para>创建时间:2018-10-30 </para>
        /// </summary>
        /// <param name="request">订金充值实体</param>
        /// <param name="payeeId">收银人编号</param>
        /// <param name="payeeName">收银人</param>
        /// <returns>返回订金编号</returns>

        public string Add(DepositOrderAddRequest request, string payeeId, string payeeName)
        {
            lock (LocalThreadLock.GetLockKeyName(LockKeyNames.LOCK_DEPOSITORDERADD, this._schoolId, request.StudentId.ToString()))
            {
                // 1、数据合法性校验
                Verification(request);

                long depositOrderId = IdGenerator.NextId();

                // 2、准备数据
                TblOdrDepositOrder odrDepositOrder = this.SetOdrDepositOrder(request, payeeId, payeeName, depositOrderId);

                // 3、资金调用
                DepositOrderTrade orderTrade = new DepositOrderTrade(odrDepositOrder);

                // 4、添加事务
                using (UnitOfWork unitOfWork = new UnitOfWork())
                {
                    try
                    {
                        unitOfWork.BeginTransaction();

                        TradeService tradeService = new TradeService(orderTrade, unitOfWork);
                        tradeService.Trade();

                        unitOfWork.GetCustomRepository <TblOdrDepositOrderRepository, TblOdrDepositOrder>().AddTask(odrDepositOrder).Wait();

                        unitOfWork.CommitTransaction();
                        return(depositOrderId.ToString());
                    }
                    catch (Exception ex)
                    {
                        unitOfWork.RollbackTransaction();
                        throw ex;
                    }
                }
            }
        }
        /// <summary>
        /// 订金作废逻辑判断
        /// <para>作     者::Huang GaoLiang  </para>
        /// <para>创建时间:2018-10-30 </para>
        /// </summary>
        /// <param name="depositOrder">订金信息</param>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:5,数据异常
        /// 异常ID:6,余额不足,不能作废
        /// </exception>
        private static void OdrDepositOrderCancelVerification(TblOdrDepositOrder depositOrder)
        {
            //作废逻辑:
            //1、已交接和已作废的数据不能再作废,不显示【作废】的按钮。
            //2、作废的时候判断学生的余额够不够作废,不够则不能作废。

            if (depositOrder == null)
            {
                throw new BussinessException((byte)ModelType.Cash, 5);
            }

            // 已交接
            if (depositOrder.OrderStatus == Convert.ToInt32(OrderStatus.Finish))
            {
                throw new BussinessException((byte)ModelType.Cash, 6);
            }

            // 已作废
            if (depositOrder.OrderStatus == Convert.ToInt32(OrderStatus.Cancel))
            {
                throw new BussinessException((byte)ModelType.Cash, 6);
            }
        }
        /// <summary>
        /// 订金充值
        /// <para>作     者:Huang GaoLiang </para>
        /// <para>创建时间:2018-10-30 </para>
        /// </summary>
        /// <param name="request">订金充值实体</param>
        /// <param name="payeeId">收银人编号</param>
        /// <param name="payeeName">收银人姓名</param>
        /// <param name="depositOrderId">订金编号</param>
        /// <returns>返回订金实体信息</returns>
        private TblOdrDepositOrder SetOdrDepositOrder(DepositOrderAddRequest request, string payeeId, string payeeName, long depositOrderId)
        {
            TblOdrDepositOrder odrDepositOrder = new TblOdrDepositOrder
            {
                DepositOrderId = depositOrderId,
                StudentId      = request.StudentId,
                SchoolId       = _schoolId,
                OrderNo        = CreateOrderNo(depositOrderId),
                PayDate        = DateTime.Now,
                UsesType       = (int)request.UsesType,
                Amount         = request.Amount,
                PayeeId        = payeeId,
                Payee          = payeeName,
                PayType        = (int)request.PayType,
                Remark         = request.Remark,
                OrderStatus    = (int)OrderStatus.Paid, //-1订单取消, 0待付款,1已付款/正常
                CancelUserId   = "",
                CancelRemark   = "",
                CreateTime     = DateTime.Now
            };

            return(odrDepositOrder);
        }
        /// <summary>
        /// 根据订金编号获取订金详情
        /// <para>作     者::Huang GaoLiang  </para>
        /// <para>创建时间:2018-11-10 </para>
        /// </summary>
        /// <param name="orderId">订金编号</param>
        /// <param name="companyId">公司编号</param>
        /// <returns>返回获取订金详情</returns>
        /// <exception cref="AMS.Core.BussinessException">
        /// 异常ID:7,数据异常
        /// </exception>
        public override IOrderDetailResponse GetOrderDetail(long orderId, string companyId)
        {
            TblOdrDepositOrder odrDepositOrder = _odrDepositOrderRepository.Value.GetOdrDepositOrderById(orderId).Result;

            DepositOrderDetailResponse info = Mapper.Map <TblOdrDepositOrder, DepositOrderDetailResponse>(odrDepositOrder);

            // 根据学生编号查询学生信心
            StudentDetailResponse s = new StudentService(_schoolId).GetStudent(info.StudentId);

            if (s == null)
            {
                throw new BussinessException((byte)ModelType.SignUp, 7);
            }

            info.StudentName   = s.StudentName;
            info.SexName       = s.SexName;
            info.HeadFaceUrl   = s.HeadFaceUrl;
            info.Age           = s.Age;
            info.IDNumber      = s.IDNumber;
            info.IDType        = s.IDType;
            info.IDTypeName    = s.IdTypeName;
            info.ContactPerson = s.ContactPerson;
            return(info);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 添加已核对的未交接核对信息
        /// <para>作    者:郭伟佳</para>
        /// <para>创建时间:2018-11-16</para>
        /// </summary>
        /// <param name="request">核对未交接数据对象</param>
        /// <param name="status">订单交接核对状态</param>
        /// <param name="orderInfo">订金信息对象</param>
        /// <returns>订单交接核对明细Id</returns>
        private long AddDepositUnhandover(OrderHandleAddRequest request, HandoverStatus status, TblOdrDepositOrder orderInfo)
        {
            var entity = new TblFinOrderHandoverDetail
            {
                OrderHandoverDetailId = IdGenerator.NextId(),
                OrderId          = orderInfo.DepositOrderId,
                OrderNo          = orderInfo.OrderNo,
                OrderTradeType   = request.OrderTradeType,
                PayType          = request.PayType,
                PayAmount        = request.PayAmount.Value,
                HandoverStatus   = (int)status,
                PersonalId       = request.PersonalId,
                PayDate          = request.PayDate,
                SchoolId         = request.SchoolId,
                UseBalanceAmount = request.UseBalanceAmount ?? 0,
                CreateTime       = DateTime.Now,
                CreatorId        = request.CreatorId,
                CreatorName      = request.CreatorName,
                StudentId        = orderInfo.StudentId,
                Remark           = orderInfo.Remark,
                TotalDiscountFee = 0
            };

            _detailRepository.Value.Add(entity);

            return(entity.OrderHandoverDetailId);
        }