guodj 4 ani în urmă
părinte
comite
1cbeb23847
6 a modificat fișierele cu 32 adăugiri și 20 ștergeri
  1. 2 2
      config/config.toml
  2. 3 3
      go.mod
  3. 1 0
      handler/reservation.go
  4. 22 11
      service/reservation/reservation.go
  5. 1 1
      test/base.http
  6. 3 3
      test/reservation.http

+ 2 - 2
config/config.toml

@@ -11,7 +11,7 @@
 [reservation]
     time_split = 30
     begin_at = "00:00:00"
-    end_at = "23:30:00"
+    end_at = "24:00:00"
     weekday = "1,2,3,4,5,6,7"
 
 [service_registry]
@@ -32,4 +32,4 @@
 [micro_srv]
     auth = "dashoo.labsop.auth-2.1"
 #    admin = "dashoo.labsop.admin-2.1"
-    admin ="dashoo.labsop.admin-2.1-guodj"
+    admin ="dashoo.labsop.admin-2.1,192.168.0.252:19932"

+ 3 - 3
go.mod

@@ -6,6 +6,7 @@ require (
 	dashoo.cn/common_definition v0.0.0
 	dashoo.cn/micro_libary v0.0.0
 	github.com/gogf/gf v1.16.4
+	github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect
 	github.com/smallnest/rpcx v1.6.10
 )
 
@@ -64,8 +65,7 @@ require (
 	github.com/onsi/ginkgo v1.16.4 // indirect
 	github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e // indirect
 	github.com/pkg/errors v0.9.1 // indirect
-	github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect
-	github.com/rivo/uniseg v0.2.0 // indirect
+	github.com/rivo/uniseg v0.1.0 // indirect
 	github.com/rpcxio/libkv v0.5.1-0.20210420120011-1fceaedca8a5 // indirect
 	github.com/rs/cors v1.7.0 // indirect
 	github.com/rubyist/circuitbreaker v2.2.1+incompatible // indirect
@@ -77,7 +77,7 @@ require (
 	github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b // indirect
 	github.com/tjfoc/gmsm v1.4.0 // indirect
 	github.com/valyala/bytebufferpool v1.0.0 // indirect
-	github.com/valyala/fastrand v1.0.0 // indirect
+	github.com/valyala/fastrand v0.0.0-20170531153657-19dd0f0bf014 // indirect
 	github.com/vmihailenco/msgpack/v5 v5.3.4 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
 	github.com/xtaci/kcp-go v5.4.20+incompatible // indirect

+ 1 - 0
handler/reservation.go

@@ -46,6 +46,7 @@ func (r *Reservation) Add(ctx context.Context, req *model.ReservationReq, rsp *c
 		return err
 	}
 	g.Log().Info("Received Reservation.Add request @ " + tenant)
+	g.Log().Info("预约参数为:", req)
 	// 校验
 	validErr := gvalid.CheckStruct(ctx, req, nil)
 	if err != nil {

+ 22 - 11
service/reservation/reservation.go

@@ -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(),

+ 1 - 1
test/base.http

@@ -3,7 +3,7 @@
 ##
 
 ### 登录
-POST http://192.168.0.63:9981/dashoo.reservation.0.1-guodj
+POST http://192.168.0.252:9981/dashoo.labsop.admin-2.2
 Content-Type: application/json
 X-RPCX-SerializeType: 1
 X-RPCX-ServicePath: User

+ 3 - 3
test/reservation.http

@@ -59,7 +59,7 @@ SrvEnv: dev
 Authorization: Bearer LygMayNczyP8dlrHOmq+/zjw1/jzxfzELII5bN0syADTzKW0pfMr7sLc+QzOgxuiunge75ja+EwFj88kDdDnCg==
 
 {
-  "date": "2021-09-13 12:00:00"
+  "date": "2021-09-15 12:00:00"
 }
 ###
 
@@ -75,7 +75,7 @@ SrvEnv: dev
 Authorization: Bearer LygMayNczyP8dlrHOmq+/zjw1/jzxfzELII5bN0syADTzKW0pfMr7sLc+QzOgxuiunge75ja+EwFj88kDdDnCg==
 
 {
-  "date": "2021-09-13 12:00:00",
-  "entity_id": 1
+  "date":"2021-09-15",
+  "entity_id":15
 }
 ###