pet-house/business/api/car.go

149 lines
6.0 KiB
Go

package api
import (
"encoding/json"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/context"
"gorm.io/gorm/clause"
"io"
"pet-house.com/business/models"
"pet-house.com/core/server/database"
"pet-house.com/core/server/web/web_iris"
)
var CarServiceNum = 1
func GetCarInfo(carId int) models.ServiceCar {
return CarMap[carId]
}
type CarServiceOrderListRequest struct {
Status int //订单状态 0所有 1待服务 2服务中 3已完成
PageNo int //页码
PageSize int //数据数量
}
type CarServiceOrderListResponse struct {
OrderDetails []OrderDetail `json:"orderDetails"`
PageNo int `json:"pageNo"`
PageSize int `json:"pageSize"`
}
// carServiceOrderList 车辆订单列表
func (p DefParty) carServiceOrderList() web_iris.Party {
return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) {
index.Post(CarBase+"/carServiceOrderList", func(ctx *context.Context) {
headerBaseInfo := GetHeaderBaseInfo(ctx)
body, _ := io.ReadAll(ctx.Request().Body)
var carServiceOrderListRequest CarServiceOrderListRequest
json.Unmarshal(body, &carServiceOrderListRequest)
var serviceCarUser models.ServiceCarUser
database.Instance().Model(&models.ServiceCarUser{}).Where("uid = ?", headerBaseInfo.Uid).Find(&serviceCarUser)
if serviceCarUser.Id == 0 {
CarNotExistError.Fail(ctx, headerBaseInfo)
return
}
var orderMains []models.OrderMain
if carServiceOrderListRequest.Status == 0 {
database.Instance().Model(&models.OrderMain{}).Joins("JOIN car_orders ON order_mains.order_id = car_orders.order_id").Where("car_orders.car_id = ? AND order_mains.status > 0", serviceCarUser.CarId).Order(clause.OrderByColumn{Column: clause.Column{Name: "order_mains.service_time"}, Desc: false}).Offset((carServiceOrderListRequest.PageNo - 1) * carServiceOrderListRequest.PageSize).Limit(carServiceOrderListRequest.PageSize).Find(&orderMains)
} else {
database.Instance().Model(&models.OrderMain{}).Joins("JOIN car_orders ON order_mains.order_id = car_orders.order_id").Where("car_orders.car_id = ? AND order_mains.status = ?", serviceCarUser.CarId, carServiceOrderListRequest.Status).Order(clause.OrderByColumn{Column: clause.Column{Name: "order_mains.service_time"}, Desc: false}).Offset((carServiceOrderListRequest.PageNo - 1) * carServiceOrderListRequest.PageSize).Limit(carServiceOrderListRequest.PageSize).Find(&orderMains)
}
var orderDetails []OrderDetail
for _, value := range orderMains {
orderDetails = append(orderDetails, GetOrderDetail(value.OrderId))
}
Success(ctx, carServiceOrderListRequest, CarServiceOrderListResponse{orderDetails, carServiceOrderListRequest.PageNo + 1, carServiceOrderListRequest.PageSize})
})
}}
}
type CarServiceProcessRequest struct {
Type int //操作类型 1开始 2结束
SubOrderId string //子订单ID
PayAmount int32 //实际支付金额
PayRemark string //支付备注
FileName string //拍照文件
}
type CarServiceProcessResponse struct {
OrderDetail OrderDetail `json:"orderDetail"`
}
// 服务处理
func (p DefParty) carServiceProcess() web_iris.Party {
return web_iris.Party{Prefix: p.Prefix, PartyFunc: func(index iris.Party) {
index.Post(CarBase+"/carServiceProcess", func(ctx *context.Context) {
headerBaseInfo := GetHeaderBaseInfo(ctx)
body, _ := io.ReadAll(ctx.Request().Body)
var carServiceProcessRequest CarServiceProcessRequest
json.Unmarshal(body, &carServiceProcessRequest)
if carServiceProcessRequest.Type == 0 {
ParamError.Fail(ctx, carServiceProcessRequest)
return
}
var userInfo *models.User
database.Instance().Model(&models.User{}).Where("id = ?", headerBaseInfo.Uid).Find(&userInfo)
if userInfo.Role == 0 {
UserError.Fail(ctx, headerBaseInfo)
return
}
var serviceCarUser models.ServiceCarUser
database.Instance().Model(&models.ServiceCarUser{}).Where("uid = ?", userInfo.Id).Find(&serviceCarUser)
if serviceCarUser.CarId == 0 {
CarNotExistError.Fail(ctx, headerBaseInfo)
return
}
var subOrderInfo models.OrderSub
database.Instance().Model(&models.OrderSub{}).Where("order_id = ?", carServiceProcessRequest.SubOrderId).Find(&subOrderInfo)
if subOrderInfo.Id == 0 {
OrderExistError.Fail(ctx, carServiceProcessRequest)
return
}
database.Instance().Model(&models.OrderServiceRecord{}).Create(&models.OrderServiceRecord{
OrderId: carServiceProcessRequest.SubOrderId,
FilePath: carServiceProcessRequest.FileName,
Type: carServiceProcessRequest.Type,
})
var mainOrder models.OrderMain
database.Instance().Model(&models.OrderMain{}).Where("order_id = ?", subOrderInfo.MainOrderId).Find(&mainOrder)
if mainOrder.Id == 0 {
OrderExistError.Fail(ctx, carServiceProcessRequest)
return
}
if carServiceProcessRequest.Type == 1 {
if subOrderInfo.OrderStatus == 3 || subOrderInfo.OrderStatus == 2 {
OrderError.Fail(ctx, carServiceProcessRequest)
return
}
subOrderInfo.OrderStatus = 2
mainOrder.OrderStatus = 2
database.Instance().Save(&mainOrder)
database.Instance().Save(&subOrderInfo)
} else if carServiceProcessRequest.Type == 2 {
if subOrderInfo.OrderStatus == 3 {
OrderError.Fail(ctx, carServiceProcessRequest)
return
}
subOrderInfo.OrderStatus = 3
subOrderInfo.PayAmount = carServiceProcessRequest.PayAmount
if subOrderInfo.PayAmount == 0 {
subOrderInfo.PayAmount = subOrderInfo.TotalAmount
}
subOrderInfo.PayRemark = carServiceProcessRequest.PayRemark
database.Instance().Save(&subOrderInfo)
var count int64
database.Instance().Model(&models.OrderSub{}).Where("main_order_id = ?", subOrderInfo.MainOrderId).Count(&count)
var countStatus int64
database.Instance().Model(&models.OrderSub{}).Where("main_order_id = ? and status = 3", subOrderInfo.MainOrderId).Count(&countStatus)
if count == countStatus {
mainOrder.OrderStatus = 3
database.Instance().Save(&mainOrder)
}
}
Success(ctx, carServiceProcessRequest, CarServiceProcessResponse{GetOrderDetail(mainOrder.OrderId)})
})
}}
}