diff --git a/business/api/auth.go b/business/api/auth.go index 1ec56a1..bf6b055 100644 --- a/business/api/auth.go +++ b/business/api/auth.go @@ -156,13 +156,14 @@ func (p DefParty) updateUserInfo() web_iris.Party { } type GetUserInfoResponse struct { - Uid int64 `json:"uid"` - NickName string `json:"nickName"` - HeadImgUrl string `json:"headImgUrl"` - Discount float32 `json:"discount"` - Amount int `json:"amount"` - Role int `json:"role"` - UserPets []UserPetInfo `json:"userPets"` + Uid int64 `json:"uid"` + NickName string `json:"nickName"` + HeadImgUrl string `json:"headImgUrl"` + Discount float32 `json:"discount"` + Amount int `json:"amount"` + Role int `json:"role"` + UserPets []UserPetInfo `json:"userPets"` + Car models.ServiceCar `json:"car"` } // 获取用户信息 @@ -188,6 +189,12 @@ func (p DefParty) getUserInfo() web_iris.Party { if getUserInfoResponse.Amount == 0 { getUserInfoResponse.Discount = 1 } + if userInfo.Role == 1 { + var serviceCarUser models.ServiceCarUser + database.Instance().Model(&models.ServiceCarUser{}).Where("uid = ?", userInfo.Id).Find(&serviceCarUser) + getUserInfoResponse.Car = CarMap[serviceCarUser.CarId] + getUserInfoResponse.Car.ServiceAddr = ServiceAddrMap[getUserInfoResponse.Car.ServiceAddrId] + } Success(ctx, headerInfo, getUserInfoResponse) }) }} diff --git a/business/api/car.go b/business/api/car.go index aa6d618..5a9d602 100644 --- a/business/api/car.go +++ b/business/api/car.go @@ -47,9 +47,9 @@ func (p DefParty) carServiceOrderList() web_iris.Party { } 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) + 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: true}).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) + 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: true}).Offset((carServiceOrderListRequest.PageNo - 1) * carServiceOrderListRequest.PageSize).Limit(carServiceOrderListRequest.PageSize).Find(&orderMains) } var orderDetails []OrderDetail for _, value := range orderMains { @@ -102,11 +102,7 @@ func (p DefParty) carServiceProcess() web_iris.Party { 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 { @@ -118,6 +114,11 @@ func (p DefParty) carServiceProcess() web_iris.Party { OrderError.Fail(ctx, carServiceProcessRequest) return } + if carServiceProcessRequest.PayAmount > 0 { + subOrderInfo.PayAmount = carServiceProcessRequest.PayAmount + subOrderInfo.PayTime = time.Now() + subOrderInfo.PayStatus = 1 + } subOrderInfo.OrderStatus = 2 mainOrder.OrderStatus = 2 database.Instance().Save(&mainOrder) @@ -128,21 +129,35 @@ func (p DefParty) carServiceProcess() web_iris.Party { return } subOrderInfo.OrderStatus = 3 - subOrderInfo.PayAmount = carServiceProcessRequest.PayAmount - if subOrderInfo.PayAmount == 0 { - subOrderInfo.PayAmount = subOrderInfo.TotalAmount + if carServiceProcessRequest.PayAmount > 0 { + subOrderInfo.PayAmount = carServiceProcessRequest.PayAmount + subOrderInfo.PayTime = time.Now() + subOrderInfo.PayStatus = 1 } - subOrderInfo.PayTime = time.Now() 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) + var payStatus int64 + database.Instance().Model(&models.OrderSub{}).Where("main_order_id = ? and pay_status = 1", subOrderInfo.MainOrderId).Count(&payStatus) + if count == payStatus { + mainOrder.PayStatus = 1 + database.Instance().Save(&mainOrder) + } if count == countStatus { mainOrder.OrderStatus = 3 database.Instance().Save(&mainOrder) } + } else if carServiceProcessRequest.Type == 3 { + subOrderInfo.PayRemark = carServiceProcessRequest.PayRemark + database.Instance().Save(&subOrderInfo) + database.Instance().Model(&models.OrderServiceRecord{}).Create(&models.OrderServiceRecord{ + OrderId: carServiceProcessRequest.SubOrderId, + FilePath: carServiceProcessRequest.FileName, + Type: carServiceProcessRequest.Type, + }) } Success(ctx, carServiceProcessRequest, CarServiceProcessResponse{GetOrderDetail(mainOrder.OrderId)}) }) diff --git a/business/api/order.go b/business/api/order.go index b4c730a..125a5a5 100644 --- a/business/api/order.go +++ b/business/api/order.go @@ -5,6 +5,7 @@ import ( "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" "go.uber.org/zap" + "gorm.io/gorm" "gorm.io/gorm/clause" "io" "pet-house.com/business/models" @@ -120,7 +121,8 @@ func (p DefParty) orderCreate() web_iris.Party { PayType: 1, Discount: 100, TotalAmount: totalAmount, - PayAmount: 0, + PayAmount: totalAmount, + PayTime: time.Now(), ProjectionServiceTime: projectionServiceTime, } orderTotalAmount = orderTotalAmount + int(totalAmount) @@ -133,19 +135,24 @@ func (p DefParty) orderCreate() web_iris.Party { orderMain.ProjectionServiceTime = projectionServiceTimeAll var userInfo *models.User database.Instance().Model(&models.User{}).Where("id = ?", headerBaseInfo.Uid).Find(&userInfo) + if userInfo.Discount > 0 { + orderTotalAmount = orderTotalAmount * (userInfo.Discount / 100) + } tx := database.Instance().Begin() + var db4 *gorm.DB if userInfo.Amount >= orderTotalAmount { orderMain.PayStatus = 1 + orderMain.PayTotalAmount = orderTotalAmount userInfo.Amount = userInfo.Amount - orderTotalAmount updateValues := map[string]interface{}{ "Amount": userInfo.Amount, } - tx.Model(&userInfo).Updates(&updateValues) + db4 = tx.Model(&userInfo).Updates(&updateValues) } db := tx.Model(&models.OrderDetail{}).CreateInBatches(&orderSubDetailList, len(orderSubDetailList)) db1 := tx.Model(&models.OrderSub{}).CreateInBatches(&orderSubList, len(orderSubList)) db2 := tx.Model(&models.OrderMain{}).Create(&orderMain) - if db.Error != nil || db1.Error != nil || db2.Error != nil { + if db4.Error != nil || db.Error != nil || db1.Error != nil || db2.Error != nil { tx.Callback() orderLock.Unlock() zap_server.ZAPLOG.Error("订单插入失败", zap.Any("db", db.Error), zap.Any("db1", db1.Error), zap.Any("db2", db2.Error)) diff --git a/business/models/dataModel.go b/business/models/dataModel.go index fe99b63..57ad395 100644 --- a/business/models/dataModel.go +++ b/business/models/dataModel.go @@ -111,6 +111,8 @@ type SystemConfig struct { ConfigType string `json:"configType"` //类型 0banner 1关于我们 2客服电话 ContentType int `json:"contentType"` //1文本 2链接 Sort int `json:"sort"` //排序位 + JumpType int `gorm:"default:0" json:"JumpType"` //跳转类型 0无法跳转 1跳转外部 2跳转内部 + JumpUrl string `json:"jumpUrl"` //跳转url CreateTime time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP" json:"-"` //创建时间 } @@ -126,6 +128,8 @@ type OrderMain struct { ServiceRemark string `json:"serviceRemark"` //服务备注 CreateTime time.Time `gorm:"type:timestamp;default:CURRENT_TIMESTAMP" json:"createTime"` //创建时间 PayStatus int `gorm:"default:0" json:"payStatus"` //支付状态 0未支付 1已支付 + DispatchStatus int `gorm:"default:0" json:"dispatchStatus"` //派单状态 0未派单 1已派单 + PayTotalAmount int `json:"payTotalAmount"` //支付总金额 } // OrderSub 子订单 @@ -139,6 +143,7 @@ type OrderSub struct { Discount int `json:"discount"` //折扣 TotalAmount int32 `gorm:"not null" json:"totalAmount"` //总金额 ProjectionServiceTime int `json:"projectionServiceTime"` //服务预估时长 + PayStatus int `gorm:"default:0" json:"payStatus"` //支付状态 0未支付 1已支付 PayAmount int32 `json:"payAmount"` //实际支付金额 PayTime time.Time `gorm:"type:timestamp;" json:"payTime"` //支付时间 PayRemark string `json:"payRemark"` //支付备注