package model import ( "apsClient/pkg/sqlitex" "fmt" "github.com/jinzhu/gorm" "github.com/shopspring/decimal" ) type ( Order struct { CommonModel WorkOrderID string `gorm:"index;type:varchar(191);not null" json:"workOrderId"` OrderID string `gorm:"index;type:varchar(191);not null" json:"orderId"` ProductID string `gorm:"type:varchar(191)" json:"productId"` ProductName string `gorm:"type:varchar(191)" json:"productName"` Parameter string `gorm:"type:varchar(1024)" json:"parameter"` Customer string `gorm:"type:varchar(191)" json:"customer"` DeliverDate string `gorm:"type:varchar(100)" json:"deliverDate"` OrderAttr string `json:"orderAttr"` // 订单属性拼接的字符串,即货物描述 Amount decimal.Decimal `gorm:"type:decimal(35,18)" json:"amount"` Unit string `gorm:"type:varchar(100)" json:"unit"` StartTime int64 `json:"startTime"` EndTime int64 `json:"endTime"` Status OrderStatus } OrderSearch struct { Order OrderBy string PageNum int PageSize int Orm *gorm.DB Preload bool StartTimeMax int64 StartTimeMin int64 StatusList []OrderStatus WorkOrderIDs []string } ) type OrderStatus int const ( OrderStatusWaitProcess OrderStatus = 1 OrderStatusProcessing OrderStatus = 2 OrderStatusFinished OrderStatus = 3 ) func (slf *Order) TableName() string { return "work_order" } func NewOrderSearch(db *gorm.DB) *OrderSearch { if db == nil { db = sqlitex.GetDB() } return &OrderSearch{Orm: db} } func (slf *OrderSearch) SetOrm(tx *gorm.DB) *OrderSearch { slf.Orm = tx return slf } func (slf *OrderSearch) SetPage(page, size int) *OrderSearch { slf.PageNum, slf.PageSize = page, size return slf } func (slf *OrderSearch) SetOrder(order string) *OrderSearch { slf.OrderBy = order return slf } func (slf *OrderSearch) SetStartTimeMax(ts int64) *OrderSearch { slf.StartTimeMax = ts return slf } func (slf *OrderSearch) SetStartTimeMin(ts int64) *OrderSearch { slf.StartTimeMin = ts return slf } func (slf *OrderSearch) SetStatus(status OrderStatus) *OrderSearch { slf.Status = status return slf } func (slf *OrderSearch) SetStatusList(statusList []OrderStatus) *OrderSearch { slf.StatusList = statusList return slf } func (slf *OrderSearch) SetPreload(preload bool) *OrderSearch { slf.Preload = preload return slf } func (slf *OrderSearch) SetWorkOrderId(workOrderId string) *OrderSearch { slf.WorkOrderID = workOrderId return slf } func (slf *OrderSearch) SetWorkOrderIds(workOrderIds []string) *OrderSearch { slf.WorkOrderIDs = workOrderIds return slf } func (slf *OrderSearch) SetId(id uint) *OrderSearch { slf.ID = id return slf } func (slf *OrderSearch) build() *gorm.DB { var db = slf.Orm.Model(&Order{}) if slf.OrderBy != "" { db = db.Order(slf.OrderBy) } if slf.ID != 0 { db = db.Where("id = ?", slf.ID) } if slf.WorkOrderID != "" { db = db.Where("work_order_id = ?", slf.WorkOrderID) } if len(slf.WorkOrderIDs) != 0 { db = db.Where("work_order_id in (?)", slf.WorkOrderIDs) } if slf.Status != 0 { db = db.Where("status = ?", slf.Status) } if len(slf.StatusList) != 0 { db = db.Where("status IN (?)", slf.StatusList) } if slf.StartTimeMax != 0 { db = db.Where("start_time <= ?", slf.StartTimeMax) } if slf.StartTimeMin != 0 { db = db.Where("start_time >= ?", slf.StartTimeMin) } if slf.Preload { db = db.Preload("InputMaterials").Preload("OutputMaterials") } return db } // Create 单条插入 func (slf *OrderSearch) Create(record *Order) error { var db = slf.build() if err := db.Create(record).Error; err != nil { return fmt.Errorf("create err: %v, record: %+v", err, record) } return nil } func (slf *OrderSearch) Updates(record *Order) error { var db = slf.build() if err := db.Updates(record).Error; err != nil { return fmt.Errorf("save err: %v, record: %+v", err, record) } return nil } func (slf *OrderSearch) Upsert(record *Order) error { var db = slf.build() if err := db.Save(record).Error; err != nil { return fmt.Errorf("save err: %v, record: %+v", err, record) } return nil } func (slf *OrderSearch) UpdateByMap(upMap map[string]interface{}) error { var ( db = slf.build() ) if err := db.Updates(upMap).Error; err != nil { return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) } return nil } func (slf *OrderSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { var ( db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) if err := db.Updates(upMap).Error; err != nil { return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) } return nil } func (slf *OrderSearch) Delete() error { var db = slf.build() if err := db.Unscoped().Delete(&Order{}).Error; err != nil { return err } return nil } func (slf *OrderSearch) First() (*Order, error) { var ( record = new(Order) db = slf.build() ) if err := db.First(record).Error; err != nil { return record, err } return record, nil } func (slf *OrderSearch) Find() ([]*Order, int64, error) { var ( records = make([]*Order, 0) total int64 db = slf.build() ) if err := db.Count(&total).Error; err != nil { return records, total, fmt.Errorf("find count err: %v", err) } if slf.PageNum*slf.PageSize > 0 { db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) } if err := db.Find(&records).Error; err != nil { return records, total, fmt.Errorf("find records err: %v", err) } return records, total, nil } func (slf *OrderSearch) FindNotTotal() ([]*Order, error) { var ( records = make([]*Order, 0) db = slf.build() ) if slf.PageNum*slf.PageSize > 0 { db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) } if err := db.Find(&records).Error; err != nil { return records, fmt.Errorf("find records err: %v", err) } return records, nil } // FindByQuery 指定条件查询. func (slf *OrderSearch) FindByQuery(query string, args []interface{}) ([]*Order, int64, error) { var ( records = make([]*Order, 0) total int64 db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) if err := db.Count(&total).Error; err != nil { return records, total, fmt.Errorf("find by query count err: %v", err) } if slf.PageNum*slf.PageSize > 0 { db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) } if err := db.Find(&records).Error; err != nil { return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) } return records, total, nil } // FindByQueryNotTotal 指定条件查询&不查询总条数. func (slf *OrderSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Order, error) { var ( records = make([]*Order, 0) db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) if slf.PageNum*slf.PageSize > 0 { db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) } if err := db.Find(&records).Error; err != nil { return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) } return records, nil }