Merge remote-tracking branch 'origin/test'
正在显示
18 个修改的文件
包含
201 行增加
和
45 行删除
| @@ -91,7 +91,7 @@ func AutoFlushDeviceDailyRunningRecordOEE(ctx context.Context) error { | @@ -91,7 +91,7 @@ func AutoFlushDeviceDailyRunningRecordOEE(ctx context.Context) error { | ||
| 91 | log.Logger.Error(err.Error()) | 91 | log.Logger.Error(err.Error()) |
| 92 | continue | 92 | continue |
| 93 | } | 93 | } |
| 94 | - if err := redis.SaveDeviceDailyRunningRecord(v); err != nil { | 94 | + if err := redis.SaveDeviceDailyRunningRecordByKey(v.RedisKey, v); err != nil { |
| 95 | log.Logger.Error(err.Error(), map[string]interface{}{"task": "定时刷新设备每日运行记录"}) | 95 | log.Logger.Error(err.Error(), map[string]interface{}{"task": "定时刷新设备每日运行记录"}) |
| 96 | continue | 96 | continue |
| 97 | } | 97 | } |
| @@ -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) { |
| @@ -153,6 +153,8 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | @@ -153,6 +153,8 @@ func (deviceCollectionService *DeviceCollectionService) DeviceCollection(createD | ||
| 153 | // newDeviceCollection.ComStatus = 1 | 153 | // newDeviceCollection.ComStatus = 1 |
| 154 | // newDeviceCollection.CollectionTime = time.Date(2022,4,18,7,0,0,0,time.Local) | 154 | // newDeviceCollection.CollectionTime = time.Date(2022,4,18,7,0,0,0,time.Local) |
| 155 | //} | 155 | //} |
| 156 | + | ||
| 157 | + // !!!!!!! 注意:保存到库以后 collect_time 变成了 UTC时间,后续处理的时候都要加上collectTime.Local() | ||
| 156 | if newDeviceCollection, err = deviceCollectionRepository.Save(newDeviceCollection); err != nil { | 158 | if newDeviceCollection, err = deviceCollectionRepository.Save(newDeviceCollection); err != nil { |
| 157 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 159 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 158 | } | 160 | } |
| 1 | package syncdata | 1 | package syncdata |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "fmt" | ||
| 4 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" | 5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/constant" |
| 5 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" | 6 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/domain" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" | 7 | "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/domainService" |
| @@ -523,16 +524,25 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa | @@ -523,16 +524,25 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa | ||
| 523 | continue | 524 | continue |
| 524 | } | 525 | } |
| 525 | // 计划信息 | 526 | // 计划信息 |
| 526 | - plan, err = productPlanRepository.FindOne(map[string]interface{}{"companyId": cid, "orgId": oid, "batchNumber": v.BillNo}) | 527 | + plan, err = productPlanRepository.FindOne(map[string]interface{}{"companyId": cid, "orgId": oid, "erpBillNo": v.BillNo, "productCode": v.MaterialNumber}) |
| 527 | if err == nil && plan != nil { | 528 | if err == nil && plan != nil { |
| 528 | - plan.UpdatedAt = time.Now() | 529 | + //plan.UpdatedAt = time.Now() |
| 529 | continue | 530 | continue |
| 530 | } | 531 | } |
| 532 | + count, _, errFindPlan := productPlanRepository.Find(map[string]interface{}{"companyId": cid, "orgId": oid, "erpBillNo": v.BillNo, "productCode": v.MaterialNumber}) | ||
| 533 | + if errFindPlan != nil { | ||
| 534 | + continue | ||
| 535 | + } | ||
| 536 | + /* ERP系统BillNO + MaterialNumber 唯一 会重复,需要做自增格式化处理*/ | ||
| 537 | + batchNumber := fmt.Sprintf("%v-1", v.BillNo) | ||
| 538 | + if count >= 1 { | ||
| 539 | + batchNumber = fmt.Sprintf("%v-%v", v.BillNo, count) | ||
| 540 | + } | ||
| 531 | if err == domain.ErrorNotFound { | 541 | if err == domain.ErrorNotFound { |
| 532 | plan = &domain.ProductPlan{ | 542 | plan = &domain.ProductPlan{ |
| 533 | CompanyId: cid, | 543 | CompanyId: cid, |
| 534 | OrgId: oid, | 544 | OrgId: oid, |
| 535 | - BatchNumber: v.BillNo, | 545 | + BatchNumber: batchNumber, |
| 536 | ProductDate: v.PlanStartDate, | 546 | ProductDate: v.PlanStartDate, |
| 537 | Workshop: workshop.CloneSample(), | 547 | Workshop: workshop.CloneSample(), |
| 538 | WorkOn: 0, | 548 | WorkOn: 0, |
| @@ -557,6 +567,7 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa | @@ -557,6 +567,7 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa | ||
| 557 | ProductCode: product.ProductCode, | 567 | ProductCode: product.ProductCode, |
| 558 | ProductName: product.ProductName, | 568 | ProductName: product.ProductName, |
| 559 | DevotedUnit: "份", | 569 | DevotedUnit: "份", |
| 570 | + ErpBillNo: v.BillNo, | ||
| 560 | }) | 571 | }) |
| 561 | plan.PlanProductName = product.ProductName | 572 | plan.PlanProductName = product.ProductName |
| 562 | plan.Remark = v.Description | 573 | plan.Remark = v.Description |
| @@ -20,16 +20,16 @@ var MQTT_TOPIC = "/MQTT" | @@ -20,16 +20,16 @@ var MQTT_TOPIC = "/MQTT" | ||
| 20 | //var MQTT_USER = "" | 20 | //var MQTT_USER = "" |
| 21 | //var MQTT_PASSWORD = "" | 21 | //var MQTT_PASSWORD = "" |
| 22 | 22 | ||
| 23 | -var MQTT_HOST = "175.24.122.87" | ||
| 24 | -var MQTT_PORT = "1883" | ||
| 25 | -var MQTT_USER = "user111" | ||
| 26 | -var MQTT_PASSWORD = "user111" | 23 | +//var MQTT_HOST = "175.24.122.87" |
| 24 | +//var MQTT_PORT = "1883" | ||
| 25 | +//var MQTT_USER = "user111" | ||
| 26 | +//var MQTT_PASSWORD = "user111" | ||
| 27 | 27 | ||
| 28 | //内网测试地址 | 28 | //内网测试地址 |
| 29 | -//var MQTT_HOST = "192.168.100.222" | ||
| 30 | -//var MQTT_PORT = "1883" | ||
| 31 | -//var MQTT_USER = "admin" | ||
| 32 | -//var MQTT_PASSWORD = "123456" | 29 | +var MQTT_HOST = "47.97.5.102" |
| 30 | +var MQTT_PORT = "6000" | ||
| 31 | +var MQTT_USER = "admin" | ||
| 32 | +var MQTT_PASSWORD = "123456" | ||
| 33 | 33 | ||
| 34 | func init() { | 34 | func init() { |
| 35 | if os.Getenv("MQTT_HOST") != "" { | 35 | if os.Getenv("MQTT_HOST") != "" { |
| @@ -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 { |
| @@ -33,6 +33,8 @@ type DeviceDailyRunningRecord struct { | @@ -33,6 +33,8 @@ type DeviceDailyRunningRecord struct { | ||
| 33 | UpdatedAt time.Time `json:"updatedAt"` | 33 | UpdatedAt time.Time `json:"updatedAt"` |
| 34 | // 删除时间 | 34 | // 删除时间 |
| 35 | DeletedAt time.Time `json:"deletedAt"` | 35 | DeletedAt time.Time `json:"deletedAt"` |
| 36 | + | ||
| 37 | + RedisKey string `json:"-"` | ||
| 36 | } | 38 | } |
| 37 | 39 | ||
| 38 | type DeviceDailyRunningRecordRepository interface { | 40 | type DeviceDailyRunningRecordRepository interface { |
| @@ -69,15 +71,19 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) AddDeviceRunningData(d | @@ -69,15 +71,19 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) AddDeviceRunningData(d | ||
| 69 | } | 71 | } |
| 70 | 72 | ||
| 71 | func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { | 73 | func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { |
| 72 | - return fmt.Sprintf("记录ID:%v 工段:%v 设备:%v", | 74 | + return fmt.Sprintf("记录ID:%v 工段:%v 设备:%v 数量:%v(%v)", |
| 73 | deviceDailyRunningRecord.DeviceDailyRunningRecordId, | 75 | deviceDailyRunningRecord.DeviceDailyRunningRecordId, |
| 74 | deviceDailyRunningRecord.WorkStation.SectionName, | 76 | deviceDailyRunningRecord.WorkStation.SectionName, |
| 75 | deviceDailyRunningRecord.DeviceCode, | 77 | deviceDailyRunningRecord.DeviceCode, |
| 78 | + deviceDailyRunningRecord.DeviceRunningRecordInfo.Count, | ||
| 79 | + deviceDailyRunningRecord.DeviceRunningRecordInfo.ProductDate, | ||
| 76 | ) | 80 | ) |
| 77 | } | 81 | } |
| 78 | 82 | ||
| 79 | // 设备运行记录信息 | 83 | // 设备运行记录信息 |
| 80 | type DeviceRunningRecordInfo struct { | 84 | type DeviceRunningRecordInfo struct { |
| 85 | + // 日期 | ||
| 86 | + ProductDate string `json:"productDate"` | ||
| 81 | // 设备类型 | 87 | // 设备类型 |
| 82 | DeviceType string `json:"deviceType"` | 88 | DeviceType string `json:"deviceType"` |
| 83 | // 当前状态 | 89 | // 当前状态 |
| @@ -133,7 +139,7 @@ func (d *DeviceRunningRecordInfo) AddDeviceRunningData(t time.Time, data *Device | @@ -133,7 +139,7 @@ func (d *DeviceRunningRecordInfo) AddDeviceRunningData(t time.Time, data *Device | ||
| 133 | if len(d.DeviceType) == 0 { | 139 | if len(d.DeviceType) == 0 { |
| 134 | d.DeviceType = data.DeviceType | 140 | d.DeviceType = data.DeviceType |
| 135 | } | 141 | } |
| 136 | - d.CurrentStatus = data.StartupStatus | (1 << data.ComStatus) | 142 | + d.CurrentStatus = data.StartupStatus | (data.ComStatus << 1) | (data.Alarm << 2) |
| 137 | d.ResetUpTime() | 143 | d.ResetUpTime() |
| 138 | d.Count += data.Count | 144 | d.Count += data.Count |
| 139 | //d.Temp = data.FrontTemp | 145 | //d.Temp = data.FrontTemp |
| @@ -163,6 +169,7 @@ func (d *DeviceRunningRecordInfo) AddTimeLineDeviceStatus(t time.Time, data *Dev | @@ -163,6 +169,7 @@ func (d *DeviceRunningRecordInfo) AddTimeLineDeviceStatus(t time.Time, data *Dev | ||
| 163 | } | 169 | } |
| 164 | v.UpdateUp(t, data.StartupStatus) | 170 | v.UpdateUp(t, data.StartupStatus) |
| 165 | v.UpdateCom(t, data.ComStatus) | 171 | v.UpdateCom(t, data.ComStatus) |
| 172 | + v.UpdateAlarm(t, data.Alarm) | ||
| 166 | } | 173 | } |
| 167 | 174 | ||
| 168 | // 重置运行时长 | 175 | // 重置运行时长 |
| @@ -197,9 +204,14 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string | @@ -197,9 +204,14 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string | ||
| 197 | err := make([][]int, 0) | 204 | err := make([][]int, 0) |
| 198 | var begin, end int = 0, 0 | 205 | var begin, end int = 0, 0 |
| 199 | /* | 206 | /* |
| 200 | - 1.故障: 1 0 \ 0 0 | ||
| 201 | - 2.正常: 1 1 | ||
| 202 | - 3.停机:0 1 | 207 | + 旧: 1.故障: 1 0 \ 0 0 |
| 208 | + 2.正常: 1 1 | ||
| 209 | + 3.停机:0 1 | ||
| 210 | + | ||
| 211 | + 新: 只要未开机,就是待机中状态 | ||
| 212 | + 1.故障: 1 0 0 / 1 0 1 / 1 1 1 / 1/5/7 | ||
| 213 | + 2.正常: 1 1 0 3 | ||
| 214 | + 3.停机:0 0 0 / 0 1 0 / 0 0 1 / 0 1 1 0/2/4/6 | ||
| 203 | */ | 215 | */ |
| 204 | var status = 1 | 216 | var status = 1 |
| 205 | // 添加数据 | 217 | // 添加数据 |
| @@ -225,13 +237,13 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string | @@ -225,13 +237,13 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string | ||
| 225 | if com&index > 0 { | 237 | if com&index > 0 { |
| 226 | val |= 2 | 238 | val |= 2 |
| 227 | } | 239 | } |
| 228 | - if val == 1 { | 240 | + if val == 1 || val == 5 || val == 7 { |
| 229 | return 1 //故障 | 241 | return 1 //故障 |
| 230 | } | 242 | } |
| 231 | if val == 3 { | 243 | if val == 3 { |
| 232 | return 2 //正常 | 244 | return 2 //正常 |
| 233 | } | 245 | } |
| 234 | - if val == 2 || val == 0 { | 246 | + if val == 0 || val == 2 || val == 4 || val == 6 { |
| 235 | return 3 //停机 | 247 | return 3 //停机 |
| 236 | } | 248 | } |
| 237 | return 3 // 停机 | 249 | return 3 // 停机 |
| @@ -292,6 +304,8 @@ type HourDeviceStatus struct { | @@ -292,6 +304,8 @@ type HourDeviceStatus struct { | ||
| 292 | Up int `json:"up"` | 304 | Up int `json:"up"` |
| 293 | // 通讯 | 305 | // 通讯 |
| 294 | Com int `json:"com"` | 306 | Com int `json:"com"` |
| 307 | + // 报警 | ||
| 308 | + Alarm int `json:"alarm"` | ||
| 295 | } | 309 | } |
| 296 | 310 | ||
| 297 | // 更新启动状态 | 311 | // 更新启动状态 |
| @@ -322,6 +336,20 @@ func (d *HourDeviceStatus) UpdateCom(t time.Time, c int) { | @@ -322,6 +336,20 @@ func (d *HourDeviceStatus) UpdateCom(t time.Time, c int) { | ||
| 322 | return | 336 | return |
| 323 | } | 337 | } |
| 324 | 338 | ||
| 339 | +// 更新报警状态 | ||
| 340 | +func (d *HourDeviceStatus) UpdateAlarm(t time.Time, c int) { | ||
| 341 | + m := t.Minute() | ||
| 342 | + bit := 1 << (m / d.Window) | ||
| 343 | + if c&1 == 0 { | ||
| 344 | + return | ||
| 345 | + } | ||
| 346 | + if d.Alarm&bit > 0 { | ||
| 347 | + return | ||
| 348 | + } | ||
| 349 | + d.Alarm |= bit | ||
| 350 | + return | ||
| 351 | +} | ||
| 352 | + | ||
| 325 | // 计算状态持续的时间 | 353 | // 计算状态持续的时间 |
| 326 | func (d *HourDeviceStatus) CountTime(v int) time.Duration { | 354 | func (d *HourDeviceStatus) CountTime(v int) time.Duration { |
| 327 | l := 60 / d.Window | 355 | l := 60 / d.Window |
| @@ -344,5 +372,6 @@ func NewHourDeviceStatus() *HourDeviceStatus { | @@ -344,5 +372,6 @@ func NewHourDeviceStatus() *HourDeviceStatus { | ||
| 344 | Window: DefaultTimeWindow, | 372 | Window: DefaultTimeWindow, |
| 345 | Up: 0, | 373 | Up: 0, |
| 346 | Com: 0, | 374 | Com: 0, |
| 375 | + Alarm: 0, | ||
| 347 | } | 376 | } |
| 348 | } | 377 | } |
| @@ -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 | // 匹配数目 |
| @@ -12,4 +12,6 @@ type ProductPlanExt struct { | @@ -12,4 +12,6 @@ type ProductPlanExt struct { | ||
| 12 | //ProductSpec *UnitQuantity `json:"productSpec,omitempty"` | 12 | //ProductSpec *UnitQuantity `json:"productSpec,omitempty"` |
| 13 | // 投入量规格 默认份 | 13 | // 投入量规格 默认份 |
| 14 | DevotedUnit string `json:"devotedUnit" ` | 14 | DevotedUnit string `json:"devotedUnit" ` |
| 15 | + // ERP系统里面的 bill_no | ||
| 16 | + ErpBillNo string `json:"erpBillNo" ` | ||
| 15 | } | 17 | } |
| @@ -164,7 +164,7 @@ from ts_product_list | @@ -164,7 +164,7 @@ from ts_product_list | ||
| 164 | func (dao *DeviceDailyRunningRecordDao) DeviceRunningInfo(companyId, orgId int, deviceCode string, result interface{}) error { | 164 | func (dao *DeviceDailyRunningRecordDao) DeviceRunningInfo(companyId, orgId int, deviceCode string, result interface{}) error { |
| 165 | tx := dao.transactionContext.PgTx | 165 | tx := dao.transactionContext.PgTx |
| 166 | sql := fmt.Sprintf(` | 166 | sql := fmt.Sprintf(` |
| 167 | -select * from device_running_info(?,?,?); | 167 | +select * from manufacture.device_running_info(?,?,?); |
| 168 | `) | 168 | `) |
| 169 | if _, err := tx.Query(result, sql, deviceCode, companyId, orgId); err != nil { | 169 | if _, err := tx.Query(result, sql, deviceCode, companyId, orgId); err != nil { |
| 170 | return err | 170 | return err |
| @@ -98,7 +98,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | @@ -98,7 +98,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | ||
| 98 | if record.DeviceType == domain.DeviceTypeChuanChuanJi && plan != nil && deviceRunningData.Count > 0 { | 98 | if record.DeviceType == domain.DeviceTypeChuanChuanJi && plan != nil && deviceRunningData.Count > 0 { |
| 99 | log.Logger.Debug(fmt.Sprintf("设备统计 设备:%v(%v) 当前数量:%v 增加数量:%v", | 99 | log.Logger.Debug(fmt.Sprintf("设备统计 设备:%v(%v) 当前数量:%v 增加数量:%v", |
| 100 | deviceDailyRecord.DeviceCode, | 100 | deviceDailyRecord.DeviceCode, |
| 101 | - deviceDailyRecord.ProductDate.Local().Format("2006-01-02"), | 101 | + deviceDailyRecord.DeviceRunningRecordInfo.ProductDate, |
| 102 | deviceRunningRecord.DeviceRunningRecordInfo.TodayTotal, | 102 | deviceRunningRecord.DeviceRunningRecordInfo.TodayTotal, |
| 103 | deviceRunningRecord.DeviceRunningRecordInfo.Count)) | 103 | deviceRunningRecord.DeviceRunningRecordInfo.Count)) |
| 104 | productRecord, _ := ptr.newProductRecord(companyId, orgId, workStation, device, deviceRunningData, plan) | 104 | productRecord, _ := ptr.newProductRecord(companyId, orgId, workStation, device, deviceRunningData, plan) |
| @@ -110,19 +110,20 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | @@ -110,19 +110,20 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | ||
| 110 | SendProductRecordStaticsJob(productRecord) | 110 | SendProductRecordStaticsJob(productRecord) |
| 111 | } | 111 | } |
| 112 | } | 112 | } |
| 113 | - if err = redis.SaveDeviceDailyRunningRecord(deviceDailyRecord); err != nil { | 113 | + if err = redis.SaveDeviceDailyRunningRecordByKey(deviceDailyRecord.RedisKey, deviceDailyRecord); err != nil { |
| 114 | return nil, err | 114 | return nil, err |
| 115 | } | 115 | } |
| 116 | return nil, nil | 116 | return nil, nil |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | +// 设备运行数据 | ||
| 119 | func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.DeviceCollection) (*domain.DeviceRunningData, error) { | 120 | func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.DeviceCollection) (*domain.DeviceRunningData, error) { |
| 120 | var err error | 121 | var err error |
| 121 | var unitQuantity float64 = DefaultCCJUnitQuantity // 单位数量 | 122 | var unitQuantity float64 = DefaultCCJUnitQuantity // 单位数量 |
| 122 | var data = &domain.DeviceRunningData{ | 123 | var data = &domain.DeviceRunningData{ |
| 123 | DeviceCollectionId: record.DeviceCollectionId, | 124 | DeviceCollectionId: record.DeviceCollectionId, |
| 124 | WorkShopName: record.WorkShopName, | 125 | WorkShopName: record.WorkShopName, |
| 125 | - CollectionTime: record.CollectionTime, | 126 | + CollectionTime: record.CollectionTime.Local(), |
| 126 | DeviceCode: record.DeviceSn, | 127 | DeviceCode: record.DeviceSn, |
| 127 | DeviceType: record.DeviceType, | 128 | DeviceType: record.DeviceType, |
| 128 | StartupStatus: int(record.StartupStatus), | 129 | StartupStatus: int(record.StartupStatus), |
| @@ -160,6 +161,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | @@ -160,6 +161,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | ||
| 160 | } | 161 | } |
| 161 | data.Temp1 = utils.Truncate(deviceYouZhaJi.FrontTemp, 1) | 162 | data.Temp1 = utils.Truncate(deviceYouZhaJi.FrontTemp, 1) |
| 162 | data.Temp2 = utils.Truncate(deviceYouZhaJi.BackTemp, 1) | 163 | data.Temp2 = utils.Truncate(deviceYouZhaJi.BackTemp, 1) |
| 164 | + data.Alarm = deviceYouZhaJi.Alarm | ||
| 163 | } else { | 165 | } else { |
| 164 | deviceYouZhaJi := &domain.DeviceYouZhaJi2{} | 166 | deviceYouZhaJi := &domain.DeviceYouZhaJi2{} |
| 165 | err = json.Unmarshal(mBytes, deviceYouZhaJi) | 167 | err = json.Unmarshal(mBytes, deviceYouZhaJi) |
| @@ -168,6 +170,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | @@ -168,6 +170,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | ||
| 168 | } | 170 | } |
| 169 | data.Temp1 = utils.Truncate(deviceYouZhaJi.Temp1, 1) | 171 | data.Temp1 = utils.Truncate(deviceYouZhaJi.Temp1, 1) |
| 170 | data.Temp2 = utils.Truncate(deviceYouZhaJi.Temp2, 1) | 172 | data.Temp2 = utils.Truncate(deviceYouZhaJi.Temp2, 1) |
| 173 | + data.Alarm = deviceYouZhaJi.Alarm | ||
| 171 | } | 174 | } |
| 172 | break | 175 | break |
| 173 | //串串机 | 176 | //串串机 |
| @@ -193,6 +196,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | @@ -193,6 +196,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | ||
| 193 | break | 196 | break |
| 194 | } | 197 | } |
| 195 | data.Temp1 = utils.Truncate(deviceSuDongXian.CurrTemp, 1) | 198 | data.Temp1 = utils.Truncate(deviceSuDongXian.CurrTemp, 1) |
| 199 | + data.Alarm = deviceSuDongXian.Alarm | ||
| 196 | break | 200 | break |
| 197 | //封口机 | 201 | //封口机 |
| 198 | case domain.DeviceTypeFengKouJi: | 202 | case domain.DeviceTypeFengKouJi: |
| @@ -231,6 +235,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | @@ -231,6 +235,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev | ||
| 231 | return data, nil | 235 | return data, nil |
| 232 | } | 236 | } |
| 233 | 237 | ||
| 238 | +// 设备运行记录 | ||
| 234 | func (ptr *PGWorkshopDataConsumeService) newDeviceRunningRecord(companyId, orgId int, workStation *domain.WorkStation, device *domain.Device, data *domain.DeviceRunningData) (*domain.DeviceRunningRecord, error) { | 239 | func (ptr *PGWorkshopDataConsumeService) newDeviceRunningRecord(companyId, orgId int, workStation *domain.WorkStation, device *domain.Device, data *domain.DeviceRunningData) (*domain.DeviceRunningRecord, error) { |
| 235 | return &domain.DeviceRunningRecord{ | 240 | return &domain.DeviceRunningRecord{ |
| 236 | CompanyId: companyId, | 241 | CompanyId: companyId, |
| @@ -239,10 +244,11 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningRecord(companyId, orgId | @@ -239,10 +244,11 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningRecord(companyId, orgId | ||
| 239 | DeviceId: device.DeviceId, | 244 | DeviceId: device.DeviceId, |
| 240 | DeviceCode: device.DeviceCode, | 245 | DeviceCode: device.DeviceCode, |
| 241 | DeviceRunningRecordInfo: data, | 246 | DeviceRunningRecordInfo: data, |
| 242 | - CreatedAt: data.CollectionTime, | 247 | + CreatedAt: data.CollectionTime.Local(), |
| 243 | }, nil | 248 | }, nil |
| 244 | } | 249 | } |
| 245 | 250 | ||
| 251 | +// 生产记录 | ||
| 246 | func (ptr *PGWorkshopDataConsumeService) newProductRecord(companyId int, orgId int, workStation *domain.WorkStation, device *domain.Device, data *domain.DeviceRunningData, plan *domain.ProductPlanDispatchRecord) (*domain.ProductRecord, error) { | 252 | func (ptr *PGWorkshopDataConsumeService) newProductRecord(companyId int, orgId int, workStation *domain.WorkStation, device *domain.Device, data *domain.DeviceRunningData, plan *domain.ProductPlanDispatchRecord) (*domain.ProductRecord, error) { |
| 247 | result := &domain.ProductRecord{ | 253 | result := &domain.ProductRecord{ |
| 248 | CompanyId: companyId, | 254 | CompanyId: companyId, |
| @@ -250,7 +256,7 @@ func (ptr *PGWorkshopDataConsumeService) newProductRecord(companyId int, orgId i | @@ -250,7 +256,7 @@ func (ptr *PGWorkshopDataConsumeService) newProductRecord(companyId int, orgId i | ||
| 250 | WorkStation: workStation, | 256 | WorkStation: workStation, |
| 251 | ProductRecordType: domain.RecordTypeWeigh, | 257 | ProductRecordType: domain.RecordTypeWeigh, |
| 252 | ProductWorker: &domain.User{}, | 258 | ProductWorker: &domain.User{}, |
| 253 | - CreatedAt: data.CollectionTime, | 259 | + CreatedAt: data.CollectionTime.Local(), |
| 254 | UpdatedAt: time.Now(), | 260 | UpdatedAt: time.Now(), |
| 255 | ProductRecordInfo: &domain.ProductRecordInfo{ | 261 | ProductRecordInfo: &domain.ProductRecordInfo{ |
| 256 | ProductDate: data.CollectionTime.Local().Format("2006-01-02"), | 262 | ProductDate: data.CollectionTime.Local().Format("2006-01-02"), |
| @@ -279,31 +285,33 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | @@ -279,31 +285,33 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | ||
| 279 | if record, err = deviceDailyRunningRecordRepository.FindOne(map[string]interface{}{ | 285 | if record, err = deviceDailyRunningRecordRepository.FindOne(map[string]interface{}{ |
| 280 | "workStationId": workStation.WorkStationId, | 286 | "workStationId": workStation.WorkStationId, |
| 281 | "deviceCode": data.DeviceCode, | 287 | "deviceCode": data.DeviceCode, |
| 282 | - "productDate": utils.GetZeroTime(data.CollectionTime), | 288 | + "productDate": utils.GetZeroTime(data.CollectionTime.Local()), |
| 283 | }); err != nil { | 289 | }); err != nil { |
| 284 | if err != domain.ErrorNotFound { | 290 | if err != domain.ErrorNotFound { |
| 285 | return nil, err | 291 | return nil, err |
| 286 | } | 292 | } |
| 287 | } | 293 | } |
| 288 | if record != nil { | 294 | if record != nil { |
| 289 | - | 295 | + record.RedisKey = redis.DeviceDailyRunningRecordKeyByTimeStr(record.DeviceRunningRecordInfo.ProductDate, record.DeviceCode) |
| 290 | return record, nil | 296 | return record, nil |
| 291 | } | 297 | } |
| 292 | recordInfo := domain.NewDeviceRunningRecordInfo() | 298 | recordInfo := domain.NewDeviceRunningRecordInfo() |
| 293 | recordInfo.ProductPlanId = planId | 299 | recordInfo.ProductPlanId = planId |
| 294 | recordInfo.DeviceName = device.DeviceName | 300 | recordInfo.DeviceName = device.DeviceName |
| 295 | recordInfo.OrgName = device.Ext.OrgName | 301 | recordInfo.OrgName = device.Ext.OrgName |
| 302 | + recordInfo.ProductDate = data.CollectionTime.Local().Format("2006-01-02") | ||
| 296 | record = &domain.DeviceDailyRunningRecord{ | 303 | record = &domain.DeviceDailyRunningRecord{ |
| 297 | CompanyId: companyId, | 304 | CompanyId: companyId, |
| 298 | OrgId: orgId, | 305 | OrgId: orgId, |
| 299 | WorkStation: workStation, | 306 | WorkStation: workStation, |
| 300 | DeviceId: device.DeviceId, | 307 | DeviceId: device.DeviceId, |
| 301 | DeviceCode: device.DeviceCode, | 308 | DeviceCode: device.DeviceCode, |
| 302 | - ProductDate: utils.GetZeroTime(data.CollectionTime), | 309 | + ProductDate: utils.GetZeroTime(data.CollectionTime.Local()), |
| 303 | DeviceRunningRecordInfo: recordInfo, | 310 | DeviceRunningRecordInfo: recordInfo, |
| 304 | - CreatedAt: data.CollectionTime, | 311 | + CreatedAt: data.CollectionTime.Local(), |
| 305 | UpdatedAt: time.Now(), | 312 | UpdatedAt: time.Now(), |
| 306 | } | 313 | } |
| 314 | + record.RedisKey = redis.DeviceDailyRunningRecordKeyByTimeStr(record.DeviceRunningRecordInfo.ProductDate, record.DeviceCode) | ||
| 307 | if record, err = deviceDailyRunningRecordRepository.Save(record); err != nil { | 315 | if record, err = deviceDailyRunningRecordRepository.Save(record); err != nil { |
| 308 | return nil, err | 316 | return nil, err |
| 309 | } | 317 | } |
| @@ -14,8 +14,9 @@ import ( | @@ -14,8 +14,9 @@ import ( | ||
| 14 | func GetDeviceDailyRunningRecord(t time.Time, deviceCode string) (*domain.DeviceDailyRunningRecord, error) { | 14 | func GetDeviceDailyRunningRecord(t time.Time, deviceCode string) (*domain.DeviceDailyRunningRecord, error) { |
| 15 | client := GetRedis() | 15 | client := GetRedis() |
| 16 | key := DeviceDailyRunningRecordKey(t, deviceCode) | 16 | key := DeviceDailyRunningRecordKey(t, deviceCode) |
| 17 | - log.Logger.Debug(fmt.Sprintf("Redis Device:%v GET Key:%v", deviceCode, key)) | ||
| 18 | - return getDeviceDailyRunningRecord(client, key) | 17 | + record, err := getDeviceDailyRunningRecord(client, key) |
| 18 | + log.Logger.Debug(fmt.Sprintf("Redis Device:%v GET Key:%v Value:%v", deviceCode, key, record)) | ||
| 19 | + return record, err | ||
| 19 | } | 20 | } |
| 20 | 21 | ||
| 21 | func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.DeviceDailyRunningRecord, error) { | 22 | func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.DeviceDailyRunningRecord, error) { |
| @@ -25,6 +26,7 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | @@ -25,6 +26,7 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | ||
| 25 | return nil, domain.ErrorNotFound | 26 | return nil, domain.ErrorNotFound |
| 26 | } | 27 | } |
| 27 | var record = &domain.DeviceDailyRunningRecord{} | 28 | var record = &domain.DeviceDailyRunningRecord{} |
| 29 | + record.RedisKey = key | ||
| 28 | if err = json.Unmarshal(data, record); err != nil { | 30 | if err = json.Unmarshal(data, record); err != nil { |
| 29 | return nil, err | 31 | return nil, err |
| 30 | } | 32 | } |
| @@ -32,16 +34,28 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | @@ -32,16 +34,28 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | ||
| 32 | } | 34 | } |
| 33 | 35 | ||
| 34 | // 保存每日设备运行数据 | 36 | // 保存每日设备运行数据 |
| 35 | -func SaveDeviceDailyRunningRecord(record *domain.DeviceDailyRunningRecord) error { | 37 | +func SaveDeviceDailyRunningRecord(t time.Time, record *domain.DeviceDailyRunningRecord) error { |
| 36 | client := GetRedis() | 38 | client := GetRedis() |
| 37 | - key := DeviceDailyRunningRecordKey(record.ProductDate, record.DeviceCode) | ||
| 38 | - log.Logger.Debug(fmt.Sprintf("Redis Device:%v SET Key:%v Count:%v", record.DeviceCode, key, record.DeviceRunningRecordInfo.Count)) | 39 | + key := DeviceDailyRunningRecordKey(t, record.DeviceCode) |
| 39 | recordData, err := json.Marshal(record) | 40 | recordData, err := json.Marshal(record) |
| 40 | result := client.Set(key, recordData, time.Hour*24*5) | 41 | result := client.Set(key, recordData, time.Hour*24*5) |
| 41 | _, err = result.Result() | 42 | _, err = result.Result() |
| 42 | return err | 43 | return err |
| 43 | } | 44 | } |
| 44 | 45 | ||
| 46 | +// 保存每日设备运行数据 - 按键值 | ||
| 47 | +func SaveDeviceDailyRunningRecordByKey(key string, record *domain.DeviceDailyRunningRecord) error { | ||
| 48 | + client := GetRedis() | ||
| 49 | + recordData, err := json.Marshal(record) | ||
| 50 | + if err != nil { | ||
| 51 | + return err | ||
| 52 | + } | ||
| 53 | + log.Logger.Debug(fmt.Sprintf("Redis Device:%v SET Key:%v Value:%v", record.DeviceCode, key, record)) | ||
| 54 | + result := client.Set(key, recordData, time.Hour*24*5) | ||
| 55 | + _, err = result.Result() | ||
| 56 | + return err | ||
| 57 | +} | ||
| 58 | + | ||
| 45 | // 保存每日设备运行数据 | 59 | // 保存每日设备运行数据 |
| 46 | func RemoveDeviceDailyRunningRecord(t time.Time, deviceCode string) error { | 60 | func RemoveDeviceDailyRunningRecord(t time.Time, deviceCode string) error { |
| 47 | client := GetRedis() | 61 | client := GetRedis() |
| @@ -51,11 +65,25 @@ func RemoveDeviceDailyRunningRecord(t time.Time, deviceCode string) error { | @@ -51,11 +65,25 @@ func RemoveDeviceDailyRunningRecord(t time.Time, deviceCode string) error { | ||
| 51 | return err | 65 | return err |
| 52 | } | 66 | } |
| 53 | 67 | ||
| 68 | +// 保存每日设备运行数据 | ||
| 69 | +func RemoveDeviceDailyRunningRecordByKey(key string) error { | ||
| 70 | + client := GetRedis() | ||
| 71 | + //key := DeviceDailyRunningRecordKey(t, deviceCode) | ||
| 72 | + result := client.Del(key) | ||
| 73 | + _, err := result.Result() | ||
| 74 | + return err | ||
| 75 | +} | ||
| 76 | + | ||
| 54 | func DeviceDailyRunningRecordKey(t time.Time, deviceCode string) string { | 77 | func DeviceDailyRunningRecordKey(t time.Time, deviceCode string) string { |
| 55 | str := fmt.Sprintf("%v:device-daily-record:%v-%v:%v:%v", constant.CACHE_PREFIX, constant.MANUFACTURE_DEFAULT_COMPANYID, constant.MANUFACTURE_DEFAULT_ORGID, t.Local().Format("2006-01-02"), deviceCode) | 78 | str := fmt.Sprintf("%v:device-daily-record:%v-%v:%v:%v", constant.CACHE_PREFIX, constant.MANUFACTURE_DEFAULT_COMPANYID, constant.MANUFACTURE_DEFAULT_ORGID, t.Local().Format("2006-01-02"), deviceCode) |
| 56 | return str | 79 | return str |
| 57 | } | 80 | } |
| 58 | 81 | ||
| 82 | +func DeviceDailyRunningRecordKeyByTimeStr(timeStr string, deviceCode string) string { | ||
| 83 | + str := fmt.Sprintf("%v:device-daily-record:%v-%v:%v:%v", constant.CACHE_PREFIX, constant.MANUFACTURE_DEFAULT_COMPANYID, constant.MANUFACTURE_DEFAULT_ORGID, timeStr, deviceCode) | ||
| 84 | + return str | ||
| 85 | +} | ||
| 86 | + | ||
| 59 | // 获取设备每日所有数据记录 | 87 | // 获取设备每日所有数据记录 |
| 60 | func GetDeviceDailyAllRecord(t time.Time) ([]*domain.DeviceDailyRunningRecord, error) { | 88 | func GetDeviceDailyAllRecord(t time.Time) ([]*domain.DeviceDailyRunningRecord, error) { |
| 61 | client := GetRedis() | 89 | client := GetRedis() |
| @@ -70,6 +98,7 @@ func GetDeviceDailyAllRecord(t time.Time) ([]*domain.DeviceDailyRunningRecord, e | @@ -70,6 +98,7 @@ func GetDeviceDailyAllRecord(t time.Time) ([]*domain.DeviceDailyRunningRecord, e | ||
| 70 | if err != nil { | 98 | if err != nil { |
| 71 | return nil, err | 99 | return nil, err |
| 72 | } | 100 | } |
| 101 | + record.RedisKey = v | ||
| 73 | records = append(records, record) | 102 | records = append(records, record) |
| 74 | } | 103 | } |
| 75 | return records, nil | 104 | return records, nil |
| @@ -151,6 +151,12 @@ func (repository *ProductPlanRepository) FindOne(queryOptions map[string]interfa | @@ -151,6 +151,12 @@ func (repository *ProductPlanRepository) FindOne(queryOptions map[string]interfa | ||
| 151 | query.SetWhereByQueryOption("company_id = ?", "companyId") | 151 | query.SetWhereByQueryOption("company_id = ?", "companyId") |
| 152 | query.SetWhereByQueryOption("org_id = ?", "orgId") | 152 | query.SetWhereByQueryOption("org_id = ?", "orgId") |
| 153 | query.SetWhereByQueryOption("batch_number=?", "batchNumber") | 153 | query.SetWhereByQueryOption("batch_number=?", "batchNumber") |
| 154 | + if v, ok := queryOptions["erpBillNo"]; ok && len(v.(string)) > 0 { | ||
| 155 | + query.Where(fmt.Sprintf(`ext#>'{productPlanExt,erpBillNo}' = '"%v"'`, v)) | ||
| 156 | + } | ||
| 157 | + if v, ok := queryOptions["productCode"]; ok && len(v.(string)) > 0 { | ||
| 158 | + query.Where(fmt.Sprintf(`ext#>'{productPlanExt,productCode}' = '"%v"'`, v)) | ||
| 159 | + } | ||
| 154 | if v, ok := queryOptions["includeDeleted"]; ok && v.(bool) { | 160 | if v, ok := queryOptions["includeDeleted"]; ok && v.(bool) { |
| 155 | query.AllWithDeleted() | 161 | query.AllWithDeleted() |
| 156 | } | 162 | } |
| @@ -181,6 +187,12 @@ func (repository *ProductPlanRepository) Find(queryOptions map[string]interface{ | @@ -181,6 +187,12 @@ func (repository *ProductPlanRepository) Find(queryOptions map[string]interface{ | ||
| 181 | if v, ok := queryOptions["workshopName"]; ok && len(v.(string)) > 0 { | 187 | if v, ok := queryOptions["workshopName"]; ok && len(v.(string)) > 0 { |
| 182 | query.Where(fmt.Sprintf(`workshop->>'workshopName' like '%%%v%%'`, v)) | 188 | query.Where(fmt.Sprintf(`workshop->>'workshopName' like '%%%v%%'`, v)) |
| 183 | } | 189 | } |
| 190 | + if v, ok := queryOptions["erpBillNo"]; ok && len(v.(string)) > 0 { | ||
| 191 | + query.Where(fmt.Sprintf(`ext#>'{productPlanExt,erpBillNo}' = '"%v"'`, v)) | ||
| 192 | + } | ||
| 193 | + if v, ok := queryOptions["productCode"]; ok && len(v.(string)) > 0 { | ||
| 194 | + query.Where(fmt.Sprintf(`ext#>'{productPlanExt,productCode}' = '"%v"'`, v)) | ||
| 195 | + } | ||
| 184 | query.SetWhereByQueryOption("plan_status=?", "planStatus") | 196 | query.SetWhereByQueryOption("plan_status=?", "planStatus") |
| 185 | query.SetOffsetAndLimit(domain.MaxQueryRow) | 197 | query.SetOffsetAndLimit(domain.MaxQueryRow) |
| 186 | query.SetOrderDirect("product_plan_id", "DESC") | 198 | query.SetOrderDirect("product_plan_id", "DESC") |
pkg/infrastructure/utils/time_test.go
0 → 100644
| 1 | +package utils | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "github.com/linmadan/egglib-go/utils/json" | ||
| 6 | + "testing" | ||
| 7 | + "time" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type User struct { | ||
| 11 | + Age time.Time | ||
| 12 | + AgeZero time.Time | ||
| 13 | + AgeZeroFormat string | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +func TestTimeParseInLocal(t *testing.T) { | ||
| 17 | + timeStr := "2022-01-02 1:00:00" | ||
| 18 | + tl, _ := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local) | ||
| 19 | + u1 := User{ | ||
| 20 | + Age: tl, | ||
| 21 | + AgeZero: GetZeroTime(tl), | ||
| 22 | + } | ||
| 23 | + u1.AgeZeroFormat = u1.AgeZero.Format("2006-01-02") | ||
| 24 | + | ||
| 25 | + fmt.Println(json.MarshalToString(u1), u1.Age.Local()) | ||
| 26 | + timeMarsh(&u1) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func timeMarsh(u *User) { | ||
| 30 | + var u2 = &User{} | ||
| 31 | + u1Data, _ := json.Marshal(u) | ||
| 32 | + json.Unmarshal(u1Data, u2) | ||
| 33 | + | ||
| 34 | + fmt.Println("时间:", u2.Age, u2.Age.Local(), u2.AgeZero) | ||
| 35 | +} |
| @@ -55,7 +55,7 @@ func TestComputeTimeDuration(t *testing.T) { | @@ -55,7 +55,7 @@ func TestComputeTimeDuration(t *testing.T) { | ||
| 55 | } | 55 | } |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | -const TIME_LAYOUT = "2006-01-02 03:04:05" | 58 | +const TIME_LAYOUT = "2006-01-02 15:04:05" |
| 59 | 59 | ||
| 60 | func TestTimeParse(t *testing.T) { | 60 | func TestTimeParse(t *testing.T) { |
| 61 | fmt.Println(int(-1)) | 61 | fmt.Println(int(-1)) |
| @@ -64,11 +64,13 @@ func TestTimeParse(t *testing.T) { | @@ -64,11 +64,13 @@ func TestTimeParse(t *testing.T) { | ||
| 64 | 64 | ||
| 65 | func timeParse() { | 65 | func timeParse() { |
| 66 | fmt.Println("0. now: ", time.Now()) | 66 | fmt.Println("0. now: ", time.Now()) |
| 67 | - str := "2018-09-10 10:00:00" | 67 | + str := "2018-09-10 16:00:00" |
| 68 | fmt.Println("1. str: ", str) | 68 | fmt.Println("1. str: ", str) |
| 69 | - t, _ := time.Parse(TIME_LAYOUT, str) | ||
| 70 | - fmt.Println("2. Parse time: ", t) | 69 | + t, err := time.Parse(TIME_LAYOUT, str) |
| 70 | + fmt.Println("2. Parse time: ", t, err) | ||
| 71 | fmt.Println("2.1. Parse time: ", t.Local(), t.Local().Local()) | 71 | fmt.Println("2.1. Parse time: ", t.Local(), t.Local().Local()) |
| 72 | + parseInLocal, _ := time.ParseInLocation(TIME_LAYOUT, str, time.Local) | ||
| 73 | + fmt.Println("2.2 parse in local", parseInLocal, parseInLocal.Local()) | ||
| 72 | tStr := t.Format(TIME_LAYOUT) | 74 | tStr := t.Format(TIME_LAYOUT) |
| 73 | fmt.Println("3. Format time str: ", tStr) | 75 | fmt.Println("3. Format time str: ", tStr) |
| 74 | name, offset := t.Zone() | 76 | name, offset := t.Zone() |
| @@ -119,6 +119,31 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) | @@ -119,6 +119,31 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) | ||
| 119 | } | 119 | } |
| 120 | Response(ctx, response, nil) | 120 | Response(ctx, response, nil) |
| 121 | break | 121 | break |
| 122 | + case "10": | ||
| 123 | + t := ctx.Input.Query("t") | ||
| 124 | + c, _ := strconv.Atoi(ctx.Input.Query("c")) | ||
| 125 | + if len(t) != 0 { | ||
| 126 | + if v, err := time.ParseInLocation("2006-01-02 - 15:04:05", t, time.UTC); err == nil { | ||
| 127 | + domainService.SendWorkshopDeviceData(&domain.DeviceCollection{ | ||
| 128 | + DeviceCollectionId: time.Now().Unix(), | ||
| 129 | + WorkShopName: "NG", | ||
| 130 | + CollectionTime: v, | ||
| 131 | + DeviceSn: "CCJ1", | ||
| 132 | + DeviceType: "CCJ", | ||
| 133 | + StartupStatus: 1, | ||
| 134 | + ComStatus: 1, | ||
| 135 | + ProductCount: c, | ||
| 136 | + Values: map[string]interface{}{ | ||
| 137 | + "Count": c, | ||
| 138 | + "Year": 2022, | ||
| 139 | + "Month": 3, | ||
| 140 | + "Day": 8, | ||
| 141 | + "ProductType": 2, | ||
| 142 | + }, | ||
| 143 | + LatestUpdateTime: time.Now(), | ||
| 144 | + }) | ||
| 145 | + } | ||
| 146 | + } | ||
| 122 | } | 147 | } |
| 123 | Response(ctx, nil, nil) | 148 | Response(ctx, nil, nil) |
| 124 | } | 149 | } |
| @@ -22,13 +22,14 @@ func Start(log logimp.Logger) { | @@ -22,13 +22,14 @@ func Start(log logimp.Logger) { | ||
| 22 | 22 | ||
| 23 | func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { | 23 | func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { |
| 24 | payload := make(map[string]interface{}) | 24 | payload := make(map[string]interface{}) |
| 25 | + var collectionTime time.Time | ||
| 25 | err := json.Unmarshal(message.Payload(), &payload) | 26 | err := json.Unmarshal(message.Payload(), &payload) |
| 26 | if err != nil { | 27 | if err != nil { |
| 27 | log.Logger.Error("车间数据json解析失败:" + err.Error()) | 28 | log.Logger.Error("车间数据json解析失败:" + err.Error()) |
| 28 | return | 29 | return |
| 29 | } | 30 | } |
| 30 | if workShop, ok := payload["WorkShop"]; ok { | 31 | if workShop, ok := payload["WorkShop"]; ok { |
| 31 | - var collectionTime time.Time | 32 | + |
| 32 | if t, ok := payload["UpTime"]; ok { | 33 | if t, ok := payload["UpTime"]; ok { |
| 33 | collectionTime, _ = time.ParseInLocation("2006-01-02 - 15:04:05", t.(string), time.Local) | 34 | collectionTime, _ = time.ParseInLocation("2006-01-02 - 15:04:05", t.(string), time.Local) |
| 34 | } | 35 | } |
| @@ -153,7 +154,7 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { | @@ -153,7 +154,7 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { | ||
| 153 | } | 154 | } |
| 154 | //TODO:日志先注释 | 155 | //TODO:日志先注释 |
| 155 | if err == nil { | 156 | if err == nil { |
| 156 | - log.Logger.Info("MQTT", map[string]interface{}{ | 157 | + log.Logger.Info(fmt.Sprintf("MQTT:%v", collectionTime), map[string]interface{}{ |
| 157 | "Topic": message.Topic(), | 158 | "Topic": message.Topic(), |
| 158 | "MessageId": message.MessageID(), | 159 | "MessageId": message.MessageID(), |
| 159 | "Message": payload, | 160 | "Message": payload, |
| @@ -19,7 +19,7 @@ func WorkshopDataConsumer(c context.Context, t *asynq.Task) error { | @@ -19,7 +19,7 @@ func WorkshopDataConsumer(c context.Context, t *asynq.Task) error { | ||
| 19 | return err | 19 | return err |
| 20 | } | 20 | } |
| 21 | log.Logger.Debug(fmt.Sprintf("【车间数据消费】 消费 设备:%v 消息号:%v 时间:%v ", cmd.DeviceCollection.DeviceSn, cmd.DeviceCollectionId, cmd.CollectionTime), | 21 | log.Logger.Debug(fmt.Sprintf("【车间数据消费】 消费 设备:%v 消息号:%v 时间:%v ", cmd.DeviceCollection.DeviceSn, cmd.DeviceCollectionId, cmd.CollectionTime), |
| 22 | - map[string]interface{}{"p-message": cmd.DeviceCollection}) | 22 | + map[string]interface{}{"p-message": string(t.Payload())}) |
| 23 | cmd.CompanyId = constant.MANUFACTURE_DEFAULT_COMPANYID | 23 | cmd.CompanyId = constant.MANUFACTURE_DEFAULT_COMPANYID |
| 24 | cmd.OrgId = constant.MANUFACTURE_DEFAULT_ORGID | 24 | cmd.OrgId = constant.MANUFACTURE_DEFAULT_ORGID |
| 25 | _, err := svr.WorkshopConsume(cmd) | 25 | _, err := svr.WorkshopConsume(cmd) |
-
请 注册 或 登录 后发表评论