public CopyTraOrderResponseViewModel CopyTraOrder(CopyTraOrderRequestViewModel request)
        {
            //1.获取原始订单详情
            //2.新增新订单(订单主体信息,订单状态,行程信息,乘车人信息,审批信息),并关联原始订单号
            //3.如果是虚退复制,则将原订单设置线上隐藏
            int orderid = 0;
            CopyTraOrderModel copyTraOrderModel = Mapper.Map <CopyTraOrderRequestViewModel, CopyTraOrderModel>(request);

            using (var transaction = this.Context.Database.BeginTransaction())
            {
                try
                {
                    //新增复制订单
                    orderid = _copyTraOrderServiceBll.CopyOrder(copyTraOrderModel);
                    _corpAduitOrderServiceBll.Copy(request.CopyFromOrderId, orderid);
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw;
                }
            }

            return(new CopyTraOrderResponseViewModel()
            {
                OrderId = orderid
            });
        }
示例#2
0
        public int CopyOrder(CopyTraOrderModel copyTraOrderModel)
        {
            //原始订单
            TraOrderEntity copyTraOrderEntity = _traOrderDal.Find <TraOrderEntity>(copyTraOrderModel.CopyFromOrderId);

            if (copyTraOrderEntity == null)
            {
                throw new Exception("复制来源订单异常");
            }


            if (copyTraOrderModel.CopyType == "X")
            {
                TraOrderEntity copyTraRefundOrderEntity =
                    _traOrderDal.Query <TraOrderEntity>(
                        n => n.OrderRoot == copyTraOrderEntity.OrderId && n.OrderType == 2 && n.RefundType == 1, true).FirstOrDefault();
                if (copyTraRefundOrderEntity == null)
                {
                    throw new Exception("不是虚退订单,不能虚退复制");
                }
            }

            //原始订单行程信息
            List <TraOrderDetailEntity> copyTraOrderDetailEntities =
                _traOrderDetailDal.Query <TraOrderDetailEntity>(n => n.OrderId == copyTraOrderModel.CopyFromOrderId, true)
                .ToList();
            //原始订单乘车人信息
            List <int> copyPidList = copyTraOrderModel.PassengerList.Select(n => n.Pid).ToList();
            List <TraPassengerEntity> copyTraPassengerEntities =
                _traPassengerDal.Query <TraPassengerEntity>(n => copyPidList.Contains(n.Pid)).ToList();


            //原始订单信息映射复制新实体
            TraOrderEntity traOrderEntity = Mapper.Map <TraOrderEntity, TraOrderEntity>(copyTraOrderEntity);
            List <TraOrderDetailEntity> traOrderDetailEntities =
                Mapper.Map <List <TraOrderDetailEntity>, List <TraOrderDetailEntity> >(copyTraOrderDetailEntities);
            List <TraPassengerEntity> traPassengerEntities =
                Mapper.Map <List <TraPassengerEntity>, List <TraPassengerEntity> >(copyTraPassengerEntities);

            //复制新实体 新增订单
            traOrderEntity.CreateOid            = copyTraOrderModel.CreateOid;
            traOrderEntity.CopyType             = copyTraOrderModel.CopyType;
            traOrderEntity.PayAmount            = copyTraOrderModel.PayAmount;
            traOrderEntity.TotalMoney           = copyTraOrderModel.PayAmount;
            traOrderEntity.PrintProcurementTime = null;
            traOrderEntity.IsNeedPrintTime      = null;
            if (traOrderEntity.CopyType != "X")//不是虚退复制
            {
                traOrderEntity.CreateTime      = DateTime.Now;
                traOrderEntity.CopyFromOrderId = copyTraOrderModel.CopyFromOrderId;
            }
            else
            {
                if (string.IsNullOrEmpty(copyTraOrderEntity.CopyType))
                {
                    traOrderEntity.CopyFromOrderId = copyTraOrderModel.CopyFromOrderId;
                }
                else
                {
                    //如果当前原始订单是虚退复制的,那么它的虚退复制订单的马甲订单号继承原始订单的马甲订单号
                    if (copyTraOrderEntity.CopyType == "X" && copyTraOrderEntity.CopyFromOrderId.HasValue)
                    {
                        traOrderEntity.CopyFromOrderId = copyTraOrderEntity.CopyFromOrderId;
                    }
                    else
                    {
                        traOrderEntity.CopyFromOrderId = copyTraOrderModel.CopyFromOrderId;
                    }
                }
            }

            traOrderEntity = _traOrderDal.Insert(traOrderEntity);

            TraOrderStatusEntity orderStatusEntity = new TraOrderStatusEntity();

            orderStatusEntity.OrderId        = traOrderEntity.OrderId;
            orderStatusEntity.ProccessStatus = 64;//设置处理中
            _traOrderStatusDal.Insert(orderStatusEntity);


            foreach (var detail in traOrderDetailEntities)
            {
                detail.OrderId = traOrderEntity.OrderId;
                List <TraPassengerEntity> thisTravelPassengerList =
                    traPassengerEntities.FindAll(n => n.OdId == detail.OdId);

                detail.ServiceFee = thisTravelPassengerList.Sum(n => (n.ServiceFee ?? 0)) / thisTravelPassengerList.Count;
                detail.FacePrice  = thisTravelPassengerList.Sum(n => (n.FacePrice ?? 0)) / thisTravelPassengerList.Count;

                detail.TotalPrice = (detail.ServiceFee + detail.FacePrice) * (detail.TicketNum ?? 0);
                TraOrderDetailEntity traOrderDetailEntity = _traOrderDetailDal.Insert(detail);

                foreach (var p in traPassengerEntities)
                {
                    p.OdId = traOrderDetailEntity.OdId;
                    _traPassengerDal.Insert(p);
                }
            }

            _traOrderLogDal.Insert <TraOrderLogEntity>(new TraOrderLogEntity()
            {
                OrderId    = traOrderEntity.OrderId,
                CreateOid  = traOrderEntity.CreateOid,
                CreateTime = DateTime.Now,
                LogType    = "OI",
                LogContent = "复制订单,来源订单号:" + copyTraOrderModel.CopyFromOrderId + ",马甲订单号:" + traOrderEntity.CopyFromOrderId
            });

            //将原始订单设置为线上隐藏
            if (copyTraOrderModel.CopyType == "X")
            {
                copyTraOrderEntity.IsOnlineShow = 1;
                _traOrderDal.Update(copyTraOrderEntity, new string[] { "IsOnlineShow" });
            }

            return(traOrderEntity.OrderId);
        }