92 lines
4.7 KiB
Go
92 lines
4.7 KiB
Go
package entity
|
||
|
||
import (
|
||
consts "assets/consts/procurement"
|
||
"assets/consts/public"
|
||
|
||
"gitea.com/red-future/common/beans"
|
||
"github.com/gogf/gf/v2/os/gtime"
|
||
"go.mongodb.org/mongo-driver/v2/bson"
|
||
)
|
||
|
||
// ============================================
|
||
// 内嵌结构体定义
|
||
// ============================================
|
||
|
||
// DirectPurchaseInfo 指定供应商模式信息
|
||
type DirectPurchaseInfo struct {
|
||
// 指定供应商信息
|
||
SupplierId *bson.ObjectID `bson:"supplierId" json:"supplierId"` // 指定供应商ID
|
||
SupplierName string `bson:"supplierName" json:"supplierName"` // 指定供应商名称
|
||
SupplierCode string `bson:"supplierCode" json:"supplierCode"` // 供应商编码
|
||
AssignReason string `bson:"assignReason" json:"assignReason"` // 指派原因
|
||
DeliveryAddress string `bson:"deliveryAddress" json:"deliveryAddress"` // 交付地址
|
||
ContactPerson string `bson:"contactPerson" json:"contactPerson"` // 联系人
|
||
ContactPhone string `bson:"contactPhone" json:"contactPhone"` // 联系电话
|
||
ResponseStatus string `bson:"responseStatus" json:"responseStatus"` // 供应商响应状态
|
||
|
||
// 时间戳
|
||
AssignedAt *gtime.Time `bson:"assignedAt" json:"assignedAt"` // 指派时间
|
||
AcceptedAt *gtime.Time `bson:"acceptedAt" json:"acceptedAt"` // 接受时间
|
||
RejectedAt *gtime.Time `bson:"rejectedAt" json:"rejectedAt"` // 拒绝时间
|
||
DeliveredAt *gtime.Time `bson:"deliveredAt" json:"deliveredAt"` // 交付时间
|
||
}
|
||
|
||
// BiddingInfo 竞价模式信息
|
||
type BiddingInfo struct {
|
||
// 竞价设置
|
||
BidMode consts.BidMode `bson:"bidMode" json:"bidMode"` // 竞价模式:price/quality/time/mixed
|
||
MinSuppliers int `bson:"minSuppliers" json:"minSuppliers"` // 最少参与供应商数
|
||
MaxSuppliers int `bson:"maxSuppliers" json:"maxSuppliers"` // 最多参与供应商数
|
||
BidDuration int `bson:"bidDuration" json:"bidDuration"` // 竞价持续时长(分钟)
|
||
BidSupplierCount int `bson:"bidSupplierCount" json:"bidSupplierCount"` // 参与竞价的供应商数量
|
||
|
||
// 时间戳
|
||
BidStartAt *gtime.Time `bson:"bidStartAt" json:"bidStartAt"` // 竞价开始时间
|
||
BidEndAt *gtime.Time `bson:"bidEndAt" json:"bidEndAt"` // 竞价结束时间
|
||
ResultPublishedAt *gtime.Time `bson:"resultPublishedAt" json:"resultPublishedAt"` // 结果发布时间
|
||
}
|
||
|
||
// ============================================
|
||
// 主实体定义
|
||
// ============================================
|
||
|
||
// PurchaseOrder 采购订单实体(统一模式,结构化设计)
|
||
type PurchaseOrder struct {
|
||
beans.MongoBaseDO `bson:",inline"` // 嵌入基础字段:Id, Creator, CreatedAt, Updater, UpdatedAt, TenantId, IsDeleted
|
||
|
||
// ============================================
|
||
// 基础订单信息(所有模式共用)
|
||
// ============================================
|
||
OrderNo string `bson:"orderNo" json:"orderNo"` // 订单编号
|
||
Title string `bson:"title" json:"title"` // 订单标题
|
||
Description string `bson:"description" json:"description"` // 订单描述
|
||
OrderType consts.PurchaseOrderType `bson:"orderType" json:"orderType"` // 订单类型:direct/assignment/bidding
|
||
|
||
// 需求方信息
|
||
BuyerId *bson.ObjectID `bson:"buyerId" json:"buyerId"` // 采购方ID(经销商/门店)
|
||
BuyerName string `bson:"buyerName" json:"buyerName"` // 采购方名称
|
||
BuyerType string `bson:"buyerType" json:"buyerType"` // 采购方类型
|
||
|
||
// 通用状态信息
|
||
Status consts.PurchaseOrderStatus `bson:"status" json:"status"` // 订单状态
|
||
Priority int `bson:"priority" json:"priority"` // 优先级
|
||
|
||
// ============================================
|
||
// 模式特定信息(内嵌结构体)
|
||
// ============================================
|
||
DirectPurchase *DirectPurchaseInfo `bson:"directPurchase,omitempty" json:"directPurchase,omitempty"` // 指定供应商模式信息
|
||
BiddingInfo *BiddingInfo `bson:"biddingInfo,omitempty" json:"biddingInfo,omitempty"` // 竞价模式信息
|
||
|
||
// ============================================
|
||
// 通用字段
|
||
// ============================================
|
||
ExpectedDelivery *gtime.Time `bson:"expectedDelivery" json:"expectedDelivery"` // 期望交付时间
|
||
ExpiryTime *gtime.Time `bson:"expiryTime" json:"expiryTime"` // 订单有效期/竞价结束时间
|
||
}
|
||
|
||
// CollectionName 获取集合名称
|
||
func (PurchaseOrder) CollectionName() string {
|
||
return public.PurchaseOrderCollection
|
||
}
|