You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

318 lines
8.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package aftersales
import (
"github.com/gin-gonic/gin"
"github.com/golangkit/formatime"
"github.com/shopspring/decimal"
"math"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/model/aftersales"
"recook/internal/model/official"
"recook/tools"
"time"
)
type afterSalesListParam struct {
UserID uint `json:"userId"`
Page uint `json:"page"`
Type uint `json:"type"`
ReturnStatus []uint
}
type afterSalesListResp struct {
ID uint `gorm:"column:id;primary_key" json:"asId"`
OrderGoodsID uint `json:"orderGoodsId"`
GoodsID uint `gorm:"column:goods_id" json:"goodsId"` // 商品ID
GoodsName string `gorm:"column:goods_name" json:"goodsName"` // 商品名快照
SkuName string `gorm:"column:sku_name" json:"skuName"` // SKU名字组合起来
MainPhotoURL string `gorm:"column:main_photo_url" json:"mainPhotoUrl"` // 主图快照 先读sku 没有则读取主图
RefundAmount decimal.Decimal `gorm:"column:refund_amount" json:"refundAmount"` // 退款金额
RefundCoin decimal.Decimal `gorm:"column:refund_coin" json:"refundCoin"` // 退款瑞币
IsShip uint `gorm:"column:is_ship" json:"isShip"`
AssType uint `gorm:"column:ass_type" json:"assType"`
ReturnStatus uint `gorm:"column:return_status" json:"returnStatus"`
RefundStatus uint `gorm:"column:refund_status" json:"refundStatus"`
AsDesc string `json:"asDesc"`
RefundDesc string `json:"refundDesc"`
CreatedAt formatime.Second `json:"createdAt"`
Quantity uint `json:"quantity"`
Color int `json:"color"`
}
func QueryAfterSalesGoodsList(c *gin.Context) {
var p afterSalesListParam
if err := tools.ParseParams(&p, c); err != nil {
back.Fail(c, err.Error())
return
}
//p.Type=1未完结2已完成
//默认获取未完结的售后订单
if p.Type == 1 {
p.ReturnStatus = []uint{1, 3, 4}
} else if p.Type == 2 {
p.ReturnStatus = []uint{2, 5, 6}
} else {
p.ReturnStatus = []uint{1, 2, 3, 4, 5, 6}
}
asGoodsList := make([]aftersales.Goods, 0, 0)
dbc.DB.Limit(10).Offset(10*p.Page).Order("id desc").Find(&asGoodsList, "user_id = ? and return_status in (?)", p.UserID, p.ReturnStatus)
list := make([]afterSalesListResp, 0, 0)
for _, v := range asGoodsList {
asDesc := ""
color := 0
//如果是已完成的订单
if v.ReturnStatus == 5 {
if v.IsClosed == 1 {
color = 3
if v.AssType == 2 {
asDesc = "退货已关闭"
} else {
asDesc = "退款已关闭"
}
} else {
color = 2
if v.AssType == 2 {
asDesc = "退货成功"
} else {
asDesc = "退款成功"
}
}
} else {
color = 1
if v.AssType == 2 {
asDesc = "退款退货"
} else {
asDesc = "仅退款"
}
}
//asDesc = asDesc + v.RefundAmount.Truncate(2).String() + "元"
refundDesc := ""
if v.ReturnStatus == 1 {
refundDesc = "商家审核中"
} else if v.ReturnStatus == 2 {
refundDesc = "申请被拒绝"
} else if v.ReturnStatus == 3 {
refundDesc = "审核成功:" + "请填写退货物流"
} else if v.ReturnStatus == 4 {
refundDesc = "等待商家确认收货"
} else if v.ReturnStatus == 5 {
refundDesc = "售后完成:" + v.RefundAmount.Truncate(2).String() + "元"
} else if v.ReturnStatus == 6 {
refundDesc = "退货商品被拒绝"
}
list = append(list, afterSalesListResp{
ID: v.ID, //售后编号
OrderGoodsID: v.OrderGoodsID,
GoodsID: v.GoodsID,
GoodsName: v.GoodsName, //商品名称
SkuName: v.SkuName, //sku名称
MainPhotoURL: v.MainPhotoURL, //主图的商品url
RefundAmount: v.RefundAmount, //退款金额
RefundCoin: v.RefundCoin, //退款瑞币
IsShip: v.IsShip,
AssType: v.AssType,
ReturnStatus: v.ReturnStatus,
RefundStatus: v.RefundStatus,
AsDesc: asDesc, //退款,退款退货,退货成功,退款成功 退货已关闭 退款已关闭
Color: color, //颜色 1售后中 2售后成功 3售后关闭
RefundDesc: refundDesc, //退款类型文字
CreatedAt: v.CreatedAt, //创建时间
Quantity: v.Quantity, //商品数量
})
}
back.Suc(c, "", &list)
}
type returnDetailParams struct {
OrderGoodsID uint `json:"orderGoodsId"`
AfterSalesGoodsId uint `json:"afterSalesGoodsId"`
}
type afterLogPem struct {
AsGoodsId uint `json:"asGoodsId"`
}
type returnGoodsResp struct {
aftersales.Goods
Title string `json:"title"`
Subtitle string `json:"subtitle"`
RightTile string `json:"rightTile"`
StatusTile int `json:"statusTile"`
ResidueHour float64 `json:"residueHour"`
Status int `json:"status"`
Address string `json:"address"` //售后地址
}
func QueryAfterSalesLog(c *gin.Context) {
var p afterLogPem
if err := tools.ParseParams(&p, c); err != nil {
back.Fail(c, err.Error())
return
}
//p.AsGoodsId=511220
var afterLog []aftersales.AftersalesLog
dbc.DB.Order("id desc").Find(&afterLog, "as_id=?", p.AsGoodsId)
back.Suc(c, "", &afterLog)
return
}
func QueryAfterSalesGoodsDetail(c *gin.Context) {
var p returnDetailParams
if err := tools.ParseParams(&p, c); err != nil {
back.Fail(c, err.Error())
return
}
//p.OrderGoodsID=872
var asGoods aftersales.Goods
if p.AfterSalesGoodsId > 0 {
if err := dbc.DB.Order("id DESC").First(&asGoods, "order_goods_id = ? and id=? ", p.OrderGoodsID, p.AfterSalesGoodsId).Error; err != nil {
back.Err(c, err.Error())
return
}
} else {
if err := dbc.DB.Order("id DESC").First(&asGoods, "order_goods_id = ?", p.OrderGoodsID).Error; err != nil {
back.Err(c, err.Error())
return
}
}
title := "待审核" //左边的状态文字
rightTile := "退款成功" //右边的状态文字
subtitle := "" //状态详细说明
statusTile := 0 //0左边打钩1右边打钩2两边打叉
totalHours := 24.0
status := 0 //售后的状态
if asGoods.ReturnStatus == 1 {
//这个里面其实还包含了是否发货
if asGoods.IsShip == 0 {
//未发货
title = "待审核"
subtitle = "等待平台审核"
statusTile = 0
} else {
//已发货
title = "待审核"
subtitle = "等待平台审核"
statusTile = 0
}
status = 1
} else if asGoods.ReturnStatus == 2 {
//这个里面其实还包含了是否发货
if asGoods.IsShip == 0 {
//未发货
title = "申请未通过"
subtitle = "申请未通过"
statusTile = 2
status = 6
} else {
//已发货
title = "申请未通过"
subtitle = "申请未通过"
statusTile = 2
status = 7
}
rightTile = "退款关闭"
//subtitle = asGoods.RejectReason
} else if asGoods.ReturnStatus == 3 {
//这边要判断是否有拒绝理由,如果有,就换个文字显示
//这边要判断是否有拒绝理由,如果有,就换个文字显示
if len(asGoods.RejectReason) > 0 {
//已发货
title = "待买家寄回"
subtitle = "等待买家重新寄回"
statusTile = 0
rightTile = "退货成功"
totalHours = 48 //给买家48小时的退货时间
status = 4
} else {
//已发货
title = "待买家寄回"
subtitle = "等待买家寄回"
statusTile = 0
rightTile = "退货成功"
totalHours = 48 //给买家48小时的退货时间
status = 2
}
} else if asGoods.ReturnStatus == 4 {
if len(asGoods.RejectReason) > 0 {
}
title = "待平台收货"
subtitle = "等待平台收货"
statusTile = 0
rightTile = "退货成功"
status = 3
} else if asGoods.ReturnStatus == 5 {
//这个里面其实还包含了是否发货
if asGoods.IsShip == 0 {
//未发货
title = "审核通过"
subtitle = "已办理退款"
statusTile = 1
} else {
//已发货
title = "审核通过"
subtitle = "已办理退款"
statusTile = 1
rightTile = "退货成功"
}
status = 5
} else if asGoods.ReturnStatus == 6 { //这个状态没有了
title = "退货被拒绝"
subtitle = "请与商家沟通"
}
if asGoods.IsClosed == 1 { //这个需要在加一个状态
if asGoods.IsShip == 0 {
//未发货
title = "申请未通过"
subtitle = "申请未通过"
statusTile = 2
status = 6
} else {
//已发货
title = "申请未通过"
subtitle = "申请未通过"
statusTile = 2
status = 7
}
rightTile = "退款关闭"
}
residueHour := totalHours - math.Ceil((float64(time.Now().Unix())-float64(asGoods.CreatedAt.Time.Unix()))/3600)
//获取寄回地址
var addr official.ReturnAddress
dbc.DB.Last(&addr)
back.Suc(c, "", &returnGoodsResp{
Goods: asGoods,
Title: title,
Subtitle: subtitle,
RightTile: rightTile,
StatusTile: statusTile,
ResidueHour: residueHour, //剩余时间
Status: status, //售后状态
Address: addr.Address + " " + addr.Name + " " + addr.Mobile, //售后地址
})
}