预约时间修正

This commit is contained in:
yan.y
2025-02-14 14:11:30 +08:00
parent 385439997b
commit 0080963f2b
5 changed files with 289 additions and 109 deletions
+7 -92
View File
@@ -15,7 +15,6 @@ import (
"pet-house.com/core/server/web/web_iris"
"pet-house.com/core/server/zap_server"
"strconv"
"strings"
"sync"
"time"
)
@@ -560,10 +559,7 @@ func GetOrderDetail(orderId string) OrderDetail {
}
func checkOrderServiceTime(serviceTime string, projectionServiceTime int) bool {
type orderMainTmp struct {
ServiceTime string
ProjectionServiceTime int
}
serviceTimeD, _ := time.Parse("2006-01-02 15:04", serviceTime)
hour := serviceTimeD.Hour()
if hour == 20 && projectionServiceTime > 2*60 {
@@ -573,14 +569,9 @@ func checkOrderServiceTime(serviceTime string, projectionServiceTime int) bool {
return true
}
var orderMainTmpList []orderMainTmp
//服务时间>=预约时间 and 服务时间<=预计结束时间 时间范围内无订单才可预约
database.Instance().Model(&models.OrderMain{}).Where("service_time >= ? and service_time < DATE_FORMAT(DATE_ADD('"+serviceTime+"', INTERVAL "+strconv.Itoa(projectionServiceTime)+" MINUTE), '%Y-%m-%d %H:%i') and order_status != 3 and order_status != 4 and status = 1", serviceTime).Find(&orderMainTmpList)
//时间点订单数量<服务车辆*车辆单次服务数量 才可接受预约
if len(orderMainTmpList) > 0 {
return len(orderMainTmpList) >= len(CarMap)*CarServiceNum
}
return false
var orderTempList []utils.OrderTemp
database.Instance().Model(&models.OrderMain{}).Where("service_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and order_status != 3 and order_status != 4 and status = 1").Find(&orderTempList)
return utils.CheckAvailability(orderTempList, len(CarMap), serviceTime, projectionServiceTime)
}
type OrderListRequest struct {
@@ -795,10 +786,6 @@ type OrderServiceTimeRequest struct {
ServiceAddrId int64
}
type OrderServiceTimeResponse struct {
Times map[string][]TimeObject `json:"times"`
}
// 获取订单可预约时间
func (p DefParty) orderServiceTime() web_iris.Party {
return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) {
@@ -811,81 +798,9 @@ func (p DefParty) orderServiceTime() web_iris.Party {
ParamError.Fail(ctx, orderServiceTimeRequest)
return
}
type orderMainTmp struct {
ServiceTime string
ProjectionServiceTime int
}
var orderMainTmpList []orderMainTmp
database.Instance().Model(&models.OrderMain{}).Where("service_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and order_status != 3 and order_status != 4 and status = 1").Find(&orderMainTmpList)
// 执行查询
var orderMainTmp1 []struct {
ServiceTime string
Count int
ProjectionServiceTime int
}
err := database.Instance().Raw(`
SELECT service_time, COUNT(1) AS count, projection_service_time
FROM order_mains
WHERE service_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
AND order_status != 3
AND order_status != 4
AND status = 1
GROUP BY service_time
HAVING count > 0
`).Scan(&orderMainTmp1).Error
if err != nil {
ServerError.Fail(ctx, err)
return
}
var orderTimeMap = make(map[string]string)
var orderTimeNum = make(map[string]int)
var orderTimeCount = make(map[string]int)
var orderProjectionTime = make(map[string]int)
for _, val := range orderMainTmp1 {
orderTimeCount[val.ServiceTime] = val.Count
orderProjectionTime[val.ServiceTime] = val.ProjectionServiceTime
}
for _, value := range orderMainTmpList {
orderTimeMap[value.ServiceTime] = value.ServiceTime
orderTimeNum[value.ServiceTime] = orderTimeNum[value.ServiceTime] + 1
if value.ProjectionServiceTime > 0 {
//计算出服务时间点之后累计延长时间
date, _ := time.Parse("2006-01-02 15:04", value.ServiceTime)
lastDate := date.Add(time.Minute * time.Duration(value.ProjectionServiceTime))
for t := date; t.Before(lastDate); t = t.Add(time.Hour) {
timeStr := t.Format("2006-01-02 15:04")
if timeStr != value.ServiceTime {
orderTimeMap[timeStr] = timeStr
orderTimeNum[timeStr] = orderTimeNum[timeStr] + 1
orderTimeCount[timeStr] = orderTimeCount[timeStr] + 1
}
}
}
}
serviceTime := AddrServiceMap[orderServiceTimeRequest.ServiceAddrId]
times := strings.Split(serviceTime.Times, ",")
carNum := len(CarMap)
daysMap := utils.GetStrDays(7, 60, ReserveMap, orderTimeMap, carNum, orderTimeNum, CarServiceNum, times, orderTimeCount, orderProjectionTime)
var dayHoursMap = make(map[string][]TimeObject)
for day, values := range daysMap {
key := day
for _, value := range values {
if _, ok := dayHoursMap[key]; ok {
dayHoursMap[key] = append(dayHoursMap[key], TimeObject{
Time: value.Time,
Y: value.Y,
})
} else {
dayHoursMap[key] = []TimeObject{{
Time: value.Time,
Y: value.Y,
}}
}
}
}
Success(ctx, headerBaseInfo, OrderServiceTimeResponse{dayHoursMap})
var orderTempList []utils.OrderTemp
database.Instance().Model(&models.OrderMain{}).Where("service_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) and order_status != 3 and order_status != 4 and status = 1").Find(&orderTempList)
Success(ctx, headerBaseInfo, utils.ProcessOrders(orderTempList, len(CarMap), 7))
})
}}
}