|
|
@@ -162,7 +162,8 @@ func (s Service) ReserveInfo(ctx context.Context, req model.ReserveReq) (g.Map,
|
|
|
// Check 预约校验
|
|
|
func (s Service) check(req model.ReservationReq) error {
|
|
|
// 校验开始结束时间不能跨天
|
|
|
- if req.StartTime.Format("Y-m-d") != req.EndTime.Format("Y-m-d") {
|
|
|
+ if req.StartTime.Format("Y-m-d") != req.EndTime.Format("Y-m-d") &&
|
|
|
+ req.EndTime.Hour() != 0 && req.EndTime.Minute() != 0 {
|
|
|
return errors.New("预约时间必须是同一天")
|
|
|
}
|
|
|
// 校验开始时间是否小于结束时间
|
|
|
@@ -178,10 +179,17 @@ func (s Service) check(req model.ReservationReq) error {
|
|
|
return errors.New("当前预约时间已过期")
|
|
|
}
|
|
|
// 校验时间内是否有 预约
|
|
|
- exist, err := s.Dao.M.WhereBetween(s.Dao.Columns.StartTime, req.StartTime, req.EndTime).
|
|
|
- WhereBetween(s.Dao.Columns.EndTime, req.StartTime, req.EndTime).
|
|
|
+ entityModel := s.Dao.M.
|
|
|
Where(s.Dao.Columns.EntityId, req.EntityId).
|
|
|
- Where(s.Dao.Columns.Status, 1).Count()
|
|
|
+ Where(s.Dao.Columns.Status, 1).
|
|
|
+ Where(s.Dao.Columns.StartTime+">= ? AND "+s.Dao.Columns.StartTime+"< ?", req.StartTime, req.EndTime)
|
|
|
+ entityModel = entityModel.
|
|
|
+ WhereOr(s.Dao.Columns.EntityId+"= ? AND "+s.Dao.Columns.Status+" = 1 AND "+
|
|
|
+ s.Dao.Columns.EndTime+"> ? AND "+s.Dao.Columns.EndTime+"<= ?", req.EntityId, req.StartTime, req.EndTime)
|
|
|
+ entityModel = entityModel.
|
|
|
+ WhereOr(s.Dao.Columns.EntityId+"= ? AND "+s.Dao.Columns.Status+" = 1 AND "+
|
|
|
+ s.Dao.Columns.EndTime+">= ? AND "+s.Dao.Columns.StartTime+"<= ?", req.EntityId, req.EndTime, req.StartTime)
|
|
|
+ exist, err := entityModel.Count()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -215,7 +223,8 @@ func (s Service) shortList(date *gtime.Time) ([]model.ShortList, error) {
|
|
|
eTime := common.GetCNEndOfWeek(date)
|
|
|
|
|
|
list := make([]model.ShortList, 0)
|
|
|
- res, err := s.Dao.M.WhereBetween(s.Dao.Columns.StartTime, sTime, eTime).FindAll()
|
|
|
+ res, err := s.Dao.M.WhereBetween(s.Dao.Columns.StartTime, sTime, eTime).
|
|
|
+ Where(s.Dao.Columns.Status, 1).FindAll()
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
@@ -230,15 +239,14 @@ func (s Service) shortList(date *gtime.Time) ([]model.ShortList, error) {
|
|
|
func (s Service) getCurrentPeriod(entityBeginAt, entityEndAt string) [][]string {
|
|
|
now := gtime.Now()
|
|
|
startTime, _ := gtime.StrToTime(entityBeginAt)
|
|
|
- endTime, _ := gtime.StrToTime(entityEndAt)
|
|
|
+ //endTime, _ := gtime.StrToTime(entityEndAt)
|
|
|
startAtStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
|
|
|
now.Year(), int(now.Month()), now.Day(),
|
|
|
startTime.Hour(), startTime.Minute(), startTime.Second())
|
|
|
startAt, _ := gtime.StrToTime(startAtStr)
|
|
|
|
|
|
- endAtStr := fmt.Sprintf("%v-%.2v-%.2v %.2v:%.2v:%.2v",
|
|
|
- now.Year(), int(now.Month()), now.Day(),
|
|
|
- endTime.Hour(), endTime.Minute(), endTime.Second())
|
|
|
+ endAtStr := fmt.Sprintf("%v-%.2v-%.2v %s",
|
|
|
+ now.Year(), int(now.Month()), now.Day(), entityEndAt)
|
|
|
endAt, _ := gtime.StrToTime(endAtStr)
|
|
|
|
|
|
timeLong := endAt.Sub(startAt).Hours()
|
|
|
@@ -252,6 +260,9 @@ func (s Service) getCurrentPeriod(entityBeginAt, entityEndAt string) [][]string
|
|
|
startTime := startAt.Format("H:i")
|
|
|
// 结束时间
|
|
|
endAt := startAt.Add(time.Duration(timeSplit) * time.Minute).Format("H:i")
|
|
|
+ if startAt.Hour() == 23 && startAt.Minute() == 30 {
|
|
|
+ endAt = "24:00"
|
|
|
+ }
|
|
|
times = append(times, startTime, endAt)
|
|
|
timeQuantum = append(timeQuantum, times)
|
|
|
}
|
|
|
@@ -289,8 +300,8 @@ func (s Service) getCurrentWeekReservation(ctx context.Context, req model.Reserv
|
|
|
resultList := make([]model.ReservationList, 0)
|
|
|
for _, v := range list {
|
|
|
timeLong := v.EndTime.Sub(v.StartTime).Hours()
|
|
|
-
|
|
|
- for i := 0; i <= int(timeLong); i++ {
|
|
|
+ grid := timeLong * 2
|
|
|
+ for i := 0; i < int(grid); i++ {
|
|
|
startAt := v.StartTime.Add(time.Duration(i) * 30 * time.Minute)
|
|
|
resultList = append(resultList, model.ReservationList{
|
|
|
Day: v.StartTime.Day(),
|