作者 yangfu

fix :设备工时修改、增加报警状态 、 报警状态位分析修改

@@ -32,7 +32,7 @@ type UpdateDeviceCommand struct { @@ -32,7 +32,7 @@ type UpdateDeviceCommand struct {
32 // 风险等级 1:高 2:中 3:低 32 // 风险等级 1:高 2:中 3:低
33 RiskLevel int `cname:"风险等级 1:高 2:中 3:低" json:"riskLevel" valid:"Required"` 33 RiskLevel int `cname:"风险等级 1:高 2:中 3:低" json:"riskLevel" valid:"Required"`
34 // 标准工时 34 // 标准工时
35 - UnitProductionSecTime int `cname:"标准工时" json:"unitProductionSecTime"` 35 + UnitProductionSecTime float64 `cname:"标准工时" json:"unitProductionSecTime"`
36 } 36 }
37 37
38 func (updateDeviceCommand *UpdateDeviceCommand) Valid(validation *validation.Validation) { 38 func (updateDeviceCommand *UpdateDeviceCommand) Valid(validation *validation.Validation) {
@@ -36,12 +36,12 @@ type DeviceChuanChuanJi struct { @@ -36,12 +36,12 @@ type DeviceChuanChuanJi struct {
36 Month int `json:"Month"` // 月 36 Month int `json:"Month"` // 月
37 Day int `json:"Day"` // 日 37 Day int `json:"Day"` // 日
38 ProductType int `json:"ProductType"` 38 ProductType int `json:"ProductType"`
39 - //ProductType1 string `json:"ProductType1"` // 产品类型:当前产品种类  
40 } 39 }
41 40
42 // 速冻线 41 // 速冻线
43 type DeviceSuDongXian struct { 42 type DeviceSuDongXian struct {
44 CurrTemp float64 `json:"CurrTemp"` // 当前温度:当前温度 43 CurrTemp float64 `json:"CurrTemp"` // 当前温度:当前温度
  44 + Alarm int `json:"alarm"` // 报警
45 } 45 }
46 46
47 // 封口机 47 // 封口机
@@ -51,7 +51,6 @@ type DeviceFengKouJi struct { @@ -51,7 +51,6 @@ type DeviceFengKouJi struct {
51 Month int `json:"Month"` // 月 51 Month int `json:"Month"` // 月
52 Day int `json:"Day"` // 日 52 Day int `json:"Day"` // 日
53 ProductType int `json:"ProductType"` 53 ProductType int `json:"ProductType"`
54 - //ProductType1 string `json:"ProductType1"` // 产品类型:当前产品种类  
55 } 54 }
56 55
57 // 封箱机 56 // 封箱机
@@ -61,7 +60,6 @@ type DeviceFengXiangJi struct { @@ -61,7 +60,6 @@ type DeviceFengXiangJi struct {
61 Month int `json:"Month"` // 月 60 Month int `json:"Month"` // 月
62 Day int `json:"Day"` // 日 61 Day int `json:"Day"` // 日
63 ProductType int `json:"ProductType"` 62 ProductType int `json:"ProductType"`
64 - //ProductType1 string `json:"ProductType1"` // 产品类型:当前产品种类  
65 } 63 }
66 64
67 func ProductTypeToProductCode(productType int) string { 65 func ProductTypeToProductCode(productType int) string {
@@ -135,7 +135,7 @@ func (d *DeviceRunningRecordInfo) AddDeviceRunningData(t time.Time, data *Device @@ -135,7 +135,7 @@ func (d *DeviceRunningRecordInfo) AddDeviceRunningData(t time.Time, data *Device
135 if len(d.DeviceType) == 0 { 135 if len(d.DeviceType) == 0 {
136 d.DeviceType = data.DeviceType 136 d.DeviceType = data.DeviceType
137 } 137 }
138 - d.CurrentStatus = data.StartupStatus | (1 << data.ComStatus) 138 + d.CurrentStatus = data.StartupStatus | (data.ComStatus << 1) | (data.Alarm << 2)
139 d.ResetUpTime() 139 d.ResetUpTime()
140 d.Count += data.Count 140 d.Count += data.Count
141 //d.Temp = data.FrontTemp 141 //d.Temp = data.FrontTemp
@@ -165,6 +165,7 @@ func (d *DeviceRunningRecordInfo) AddTimeLineDeviceStatus(t time.Time, data *Dev @@ -165,6 +165,7 @@ func (d *DeviceRunningRecordInfo) AddTimeLineDeviceStatus(t time.Time, data *Dev
165 } 165 }
166 v.UpdateUp(t, data.StartupStatus) 166 v.UpdateUp(t, data.StartupStatus)
167 v.UpdateCom(t, data.ComStatus) 167 v.UpdateCom(t, data.ComStatus)
  168 + v.UpdateAlarm(t, data.Alarm)
168 } 169 }
169 170
170 // 重置运行时长 171 // 重置运行时长
@@ -199,9 +200,14 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string @@ -199,9 +200,14 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string
199 err := make([][]int, 0) 200 err := make([][]int, 0)
200 var begin, end int = 0, 0 201 var begin, end int = 0, 0
201 /* 202 /*
202 - 1.故障: 1 0 \ 0 0 203 + 旧: 1.故障: 1 0 \ 0 0
203 2.正常: 1 1 204 2.正常: 1 1
204 3.停机:0 1 205 3.停机:0 1
  206 +
  207 + 新: 只要未开机,就是待机中状态
  208 + 1.故障: 1 0 0 / 1 0 1 / 1 1 1 / 1/5/7
  209 + 2.正常: 1 1 0 3
  210 + 3.停机:0 0 0 / 0 1 0 / 0 0 1 / 0 1 1 0/2/4/6
205 */ 211 */
206 var status = 1 212 var status = 1
207 // 添加数据 213 // 添加数据
@@ -227,13 +233,13 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string @@ -227,13 +233,13 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string
227 if com&index > 0 { 233 if com&index > 0 {
228 val |= 2 234 val |= 2
229 } 235 }
230 - if val == 1 { 236 + if val == 1 || val == 5 || val == 7 {
231 return 1 //故障 237 return 1 //故障
232 } 238 }
233 if val == 3 { 239 if val == 3 {
234 return 2 //正常 240 return 2 //正常
235 } 241 }
236 - if val == 2 || val == 0 { 242 + if val == 0 || val == 2 || val == 4 || val == 6 {
237 return 3 //停机 243 return 3 //停机
238 } 244 }
239 return 3 // 停机 245 return 3 // 停机
@@ -294,6 +300,8 @@ type HourDeviceStatus struct { @@ -294,6 +300,8 @@ type HourDeviceStatus struct {
294 Up int `json:"up"` 300 Up int `json:"up"`
295 // 通讯 301 // 通讯
296 Com int `json:"com"` 302 Com int `json:"com"`
  303 + // 报警
  304 + Alarm int `json:"alarm"`
297 } 305 }
298 306
299 // 更新启动状态 307 // 更新启动状态
@@ -324,6 +332,20 @@ func (d *HourDeviceStatus) UpdateCom(t time.Time, c int) { @@ -324,6 +332,20 @@ func (d *HourDeviceStatus) UpdateCom(t time.Time, c int) {
324 return 332 return
325 } 333 }
326 334
  335 +// 更新报警状态
  336 +func (d *HourDeviceStatus) UpdateAlarm(t time.Time, c int) {
  337 + m := t.Minute()
  338 + bit := 1 << (m / d.Window)
  339 + if c&1 == 0 {
  340 + return
  341 + }
  342 + if d.Alarm&bit > 0 {
  343 + return
  344 + }
  345 + d.Alarm |= bit
  346 + return
  347 +}
  348 +
327 // 计算状态持续的时间 349 // 计算状态持续的时间
328 func (d *HourDeviceStatus) CountTime(v int) time.Duration { 350 func (d *HourDeviceStatus) CountTime(v int) time.Duration {
329 l := 60 / d.Window 351 l := 60 / d.Window
@@ -346,5 +368,6 @@ func NewHourDeviceStatus() *HourDeviceStatus { @@ -346,5 +368,6 @@ func NewHourDeviceStatus() *HourDeviceStatus {
346 Window: DefaultTimeWindow, 368 Window: DefaultTimeWindow,
347 Up: 0, 369 Up: 0,
348 Com: 0, 370 Com: 0,
  371 + Alarm: 0,
349 } 372 }
350 } 373 }
@@ -25,6 +25,8 @@ type DeviceRunningData struct { @@ -25,6 +25,8 @@ type DeviceRunningData struct {
25 StartupStatus int `json:"startupStatus"` 25 StartupStatus int `json:"startupStatus"`
26 // 通讯状态:1:通讯正常,0:设备未上电或与采集端通讯故障 26 // 通讯状态:1:通讯正常,0:设备未上电或与采集端通讯故障
27 ComStatus int `json:"comStatus"` 27 ComStatus int `json:"comStatus"`
  28 + // 报警状态:1:故障,0:正常
  29 + Alarm int `json:"alarm"`
28 30
29 // 附加数据 31 // 附加数据
30 // 匹配数目 32 // 匹配数目
@@ -160,6 +160,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -160,6 +160,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
160 } 160 }
161 data.Temp1 = utils.Truncate(deviceYouZhaJi.FrontTemp, 1) 161 data.Temp1 = utils.Truncate(deviceYouZhaJi.FrontTemp, 1)
162 data.Temp2 = utils.Truncate(deviceYouZhaJi.BackTemp, 1) 162 data.Temp2 = utils.Truncate(deviceYouZhaJi.BackTemp, 1)
  163 + data.Alarm = deviceYouZhaJi.Alarm
163 } else { 164 } else {
164 deviceYouZhaJi := &domain.DeviceYouZhaJi2{} 165 deviceYouZhaJi := &domain.DeviceYouZhaJi2{}
165 err = json.Unmarshal(mBytes, deviceYouZhaJi) 166 err = json.Unmarshal(mBytes, deviceYouZhaJi)
@@ -168,6 +169,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -168,6 +169,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
168 } 169 }
169 data.Temp1 = utils.Truncate(deviceYouZhaJi.Temp1, 1) 170 data.Temp1 = utils.Truncate(deviceYouZhaJi.Temp1, 1)
170 data.Temp2 = utils.Truncate(deviceYouZhaJi.Temp2, 1) 171 data.Temp2 = utils.Truncate(deviceYouZhaJi.Temp2, 1)
  172 + data.Alarm = deviceYouZhaJi.Alarm
171 } 173 }
172 break 174 break
173 //串串机 175 //串串机
@@ -193,6 +195,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -193,6 +195,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
193 break 195 break
194 } 196 }
195 data.Temp1 = utils.Truncate(deviceSuDongXian.CurrTemp, 1) 197 data.Temp1 = utils.Truncate(deviceSuDongXian.CurrTemp, 1)
  198 + data.Alarm = deviceSuDongXian.Alarm
196 break 199 break
197 //封口机 200 //封口机
198 case domain.DeviceTypeFengKouJi: 201 case domain.DeviceTypeFengKouJi: