package model import ( "apsClient/pkg/sqlitex" "encoding/json" "fmt" "github.com/jinzhu/gorm" ) type ( Dashboard struct { gorm.Model Version string DeviceRunningAmount int //开机台数 TotalProductionAmount int //总产量 WorkOrderAmount int64 //生产工单数 DelayWorkOrderAmount int64 //延期交付工单数 MaterialMissWorkOrderAmount int //物料不足工单数 PlanOrderFinishRate int64 //计划达成率 TotalDeviceAmount int64 //总设备数 InMaintenanceDeviceAmount int64 //维修中设备数 InternalDeviceRunningAmount int //自有开机台数 ExternalDeviceRunningAmount int //外加工台数 OutPlanProductionAmount int //计划外加工数 PlanProductionAmount int //计划加工数 RealExternalProductionAmount int //实际外加工数 RealProductionAmount int //实际生产数 DeviceLoadData string //设备负荷对比分析 DeviceLoad []*CommonStats `gorm:"-"` //设备负荷对比分析 MaterialRequirementData string //物料需求统计 MaterialRequirement []*CommonStats `gorm:"-"` //物料需求统计 OrderFinishRateData string //订单完成比率 OrderFinishRate []*CommonStats `gorm:"-"` //订单完成比率 PersonnelProductivityData string //人员生产效率 PersonnelProductivity []*CommonStats `gorm:"-"` //人员生产效率 PersonnelSkillPercentData string //人员技能占比 PersonnelSkillPercent []*CommonStats `gorm:"-"` //人员技能占比 WorkerTypeStatsData string //人员工种分析 WorkerTypeStats []*CommonStats `gorm:"-"` //人员工种分析 TodayFinishAmount int64 //车间当日合计生产 TodayQualifiedRate string //车间当日正品率 WorkshopStatsData string //车间统计 WorkshopStats []*WorkshopStats `gorm:"-"` //车间统计 WorkOrderStatsData string //工单进度统计 WorkOrderStats []*WorkOrderStats `gorm:"-"` //工单进度统计 } CommonStats struct { Name string Value string } WorkshopStats struct { Name string Total int64 Qualified int64 Defective int Percent int } WorkOrderStats struct { Number string //编号 Product string //产品 Scale string //规格 PlanTime string //计划时间 Percent int //完成进度 procedureNum int //工序数量 DelayDays int //延期天数 } DashboardSearch struct { Dashboard Order string PageNum int PageSize int Orm *gorm.DB } ) const ( VersionV1 = "v1" //12月9号央视访问版本 ) func (slf *Dashboard) TableName() string { return "dashboard" } func (slf *Dashboard) AfterFind(db *gorm.DB) error { var deviceLoad []*CommonStats var materialRequirement []*CommonStats var orderFinishRate []*CommonStats var personnelProductivity []*CommonStats var personnelSkillPercent []*CommonStats var workerTypeStats []*CommonStats var workshopStats []*WorkshopStats var workOrderStats []*WorkOrderStats var err error if slf.DeviceLoadData != "" { if err = json.Unmarshal([]byte(slf.DeviceLoadData), &deviceLoad); err == nil { slf.DeviceLoad = deviceLoad } } if slf.MaterialRequirementData != "" { if err = json.Unmarshal([]byte(slf.MaterialRequirementData), &materialRequirement); err == nil { slf.MaterialRequirement = materialRequirement } } if slf.OrderFinishRateData != "" { if err = json.Unmarshal([]byte(slf.OrderFinishRateData), &orderFinishRate); err == nil { slf.OrderFinishRate = orderFinishRate } } if slf.PersonnelProductivityData != "" { if err = json.Unmarshal([]byte(slf.PersonnelProductivityData), &personnelProductivity); err == nil { slf.PersonnelProductivity = personnelProductivity } } if slf.PersonnelSkillPercentData != "" { if err = json.Unmarshal([]byte(slf.PersonnelSkillPercentData), &personnelSkillPercent); err == nil { slf.PersonnelSkillPercent = personnelSkillPercent } } if slf.WorkerTypeStatsData != "" { if err = json.Unmarshal([]byte(slf.WorkerTypeStatsData), &workerTypeStats); err == nil { slf.WorkerTypeStats = workerTypeStats } } if slf.WorkshopStatsData != "" { if err = json.Unmarshal([]byte(slf.WorkshopStatsData), &workshopStats); err == nil { slf.WorkshopStats = workshopStats } } if slf.WorkOrderStatsData != "" { if err = json.Unmarshal([]byte(slf.WorkOrderStatsData), &workOrderStats); err == nil { slf.WorkOrderStats = workOrderStats } } return nil } func NewDashboardSearch(db *gorm.DB) *DashboardSearch { if db == nil { db = sqlitex.GetDB() } return &DashboardSearch{Orm: db} } func (slf *DashboardSearch) SetOrm(tx *gorm.DB) *DashboardSearch { slf.Orm = tx return slf } func (slf *DashboardSearch) SetPage(page, size int) *DashboardSearch { slf.PageNum, slf.PageSize = page, size return slf } func (slf *DashboardSearch) SetOrder(order string) *DashboardSearch { slf.Order = order return slf } func (slf *DashboardSearch) SetId(id uint) *DashboardSearch { slf.ID = id return slf } func (slf *DashboardSearch) SetVersion(version string) *DashboardSearch { slf.Version = version return slf } func (slf *DashboardSearch) build() *gorm.DB { var db = slf.Orm.Model(&Dashboard{}) if slf.Order != "" { db = db.Order(slf.Order) } if slf.Version == "" { slf.Version = VersionV1 } db = db.Where("version = ?", VersionV1) if slf.ID != 0 { db = db.Where("id = ?", slf.ID) } return db } // Create 单条插入 func (slf *DashboardSearch) Create(record *Dashboard) 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 } // CreateBatch 批量插入 func (slf *DashboardSearch) CreateBatch(records []*Dashboard) error { var db = slf.build() for _, record := range records { if err := db.Create(record).Error; err != nil { return fmt.Errorf("create batch err: %v, records: %+v", err, records) } } return nil } func (slf *DashboardSearch) Upsert(record *Dashboard) error { var db = slf.build() old, err := slf.First() if err != gorm.ErrRecordNotFound && old.ID != 0 { record.ID = old.ID err = db.Save(&record).Error } else { err = db.Create(&record).Error } if err != nil { return fmt.Errorf("save err: %v, record: %+v", err, record) } return nil } func (slf *DashboardSearch) Updates(record *Dashboard) 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 *DashboardSearch) 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 *DashboardSearch) 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 *DashboardSearch) Delete() error { var db = slf.build() if err := db.Unscoped().Delete(&Dashboard{}).Error; err != nil { return err } return nil } func (slf *DashboardSearch) First() (*Dashboard, error) { var ( record = new(Dashboard) db = slf.build() ) if err := db.First(record).Error; err != nil { return record, err } return record, nil } func (slf *DashboardSearch) Find() ([]*Dashboard, int64, error) { var ( records = make([]*Dashboard, 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 *DashboardSearch) Count() (int64, error) { var ( total int64 db = slf.build() ) if err := db.Count(&total).Error; err != nil { return total, fmt.Errorf("find count err: %v", err) } return total, nil } func (slf *DashboardSearch) FindNotTotal() ([]*Dashboard, error) { var ( records = make([]*Dashboard, 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 *DashboardSearch) FindByQuery(query string, args []interface{}) ([]*Dashboard, int64, error) { var ( records = make([]*Dashboard, 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 *DashboardSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Dashboard, error) { var ( records = make([]*Dashboard, 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 }