public ActionResult LockRoom(AppointRq rq)
        {
            if (MemberInfo.Role != (int)MemberRole.管理员)
            {
                return(Content("没有权限"));
            }

            var model = new Order
            {
                MemberId    = MemberInfo.Uid,
                CustomName  = "",
                CustomPhone = "",
                Room        = rq.Room,
                Status      = (int)OrderStatus.已锁定,
                CreateOn    = DateTime.Now.ToUnixStamp(),
                StartTime   = rq.Start.ToUnixStamp(),
                EndTime     = rq.Start.AddMinutes(WeispaConfig.ServiceMinutes).ToUnixStamp(),
                Remark      = rq.Remark
            };

            var isExist = OrderDal.Exists(string.Format("{0} and Room={1} and (Status={2} or Status={3})",
                                                        WeispaUtil.GetOccurredSql(model.StartTime, model.EndTime),
                                                        model.Room, (int)OrderStatus.已确认, (int)OrderStatus.已锁定));

            if (isExist)
            {
                return(ReturnJson(false, "改房间已被预订,请先取消预订才可锁定"));
            }

            var orderId = OrderDal.Add(model);

            return(ReturnJson(true, new { status = 2, opts = 2, orderId }));
        }
        public ActionResult ChangeStatus(int orderId, int toStatus)
        {
            var order = OrderDal.GetModel(orderId);

            if (order == null)
            {
                return(ReturnJson(false, "订单不存在"));
            }

            var oriStatus = (OrderStatus)order.Status;
            //权限检查
            var role         = (MemberRole)MemberInfo.Role;
            var toStatusEnum = (OrderStatus)toStatus;

            switch (toStatusEnum)
            {
            case OrderStatus.未确认:
                return(ReturnJson(false, "操作无效"));

                break;

            case OrderStatus.已确认:
                if (role != MemberRole.管理员)
                {
                    return(ReturnJson(false, "您没有权限"));
                }

                if (oriStatus != OrderStatus.未确认)
                {
                    return(ReturnJson(false, "这不是未确认的订单"));
                }

                //查找有冲突的订单
                var isExist = OrderDal.Exists(string.Format("{0} and Room={1} and Status={2}",
                                                            WeispaUtil.GetOccurredSql(order.StartTime, order.EndTime),
                                                            order.Room, (int)OrderStatus.已确认));
                if (isExist)
                {
                    return(ReturnJson(false, "已经有人预定该房间"));
                }
                break;

            case OrderStatus.已完成:
                if (role != MemberRole.管理员)
                {
                    return(ReturnJson(false, "您没有权限"));
                }

                if (oriStatus != OrderStatus.已确认)
                {
                    return(ReturnJson(false, "这不是已确认的订单"));
                }

                break;

            case OrderStatus.未完成:
                if (role != MemberRole.管理员)
                {
                    return(ReturnJson(false, "您没有权限"));
                }

                if (oriStatus != OrderStatus.已确认)
                {
                    return(ReturnJson(false, "这不是已确认的订单"));
                }
                break;

            case OrderStatus.已取消:
                if (oriStatus != OrderStatus.未确认 && oriStatus != OrderStatus.已确认)
                {
                    return(ReturnJson(false, "不可取消"));
                }
                break;

            default:
                return(ReturnJson(false, "操作无效"));
            }

            order.Status = toStatus;
            var b = OrderDal.Update(order, "Status");

            return(b ?
                   ReturnJson(true, new { status = toStatusEnum.ToString(), opts = StringHelper.GetArrayStr(OptList(role, toStatusEnum)) }) :
                   ReturnJson(false, "操作失败"));
        }
        /// <summary>
        /// 预定护理页
        /// </summary>
        /// <returns></returns>
        public ActionResult Index(DateTime?time)
        {
            var now        = DateTime.Now;
            var selectDate = (time ?? now).Date;
            var model      = new AppointVm {
                DateList = new List <DateTime>(), SelectDate = selectDate, MemberInfo = MemberInfo
            };
            var role = (MemberRole)MemberInfo.Role;

            var today    = now.Date;
            var lastDate = today.AddDays(6);

            //日期列表
            for (var d = today; d <= lastDate; d = d.AddDays(1))
            {
                model.DateList.Add(d);
            }

            //获取1天内预约列表
            var orders = OrderDal.GetList(string.Format("StartTime>={0} and StartTime<={1} and (Status={2} or Status={3})",
                                                        selectDate.ToUnixStamp(), selectDate.AddDays(1).ToUnixStamp(), (int)OrderStatus.已确认, (int)OrderStatus.已锁定))
                         .OrderBy(_ => _.StartTime).ThenBy(_ => _.Room).ToList();

            model.AppointList = new List <AppointVm.AppointItem>();

            var opentime  = new DateTime(selectDate.Year, selectDate.Month, selectDate.Day, 10, 0, 0);  //选择日期营业开始时间
            var closetime = new DateTime(selectDate.Year, selectDate.Month, selectDate.Day, 23, 30, 0); //选择日期关门时间

            while (opentime < closetime)
            {
                var appoint = new AppointVm.AppointItem
                {
                    StartTime = opentime,
                    EndTime   = opentime.AddMinutes(WeispaConfig.ServiceMinutes),
                    Rooms     = new List <AppointVm.Room>()
                };

                var startTime = appoint.StartTime.ToUnixStamp();
                var endTime   = appoint.EndTime.ToUnixStamp();

                for (int roomType = 0; roomType <= 1; roomType++)
                {
                    var room = new AppointVm.Room()
                    {
                        ToStatusList = new List <int>()
                    };
                    if (now >= appoint.StartTime)
                    {
                        room.Status = 2;
                    }
                    else
                    {
                        var order = orders.FirstOrDefault(_ => _.Room == roomType && WeispaUtil.CkeckOccurred(_.StartTime, _.EndTime, startTime, endTime));
                        if (order == null)
                        {
                            room.Status = 0;
                            room.ToStatusList.Add(0);

                            if (role == MemberRole.管理员)
                            {
                                room.ToStatusList.Add(1);
                            }
                        }
                        else if (order.Status == (int)OrderStatus.已锁定)
                        {
                            room.Status  = 2;
                            room.OrderId = order.OId;

                            if (role == MemberRole.管理员)
                            {
                                room.ToStatusList.Add(2);
                            }
                        }
                        else
                        {
                            room.Status = 1;

                            if (role == MemberRole.管理员)
                            {
                                room.ToStatusList.Add(1);
                            }
                        }
                    }

                    room.Name = ((RoomType)roomType).ToString();
                    room.Type = roomType;

                    appoint.Rooms.Add(room);
                }
                opentime = appoint.EndTime.AddMinutes(WeispaConfig.RestMinutes);
                model.AppointList.Add(appoint);
            }

            return(View(model));
        }
        public ActionResult AppointPost(AppointRq rq)
        {
            var now       = DateTime.Now;
            var today     = now.Date;
            var limitDate = today.AddDays(WeispaConfig.LimitDays);

            if (string.IsNullOrEmpty(rq.CustomName))
            {
                return(ReturnJson(false, "请填写客户名称"));
            }
            if (string.IsNullOrEmpty(rq.CustomPhone))
            {
                return(ReturnJson(false, "请填写客户电话"));
            }
            if (rq.Room > 1 || rq.Room < 0)
            {
                return(ReturnJson(false, "请选择房间"));
            }

            if (rq.Start > limitDate)
            {
                return(ReturnJson(false, string.Format("只能预订{0}天内", WeispaConfig.LimitDays)));
            }
            if (rq.Start < now)
            {
                return(ReturnJson(false, "已过时间不可预订"));
            }

            //未确认,已确认的订单数
            var weekCount = OrderDal.GetCount(string.Format("MemberId={0} and StartTime>={1} and StartTime<{2} and Status<2", MemberInfo.Uid, now.ToUnixStamp(), limitDate.ToUnixStamp()));

            if (weekCount >= WeispaConfig.LimitOrderCount && MemberInfo.Role != (int)MemberRole.管理员)
            {
                return(ReturnJson(false, string.Format("{0}天内只能预订{1}次", WeispaConfig.LimitDays, WeispaConfig.LimitOrderCount)));
            }

            var model = new Order
            {
                MemberId    = MemberInfo.Uid,
                CustomName  = rq.CustomName,
                CustomPhone = rq.CustomPhone,
                Room        = rq.Room,
                Status      = 0,
                CreateOn    = now.ToUnixStamp(),
                StartTime   = rq.Start.ToUnixStamp(),
                EndTime     = rq.Start.AddMinutes(WeispaConfig.ServiceMinutes).ToUnixStamp(),
                Remark      = rq.Remark
            };

            //查找有冲突的订单
            var isExist = OrderDal.Exists(string.Format("{0} and Room={1} and (Status={2} or Status={3})",
                                                        WeispaUtil.GetOccurredSql(model.StartTime, model.EndTime),
                                                        model.Room, (int)OrderStatus.已确认, (int)OrderStatus.已锁定));

            if (isExist)
            {
                return(ReturnJson(false, "该房间已被其他人预订"));
            }

            OrderDal.Add(model);

            return(ReturnJson(true, "已成功提交预订,待系统确认"));
        }
 //im
 public String getCustomer(string phone)
 {
     return(WeispaUtil.HttpGet(customerBaseUrl + "/GetClientList?servicerPhone=" + phone));
 }
 //im
 public string getServer(string phone)
 {
     return(WeispaUtil.HttpGet(customerBaseUrl + "/GetServicerList?clientPhone=" + phone));
 }