示例#1
0
        /// <summary>
        /// 取消抢票
        /// </summary>
        /// <param name="cancelTraGrabTicketModel"></param>
        /// <returns></returns>
        public CancelTraGrabTicketResultModel CancelTraGrabTicket(CancelTraGrabTicketModel cancelTraGrabTicketModel)
        {
            TraGrabTicketEntity traGrabTicketEntity =
                _traGrabTicketDal.Find <TraGrabTicketEntity>(cancelTraGrabTicketModel.GrabId);

            if (traGrabTicketEntity == null)
            {
                throw new Exception("未找到抢票信息");
            }
            //请求取消接口
            GrabTicketCancelResponseModel grabTicketCancelResponseModel =
                _requestGrabTicketCancelBll.CancelGrabTicket(new GrabTicketCancelRequestModel()
            {
                qorderid = traGrabTicketEntity.OrderId.ToString()
            });

            CancelTraGrabTicketResultModel cancelTraGrabTicketResultModel = new CancelTraGrabTicketResultModel();

            if (!grabTicketCancelResponseModel.isSuccess)
            {
                cancelTraGrabTicketResultModel.IsSuccess = false;
                cancelTraGrabTicketResultModel.Message   = grabTicketCancelResponseModel.msg;
            }
            else
            {
                cancelTraGrabTicketResultModel.IsSuccess = true;
                traGrabTicketEntity.GrabStatus           = "C";
                _traGrabTicketDal.Update(traGrabTicketEntity);
            }

            return(cancelTraGrabTicketResultModel);
        }
 public bool UpdateTraGrabTicketStatusByAfterSubmit(UpdateTraGrabTicketStatusModel updateTraGrabTicketStatusModel)
 {
     TraGrabTicketEntity traGrabTicketEntity=_traGrabTicketDal.Find<TraGrabTicketEntity>(updateTraGrabTicketStatusModel.GrabId);
     traGrabTicketEntity.GrabStatus = updateTraGrabTicketStatusModel.GrabStatus.ToString();
     traGrabTicketEntity.SubmitFailedReason = updateTraGrabTicketStatusModel.SubmitFailedReason;
     _traGrabTicketDal.Update(traGrabTicketEntity, new string[] {"GrabStatus", "SubmitFailedReason"});
     return true;
 }
        public void GetGrabTicketFailedNotice(GrabTicketFailedDataAsyncResponseModel failedData)
        {
            int orderid = Convert.ToInt32(failedData.orderid);

            TraGrabTicketEntity traGrabTicketEntity =
                _traGrabTicketDal.Query <TraGrabTicketEntity>(n => n.OrderId == orderid).FirstOrDefault();

            if (traGrabTicketEntity == null)
            {
                throw new Exception("未找到对应的系统订单");
            }
            traGrabTicketEntity.GrabStatus       = TrainGrabStatusEnum.F.ToString();
            traGrabTicketEntity.GrabFailedReason = failedData.Msg;
            _traGrabTicketDal.Update(traGrabTicketEntity, new string[] { "GrabStatus", "GrabFailedReason" });
        }
        /// <summary>
        ///  获取抢票异步成功通知,并做处理
        ///  则自动生成火车订单,通知抢票发起者
        /// </summary>
        public void GetGrabTicketSuccessNotice(GrabTicketSuccessedDataAsyncResponseModel successedData)
        {
            int orderid = Convert.ToInt32(successedData.orderid);

            #region 1.更新抢票信息状态

            TraGrabTicketEntity traGrabTicketEntity =
                _traGrabTicketDal.Query <TraGrabTicketEntity>(n => n.OrderId == orderid).FirstOrDefault();
            if (traGrabTicketEntity == null)
            {
                throw new Exception("未找到对应的系统订单");
            }
            traGrabTicketEntity.GrabStatus = TrainGrabStatusEnum.S.ToString();
            _traGrabTicketDal.Update(traGrabTicketEntity, new string[] { "GrabStatus" });

            #endregion


            #region 2.1 根据订单获取预设订单信息

            TraOrderEntity traOrderEntity = _traOrderDal.Find <TraOrderEntity>(orderid);
            if (traOrderEntity == null)
            {
                throw new Exception("订单信息异常");
            }
            if (traOrderEntity.OrderType == 0)
            {
                throw new Exception("该订单已经回调");
            }

            TraOrderDetailEntity traOrderDetailEntity =
                _traOrderDetailDal.Query <TraOrderDetailEntity>(n => n.OrderId == traOrderEntity.OrderId)
                .FirstOrDefault();
            if (traOrderDetailEntity == null)
            {
                throw new Exception("订单信息异常");
            }

            TraOrderStatusEntity traOrderStatusEntity =
                _traOrderStatusDal.Query <TraOrderStatusEntity>(n => n.OrderId == traOrderEntity.OrderId)
                .FirstOrDefault();
            if (traOrderStatusEntity == null)
            {
                throw new Exception("订单信息异常");
            }

            List <TraPassengerEntity> traPassengerEntities =
                _traPassengerDal.Query <TraPassengerEntity>(n => n.OdId == traOrderDetailEntity.OdId).ToList();
            if (traPassengerEntities.Count == 0)
            {
                throw new Exception("订单信息异常");
            }

            #endregion

            #region 2.2根据返回结果,更新预设订单信息

            traOrderEntity.TransactionId = successedData.transactionid;
            traOrderEntity.OrderType     = 0;
            if (successedData.refund_online == "1")
            {
                traOrderEntity.IsRefundBy12306 = false;
            }
            else
            {
                traOrderEntity.IsRefundBy12306 = true;
            }

            traOrderDetailEntity.OrderId12306 = successedData.ordernumber;
            traOrderDetailEntity.StartName    = successedData.from_station_name;
            traOrderDetailEntity.StartCode    = successedData.from_station_code;
            traOrderDetailEntity.StartTime    = Convert.ToDateTime(successedData.start_time);
            TraAddressEntity startAddressEntity =
                _traAddressDal.Query <TraAddressEntity>(n => n.Addr_Name == traOrderDetailEntity.StartName)
                .FirstOrDefault();
            if (startAddressEntity != null)
            {
                traOrderDetailEntity.StartNameId = startAddressEntity.Aid;
            }

            traOrderDetailEntity.EndName = successedData.to_station_name;
            traOrderDetailEntity.EndCode = successedData.to_station_code;
            traOrderDetailEntity.EndTime = Convert.ToDateTime(successedData.arrive_time);
            TraAddressEntity endAddressEntity =
                _traAddressDal.Query <TraAddressEntity>(n => n.Addr_Name == traOrderDetailEntity.EndName)
                .FirstOrDefault();
            if (endAddressEntity != null)
            {
                traOrderDetailEntity.EndNameId = endAddressEntity.Aid;
            }

            traOrderDetailEntity.TrainNo    = successedData.checi;
            traOrderDetailEntity.FacePrice  = Convert.ToDecimal(successedData.orderamount) / 2;
            traOrderDetailEntity.TotalPrice = traOrderDetailEntity.FacePrice + traOrderDetailEntity.ServiceFee;



            foreach (TraPassengerEntity traPassengerEntity in traPassengerEntities)
            {
                GrabTicketSuccessedPassengerAsyncResponseModel grabTicketPassenger = successedData.passengers.Find(
                    n => n.passengersename == traPassengerEntity.Name && n.passportseno == traPassengerEntity.CardNo);
                traPassengerEntity.FacePrice = Convert.ToDecimal(grabTicketPassenger.price);
                List <string> cxinList = grabTicketPassenger.cxin.Split(',').ToList();
                if (cxinList.Count == 2)
                {
                    traPassengerEntity.PlaceCar    = cxinList[0];
                    traPassengerEntity.PlaceSeatNo = cxinList[1];
                }
                traPassengerEntity.PlaceGrade = grabTicketPassenger.zwname;
                traPassengerEntity.TicketNo   = grabTicketPassenger.ticket_no;

                _traPassengerDal.Update(traPassengerEntity,
                                        new string[] { "FacePrice", "PlaceCar", "PlaceSeatNo", "PlaceGrade", "TicketNo" });
            }

            traOrderEntity.TotalMoney = traPassengerEntities.Sum(n => (n.ServiceFee ?? 0) + (n.FacePrice ?? 0));
            traOrderEntity.PayAmount  = traOrderEntity.TotalMoney;

            traOrderStatusEntity.IsBuy           = 1;
            traOrderStatusEntity.ProccessStatus  = traOrderStatusEntity.ProccessStatus + 1 + 8 + 64; //已付款,已预定
            traOrderStatusEntity.RealPayOid      = "sys";
            traOrderStatusEntity.RealPayDatetime = DateTime.Now;

            //更新订单
            _traOrderDal.Update(traOrderEntity,
                                new string[] { "TransactionId", "IsRefundBy12306", "TotalMoney", "PayAmount", "OrderType" });
            //更新行程
            _traOrderDetailDal.Update(traOrderDetailEntity,
                                      new string[]
            {
                "OrderId12306", "StartName", "StartCode", "StartTime", "EndName", "EndCode", "EndTime",
                "TrainNo",
                "FacePrice", "TotalPrice"
            });
            //更新订单状态
            _traOrderStatusDal.Update(traOrderStatusEntity,
                                      new[] { "IsBuy", "ProccessStatus", "RealPayOid", "RealPayDatetime" });

            #endregion

            #region 2.3 设置付款信息,并记录日志

            PaySupplierEvent?.Invoke(this, new CommonEventArgs <AccountDetailModel>(new AccountDetailModel()
            {
                Aid              = 81,
                Amount           = traPassengerEntities.Sum(n => (n.FacePrice ?? 0)) + 5, //抢票订单+5块
                Detailtype       = "火车票付票款",
                Oid              = "sys",
                CreateTime       = DateTime.Now,
                Source           = "火车票付票款",
                OrderId          = traOrderEntity.OrderId,
                OrderType        = "Tra",
                Provider         = 0,
                CollectionRemark = "",
                EstimateId       = 0
            }));

            _traOrderLogDal.Insert(new TraOrderLogEntity()
            {
                OrderId    = traOrderEntity.OrderId,
                CreateOid  = "sys",
                CreateTime = DateTime.Now,
                LogContent = "抢票出票回调,自动勾已预定、已付票款、已采购",
                LogType    = "修改"
            });

            #endregion

            #region 2.3插入Tra_InterFaceOrder表,以便退改签流程

            TraInterFaceOrderEntity traInterFaceOrderEntity =
                _traInterFaceOrderDal.Insert <TraInterFaceOrderEntity>(new TraInterFaceOrderEntity()
            {
                OrderId       = traOrderEntity.OrderId.ToString(),
                CreateTime    = DateTime.Now,
                Status        = (int)OrderTypeEnum.TicketSuccess,
                Transactionid = traOrderEntity.TransactionId,
                OrderNumber   = traOrderDetailEntity.OrderId12306
            });

            _traOrderOperateDal.Insert(new TraOrderOperateEntity()
            {
                InterfaceId        = traInterFaceOrderEntity.InterfaceId,
                AfterOperateStatus = (int)OrderTypeEnum.TicketSuccess,
                BeforOperateStatus = 0,
                OperateTime        = DateTime.Now
            });

            #endregion
        }
示例#5
0
        /// <summary>
        /// 添加抢票信息
        /// </summary>
        /// <param name="addTraGrabTicketModel"></param>
        /// <returns></returns>
        public int AddTraGrabTicket(AddTraGrabTicketModel addTraGrabTicketModel)
        {
            #region 预生成一张抢票订单
            TraAddOrderModel traAddOrderModel = new TraAddOrderModel();
            traAddOrderModel.OrderSource             = addTraGrabTicketModel.OrderSource;
            traAddOrderModel.Order                   = new TraOrderModel();
            traAddOrderModel.Order.Cid               = addTraGrabTicketModel.Cid ?? 0;
            traAddOrderModel.Order.OrderType         = 1;
            traAddOrderModel.Order.PayType           = PayTypeEnum.Cas;
            traAddOrderModel.Order.SendType          = addTraGrabTicketModel.SendType;
            traAddOrderModel.Order.CName             = addTraGrabTicketModel.CName;
            traAddOrderModel.Order.CMobile           = addTraGrabTicketModel.CMobile;
            traAddOrderModel.Order.CEmail            = addTraGrabTicketModel.CEmail;
            traAddOrderModel.Order.CPhone            = addTraGrabTicketModel.CPhone;
            traAddOrderModel.Order.CFax              = addTraGrabTicketModel.CFax;
            traAddOrderModel.Order.SendAddress       = addTraGrabTicketModel.SendAddress;
            traAddOrderModel.Order.OrderFrom         = TraOrderFromEnum.Interface.ToString();
            traAddOrderModel.Order.CreateOid         = addTraGrabTicketModel.CreateOid;
            traAddOrderModel.Order.IsGrabTicketOrder = true;
            traAddOrderModel.Order.IsOnline          = "F";
            if (!string.IsNullOrEmpty(traAddOrderModel.Customer?.CorpID))
            {
                traAddOrderModel.Order.BalanceType = 1;
                traAddOrderModel.Order.TravelType  = 0;
            }

            traAddOrderModel.Order.SendTime     = addTraGrabTicketModel.SendTime;
            traAddOrderModel.Order.LastSendTime = addTraGrabTicketModel.LastSendTime;

            if (addTraGrabTicketModel.ProjectId.HasValue)
            {
                traAddOrderModel.Order.ProjectId = addTraGrabTicketModel.ProjectId.Value;
            }

            if (!string.IsNullOrEmpty(addTraGrabTicketModel.Depart))
            {
                traAddOrderModel.Order.CostCenter = addTraGrabTicketModel.Depart;
            }
            else
            {
                traAddOrderModel.Order.CostCenter = "";
            }

            traAddOrderModel.OrderStatus = new TraOrderStatusModel();

            traAddOrderModel.OrderDetailList = new List <TraOrderDetailModel>();
            TraOrderDetailModel traOrderDetailModel = new TraOrderDetailModel()
            {
                StartName     = addTraGrabTicketModel.StartCodeName,
                StartNameCode = addTraGrabTicketModel.StartCode,
                EndName       = addTraGrabTicketModel.EndCodeName,
                EndNameCode   = addTraGrabTicketModel.EndCode,
                StartTime     = addTraGrabTicketModel.StartTime,
                OnTrainTime   = addTraGrabTicketModel.StartTime,
                EndTime       = addTraGrabTicketModel.StartTime,
                TrainNo       = "抢票",
                TicketNum     = addTraGrabTicketModel.PassengerList.Count,
                ServiceFee    = addTraGrabTicketModel.ServiceFee,
                FacePrice     = 0,
                TotalPrice    = 0,
                StartCode     = addTraGrabTicketModel.StartCode,
                EndCode       = addTraGrabTicketModel.EndCode,
                PlaceType     = "抢票",
                PlaceGrade    = "抢票",
                PassengerList = new List <TraPassengerModel>()
            };

            List <ContactInfoModel> contactList = new List <ContactInfoModel>();
            foreach (TraGrabTicketPassengerModel traGrabTicketPassengerModel in addTraGrabTicketModel.PassengerList)
            {
                TraPassengerModel passengerModel = new TraPassengerModel()
                {
                    Name       = traGrabTicketPassengerModel.PassengerName,
                    CardNo     = traGrabTicketPassengerModel.CardNo,
                    CardNoType = traGrabTicketPassengerModel.CardType,
                    Mobile     = traGrabTicketPassengerModel.Mobile,
                    AgeType    = traGrabTicketPassengerModel.TicketType,
                    ServiceFee = addTraGrabTicketModel.ServiceFee,
                    ContactId  = traGrabTicketPassengerModel.ContactId,
                    FacePrice  = 0
                };
                traOrderDetailModel.PassengerList.Add(passengerModel);

                contactList.Add(new ContactInfoModel()
                {
                    ContactId      = passengerModel.ContactId,
                    CardNo         = passengerModel.CardNo,
                    CardNoType     = (int)passengerModel.CardNoType,
                    CName          = passengerModel.Name,
                    Mobile         = passengerModel.Mobile,
                    Cid            = traAddOrderModel.Order.Cid,
                    LastUpdateTime = DateTime.Now,
                    IsDel          = "F",
                    IsPassenger    = "F",
                    UpdateOid      = traAddOrderModel.Order.CreateOid,
                    DelTime        = DateTime.Now
                });
            }


            traAddOrderModel.OrderDetailList.Add(traOrderDetailModel);


            traAddOrderModel.Customer = addTraGrabTicketModel.Customer;

            addTraGrabTicketModel.OrderId = _addTraOrderBll.AddTraOrder(traAddOrderModel);

            //通知联系人对象,新增联系人
            AddContactEvent?.Invoke(this, new CommonEventArgs <List <ContactInfoModel> >(contactList));

            #endregion


            #region 添加抢票信息记录
            addTraGrabTicketModel.CreateTime    = DateTime.Now;
            addTraGrabTicketModel.GrabStatus    = TrainGrabStatusEnum.W;
            addTraGrabTicketModel.OrderId       = addTraGrabTicketModel.OrderId;
            addTraGrabTicketModel.GrabBeginTime = DateTime.Now;//任务开始时间默认当前时间,满足空铁接口要求
            TraGrabTicketEntity traGrabTicketEntity =
                Mapper.Map <AddTraGrabTicketModel, TraGrabTicketEntity>(addTraGrabTicketModel);

            List <TraGrabTicketPassengerEntity> traGrabTicketPassengerEntities =
                Mapper.Map <List <TraGrabTicketPassengerModel>, List <TraGrabTicketPassengerEntity> >(
                    addTraGrabTicketModel.PassengerList);

            traGrabTicketEntity = _traGrabTicketDal.Insert(traGrabTicketEntity);

            foreach (var traGrabTicketPassengerEntity in traGrabTicketPassengerEntities)
            {
                traGrabTicketPassengerEntity.GrabId = traGrabTicketEntity.GrabId;
                _traGrabTicketPassengerDal.Insert(traGrabTicketPassengerEntity);
            }
            #endregion


            return(traGrabTicketEntity.GrabId);
        }