258 lines
10 KiB
Go
258 lines
10 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"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"
|
|
"pet-house.com/core/server/web/web_iris"
|
|
"time"
|
|
)
|
|
|
|
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: 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: true}).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 float64 //实际支付金额
|
|
PayRemark string //支付备注
|
|
FileName string //拍照文件
|
|
}
|
|
|
|
type CarServiceProcessResponse struct {
|
|
OrderDetail OrderDetail `json:"orderDetail"` //订单详情
|
|
Desc string `json:"desc"` //支付描述
|
|
PayImgUrl string `json:"payImgUrl"` //支付二维码
|
|
}
|
|
|
|
// 服务处理
|
|
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
|
|
}
|
|
|
|
var mainOrder models.OrderMain
|
|
database.Instance().Model(&models.OrderMain{}).Where("order_id = ? and status = 1", 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
|
|
}
|
|
} else if carServiceProcessRequest.Type == 2 {
|
|
if subOrderInfo.OrderStatus == 3 {
|
|
OrderError.Fail(ctx, carServiceProcessRequest)
|
|
return
|
|
}
|
|
}
|
|
desc := ""
|
|
payImgUrl := ""
|
|
|
|
var orderUserInfo *models.User
|
|
database.Instance().Model(&models.User{}).Where("id = ?", mainOrder.Uid).Find(&orderUserInfo)
|
|
var processPayAmount = carServiceProcessRequest.PayAmount
|
|
var originTotalAmount = float64(subOrderInfo.PayAmount) / 10.0
|
|
if processPayAmount > 0 && originTotalAmount != processPayAmount {
|
|
//原价
|
|
originAmount := subOrderInfo.PayAmount
|
|
userOriginAmount := orderUserInfo.Amount
|
|
p1 := int(processPayAmount * 10)
|
|
if mainOrder.PayTotalAmount > 0 && originTotalAmount != processPayAmount {
|
|
mainOrder.PayTotalAmount = mainOrder.PayTotalAmount - originAmount + p1
|
|
}
|
|
subOrderInfo.PayAmount = p1
|
|
if mainOrder.PayStatus == 1 {
|
|
recordType := 2
|
|
amount := 0
|
|
//新价格大于原价格 加回差价
|
|
if subOrderInfo.PayAmount < originAmount {
|
|
recordType = 1
|
|
amount = originAmount - subOrderInfo.PayAmount
|
|
orderUserInfo.Amount = orderUserInfo.Amount + amount
|
|
} else {
|
|
if orderUserInfo.Amount < (subOrderInfo.PayAmount - originAmount) {
|
|
OrderError.DefFail(ctx, carServiceProcessRequest, "当前余额不足")
|
|
return
|
|
}
|
|
amount = subOrderInfo.PayAmount - originAmount
|
|
orderUserInfo.Amount = orderUserInfo.Amount - amount
|
|
}
|
|
updateValues := map[string]interface{}{
|
|
"Amount": orderUserInfo.Amount,
|
|
}
|
|
database.Instance().Model(&orderUserInfo).Updates(&updateValues)
|
|
if amount > 0 {
|
|
userAmountRecord := models.UserAmountRecord{
|
|
UserId: orderUserInfo.Id,
|
|
Type: recordType,
|
|
OriginAmount: userOriginAmount,
|
|
ProAmount: amount,
|
|
CurrAmount: orderUserInfo.Amount,
|
|
OrderId: mainOrder.OrderId,
|
|
ProScene: "修改订单金额",
|
|
Status: 1,
|
|
}
|
|
database.Instance().Model(&models.UserAmountRecord{}).Create(&userAmountRecord)
|
|
}
|
|
} else {
|
|
userAmountRecord := models.UserAmountRecord{
|
|
UserId: orderUserInfo.Id,
|
|
Type: 3,
|
|
OriginAmount: userOriginAmount,
|
|
ProAmount: p1,
|
|
CurrAmount: orderUserInfo.Amount,
|
|
OrderId: mainOrder.OrderId,
|
|
ProScene: "修改订单金额",
|
|
Status: 1,
|
|
}
|
|
database.Instance().Model(&models.UserAmountRecord{}).Create(&userAmountRecord)
|
|
}
|
|
subOrderInfo.PayTime = time.Now()
|
|
subOrderInfo.PayStatus = 1
|
|
}
|
|
if carServiceProcessRequest.Type == 1 {
|
|
subOrderInfo.OrderStatus = 2
|
|
mainOrder.OrderStatus = 2
|
|
database.Instance().Save(&mainOrder)
|
|
database.Instance().Save(&subOrderInfo)
|
|
} else if carServiceProcessRequest.Type == 2 {
|
|
subOrderInfo.OrderStatus = 3
|
|
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 order_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)
|
|
}
|
|
pet := GetPet(subOrderInfo.PetId)
|
|
pet.PetInfo.LastServiceDate = time.Now().Format("2006-01-02")
|
|
updateValues := map[string]interface{}{
|
|
"LastServiceDate": pet.PetInfo.LastServiceDate,
|
|
}
|
|
database.Instance().Model(&pet.PetInfo).Updates(&updateValues)
|
|
if orderUserInfo.InviteUserId > 0 {
|
|
for _, coupons := range CouponsMap {
|
|
if coupons.SendStatus == 3 {
|
|
//完成订单给邀请用户发送优惠券
|
|
newUserCoupons := models.UserCoupons{
|
|
Uid: orderUserInfo.InviteUserId,
|
|
Cid: coupons.Id,
|
|
LastExpireTime: time.Now().AddDate(0, 0, coupons.DrawDay),
|
|
}
|
|
database.Instance().Create(&newUserCoupons)
|
|
}
|
|
}
|
|
}
|
|
} 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,
|
|
})
|
|
var payOrder *models.PayOrder
|
|
database.Instance().Model(&models.PayOrder{}).Where("order_id = ?", mainOrder.PayOrderId).Find(&payOrder)
|
|
//已支付成功且主订单未支付
|
|
if payOrder.Id == 0 || payOrder.OrderStatus == 0 {
|
|
payPrice := subOrderInfo.PayAmount
|
|
desc = "您还需支付" + fmt.Sprintf("%.1f", float64(payPrice)/10.0)
|
|
payImgUrl = web.CONFIG.System.Domain + "/static/img/pay.png"
|
|
}
|
|
}
|
|
Success(ctx, carServiceProcessRequest, CarServiceProcessResponse{GetOrderDetail(mainOrder.OrderId), desc, payImgUrl})
|
|
})
|
|
}}
|
|
}
|