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.

257 lines
15 KiB

4 years ago
package manage
import (
"recook/internal/define"
"recook/internal/model/order"
4 years ago
"recook/internal/model/user"
"recook/internal/v2/lib/db"
"recook/internal/v2/model/gys/enterprise"
"recook/internal/v2/model/recook/after"
"recook/internal/v2/model/recook/goods"
"strconv"
4 years ago
"github.com/golangkit/formatime"
"github.com/shopspring/decimal"
4 years ago
)
const (
RecookOrderGoodsDetailPayStatusNone = 0 // 未支付
RecookOrderGoodsDetailPayStatusSuc = 1 // 支付成功
RecookOrderGoodsDetailExpressStatusNone = 0 // 未发货
RecookOrderGoodsDetailExpressStatusTrue = 1 // 已发货
RecookOrderGoodsDetailExpressStatusConfirm = 2 // 已确认收获
RecookOrderGoodsDetailIsClosedFalse = 0 // 未关闭
RecookOrderGoodsDetailIsClosedTrue = 1 // 已关闭
RecookOrderGoodsDetailShippingMethodExpress = 0 // 快递
RecookOrderGoodsDetailShippingMethodSelfRaising = 1 // 自提
RecookOrderGoodsDetailAssTypeNone = 0 // 无售后
RecookOrderGoodsDetailAssTypeRefund = 1 // 退款
RecookOrderGoodsDetailAssTypeRejected = 2 // 退货退款
RecookOrderGoodsDetailAssTypeCompensate = 3 // 订单补偿
RecookOrderGoodsDetailRefundStatusNone = 0 // 无退款
RecookOrderGoodsDetailRefundStatusIng = 1 // 退款中
RecookOrderGoodsDetailRefundStatusSuc = 2 // 退货成功
ExpressTime = 172800 // 超时未发货时间
)
type RecookOrderGoodsDetailModel struct {
db.BaseModel
Id uint `gorm:"column:id;primary_key" json:"goodsDetailId"`
OrderId uint `gorm:"column:order_id;" json:"orderId"`
UserCoinHistory user.RecookUserCoinHistory `gorm:"ForeignKey:OrderId;References:OrderId"`
OrderInfo RecookOrderInfoModel `gorm:"foreignKey:OrderId"`
ExpressInfo RecookOrderGoodsExpressModel `gorm:"ForeignKey:OrderGoodsId"`
After after.RecookAfterSalesGoodsModel `gorm:"ForeignKey:OrderId;References:OrderId"`
AncestorId uint `gorm:"column:ancestor_id" json:"-"`
ParentId uint `gorm:"column:parent_id" json:"parentId"`
SharerId uint `gorm:"column:sharer_id" json:"sharerId"`
LiveId uint `gorm:"column:live_id" json:"liveId"`
UserId uint `gorm:"column:user_id" json:"userId"`
VendorId uint `gorm:"column:vendor_id" json:"vendorId"` // 供应商Id: 0表示自营
EnterpriseState enterprise.GysEnterpriseStateModel `gorm:"ForeignKey:VendorId;References:UserId"` //供应商关联source表
VendorName string `gorm:"column:vendor_name" json:"vendorName"`
BrandId uint `gorm:"column:brand_id" json:"brandId"` // 品牌
BrandName string `gorm:"column:brand_name" json:"brandName"` // 品牌名称
CategoryName string `gorm:"column:category_name" json:"cateName"`
GoodsId uint `gorm:"column:goods_id" json:"goodsId"` // 商品Id
GoodsName string `gorm:"column:goods_name" json:"goodsName"` // 商品名快照
IsJoinTeamPerformance uint `gorm:"column:is_join_team_performance" json:"-"` // 是否参与团队业绩计算
Hash string `gorm:"column:hash" json:"-"` // 商品哈希值如果商品信息更新了
SkuId uint `gorm:"column:sku_id" json:"skuId"` // 商品sku_id
Sku goods.RecookGoodsSkuModel `gorm:"foreignKey:SkuId"`
SkuName string `gorm:"column:sku_name" json:"skuName"` // SKU名字组合起来
SkuCode string `gorm:"column:sku_code" json:"skuCode"` // 条形码或者编码
MainPhotoURL string `gorm:"column:main_photo_url" json:"mainPhotoUrl"` // 主图快照 先读sku 没有则读取主图
Quantity uint `gorm:"column:quantity" json:"quantity"` // 商品数量
FreightId uint `gorm:"column:freight_id" json:"-"` // 运费模板
Weight decimal.Decimal `gorm:"column:weight" json:"-"` // 重量
PromotionGoodsId uint `gorm:"column:promotion_goods_id" json:"-"`
PromotionSkuId uint `gorm:"column:promotion_sku_id" json:"-"` //
PromotionName string `gorm:"column:promotion_name" json:"promotionName"` // 活动名称
PromotionStartTime formatime.Second `gorm:"column:promotion_start_time" json:"-"`
PromotionEndTime formatime.Second `gorm:"column:promotion_end_time" json:"-"`
UnitPrice decimal.Decimal `gorm:"column:unit_price" json:"unitPrice"` // 单价
PurchasePrice decimal.Decimal `gorm:"column:purchase_price" json:"purchasePrice"` // 采购价
TotalCommission decimal.Decimal `gorm:"column:total_commission" json:"totalCommission"` // 提成总额
BrandCouponAmount decimal.Decimal `gorm:"column:brand_coupon_amount" json:"brandCouponAmount"` // 品牌优惠券抵扣金额
UniverseCouponAmount decimal.Decimal `gorm:"column:universe_coupon_amount" json:"universeBrandCouponAmount"` // 购物券抵扣金额
CoinAmount decimal.Decimal `gorm:"column:coin_amount" json:"coinAmount"` // 瑞币抵扣金额
GoodsAmount decimal.Decimal `gorm:"column:goods_amount" json:"goodsAmount"` // 商品总金额 单价x数量不含其他费用减除
ExpressFee decimal.Decimal `gorm:"column:express_fee" json:"expressFee"` // 快递费
ActualAmount decimal.Decimal `gorm:"column:actual_amount" json:"actualAmount"` // 实际支付的金额
StoreId uint `gorm:"column:store_id" json:"-"` // 门店id
BuyerMessage string `gorm:"column:buyer_message" json:"buyerMessage"` // 买家留言
StoreMessage string `gorm:"column:store_message" json:"storeMessage"` // 商家留言
OrderTime formatime.Second `gorm:"column:order_time" json:"orderTime"`
PayStatus uint `gorm:"column:pay_status" json:"payStatus"`
CreatedAt formatime.Second `gorm:"column:created_at" json:"createdAt"` // 创建时间
ExpressStatus uint `gorm:"column:express_status" json:"expressStatus"`
ExpressTime formatime.Second `gorm:"column:express_time" json:"expressTime"`
ExpressCompName string `gorm:"column:express_comp_name" json:"expressCompName"`
ExpressCompCode string `gorm:"column:express_comp_code" json:"expressCompCode"`
ExpressNo string `gorm:"column:express_no" json:"expressNo"`
AssType uint `gorm:"column:ass_type" json:"assType"`
RefundStatus uint `gorm:"column:refund_status" json:"refundStatus"`
Status uint `gorm:"column:status" json:"status"`
ShippingMethod int `gorm:"shipping_method" json:"shippingMethod"`
IsClosed int `gorm:"is_closed" json:"isClosed"`
RStatus string `gorm:"-" json:"rStatus"`
DetailInfo string `json:"detailInfo"`
Bill int `gorm:"bill" json:"bill"` //是否开发票0代表未开1处理中2已成功3失败
Fpqqlsh string `gorm:"fpqqlsh" json:"fpqqlsh"` //流水号
IsExport int `gorm:"is_export" json:"isExport"` //舶茂的是否导出
BomaoNo string `gorm:"bomao_no" json:"bomaoNo"` //舶茂的订单编号
EvaluatedId int `gorm:"evaluated_id" json:"evaluatedId"` //评价id
ReportMsg string `gorm:"report_msg" json:"reportMsg"`
Report int `gorm:"report" json:"report"`
IsImport int `gorm:"column:is_import" json:"isImport"` //是否进口商品
Storehouse int `gorm:"column:storehouse" json:"storehouse"` //进口商品仓库
IsFerme int `gorm:"column:is_ferme" json:"isFerme"` //是否包税
DeliveryTimeOut int `gorm:"column:delivery_time_out" json:"delivery_time_out"` //发货超时
OrderFiling uint `gorm:"column:order_filing" json:"order_filing"` //订单掩饰报备
ActivityStatus uint `gorm:"column:activity_status" json:"activity_status"`
ActivityId uint `gorm:"column:activity_id" json:"activity_id"` //活动id
3 years ago
MakeUpStatus uint `json:"make_up_status"`
3 years ago
ExtraPrice decimal.Decimal `json:"-"`
4 years ago
}
// TableName sets the insert table name for this struct type
func (r *RecookOrderGoodsDetailModel) TableName() string {
return "recook_order_goods_detail"
}
func (r *RecookOrderGoodsDetailModel) GetSelfProfit(level int) decimal.Decimal {
base := r.GetBase()
switch level {
case 0:
return decimal.Zero
case 1:
self := base.Mul(order.Self.GetProfit()).Round(2)
brand := base.Mul(order.Brand.GetProfit()).Round(2)
return self.Add(brand)
case 2:
// 店铺买
self := base.Mul(order.Self.GetProfit()).Round(2)
brand := base.Mul(order.Brand.GetProfit()).Round(2)
shop := base.Mul(order.Shop.GetProfit()).Round(2)
return self.Add(brand).Add(shop)
case 10:
// 子公司 100%自购
return base.Mul(order.All.GetProfit())
default:
return decimal.Zero
}
}
4 years ago
func (r *RecookOrderGoodsDetailModel) GetBase() decimal.Decimal {
cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03))
3 years ago
if !r.ExtraPrice.IsZero() {
cost = r.PurchasePrice.Add(r.ExtraPrice)
}
base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(define.Coefficient))
4 years ago
return base.Round(2)
}
4 years ago
// @Style 添加
func (r *RecookOrderGoodsDetailModel) Create(data *RecookOrderGoodsDetailModel) {
r.GetDb().Create(data)
}
// @Style 获取列表数量
func (r *RecookOrderGoodsDetailModel) List(start, limit int, order string, query interface{}, args ...interface{}) (result []RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Offset(start).Limit(limit).Where(query, args...).Order(order).Find(&result)
return
}
// @Style 获取列表数量
func (r *RecookOrderGoodsDetailModel) ListCount(query interface{}, args ...interface{}) (count int) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where(query, args...).Count(&count)
return
}
// @Style 编辑
func (r *RecookOrderGoodsDetailModel) UpdateById(orderGoodsId, userId uint, date *RecookOrderGoodsDetailModel) error {
return r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("id = ? and vendor_id = ?", orderGoodsId, userId).Update(date).Error
}
// @Style 编辑
func (r *RecookOrderGoodsDetailModel) FindById(orderGoodsId uint) (result RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("id = ?", orderGoodsId).First(&result)
return
}
// @Style 根据orderId获取数据
func (r *RecookOrderGoodsDetailModel) FindByOrderId(orderId uint) (result []RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("order_id = ?", orderId).Preload("After").Find(&result)
return
}
// @Style 根据orderIds获取数据
func (r *RecookOrderGoodsDetailModel) FindByOrderIds(orderIds []uint) (result []RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("order_id in (?)", orderIds).Find(&result)
return
}
// @Style 获取售后类型
func (r *RecookOrderGoodsDetailModel) GetAssName() string {
switch r.AssType {
case RecookOrderGoodsDetailAssTypeNone:
return "正常"
case RecookOrderGoodsDetailAssTypeRefund:
return "未发货退款"
case RecookOrderGoodsDetailAssTypeRejected:
return "退货退款"
case RecookOrderGoodsDetailAssTypeCompensate:
return "订单补偿"
}
return ""
}
// @Style 获取退款名称
func (r *RecookOrderGoodsDetailModel) GetRefundName() string {
switch r.RefundStatus {
case RecookOrderGoodsDetailRefundStatusNone:
return "无退款"
case RecookOrderGoodsDetailRefundStatusIng:
return "退款中"
case RecookOrderGoodsDetailRefundStatusSuc:
return "退货成功"
}
return ""
}
// GetSoID 获取线上订单号.
func (r *RecookOrderGoodsDetailModel) GetSoID() string {
return strconv.Itoa(int(r.Id))
}
//获取已发货的订单信息
func (r *RecookOrderGoodsDetailModel) GetOrderByGysId(vendorId uint) (rest []RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsExpressModel{}).Where("vendor_id= ? and express_status=1 and shipping_method=0", vendorId).Find(&rest)
return
}
//set express_status=1where order_id=
func (r *RecookOrderGoodsDetailModel) UpdateExpressStatus(orderId uint64) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("order_id= ?", orderId).Update("express_status", 1)
}
func (r *RecookOrderGoodsDetailModel) FindByIdAndOrderId(orderGoodsId uint, orderId uint) (result RecookOrderGoodsDetailModel) {
r.GetDb().Model(&RecookOrderGoodsDetailModel{}).Where("id = ? and order_id= ?", orderGoodsId, orderId).First(&result)
return
}
// 判断商品是否销售完成
func (r *RecookOrderGoodsDetailModel) IsFinished() bool {
// 成功
if r.AssType == 0 && r.ExpressStatus == 1 {
return true
}
return false
}