|
|
package order
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
"recook/internal/api/mobile/pay/public"
|
|
|
"recook/internal/back"
|
|
|
"recook/internal/dbc"
|
|
|
"recook/internal/model/aftersales"
|
|
|
"recook/internal/model/goods"
|
|
|
"recook/internal/model/order"
|
|
|
"recook/internal/v2/logic/manage/jyy"
|
|
|
goods2 "recook/internal/v2/model/recook/goods"
|
|
|
"recook/tools"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"github.com/golangkit/formatime"
|
|
|
"github.com/jinzhu/gorm"
|
|
|
"github.com/shopspring/decimal"
|
|
|
)
|
|
|
|
|
|
type queryOrderListParam struct {
|
|
|
UserID uint `json:"userId"`
|
|
|
Page uint `json:"page"`
|
|
|
OrderType string `json:"orderType" validate:"omitempty,oneof=0 1"`
|
|
|
IsSale bool `json:"is_sale"`
|
|
|
}
|
|
|
|
|
|
type queryOrderListResponse struct {
|
|
|
order.Information
|
|
|
CanConfirm bool `json:"canConfirm"`
|
|
|
TotalGoodsCount uint `json:"totalGoodsCount"`
|
|
|
GoodsList []order.GoodsDetail `json:"goodsList"`
|
|
|
OrderType string `json:"orderType"` // 订单类型,线上订单(配送) or 门店订单(自提)
|
|
|
CanPay bool `json:"can_pay"`
|
|
|
}
|
|
|
|
|
|
var TypeMap = map[uint]string{
|
|
|
0: "线上订单",
|
|
|
1: "门店订单",
|
|
|
}
|
|
|
|
|
|
/*全部订单*/
|
|
|
func QueryAllOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, nil).Find(&orderInfoList, "user_id = ? and deleted_at is null", p.UserID)
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
var totalGoodsCount uint = 0
|
|
|
for i2, v2 := range goodsList {
|
|
|
totalGoodsCount += v2.Quantity
|
|
|
//这个将这个产品列表的状态显示出来
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
|
|
|
canConfirm := true
|
|
|
if v1.Status == 1 {
|
|
|
isAllAss := true
|
|
|
// for _, v := range goodsList { // 所有商品都已发货
|
|
|
// if v.ExpressStatus == 0 {
|
|
|
// canConfirm = false
|
|
|
// break
|
|
|
// }
|
|
|
// if v.AssType == 0 { // 如果商品都申请了售后,不能确认
|
|
|
// isAllAss = false
|
|
|
// break
|
|
|
// }
|
|
|
// }
|
|
|
for _, v := range goodsList { // 商品流程走完
|
|
|
if !v.IsOrderGoodsEnd() {
|
|
|
isAllAss = false
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if isAllAss == false {
|
|
|
canConfirm = false
|
|
|
}
|
|
|
} else {
|
|
|
canConfirm = false
|
|
|
}
|
|
|
|
|
|
// 检测是全部发货还是部分发货
|
|
|
if v1.ExpressStatus == 1 {
|
|
|
isAllExpress := 2
|
|
|
for _, v := range goodsList {
|
|
|
if v.AssType == 0 && v.ExpressStatus == 0 {
|
|
|
isAllExpress = 1
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
v1.ExpressStatus = uint(isAllExpress)
|
|
|
}
|
|
|
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: canConfirm,
|
|
|
TotalGoodsCount: totalGoodsCount,
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
func getStatus(orderInfo order.Information, goodsDetail order.GoodsDetail) string {
|
|
|
//获取售后
|
|
|
var afterSales aftersales.Goods
|
|
|
dbc.DB.Last(&afterSales, "order_goods_id=?", goodsDetail.ID)
|
|
|
txt := ""
|
|
|
//0未付款 1支付成功 2订单取消 3订单过期 4交易成功 5订单关闭
|
|
|
if orderInfo.Status == 0 {
|
|
|
txt = ""
|
|
|
} else if orderInfo.Status >= 1 { //1支付成功
|
|
|
if orderInfo.ShippingMethod == 0 { //在线支付
|
|
|
if goodsDetail.AssType == 0 { //不是售后
|
|
|
if goodsDetail.ExpressStatus == 0 { //未发货
|
|
|
txt = "待发货"
|
|
|
} else {
|
|
|
txt = "已发货"
|
|
|
if goodsDetail.IsClosed == 1 {
|
|
|
txt = "退货退款关闭"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} else if goodsDetail.AssType == 1 { //仅退款
|
|
|
if afterSales.ReturnStatus == 2 { //未发货且售后完结
|
|
|
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 0 {
|
|
|
|
|
|
txt = "待发货"
|
|
|
} else {
|
|
|
txt = "已发货"
|
|
|
}
|
|
|
if afterSales.ReturnStatus == 1 {
|
|
|
txt = "退款审核中"
|
|
|
}
|
|
|
if afterSales.ReturnStatus == 3 && goodsDetail.RefundStatus == 1 {
|
|
|
txt = "退款中"
|
|
|
}
|
|
|
if afterSales.ReturnStatus == 5 && goodsDetail.RefundStatus == 2 {
|
|
|
txt = "退款成功"
|
|
|
}
|
|
|
if goodsDetail.IsClosed == 1 {
|
|
|
txt = "退款关闭"
|
|
|
}
|
|
|
|
|
|
} else if goodsDetail.AssType == 2 { //售后完结
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 2 {
|
|
|
txt = "商家拒绝退款退货"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 1 {
|
|
|
txt = "退货审核中"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 3 {
|
|
|
txt = "待买家退回"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 4 && goodsDetail.IsClosed == 0 {
|
|
|
txt = "待卖家收货"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 5 && goodsDetail.RefundStatus == 1 {
|
|
|
txt = "退款中"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 5 && goodsDetail.RefundStatus == 2 {
|
|
|
txt = "退款成功"
|
|
|
}
|
|
|
//if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 4 && goodsDetail.IsClosed == 1 {
|
|
|
// txt = "退货退款关闭"
|
|
|
//}
|
|
|
if goodsDetail.IsClosed == 1 {
|
|
|
txt = "退货退款关闭"
|
|
|
}
|
|
|
|
|
|
} else if goodsDetail.AssType == 3 {
|
|
|
if goodsDetail.RefundStatus == 1 {
|
|
|
txt = "退款中"
|
|
|
}
|
|
|
if goodsDetail.RefundStatus == 2 {
|
|
|
txt = "退款成功"
|
|
|
}
|
|
|
if afterSales.ReturnStatus == 1 {
|
|
|
txt = "补偿订单审核中"
|
|
|
}
|
|
|
if afterSales.ReturnStatus == 2 {
|
|
|
txt = "补偿订单被拒绝"
|
|
|
}
|
|
|
}
|
|
|
} else { //门店订单
|
|
|
if goodsDetail.ExpressStatus == 0 && goodsDetail.AssType == 0 {
|
|
|
txt = "待自提"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 0 && afterSales.ReturnStatus == 1 && goodsDetail.AssType == 1 {
|
|
|
txt = "退款审核中"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 0 && afterSales.ReturnStatus == 3 && goodsDetail.AssType == 1 && goodsDetail.RefundStatus == 1 {
|
|
|
txt = "退款中"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 0 && afterSales.ReturnStatus == 3 && goodsDetail.AssType == 1 && goodsDetail.RefundStatus == 2 {
|
|
|
txt = "退款成功"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 0 && goodsDetail.AssType == 1 && afterSales.ReturnStatus == 2 {
|
|
|
txt = "待自提"
|
|
|
}
|
|
|
if goodsDetail.ExpressStatus == 1 && orderInfo.Status == 1 {
|
|
|
txt = "自提待确认"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if goodsDetail.ExpressStatus == 1 && afterSales.ReturnStatus == 4 && goodsDetail.IsClosed == 1 {
|
|
|
txt = "退货退款关闭"
|
|
|
}
|
|
|
|
|
|
//过期订单不显示状态
|
|
|
if orderInfo.Status == 3 {
|
|
|
txt = ""
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return txt
|
|
|
}
|
|
|
|
|
|
/*未付款订单*/
|
|
|
func QueryUnpaidOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
canpay := true
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, &canpay).Find(&orderInfoList, "user_id = ? AND status = 0 AND expire_time > ?", p.UserID, time.Now())
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
for i2, v2 := range goodsList {
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: false,
|
|
|
TotalGoodsCount: uint(len(goodsList)),
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
// 待处理订单
|
|
|
func QueryUnDealOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
canpay := false
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, &canpay).Find(&orderInfoList, "user_id = ? AND status = 0 AND expire_time > ?", p.UserID, time.Now())
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
for i2, v2 := range goodsList {
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: false,
|
|
|
TotalGoodsCount: uint(len(goodsList)),
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
/*待发货 付款成功*/
|
|
|
func QueryUndeliveredOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
//p.UserID = 97
|
|
|
//p.OrderType = "0"
|
|
|
//p.Page = 0
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, nil).Find(&orderInfoList, "user_id = ? AND status = 1 AND express_status = 0", p.UserID)
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
for i2, v2 := range goodsList {
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: false,
|
|
|
TotalGoodsCount: uint(len(goodsList)),
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
/*待收货*/
|
|
|
func QueryWaitingForReceiptOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, nil).Find(&orderInfoList, "user_id = ? AND status=1 AND express_status = 1", p.UserID)
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
for i2, v2 := range goodsList {
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
canConfirm := true
|
|
|
for _, v := range goodsList {
|
|
|
if !v.IsOrderGoodsEnd() {
|
|
|
canConfirm = false
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: canConfirm,
|
|
|
TotalGoodsCount: uint(len(goodsList)),
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
/*待评价*/
|
|
|
func QueryUnEvaluateOrders(c *gin.Context) {
|
|
|
var p queryOrderListParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
var orderInfoList []order.Information
|
|
|
SearchOrderList(p.OrderType, p.Page, p.UserID, p.IsSale, nil).Find(&orderInfoList, "user_id = ? AND status=4 AND evaluated_at IS NULL", p.UserID)
|
|
|
|
|
|
list := make([]queryOrderListResponse, 0)
|
|
|
for i1, v1 := range orderInfoList {
|
|
|
var goodsList []order.GoodsDetail
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", v1.ID)
|
|
|
for i2, v2 := range goodsList {
|
|
|
goodsList[i2].RStatus = getStatus(v1, v2)
|
|
|
|
|
|
}
|
|
|
|
|
|
list = append(list, queryOrderListResponse{
|
|
|
Information: orderInfoList[i1],
|
|
|
CanConfirm: false,
|
|
|
TotalGoodsCount: uint(len(goodsList)),
|
|
|
GoodsList: goodsList,
|
|
|
OrderType: TypeMap[orderInfoList[i1].ShippingMethod],
|
|
|
CanPay: v1.CanPay,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
back.Suc(c, "", list)
|
|
|
}
|
|
|
|
|
|
type queryOrderDetailParam struct {
|
|
|
UserID uint `json:"userId"`
|
|
|
OrderID uint `json:"orderId"`
|
|
|
}
|
|
|
|
|
|
type queryOrderDetailResponse struct {
|
|
|
order.Information
|
|
|
CanConfirm bool `json:"canConfirm"`
|
|
|
TotalGoodsCount uint `json:"totalGoodsCount"`
|
|
|
Coupon *order.CouponDetail `json:"coupon"`
|
|
|
Addr *order.Addr `json:"addr"`
|
|
|
Brands []BrandManyGoods `json:"brands"`
|
|
|
Invoice *order.Invoice `json:"invoice"`
|
|
|
BuyerMsg string `json:"buyerMsg"`
|
|
|
PayTime formatime.Second `json:"payTime"`
|
|
|
StatusList []goodsStatus `json:"status_list"`
|
|
|
MakeUpText string `json:"make_up_text"`
|
|
|
MakeUpAmount decimal.Decimal `json:"make_up_amount"`
|
|
|
CanPay bool `json:"can_pay"`
|
|
|
}
|
|
|
|
|
|
type goodsStatus struct {
|
|
|
GoodsId uint `json:"goods_id"`
|
|
|
Status uint `json:"status"`
|
|
|
}
|
|
|
|
|
|
// 一对多
|
|
|
type BrandManyGoods struct {
|
|
|
BrandID uint `json:"brandId"`
|
|
|
BrandName string `json:"brandName"`
|
|
|
BrandLogoUrl string `json:"brandLogoUrl"`
|
|
|
BrandExpressTotalAmount decimal.Decimal `json:"brandExpressTotalAmount"`
|
|
|
BrandGoodsTotalAmount decimal.Decimal `json:"brandGoodsTotalAmount"`
|
|
|
BrandGoodsTotalCount uint `json:"brandGoodsTotalCount"`
|
|
|
Goods []order.GoodsDetail `json:"goods"`
|
|
|
Coupon *order.CouponDetail `json:"coupon"` // 品牌优惠券
|
|
|
}
|
|
|
|
|
|
func QueryOrderDetail(c *gin.Context) {
|
|
|
var p queryOrderDetailParam
|
|
|
if err := tools.ParseParams(&p, c); err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
//p.OrderID = 91045098
|
|
|
//p.UserID = 4755
|
|
|
condition := !public.Judge(p.OrderID)
|
|
|
|
|
|
var orderInfo []order.Information
|
|
|
if condition {
|
|
|
if err := dbc.DB.Find(&orderInfo, "virtual_id = ?", p.OrderID).Error; err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
} else {
|
|
|
if err := dbc.DB.Find(&orderInfo, "id = ?", p.OrderID).Error; err != nil {
|
|
|
back.Fail(c, err.Error())
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
od := make(map[uint]order.Information)
|
|
|
for _, v := range orderInfo {
|
|
|
od[v.ID] = v
|
|
|
}
|
|
|
|
|
|
// 买家留言
|
|
|
var buyerMsg = orderInfo[0].BuyerMessage
|
|
|
|
|
|
//var invoice order.Invoice
|
|
|
//dbc.DB.First(&invoice, "order_id = ?", orderInfo[0].ID)
|
|
|
|
|
|
var addr order.Addr
|
|
|
dbc.DB.First(&addr, "order_id = ?", orderInfo[0].ID)
|
|
|
|
|
|
//var universeCoupon order.CouponDetail
|
|
|
//dbc.DB.First(&universeCoupon, "order_id = ? AND scope = 0", orderInfo.ID)
|
|
|
|
|
|
// 获取到所有商品, 内存中进行分组操作
|
|
|
var goodsList []order.GoodsDetail
|
|
|
if condition {
|
|
|
subQ := dbc.DB.Table("recook_order_info").Select("id").Where("virtual_id = ?", p.OrderID).SubQuery()
|
|
|
dbc.DB.Find(&goodsList, "order_id in ?", subQ)
|
|
|
} else {
|
|
|
dbc.DB.Find(&goodsList, "order_id = ?", p.OrderID)
|
|
|
}
|
|
|
|
|
|
var totalGoodsCount uint = 0
|
|
|
brandMap := map[uint]uint{}
|
|
|
for i2, v := range goodsList {
|
|
|
brandMap[v.BrandID] = 1
|
|
|
totalGoodsCount += v.Quantity
|
|
|
//这边改线下状态
|
|
|
fmt.Println(v)
|
|
|
goodsList[i2].RStatus = getStatus(od[v.OrderID], v)
|
|
|
}
|
|
|
|
|
|
brandList := make([]BrandManyGoods, 0, 0)
|
|
|
|
|
|
for k := range brandMap {
|
|
|
var brandInfo goods.Brand
|
|
|
dbc.DB.Select("id, name, logo_url").First(&brandInfo, "id = ?", k)
|
|
|
|
|
|
//var brandCoupon order.CouponDetail
|
|
|
//dbc.DB.First(&brandCoupon, "order_id = ? AND brand_id = ?", orderInfo.ID, k)
|
|
|
|
|
|
internalGoodsList := make([]order.GoodsDetail, 0, 0)
|
|
|
|
|
|
brandExpressTotalFee := decimal.NewFromFloat(0.0)
|
|
|
brandGoodsTotalAmount := decimal.NewFromFloat(0.0)
|
|
|
brandGoodsTotalCount := 0
|
|
|
for i, v := range goodsList {
|
|
|
if v.BrandID == k {
|
|
|
internalGoodsList = append(internalGoodsList, goodsList[i])
|
|
|
brandExpressTotalFee = brandExpressTotalFee.Add(v.ExpressFee)
|
|
|
brandGoodsTotalAmount = brandGoodsTotalAmount.Add(v.GoodsAmount)
|
|
|
brandGoodsTotalCount += int(v.Quantity)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//brandCouponPtr := &order.CouponDetail{}
|
|
|
//if brandCoupon.ID == 0 {
|
|
|
// brandCouponPtr = nil
|
|
|
//} else {
|
|
|
// brandCouponPtr = &brandCoupon
|
|
|
//}
|
|
|
|
|
|
brandList = append(brandList, BrandManyGoods{
|
|
|
BrandID: brandInfo.ID,
|
|
|
BrandName: brandInfo.Name,
|
|
|
BrandLogoUrl: brandInfo.LogoURL,
|
|
|
BrandExpressTotalAmount: brandExpressTotalFee,
|
|
|
BrandGoodsTotalAmount: brandGoodsTotalAmount,
|
|
|
BrandGoodsTotalCount: uint(brandGoodsTotalCount),
|
|
|
Goods: internalGoodsList,
|
|
|
Coupon: nil,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
//universeCouponPtr := &order.CouponDetail{}
|
|
|
//if universeCoupon.ID == 0 {
|
|
|
// universeCouponPtr = nil
|
|
|
//} else {
|
|
|
// universeCouponPtr = &universeCoupon
|
|
|
//}
|
|
|
|
|
|
//invoicePtr := &order.Invoice{}
|
|
|
//if invoice.ID == 0 {
|
|
|
// invoicePtr = nil
|
|
|
//} else {
|
|
|
// invoicePtr = &invoice
|
|
|
//}
|
|
|
|
|
|
canConfirm := true
|
|
|
if orderInfo[0].Status == 1 {
|
|
|
isAllAss := true
|
|
|
for _, v := range goodsList { // 所有商品都已发货
|
|
|
if v.ExpressStatus == 0 {
|
|
|
canConfirm = false
|
|
|
break
|
|
|
}
|
|
|
if v.AssType == 0 { // 如果商品都申请了售后,不能确认
|
|
|
isAllAss = false
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if isAllAss {
|
|
|
canConfirm = false
|
|
|
}
|
|
|
} else {
|
|
|
canConfirm = false
|
|
|
}
|
|
|
|
|
|
// 检测是全部发货还是部分发货
|
|
|
if orderInfo[0].ExpressStatus == 1 {
|
|
|
isAllExpress := 2
|
|
|
for _, v := range goodsList {
|
|
|
if v.AssType == 0 && v.ExpressStatus == 0 {
|
|
|
isAllExpress = 1
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
orderInfo[0].ExpressStatus = uint(isAllExpress)
|
|
|
}
|
|
|
/*
|
|
|
新增内容:返回goods上架状态
|
|
|
*/
|
|
|
var statusList []goodsStatus
|
|
|
for _, v := range goodsList {
|
|
|
var goodsS goods2.RecookGoodsInfoModel
|
|
|
dbc.DB.Table(goodsS.TableName()).First(&goodsS, "id=?", v.GoodsID)
|
|
|
statusList = append(statusList, goodsStatus{
|
|
|
GoodsId: v.GoodsID,
|
|
|
Status: goodsS.PublishStatus,
|
|
|
})
|
|
|
|
|
|
}
|
|
|
temp := order.Information{
|
|
|
ID: p.OrderID,
|
|
|
CoinTotalAmount: decimal.Decimal{},
|
|
|
ExpressTotalFee: decimal.Decimal{},
|
|
|
GoodsTotalAmount: decimal.Decimal{},
|
|
|
GoodsTotalCommission: decimal.Decimal{},
|
|
|
ActualTotalAmount: decimal.Decimal{},
|
|
|
Status: orderInfo[0].Status,
|
|
|
ExpressStatus: orderInfo[0].ExpressStatus,
|
|
|
EvaluatedAt: orderInfo[0].EvaluatedAt,
|
|
|
CreatedAt: orderInfo[0].CreatedAt,
|
|
|
ExpireTime: orderInfo[0].ExpireTime,
|
|
|
TradeNo: orderInfo[0].TradeNo,
|
|
|
PayTime: orderInfo[0].PayTime,
|
|
|
PayMethod: orderInfo[0].PayMethod,
|
|
|
CompletedAt: orderInfo[0].CompletedAt,
|
|
|
CanPay: orderInfo[0].CanPay,
|
|
|
}
|
|
|
|
|
|
for _, v := range orderInfo {
|
|
|
temp.CoinTotalAmount = temp.CoinTotalAmount.Add(v.CoinTotalAmount)
|
|
|
temp.ExpressTotalFee = temp.ExpressTotalFee.Add(v.ExpressTotalFee)
|
|
|
temp.GoodsTotalAmount = temp.GoodsTotalAmount.Add(v.GoodsTotalAmount)
|
|
|
temp.GoodsTotalCommission = temp.GoodsTotalCommission.Add(v.GoodsTotalCommission)
|
|
|
temp.ActualTotalAmount = temp.ActualTotalAmount.Add(v.ActualTotalAmount)
|
|
|
}
|
|
|
var o jyy.OrderConfirmReq
|
|
|
dbc.DB.Table((&jyy.OrderConfirmReq{}).TableName()).First(&o, "order_goods_id = ?", goodsList[0].ID)
|
|
|
back.Suc(c, "", queryOrderDetailResponse{
|
|
|
Information: temp,
|
|
|
CanConfirm: canConfirm,
|
|
|
TotalGoodsCount: totalGoodsCount,
|
|
|
Coupon: nil,
|
|
|
Addr: &addr,
|
|
|
Brands: brandList,
|
|
|
Invoice: nil,
|
|
|
BuyerMsg: buyerMsg,
|
|
|
PayTime: orderInfo[0].PayTime,
|
|
|
StatusList: statusList,
|
|
|
MakeUpText: o.Reason,
|
|
|
MakeUpAmount: o.Amount,
|
|
|
CanPay: temp.CanPay,
|
|
|
})
|
|
|
}
|
|
|
|
|
|
// 搜索订单 条件
|
|
|
func SearchOrderList(OrderType string, Page, UserID uint, isSale bool, canPay *bool) *gorm.DB {
|
|
|
queryDB := dbc.DB
|
|
|
if len(OrderType) > 0 {
|
|
|
oType, _ := strconv.Atoi(OrderType)
|
|
|
queryDB = queryDB.Where("shipping_method = ?", oType)
|
|
|
}
|
|
|
if isSale {
|
|
|
queryDB = queryDB.Where("order_type = 2")
|
|
|
} else {
|
|
|
queryDB = queryDB.Where("order_type = 1")
|
|
|
}
|
|
|
if canPay != nil && isSale {
|
|
|
queryDB = queryDB.Where("can_pay = ?", *canPay)
|
|
|
}
|
|
|
queryDB = queryDB.Where("is_split = 0").Order("id desc").Limit(10).Offset(10 * Page)
|
|
|
return queryDB
|
|
|
}
|