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.
920 lines
37 KiB
920 lines
37 KiB
package order
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"path/filepath"
|
|
"recook/internal/libs/bean"
|
|
"recook/internal/static_path"
|
|
"recook/internal/v2/lib/common"
|
|
"recook/internal/v2/lib/excel"
|
|
"recook/internal/v2/model/gys/enterprise"
|
|
goods2 "recook/internal/v2/model/gys/goods"
|
|
"recook/internal/v2/model/recook/goods"
|
|
manage2 "recook/internal/v2/model/recook/manage"
|
|
manage "recook/internal/v2/model/recook/order"
|
|
"recook/tools"
|
|
"time"
|
|
|
|
"github.com/golangkit/formatime"
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/shopspring/decimal"
|
|
)
|
|
|
|
var OrderLogic = &orderLogic{}
|
|
|
|
type orderLogic struct {
|
|
}
|
|
type OrderItem struct {
|
|
OrderId uint `json:"orderId"`
|
|
OrderGoodsId uint `json:"orderGoodsId"`
|
|
OrderTime int64 `json:"orderTime"`
|
|
PayTime int64 `json:"payTime"`
|
|
GoodsName string `json:"goodsName"`
|
|
SkuName string `json:"skuName"`
|
|
Quantity uint `json:"quantity"`
|
|
BuyerMessage string `json:"buyerMessage"`
|
|
StoreMessage string `json:"storeMessage"`
|
|
UnitPrice decimal.Decimal `json:"unitPrice"`
|
|
AssType uint `json:"assType"`
|
|
AssName string `json:"assName"`
|
|
RefundStatus uint `json:"refundStatus"`
|
|
RefundName string `json:"refundName"`
|
|
ExpressStatus uint `json:"expressStatus"`
|
|
ExpressName string `json:"expressName"`
|
|
ActualAmount decimal.Decimal `json:"actualAmount"`
|
|
ExpressFee decimal.Decimal `json:"expressFee"`
|
|
CoinAmount decimal.Decimal `json:"coinAmount"`
|
|
UniverseCouponAmount decimal.Decimal `json:"universeCouponAmount"`
|
|
OrderAddr OrderAddr `json:"orderAddr"`
|
|
PayMethod uint `json:"payMethod"`
|
|
PayMethodName string `json:"payMethodName"`
|
|
}
|
|
|
|
type OrderAddr struct {
|
|
ReceiverName string `json:"receiverName"`
|
|
Mobile string `json:"mobile"`
|
|
Province string `json:"province"`
|
|
City string `json:"city"`
|
|
District string `json:"district"`
|
|
Address string `json:"address"`
|
|
}
|
|
type Where struct {
|
|
OrderGoodsId uint `json:"orderGoodsId" form:"orderGoodsId"`
|
|
OrderId uint `json:"orderId" form:"orderId"`
|
|
FirstCategoryId uint `json:"firstCategoryId" form:"firstCategoryId"`
|
|
SecondCategoryId uint `json:"secondCategoryId" form:"secondCategoryId"`
|
|
OrderStatus uint `json:"orderStatus" form:"orderStatus"`
|
|
GoodsId uint `json:"goodsId" form:"goodsId"`
|
|
ExpressStatus uint `json:"expressStatus" form:"expressStatus"`
|
|
OrderTimeStart string `json:"orderTimeStart" form:"orderTimeStart"`
|
|
OrderTimeEnd string `json:"orderTimeEnd" form:"orderTimeEnd"`
|
|
PayMethod uint `json:"payMethod" form:"payMethod"`
|
|
RefundType uint `json:"refundType" form:"refundType"`
|
|
CompletedTimeStart string `json:"completedTimeStart" form:"completedTimeStart"`
|
|
CompletedTimeEnd string `json:"completedTimeEnd" form:"completedTimeEnd"`
|
|
ReceiverName string `json:"receiverName" form:"receiverName"`
|
|
Mobile string `json:"mobile" form:"mobile"`
|
|
ExpressNo string `json:"expressNo" form:"expressNo"`
|
|
LableStatus uint `json:"lableStatus" form:"lableStatus"`
|
|
GoodsName string `json:"goodsName" form:"goodsName"`
|
|
VendorId uint `json:"vendorId" form:"vendorId"`
|
|
GoodsSn string `json:"goodsSn" form:"goodsSn"`
|
|
SkuCode string `json:"skuCode" form:"skuCode"`
|
|
BrandID uint `json:"brandID"`
|
|
TimeOut uint `json:"time_out"`
|
|
OrderFiling uint `json:"order_filing"`
|
|
IsSale bool `json:"is_sale"`
|
|
}
|
|
|
|
func (o *orderLogic) Lists(where Where, page bean.Page) (list []ListItem, total int) {
|
|
list, total = o.Data(where, &page)
|
|
return
|
|
}
|
|
|
|
// @Style 所有数据
|
|
func (o *orderLogic) All(where Where) (list []ListItem) {
|
|
list, _ = o.Data(where, nil)
|
|
return
|
|
}
|
|
|
|
type ListStruct struct {
|
|
manage.RecookOrderGoodsDetailModel
|
|
Province string `gorm:"column:province" json:"province"`
|
|
City string `gorm:"column:city" json:"city"`
|
|
District string `gorm:"column:district" json:"district"`
|
|
Address string `gorm:"column:address" json:"address"`
|
|
ReceiverName string `gorm:"column:receiver_name" json:"receiverName"`
|
|
Mobile string `gorm:"column:mobile" json:"mobile"`
|
|
PayTime formatime.Second `gorm:"column:pay_time" json:"payTime"`
|
|
PayMethod uint `gorm:"column:pay_method" json:"payMethod"`
|
|
GoodsSn string `json:"goodsSn"`
|
|
EnterPriseName string `json:"enter_prise_name"`
|
|
CanPay bool `json:"can_pay" gorm:"column:can_pay"`
|
|
}
|
|
|
|
type ListItem struct {
|
|
Id uint `json:"id"`
|
|
OrderId uint `json:"orderId"`
|
|
GoodsName string `json:"goodsName"`
|
|
MainPhotoURL string `json:"mainPhotoUrl"`
|
|
OrderTime int64 `json:"orderTime"`
|
|
SkuName string `json:"skuName"`
|
|
Quantity uint `json:"quantity"`
|
|
Mobile string `json:"mobile"`
|
|
Province string `json:"province"`
|
|
City string `json:"city"`
|
|
District string `json:"district"`
|
|
Address string `json:"address"`
|
|
ReceiverName string `json:"receiverName"`
|
|
PayMethod uint `json:"payMethod"`
|
|
PurchasePrice decimal.Decimal `json:"purchasePrice"`
|
|
ExpressFee decimal.Decimal `json:"expressFee"`
|
|
PayTime int64 `json:"payTime"`
|
|
CouponAmount decimal.Decimal `json:"couponAmount"`
|
|
ExpressStatus uint `json:"expressStatus"`
|
|
AssType uint `json:"assType"`
|
|
RefundStatus uint `json:"refundStatus"`
|
|
IsClosed int `json:"isClosed"`
|
|
BuyerMessage string `json:"buyerMessage"`
|
|
StoreMessage string `json:"storeMessage"`
|
|
PayMethodName string `json:"payMethodName"`
|
|
SkuCode string `json:"skuCode"`
|
|
BrandName string `json:"brandName"`
|
|
VendorName string `json:"vendorName"`
|
|
UnitPrice decimal.Decimal `json:"unitPrice"`
|
|
AssName string `json:"assName"`
|
|
RefundName string `json:"refundName"`
|
|
ExpressName string `json:"expressName"`
|
|
ActualAmount decimal.Decimal `json:"actualAmount"`
|
|
CoinAmount decimal.Decimal `json:"coinAmount"`
|
|
GoodsSn string `json:"goodsSn"`
|
|
StoreHouse int `json:"-"`
|
|
TimeOut int `json:"time_out"`
|
|
OrderFiling uint `json:"order_filing"`
|
|
MakeUpStatus uint `json:"make_up_status"`
|
|
CanPay bool `json:"can_pay"`
|
|
}
|
|
type QueryDownload struct {
|
|
manage.RecookOrderGoodsDetailModel
|
|
Province string
|
|
City string
|
|
District string
|
|
Address string
|
|
ReceiverName string
|
|
Mobile string
|
|
Status string
|
|
PayTime formatime.Second
|
|
AssTypeStr string
|
|
AsID uint
|
|
CompletedAt formatime.Second
|
|
Remark string
|
|
PayMethod uint
|
|
RealName string
|
|
Card string
|
|
Et formatime.Second
|
|
DeliveryTimeOut uint
|
|
}
|
|
|
|
func (o *orderLogic) Query2excel(result []QueryDownload, isVendor bool, mu *manage2.RecookManageUserInfoModel) (string, error) {
|
|
|
|
var list []interface{}
|
|
if len(result) == 0 {
|
|
return "", errors.New("查询结果为空")
|
|
}
|
|
|
|
for _, v := range result {
|
|
et := v.Et.Time.Format("2006-01-02 15:04:05")
|
|
if v.Et.IsZero() {
|
|
et = ""
|
|
}
|
|
ct := v.CompletedAt.Time.Format("2006-01-02 15:04:05")
|
|
if v.CompletedAt.IsZero() {
|
|
ct = ""
|
|
}
|
|
temp := manage.RecookOrderInfoModel{}
|
|
temp.PayMethod = v.PayMethod
|
|
settleAmount := v.PurchasePrice.Mul(decimal.NewFromInt(int64(v.Quantity))).Truncate(2)
|
|
totalSettleAmount := settleAmount.Add(v.ExpressFee)
|
|
|
|
timeout := "否"
|
|
if v.DeliveryTimeOut == 1 {
|
|
timeout = "是"
|
|
}
|
|
|
|
var col interface{} = &excel.VendorOrderQueryRow{
|
|
OrderID: v.OrderId,
|
|
OrderGoodsID: v.Id,
|
|
Status: v.Status,
|
|
CreatedAt: v.CreatedAt.Time.Format("2006-01-02 15:04:05"),
|
|
PayTime: v.PayTime.Time.Format("2006-01-02 15:04:05"),
|
|
ExpressTime: et,
|
|
TimeOut: timeout,
|
|
ReceiveTime: ct,
|
|
AssType: v.AssTypeStr,
|
|
AsID: v.AsID,
|
|
Category: v.CategoryName,
|
|
Brand: v.BrandName,
|
|
VendorName: v.VendorName,
|
|
GoodsName: v.GoodsName,
|
|
SkuCode: v.SkuCode,
|
|
SkuName: v.SkuName,
|
|
Quantity: v.Quantity,
|
|
Receiver: v.ReceiverName,
|
|
Phone: v.Mobile,
|
|
ReceiveAddr: v.Province + v.City + v.District + v.Address,
|
|
BuyerName: v.RealName,
|
|
Card: v.Card,
|
|
Remark: v.Remark,
|
|
PurchasePrice: v.PurchasePrice,
|
|
SettlementAmount: settleAmount,
|
|
ExpressFee: v.ExpressFee,
|
|
TotalSettledAmount: totalSettleAmount,
|
|
}
|
|
if !isVendor {
|
|
col = &excel.OrderQueryRow{
|
|
VendorOrderQueryRow: *(col.(*excel.VendorOrderQueryRow)),
|
|
UnitPrice: v.UnitPrice,
|
|
GoodsAmount: v.GoodsAmount,
|
|
CoinAmount: v.CoinAmount,
|
|
ActualAmount: v.ActualAmount,
|
|
PayMethod: temp.GetPayMethodTypeName(),
|
|
TotalCommission: v.TotalCommission,
|
|
}
|
|
}
|
|
|
|
list = append(list, col)
|
|
}
|
|
name := time.Now().Format("20060102-150405") + tools.GenerateGoodsHashSign() + ".xlsx"
|
|
path := filepath.Join(static_path.Dir.Root, static_path.Dir.Temp, name)
|
|
|
|
sheet := excel.CreateSheet("recook", list)
|
|
|
|
if mu != nil && mu.NewroleId != 1 {
|
|
temp := (&manage2.RecookExportDisplayRoleMenuModel{}).FindByRoleID(mu.NewroleId)
|
|
exclude := (&manage2.RecookExportDisplayMenuModel{}).FindExportByIDs(temp)
|
|
|
|
sheet.RegisterAuth("check", func(sheet *excel.Sheet, s string) bool {
|
|
return !common.StringSliceContains(exclude, s)
|
|
})
|
|
}
|
|
|
|
excelFile := excel.NewFile()
|
|
excelFile.AddSheet(sheet)
|
|
if err := excelFile.ToExcel(path); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return name, nil
|
|
}
|
|
|
|
// @Style 获取数据
|
|
func (o *orderLogic) Query(where Where) (list []QueryDownload, e error) {
|
|
rog := manage.RecookOrderGoodsDetailModel{}
|
|
query := rog.GetDb().Table(rog.TableName()+" AS rog").
|
|
Select(`rog.*, addr.province, addr.city, addr.district, addr.address, addr.receiver_name, addr.mobile,
|
|
(CASE WHEN rog.express_status = 0 AND rog.is_closed=0 THEN '未发货'
|
|
WHEN rog.express_status = 1 AND rog.is_closed=0 THEN '已发货'
|
|
WHEN rog.express_status = 2 AND rog.is_closed=0 THEN '已确认收货'
|
|
WHEN rog.ass_type in (0, 1, 2) AND rog.is_closed=1 THEN '已关闭'
|
|
ELSE "未知"END) AS status,
|
|
ro.pay_time,
|
|
(CASE WHEN rog.ass_type = 0 AND rog.is_closed=0 THEN '无售后'
|
|
WHEN rog.ass_type = 1 AND rog.is_closed=0 THEN '仅退款'
|
|
WHEN rog.ass_type = 2 AND rog.is_closed=0 THEN '退货退款'
|
|
WHEN rog.ass_type = 3 AND rog.is_closed=1 THEN '补偿'
|
|
ELSE "未知"END) AS ass_type_str,
|
|
IF(rog.ass_type<>0,(SELECT id FROM recook_after_sales_goods AS aft WHERE rog.id=aft.order_goods_id ORDER BY id DESC LIMIT 1), 0)AS as_id,
|
|
ro.completed_at,
|
|
ro.buyer_message,
|
|
ro.pay_method,
|
|
ru.real_name,
|
|
ru.id_card AS card,
|
|
express.express_time AS et,
|
|
rog.delivery_time_out,
|
|
rog.order_filing
|
|
`).
|
|
Joins("JOIN recook_order_info AS ro ON ro.id = rog.order_id").
|
|
Joins("JOIN recook_goods_info AS rgi ON rgi.id = rog.goods_id").
|
|
Joins("JOIN recook_order_addr AS addr ON addr.order_id = rog.order_id").
|
|
Joins("JOIN recook_user_info AS ru ON ru.id = rog.user_id").
|
|
Joins("LEFT JOIN gys_goods_info AS ggi ON rgi.id = ggi.main_goods_id").
|
|
Joins("LEFT JOIN (SELECT order_goods_id, MIN(express_time) as express_time FROM recook_order_goods_express GROUP BY order_goods_id) AS express ON express.order_goods_id = rog.id").
|
|
Where("rog.pay_status = ?", manage.RecookOrderGoodsDetailPayStatusSuc)
|
|
query = query.Where("rog.shipping_method = ? AND is_split = 0", manage.RecookOrderGoodsDetailShippingMethodExpress)
|
|
{
|
|
// 供应商筛选
|
|
if where.IsSale {
|
|
query = query.Where("ro.order_type = 2")
|
|
} else {
|
|
query = query.Where("ro.order_type = 1")
|
|
}
|
|
if where.VendorId > 0 {
|
|
query = query.Where("rog.vendor_id = ?", where.VendorId)
|
|
}
|
|
// 订单商品id筛选
|
|
if where.OrderGoodsId > 0 {
|
|
query = query.Where("rog.id = ?", where.OrderGoodsId)
|
|
}
|
|
// 订单编号筛选
|
|
if where.OrderId > 0 {
|
|
query = query.Where("rog.order_id = ?", where.OrderId)
|
|
}
|
|
|
|
if where.BrandID > 0 {
|
|
query = query.Where("rog.brand_id = ?", where.BrandID)
|
|
}
|
|
// 订单状态
|
|
if where.OrderStatus != 0 {
|
|
switch where.OrderStatus {
|
|
case 1:
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusNone)
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 2:
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusTrue)
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 3:
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusConfirm)
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 4:
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedTrue)
|
|
assTypes := []int{manage.RecookOrderGoodsDetailAssTypeRefund, manage.RecookOrderGoodsDetailAssTypeRejected}
|
|
query = query.Where("rog.ass_type in (?)", assTypes)
|
|
}
|
|
}
|
|
// 商品id
|
|
if where.GoodsId != 0 {
|
|
query = query.Where("rog.goods_id = ?", where.GoodsId)
|
|
}
|
|
// 商品名称
|
|
if where.GoodsName != "" {
|
|
query = query.Where("rog.goods_name like ?", fmt.Sprintf("%s%%", where.GoodsName))
|
|
}
|
|
|
|
// 下单时间
|
|
if where.OrderTimeStart != "" && where.OrderTimeEnd != "" {
|
|
query = query.Where("rog.order_time between ? and ?",
|
|
where.OrderTimeStart+" 00:00:00", where.OrderTimeEnd+" 23:59:59")
|
|
}
|
|
|
|
// 售后类型
|
|
if where.RefundType != manage.RecookOrderGoodsDetailAssTypeNone {
|
|
if where.RefundType == 4 {
|
|
query = query.Where("rog.ass_type = ?", manage.RecookOrderGoodsDetailAssTypeNone)
|
|
} else {
|
|
query = query.Where("rog.ass_type = ?", where.RefundType)
|
|
}
|
|
}
|
|
|
|
// 快递单号
|
|
if where.ExpressNo != "" {
|
|
express := &manage.RecookOrderGoodsExpressModel{}
|
|
subQuery := express.GetDb().Select("order_goods_id").
|
|
Where("express_no = ? ", where.ExpressNo).
|
|
Table(express.TableName()).SubQuery()
|
|
query = query.Where("rog.id in (?)", subQuery)
|
|
}
|
|
|
|
// 商品条码
|
|
if where.SkuCode != "" {
|
|
query = query.Where("rog.sku_code like ?", fmt.Sprintf("%s%%", where.SkuCode))
|
|
}
|
|
|
|
switch where.TimeOut {
|
|
case 1:
|
|
query = query.Where("rog.delivery_time_out = 1")
|
|
case 2:
|
|
query = query.Where("rog.delivery_time_out <> 1")
|
|
}
|
|
|
|
switch where.OrderFiling {
|
|
case 1:
|
|
query = query.Where("rog.order_filing=1")
|
|
case 2:
|
|
query = query.Where("rog.order_filing=0")
|
|
}
|
|
|
|
// 标签
|
|
if where.LableStatus != 0 {
|
|
if where.LableStatus != 7 {
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
}
|
|
switch where.LableStatus {
|
|
case 1: // 代发货
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusNone)
|
|
query = query.Where("rog.ass_type = ?", manage.RecookOrderGoodsDetailAssTypeNone)
|
|
|
|
case 2: // 未发货退款
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusNone)
|
|
query = query.Where("rog.ass_type = ?", manage.RecookOrderGoodsDetailAssTypeRefund)
|
|
//case 3: // 超时未发货
|
|
// query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusNone)
|
|
// query = query.Where("rog.ass_type in (?)",
|
|
// []int{manage.RecookOrderGoodsDetailAssTypeNone})
|
|
// query = query.Where("ro.pay_time < ?",
|
|
// time.Now().Add(-1*time.Second*manage.ExpressTime).Format("2006-01-02 15:04:05"))
|
|
case 4: // 已发货
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusTrue)
|
|
query = query.Where("rog.ass_type = ?", manage.RecookOrderGoodsDetailAssTypeNone)
|
|
case 5: // 已发货退款
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusTrue)
|
|
query = query.Where("rog.ass_type in (?)",
|
|
[]int{manage.RecookOrderGoodsDetailAssTypeRejected, manage.RecookOrderGoodsDetailAssTypeCompensate})
|
|
case 6: // 已完成
|
|
query = query.Where("rog.express_status = ?", manage.RecookOrderGoodsDetailExpressStatusConfirm)
|
|
query = query.Where("rog.ass_type in (?)",
|
|
[]int{manage.RecookOrderGoodsDetailAssTypeNone, manage.RecookOrderGoodsDetailAssTypeCompensate})
|
|
case 7: // 已关闭
|
|
query = query.Where("rog.is_closed = ?", manage.RecookOrderGoodsDetailIsClosedTrue)
|
|
query = query.Where("rog.ass_type in (?)",
|
|
[]int{manage.RecookOrderGoodsDetailAssTypeRefund, manage.RecookOrderGoodsDetailAssTypeRejected})
|
|
}
|
|
}
|
|
|
|
// 一级类目
|
|
if where.FirstCategoryId != 0 {
|
|
query = query.Where("rgi.first_category_id = ?", where.FirstCategoryId)
|
|
}
|
|
|
|
// 二级类目
|
|
if where.SecondCategoryId != 0 {
|
|
query = query.Where("second_category_id = ?", where.SecondCategoryId)
|
|
}
|
|
|
|
// 支付方式
|
|
if where.PayMethod != 0 {
|
|
recookOrderInfoModel := &manage.RecookOrderInfoModel{}
|
|
payMethods := recookOrderInfoModel.GetPayMethods(where.PayMethod)
|
|
query = query.Where("ro.pay_method in (?)", payMethods)
|
|
}
|
|
// 完成时间
|
|
if where.CompletedTimeStart != "" && where.CompletedTimeEnd != "" {
|
|
query = query.Where("ro.completed_at between ? and ?",
|
|
where.CompletedTimeStart+" 00:00:00", where.CompletedTimeEnd+" 23:59:59")
|
|
}
|
|
|
|
// 收货人姓名
|
|
if where.ReceiverName != "" {
|
|
query = query.Where("addr.receiver_name like ?", fmt.Sprintf("%%%s%%", where.ReceiverName))
|
|
}
|
|
|
|
// 收货人手机号
|
|
if where.Mobile != "" {
|
|
query = query.Where("addr.mobile like ?", fmt.Sprintf("%%%s%%", where.Mobile))
|
|
}
|
|
//供应商新品编号
|
|
if where.GoodsSn != "" {
|
|
query = query.Where("ggi.goods_sn like ?", fmt.Sprintf("%%%s%%", where.GoodsSn))
|
|
}
|
|
}
|
|
if err := query.Find(&list).Error; err != nil {
|
|
e = err
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// @Style 获取数据
|
|
func (o *orderLogic) Data(where Where, page *bean.Page) (list []ListItem, total int) {
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
query := "is_split=0"
|
|
queryArgs := []interface{}{}
|
|
if !where.IsSale {
|
|
query = "pay_status = ? and orderGoodsDetail.shipping_method = ? and is_split = 0"
|
|
queryArgs = []interface{}{manage.RecookOrderGoodsDetailPayStatusSuc, manage.RecookOrderGoodsDetailShippingMethodExpress}
|
|
}
|
|
// 供应商筛选
|
|
if where.IsSale {
|
|
query += " and order_type = 2"
|
|
} else {
|
|
query += " and order_type = 1"
|
|
}
|
|
if where.VendorId > 0 {
|
|
query += " and orderGoodsDetail.vendor_id = ?"
|
|
queryArgs = append(queryArgs, where.VendorId)
|
|
}
|
|
// 订单商品id筛选
|
|
if where.OrderGoodsId > 0 {
|
|
query += " and orderGoodsDetail.id = ?"
|
|
queryArgs = append(queryArgs, where.OrderGoodsId)
|
|
}
|
|
|
|
if where.BrandID > 0 {
|
|
query += " and orderGoodsDetail.brand_id = ?"
|
|
queryArgs = append(queryArgs, where.BrandID)
|
|
}
|
|
// 订单编号筛选
|
|
if where.OrderId > 0 {
|
|
query += " and orderGoodsDetail.order_id = ?"
|
|
queryArgs = append(queryArgs, where.OrderId)
|
|
}
|
|
// 订单状态
|
|
if where.OrderStatus != 0 {
|
|
switch where.OrderStatus {
|
|
case 1:
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusNone, manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 2:
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusTrue, manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 3:
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusConfirm, manage.RecookOrderGoodsDetailIsClosedFalse)
|
|
case 4:
|
|
query += " and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type in (?)"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailIsClosedTrue, []int{manage.RecookOrderGoodsDetailAssTypeRefund, manage.RecookOrderGoodsDetailAssTypeRejected})
|
|
case 10:
|
|
// 待处理
|
|
if where.IsSale {
|
|
query += " and orderInfo.status=0 and orderInfo.can_pay=0"
|
|
}
|
|
}
|
|
|
|
}
|
|
// 商品id
|
|
if where.GoodsId != 0 {
|
|
query += " and orderGoodsDetail.goods_id = ?"
|
|
queryArgs = append(queryArgs, where.GoodsId)
|
|
}
|
|
// 商品名称
|
|
if where.GoodsName != "" {
|
|
query += " and orderGoodsDetail.goods_name like ?"
|
|
queryArgs = append(queryArgs, fmt.Sprintf("%%%s%%", where.GoodsName))
|
|
}
|
|
// 一级类目
|
|
if where.FirstCategoryId != 0 {
|
|
query += " and goodsInfo.first_category_id = ?"
|
|
queryArgs = append(queryArgs, where.FirstCategoryId)
|
|
}
|
|
// 二级类目
|
|
if where.SecondCategoryId != 0 {
|
|
query += " and goodsInfo.second_category_id = ?"
|
|
queryArgs = append(queryArgs, where.SecondCategoryId)
|
|
}
|
|
// 下单时间
|
|
if where.OrderTimeStart != "" && where.OrderTimeEnd != "" {
|
|
query += " and orderGoodsDetail.order_time between ? and ?"
|
|
queryArgs = append(queryArgs, where.OrderTimeStart+" 00:00:00", where.OrderTimeEnd+" 23:59:59")
|
|
}
|
|
// 支付方式
|
|
recookOrderInfoModel := &manage.RecookOrderInfoModel{}
|
|
if where.PayMethod != 0 {
|
|
payMethods := recookOrderInfoModel.GetPayMethods(where.PayMethod)
|
|
query += " and orderInfo.pay_method in (?)"
|
|
queryArgs = append(queryArgs, payMethods)
|
|
}
|
|
// 售后类型
|
|
if where.RefundType != manage.RecookOrderGoodsDetailAssTypeNone {
|
|
if where.RefundType == 4 {
|
|
query += " and orderGoodsDetail.ass_type = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailAssTypeNone)
|
|
} else {
|
|
query += " and orderGoodsDetail.ass_type = ?"
|
|
queryArgs = append(queryArgs, where.RefundType)
|
|
}
|
|
}
|
|
// 完成时间
|
|
if where.CompletedTimeStart != "" && where.CompletedTimeEnd != "" {
|
|
query += " and orderInfo.completed_at between ? and ?"
|
|
queryArgs = append(queryArgs, where.CompletedTimeStart+" 00:00:00", where.CompletedTimeEnd+" 23:59:59")
|
|
}
|
|
// 收货人姓名
|
|
if where.ReceiverName != "" {
|
|
query += " and orderAddr.receiver_name like ?"
|
|
queryArgs = append(queryArgs, fmt.Sprintf("%%%s%%", where.ReceiverName))
|
|
}
|
|
// 收货人手机号
|
|
if where.Mobile != "" {
|
|
query += " and orderAddr.mobile like ?"
|
|
queryArgs = append(queryArgs, fmt.Sprintf("%%%s%%", where.Mobile))
|
|
}
|
|
// 快递单号
|
|
if where.ExpressNo != "" {
|
|
recookOrderGoodsExpressModel := &manage.RecookOrderGoodsExpressModel{}
|
|
subQuery := recookOrderGoodsExpressModel.GetDb().Select("order_goods_id").Where("express_no = ? ", where.ExpressNo).Table(recookOrderGoodsExpressModel.TableName()).SubQuery()
|
|
query += " and orderGoodsDetail.id in ?"
|
|
queryArgs = append(queryArgs, subQuery)
|
|
}
|
|
// 供应商新品编号
|
|
if where.GoodsSn != "" {
|
|
query += " and gysGoodsInfo.goods_sn like ?"
|
|
queryArgs = append(queryArgs, fmt.Sprintf("%%%s%%", where.GoodsSn))
|
|
}
|
|
// 商品条码
|
|
if where.SkuCode != "" {
|
|
query += " and orderGoodsDetail.sku_code like ?"
|
|
queryArgs = append(queryArgs, fmt.Sprintf("%%%s%%", where.SkuCode))
|
|
}
|
|
|
|
switch where.TimeOut {
|
|
case 1:
|
|
query += " and orderGoodsDetail.delivery_time_out = 1"
|
|
case 2:
|
|
query += " and orderGoodsDetail.delivery_time_out <> 1"
|
|
}
|
|
switch where.OrderFiling {
|
|
case 1:
|
|
query += " and orderGoodsDetail.order_filing = 1"
|
|
case 2:
|
|
query += " and orderGoodsDetail.order_filing = 0"
|
|
}
|
|
|
|
if where.LableStatus != 0 {
|
|
switch where.LableStatus {
|
|
case 1: // 代发货
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusNone, manage.RecookOrderGoodsDetailIsClosedFalse, manage.RecookOrderGoodsDetailAssTypeNone)
|
|
case 2: // 未发货退款
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusNone, manage.RecookOrderGoodsDetailIsClosedFalse, manage.RecookOrderGoodsDetailAssTypeRefund)
|
|
//case 3: // 超时未发货
|
|
// query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type in (?) and orderInfo.pay_time < ?"
|
|
// queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusNone, manage.RecookOrderGoodsDetailIsClosedFalse, []int{manage.RecookOrderGoodsDetailAssTypeNone}, time.Now().Add(-1*time.Second*manage.ExpressTime).Format("2006-01-02 15:04:05"))
|
|
case 4: // 已发货
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type = ?"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusTrue, manage.RecookOrderGoodsDetailIsClosedFalse, manage.RecookOrderGoodsDetailAssTypeNone)
|
|
case 5: // 已发货退款
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type in (?)"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusTrue, manage.RecookOrderGoodsDetailIsClosedFalse, []int{manage.RecookOrderGoodsDetailAssTypeRejected, manage.RecookOrderGoodsDetailAssTypeCompensate})
|
|
case 6: // 已完成
|
|
query += " and orderGoodsDetail.express_status = ? and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type in (?)"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailExpressStatusConfirm, manage.RecookOrderGoodsDetailIsClosedFalse, []int{manage.RecookOrderGoodsDetailAssTypeNone, manage.RecookOrderGoodsDetailAssTypeCompensate})
|
|
case 7: // 已关闭
|
|
query += " and orderGoodsDetail.is_closed = ? and orderGoodsDetail.ass_type in (?)"
|
|
queryArgs = append(queryArgs, manage.RecookOrderGoodsDetailIsClosedTrue, []int{manage.RecookOrderGoodsDetailAssTypeRefund, manage.RecookOrderGoodsDetailAssTypeRejected})
|
|
case 10:
|
|
// 待处理
|
|
if where.IsSale {
|
|
query += " and orderInfo.status=0 and orderInfo.can_pay=0"
|
|
}
|
|
}
|
|
}
|
|
recookOrderAddrModel := &manage.RecookOrderAddrModel{}
|
|
recookGoodsInfoModel := &goods.RecookGoodsInfoModel{}
|
|
gysGoodsInfoModel := &goods2.GysGoodsInfoModel{}
|
|
start := 0
|
|
if page != nil {
|
|
recookOrderGoodsDetailModel.GetDb().Table(recookOrderGoodsDetailModel.TableName()+" as orderGoodsDetail").
|
|
Joins(fmt.Sprintf("left join %s as orderInfo on orderGoodsDetail.order_id = orderInfo.id", recookOrderInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as orderAddr on orderGoodsDetail.order_id = orderAddr.order_id", recookOrderAddrModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as goodsInfo on orderGoodsDetail.goods_id = goodsInfo.id", recookGoodsInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as gysGoodsInfo on goodsInfo.id = gysGoodsInfo.main_goods_id", gysGoodsInfoModel.TableName())).
|
|
Where(query, queryArgs...).
|
|
Count(&total)
|
|
start = page.GetStart()
|
|
}
|
|
if total > start || page == nil {
|
|
var orderGoodsDetails []ListStruct
|
|
if page == nil {
|
|
recookOrderGoodsDetailModel.GetDb().Table(recookOrderGoodsDetailModel.TableName()+" as orderGoodsDetail").
|
|
Select([]string{
|
|
"orderGoodsDetail.*",
|
|
"orderAddr.province,orderAddr.city,orderAddr.district,orderAddr.address,orderAddr.receiver_name,orderAddr.mobile",
|
|
"orderInfo.pay_method,orderInfo.pay_time,orderInfo.can_pay",
|
|
"gysGoodsInfo.goods_sn",
|
|
"enter.enterprise_name as enter_prise_name",
|
|
}).
|
|
Joins(fmt.Sprintf("left join %s as orderInfo on orderGoodsDetail.order_id = orderInfo.id", recookOrderInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as orderAddr on orderGoodsDetail.order_id = orderAddr.order_id", recookOrderAddrModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as goodsInfo on orderGoodsDetail.goods_id = goodsInfo.id", recookGoodsInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as gysGoodsInfo on goodsInfo.id = gysGoodsInfo.main_goods_id", gysGoodsInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as enter on orderGoodsDetail.vendor_id = enter.user_id", (&enterprise.GysEnterpriseStateModel{}).TableName())).
|
|
Where(query, queryArgs...).
|
|
Order("orderGoodsDetail.created_at DESC").
|
|
Find(&orderGoodsDetails)
|
|
} else {
|
|
recookOrderGoodsDetailModel.GetDb().Table(recookOrderGoodsDetailModel.TableName()+" as orderGoodsDetail").
|
|
Select([]string{
|
|
"orderGoodsDetail.*",
|
|
"orderAddr.province,orderAddr.city,orderAddr.district,orderAddr.address,orderAddr.receiver_name,orderAddr.mobile",
|
|
"orderInfo.pay_method,orderInfo.pay_time,orderInfo.can_pay",
|
|
"gysGoodsInfo.goods_sn",
|
|
"enter.enterprise_name as enter_prise_name",
|
|
}).
|
|
Joins(fmt.Sprintf("left join %s as orderInfo on orderGoodsDetail.order_id = orderInfo.id", recookOrderInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as orderAddr on orderGoodsDetail.order_id = orderAddr.order_id", recookOrderAddrModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as goodsInfo on orderGoodsDetail.goods_id = goodsInfo.id", recookGoodsInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as gysGoodsInfo on goodsInfo.id = gysGoodsInfo.main_goods_id", gysGoodsInfoModel.TableName())).
|
|
Joins(fmt.Sprintf("left join %s as enter on orderGoodsDetail.vendor_id = enter.user_id", (&enterprise.GysEnterpriseStateModel{}).TableName())).
|
|
Offset(start).
|
|
Limit(page.GetLimit()).
|
|
Where(query, queryArgs...).
|
|
Order("orderGoodsDetail.created_at DESC").
|
|
Find(&orderGoodsDetails)
|
|
}
|
|
for _, detail := range orderGoodsDetails {
|
|
recookOrderInfoModel.PayMethod = detail.PayMethod
|
|
list = append(list, ListItem{
|
|
Id: detail.Id,
|
|
OrderId: detail.OrderId,
|
|
GoodsName: detail.GoodsName,
|
|
MainPhotoURL: detail.MainPhotoURL,
|
|
OrderTime: detail.OrderTime.Time.Unix(),
|
|
SkuName: detail.SkuName,
|
|
Quantity: detail.Quantity,
|
|
Province: detail.Province,
|
|
City: detail.City,
|
|
District: detail.District,
|
|
Address: detail.Address,
|
|
ReceiverName: detail.ReceiverName,
|
|
Mobile: detail.Mobile,
|
|
PayMethod: detail.PayMethod,
|
|
PayMethodName: recookOrderInfoModel.GetPayMethodTypeName(),
|
|
PurchasePrice: detail.PurchasePrice,
|
|
ExpressFee: detail.ExpressFee,
|
|
PayTime: detail.PayTime.Time.Unix(),
|
|
CouponAmount: detail.BrandCouponAmount.Add(detail.UniverseCouponAmount), // 优惠卷
|
|
ExpressStatus: detail.ExpressStatus,
|
|
AssType: detail.AssType,
|
|
RefundStatus: detail.RefundStatus,
|
|
IsClosed: detail.IsClosed,
|
|
BuyerMessage: detail.BuyerMessage,
|
|
StoreMessage: detail.StoreMessage,
|
|
SkuCode: detail.SkuCode,
|
|
BrandName: detail.BrandName,
|
|
VendorName: detail.EnterPriseName,
|
|
UnitPrice: detail.UnitPrice,
|
|
AssName: detail.GetAssName(),
|
|
RefundName: detail.GetRefundName(),
|
|
ExpressName: recookOrderInfoModel.GetExpressName(detail.ExpressStatus),
|
|
ActualAmount: detail.ActualAmount,
|
|
CoinAmount: detail.CoinAmount,
|
|
GoodsSn: detail.GoodsSn,
|
|
StoreHouse: detail.Storehouse,
|
|
TimeOut: detail.DeliveryTimeOut,
|
|
OrderFiling: detail.OrderFiling,
|
|
MakeUpStatus: detail.MakeUpStatus,
|
|
CanPay: detail.CanPay,
|
|
})
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
type GoodsDetail struct {
|
|
Id uint `json:"id"`
|
|
OrderId uint `json:"orderId"`
|
|
PayMethod uint `json:"payMethod"`
|
|
PayTime int64 `json:"payTime"`
|
|
ExpressTime int64 `json:"expressTime"`
|
|
OrderAddr OrderAddr `json:"orderAddr"`
|
|
GoodsInfo GoodsInfo `json:"goodsInfo"`
|
|
CompletedAt int64 `json:"completedAt"`
|
|
BuyerMessage string `json:"buyerMessage"`
|
|
ExpressStatus uint `json:"expressStatus"`
|
|
AssType uint `json:"assType"`
|
|
RefundStatus uint `json:"refundStatus"`
|
|
IsClosed int `json:"isClosed"`
|
|
OrderTime int64 `json:"orderTime"`
|
|
Exclude []string `json:"exclude"`
|
|
MakeUpStatus uint `json:"make_up_status"`
|
|
}
|
|
|
|
type GoodsInfo struct {
|
|
GoodsId uint `json:"goodsId"`
|
|
GoodsName string `json:"goodsName"`
|
|
SkuName string `json:"skuName"`
|
|
PurchasePrice decimal.Decimal `json:"purchasePrice"`
|
|
Quantity uint `json:"quantity"`
|
|
CouponAmount decimal.Decimal `json:"couponAmount"`
|
|
ExpressFee decimal.Decimal `json:"expressFee"`
|
|
MainPhotoURL string `json:"mainPhotoUrl"`
|
|
UnitPrice decimal.Decimal `json:"unitPrice"`
|
|
ActualAmount decimal.Decimal `json:"actualAmount"`
|
|
CoinAmount decimal.Decimal `json:"coinAmount"`
|
|
TotalCommission decimal.Decimal `json:"totalCommission"`
|
|
SkuCode string `json:"skuCode"`
|
|
SettlementAmount decimal.Decimal `json:"settlementAmount"`
|
|
GoodsAmount decimal.Decimal `json:"goodsAmount"`
|
|
TotalAmount decimal.Decimal `json:"totalAmount"`
|
|
}
|
|
|
|
// @Style 详情
|
|
func (o *orderLogic) Info(orderGoodsId uint, user *manage2.RecookManageUserInfoModel, vendorId ...uint) (result GoodsDetail) {
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
goodsDetail := recookOrderGoodsDetailModel.FindById(orderGoodsId)
|
|
// 供应商id筛选
|
|
if len(vendorId) > 0 {
|
|
if goodsDetail.VendorId != vendorId[0] {
|
|
return
|
|
}
|
|
}
|
|
|
|
recookOrderInfoModel := &manage.RecookOrderInfoModel{}
|
|
orderInfo := recookOrderInfoModel.FindById(goodsDetail.OrderId)
|
|
|
|
recookOrderAddrModel := &manage.RecookOrderAddrModel{}
|
|
orderAddr := recookOrderAddrModel.FindByOrderId(goodsDetail.OrderId)
|
|
|
|
var exclude []string
|
|
if user != nil {
|
|
|
|
temp := (&manage2.RecookExportDisplayRoleMenuModel{}).FindByRoleID(user.NewroleId)
|
|
exclude = (&manage2.RecookExportDisplayMenuModel{}).FindExportByIDs(temp)
|
|
}
|
|
|
|
settledAmount := goodsDetail.PurchasePrice.Mul(decimal.NewFromInt(int64(goodsDetail.Quantity))).Truncate(2)
|
|
totalAmount := settledAmount.Add(goodsDetail.ExpressFee)
|
|
result = GoodsDetail{
|
|
Id: goodsDetail.Id,
|
|
OrderId: goodsDetail.OrderId,
|
|
PayMethod: orderInfo.PayMethod,
|
|
PayTime: orderInfo.PayTime.Time.Unix(),
|
|
ExpressTime: goodsDetail.ExpressTime.Time.Unix(),
|
|
CompletedAt: orderInfo.CompletedAt.Time.Unix(),
|
|
OrderTime: goodsDetail.OrderTime.Time.Unix(),
|
|
BuyerMessage: orderInfo.BuyerMessage,
|
|
ExpressStatus: goodsDetail.ExpressStatus,
|
|
AssType: goodsDetail.AssType,
|
|
RefundStatus: goodsDetail.RefundStatus,
|
|
IsClosed: goodsDetail.IsClosed,
|
|
OrderAddr: OrderAddr{
|
|
Province: orderAddr.Province,
|
|
City: orderAddr.City,
|
|
District: orderAddr.District,
|
|
Address: orderAddr.Address,
|
|
ReceiverName: orderAddr.ReceiverName,
|
|
Mobile: orderAddr.Mobile,
|
|
},
|
|
GoodsInfo: GoodsInfo{
|
|
GoodsId: goodsDetail.GoodsId,
|
|
GoodsName: goodsDetail.GoodsName,
|
|
SkuName: goodsDetail.SkuName,
|
|
PurchasePrice: goodsDetail.PurchasePrice,
|
|
Quantity: goodsDetail.Quantity,
|
|
CouponAmount: goodsDetail.BrandCouponAmount.Add(goodsDetail.UniverseCouponAmount), // 优惠卷
|
|
ExpressFee: goodsDetail.ExpressFee,
|
|
MainPhotoURL: goodsDetail.MainPhotoURL,
|
|
UnitPrice: goodsDetail.UnitPrice,
|
|
ActualAmount: goodsDetail.ActualAmount,
|
|
CoinAmount: goodsDetail.CoinAmount,
|
|
TotalCommission: goodsDetail.TotalCommission,
|
|
SkuCode: goodsDetail.SkuCode,
|
|
SettlementAmount: settledAmount,
|
|
GoodsAmount: goodsDetail.GoodsAmount,
|
|
TotalAmount: totalAmount,
|
|
},
|
|
Exclude: exclude,
|
|
MakeUpStatus: goodsDetail.MakeUpStatus,
|
|
}
|
|
return
|
|
}
|
|
|
|
type OrderGoodsDetailItem struct {
|
|
Id uint `json:"id"`
|
|
OrderId uint `json:"orderId"`
|
|
Type uint `json:"type"`
|
|
TypeName string `json:"typeName"`
|
|
Content string `json:"content"`
|
|
CreatedAt int64 `json:"createdAt"`
|
|
User string `json:"user"`
|
|
}
|
|
|
|
// @Style 订单商品日志列表
|
|
func (o *orderLogic) LogsList(vendorId, orderGoodsId uint, page bean.Page) (list []OrderGoodsDetailItem, total int) {
|
|
recookOrderGoodsDetailModel := &manage.RecookOrderGoodsDetailModel{}
|
|
goodsDetail := recookOrderGoodsDetailModel.FindById(orderGoodsId)
|
|
if vendorId > 0 {
|
|
if goodsDetail.VendorId != vendorId {
|
|
return
|
|
}
|
|
}
|
|
list = []OrderGoodsDetailItem{}
|
|
recookOrderGoodsDetailLogsModel := &manage.RecookOrderGoodsDetailLogsModel{}
|
|
total = recookOrderGoodsDetailLogsModel.ListCount("order_id = ?", orderGoodsId)
|
|
start := page.GetStart()
|
|
if total > start {
|
|
lists := recookOrderGoodsDetailLogsModel.List(start, page.GetLimit(), "id desc", "order_id = ?", orderGoodsId)
|
|
for _, item := range lists {
|
|
list = append(list, OrderGoodsDetailItem{
|
|
Id: item.Id,
|
|
OrderId: item.OrderId,
|
|
Type: item.Type,
|
|
TypeName: item.GetTypeName(),
|
|
Content: item.Content,
|
|
CreatedAt: item.CreatedAt.Time.Unix(),
|
|
User: item.User,
|
|
})
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// @Style 商家日志
|
|
func (o *orderLogic) Logs(orderId, actionType uint, user, content string, tx ...*gorm.DB) error {
|
|
recookOrderGoodsDetailLogsModel := &manage.RecookOrderGoodsDetailLogsModel{
|
|
OrderId: orderId,
|
|
Type: actionType,
|
|
Content: content,
|
|
User: user,
|
|
}
|
|
if len(tx) > 0 {
|
|
recookOrderGoodsDetailLogsModel.SetDb(tx[0])
|
|
}
|
|
recookOrderGoodsDetailLogsModel.Create(recookOrderGoodsDetailLogsModel)
|
|
if recookOrderGoodsDetailLogsModel.Id == 0 {
|
|
return errors.New("网络异常")
|
|
}
|
|
return nil
|
|
}
|