Example #1
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="RequestEt"></param>
        public WebServiceResponse <OrderInfoJsonEt> Reservation(CreateOrderJsonEt RequestEt)
        {
            #region 封装 订单信息对象
            Reservation reservation = new Reservation()
            {
                HotelCode                = RequestEt.HotelCode,
                RatePlanCode             = RequestEt.RatePlanCode,
                RoomTypeCode             = RequestEt.RoomTypeCode,
                NumberOfUnits            = RequestEt.NumberOfUnits,
                DistributorReservationId = RequestEt.DistributorReservationId,
                ReservationStatus        = ReservationStatus.Confirmed,
                Total = new Total()
                {
                    TotalAmount = RequestEt.TotalAmount
                },
                StayDateRange = new StayDateRange()
                {
                    CheckIn  = RequestEt.CheckIn,
                    CheckOut = RequestEt.CheckOut
                },
                ContactPerson = new Customer()
                {
                    GivenName = RequestEt.ContactPerson.GivenName,
                    Surname   = RequestEt.ContactPerson.Surname,
                    Telephone = RequestEt.ContactPerson.Telephone,
                    Email     = RequestEt.ContactPerson.Email,
                    Address   = RequestEt.ContactPerson.Address,
                },
                GuestCount = new DaDSService.GuestCount()
                {
                    AdultCount = RequestEt.GuestCount.AdultCount,
                    ChildCount = RequestEt.GuestCount.ChildCount
                },
                Comments = new string[1] {
                    RequestEt.Comment
                },
            };

            List <ReservationGuest> rGuestList = new List <ReservationGuest>();
            foreach (var _Guest in RequestEt.GuestList)
            {
                ReservationGuest rGuest = new ReservationGuest()
                {
                    GivenName = _Guest.GivenName,
                    Surname   = _Guest.Surname,
                    Telephone = _Guest.Telephone,
                    Email     = _Guest.Email
                };
                rGuestList.Add(rGuest);
            }

            reservation.Guests = rGuestList.ToArray();
            #endregion

            // Web服务对象 提交数据
            var responseEt = _Request.Reservation(reservation);
            // 处理 Response对象
            var jsonEt = HandleResponse <OrderInfoJsonEt>(responseEt.Error);
            if (jsonEt.Successful)
            {
                jsonEt.ResponseEt = new OrderInfoJsonEt()
                {
                    ReservationStatus        = responseEt.ReservationStatus.ToString(),
                    TotalAmount              = responseEt.Total.TotalAmount,
                    ProductReservationId     = responseEt.ReservationId.ProductReservationId,
                    ErpReservationId         = responseEt.ReservationId.ErpReservationId,
                    DistributorReservationId = RequestEt.DistributorReservationId,
                    CancelTime = responseEt.CancelTime
                };
            }

            return(jsonEt);
        }
Example #2
0
        public ServiceResult CreateOrder(int id)
        {
            var result    = new ServiceResult();
            var RequestEt = new CreateOrderJsonEt();
            var response  = new WebServiceResponse <OrderInfoJsonEt>();

            try
            {
                var order = sqlSugarClient.Queryable <TB_hotelcashorder>().Where(u => u.aId == id).First();
                if (order == null)
                {
                    return(result.SetError("订单不存在"));
                }

                if (order.alipayPay == 0)
                {
                    return(result.SetError("该订单未付款"));
                }

                if (order.state != 24)
                {
                    return(result.SetError("该订单状态已变更"));
                }

                if (order.Refuse == 2)
                {
                    return(result.SetError("该订单已取消"));
                }

                if (!string.IsNullOrEmpty(order.sourceOrderID))
                {
                    return(result.SetError("该订单未提交到大都市,请勿重复下单"));
                }
                if (order.totalPrice == 0)
                {
                    string remark = string.Format("【系统】:下单到大都市失败(已售完或扣减库存失败) [{0}]", DateTime.Now.ToString());
                    orderRepository.UpdateRemarkState(order.aId, 63, remark);

                    int NowHour   = DateTime.Now.Hour;   //当前时间的时数
                    int NowMinute = DateTime.Now.Minute; //当前时间的分钟数
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            //晚上12点半后,8点前满房时自动发送短信
                            if ((NowHour == 0 && NowMinute > 30) || (NowHour > 0 && NowHour < 8))
                            {
                                //发满房短信(发送满房信息)
                                FlyPigMessageUility.ThirdCommunication(Shop, Convert.ToInt32(order.aId), "系统", 1);
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = order.checkInDate;
                            av.CheckOutTime    = order.checkOutDate;
                            av.HotelId         = order.hotelID;
                            av.RoomId          = order.roomID;
                            av.RatePlanId      = order.ratePlanID;
                            av.RatePlanCode    = "dr" + order.hotelID + "_" + order.roomID + "_" + order.ratePlanID;
                            av.CreateTime      = DateTime.Now;
                            av.IsFull          = true;
                            av.Channel         = (int)Channel;
                            av.Shop            = (int)Shop;
                            av.Remark          = "下单满房";
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();

                            string updateUrl = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source={1}", order.hotelID, (int)Channel);
                            WebHttpRequest.Get(updateUrl);
                        }
                        catch
                        {
                        }
                    });
                    return(result.SetError("订单底价为0,无法下单到渠道!"));
                }

                //判断早餐数是否对等
                if (order.hasChange == 1 && order.userID != 0 && order.userID > order.sRoomNum)
                {
                    string beiZhu = string.Format("【系统】:下单失败,具体原因:早餐个数不相等,天猫:{1}, 供应商:{2},取消执行自动下单,请联系申退 [{0}] <br/>【系统】:已自动更正早餐数,无需人工手动下线该酒店或房型 [{0}]", DateTime.Now.ToString(), order.userID, order.sRoomNum);
                    //string beiZhu = string.Format("【系统】:下单失败,具体原因:早餐个数不相等!已自动更正早餐数,无需人工手动下线该酒店或房型 [{0}]", DateTime.Now.ToString());
                    orderRepository.UpdateRemarkState(order.aId, 24, beiZhu);
                    int NowHour   = DateTime.Now.Hour;   //当前时间的时数
                    int NowMinute = DateTime.Now.Minute; //当前时间的分钟数
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            //晚上12点半后,8点前满房时自动发送短信
                            if ((NowHour == 0 && NowMinute > 30) || (NowHour > 0 && NowHour < 8))
                            {
                                //发满房短信(发送满房信息)
                                FlyPigMessageUility.ThirdCommunication(Shop, Convert.ToInt32(order.aId), "系统", 1);
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = order.checkInDate;
                            av.CheckOutTime    = order.checkOutDate;
                            av.HotelId         = order.hotelID;
                            av.RoomId          = order.roomID;
                            av.RatePlanId      = order.ratePlanID;
                            av.RatePlanCode    = "dr" + order.hotelID + "_" + order.roomID + "_" + order.ratePlanID;
                            av.CreateTime      = DateTime.Now;
                            av.IsFull          = true;
                            av.Channel         = (int)Channel;
                            av.Shop            = (int)Shop;
                            av.Remark          = "下单满房";
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();

                            string updateUrl = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source={1}", order.hotelID, (int)Channel);
                            WebHttpRequest.Get(updateUrl);
                        }
                        catch
                        {
                        }
                    });
                    logWriter.Write("大都市(供应商早餐数发生变化):飞猪酒店id:{0},酒店id:{1},roomID:{2},ratePlanID:{3},早餐数:{4},飞猪早餐数:{5},订单号:{6}", order.TaoBaoHotelId, order.hotelID, order.roomID, order.ratePlanID, order.sRoomNum, order.userID, order.orderNO);
                    return(result.SetError("该订单早餐个数不相等"));
                }

                #region  订单

                ContactPersonJsonEt contactPerson = new ContactPersonJsonEt();
                contactPerson.GivenName = order.contactName;
                contactPerson.Surname   = order.contactName;
                contactPerson.Telephone = order.contactTel;
                contactPerson.Email     = "";
                contactPerson.Address   = "";

                List <Guest>  guestList  = new List <Guest>();
                List <string> guestNames = order.guestName.Split(',').ToList();
                foreach (var item in guestNames)
                {
                    Guest guest = new Guest();
                    guest.GivenName = item;
                    guest.Surname   = item;
                    guest.Telephone = "";
                    guest.Email     = "";
                    guestList.Add(guest);
                }


                GuestCount guestCount = new GuestCount();
                guestCount.AdultCount = guestNames.Count;
                guestCount.ChildCount = 0;

                RequestEt.HotelCode                = order.hotelID;
                RequestEt.RoomTypeCode             = order.roomID;
                RequestEt.RatePlanCode             = order.ratePlanID;
                RequestEt.NumberOfUnits            = order.roomNum;
                RequestEt.DistributorReservationId = order.orderNO;
                RequestEt.TotalAmount              = order.totalPrice;
                RequestEt.CheckIn       = order.checkInDate.ToString("yyyy-MM-dd");
                RequestEt.CheckOut      = order.checkOutDate.ToString("yyyy-MM-dd");
                RequestEt.Comment       = "";
                RequestEt.ContactPerson = contactPerson;
                RequestEt.GuestList     = guestList;
                RequestEt.GuestCount    = guestCount;

                response = OrderDataOpEt.Reservation(RequestEt);
                //记录预订日志
                try
                {
                    string orderText   = string.Empty;
                    string strRequest  = Newtonsoft.Json.JsonConvert.SerializeObject(RequestEt);
                    string strresponse = Newtonsoft.Json.JsonConvert.SerializeObject(response);
                    orderText = "请求数据:" + strRequest + "\r\n" + "返回数据:" + strresponse;
                    orderLogWriter.WriteOrder(order.orderNO, orderText);
                }
                catch (Exception exOrder)
                {
                }

                var createResult = new ServiceResult();

                string message = string.Empty;
                if (response != null && response.Successful && response.ResponseEt != null)
                {
                    string ProductReservationId = response.ResponseEt.ProductReservationId.ToString(); //大都市产品系统订单编号
                    string ErpReservationId     = response.ResponseEt.ErpReservationId.ToString();     //大都市结算系统订单编号
                    order.sourceOrderID = ProductReservationId;
                    message             = string.Format("【大都市】:下单成功,订单号:({0}),大都市结算系统订单编号:{1} [{2}]", ProductReservationId, ErpReservationId, DateTime.Now.ToString());
                    //Pending: 待确认, Confirmed:已确认, Canceled:已取消, Failed:发生错误


                    //order.remark = string.Format("{0}【大都市】:{1} [{2}]<br/>", order.remark, message, DateTime.Now.ToString());
                    orderRepository.UpdateOrderRemarkAndSourceOrderID(order.aId, 3, message, ProductReservationId);

                    return(result.SetSucess(message));
                }
                else if (response != null && !response.Successful && !string.IsNullOrWhiteSpace(response.ErrMsg))
                {
                    message = string.Format("【系统】:提交创建大都市订单请求失败,失败原因:{1} [{0}]", DateTime.Now.ToString(), response.ErrMsg);
                    orderRepository.UpdateRemarkState(order.aId, 7, message);
                    return(result.SetError("下单失败,出现异常,错误原因{0}", response.ErrMsg));
                }
                else
                {
                    message = string.Format("【系统】:提交创建大都市订单请求失败,请查看渠道状态是否生成订单 [{0}]", DateTime.Now.ToString());
                    orderRepository.UpdateRemarkState(order.aId, 7, message);
                    return(result.SetError("下单失败,出现异常,请查看渠道状态是否生成订单"));
                }
                #endregion

                return(result.SetSucess(message));
            }
            catch (Exception ex)
            {
                string message = string.Format("<br/>【系统】下单失败,出现异常,请手动下单,异常内容:{0}", ex.ToString());
                orderRepository.UpdateRemarkState(id, 7, message);
                return(result.SetError("下单失败,出现异常,请手动下单"));
            }
        }