public function reviewAction() { // 返回值数组 $result = array('success' => true, 'info' => '审核成功'); $request = $this->getRequest()->getParams(); /* echo '<pre>'; print_r($request); exit; */ $review_id = isset($request['review_id']) ? $request['review_id'] : null; $review_operate = isset($request['review_operate']) ? $request['review_operate'] : null; $review_current_step = isset($request['review_current_step']) ? $request['review_current_step'] : null; // 当前阶段(review表ID) $review_last_step = isset($request['review_last_step']) ? $request['review_last_step'] : null; // 是否当前阶段为最后一阶段 $review_to_finish = isset($request['review_to_finish']) ? $request['review_to_finish'] : null; // 是否批准后当前阶段结束 $review_next_step = isset($request['review_next_step']) ? $request['review_next_step'] : null; // 下一阶段(review表ID) $review_remark = isset($request['review_remark']) ? $request['review_remark'] : null; if ($review_id && $review_operate) { $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user_id = $user_session->user_info['user_id']; // 评审意见 $review_info = '意见: ' . $review_remark; $invoice = new Erp_Model_Purchse_Invoice(); $invoiceItems = new Erp_Model_Purchse_Invoiceitems(); $user = new Application_Model_User(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $invoiceData = $invoice->getData(null, $review_id); // 更新审核状态及审核意见 if ($review_operate == 'no') { // 更新采购申请状态 $review_info = $now . ': ' . $user_session->user_info['user_name'] . ' [审核-拒绝] [' . $review_info . ']'; $data = array('state' => 1, 'review_info' => $invoiceData['review_info'] . '<br>' . $review_info); // 更新订单状态 $invoice->update($data, "id = " . $review_id); // 删除当前申请的审核配置 $review->delete("type = 'purchse_invoice_add' and file_id = " . $review_id); // 发送邮件通知申请人 $reviewResult = '<font style="color: #FF0000"><b>拒绝</b></font>'; $mail = new Application_Model_Log_Mail(); $applyEmployeeData = $user->fetchRow("id = " . $invoiceData['create_user'])->toArray(); $applyEmployee = $employee->fetchRow("id = " . $applyEmployeeData['employee_id'])->toArray(); $to = $applyEmployee['email']; // 获取币种信息 $currency = new Erp_Model_Setting_Currency(); $currencyInfo = $currency->getInfoByCode($invoiceData['currency']); $total = $invoiceData['total']; if ($invoiceData['currency'] != 'CNY') { $total = $invoiceData['forein_total']; } $mailContent = '<div>采购发票审核:</div> <div> <p><b>审核人:</b>' . $user_session->user_info['user_name'] . '</p> <p><b>审核结果:</b>' . $reviewResult . '</p> <p><b>审核意见:</b>' . $review_remark . '</p> <p><b>发票号:</b>' . $invoiceData['number'] . '</p> <p><b>申请人:</b>' . $invoiceData['creater'] . '</p> <p><b>金额:</b><a style="color: #467500;font-weight: bold;">' . $currencyInfo['symbol'] . $total . '</a></p> <p><b>备注:</b>' . $invoiceData['remark'] . '</p> <p><b>申请时间:</b>' . $invoiceData['create_time'] . '</p> <p><b>更新时间:</b>' . $invoiceData['update_time'] . '</p> <hr> <p><b>审核日志:</b></p><p>' . $invoiceData['review_info'] . '</p> </div>'; $mailData = array('type' => '消息', 'subject' => '采购发票-审核', 'to' => $to, 'cc' => $user_session->user_info['user_email'], 'user_id' => $invoiceData['create_user'], 'content' => $mailContent, 'add_date' => $now); try { // 记录邮件日志并发送邮件 $mail->send($mail->insert($mailData)); } catch (Exception $e) { $result['success'] = false; $result['info'] = $e->getMessage(); } } else { $help = new Application_Model_Helpers(); $review_info = $now . ': ' . $user_session->user_info['user_name'] . ' [审核-批准] [' . $review_info . ']'; $invoiceUpdateData = array('review_info' => $invoiceData['review_info'] . '<br>' . $review_info); $reviewData = $review->fetchRow("id = " . $review_current_step)->toArray(); $actual_user = $reviewData['actual_user'] == '' ? $user_session->user_info['employee_id'] : $reviewData['actual_user'] . ',' . $user_session->user_info['employee_id']; $data = array('actual_user' => $actual_user, 'finish_time' => $now, 'finish_flg' => 1); // 当前审核阶段为最后一阶段 if ($review_last_step == 1) { // 当前阶段已完结 if ($review_to_finish == 1) { $data = array('actual_user' => $actual_user, 'finish_time' => $now, 'finish_flg' => 1); $reviewResult = '<font style="color: #006400"><b>发布</b></font>'; // 发布 // 更新申请状态 $invoiceUpdateData['state'] = 2; $invoiceUpdateData['release_time'] = $now; // 更新审核记录表 $review->update($data, "id = " . $review_current_step); $mail = new Application_Model_Log_Mail(); $applyEmployeeData = $user->fetchRow("id = " . $invoiceData['create_user'])->toArray(); $applyEmployee = $employee->fetchRow("id = " . $applyEmployeeData['employee_id'])->toArray(); $to = $applyEmployee['email']; // 获取币种信息 $currency = new Erp_Model_Setting_Currency(); $currencyInfo = $currency->getInfoByCode($invoiceData['currency']); $total = $invoiceData['total']; if ($invoiceData['currency'] != 'CNY') { $total = $invoiceData['forein_total']; } $mailContent = '<div>采购发票审核批准,请登录系统查看:</div> <div> <p><b>审核人:</b>' . $user_session->user_info['user_name'] . '</p> <p><b>审核结果:</b>' . $reviewResult . '</p> <p><b>审核意见:</b>' . $review_remark . '</p> <p><b>发票号:</b>' . $invoiceData['number'] . '</p> <p><b>申请人:</b>' . $invoiceData['creater'] . '</p> <p><b>金额:</b><a style="color: #467500;font-weight: bold;">' . $currencyInfo['symbol'] . $total . '</a></p> <p><b>备注:</b>' . $invoiceData['remark'] . '</p> <p><b>申请时间:</b>' . $invoiceData['create_time'] . '</p> <p><b>更新时间:</b>' . $invoiceData['update_time'] . '</p> <hr> <p><b>审核日志:</b></p><p>' . $invoiceUpdateData['review_info'] . '</p> </div>'; $mailData = array('type' => '消息', 'subject' => '采购发票-发布', 'to' => $to, 'cc' => $user_session->user_info['user_email'], 'user_id' => $invoiceData['create_user'], 'content' => $mailContent, 'add_date' => $now); try { // 记录邮件日志并发送邮件 $mail->send($mail->insert($mailData)); } catch (Exception $e) { $result['success'] = false; $result['info'] = $e->getMessage(); } } else { $data = array('actual_user' => $actual_user); $review->update($data, "id = " . $review_current_step); } } else { // 当前阶段已完结 if ($review_to_finish == 1) { $data = array('actual_user' => $actual_user, 'finish_time' => $now, 'finish_flg' => 1); $reviewResult = '<font style="color: #006400"><b>批准</b></font>'; // 进入下一阶段 // 更新审核记录表 $review->update($data, "id = " . $review_current_step); // 邮件通知下一阶段审核人 if ($review->fetchAll("id = " . $review_next_step)->count() > 0) { $reviewNextStepData = $review->fetchRow("id = " . $review_next_step)->toArray(); $mailTo = explode(',', $reviewNextStepData['plan_user']); if ($mailTo) { // 获取币种信息 $currency = new Erp_Model_Setting_Currency(); $currencyInfo = $currency->getInfoByCode($invoiceData['currency']); $total = $invoiceData['total']; if ($invoiceData['currency'] != 'CNY') { $total = $invoiceData['forein_total']; } $mailContent = '<div>新建采购发票,请登录系统查看:</div> <div> <p><b>订单号:</b>' . $invoiceData['number'] . '</p> <p><b>申请人:</b>' . $invoiceData['creater'] . '</p> <p><b>金额:</b><a style="color: #467500;font-weight: bold;">' . $currencyInfo['symbol'] . $total . '</a></p> <p><b>备注:</b>' . $invoiceData['remark'] . '</p> <p><b>申请时间:</b>' . $invoiceData['create_time'] . '</p> <p><b>更新时间:</b>' . $invoiceData['update_time'] . '</p> <hr> <p><b>审核日志:</b></p><p>' . $invoiceUpdateData['review_info'] . '</p> </div>'; $mailData = array('type' => '消息', 'subject' => '采购发票-新建', 'cc' => $user_session->user_info['user_email'], 'content' => $mailContent, 'add_date' => $now); $resultMail = $help->sendMailToStep($mailTo, $mailData); if (!$resultMail['success']) { $result = $resultMail; } } } } else { $data = array('actual_user' => $actual_user); $review->update($data, "id = " . $review_current_step); } } // 更新申请状态 $invoice->update($invoiceUpdateData, "id = " . $review_id); } } echo Zend_Json::encode($result); exit; }
/** * 获取文件编码及文件信息 */ public function getfilesbyidAction() { // 获取参数 $request = $this->getRequest()->getParams(); $id = $request['id']; $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $myDept = $user_session->user_info['dept_id']; $nowDate = date('Y-m-d'); $files = new Dcc_Model_Files(); $record = new Dcc_Model_Record(); $upload = new Dcc_Model_Upload(); $codeModel = new Dcc_Model_Code(); $share = new Dcc_Model_Share(); $review = new Dcc_Model_Review(); $modelUser = new Application_Model_User(); $data = $files->getDataById($id); // [id, code, ver, file_id, file_name, file_path, file_view_path] $result = array(); $row0 = $data[0]; $names = explode(',', $row0['name']); $codes = explode(',', $row0['code']); $vers = explode(',', $row0['ver']); $description = explode('|', $row0['description']); $project_info = explode(',', $row0['project_info']); $final_codes = array(); $final_vers = array(); $final_names = array(); $final_descs = array(); $final_projs = array(); $k = 0; for ($i = 0; $i < count($names); $i++) { $sub_names = explode('|', $names[$i]); $final_codes[$k] = $codes[$i]; $final_vers[$k] = $vers[$i]; if (isset($description[$i]) && $description[$i]) { $final_descs[$k] = $description[$i]; } else { $final_descs[$k] = ""; } if (isset($project_info[$i]) && $project_info[$i]) { $final_projs[$k] = $project_info[$i]; } else { $final_projs[$k] = ""; } $final_names[$k] = $sub_names[0]; $k++; for ($j = 1; $j < count($sub_names); $j++) { $final_codes[$k] = $codes[$i]; $final_vers[$k] = $vers[$i]; $final_names[$k] = $sub_names[$j]; if (isset($description[$i]) && $description[$i]) { $final_descs[$k] = $description[$i]; } else { $final_descs[$k] = ""; } if (isset($project_info[$i]) && $project_info[$i]) { $final_projs[$k] = $project_info[$i]; } else { $final_projs[$k] = ""; } $k++; } } $catalog = new Product_Model_Catalog(); for ($i = 0; $i < count($data); $i++) { $paths = $this->getPathByName($data, trim($final_names[$i])); $row = $data[$i]; $result[$i]['id'] = $row['id']; $result[$i]['state'] = $row['state']; if ($final_descs[$i]) { $result[$i]['description'] = $final_descs[$i]; } else { // 获取描述 $descData = $codeModel->getJoinList("code = '{$final_codes[$i]}'", array(), array('description', 'project_no')); if (count($descData) > 0) { $result[$i]['description'] = $descData[0]['description']; if (!$final_projs[$i]) { $final_projs[$i] = $descData[0]['project_no']; } } } $result[$i]['project_no'] = $final_projs[$i]; if ($final_projs[$i]) { $projData = $catalog->getById($final_projs[$i]); if ($projData && $projData['model_internal']) { $result[$i]['project_name'] = $projData['model_internal']; } } $result[$i]['code'] = $final_codes[$i]; $result[$i]['ver'] = $final_vers[$i]; $result[$i]['file_id'] = $paths[0]; $result[$i]['file_name'] = $final_names[$i]; $result[$i]['file_path'] = $paths[1]; $result[$i]['file_view_path'] = $paths[2]; // 权限检查 // 有权限的情况:1、本人上传的文件 2、本人提交的文件评审 3、本人参与审核的文件评审 4、共享给我的 5、将要审核的审核人 6、文件管理员、BOM管理员、物料管理员 // 首先检查文件是否存在 $result[$i]['exists'] = true; if (!file_exists($paths[1])) { $result[$i]['exists'] = false; } $role = false; if ($modelUser->checkPermissionByRoleName('物料管理员') || $modelUser->checkPermissionByRoleName('文件管理员') || $modelUser->checkPermissionByRoleName('系统管理员') || $modelUser->checkPermissionByRoleName('BOM管理员')) { $role = true; } else { if ($row0['create_user'] == $user || $row0['update_user'] == $user) { $role = true; } else { if ($record->fetchAll("table_id = {$id} and handle_user = {$user} and table_name = 'oa_doc_files' and action = '审批'")->count() > 0) { $role = true; } else { if ($upload->fetchAll("id = " . $row['id'] . " and (create_user = {$user} or update_user = {$user})")->count() > 0) { $role = true; } else { if ($share->fetchAll("shared_id = " . $row['id'] . " and type = 'upload' and share_time_begin <= '{$nowDate}' and share_time_end >= '{$nowDate}' and (FIND_IN_SET({$user}, share_user) or FIND_IN_SET({$myDept}, share_dept))")->count() > 0) { $role = true; } else { if ($review->fetchAll("file_id = {$id} and FIND_IN_SET({$user}, plan_user) and type = 'files'")->count() > 0) { $role = true; } } } } } } $result[$i]['role'] = $role; } echo Zend_Json::encode($result); exit; }
public function getReviewState($type, $file_id) { $reviewState = array('info' => null, 'reviewer' => array(), 'reviewer_finished' => array(), 'step_chk' => array('current_step' => 0, 'last_step' => 0, 'to_finish' => 1, 'next_step' => 0)); $review = new Dcc_Model_Review(); // 获取审核情况 $reviewRes = $review->fetchAll("type = '" . $type . "' and file_id = " . $file_id, array('id')); if ($reviewRes->count() > 0) { $reviewData = $reviewRes->toArray(); // 检查当前阶段是否为审核最后阶段 if (count($reviewData) == 1 || $reviewData[count($reviewData) - 1]['finish_flg'] == 0 && count($reviewData) > 1 && $reviewData[count($reviewData) - 2]['finish_flg'] == 1) { // 最后一阶段未审核,倒数第二阶段已审核 $reviewState['step_chk']['last_step'] = 1; } // 审核状态信息 $reviewStateArr = array(); // 当前阶段信息 $currentStepMethod = 1; $currentStepEmployee = array(); $currentStepEmployeeFinished = ""; $i = 0; foreach ($reviewData as $r) { $reviewType = $r['method'] == 1 ? '任意' : '全部'; $actual_user = explode(',', $r['actual_user']); $reviewEmployeeArr = array('id' => explode(',', $r['plan_user']), 'name' => $this->getEmployeeNameByIdArr(explode(',', $r['plan_user']))); if ($r['method'] == 2) { for ($j = 0; $j < count($reviewEmployeeArr['id']); $j++) { if (in_array($reviewEmployeeArr['id'][$j], $actual_user)) { $reviewEmployeeArr['name'][$j] .= ': 已审核'; } } } $reviewEmployee = implode(', ', $reviewEmployeeArr['name']) . '(' . $reviewType . ')'; $stepStr = '<a title="' . $reviewEmployee . '">' . $r['step_name'] . '</a>'; if ($r['finish_flg'] == 0) { if ($reviewState['step_chk']['current_step'] > 0) { array_push($reviewStateArr, $stepStr); } else { array_push($reviewStateArr, '<b>' . $stepStr . '</b>'); $currentStepEmployee = $reviewState['reviewer'] = $reviewEmployeeArr['id']; $reviewState['step_chk']['current_step'] = $r['id']; if (isset($reviewData[$i + 1])) { // 获取下一阶段review表ID,作为阶段跳转或发布申请的备用 $reviewState['step_chk']['next_step'] = $reviewData[$i + 1]['id']; } $currentStepMethod = $r['method']; $currentStepEmployeeFinished = $reviewState['reviewer_finished'] = $actual_user; } } else { array_push($reviewStateArr, $stepStr); } $i++; } // 当前阶段方法为全部:检查是否所有人已审核(自己除外) if ($currentStepMethod == 2) { $user_session = new Zend_Session_Namespace('user'); $self_id = $user_session->user_info['employee_id']; foreach ($currentStepEmployee as $e) { if ($self_id != $e && !in_array($e, $currentStepEmployeeFinished)) { $reviewState['step_chk']['to_finish'] = 0; break; } } } $reviewState['info'] = implode(' > ', $reviewStateArr); } return $reviewState; //<img src="' + HOME_PATH + '/public/images/icons/record_next.png"></img> }
/** * @abstract 审核 * @return null */ public function reviewAction() { // 返回值数组 $result = array('success' => true, 'result' => true, 'info' => '审批成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $val = (object) $request; $materiel = new Product_Model_Materiel(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $desc = new Product_Model_Desc(); $id = $val->id; $remark = $val->remark1; $pass = $val->review_result; $publish = false; if (isset($val->ids) && $val->ids && strpos($val->ids, ',') !== false) { // 多个 $ids = explode(',', $val->ids); } else { $ids = array($id); } foreach ($ids as $id) { // 获取物料信息 $materielData = $desc->getOne($id); if (!$materielData) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } $review_id = $materielData->review_id; // 获取当前审核情况 // 如果record记录被删除或状态已改变,报错 $reviewWhere = "id = {$review_id}"; $reviewRows = $review->getList($reviewWhere, "materiel_desc"); if (count($reviewRows) == 0) { $result['result'] = false; $result['info'] = "非法数据"; echo Zend_Json::encode($result); exit; } $reviewRow = $reviewRows[0]; if ($reviewRow['finish_flg'] != 0) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } // 处理记录 $recordData = array("type" => "materiel_desc", "table_name" => "oa_product_materiel_desc", "table_id" => $id, "handle_user" => $user, "handle_time" => $now, "action" => "审批", "result" => $pass == 1 ? "批准" : ($pass == 2 ? "拒绝" : "转审"), "ip" => $_SERVER['REMOTE_ADDR'], "remark" => $remark); // 增加记录 $record->insert($recordData); // 通过方式 $method = $reviewRow['method']; if ($pass == 1) { if ($method == 2) { // 任何一人处理即通过 $finish_flg = 1; $actual_user = $user; $finish_time = $now; } else { // 所有人都需要审核,检查是否所有人都已经审核 $plan_user = $reviewRow['plan_user']; $actual_user = $reviewRow['actual_user']; $actual_user = !$actual_user ? $user : $actual_user . "," . $user; // 检查计划审核人和实际审核人是否一致 $planA = explode(',', $plan_user); $actualA = explode(',', $actual_user); $passFlg = true; foreach ($planA as $u) { if ($u && !in_array($u, $actualA)) { $passFlg = false; } } if ($passFlg) { $finish_flg = 1; $finish_time = $now; } else { $finish_flg = 0; $finish_time = null; } } // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } else { if ($pass == 3) { // 转审 $finish_flg = 0; if ($method == 2) { // 处理方式为任意时,一个人转审之后其他人员也删除 $plan_user = str_replace('E', '', $val->transfer_id); } else { // 更改审核情况中的审核人 $plan_users = explode(',', $reviewRow['plan_user']); for ($i = 0; $i < count($plan_users); $i++) { if ($plan_users[$i] == $user) { $plan_users[$i] = str_replace('E', '', $val->transfer_id); break; } } $plan_user = implode(',', $plan_users); } // 审核情况 $reviewData = array("plan_user" => $plan_user, "method" => 1); } else { // 退回 $actual_user = null; $finish_time = null; $finish_flg = 0; // 退回选项 $return = $reviewRow['return']; if ($return == 2) { // 退到初始状态 // 需更新的审核记录: 所有 $reviewWhere = "type = 'materiel_desc' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 4) { // 退到本阶段开始 // 需更新的审核记录 $reviewWhere = "type = 'materiel_desc' and finish_flg = 0 and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 3) { // 退到上一阶段 // 需更新的审核记录:最后一个finish_flg为1的数据和第一个finish_flg为0的数据 $last_1 = $first_0 = 0; foreach ($reviewRows as $r) { if ($r['finish_flg'] == 1) { $last_1 = $r['id']; } if ($r['finish_flg'] == 0 && $first_0 == null) { $first_0 = $r['id']; } } $reviewWhere = "id = {$last_1} or id = {$first_0}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { $fileWhere = "id = {$id}"; // 更新文件状态为退回 $mData = array("state" => "Return"); // 退到初始状态 // 更新所有record的finish_flg为0 $reviewWhere = "type = 'materiel_desc' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } } } } } // 如果所有record的记录的finish_flg 都为1,则发布 if ($finish_flg == 1 && $review->fetchAll("type = 'materiel_desc' and finish_flg = 0 and file_id = {$id}")->count() == 1) { $publish = true; // 修改物料信息 $descData = array('ver' => $materielData->ver_after, 'name' => $materielData->name_after, 'description' => $materielData->desc_after, 'manufacturers' => $materielData->manufacturers_after, 'supply1' => $materielData->supply1_after, 'supply2' => $materielData->supply2_after, 'data_file_id' => $materielData->data_file_id_after, 'tsr_id' => $materielData->tsr_id_after, 'first_report_id' => $materielData->first_report_id_after); $descWhere = "id = " . $materielData->mid; $mData = array("state" => "Active", "archive_time" => $now); $fileWhere = "id = {$id}"; } try { // 更新审核情况 $review->update($reviewData, $reviewWhere); // 更新文件 if (isset($fileWhere)) { $desc->update($mData, $fileWhere); } if (isset($descWhere)) { $materiel->update($descData, $descWhere); } $this->operate("物料变更评审"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } // 邮件任务 // 文件提交者或更新人 $owner = $materielData['create_user']; $dev = false; $type = "物料变更申请(物料代码:" . $materielData['code'] . ")"; // 发邮件的情况: // 1、单站审核结束 $finish_flg = 1 && $publish = false if ($finish_flg == 1 && !$publish) { $subject = $type . "审批"; // $to = 下一站审核人 $current = $review->getFirstNoReview("materiel_desc", $id); $to = $employee->getInfosByOneLine($current['plan_user']); // $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "你有一个" . $type . "需要审批,请登录系统查看详情!"; } // 2、所有审核结束 $publish = true if ($publish) { $subject = $type . "发布"; $to = $employee->getInfosByOneLine($owner); $cc = $employee->getInfosByOneLine($record->getEmployeeIds($materielData['id'], 'materiel_desc')); $cc = $cc['email']; // $cc = ""; $detail = "物料代码:" . $materielData['code']; if ($materielData['name_before'] != $materielData['name_after']) { if ($detail) { $detail .= '<br>'; } $detail .= "名称:" . $materielData['name_before'] . " → " . $materielData['name_after']; } if ($materielData['desc_before'] != $materielData['desc_after']) { if ($detail) { $detail .= '<br>'; } $detail .= "描述:" . $materielData['desc_before'] . " → " . $materielData['desc_after']; } if ($materielData['supply1_before'] != $materielData['supply1_after']) { if ($detail) { $detail .= '<br>'; } $detail .= "供应商1:" . $materielData['supply1_code_before'] . $materielData['supply1_cname_before'] . " → " . $materielData['supply1_code_after'] . $materielData['supply1_cname_after']; } if ($materielData['supply2_before'] != $materielData['supply2_after']) { if ($detail) { $detail .= '<br>'; } $detail .= "供应商2:" . $materielData['supply2_code_before'] . $materielData['supply2_cname_before'] . " → " . $materielData['supply2_code_after'] . $materielData['supply2_cname_after']; } if ($materielData['manufacturers_before'] != $materielData['manufacturers_after']) { if ($detail) { $detail .= '<br>'; } $detail .= "制造商:" . $materielData['manufacturers_before'] . " → " . $materielData['manufacturers_after']; } $content = "你申请的" . $type . "已通过审批,物料信息已自动变更,请登录系统查看详情!<br>变更详情:<br>{$detail}"; } // 3、退回 isset($return) if (isset($return)) { $subject = $type . "退回"; $to = $employee->getInfosByOneLine($owner); $cc = ""; // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $cc = $employee->getInfosByOneLine($orgUser); $cc = $cc['email']; } $content = "你申请的" . $type . "已被退回,请登录系统查看详情!"; } // 4、转审 $pass == 3 if ($pass == 3) { $subject = $type . "转审"; $toUser = str_replace('E', '', $val->transfer_id); $to = $employee->getInfosByOneLine($toUser); // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $owner .= "," . $orgUser; } $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "有新的" . $type . "被转移到你处审批,请登录系统查看详情!"; } if (isset($subject)) { $mailData = array('type' => $type, 'subject' => $subject, 'to' => $to['email'], 'cc' => $cc, 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mail = new Application_Model_Log_Mail(); try { $mailId = $mail->insert($mailData); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } if ($mailId) { $mail->send($mailId); } } } echo Zend_Json::encode($result); exit; }
/** * @abstract 审核 * @return null */ public function reviewAction() { // 返回值数组 $result = array('success' => true, 'result' => true, 'info' => '审批成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $val = (object) $request; $materiel = new Product_Model_Materiel(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $id = $val->id; $remark = $val->remark1; $pass = $val->review_result; $publish = false; // 获取物料信息 $materielData = $materiel->getOne($id); if (!$materielData) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } $review_id = $materielData->review_id; // 获取当前审核情况 // 如果record记录被删除或状态已改变,报错 $reviewWhere = "id = {$review_id}"; $reviewRows = $review->getList($reviewWhere); if (count($reviewRows) == 0) { $result['result'] = false; $result['info'] = "非法数据"; echo Zend_Json::encode($result); exit; } $reviewRow = $reviewRows[0]; if ($reviewRow['finish_flg'] != 0) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } // 处理记录 $recordData = array("type" => "materiel", "table_name" => "oa_product_materiel", "table_id" => $id, "handle_user" => $user, "handle_time" => $now, "action" => "审批", "result" => $pass == 1 ? "批准" : ($pass == 2 ? "拒绝" : "转审"), "ip" => $_SERVER['REMOTE_ADDR'], "remark" => $remark); // 增加记录 $record->insert($recordData); if ($pass == 1) { // 通过方式 $method = $reviewRow['method']; if ($method == 2) { // 任何一人处理即通过 $finish_flg = 1; $actual_user = $user; $finish_time = $now; } else { // 所有人都需要审核,检查是否所有人都已经审核 $plan_user = $reviewRow['plan_user']; $actual_user = $reviewRow['actual_user']; $actual_user = !$actual_user ? $user : $actual_user . "," . $user; // 检查计划审核人和实际审核人是否一致 if (strlen($plan_user) == strlen($actual_user)) { $finish_flg = 1; $finish_time = $now; } else { $finish_flg = 0; $finish_time = null; } } // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } else { if ($pass == 3) { // 转审 $finish_flg = 0; // 更改审核情况中的审核人 $plan_users = explode(',', $reviewRow['plan_user']); for ($i = 0; $i < count($plan_users); $i++) { if ($plan_users[$i] == $user) { $plan_users[$i] = str_replace('E', '', $val->transfer_id); break; } } $plan_user = implode(',', $plan_users); // 审核情况 $reviewData = array("plan_user" => $plan_user, "method" => 1); } else { // 退回 $actual_user = null; $finish_time = null; $finish_flg = 0; // 退回选项 $return = $reviewRow['return']; if ($return == 2) { // 退到初始状态 // 需更新的审核记录: 所有 $reviewWhere = "type = 'materiel' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 4) { // 退到本阶段开始 // 需更新的审核记录 $reviewWhere = "type = 'materiel' and finish_flg = 0 and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 3) { // 退到上一阶段 // 需更新的审核记录:最后一个finish_flg为1的数据和第一个finish_flg为0的数据 $last_1 = $first_0 = 0; foreach ($reviewRows as $r) { if ($r['finish_flg'] == 1) { $last_1 = $r['id']; } if ($r['finish_flg'] == 0 && $first_0 == null) { $first_0 = $r['id']; } } $reviewWhere = "id = {$last_1} or id = {$first_0}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { $fileWhere = "id = {$id}"; // 更新文件状态为退回 $mData = array("state" => "Return"); // 退到初始状态 // 更新所有record的finish_flg为0 $reviewWhere = "type = 'materiel' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } } } } } // 如果所有record的记录的finish_flg 都为1,则发布 if ($finish_flg == 1 && $review->fetchAll("type = 'materiel' and finish_flg = 0 and file_id = {$id}")->count() == 1) { $publish = true; $code = $val->code; if (!$code) { // 自动生成物料编码 $code = $this->getCode($materielData->type); if (!$code) { $result['result'] = false; $result['info'] = "生成物料编码失败"; echo Zend_Json::encode($result); exit; } } $mData = array("state" => "Active", "code" => $code, "archive_time" => $now); $fileWhere = "id = {$id}"; } try { // 更新审核情况 $review->update($reviewData, $reviewWhere); // 更新文件 if (isset($fileWhere)) { $materiel->update($mData, $fileWhere); } $this->operate("物料评审"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } // 邮件任务 // 文件提交者或更新人 $owner = $materielData['create_user']; $dev = false; $type = "物料申请"; // 发邮件的情况: // 1、单站审核结束 $finish_flg = 1 && $publish = false if ($finish_flg == 1 && !$publish) { $subject = $type . "审批"; // $to = 下一站审核人 $current = $review->getCurrent("materiel", $id); $to = $employee->getInfosByOneLine($current['plan_user']); // $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "你有一个" . $type . "需要审批,请登录系统查看详情!"; } // 2、所有审核结束 $publish = true if ($publish) { $subject = $type . "发布"; $to = $employee->getInfosByOneLine($owner); $cc = ""; $content = "你申请的" . $type . "已通过审批,分配的物料编码为:" . $code . ",请登录系统查看详情!"; } // 3、退回 isset($return) if (isset($return)) { $subject = $type . "退回"; $to = $employee->getInfosByOneLine($owner); $cc = ""; // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $cc = $employee->getInfosByOneLine($orgUser); $cc = $cc['email']; } $content = "你申请的" . $type . "已被退回,请登录系统查看详情!"; } // 4、转审 $pass == 3 if ($pass == 3) { $subject = $type . "转审"; $toUser = str_replace('E', '', $val->transfer_id); $to = $employee->getInfosByOneLine($toUser); // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $owner .= "," . $orgUser; } $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "有新的" . $type . "被转移到你处审批,请登录系统查看详情!"; } if (isset($subject)) { $mailData = array('type' => $type, 'subject' => $subject, 'to' => $to['email'], 'cc' => $cc, 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mail = new Application_Model_Log_Mail(); try { $mailId = $mail->insert($mailData); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } if ($mailId) { $mail->send($mailId); } } echo Zend_Json::encode($result); exit; }
/** * @abstract 审核 * @return null */ public function reviewAction() { // 返回值数组 $result = array('success' => true, 'result' => true, 'info' => '审批成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $val = (object) $request; $materiel = new Product_Model_Materiel(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $id = $val->id; $remark = $val->remark1; $pass = $val->review_result; $publish = false; if (isset($val->code) && $val->code != '') { $code = $val->code; // 检查code是否重复 if ($materiel->fetchAll("id != {$id} and code = '" . $code . "'")->count() > 0) { $result['result'] = false; $result['info'] = "代码“" . $code . "”已经存在"; echo Zend_Json::encode($result); exit; } } if (isset($val->ids) && $val->ids && strpos($val->ids, ',') !== false) { // 多个 $ids = explode(',', $val->ids); } else { $ids = array($id); } $newCodes = array(); foreach ($ids as $id) { // 获取物料信息 $materielData = $materiel->getOne($id); if (!$materielData) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } $review_id = $materielData->review_id; // 获取当前审核情况 // 如果record记录被删除或状态已改变,报错 $reviewWhere = "id = {$review_id}"; $reviewRows = $review->getList($reviewWhere, "materiel"); if (count($reviewRows) == 0) { $result['result'] = false; $result['info'] = "非法数据"; echo Zend_Json::encode($result); exit; } $reviewRow = $reviewRows[0]; if ($reviewRow['finish_flg'] != 0) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } // 处理记录 $recordData = array("type" => "materiel", "table_name" => "oa_product_materiel", "table_id" => $id, "handle_user" => $user, "handle_time" => $now, "action" => "审批", "result" => $pass == 1 ? "批准" : ($pass == 2 ? "拒绝" : "转审"), "ip" => $_SERVER['REMOTE_ADDR'], "remark" => $remark); // 增加记录 $record->insert($recordData); // 通过方式 $method = $reviewRow['method']; if ($pass == 1) { if ($method == 2) { // 任何一人处理即通过 $finish_flg = 1; $actual_user = $user; $finish_time = $now; } else { // 所有人都需要审核,检查是否所有人都已经审核 $plan_user = $reviewRow['plan_user']; $actual_user = $reviewRow['actual_user']; $actual_user = !$actual_user ? $user : $actual_user . "," . $user; // 检查计划审核人和实际审核人是否一致 $planA = explode(',', $plan_user); $actualA = explode(',', $actual_user); $passFlg = true; foreach ($planA as $u) { if ($u && !in_array($u, $actualA)) { $passFlg = false; } } if ($passFlg) { $finish_flg = 1; $finish_time = $now; } else { $finish_flg = 0; $finish_time = null; } } // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } else { if ($pass == 3) { // 转审 $finish_flg = 0; if ($method == 2) { // 处理方式为任意时,一个人转审之后其他人员也删除 $plan_user = str_replace('E', '', $val->transfer_id); } else { // 更改审核情况中的审核人 $plan_users = explode(',', $reviewRow['plan_user']); // 审核人不在审核人列表中,并且是管理员,则替换所有人 if (!in_array($user, $plan_users) && (Application_Model_User::checkPermissionByRoleName('物料管理员') || Application_Model_User::checkPermissionByRoleName('系统管理员'))) { $plan_users = array(str_replace('E', '', $val->transfer_id)); } else { for ($i = 0; $i < count($plan_users); $i++) { if ($plan_users[$i] == $user) { $plan_users[$i] = str_replace('E', '', $val->transfer_id); break; } } } $plan_user = implode(',', $plan_users); } // 审核情况 $reviewData = array("plan_user" => $plan_user, "method" => 1); } else { // 退回 $actual_user = null; $finish_time = null; $finish_flg = 0; // 退回选项 $return = $reviewRow['return']; if ($return == 2) { // 退到初始状态 // 需更新的审核记录: 所有 $reviewWhere = "type = 'materiel' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 4) { // 退到本阶段开始 // 需更新的审核记录 $reviewWhere = "type = 'materiel' and finish_flg = 0 and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 3) { // 退到上一阶段 // 需更新的审核记录:最后一个finish_flg为1的数据和第一个finish_flg为0的数据 $last_1 = $first_0 = 0; foreach ($reviewRows as $r) { if ($r['finish_flg'] == 1) { $last_1 = $r['id']; } if ($r['finish_flg'] == 0 && $first_0 == null) { $first_0 = $r['id']; } } $reviewWhere = "id = {$last_1} or id = {$first_0}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { $fileWhere = "id = {$id}"; // 更新文件状态为退回 $mData = array("state" => "Return"); // 退到初始状态 // 更新所有record的finish_flg为0 $reviewWhere = "type = 'materiel' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } } } } } // 如果所有record的记录的finish_flg 都为1,则发布 if ($finish_flg == 1 && $review->fetchAll("type = 'materiel' and finish_flg = 0 and file_id = {$id}")->count() == 1) { $publish = true; if (!isset($code) || !$code) { // 自动生成物料编码 $code = $this->getCode($materielData->type, $materielData->project_no); if (!$code) { $result['result'] = false; $result['info'] = "生成物料编码失败"; echo Zend_Json::encode($result); exit; } else { if (count($ids) > 1) { $newCodes[] = $code; $result['info'] = "审批成功"; } else { $result['info'] = "审批成功,系统分配物料号:{$code}"; } } } $mData = array("state" => "Active", "code" => $code, "archive_time" => $now); $fileWhere = "id = {$id}"; // 如果有ds等文件,这些文件也设置为已归档 $data_file_id = $materielData->data_file_id; $tsr_id = $materielData->tsr_id; $first_report_id = $materielData->first_report_id; if ($data_file_id || $tsr_id || $first_report_id) { $uploadUpdWhere = " archive = 0 and (1=0 "; if ($data_file_id) { $uploadUpdWhere .= " or id = " . $data_file_id; } if ($tsr_id) { $uploadUpdWhere .= " or id = " . $tsr_id; } if ($first_report_id) { $uploadUpdWhere .= " or id = " . $first_report_id; } $uploadUpdWhere .= ")"; $uploadUpdData = array('archive' => 1, 'archive_time' => $now); } } try { // 更新审核情况 $review->update($reviewData, $reviewWhere); // 更新文件 if (isset($fileWhere)) { $materiel->update($mData, $fileWhere); } // 更新上传文件 if (isset($uploadUpdData)) { $upload = new Dcc_Model_Upload(); $upload->update($uploadUpdData, $uploadUpdWhere); } $this->operate("物料评审"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } // 邮件任务 // 文件提交者或更新人 $owner = $materielData['create_user']; $dev = false; $type = "物料申请"; // 发邮件的情况: // 1、单站审核结束 $finish_flg = 1 && $publish = false if ($finish_flg == 1 && !$publish) { $subject = $type . "审批"; // $to = 下一站审核人 $current = $review->getFirstNoReview("materiel", $id); $to = $employee->getInfosByOneLine($current['plan_user']); // $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "你有一个" . $type . "需要审批,请登录系统查看详情!"; } // 2、所有审核结束 $publish = true if ($publish) { $subject = $type . "发布"; $to = $employee->getInfosByOneLine($owner); $cc = $employee->getInfosByOneLine($record->getEmployeeIds($materielData['id'], 'materiel')); $cc = $cc['email']; $config = new Zend_Config_Ini(CONFIGS_PATH . '/application.ini', 'production'); if (isset($config) && isset($config->email->apply->publish)) { $to_plus = $config->email->apply->publish; if ($to_plus) { if ($cc) { $cc .= "," . $to_plus; } else { $cc = $to_plus; } } } // $cc = ""; $his = "<p><b>审核记录:</b><br>" . str_replace(',', '<br>', $record->getHis($materielData['id'], 'materiel')) . "</p>"; $content = "你申请的" . $type . "已通过审批。<p><b>物料编码:</b>" . $code . "</p><p><b>类别:</b>" . $this->getTypeByConnect($materielData['type'], '') . "</p><p><b>名称:</b>" . $materielData['name'] . "</p><p><b>描述:</b>" . $materielData['description'] . "</p><p><b>申请人:</b>" . $materielData['creater'] . "</p><p><b>申请时间:</b>" . $materielData['create_time'] . "</p>" . $his . "<p>请登录系统查看详情!</p>"; } // 3、退回 isset($return) if (isset($return)) { $subject = $type . "退回"; $to = $employee->getInfosByOneLine($owner); $cc = ""; // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $cc = $employee->getInfosByOneLine($orgUser); $cc = $cc['email']; } $content = "你申请的" . $type . "已被退回,<p><b>退回原因:</b>" . $remark . "</p>,请登录系统查看详情!"; } // 4、转审 $pass == 3 if ($pass == 3) { $subject = $type . "转审"; $toUser = str_replace('E', '', $val->transfer_id); $to = $employee->getInfosByOneLine($toUser); // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $owner .= "," . $orgUser; } $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "有新的" . $type . "被转移到你处审批,请登录系统查看详情!"; } if (isset($subject)) { $mailData = array('type' => $type, 'subject' => $subject, 'to' => $to['email'], 'cc' => $cc, 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mail = new Application_Model_Log_Mail(); try { $mailId = $mail->insert($mailData); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } if ($mailId) { $mail->send($mailId); } } $code = null; } if (count($newCodes) > 0) { $result['info'] .= ',系统分配物料号分别为:' . implode(',', $newCodes); } echo Zend_Json::encode($result); exit; }
/** * @abstract 审核文件 * @return null */ public function reviewAction() { // 返回值数组 $result = array('success' => true, 'result' => true, 'info' => '审批成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $val = (object) $request; $files = new Dcc_Model_Files(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $formval = new Admin_Model_Formval(); $employee = new Hra_Model_Employee(); $upgrade = new Dcc_Model_Upgrade(); $id = $val->id; $remark = $val->remark; $pass = $val->review_result; $review_id = $val->review_id; $publish = false; // 获取文件信息 $filesData = $files->getOne($id); // 获取当前审核情况 // 如果record记录被删除或状态已改变,报错 $reviewWhere = "id = {$review_id}"; $reviewRows = $review->getList($reviewWhere, "files"); if (count($reviewRows) == 0) { $result['result'] = false; $result['info'] = "非法数据"; echo Zend_Json::encode($result); exit; } $reviewRow = $reviewRows[0]; if ($reviewRow['finish_flg'] != 0) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } // 处理记录 $recordData = array("type" => "files", "table_name" => "oa_doc_files", "table_id" => $id, "handle_user" => $user, "handle_time" => $now, "action" => "审批", "result" => $pass == 1 ? "批准" : ($pass == 2 ? "拒绝" : "转审"), "ip" => $_SERVER['REMOTE_ADDR'], "remark" => $remark); // 增加记录 $record->insert($recordData); // 通过方式 $method = $reviewRow['method']; if ($pass == 1) { if ($method == 2) { // 任何一人处理即通过 $finish_flg = 1; $actual_user = $user; $finish_time = $now; } else { // 所有人都需要审核,检查是否所有人都已经审核 $plan_user = $reviewRow['plan_user']; $actual_user = $reviewRow['actual_user']; $actual_user = !$actual_user ? $user : $actual_user . "," . $user; // 检查计划审核人和实际审核人是否一致 // $plan_dept = $reviewRow['plan_dept']; // if ($plan_dept) { // // 获取部门所有人员 // $tmpUser = $employee->getAdapter()->query("select group_concat(id) as ids from oa_employee where dept_id in ( " . $plan_dept . ")")->fetchObject(); // if ($tmpUser->ids) { // if ($plan_user) // $plan_user .= ","; // $plan_user .= $tmpUser->ids; // } // } $planA = explode(',', $plan_user); $actualA = explode(',', $actual_user); $passFlg = true; foreach ($planA as $u) { if ($u && !in_array($u, $actualA)) { $passFlg = false; } } if ($passFlg) { $finish_flg = 1; $finish_time = $now; } else { $finish_flg = 0; $finish_time = null; } } // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } else { if ($pass == 3) { // 转审 $finish_flg = 0; if ($method == 2) { // 处理方式为任意时,一个人转审之后其他人员也删除 $plan_user = str_replace('E', '', $val->transfer_id); } else { // 更改审核情况中的审核人 $plan_users = explode(',', $reviewRow['plan_user']); // 审核人不在审核人列表中,并且是管理员,则替换所有人 if (!in_array($user, $plan_users) && (Application_Model_User::checkPermissionByRoleName('文件管理员') || Application_Model_User::checkPermissionByRoleName('系统管理员'))) { $plan_users = array(str_replace('E', '', $val->transfer_id)); } else { for ($i = 0; $i < count($plan_users); $i++) { if ($plan_users[$i] == $user) { $plan_users[$i] = str_replace('E', '', $val->transfer_id); break; } } } $plan_user = implode(',', $plan_users); } // 审核情况 $reviewData = array("plan_user" => $plan_user, "method" => 1); } else { // 退回 $actual_user = null; $finish_time = null; $finish_flg = 0; // 退回选项 $return = $reviewRow['return']; if ($return == 2) { // 退到初始状态 // 需更新的审核记录: 所有 $reviewWhere = "type = 'files' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 4) { // 退到本阶段开始 // 需更新的审核记录 $reviewWhere = "type = 'files' and finish_flg = 0 and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 3) { // 退到上一阶段 // 需更新的审核记录:最后一个finish_flg为1的数据和第一个finish_flg为0的数据 $last_1 = $first_0 = 0; foreach ($reviewRows as $r) { if ($r['finish_flg'] == 1) { $last_1 = $r['id']; } if ($r['finish_flg'] == 0 && $first_0 == null) { $first_0 = $r['id']; } } $reviewWhere = "id = {$last_1} or id = {$first_0}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { $fileWhere = "id = {$id}"; // 更新文件状态为退回 $fileData = array("state" => "Return"); // 退到初始状态 // 更新所有record的finish_flg为0 $reviewWhere = "type = 'files' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } } } } } $filesRow = $files->getOne($reviewRow['file_id']); // 判断是否需要更新文件 // 如果所有record的记录的finish_flg 都为1,则发布 if ($finish_flg == 1 && $review->fetchAll("type = 'files' and finish_flg = 0 and file_id = {$id}")->count() == 1) { $publish = true; $obsolute = false; // 如果是多个文件同时归档,需拆分 if (strpos($filesRow['code'], ',') !== false) { $codes = explode(',', $filesRow['code']); $names = explode(',', $filesRow['name']); $file_ids = explode(',', $filesRow['file_ids']); $vers = explode(',', $filesRow['ver']); $description = explode('|', $filesRow['description']); $project_info = explode(',', $filesRow['project_info']); $ids = array(); $k = 0; for ($i = 0; $i < count($names); $i++) { $ids[] = ""; $length = substr_count($names[$i], '|'); for ($j = 0; $j <= $length; $j++) { if (isset($ids[$i]) && $ids[$i]) { $ids[$i] .= ','; } $ids[$i] .= $file_ids[$k++]; } } for ($i = 0; $i < count($codes); $i++) { // 更新第一条 if ($i == 0) { $data = array("state" => "Active", "code" => $codes[$i], "name" => $names[$i], "file_ids" => $ids[$i], "ver" => $vers[$i], "description" => $description[$i], "project_info" => $project_info[$i], "archive_time" => $now); try { $files->update($data, "id = {$id}"); // 如果是升版,登录升版信息 if ($vers[$i] > 1.0) { $upgradeTmpData = array("project_no" => $project_info[$i], "description" => $description[$i]); $upgrade->update($upgradeTmpData, "file_id=" . $id); } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } } else { $data = array("state" => "Active", "code" => $codes[$i], "ver" => $vers[$i], "tag" => $filesRow['tag'], "name" => $names[$i], "file_ids" => $ids[$i], "description" => $description[$i], "project_info" => $project_info[$i], "remark" => $filesRow['remark'], "create_time" => $filesRow['create_time'], "update_time" => $filesRow['update_time'], "create_user" => $filesRow['create_user'], "update_user" => $filesRow['update_user'], "archive_time" => $now, "add_flg" => $filesRow['add_flg']); try { $sid = $files->insert($data); // 拆分智能表单数据 if ($sid) { $sids[] = $sid; $whereMenu = "oa_doc_files_" . $id; $menus = $formval->getListByMenu($whereMenu); foreach ($menus as $menu) { $menuData = array("attrid" => $menu['attrid'], "value" => $menu['value'], "menu" => "oa_doc_files_" . $sid); $formval->insert($menuData); } // 如果是升版,登录升版信息 if ($vers[$i] > 1.0) { $obsolute = true; $upgradeRow = $upgrade->fetchAll("file_id = {$id}")->toArray(); foreach ($upgradeRow as $row) { $upgradeTmpData = array("file_id" => $sid, "reason" => $row['reason'], "reason_type" => $row['reason_type'], "project_no" => $project_info[$i], "description" => $description[$i], "create_user" => $row['create_user'], "create_time" => $row['create_time'], "update_user" => $row['update_user'], "update_time" => $row['update_time']); $upgrade->insert($upgradeTmpData); } } $recordRow = $record->fetchAll("type='files' and table_name='oa_doc_files' and table_id={$id}")->toArray(); foreach ($recordRow as $row) { // 增加记录 $recordTmpData = array("type" => $row['type'], "table_name" => $row['table_name'], "table_id" => $sid, "handle_user" => $row['handle_user'], "handle_time" => $row['handle_time'], "action" => $row['action'], "result" => $row['result'], "ip" => $row['ip'], "remark" => $row['remark']); $record->insert($recordTmpData); } } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } } } } $fileData = array("state" => "Active", "archive_time" => $now); $fileWhere = "id = {$id}"; // 更新文件状态为已归档 $uploadData = array("archive" => 1, "archive_time" => $now); $upload = new Dcc_Model_Upload(); // 获取上传文件id $ids = $filesRow['file_ids']; $uploadWhere = "id in ({$ids})"; $upload->update($uploadData, $uploadWhere); // 更新旧版文件的状态为已作废 if (strpos($filesData['ver'], '1.0') === false || $obsolute) { if (isset($sids) && count($sids) > 0) { $obsoluteWhere = " id not in (" . implode(',', $sids) . ") and FIND_IN_SET(code, '" . $filesRow['code'] . "')"; } else { $obsoluteWhere = " FIND_IN_SET(code, '" . $filesRow['code'] . "')"; } $obsoluteData = array("state" => "Obsolete"); } } try { // 更新审核情况 $review->update($reviewData, $reviewWhere); if (isset($obsoluteData) && isset($obsoluteWhere)) { $files->update($obsoluteData, $obsoluteWhere); } // 更新文件 if (isset($fileWhere)) { $files->update($fileData, $fileWhere); } $this->operate("文件审批"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } // 邮件任务 // 文件提交者或更新人 $owner = $filesData['create_user']; if ($filesData['create_user'] != $filesData['update_user']) { $owner .= "," . $filesData['update_user']; } $dev = false; $type = "新文件"; if (stripos($filesData['ver'], '1.0') === false) { $dev = true; $type = "升版文件"; } $content = "<p><b>文件号:</b>" . $filesData['code'] . "</p><p><b>版本:</b>" . $filesData['ver'] . "</p><p><b>文件描述:</b>" . $filesData['description'] . "</p><p><b>备注:</b>" . $filesData['remark'] . "</p><p><b>申请人:</b>" . $filesData['creater'] . "</p><p><b>申请时间:</b>" . $filesData['create_time'] . "</p><p>请登录系统查看详情!</p>"; // 发邮件的情况: // 1、单站审核结束 $finish_flg = 1 && $publish = false if ($finish_flg == 1 && !$publish) { $subject = $type . "审批"; // $to = 下一站审核人 $current = $review->getFirstNoReview("files", $id); $to = $employee->getInfosByOneLine($current['plan_user']); // $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; //$cc = ""; $content = "你有一个" . $type . "需要审批," . $content; } // 2、所有审核结束 $publish = true if ($publish) { $subject = $type . "发布"; $to = $employee->getInfosByOneLine($owner); $cc = $employee->getInfosByOneLine($record->getEmployeeIds($filesData['id'], 'files')); $cc = $cc['email']; // $cc = ""; $content .= "<p><b>审核记录:</b><br>" . str_replace(',', '<br>', $record->getHis($filesData['id'], 'files', 'oa_doc_files')) . "</p>"; $content = "你申请的" . $type . "已通过审批," . $content; } // 3、退回 isset($return) if (isset($return)) { $subject = $type . "退回"; $to = $employee->getInfosByOneLine($owner); $cc = ""; // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $cc = $employee->getInfosByOneLine($orgUser); $cc = $cc['email']; } $content = "你申请的" . $type . "已被退回,<p><b>退回原因:</b>" . $remark . "</p>" . $content; } // 4、转审 $pass == 3 if ($pass == 3) { $subject = $type . "转审"; $toUser = str_replace('E', '', $val->transfer_id); $to = $employee->getInfosByOneLine($toUser); // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $owner .= "," . $orgUser; } $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; // $cc = ""; $content = "有新的" . $type . "被转移到你处审批:" . $content; } if (isset($subject)) { $mailData = array('type' => $type, 'subject' => $subject, 'to' => $to['email'], 'cc' => $cc, 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mail = new Application_Model_Log_Mail(); try { $mailId = $mail->insert($mailData); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } if ($mailId) { $mail->send($mailId); } } echo Zend_Json::encode($result); exit; }
/** * @abstract 审核 * @return null */ public function reviewAction() { // 返回值数组 $result = array('success' => true, 'result' => true, 'info' => '审批成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user = $user_session->user_info['employee_id']; $val = (object) $request; $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $db = $employee->getAdapter(); $fadev = new Product_Model_Fadev(); $fa = new Product_Model_Fa(); $sondev = new Product_Model_Sondev(); $id = $val->id; $remark = $val->remark; $pass = $val->review_result; $type = $val->type; $publish = false; if ($type == 'new') { $table = "oa_product_bom_new"; $recordType = "bom"; $bomModel = new Product_Model_Newbom(); } else { if ($type == 'ECO') { $table = "oa_product_bom_eco"; $recordType = "ecobom"; $bomModel = new Product_Model_Updbom(); } else { if ($type == 'DEV') { $table = "oa_product_bom_dev"; $recordType = "devbom"; $bomModel = new Product_Model_Updbom(); } } } // 获取物料信息 $bomData = $bomModel->getOne($id); if (!$bomData) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } $review_id = $bomData->review_id; // 获取当前审核情况 // 如果record记录被删除或状态已改变,报错 $reviewWhere = "id = {$review_id}"; $reviewRows = $review->getList($reviewWhere, $recordType); if (count($reviewRows) == 0 || !$type) { $result['result'] = false; $result['info'] = "非法数据"; echo Zend_Json::encode($result); exit; } $reviewRow = $reviewRows[0]; if ($reviewRow['finish_flg'] != 0) { $result['result'] = false; $result['info'] = "数据状态已改变"; echo Zend_Json::encode($result); exit; } $bomfaData = $fadev->fetchAll("type = '{$type}' and nid=" . $id)->toArray(); // 处理记录 $recordData = array("type" => $recordType, "table_name" => $table, "table_id" => $id, "handle_user" => $user, "handle_time" => $now, "action" => "审批", "result" => $pass == 1 ? "批准" : ($pass == 2 ? "拒绝" : "转审"), "ip" => $_SERVER['REMOTE_ADDR'], "remark" => $remark); // 增加记录 $record->insert($recordData); // 通过方式 $method = $reviewRow['method']; if ($pass == 1) { if ($method == 2) { // 任何一人处理即通过 $finish_flg = 1; $actual_user = $user; $finish_time = $now; } else { // 所有人都需要审核,检查是否所有人都已经审核 $plan_user = $reviewRow['plan_user']; $actual_user = $reviewRow['actual_user']; $actual_user = !$actual_user ? $user : $actual_user . "," . $user; // 检查计划审核人和实际审核人是否一致 if (strlen($plan_user) == strlen($actual_user)) { $finish_flg = 1; $finish_time = $now; } else { $finish_flg = 0; $finish_time = null; } } // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } else { if ($pass == 3) { // 转审 $finish_flg = 0; if ($method == 2) { // 处理方式为任意时,一个人转审之后其他人员也删除 $plan_user = str_replace('E', '', $val->transfer_id); } else { // 更改审核情况中的审核人 $plan_users = explode(',', $reviewRow['plan_user']); for ($i = 0; $i < count($plan_users); $i++) { if ($plan_users[$i] == $user) { $plan_users[$i] = str_replace('E', '', $val->transfer_id); break; } } $plan_user = implode(',', $plan_users); } // 审核情况 $reviewData = array("plan_user" => $plan_user); } else { // 退回 $actual_user = null; $finish_time = null; $finish_flg = 0; // 退回选项 $return = $reviewRow['return']; if ($return == 2) { // 退到初始状态 // 需更新的审核记录: 所有 $reviewWhere = "type = '{$recordType}' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 4) { // 退到本阶段开始 // 需更新的审核记录 $reviewWhere = "type = '{$recordType}' and finish_flg = 0 and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { if ($return == 3) { // 退到上一阶段 // 需更新的审核记录:最后一个finish_flg为1的数据和第一个finish_flg为0的数据 $last_1 = $first_0 = 0; foreach ($reviewRows as $r) { if ($r['finish_flg'] == 1) { $last_1 = $r['id']; } if ($r['finish_flg'] == 0 && $first_0 == null) { $first_0 = $r['id']; } } $reviewWhere = "id = {$last_1} or id = {$first_0}"; // 审核情况更新数据 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); // 文件状态不更新 } else { $fileWhere = "id = {$id}"; // 更新文件状态为退回 $mData = array("state" => "Return"); // 退到初始状态 // 更新所有record的finish_flg为0 $reviewWhere = "type = '{$recordType}' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $actual_user, "finish_time" => $finish_time, "finish_flg" => $finish_flg); } } } } } // 如果所有record的记录的finish_flg 都为1,则发布 if ($finish_flg == 1 && $review->fetchAll("type = '{$recordType}' and finish_flg = 0 and file_id = {$id}")->count() == 1) { $publish = true; $mData = array("state" => "Active", "archive_time" => $now); $fileWhere = "id = {$id}"; $creater = $bomData['create_user']; // 如果是多个BOM,需要拆分 foreach ($bomfaData as $bomfa) { // 升版的情况,旧版作废 $facode = $bomfa['code']; if ($type != 'new') { $obsoleteData = array("state" => "Obsolete"); $obsoleteWhere = "code = '{$facode}' and recordkey != '" . $bomfa['recordkey'] . "'"; $fa->update($obsoleteData, $obsoleteWhere); } $recordkey = $bomfa['recordkey']; $sql = "insert into oa_product_bom_fa (nid, recordkey, id, code, project_no, bom_file, qty, state, ver, type, remark, create_user) select nid, recordkey, id, code, project_no, bom_file, qty, state, ver, type, remark, '{$creater}' from oa_product_bom_fa_dev where recordkey = {$recordkey}"; $db->query($sql); $sql = "insert into oa_product_bom_son (nid, recordkey, pid, id, code, qty, partposition, `replace`, remark) select nid, recordkey, pid, id, code, qty, partposition, `replace`, remark from oa_product_bom_son_dev where recordkey = {$recordkey}"; $db->query($sql); } } try { // 更新审核情况 $review->update($reviewData, $reviewWhere); // 更新BOM if (isset($fileWhere)) { $bomModel->update($mData, $fileWhere); } $this->operate("BOM审批"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } // 邮件任务 // 文件提交者或更新人 $owner = $bomData['create_user']; $dev = false; $boms = array(); foreach ($bomfaData as $fa) { if ($type == 'new') { $boms[] = $fa['code']; } else { $boms[] = $fa['code'] . " V" . $fa['ver']; } } $bomflg = "devbom"; if ($type == 'ECO') { $bomflg = "ecobom"; } if ($type == 'new') { $subject_type = "新BOM申请"; $content = "<b>BOM号:</b>" . implode(',', $boms) . "</p>" . "<p><b>描述:</b>" . $bomData['description'] . "</p>" . "<p><b>备注:</b>" . $bomData['remark'] . "</p>" . "<p><b>申请人:</b>" . $bomData['creater'] . "</p>" . "<p><b>申请时间:</b>" . $bomData['create_time'] . "</p>" . "<p>请登录系统查看详情!</p>"; } else { $subject_type = "BOM升版"; $reson_type = ""; if ($bomData['reason_type']) { $codemaster = new Admin_Model_Codemaster(); $mstData = $codemaster->getList("type=6 and code='" . $bomData['reason_type'] . "'"); if ($mstData && count($mstData) > 0) { $reson_type = $mstData[0]['text']; } } $content = "<b>BOM号:</b>" . implode(',', $boms) . "</p>" . "<p><b>升版类型:</b>" . $bomData['upd_type'] . "</p>" . "<p><b>升版原因分类:</b>" . $reson_type . "</p>" . "<p><b>升版原因:</b>" . $bomData['upd_reason'] . "</p>" . "<p><b>升版描述:</b>" . $bomData['description'] . "</p>" . "<p><b>备注:</b>" . $bomData['remark'] . "</p>" . "<p><b>申请人:</b>" . $bomData['creater'] . "</p>" . "<p><b>申请时间:</b>" . $bomData['create_time'] . "</p>" . "<p>请登录系统查看详情!</p>"; } $content = "<p><b>BOM号:</b>" . implode(',', $boms) . "</p><p><b>版本:</b>1.0</p><p><b>描述:</b>" . $bomData['description'] . "</p><p><b>备注:</b>" . $bomData['remark'] . "</p><p><b>申请人:</b>" . $bomData['creater'] . "</p><p><b>申请时间:</b>" . $bomData['create_time'] . "</p><p>请登录系统查看详情!</p>"; // 发邮件的情况: // 1、单站审核结束 $finish_flg = 1 && $publish = false if ($finish_flg == 1 && !$publish) { $subject = $subject_type . "审批"; // $to = 下一站审核人 $current = $review->getCurrent($bomflg, $id); $to = $employee->getInfosByOneLine($current['plan_user']); // $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "你有一个" . $subject_type . "需要审批,{$content}"; } // 2、所有审核结束 $publish = true if ($publish) { $subject = $subject_type . "发布"; $to = $employee->getInfosByOneLine($owner); $cc = $employee->getInfosByOneLine($record->getEmployeeIds($bomData['id'], 'bom')); $cc = $cc['email']; $content .= "<hr><p><b>审核记录:</b><br>" . str_replace(',', '<br>', $record->getHis($bomData['id'], $bomflg)) . "</p>"; $content = "你申请的" . $subject_type . "已通过审批,{$content}"; } // 3、退回 isset($return) if (isset($return)) { $subject = $subject_type . "退回"; $to = $employee->getInfosByOneLine($owner); $cc = ""; // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $cc = $employee->getInfosByOneLine($orgUser); $cc = $cc['email']; } $content = "你申请的" . $subject_type . "已被退回,<p><b>退回原因:</b>" . $remark . "</p>,{$content}"; } // 4、转审 $pass == 3 if ($pass == 3) { $subject = $subject_type . "转审"; $toUser = str_replace('E', '', $val->transfer_id); $to = $employee->getInfosByOneLine($toUser); // 原审核人 if ($reviewRow['plan_user']) { $orgUser = $reviewRow['plan_user']; $owner .= "," . $orgUser; } $cc = $employee->getInfosByOneLine($owner); $cc = $cc['email']; $content = "有新的" . $subject_type . "被转移到你处审批,{$content}"; } if (isset($subject)) { $mailData = array('type' => $subject_type, 'subject' => $subject, 'to' => $to['email'], 'cc' => $cc, 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mail = new Application_Model_Log_Mail(); try { $mailId = $mail->insert($mailData); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } if ($mailId) { $mail->send($mailId); } } echo Zend_Json::encode($result); exit; }