正在显示
11 个修改的文件
包含
84 行增加
和
20 行删除
@@ -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.SaveDeviceDailyRunningRecord(v.ProductDate, 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 | } |
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") != "" { |
@@ -78,6 +78,8 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { | @@ -78,6 +78,8 @@ func (deviceDailyRunningRecord *DeviceDailyRunningRecord) String() string { | ||
78 | 78 | ||
79 | // 设备运行记录信息 | 79 | // 设备运行记录信息 |
80 | type DeviceRunningRecordInfo struct { | 80 | type DeviceRunningRecordInfo struct { |
81 | + // 日期 | ||
82 | + ProductDate string `json:"productDate"` | ||
81 | // 设备类型 | 83 | // 设备类型 |
82 | DeviceType string `json:"deviceType"` | 84 | DeviceType string `json:"deviceType"` |
83 | // 当前状态 | 85 | // 当前状态 |
@@ -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 |
@@ -110,7 +110,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d | @@ -110,7 +110,7 @@ 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.SaveDeviceDailyRunningRecord(deviceRunningData.CollectionTime, deviceDailyRecord); err != nil { |
114 | return nil, err | 114 | return nil, err |
115 | } | 115 | } |
116 | return nil, nil | 116 | return nil, nil |
@@ -293,6 +293,7 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | @@ -293,6 +293,7 @@ func (ptr *PGWorkshopDataConsumeService) saveDeviceDailyRunningRecord(companyId, | ||
293 | recordInfo.ProductPlanId = planId | 293 | recordInfo.ProductPlanId = planId |
294 | recordInfo.DeviceName = device.DeviceName | 294 | recordInfo.DeviceName = device.DeviceName |
295 | recordInfo.OrgName = device.Ext.OrgName | 295 | recordInfo.OrgName = device.Ext.OrgName |
296 | + recordInfo.ProductDate = data.CollectionTime.Format("2006-01-02") | ||
296 | record = &domain.DeviceDailyRunningRecord{ | 297 | record = &domain.DeviceDailyRunningRecord{ |
297 | CompanyId: companyId, | 298 | CompanyId: companyId, |
298 | OrgId: orgId, | 299 | OrgId: orgId, |
@@ -32,9 +32,9 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | @@ -32,9 +32,9 @@ func getDeviceDailyRunningRecord(client *redis.Client, key string) (*domain.Devi | ||
32 | } | 32 | } |
33 | 33 | ||
34 | // 保存每日设备运行数据 | 34 | // 保存每日设备运行数据 |
35 | -func SaveDeviceDailyRunningRecord(record *domain.DeviceDailyRunningRecord) error { | 35 | +func SaveDeviceDailyRunningRecord(t time.Time, record *domain.DeviceDailyRunningRecord) error { |
36 | client := GetRedis() | 36 | client := GetRedis() |
37 | - key := DeviceDailyRunningRecordKey(record.ProductDate, record.DeviceCode) | 37 | + key := DeviceDailyRunningRecordKey(t, record.DeviceCode) |
38 | log.Logger.Debug(fmt.Sprintf("Redis Device:%v SET Key:%v Count:%v", record.DeviceCode, key, record.DeviceRunningRecordInfo.Count)) | 38 | log.Logger.Debug(fmt.Sprintf("Redis Device:%v SET Key:%v Count:%v", record.DeviceCode, key, record.DeviceRunningRecordInfo.Count)) |
39 | recordData, err := json.Marshal(record) | 39 | recordData, err := json.Marshal(record) |
40 | result := client.Set(key, recordData, time.Hour*24*5) | 40 | result := client.Set(key, recordData, time.Hour*24*5) |
@@ -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 | + | ||
27 | + u2 := User{ | ||
28 | + Age: tl, | ||
29 | + AgeZero: GetZeroTimeWithLocal(tl, time.Local), | ||
30 | + } | ||
31 | + u2.AgeZeroFormat = u2.AgeZero.Format("2006-01-02") | ||
32 | + | ||
33 | + fmt.Println(json.MarshalToString(u2), u2.Age.Local()) | ||
34 | +} |
@@ -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() |
-
请 注册 或 登录 后发表评论