function get_works_detail($works, $switch = 'default') { $results = array(); // 按员工分组现场工时 foreach ($works as $work) { if ($switch == 'default') { $work_hours = get_work_hours($work); } if ($switch == 'unchecked') { $work_hours = get_uncheck_work_hours($work); } if ($switch == 'unsubmitted') { $work_hours = get_unsubmitted_work_hours($work); } // 考核率 $assessment_rate = cal_assessment($work); $assessment_work_hours = round($work_hours * (1 - $assessment_rate), 2); $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['works'][] = array('overdue_days' => daysbetweendates($work->check_date, $work->process->planned_completion_date), 'work_count' => $work->count, 'work_count_valid' => $work->count_valid, 'work_count_concession' => $work->count_concession, 'work_count_invalid' => $work->count_invalid, 'work_count_check' => $work->count_check, 'work_ticket' => $work->ticket, 'work_hours' => $work_hours, 'work_check_date' => $work->check_date ? date('Y/m/d', strtotime($work->check_date)) : '', 'work_completion_date' => $work->completion_date ? date('Y/m/d', strtotime($work->completion_date)) : '', 'work_remark' => get_proc_plan_source($work->process->part->production), 'assessment_rate' => $assessment_rate, 'assessment_work_hours' => $assessment_work_hours, 'proc_priority' => $work->process->priority, 'proc_name' => get_proc_name($work->process->name), 'proc_takt_time' => $work->process->takt_time ? $work->process->takt_time : 0, 'proc_preparation_time' => $work->process->preparation_time ? $work->process->preparation_time : 0, 'proc_production_date' => $work->process->production_date ? date('Y/m/d', strtotime($work->process->production_date)) : '', 'proc_planned_completion_date' => $work->process->planned_completion_date ? date('Y/m/d', strtotime($work->process->planned_completion_date)) : '', 'part_num' => $work->process->part->num, 'part_name' => $work->process->part->name, 'part_return_date' => $work->process->part->return_date ? date('Y/m/d', strtotime($work->process->part->return_date)) : '', 'prod_type' => get_prod_type($work->process->part->production->type), 'prod_graphic_src' => get_prod_graphic_src($work->process->part->production->graphic_src)); // 累加同种工序现场工时小计 if (!isset($results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['work_hours_sum'])) { $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['work_hours_sum'] = 0; } $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['work_hours_sum'] += $work_hours; // 累加同种工序考核现场工时小计 if (!isset($results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['a_work_hours_sum'])) { $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['a_work_hours_sum'] = 0; } $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['works'][$work->process->name]['a_work_hours_sum'] += $assessment_work_hours; // 累加所有工时小计 if (!isset($results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['work_hours_sum'])) { $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['work_hours_sum'] = 0; } $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['work_hours_sum'] += $work_hours; // 累加所有考核工时小计 if (!isset($results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['a_work_hours_sum'])) { $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['a_work_hours_sum'] = 0; } $results[$work->staff->group_id][$work->staff->identifier . '_' . $work->staff->name]['a_work_hours_sum'] += $assessment_work_hours; } return $results; }
function cal_assessment($work) { $date1 = $work->check_date; $date2 = $work->process->planned_completion_date; $cycle = $work->process->cycle; if ($date1 && $date2 && strtotime($date1) > strtotime($date2) && $cycle) { // 急件考核率 if ($work->process->part->production->item_month || $work->process->part->production->is_urgent) { $n = daysbetweendates($date1, $date2) / $cycle; if ($n < 50) { return intval($n) * 0.02; } return 1; } else { // 普通件考核率 $n = 1 + intval(daysbetweendates($date1, $date2) / 30); if ($n < 50) { return round($n * 0.02, 2); } return 1; } } return 0; }