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)}) }) }} }