作者 yangfu

fix: 1.数据同步修改

@@ -42,6 +42,8 @@ type SearchEmployeeAttendanceQuery struct { @@ -42,6 +42,8 @@ type SearchEmployeeAttendanceQuery struct {
42 BeginTime string `cname:"开始时间" json:"beginTime"` 42 BeginTime string `cname:"开始时间" json:"beginTime"`
43 // 结束时间 43 // 结束时间
44 EndTime string `cname:"结束时间" json:"endTime"` 44 EndTime string `cname:"结束时间" json:"endTime"`
  45 + // 考勤状态 1.未审核 2:已审核 3.自动审核
  46 + InAttendanceStatus []int `cname:"考勤状态 1.未审核 2:已审核 3.自动审核" json:"inAttendanceStatus,omitempty"`
45 47
46 // 开始时间 48 // 开始时间
47 SignBeginTime time.Time `cname:"开始时间" json:"signBeginTime"` 49 SignBeginTime time.Time `cname:"开始时间" json:"signBeginTime"`
@@ -69,7 +71,8 @@ func (cmd *SearchEmployeeAttendanceQuery) Valid(validation *validation.Validatio @@ -69,7 +71,8 @@ func (cmd *SearchEmployeeAttendanceQuery) Valid(validation *validation.Validatio
69 cmd.SignEndTime = cmd.SignEndTime.Add(time.Hour * 24) 71 cmd.SignEndTime = cmd.SignEndTime.Add(time.Hour * 24)
70 } 72 }
71 } 73 }
72 - cmd.AttendanceStatus = 6 // 审核 + 自动审核 74 + //cmd.AttendanceStatus = 6 // 审核 + 自动审核
  75 + cmd.InAttendanceStatus = []int{2, 3}
73 } 76 }
74 77
75 func (cmd *SearchEmployeeAttendanceQuery) ValidateQuery() error { 78 func (cmd *SearchEmployeeAttendanceQuery) ValidateQuery() error {
@@ -47,7 +47,7 @@ func (crontabService *CrontabService) initTask() { @@ -47,7 +47,7 @@ func (crontabService *CrontabService) initTask() {
47 task.AddTask("autoFlushDeviceDailyRunningRecord", autoFlushDeviceDailyRunningRecord) 47 task.AddTask("autoFlushDeviceDailyRunningRecord", autoFlushDeviceDailyRunningRecord)
48 48
49 autoFlushDeviceDailyRunningRecordOEE := task.NewTask("定时刷新设备每日运行记录-OEE", "0 */10 * * * *", AutoFlushDeviceDailyRunningRecordOEE) 49 autoFlushDeviceDailyRunningRecordOEE := task.NewTask("定时刷新设备每日运行记录-OEE", "0 */10 * * * *", AutoFlushDeviceDailyRunningRecordOEE)
50 - task.AddTask("autoFlushDeviceDailyRunningRecord", autoFlushDeviceDailyRunningRecordOEE) 50 + task.AddTask("autoFlushDeviceDailyRunningRecordOEE", autoFlushDeviceDailyRunningRecordOEE)
51 51
52 autoWorkshopPlanCompletionRecord := task.NewTask("定时刷新昨日车间计划完成纪录", "0 5 1-17/1 * * *", AutoWorkshopPlanCompletionRecord) 52 autoWorkshopPlanCompletionRecord := task.NewTask("定时刷新昨日车间计划完成纪录", "0 5 1-17/1 * * *", AutoWorkshopPlanCompletionRecord)
53 task.AddTask("autoWorkshopPlanCompletionRecord", autoWorkshopPlanCompletionRecord) 53 task.AddTask("autoWorkshopPlanCompletionRecord", autoWorkshopPlanCompletionRecord)
@@ -7,6 +7,7 @@ import ( @@ -7,6 +7,7 @@ import (
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/factory"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/syncdata" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/application/syncdata"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/log"
  10 + "time"
10 ) 11 )
11 12
12 // 定时同步生产计划 13 // 定时同步生产计划
@@ -32,7 +33,14 @@ func SyncProductPlan(ctx context.Context) error { @@ -32,7 +33,14 @@ func SyncProductPlan(ctx context.Context) error {
32 33
33 log.Logger.Debug("【定时同步车间计划】 启动") 34 log.Logger.Debug("【定时同步车间计划】 启动")
34 pullK3CloudService := syncdata.PullDataK3CloudService{} 35 pullK3CloudService := syncdata.PullDataK3CloudService{}
35 - if err := pullK3CloudService.SyncDataProductPlan(transactionContext.(*pg.TransactionContext)); err != nil { 36 + t := ctx.Value("fromTime")
  37 + var fromTime time.Time
  38 + if t != nil {
  39 + if v, ok := t.(time.Time); ok {
  40 + fromTime = v
  41 + }
  42 + }
  43 + if err := pullK3CloudService.SyncDataProductPlan(transactionContext.(*pg.TransactionContext), fromTime); err != nil {
36 log.Logger.Error(err.Error()) 44 log.Logger.Error(err.Error())
37 return nil 45 return nil
38 } 46 }
@@ -457,7 +457,7 @@ func (srv *PullDataK3CloudService) PullPrdMo(timeFilter time.Time) error { @@ -457,7 +457,7 @@ func (srv *PullDataK3CloudService) PullPrdMo(timeFilter time.Time) error {
457 } 457 }
458 458
459 // 同步生产计划 459 // 同步生产计划
460 -func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.TransactionContext) error { 460 +func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.TransactionContext, fromTime time.Time) error {
461 /* 461 /*
462 1.获取更新时间 462 1.获取更新时间
463 2.获取prd_mo_k3cloud从更新时间开始的有变化的数据 463 2.获取prd_mo_k3cloud从更新时间开始的有变化的数据
@@ -468,6 +468,9 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa @@ -468,6 +468,9 @@ func (srv *PullDataK3CloudService) SyncDataProductPlan(ptr *pgTransaction.Transa
468 if err != nil { 468 if err != nil {
469 return err 469 return err
470 } 470 }
  471 + if !fromTime.IsZero() {
  472 + lastTime = fromTime
  473 + }
471 prdMoK3cloudDao, _ := dao.NewPrdMoK3cloudDao(ptr) 474 prdMoK3cloudDao, _ := dao.NewPrdMoK3cloudDao(ptr)
472 records, err := prdMoK3cloudDao.GetLatestData(lastTime) 475 records, err := prdMoK3cloudDao.GetLatestData(lastTime)
473 if err != nil { 476 if err != nil {
@@ -32,6 +32,8 @@ var ( @@ -32,6 +32,8 @@ var (
32 // 打浆机 32 // 打浆机
33 DeviceTypeDaJiangJi = "DJJ" 33 DeviceTypeDaJiangJi = "DJJ"
34 // 面包屑机 34 // 面包屑机
  35 + DeviceTypeMianBaoXie = "MBX"
  36 + // 面包屑机
35 DeviceTypeMianBaoXieJi = "MBXJ" 37 DeviceTypeMianBaoXieJi = "MBXJ"
36 // 油炸机 38 // 油炸机
37 DeviceTypeYouZhaJi = "YZJ" 39 DeviceTypeYouZhaJi = "YZJ"
@@ -13,7 +13,7 @@ type DeviceBaoXianJi struct { @@ -13,7 +13,7 @@ type DeviceBaoXianJi struct {
13 13
14 // 油炸机 14 // 油炸机
15 type DeviceYouZhaJi struct { 15 type DeviceYouZhaJi struct {
16 - FrontTemp float64 `json:"FontTemp"` // 炸机前段温度:炸机前段当前温度 16 + FrontTemp float64 `json:"FrontTemp"` // 炸机前段温度:炸机前段当前温度
17 BackTemp float64 `json:"BackTemp"` // 炸机后段温度:炸机后段当前温度 17 BackTemp float64 `json:"BackTemp"` // 炸机后段温度:炸机后段当前温度
18 TankTemp float64 `json:"TankTemp"` // 储油罐温度 :储油罐当前温度 18 TankTemp float64 `json:"TankTemp"` // 储油罐温度 :储油罐当前温度
19 TubeTemp float64 `json:"TubeTemp"` // 管路温度:管路当前温度 19 TubeTemp float64 `json:"TubeTemp"` // 管路温度:管路当前温度
@@ -239,10 +239,11 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string @@ -239,10 +239,11 @@ func (d *DeviceRunningRecordInfo) HourDeviceStatusDetail(endTime int) map[string
239 if i == 0 { 239 if i == 0 {
240 status = computeStatus(hds.Up, hds.Com, index) // 状态初始化 240 status = computeStatus(hds.Up, hds.Com, index) // 状态初始化
241 } 241 }
242 - if hds.Up == 0 && hds.Com == 0 { 242 + if hds.Up == 0 && hds.Com == 0 && (end+60/hds.Window) < endTime {
243 end += 60 / hds.Window 243 end += 60 / hds.Window
244 continue 244 continue
245 } 245 }
  246 +
246 for j := 1; j < 60; j++ { 247 for j := 1; j < 60; j++ {
247 curStatus := computeStatus(hds.Up, hds.Com, index) 248 curStatus := computeStatus(hds.Up, hds.Com, index)
248 if curStatus == status { 249 if curStatus == status {
@@ -77,7 +77,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d @@ -77,7 +77,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d
77 } 77 }
78 78
79 // 封箱机、串串机需要定位到批次 79 // 封箱机、串串机需要定位到批次
80 - if record.DeviceType == domain.DeviceTypeFengXiangJi || record.DeviceType == domain.DeviceTypeChuanChuanJi { 80 + if record.DeviceType == domain.DeviceTypeChuanChuanJi { //record.DeviceType == domain.DeviceTypeFengXiangJi ||
81 datetime, _ := time.ParseInLocation("2006-01-02", deviceRunningData.Date, time.Local) 81 datetime, _ := time.ParseInLocation("2006-01-02", deviceRunningData.Date, time.Local)
82 if plan, err = ptr.findDeviceProductPlan(companyId, orgId, workStation.WorkStationId, utils.GetZeroTimeWithLocal(datetime, time.UTC), deviceRunningData.ProductType); err != nil { 82 if plan, err = ptr.findDeviceProductPlan(companyId, orgId, workStation.WorkStationId, utils.GetZeroTimeWithLocal(datetime, time.UTC), deviceRunningData.ProductType); err != nil {
83 log.Logger.Error(err.Error(), map[string]interface{}{"workstation": workStation, "product_code": deviceRunningData.ProductType}) 83 log.Logger.Error(err.Error(), map[string]interface{}{"workstation": workStation, "product_code": deviceRunningData.ProductType})
@@ -145,6 +145,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -145,6 +145,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
145 break 145 break
146 //油炸机 146 //油炸机
147 case domain.DeviceTypeYouZhaJi: 147 case domain.DeviceTypeYouZhaJi:
  148 + if record.DeviceSn == domain.DeviceTypeYouZhaJi1 {
148 deviceYouZhaJi := &domain.DeviceYouZhaJi{} 149 deviceYouZhaJi := &domain.DeviceYouZhaJi{}
149 err = json.Unmarshal(mBytes, deviceYouZhaJi) 150 err = json.Unmarshal(mBytes, deviceYouZhaJi)
150 if err != nil { 151 if err != nil {
@@ -152,9 +153,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -152,9 +153,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
152 } 153 }
153 data.Temp1 = deviceYouZhaJi.FrontTemp 154 data.Temp1 = deviceYouZhaJi.FrontTemp
154 data.Temp2 = deviceYouZhaJi.BackTemp 155 data.Temp2 = deviceYouZhaJi.BackTemp
155 - break  
156 - //油炸机  
157 - case domain.DeviceTypeYouZhaJi2: 156 + } else {
158 deviceYouZhaJi := &domain.DeviceYouZhaJi2{} 157 deviceYouZhaJi := &domain.DeviceYouZhaJi2{}
159 err = json.Unmarshal(mBytes, deviceYouZhaJi) 158 err = json.Unmarshal(mBytes, deviceYouZhaJi)
160 if err != nil { 159 if err != nil {
@@ -162,6 +161,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -162,6 +161,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
162 } 161 }
163 data.Temp1 = deviceYouZhaJi.Temp1 162 data.Temp1 = deviceYouZhaJi.Temp1
164 data.Temp2 = deviceYouZhaJi.Temp2 163 data.Temp2 = deviceYouZhaJi.Temp2
  164 + }
165 break 165 break
166 //串串机 166 //串串机
167 case domain.DeviceTypeChuanChuanJi: 167 case domain.DeviceTypeChuanChuanJi:
@@ -216,6 +216,8 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -216,6 +216,8 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
216 break 216 break
217 //打浆机 217 //打浆机
218 case domain.DeviceTypeDaJiangJi: 218 case domain.DeviceTypeDaJiangJi:
  219 + //面包屑机
  220 + case domain.DeviceTypeMianBaoXie:
219 default: 221 default:
220 } 222 }
221 return data, nil 223 return data, nil
@@ -173,6 +173,9 @@ func (repository *ProductAttendanceRecordRepository) Find(queryOptions map[strin @@ -173,6 +173,9 @@ func (repository *ProductAttendanceRecordRepository) Find(queryOptions map[strin
173 if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 { 173 if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 {
174 query.Where(`org_id in (?)`, pg.In(v)) 174 query.Where(`org_id in (?)`, pg.In(v))
175 } 175 }
  176 + if v, ok := queryOptions["inAttendanceStatus"]; ok && len(v.([]int)) > 0 {
  177 + query.Where(`attendance_status in (?)`, pg.In(v))
  178 + }
176 if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 { 179 if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 {
177 query.Where(fmt.Sprintf(`product_worker->>'userName' like '%%%v%%'`, v)) 180 query.Where(fmt.Sprintf(`product_worker->>'userName' like '%%%v%%'`, v))
178 } 181 }
@@ -151,6 +151,7 @@ func (repository *ProductGroupRepository) Find(queryOptions map[string]interface @@ -151,6 +151,7 @@ func (repository *ProductGroupRepository) Find(queryOptions map[string]interface
151 query := sqlbuilder.BuildQuery(tx.Model(&productGroupModels), queryOptions) 151 query := sqlbuilder.BuildQuery(tx.Model(&productGroupModels), queryOptions)
152 query.SetWhereByQueryOption("company_id = ?", "companyId") 152 query.SetWhereByQueryOption("company_id = ?", "companyId")
153 query.SetWhereByQueryOption("org_id = ?", "orgId") 153 query.SetWhereByQueryOption("org_id = ?", "orgId")
  154 + query.SetWhereByQueryOption("work_station->>'workStationId'=?", "workStationId")
154 if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 { 155 if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int)) > 0 {
155 query.Where(`org_id in (?)`, pg.In(v)) 156 query.Where(`org_id in (?)`, pg.In(v))
156 } 157 }
1 package controllers 1 package controllers
2 2
3 import ( 3 import (
  4 + c "context"
4 "github.com/beego/beego/v2/server/web/context" 5 "github.com/beego/beego/v2/server/web/context"
5 "github.com/linmadan/egglib-go/utils/json" 6 "github.com/linmadan/egglib-go/utils/json"
6 "github.com/linmadan/egglib-go/web/beego" 7 "github.com/linmadan/egglib-go/web/beego"
@@ -14,6 +15,7 @@ import ( @@ -14,6 +15,7 @@ import (
14 "net/http" 15 "net/http"
15 "strconv" 16 "strconv"
16 "strings" 17 "strings"
  18 + "time"
17 ) 19 )
18 20
19 type StatisticsController struct { 21 type StatisticsController struct {
@@ -67,7 +69,14 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context) @@ -67,7 +69,14 @@ func (controller *StatisticsController) TaskHandler() func(ctx *context.Context)
67 crontab.AutoWorkshopPlanCompletionRecord(nil) 69 crontab.AutoWorkshopPlanCompletionRecord(nil)
68 break 70 break
69 case "6": 71 case "6":
70 - crontab.SyncProductPlan(nil) 72 + bc := c.Background()
  73 + t := ctx.Input.Query("t")
  74 + if len(t) != 0 {
  75 + if v, err := time.ParseInLocation("2006-01-02 15:04:05", t, time.Local); err == nil {
  76 + bc = c.WithValue(bc, "fromTime", v)
  77 + }
  78 + }
  79 + crontab.SyncProductPlan(bc)
71 break 80 break
72 } 81 }
73 Response(ctx, nil, nil) 82 Response(ctx, nil, nil)
@@ -34,11 +34,12 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { @@ -34,11 +34,12 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) {
34 if collectionTime.IsZero() { 34 if collectionTime.IsZero() {
35 return 35 return
36 } 36 }
  37 + var mBytes []byte
37 for key, item := range payload { 38 for key, item := range payload {
38 if key == "WorkShop" || key == "UpTime" { 39 if key == "WorkShop" || key == "UpTime" {
39 continue 40 continue
40 } 41 }
41 - mBytes, err := json.Marshal(item) 42 + mBytes, err = json.Marshal(item)
42 if err != nil { 43 if err != nil {
43 continue 44 continue
44 } 45 }
@@ -49,11 +50,16 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { @@ -49,11 +50,16 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) {
49 StartupStatus: gjson.Get(string(message.Payload()), key+".StartupState").Int(), 50 StartupStatus: gjson.Get(string(message.Payload()), key+".StartupState").Int(),
50 ComStatus: gjson.Get(string(message.Payload()), key+".ComStatus").Int(), 51 ComStatus: gjson.Get(string(message.Payload()), key+".ComStatus").Int(),
51 } 52 }
52 - if utils.SubStr(key, 0, 4) == domain.DeviceTypeMianBaoXieJi {  
53 - deviceCollection.DeviceType = domain.DeviceTypeMianBaoXieJi  
54 - } else { 53 + deviceType4 := utils.SubStr(key, 0, 4)
55 deviceType := utils.SubStr(key, 0, 3) 54 deviceType := utils.SubStr(key, 0, 3)
56 deviceCollection.DeviceType = deviceType 55 deviceCollection.DeviceType = deviceType
  56 +
  57 + if deviceType4 == domain.DeviceTypeMianBaoXieJi {
  58 + deviceCollection.DeviceType = domain.DeviceTypeMianBaoXieJi
  59 + }
  60 + if deviceType == domain.DeviceTypeYouZhaJi {
  61 + deviceType = deviceType4
  62 + }
57 switch deviceType { 63 switch deviceType {
58 //包馅机 64 //包馅机
59 case domain.DeviceTypeBaoXianJi: 65 case domain.DeviceTypeBaoXianJi:
@@ -121,15 +127,15 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { @@ -121,15 +127,15 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) {
121 break 127 break
122 //打浆机 //面包屑机 128 //打浆机 //面包屑机
123 case domain.DeviceTypeDaJiangJi: 129 case domain.DeviceTypeDaJiangJi:
124 - case domain.DeviceTypeChuanChuanJi: 130 + break
125 default: 131 default:
126 } 132 }
127 - if deviceType != domain.DeviceTypeChuanChuanJi {  
128 - continue  
129 - } 133 + //if deviceType != domain.DeviceTypeChuanChuanJi {
  134 + // continue
  135 + //}
130 // 发送数据 136 // 发送数据
131 deviceCollectionService := service.NewDeviceCollectionService(nil) 137 deviceCollectionService := service.NewDeviceCollectionService(nil)
132 - _, err := deviceCollectionService.CreateDeviceCollection(&command.CreateDeviceCollectionCommand{ 138 + _, err = deviceCollectionService.CreateDeviceCollection(&command.CreateDeviceCollectionCommand{
133 WorkShopName: deviceCollection.WorkShopName, 139 WorkShopName: deviceCollection.WorkShopName,
134 StartupStatus: deviceCollection.StartupStatus, 140 StartupStatus: deviceCollection.StartupStatus,
135 CollectionTime: deviceCollection.CollectionTime, 141 CollectionTime: deviceCollection.CollectionTime,
@@ -143,12 +149,14 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) { @@ -143,12 +149,14 @@ func OnReceiveData(client pahomqtt.Client, message pahomqtt.Message) {
143 continue 149 continue
144 } 150 }
145 } 151 }
146 - }  
147 //TODO:日志先注释 152 //TODO:日志先注释
148 - //log.Logger.Info("MQTT", map[string]interface{}{  
149 - // "Topic": message.Topic(),  
150 - // "MessageId": message.MessageID(),  
151 - // "Message": payload,  
152 - //}) 153 + if err == nil {
  154 + log.Logger.Info("MQTT", map[string]interface{}{
  155 + "Topic": message.Topic(),
  156 + "MessageId": message.MessageID(),
  157 + "Message": payload,
  158 + })
  159 + }
  160 +
153 } 161 }
154 } 162 }