fix: 非法数据过滤(启动、通讯异常数据 、当次生产数据异常(超10000))
正在显示
5 个修改的文件
包含
63 行增加
和
14 行删除
| @@ -122,6 +122,7 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | @@ -122,6 +122,7 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | ||
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | //计算区间的产能 | 124 | //计算区间的产能 |
| 125 | + | ||
| 125 | if v, ok := newDeviceCollection.Values["Count"]; ok { | 126 | if v, ok := newDeviceCollection.Values["Count"]; ok { |
| 126 | newDeviceCollection.Values["total"] = v // 记录原始值 | 127 | newDeviceCollection.Values["total"] = v // 记录原始值 |
| 127 | newDeviceCollection.Values["Count"] = 0 | 128 | newDeviceCollection.Values["Count"] = 0 |
| @@ -142,6 +143,7 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | @@ -142,6 +143,7 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | ||
| 142 | newDeviceCollection.ProductCount = count | 143 | newDeviceCollection.ProductCount = count |
| 143 | } | 144 | } |
| 144 | } | 145 | } |
| 146 | + _, valErr := newDeviceCollection.Valid() | ||
| 145 | // TODO:测试假数据,后期注释掉 | 147 | // TODO:测试假数据,后期注释掉 |
| 146 | //if createDeviceCollectionCommand.DeviceType == domain.DeviceTypeChuanChuanJi { | 148 | //if createDeviceCollectionCommand.DeviceType == domain.DeviceTypeChuanChuanJi { |
| 147 | // newDeviceCollection.Values["Count"] = rand.Intn(300) | 149 | // newDeviceCollection.Values["Count"] = rand.Intn(300) |
| @@ -150,7 +152,9 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | @@ -150,7 +152,9 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | ||
| 150 | if err != nil { | 152 | if err != nil { |
| 151 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 153 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 152 | } | 154 | } |
| 153 | - err = domainService.SendWorkshopDeviceData(deviceCollection) | 155 | + if valErr == nil { |
| 156 | + err = domainService.SendWorkshopDeviceData(deviceCollection) | ||
| 157 | + } | ||
| 154 | if err != nil { | 158 | if err != nil { |
| 155 | log.Logger.Error("车间设备数据加入redis失败:" + err.Error()) | 159 | log.Logger.Error("车间设备数据加入redis失败:" + err.Error()) |
| 156 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 160 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| @@ -97,3 +97,21 @@ func (deviceCollection *DeviceCollection) Update(data map[string]interface{}) er | @@ -97,3 +97,21 @@ func (deviceCollection *DeviceCollection) Update(data map[string]interface{}) er | ||
| 97 | func TaskDeviceCollection() string { | 97 | func TaskDeviceCollection() string { |
| 98 | return fmt.Sprintf("%v:task:device-collection:report", constant.CACHE_PREFIX) | 98 | return fmt.Sprintf("%v:task:device-collection:report", constant.CACHE_PREFIX) |
| 99 | } | 99 | } |
| 100 | + | ||
| 101 | +func (data *DeviceCollection) Valid() (bool, error) { | ||
| 102 | + var ( | ||
| 103 | + result = false | ||
| 104 | + ) | ||
| 105 | + if data.ProductCount > DeviceMaxSingleProductCount { | ||
| 106 | + data.ProductCount = 0 | ||
| 107 | + data.Values["Count"] = 0 | ||
| 108 | + return result, fmt.Errorf("设备数据异常: 生产数量超过:%v", DeviceMaxSingleProductCount) | ||
| 109 | + } | ||
| 110 | + if data.StartupStatus == 0 { | ||
| 111 | + return result, fmt.Errorf("设备数据异常: 启动0") | ||
| 112 | + } | ||
| 113 | + if data.ComStatus == 0 { | ||
| 114 | + return result, fmt.Errorf("设备数据异常: 通讯0") | ||
| 115 | + } | ||
| 116 | + return true, nil | ||
| 117 | +} |
| @@ -53,14 +53,18 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) Update(data map[string | @@ -53,14 +53,18 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) Update(data map[string | ||
| 53 | return nil | 53 | return nil |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | -func (deviceDailyRunningRecord *DeviceDailyRunningRecord) AddDeviceRunningData(t time.Time, data *DeviceRunningData) { | 56 | +func (deviceDailyRunningRecord *DeviceDailyRunningRecord) AddDeviceRunningData(t time.Time, data *DeviceRunningData) bool { |
| 57 | deviceDailyRunningRecord.DeviceRunningRecordInfo.AddDeviceRunningData(t, data) | 57 | deviceDailyRunningRecord.DeviceRunningRecordInfo.AddDeviceRunningData(t, data) |
| 58 | now := time.Now().Unix() | 58 | now := time.Now().Unix() |
| 59 | + if ok, _ := data.Valid(); !ok { | ||
| 60 | + return false | ||
| 61 | + } | ||
| 59 | if t.Unix() > (now-DefaultCollectionTimeSpan) && t.Unix() < (now+DefaultCollectionTimeSpan) { | 62 | if t.Unix() > (now-DefaultCollectionTimeSpan) && t.Unix() < (now+DefaultCollectionTimeSpan) { |
| 60 | deviceDailyRunningRecord.UpdatedAt = t | 63 | deviceDailyRunningRecord.UpdatedAt = t |
| 61 | - return | 64 | + return false |
| 62 | } | 65 | } |
| 63 | deviceDailyRunningRecord.UpdatedAt = time.Now() | 66 | deviceDailyRunningRecord.UpdatedAt = time.Now() |
| 67 | + return true | ||
| 64 | } | 68 | } |
| 65 | 69 | ||
| 66 | func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { | 70 | func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "time" | 3 | +import ( |
| 4 | + "fmt" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +const DeviceMaxSingleProductCount = 10000 | ||
| 4 | 9 | ||
| 5 | // 设备运行数据 | 10 | // 设备运行数据 |
| 6 | type DeviceRunningData struct { | 11 | type DeviceRunningData struct { |
| @@ -41,3 +46,20 @@ type DeviceRunningData struct { | @@ -41,3 +46,20 @@ type DeviceRunningData struct { | ||
| 41 | // 单位数据 比如:1串/0.1kg weight = count * unitQuantity | 46 | // 单位数据 比如:1串/0.1kg weight = count * unitQuantity |
| 42 | UnitQuantity float64 `json:"unitQuantity"` | 47 | UnitQuantity float64 `json:"unitQuantity"` |
| 43 | } | 48 | } |
| 49 | + | ||
| 50 | +func (data *DeviceRunningData) Valid() (bool, error) { | ||
| 51 | + var ( | ||
| 52 | + result = false | ||
| 53 | + ) | ||
| 54 | + if data.Count > DeviceMaxSingleProductCount { | ||
| 55 | + data.Count = 0 | ||
| 56 | + return result, fmt.Errorf("设备数据异常: 生产数量超过:%v", DeviceMaxSingleProductCount) | ||
| 57 | + } | ||
| 58 | + if data.StartupStatus == 0 { | ||
| 59 | + return result, fmt.Errorf("设备数据异常: 启动0") | ||
| 60 | + } | ||
| 61 | + if data.ComStatus == 0 { | ||
| 62 | + return result, fmt.Errorf("设备数据异常: 通讯0") | ||
| 63 | + } | ||
| 64 | + return true, nil | ||
| 65 | +} |
| @@ -92,19 +92,20 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | @@ -92,19 +92,20 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | ||
| 92 | if _, err = deviceRunningRecordRepository.Save(deviceRunningRecord); err != nil { | 92 | if _, err = deviceRunningRecordRepository.Save(deviceRunningRecord); err != nil { |
| 93 | return nil, err | 93 | return nil, err |
| 94 | } | 94 | } |
| 95 | - // 2.保存设备生产记录 (统计车间、员工产能) 批次跟数量不为空 | ||
| 96 | - if record.DeviceType == domain.DeviceTypeChuanChuanJi && plan != nil && deviceRunningData.Count > 0 { | ||
| 97 | 95 | ||
| 98 | - productRecord, _ := ptr.newProductRecord(companyId, orgId, workStation, device, deviceRunningData, plan) | ||
| 99 | - //SendProductRecordStaticsJob(productRecord) | 96 | + // 2.更新 设备每日运行记录(汇总) - redis更新 十分钟异步刷库 |
| 97 | + if addSuccess := deviceDailyRecord.AddDeviceRunningData(deviceRunningData.CollectionTime, deviceRunningData); addSuccess { | ||
| 98 | + // 3.保存设备生产记录 (统计车间、员工产能) 批次跟数量不为空 | ||
| 99 | + if record.DeviceType == domain.DeviceTypeChuanChuanJi && plan != nil && deviceRunningData.Count > 0 { | ||
| 100 | 100 | ||
| 101 | - productRecordService, _ := NewPGProductRecordService(ptr.transactionContext) | ||
| 102 | - productRecordService.EmployeeProductStatics(productRecord) | ||
| 103 | - productRecordService.WorkshopProductStatics(productRecord) | ||
| 104 | - } | 101 | + productRecord, _ := ptr.newProductRecord(companyId, orgId, workStation, device, deviceRunningData, plan) |
| 102 | + //SendProductRecordStaticsJob(productRecord) | ||
| 105 | 103 | ||
| 106 | - // 3.更新 设备每日运行记录(汇总) - redis更新 十分钟异步刷库 | ||
| 107 | - deviceDailyRecord.AddDeviceRunningData(deviceRunningData.CollectionTime, deviceRunningData) | 104 | + productRecordService, _ := NewPGProductRecordService(ptr.transactionContext) |
| 105 | + productRecordService.EmployeeProductStatics(productRecord) | ||
| 106 | + productRecordService.WorkshopProductStatics(productRecord) | ||
| 107 | + } | ||
| 108 | + } | ||
| 108 | if err = redis.SaveDeviceDailyRunningRecord(deviceDailyRecord); err != nil { | 109 | if err = redis.SaveDeviceDailyRunningRecord(deviceDailyRecord); err != nil { |
| 109 | //log.Logger.Error(err.Error()) | 110 | //log.Logger.Error(err.Error()) |
| 110 | return nil, err | 111 | return nil, err |
-
请 注册 或 登录 后发表评论