public TraAddOrderResultModel AddTraOrder(TraAddOrderModel traAddOrder) { //金额校验 decimal totalPassengerAmount = 0; foreach (var detail in traAddOrder.OrderDetailList) { totalPassengerAmount += detail.PassengerList.Sum(n => (n.FacePrice ?? 0)) + detail.PassengerList.Sum(n => (n.ServiceFee ?? 0)); } if (traAddOrder.Order.TotalMoney != totalPassengerAmount) { throw new Exception("金额不正确"); } int orderid = _addTraOrderBll.AddTraOrder(traAddOrder); traAddOrder.Order.OrderId = orderid; return(new TraAddOrderResultModel() { OrderId = orderid, AddOrderModel = traAddOrder }); }
public bool CheckIsExistSameTravel(TraAddOrderModel traAddOrder) { List <DateTime> startTimeList = traAddOrder.OrderDetailList.Select(n => n.StartTime).ToList(); List <DateTime> endTimeList = traAddOrder.OrderDetailList.Select(n => n.EndTime).ToList(); List <string> startNameList = traAddOrder.OrderDetailList.Select(n => n.StartName).ToList(); List <string> endNameList = traAddOrder.OrderDetailList.Select(n => n.EndName).ToList(); List <string> nameList = traAddOrder.OrderDetailList.SelectMany(n => n.PassengerList).Select(n => n.Name).ToList(); bool flag = _checkSameTravelDal.CheckIsExistSameTravel(startTimeList, endTimeList, startNameList, endNameList, nameList); List <int> list = _checkSameTravelDal.OrderList; if (list != null && list.Count > 0) { Result = string.Concat(list.Select(n => "," + n)).Substring(1); } return(flag); }
public int AddTraOrder(TraAddOrderModel newOrder) { newOrder.Order.TrainPlace = "代售点"; newOrder.Order.OrderRoot = 0; newOrder.Order.CreateTime = DateTime.Now; if (newOrder.Order.PayAmount == 0) { newOrder.Order.PayAmount = newOrder.Order.TotalMoney; } newOrder.Order.OpeartorId = newOrder.Order.CreateOid; newOrder.Order.OrderSource = newOrder.OrderSource; if (newOrder.AddOrderType == 1)//手动 { newOrder.Order.OrderType = 0; } else { newOrder.Order.OrderType = 1; } if (newOrder.Customer != null && !string.IsNullOrEmpty(newOrder.Customer.Category) && newOrder.Customer.Category.ToUpper() == "D") { newOrder.Order.BalanceType = 1; newOrder.Order.TravelType = 0; } else { newOrder.Order.BalanceType = 0; newOrder.Order.TravelType = 1; } //如果存在项目名称 if (newOrder.ProjectName != null && newOrder.ProjectName.ProjectId > 0) { newOrder.Order.ProjectId = newOrder.ProjectName.ProjectId; } if (newOrder.CostCenter != null && newOrder.CostCenter.Cid > 0) { newOrder.Order.CostCenter = newOrder.CostCenter.Depart; } if (string.IsNullOrEmpty(newOrder.Order.CostCenter)) { newOrder.Order.CostCenter = ""; } if (newOrder.AddOrderType == 0) { newOrder.Order.OrderFrom = TraOrderFromEnum.Interface.ToString(); } else { newOrder.Order.OrderFrom = TraOrderFromEnum.Hand.ToString(); } if (newOrder.Order.OrderSource == "O") { newOrder.Order.IsOnline = "F"; } else { newOrder.Order.IsOnline = "T"; } TraOrderEntity orderEntity = Mapper.Map <TraOrderModel, TraOrderEntity>(newOrder.Order); orderEntity.CorpPolicy = string.Empty; orderEntity.ChoiceReason = string.Empty; foreach (var traOrderDetailModel in newOrder.OrderDetailList) { if (!string.IsNullOrEmpty(traOrderDetailModel.CorpPolicy)) { orderEntity.CorpPolicy += "|" + traOrderDetailModel.CorpPolicy; } if (!string.IsNullOrEmpty(traOrderDetailModel.ChoiceReason)) { orderEntity.ChoiceReason += "|" + traOrderDetailModel.ChoiceReason; } } orderEntity = _traOrderDal.Insert(orderEntity); if (newOrder.OrderStatus == null) { newOrder.OrderStatus = new TraOrderStatusModel(); } newOrder.OrderStatus.OrderId = orderEntity.OrderId; if (newOrder.Order.CreateOid != "sys" && (newOrder.OrderStatus.ProccessStatus & 64) != 64) { newOrder.OrderStatus.ProccessStatus = newOrder.OrderStatus.ProccessStatus + 64; } TraOrderStatusEntity orderStatusEntity = Mapper.Map <TraOrderStatusModel, TraOrderStatusEntity>(newOrder.OrderStatus); orderStatusEntity = _traOrderStatusDal.Insert(orderStatusEntity); foreach (var detail in newOrder.OrderDetailList) { detail.OrderId = orderEntity.OrderId; detail.TicketNum = detail.PassengerList.Count; detail.TotalPrice = detail.PassengerList.Sum(n => (n.FacePrice ?? 0)) + detail.PassengerList.Sum(n => (n.ServiceFee ?? 0));//乘客面价+乘客服务费 detail.ServiceFee = (detail.PassengerList?[0].ServiceFee ?? 0); var childPerson = detail.PassengerList.Find(n => n.AgeType == AgeTypeEnum.E); //儿童 var person = detail.PassengerList.Find(n => n.AgeType == AgeTypeEnum.C); //成人 detail.FacePrice = (person?.FacePrice ?? 0); detail.TrainChdSalePrice = (childPerson?.FacePrice ?? 0); detail.PlaceGrade = detail.PassengerList?[0].PlaceGrade; detail.PlaceType = GetPlaceType(detail.PlaceGrade); detail.TrainNoRemark = string.IsNullOrEmpty(detail.TrainNoRemark) ? "" : detail.TrainNoRemark; detail.TrainNoStatus = string.IsNullOrEmpty(detail.TrainNoStatus) ? "" : detail.TrainNoStatus; detail.OnTrainTimeTemp = detail.StartTime; detail.OnTrainTime = detail.StartTime; TraAddressEntity startAddressEntity = _traAddressDal.Query <TraAddressEntity>(n => n.Addr_Name == detail.StartName).FirstOrDefault(); if (startAddressEntity == null) { startAddressEntity = new TraAddressEntity(); startAddressEntity.Addr_Name = detail.StartName; startAddressEntity.Addr_Type = 0; startAddressEntity.Addr_S = detail.StartCode; startAddressEntity = _traAddressDal.Insert <TraAddressEntity>(startAddressEntity); } detail.StartNameId = startAddressEntity.Aid; TraAddressEntity endAddressEntity = _traAddressDal.Query <TraAddressEntity>(n => n.Addr_Name == detail.EndName) .FirstOrDefault(); if (endAddressEntity == null) { endAddressEntity = new TraAddressEntity(); endAddressEntity.Addr_Name = detail.EndName; endAddressEntity.Addr_Type = 0; endAddressEntity.Addr_S = detail.EndCode; endAddressEntity = _traAddressDal.Insert <TraAddressEntity>(endAddressEntity); } detail.EndNameId = endAddressEntity.Aid; TraOrderDetailEntity traOrderDetailEntity = Mapper.Map <TraOrderDetailModel, TraOrderDetailEntity>(detail); traOrderDetailEntity = _traOrderDetailDal.Insert(traOrderDetailEntity); foreach (var p in detail.PassengerList) { p.OdId = traOrderDetailEntity.OdId; TraPassengerEntity traPassengerEntity = Mapper.Map <TraPassengerModel, TraPassengerEntity>(p); traPassengerEntity.Name = traPassengerEntity.Name.Replace("/", " "); _traPassengerDal.Insert(traPassengerEntity); } } string logContent = newOrder.Log?.LogContent; if (string.IsNullOrEmpty(logContent)) { logContent = $"{(newOrder.Order.IsOnline == "T" ? "线上" : "线下")}添加火车订单"; } _traOrderLogDal.Insert <TraOrderLogEntity>(new TraOrderLogEntity() { OrderId = orderEntity.OrderId, CreateOid = orderEntity.CreateOid, CreateTime = DateTime.Now, LogType = "OI", LogContent = logContent }); return(orderEntity.OrderId); }
public AddTraOrderResponseViewModel AddTraOrder(AddTraOrderRequestViewModel request) { //判断是否是生产环境,如果不是则强制request.AddOrderType=1,不走接口 string oidTemp = request.Order.CreateOid; TraAddOrderResultModel addOrderResultModel = new TraAddOrderResultModel(); TraAddOrderModel addOrderModel = Mapper.Map <AddTraOrderRequestViewModel, TraAddOrderModel>(request); addOrderModel.Order.Cid = request.Cid; addOrderModel.Order.OrderSource = request.OrderSource; //0.获取客户信息服务 addOrderModel.Customer = _getCustomerServiceBll.GetCustomerByCid(request.Cid); if (!string.IsNullOrEmpty(addOrderModel.Customer.CorpID)) { CorporationModel corporationModel = _getCorpServiceBll.GetCorp(addOrderModel.Customer.CorpID); if (!addOrderModel.Order.IsPrint.HasValue) { addOrderModel.Order.IsPrint = corporationModel.IsPrint ?? 0; } if (!string.IsNullOrEmpty(corporationModel.ResponsibleOid) && request.OrderSource != "O") { addOrderModel.Order.CreateOid = corporationModel.ResponsibleOid; if (addOrderModel.OrderStatus == null) { addOrderModel.OrderStatus = new TraOrderStatusModel(); } if ((addOrderModel.OrderStatus.ProccessStatus & 64) != 64) { addOrderModel.OrderStatus.ProccessStatus = addOrderModel.OrderStatus.ProccessStatus + 64; } } } //1.添加火车订单 using (var transaction = this.Context.Database.BeginTransaction()) { try { /*** * 1)手动路线: * 添加完订单,直接发起送审 * 2)自动路线: * 添加完订单,不发起送审,发起申请占位请求,在确认占位后再发起送审 * **/ addOrderResultModel = _addTraOrderServiceBll.AddTraOrder(addOrderModel); #region 送审 if (addOrderResultModel.OrderId > 0 && request.AddOrderType == 1)//手动路线发起送审 { SubmitCorpAduitOrderModel submitCorpAduitOrder = new SubmitCorpAduitOrderModel() { OrderInfoList = new List <SubmitCorpAduitOrderDetailModel>() { new SubmitCorpAduitOrderDetailModel() { OrderId = addOrderResultModel.OrderId, OrderType = OrderSourceTypeEnum.Tra } }, PolicyId = addOrderModel.Order.CorpPolicyId, AduitConfigId = addOrderModel.Order.CorpAduitId, Source = request.OrderSource, SubmitCid = request.Cid, SubmitOid = oidTemp, IsViolatePolicy = (addOrderModel.OrderDetailList.Find(n => !string.IsNullOrEmpty(n.CorpPolicy)) != null ? true : false), OrderType = OrderSourceTypeEnum.Tra }; _submitCorpAduitOrderServiceBll.Submit(submitCorpAduitOrder); } #endregion transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw; } } if (request.AddOrderType == 0)//自动路线发起占位申请 { //2.发起火车占位 _requestHoldSeatServiceBll.RequestHoldSeat(addOrderResultModel.AddOrderModel); } return(new AddTraOrderResponseViewModel() { OrderId = addOrderResultModel.OrderId, AddOrderType = request.AddOrderType }); }
public TraOrderSubmitResponseModel RequestHoldSeat(TraAddOrderModel addModel) { TraOrderSubmitResponseModel responseModel = null; string isServer = AppSettingsHelper.GetAppSettings(AppSettingsEnum.IsServer); if (isServer == "T") { //请求接口 #region 封装接口请求参数 TraOrderSubmitModel model = new TraOrderSubmitModel() { orderid = addModel.Order.OrderId.ToString(), checi = addModel.OrderDetailList[0].TrainNo, from_station_code = addModel.OrderDetailList[0].StartCode, from_station_name = addModel.OrderDetailList[0].StartName, to_station_code = addModel.OrderDetailList[0].EndCode, to_station_name = addModel.OrderDetailList[0].EndName, train_date = addModel.OrderDetailList[0].StartTime.ToString("yyyy-MM-dd"), passengers = new List <TraOrderSubmitPassengerModel>(), LoginUserName = "", LoginUserPassword = "", is_accept_standing = addModel.IsAcceptStanding, is_choose_seats = addModel.IsChooseSeats, choose_seats = addModel.ChooseSeats }; model.passengers = new List <TraOrderSubmitPassengerModel>(); foreach (var p in addModel.OrderDetailList[0].PassengerList) { TraOrderSubmitPassengerModel pp = new TraOrderSubmitPassengerModel(); pp.passengersename = p.Name.Replace("/", " "); pp.passportseno = p.CardNo; pp.passporttypeseidname = p.CardNoType.ToDescription(); if (p.CardNoType == CardTypeEnum.Certificate) { pp.passporttypeseid = "1"; } else if (p.CardNoType == CardTypeEnum.HongKongAndMacaoPass) { pp.passporttypeseid = "C"; } else if (p.CardNoType == CardTypeEnum.Passport) { pp.passporttypeseid = "B"; } else if (p.CardNoType == CardTypeEnum.TaiwanEntryPermit || p.CardNoType == CardTypeEnum.MTP) { pp.passporttypeseid = "G"; pp.passporttypeseidname = "台湾通行证"; } //pp.passporttypeseid = ((int) p.CardNoType).ToString(); pp.piaotype = "1"; pp.ticket_no = ""; pp.piaotypename = "成人票"; if (addModel.OrderDetailList[0].PlaceGrade != "无座") { pp.zwcode = TrainTypeEnum.GetTypeCodeByName(addModel.OrderDetailList[0].PlaceGrade); pp.zwname = addModel.OrderDetailList[0].PlaceGrade; } else { //如果当前是无座则根据当前车次选择最低座位 List <string> cTypeList = new List <string>() { "G", "C", "D" }; if (!string.IsNullOrEmpty(model.checi) && model.checi.Length > 0 && cTypeList.Contains(model.checi.Substring(0, 1).ToUpper())) { pp.zwcode = TrainTypeEnum.GetTypeCodeByName("二等座"); pp.zwname = "二等座"; } else { pp.zwcode = TrainTypeEnum.GetTypeCodeByName("硬座"); pp.zwname = "硬座"; } } pp.cxin = ""; pp.price = addModel.OrderDetailList[0].FacePrice.ToString("0.00"); model.passengers.Add(pp); } #endregion responseModel = _requestHoldSeatBll.RequestHoldSeatInterface(model); } else { responseModel = new TraOrderSubmitResponseModel() { success = true, orderid = "Test" + DateTime.Now.ToString("yyyyMMddHHmmssfff") }; } #region 请求成功后操作 if (responseModel.success)//请求占位成功 { int count = _traInterFaceOrderDal.Query <TraInterFaceOrderEntity>(a => a.Transactionid == responseModel.orderid, true).Count(); if (count == 0)//如果没有当前接口的订单号,则插入该条信息 { TraInterFaceOrderEntity traInterFaceOrderEntity = new TraInterFaceOrderEntity { CreateTime = DateTime.Now, OrderId = addModel.Order.OrderId.ToString(), Status = (int)OrderTypeEnum.ApplyHoldSeat, Transactionid = responseModel.orderid }; traInterFaceOrderEntity = _traInterFaceOrderDal.Insert <TraInterFaceOrderEntity>(traInterFaceOrderEntity); _traOrderOperateDal.Insert <TraOrderOperateEntity>(new TraOrderOperateEntity() { AfterOperateStatus = (int)OrderTypeEnum.MakingTicket, InterfaceId = traInterFaceOrderEntity.InterfaceId, Operate = (int)OrderTypeEnum.ApplyHoldSeat, OperateTime = traInterFaceOrderEntity.CreateTime }); } } #endregion return(responseModel); }
/// <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); }