Esempio n. 1
0
 function stat_prod_proc($prod_num)
 {
     $prods = Production::find_all_by_num($prod_num);
     $groups = \Model\Production::get_proc_by_prod($prods);
     return $groups;
 }
Esempio n. 2
0
 function item_month_plan($date, $page = 1)
 {
     // 2014-06
     $limit = get_config('prod_per_page');
     $offset = $page - 1;
     $app = get_app();
     //GET
     if ($app->request()->isGet()) {
         $grps = array();
         $date = $date . '-01';
         $total_time = 0;
         $prods = Production::find('all', array('conditions' => array(' is_done = 0 AND DATE(item_month) = ? ', $date)));
         foreach ($prods as $prod) {
             $grps[$prod->id] = array('prod_num' => $prod->num, 'prod_time' => 0, 'parts' => array());
             $parts = $prod->parts;
             foreach ($parts as $part) {
                 $grps[$prod->id]['parts'][$part->id] = array('part_num' => $part->num, 'part_name' => $part->name, 'procs' => array());
                 $procs = $part->processes;
                 foreach ($procs as $proc) {
                     $proc_time = get_proc_time($proc);
                     $grps[$prod->id]['parts'][$part->id]['procs'][$proc->id] = array('proc_priority' => $proc->priority, 'proc_name' => get_proc_name($proc->name), 'proc_count' => $proc->count, 'proc_takt_time' => $proc->takt_time, 'proc_preparation_time' => $proc->preparation_time, 'proc_time' => $proc_time, 'proc_planned_completion_date' => $proc->planned_completion_date ? date('Y-m-d', strtotime($proc->planned_completion_date)) : '', 'proc_production_date' => $proc->production_date ? date('Y-m-d', strtotime($proc->production_date)) : '', 'proc_completion_date' => $proc->completion_date ? date('Y-m-d', strtotime($proc->completion_date)) : '');
                     $total_time += $proc_time;
                     $grps[$prod->id]['prod_time'] += $proc_time;
                 }
             }
         }
         render_with_layout('misc.php', 'Misc/item_month_plan.php', compact('grps', 'date', 'total_time'));
     }
     //POST
     if ($app->request()->isPost()) {
         $proc = Process::find_by_id($app->request()->post('proc_id'));
         if ($proc) {
             $proc->planned_completion_date = $app->request()->post('planned_completion_date');
             $proc->production_date = $app->request()->post('production_date');
             $proc->save();
         }
     }
 }
Esempio n. 3
0
 function stat_total_count($start_date, $end_date)
 {
     // 统计
     $sql = Production::create_total_count_sql($start_date, $end_date);
     $prods = Production::find_by_sql($sql);
     // 生产指令
     $prod_total_count = 0;
     $prod_done_count = 0;
     $prod_undo_count = 0;
     // 零件
     $part_total_count = 0;
     $part_done_count = 0;
     $part_undo_count = 0;
     // 工序
     $proc_total_count = 0;
     $proc_has_gy_count = 0;
     // 已编工艺工序数
     $proc_has_no_gy_count = 0;
     // 未编工艺工序数
     $proc_has_gy_and_undo_works_sum = array();
     // 已编工艺但未完工工序工时分类合计
     // prod
     foreach ($prods as $prod) {
         $prod_total_count++;
         if ($prod->is_done) {
             $prod_done_count++;
         } else {
             $prod_undo_count++;
         }
         // part
         foreach ($prod->parts as $part) {
             $part_total_count++;
             if ($part->is_done) {
                 $part_done_count++;
             } else {
                 $part_undo_count++;
             }
             // proc
             foreach ($part->processes as $proc) {
                 $proc_total_count++;
                 if ($proc->content) {
                     $proc_has_gy_count++;
                     // 已编工艺但未完工工序工时累加
                     if (!$proc->is_done) {
                         if (!array_key_exists($proc->name, $proc_has_gy_and_undo_works_sum)) {
                             $proc_has_gy_and_undo_works_sum[$proc->name] = 0;
                         }
                         $proc_has_gy_and_undo_works_sum[$proc->name] += get_proc_time($proc);
                     }
                 } else {
                     // 未编工艺工序累加工时
                     $proc_has_no_gy_count++;
                 }
             }
         }
     }
     $result = array('prod_total_count' => $prod_total_count, 'prod_done_count' => $prod_done_count, 'prod_undo_count' => $prod_undo_count, 'part_total_count' => $part_total_count, 'part_done_count' => $part_done_count, 'part_undo_count' => $part_undo_count, 'proc_total_count' => $proc_total_count, 'proc_has_gy_count' => $proc_has_gy_count, 'proc_has_no_gy_count' => $proc_has_no_gy_count, 'proc_has_gy_but_undo_works_sum' => $proc_has_gy_and_undo_works_sum);
     render_with_layout('misc.php', 'Statistics/stat_total_count.php', compact('result', 'start_date', 'end_date'));
 }
Esempio n. 4
0
 function search_by_graph_src($graph_src_id)
 {
     $nodes = array();
     $prods = Production::find('all', array('conditions' => array(' graphic_src = ?', $graph_src_id), 'limit' => 500, 'order' => 'num asc'));
     foreach ($prods as $prod) {
         $nodes[] = array('id' => $prod->id, 'name' => $prod->num . ' ' . $prod->name . ' (' . count($prod->parts) . ')', 'font' => array('color' => $prod->is_done ? 'green' : 'black'), 'isParent' => count($prod->parts) == 0 ? false : true, 'type' => 'prod', 'icon' => $prod->is_urgent && !$prod->is_done ? get_path('/webroot/css/img/diy/2_urgent.jpg', true) : get_path('/webroot/css/img/diy/2.png', true));
     }
     echo json_encode($nodes);
 }
Esempio n. 5
0
 function import()
 {
     // 施工员/调度员 四车间
     if (!has_perm(1, 4) && !has_perm(2, 4)) {
         exit;
     }
     $name = $_FILES['files']['name'][0];
     $size = $_FILES['files']['size'][0];
     $tmp_name = $_FILES['files']['tmp_name'][0];
     if (get_file_ext($name) != 'xls') {
         $results['error'] = '对不起,系统只允许上传扩展名为 <strong>xls</strong> 的电子表格文件!';
         $results['is_success'] = false;
     } else {
         if ($size > 2000000) {
             $results['error'] = '对不起,系统只允许上传小于 <strong>2M</strong> 的电子表格文件!';
             $results['is_success'] = false;
         } else {
             if (!empty($tmp_name)) {
                 $data = new \Spreadsheet_Excel_Reader();
                 $data->setOutputEncoding('UTF-8');
                 $cols = 6;
                 /* 每一行有6个单元格 */
                 $rows = array();
                 $data->read($tmp_name);
                 error_reporting(E_ALL ^ E_NOTICE);
                 // 对电子表格的每一行进行循环
                 // 检测到某个单元格不存在时,设定其为空值
                 foreach ($data->sheets[0]['cells'] as $row) {
                     for ($i = 1; $i <= $cols; $i++) {
                         if (!isset($row[$i])) {
                             $row[$i] = '';
                         }
                         // 计划完成时间
                         if ($i == 6 && !empty($row[$i])) {
                             $row[$i] = change_date_style($row[$i]);
                         }
                     }
                     $rows[] = $row;
                 }
                 //debug( $rows );
                 // 导入数据库
                 foreach ($rows as $row) {
                     $prod_num = $row[1];
                     $prod = Production::find_by_num($prod_num);
                     // 当这条零件记录所对应的生产指令 prod 存在时
                     if (!empty($prod)) {
                         $part = new \Model\Part();
                         $part->production_id = $prod->id;
                         $part->num = $row[2];
                         $part->name = $row[3];
                         $part->graphic_num = $row[4];
                         $part->count = $row[5];
                         $part->planned_completion_date = $row[6];
                         $part->user_id = $_SESSION['user_id'];
                         if ($part->is_valid()) {
                             $part->save();
                         } else {
                             // 如果某条导入失败
                             // 记录该条目的零件指令号,零件名称
                             // 以及具体的错误原因
                             $errors = array();
                             foreach ($part->errors as $error) {
                                 $errors[] = $error;
                             }
                             $results['failed_items'][] = array('num' => $part->num, 'name' => $part->name, 'errors' => $errors);
                         }
                     }
                 }
                 //debug( $results['failed_items'] );
                 $results['is_success'] = true;
             }
         }
     }
     echo json_encode($results);
 }
Esempio n. 6
0
 function import()
 {
     // 工装管理员 生产安全部
     if (!has_perm(6, 1)) {
         exit;
     }
     $name = $_FILES['files']['name'][0];
     $size = $_FILES['files']['size'][0];
     $tmp_name = $_FILES['files']['tmp_name'][0];
     if (get_file_ext($name) != 'xls') {
         $results['error'] = '对不起,系统只允许上传扩展名为 <strong>xls</strong> 的电子表格文件!';
         $results['is_success'] = false;
     } else {
         if ($size > 2000000) {
             $results['error'] = '对不起,系统只允许上传小于 <strong>2M</strong> 的电子表格文件!';
             $results['is_success'] = false;
         } else {
             if (!empty($tmp_name)) {
                 $data = new \Spreadsheet_Excel_Reader();
                 $data->setOutputEncoding('UTF-8');
                 $cols = 12;
                 /* 每一行有12个单元格 */
                 $data->read($tmp_name);
                 error_reporting(E_ALL ^ E_NOTICE);
                 // 对电子表格的每一行进行循环
                 // 检测到某个单元格不存在时,设定其为空值
                 $rows = array();
                 //debug( $data->sheets[0]['cells'] );
                 foreach ($data->sheets[0]['cells'] as $row) {
                     for ($i = 1; $i <= $cols; $i++) {
                         if (!isset($row[$i])) {
                             $row[$i] = '';
                         }
                         // 转换部门名称为部门id值
                         if ($i == 6 && !empty($row[$i])) {
                             $row[$i] = get_group_id($row[$i]);
                         }
                         //  转换产品类型为id值
                         if ($i == 10) {
                             $row[$i] = get_type_id($row[$i]);
                         }
                         // 生产数量如果为空,则置0
                         if ($i == 4 && empty($row[$i])) {
                             $row[$i] = 0;
                         }
                         // 计划完成时间
                         if ($i == 5 && !empty($row[$i])) {
                             $row[$i] = change_date_style($row[$i]);
                         }
                     }
                     $rows[] = $row;
                 }
                 // 导入数据库
                 foreach ($rows as $row) {
                     //debug( $row );
                     $prod = new \Model\Production();
                     $prod->num = $row[1];
                     $prod->name = $row[2];
                     $prod->graphic_num = $row[3];
                     $prod->count = $row[4];
                     $prod->planned_completion_date = $row[5];
                     $prod->graphic_src = $row[6];
                     $prod->use_dep = 18;
                     $prod->completion_contact_person = $row[7];
                     $prod->completion_contact_phone = $row[8];
                     $prod->graphic_count = $row[9];
                     $prod->type = $row[10];
                     $prod->project_src = $row[11];
                     $prod->remark = $row[12];
                     $prod->user_id = $_SESSION['user_id'];
                     if ($prod->is_valid()) {
                         $prod->save();
                     } else {
                         //debug( $prod->errors );
                         // 如果某条导入失败
                         // 记录该条目的生产指令号,产品名称
                         // 以及具体的错误原因
                         $errors = array();
                         foreach ($prod->errors as $error) {
                             $errors[] = $error;
                         }
                         $results['failed_items'][] = array('num' => $prod->num, 'name' => $prod->name, 'errors' => $errors);
                     }
                 }
                 //debug( $rows );*/
                 //debug( $rows );
                 //debug( $rows );
                 $results['is_success'] = true;
             }
         }
     }
     echo json_encode($results);
 }
Esempio n. 7
0
 function outport($type)
 {
     // 工装管理员 生产安全部
     if (!has_perm(6, 1)) {
         exit;
     }
     $app = get_app();
     $type = $type == 'is_done' ? 1 : 0;
     // 查询
     $prods = Production::find('all', array('conditions' => array('is_done = ?', $type), 'order' => 'id desc'));
     // data
     $data[0] = array('指令号', '名称', '图号', '数量', '计划完工时间', '是否完工', '图纸来源', '项目来源', '联系人', '联系电话', '备注');
     foreach ($prods as $prod) {
         $data[] = array($prod->num, $prod->name, $prod->graphic_num, $prod->count, $prod->planned_completion_date ? date('Y-m-d', strtotime($prod->planned_completion_date)) : '', $type ? '是' : '否', get_prod_graphic_src($prod->graphic_src), $prod->project_src, $prod->completion_contact_person, $prod->completion_contact_phone, $prod->remark);
     }
     // xml
     $app->response->headers->set('Content-Type', 'application/vnd.ms-excel; charset=UTF-8');
     $xls = new \Excel_XML('UTF-8', true, date('Y-m-d') . '_Prod');
     $xls->addArray($data);
     $xls->generateXML(date('Y-m-d') . '_Prod');
 }
Esempio n. 8
0
 function edit($work_id)
 {
     $app = get_app();
     $work = Work::find_by_id($work_id);
     $staffs = Staff::find('all');
     // 记录更新之前的生产数量和完工数量
     // 只有当这连个值发生了变化才去调用
     // update_count函数更新完工状态
     $work_count = $work->count;
     $work_count_done = $work->count_done;
     // 分配件数改为可编辑状态
     // 取得现场工时分配件数的上限
     $request_count = $app->request()->post('count');
     if (check_float($request_count)) {
         $request_count = round($request_count, get_float_num($request_count));
     }
     $available_count = Process::get_available_count($work->process->id, get_float_num($request_count));
     // POST
     if ($app->request()->isPost()) {
         $post = $app->request()->post();
         // 修改work之前验证
         if ($post['count'] == 0) {
             $results['errors'] = array('分配件数必须大于0, 请重新调整参数!');
             $results['is_success'] = false;
         } else {
             if ($post['count_done'] > $post['count']) {
                 $results['errors'] = array('完工件数大于生产件数, 请重新调整参数!');
                 $results['is_success'] = false;
             } else {
                 if ($request_count > $available_count + $work_count) {
                     $results['errors'] = array('您分配的生产数量超过了工序定义的最大值!');
                     $results['is_success'] = false;
                 } else {
                     if ($work->count_check == 0) {
                         $results['errors'] = array('对不起,未交验的现场工时不能编辑!');
                         $results['is_success'] = false;
                     } else {
                         if (has_perm(2, 4)) {
                             $work->count = $post['count'];
                             $work->count_done = $post['count_done'];
                             $work->count_valid = $post['count_valid'];
                             $work->count_invalid = $post['count_invalid'];
                             $work->count_concession = $post['count_concession'];
                             $work->staff_id = $post['staff_id'];
                             // 完工数量或生产数量发生变动才更新
                             // 对应现场工时的完工时间和完工状态
                             if ($post['count_done'] != $work_count_done || $post['count'] != $work_count) {
                                 if ($post['count_done'] == $work->count) {
                                     $work->is_done = 1;
                                     $work->completion_date = date('Y-m-d');
                                 }
                                 if ($post['count_done'] < $work->count) {
                                     $work->is_done = 0;
                                     $work->completion_date = '';
                                 }
                             }
                         }
                         /*if( has_perm( 3,4 ) ){
                         
                         					
                         					$work->ticket = $post['ticket'];
                         				}*/
                         if (has_perm(2, 4) || has_perm(3, 4)) {
                             if ($post['completion_date']) {
                                 $work->completion_date = date('Y-m-d', strtotime($post['completion_date']));
                             }
                             $work->remark = $post['remark'];
                         }
                         $work->save();
                         $results['is_success'] = true;
                         $results['newNode'] = array('id' => $work->id, 'name' => $work->staff->name, 'staff_id' => $work->staff->id, 'staff_name' => $work->staff->name, 'count' => $work->count, 'count_valid' => $work->count_valid, 'count_concession' => $work->count_concession, 'count_invalid' => $work->count_invalid, 'count_check' => $work->count_check, 'count_done' => $work->count_done, 'is_done' => $work->is_done, 'completion_date' => $work->completion_date ? date('Y-m-d', strtotime($work->completion_date)) : '', 'check_date' => $work->check_date ? date('Y-m-d', strtotime($work->check_date)) : '', 'remark' => $work->remark, 'font' => get_work_node_color($work), 'isParent' => false, 'type' => 'work', 'icon' => get_path('/webroot/css/img/diy/9.png', true));
                         // 完工数量或生产数量发生变动才更新
                         if ($post['count_done'] != $work_count_done || $post['count'] != $work_count) {
                             Process::update_count($work->process);
                             Part::update_count($work->process->part);
                             Production::update_count($work->process->part->production);
                         }
                         // 如果当前现场工时的父级工序已经完工
                         // 自动更新下一道工序的投产日期
                         if ($work->process->is_done) {
                             $proc = Process::find_next($work->process);
                             // 当 next_proc 没有指定投产日期时,才自动更新投产日期
                             if ($proc && empty($proc->production_date)) {
                                 $proc->production_date = date('Y-m-d');
                                 $proc->save();
                             }
                         }
                     }
                 }
             }
         }
         echo json_encode($results);
     }
 }
Esempio n. 9
0
 function search_by_date($start_date, $end_date)
 {
     $parts_group = Production::get_parts_group($start_date, $end_date);
     render_with_layout('misc.php', 'Urgent/list_group_by_date_or_part.php', compact('parts_group'));
 }
Esempio n. 10
0
 function reset_done($proc_id)
 {
     if (!has_perm(2, 4)) {
         exit;
     }
     $proc = Process::find_by_id($proc_id);
     if ($proc) {
         $proc->count_done = 0;
         $proc->is_done = false;
         $proc->completion_date = '';
         $proc->save();
         // 更新上一级节点
         Part::update_count($proc->part);
         Production::update_count($proc->part->production);
         //
         echo 'success';
     }
 }