作者 yangfu

fix:1.时段产能修改

@@ -32,4 +32,8 @@ type DeviceRunningData struct { @@ -32,4 +32,8 @@ type DeviceRunningData struct {
32 ProductType string `json:"productType"` 32 ProductType string `json:"productType"`
33 // 日期 33 // 日期
34 Date string `json:"date"` 34 Date string `json:"date"`
  35 +
  36 + // 额外数据
  37 + // 单位数据 比如:1串/0.1kg weight = count * unitQuantity
  38 + UnitQuantity float64 `json:"unitQuantity"`
35 } 39 }
@@ -86,7 +86,7 @@ func (employeeProductRecord *EmployeeProductRecord) UpdateProductWeigh(weigh flo @@ -86,7 +86,7 @@ func (employeeProductRecord *EmployeeProductRecord) UpdateProductWeigh(weigh flo
86 if productRecordType == RecordTypeReturnMaterial { 86 if productRecordType == RecordTypeReturnMaterial {
87 employeeProductRecord.ProductWeigh -= weigh 87 employeeProductRecord.ProductWeigh -= weigh
88 } 88 }
89 - employeeProductRecord.ProductRecordInfo.PreStatistics(employeeProductRecord.ProductWeigh, employeeProductRecord.SecondLevelWeigh, 0, 0) 89 + employeeProductRecord.ProductRecordInfo.PreStatistics(employeeProductRecord.ProductWeigh, employeeProductRecord.SecondLevelWeigh, yesterdayWeight, bestWeight)
90 employeeProductRecord.UpdatedAt = time.Now() 90 employeeProductRecord.UpdatedAt = time.Now()
91 employeeProductRecord.Version += 1 91 employeeProductRecord.Version += 1
92 } 92 }
@@ -58,8 +58,10 @@ func (info *ProductRecordStaticInfo) PreStatistics(productWeight float64, second @@ -58,8 +58,10 @@ func (info *ProductRecordStaticInfo) PreStatistics(productWeight float64, second
58 info.InputWeight = productWeight - totalOtherSecondLevelWeigh 58 info.InputWeight = productWeight - totalOtherSecondLevelWeigh
59 info.OutputWeight = info.InputWeight - secondWeight 59 info.OutputWeight = info.InputWeight - secondWeight
60 info.SecondLevelWeight = secondWeight 60 info.SecondLevelWeight = secondWeight
  61 + if info.YesterdayOutputWeight == 0 && info.BestOutputWeight == 0 {
61 info.YesterdayOutputWeight = yesterdayWeight 62 info.YesterdayOutputWeight = yesterdayWeight
62 info.BestOutputWeight = bestWeight 63 info.BestOutputWeight = bestWeight
  64 + }
63 if bestWeight <= info.InputWeight { 65 if bestWeight <= info.InputWeight {
64 info.BestOutputWeight = info.OutputWeight 66 info.BestOutputWeight = info.OutputWeight
65 } 67 }
@@ -83,3 +83,47 @@ select round(avg(oee),1) oee,round(avg(tu),1) tu,round(avg(pu),1)pu, round(avg(q @@ -83,3 +83,47 @@ select round(avg(oee),1) oee,round(avg(tu),1) tu,round(avg(pu),1)pu, round(avg(q
83 } 83 }
84 return nil 84 return nil
85 } 85 }
  86 +
  87 +// 时段产能
  88 +func (dao *DeviceDailyRunningRecordDao) TimeSectionProductRecord(companyId, orgId, workshopId int, lineId int, sectionName string, beginTime time.Time, result interface{}) error {
  89 +
  90 + tx := dao.transactionContext.PgTx
  91 + sql := fmt.Sprintf(`
  92 +WITH ts_product as(
  93 + select sum(a.weight) total,a.ts from (
  94 + select
  95 + cast(device_running_record_info->>'count' as DECIMAL) weight,
  96 + "replace"(to_char(created_at at time ZONE 'Asia/shanghai', 'HH24:') || cast(date_part('minute',created_at) as integer)/30*30, ':0', ':00') ts
  97 + from manufacture.device_running_record
  98 + where
  99 + company_id = ?
  100 + and org_id = ?
  101 + and work_station->>'workshopId'='?'
  102 + and work_station->>'lineId'='?'
  103 + and work_station->>'sectionName'=?
  104 + and device_running_record_info->>'deviceType'='CCJ'
  105 + and created_at >?
  106 + ) a
  107 + group by a.ts
  108 + order by ts
  109 +)
  110 +-- select * from ts_product
  111 +, ts_product_list as (
  112 + select d.ts,ts_product.total from (
  113 + select to_char(c.ts::timestamp,'HH24:MI') ts from (
  114 + select generate_series(a.end - interval '5 hour',
  115 + "replace"(to_char(a.end, 'yyyy-mm-dd HH24:') || cast(date_part('minute',a.end) as integer)/30*30+30, ':0', ':00')::timestamp,
  116 + '30 minute') ts from (
  117 + select to_timestamp(to_char(now() at time ZONE 'Asia/shanghai','yyyy-mm-dd HH24'),'yyyy-mm-dd HH24') as end
  118 + ) a
  119 + ) c
  120 + ) d left join ts_product on d.ts = ts_product.ts
  121 +)
  122 +SELECT ts, coalesce(total,0) total
  123 +from ts_product_list
  124 +`)
  125 + if _, err := tx.Query(result, sql, companyId, orgId, workshopId, lineId, sectionName, beginTime); err != nil {
  126 + return err
  127 + }
  128 + return nil
  129 +}
@@ -72,7 +72,7 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[ @@ -72,7 +72,7 @@ func (ptr *PGCommonStatisticsService) HourProductiveStatistics(queryOptions map[
72 if err != nil || workshop == nil { 72 if err != nil || workshop == nil {
73 return nil, nil 73 return nil, nil
74 } 74 }
75 - productRecordDao, _ := dao.NewProductRecordDao(ptr.transactionContext) 75 + productRecordDao, _ := dao.NewDeviceDailyRunningRecordDao(ptr.transactionContext)
76 76
77 var response = make([]interface{}, 0) 77 var response = make([]interface{}, 0)
78 var tmpXData = make([]string, 0) 78 var tmpXData = make([]string, 0)
@@ -243,7 +243,7 @@ func (ptr *PGCommonStatisticsService) WorkshopProductionEfficiencyStatistics(que @@ -243,7 +243,7 @@ func (ptr *PGCommonStatisticsService) WorkshopProductionEfficiencyStatistics(que
243 243
244 var response = make(map[string]interface{}) 244 var response = make(map[string]interface{})
245 for _, v := range input { 245 for _, v := range input {
246 - var result = make([]*record, 0) 246 + var result = record{}
247 if err := productRecordDao.WorkshopProductionEfficiencyStatistics(request.CompanyId, request.OrgId, request.WorkshopId, v.t, &result); err != nil { 247 if err := productRecordDao.WorkshopProductionEfficiencyStatistics(request.CompanyId, request.OrgId, request.WorkshopId, v.t, &result); err != nil {
248 log.Logger.Error(err.Error()) 248 log.Logger.Error(err.Error())
249 return nil, err 249 return nil, err
@@ -261,14 +261,14 @@ func (ptr *PGCommonStatisticsService) DeviceRunningStatistics(queryOptions map[s @@ -261,14 +261,14 @@ func (ptr *PGCommonStatisticsService) DeviceRunningStatistics(queryOptions map[s
261 return nil, err 261 return nil, err
262 } 262 }
263 263
264 - workshopRepository, _ := repository.NewWorkshopRepository(ptr.transactionContext) 264 + //workshopRepository, _ := repository.NewWorkshopRepository(ptr.transactionContext)
265 deviceRepository, _ := repository.NewDeviceRepository(ptr.transactionContext) 265 deviceRepository, _ := repository.NewDeviceRepository(ptr.transactionContext)
266 deviceRunningRecordRepository, _ := repository.NewDeviceDailyRunningRecordRepository(ptr.transactionContext) 266 deviceRunningRecordRepository, _ := repository.NewDeviceDailyRunningRecordRepository(ptr.transactionContext)
267 267
268 - workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId})  
269 - if err != nil || workshop == nil {  
270 - return nil, nil  
271 - } 268 + //workshop, err := workshopRepository.FindOne(map[string]interface{}{"workshopId": request.WorkshopId})
  269 + //if err != nil || workshop == nil {
  270 + // return nil, nil
  271 + //}
272 272
273 _, devices, err := deviceRepository.Find(map[string]interface{}{"companyId": request.CompanyId, "orgId": request.OrgId, "workshopId": request.WorkshopId, "lineId": request.LineId}) 273 _, devices, err := deviceRepository.Find(map[string]interface{}{"companyId": request.CompanyId, "orgId": request.OrgId, "workshopId": request.WorkshopId, "lineId": request.LineId})
274 if err != nil { 274 if err != nil {
@@ -312,7 +312,7 @@ func (ptr *PGCommonStatisticsService) DeviceRunningStatistics(queryOptions map[s @@ -312,7 +312,7 @@ func (ptr *PGCommonStatisticsService) DeviceRunningStatistics(queryOptions map[s
312 type DeviceRunningStatisticRequest struct { 312 type DeviceRunningStatisticRequest struct {
313 CompanyId int `json:"companyId" valid:"Required"` 313 CompanyId int `json:"companyId" valid:"Required"`
314 OrgId int `json:"orgId" valid:"Required"` 314 OrgId int `json:"orgId" valid:"Required"`
315 - WorkshopId int `json:"workshopId" valid:"Required"` 315 + WorkshopId int `json:"workshopId"`
316 LineId int `json:"lineId""` 316 LineId int `json:"lineId""`
317 Date string `json:"date"` 317 Date string `json:"date"`
318 } 318 }
@@ -236,6 +236,7 @@ func (ptr *PGProductRecordService) personalProductStatics(productRecord *domain. @@ -236,6 +236,7 @@ func (ptr *PGProductRecordService) personalProductStatics(productRecord *domain.
236 yesterdayOutputWeight float64 = 0 236 yesterdayOutputWeight float64 = 0
237 bestOutputWeight float64 = 0 237 bestOutputWeight float64 = 0
238 ) 238 )
  239 + if employeeProductRecord.ProductRecordInfo.BestOutputWeight == 0 {
239 if record, e := employeeProductRecordDao.WorkerProductRecord(cid, oid, planId, productRecord.ProductWorker.UserId, productRecord.CreatedAt.AddDate(0, 0, -1)); e == nil && record != nil { 240 if record, e := employeeProductRecordDao.WorkerProductRecord(cid, oid, planId, productRecord.ProductWorker.UserId, productRecord.CreatedAt.AddDate(0, 0, -1)); e == nil && record != nil {
240 yesterdayOutputWeight = record.ProductRecordInfo.OutputWeight 241 yesterdayOutputWeight = record.ProductRecordInfo.OutputWeight
241 bestOutputWeight = record.ProductRecordInfo.BestOutputWeight 242 bestOutputWeight = record.ProductRecordInfo.BestOutputWeight
@@ -245,6 +246,11 @@ func (ptr *PGProductRecordService) personalProductStatics(productRecord *domain. @@ -245,6 +246,11 @@ func (ptr *PGProductRecordService) personalProductStatics(productRecord *domain.
245 yesterdayOutputWeight = record.ProductRecordInfo.OutputWeight 246 yesterdayOutputWeight = record.ProductRecordInfo.OutputWeight
246 } 247 }
247 } 248 }
  249 + }
  250 + // 更新批次的产能 (只有包装要更新批次产能)
  251 + //if productPlan.WorkStation.SectionName==ProductSection4{
  252 + //
  253 + //}
248 254
249 employeeProductRecord.UpdateProductWeigh(productRecord.ProductRecordInfo.Weigh, productRecord.ProductRecordType, productRecord.WorkStation.SectionName, yesterdayOutputWeight, bestOutputWeight) 255 employeeProductRecord.UpdateProductWeigh(productRecord.ProductRecordInfo.Weigh, productRecord.ProductRecordType, productRecord.WorkStation.SectionName, yesterdayOutputWeight, bestOutputWeight)
250 256
@@ -73,14 +73,14 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain. @@ -73,14 +73,14 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain.
73 r := records[i] 73 r := records[i]
74 // 操作时间 < 签到时间 74 // 操作时间 < 签到时间
75 if utils.TimeAfterEqual(r.SignIn, report.ActionTime) { 75 if utils.TimeAfterEqual(r.SignIn, report.ActionTime) {
76 - log.Logger.Info(fmt.Sprintf("【考勤汇报】 考勤记录不合法,操作时间小于签到时间 考勤ID:%v 用户:%v 打卡时间:%v", r.ProductAttendanceId, worker.UserId, report.ActionTime)) 76 + log.Logger.Debug(fmt.Sprintf("【考勤汇报】 考勤记录不合法,操作时间小于签到时间 考勤ID:%v 用户:%v 打卡时间:%v", r.ProductAttendanceId, worker.UserId, report.ActionTime))
77 return struct{}{}, nil 77 return struct{}{}, nil
78 } 78 }
79 // 存在完整打卡记录 79 // 存在完整打卡记录
80 // 1. 如果在区间内,退出 80 // 1. 如果在区间内,退出
81 if !utils.TimeIsZero(r.SignIn) && !utils.TimeIsZero(r.SignOut) { 81 if !utils.TimeIsZero(r.SignIn) && !utils.TimeIsZero(r.SignOut) {
82 if utils.TimeBeforeEqual(r.SignIn, report.ActionTime) && utils.TimeAfterEqual(r.SignOut, report.ActionTime) { 82 if utils.TimeBeforeEqual(r.SignIn, report.ActionTime) && utils.TimeAfterEqual(r.SignOut, report.ActionTime) {
83 - log.Logger.Info(fmt.Sprintf("【考勤汇报】 已存在同一时间段的考勤记录 考勤ID:%v 用户:%v 打卡时间:%v", r.ProductAttendanceId, worker.UserId, report.ActionTime)) 83 + log.Logger.Debug(fmt.Sprintf("【考勤汇报】 已存在同一时间段的考勤记录 考勤ID:%v 用户:%v 打卡时间:%v", r.ProductAttendanceId, worker.UserId, report.ActionTime))
84 return struct{}{}, nil 84 return struct{}{}, nil
85 } 85 }
86 continue 86 continue
@@ -115,11 +115,11 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain. @@ -115,11 +115,11 @@ func (ptr *PGWorkerAttendanceReportService) Report(cid, oid int, report *domain.
115 ProductGroupId: groupId, 115 ProductGroupId: groupId,
116 }), 116 }),
117 } 117 }
118 - log.Logger.Info(fmt.Sprintf("【考勤汇报】 用户:%v(%v) 签到 %v", worker.UserName, worker.UserId, report)) 118 + log.Logger.Debug(fmt.Sprintf("【考勤汇报】 用户:%v(%v) 签到 %v", worker.UserName, worker.UserId, report))
119 } else { 119 } else {
120 record.SignOut = report.ActionTime 120 record.SignOut = report.ActionTime
121 record.WorkTimeBefore = record.ComputeWorkTimeBefore() 121 record.WorkTimeBefore = record.ComputeWorkTimeBefore()
122 - log.Logger.Info(fmt.Sprintf("【考勤汇报】 用户:%v(%v) 签退 %v", worker.UserName, worker.UserId, report)) 122 + log.Logger.Debug(fmt.Sprintf("【考勤汇报】 用户:%v(%v) 签退 %v", worker.UserName, worker.UserId, report))
123 } 123 }
124 124
125 if _, err = attendanceRecordRepository.Save(record); err != nil { 125 if _, err = attendanceRecordRepository.Save(record); err != nil {
@@ -101,6 +101,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d @@ -101,6 +101,7 @@ func (ptr *PGWorkshopDataConsumeService) Consume(companyId, orgId int, record *d
101 101
102 func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.DeviceCollection) (*domain.DeviceRunningData, error) { 102 func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.DeviceCollection) (*domain.DeviceRunningData, error) {
103 var err error 103 var err error
  104 + var unitQuantity float64 = 1 // 单位数量
104 var data = &domain.DeviceRunningData{ 105 var data = &domain.DeviceRunningData{
105 DeviceCollectionId: record.DeviceCollectionId, 106 DeviceCollectionId: record.DeviceCollectionId,
106 WorkShopName: record.WorkShopName, 107 WorkShopName: record.WorkShopName,
@@ -109,6 +110,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -109,6 +110,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
109 DeviceType: record.DeviceType, 110 DeviceType: record.DeviceType,
110 StartupStatus: int(record.StartupStatus), 111 StartupStatus: int(record.StartupStatus),
111 ComStatus: int(record.ComStatus), 112 ComStatus: int(record.ComStatus),
  113 + //UnitQuantity: unitQuantity,
112 } 114 }
113 var mBytes []byte 115 var mBytes []byte
114 if mBytes, err = json.Marshal(record.Values); err != nil { 116 if mBytes, err = json.Marshal(record.Values); err != nil {
@@ -152,6 +154,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev @@ -152,6 +154,7 @@ func (ptr *PGWorkshopDataConsumeService) newDeviceRunningData(record *domain.Dev
152 if data.Date, err = formatDate(deviceChuanChuanJi.Year, deviceChuanChuanJi.Month, deviceChuanChuanJi.Day); err != nil { 154 if data.Date, err = formatDate(deviceChuanChuanJi.Year, deviceChuanChuanJi.Month, deviceChuanChuanJi.Day); err != nil {
153 return nil, err 155 return nil, err
154 } 156 }
  157 + data.UnitQuantity = unitQuantity
155 break 158 break
156 //速冻线 159 //速冻线
157 case domain.DeviceTypeSuDongXian: 160 case domain.DeviceTypeSuDongXian:
@@ -174,6 +174,12 @@ func (repository *DeviceRepository) Find(queryOptions map[string]interface{}) (i @@ -174,6 +174,12 @@ func (repository *DeviceRepository) Find(queryOptions map[string]interface{}) (i
174 if v, ok := queryOptions["inDeviceId"]; ok && len(v.([]int)) > 0 { 174 if v, ok := queryOptions["inDeviceId"]; ok && len(v.([]int)) > 0 {
175 query.Where(`device_id in (?)`, pg.In(v)) 175 query.Where(`device_id in (?)`, pg.In(v))
176 } 176 }
  177 + if v, ok := queryOptions["workshopId"]; ok && (v.(int)) > 0 {
  178 + query.Where(`work_station->>'workshopId'='?'`, v)
  179 + }
  180 + if v, ok := queryOptions["lineId"]; ok && (v.(int)) > 0 {
  181 + query.Where(`work_station->>'lineId'='?'`, v)
  182 + }
177 query.SetWhereByQueryOption("device_code = ?", "deviceCode") 183 query.SetWhereByQueryOption("device_code = ?", "deviceCode")
178 query.SetWhereByQueryOption("device_status = ?", "deviceStatus") 184 query.SetWhereByQueryOption("device_status = ?", "deviceStatus")
179 if v, ok := queryOptions["deviceName"]; ok && len(v.(string)) > 0 { 185 if v, ok := queryOptions["deviceName"]; ok && len(v.(string)) > 0 {