order_good.go 1.8 KB
package domain

//OrderGood 订单中的货品
type OrderGood struct {
	//货品id
	Id int64
	//所属订单id
	OrderId int64
	//货品名称 长度可能较长
	GoodName string
	//预计的货品数量
	PlanGoodNumber int
	//货品单价
	Price float64
	//预计的货品总额
	PlanAmount float64
	//调整后的货品数量
	UseGoodNumber int
	//调整后的货品总额
	UseAmount float64
	//合伙人分红比例
	PartnerBonusPercent float64
	//预计的合伙人分红
	PlanPartnerBonus float64
	//合伙人应收分红调整 (初始值=-1)
	UsePartnerBonus float64
	//合伙人已收分红
	PartnerBonusHas float64
	//合伙人未收分红
	PartnerBonusNot float64
	//合伙人分红支出
	PartnerBonusExpense float64
	//分红状态
	BonusStatus int
	//备注信息
	Remark string
}

func (g *OrderGood) Status() GoodStatus {
	if g.BonusStatus == BonusWaitPay && g.UseGoodNumber > 0 && g.UseGoodNumber < g.PlanGoodNumber {
		return goodStatusWithGoodsReturn
	}
	if g.BonusStatus == BonusWaitPay {
		return goodStatusWait
	}
	if g.BonusStatus == BonusPaid && g.UseGoodNumber > 0 && g.UseGoodNumber < g.PlanGoodNumber {
		return goodStatusPayWithGoodsReturn
	}
	if g.BonusStatus == BonusPaid {
		return goodStatusPay
	}
	return goodStatusWait
}

type GoodStatus int

const (
	// 待支付
	goodStatusWait GoodStatus = GoodStatus(iota + 1)
	// 已支付
	goodStatusPay
	// 已支付退货
	goodStatusPayWithGoodsReturn
	// 待支付退货
	goodStatusWithGoodsReturn
)

func (m *OrderGood) Identify() interface{} {
	if m.Id == 0 {
		return nil
	}
	return m.Id
}

type OrderGoodRepository interface {
	Save(dm *OrderGood) (*OrderGood, error)
	Remove(dm *OrderGood) (*OrderGood, error)
	FindOne(queryOptions map[string]interface{}) (*OrderGood, error)
	Find(queryOptions map[string]interface{}) (int64, []*OrderGood, error)
}