/** * @abstract 添加新文件 * @return null */ public function saveAction() { // 返回值数组 $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(); $review = new Dcc_Model_Review(); $code = new Dcc_Model_Code(); $upgrade = new Dcc_Model_Upgrade(); // 新增还是编辑 if ($val->id) { // 判断此次版本是否已存在 if ($files->fetchAll("id != {$val->id} and ver = '" . $val->ver . "' and code = '" . $val->code . "'")->count() > 0) { $result['result'] = false; $result['info'] = "文件“" . $val->code . "”的" . $val->ver . "版本已经存在"; echo Zend_Json::encode($result); exit; } $result['info'] = '修改成功'; $data = array('state' => $val->state, 'code' => $val->code, 'ver' => $val->ver, 'name' => $val->name, 'file_ids' => $val->file_ids, 'description' => $val->description, 'project_info' => $val->project_info, 'send_require' => isset($val->send_require) ? 1 : 0, 'remark' => $val->remark, 'tag' => $val->tag, 'archive_time' => $val->archive_time, 'update_time' => $now, 'update_user' => $user); $id = $val->id; $where = "id = " . $id; $up = false; if ($val->ver && $val->ver > 1.0) { $up = true; // 修改升版记录 $upgradeData = array('reason' => $val->reason, 'reason_type' => $val->reason_type, 'update_time' => $now, 'update_user' => $user); $upgradeWhere = "file_id = {$id}"; } // 更新旧版文件的状态为已作废 if ($val->ver != '1.0' && $val->state == 'Active') { $obsoluteWhere = "ver < '" . $val->ver . "' and code = '" . $val->code . "'"; $obsoluteData = array("state" => "Obsolete"); } $projectData = array("project_no" => $val->project_no); $projectWhere = "code= '" . $val->code . "'"; try { if (isset($obsoluteData) && isset($obsoluteWhere)) { $files->update($obsoluteData, $obsoluteWhere); } if ($up) { $upgrade->update($upgradeData, $upgradeWhere); } $files->update($data, $where); $code->update($projectData, $projectWhere); if ($val->state == 'Active' && isset($val->file_ids) && $val->file_ids != "") { // 更新文件状态为已归档 $uploadData = array("archive" => 1, "archive_time" => $now); $upload = new Dcc_Model_Upload(); // 获取上传文件id $ids = $val->file_ids; $uploadWhere = "id in ({$ids})"; $upload->update($uploadData, $uploadWhere); } if ($val->state == 'Return') { // 更改review状态 // 需更新的审核记录: 所有 $reviewWhere = "type = 'files' and file_id = {$id}"; // 审核情况更新数据 $reviewData = array("actual_user" => "", "finish_time" => null, "finish_flg" => 0); $review->update($reviewData, $reviewWhere); } if ($id) { $attrval = new Admin_Model_Formval(); // 自定义字段 foreach ($request as $field => $value) { if (stripos($field, "intelligenceField") !== false) { $attrId = str_replace("intelligenceField", "", $field); $menu = 'oa_doc_files_' . $id; $formval = array('attrid' => $attrId, 'value' => $value, 'menu' => $menu); $where = "attrid = " . $attrId . " and menu = '" . $menu . "'"; if ($attrval->fetchAll($where)->count() > 0) { // 更新 $attrval->update($formval, $where); } else { $attrval->insert($formval); } } } $record = new Dcc_Model_Record(); // 操作记录 $data = array('type' => "files", 'table_name' => "oa_doc_files", 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => "编辑", 'ip' => $_SERVER['REMOTE_ADDR'], 'remark' => isset($request['edit_info']) ? $request['edit_info'] : ''); $record->insert($data); } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } echo Zend_Json::encode($result); exit; } else { // 判断此次版本是否已存在 if ($files->fetchAll("ver = " . $val->ver . " and code = '" . $val->code . "'")->count() > 0) { $result['result'] = false; $result['info'] = "文件“" . $val->code . "”的" . $val->ver . "版本已经存在"; echo Zend_Json::encode($result); exit; } $data = array('state' => $val->state, 'code' => $val->code, 'ver' => $val->ver, 'name' => $val->name, 'file_ids' => $val->file_ids, 'description' => $val->description, 'project_info' => $val->project_info, 'send_require' => isset($val->send_require) ? 1 : 0, 'remark' => $val->remark, 'tag' => $val->tag, 'archive_time' => $val->archive_time, 'create_time' => $now, 'create_user' => $user, 'update_time' => $now, 'update_user' => $user); // 更新旧版文件的状态为已作废 if ($val->ver != '1.0' && $val->state == 'Active') { $obsoluteWhere = "ver < '" . $val->ver . "' and code = '" . $val->code . "'"; $obsoluteData = array("state" => "Obsolete"); } try { $id = $files->insert($data); if ($id && $val->ver && $val->ver > 1.0) { // 升版记录 $upgradeData = array('file_id' => $id, 'reason' => $val->reason, 'reason_type' => $val->reason_type, 'create_time' => $now, 'create_user' => $user, 'update_time' => $now, 'update_user' => $user); $upgrade->insert($upgradeData); } if (isset($obsoluteData) && isset($obsoluteWhere)) { $files->update($obsoluteData, $obsoluteWhere); } if (isset($val->file_ids) && $val->file_ids != "") { // 更新文件状态为已归档 $uploadData = array("archive" => 1); $upload = new Dcc_Model_Upload(); // 获取上传文件id $ids = $val->file_ids; $uploadWhere = "id in ({$ids})"; $upload->update($uploadData, $uploadWhere); } if ($id) { $attrval = new Admin_Model_Formval(); // 自定义字段 foreach ($request as $field => $value) { if (stripos($field, "intelligenceField") !== false && $value) { $attrId = str_replace("intelligenceField", "", $field); $menu = 'oa_doc_files_' . $id; $formval = array('attrid' => $attrId, 'value' => $value, 'menu' => $menu); $attrval->insert($formval); } } $record = new Dcc_Model_Record(); // 操作记录 $data = array('type' => "files", 'table_name' => "oa_doc_files", 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => "新增", 'ip' => $_SERVER['REMOTE_ADDR']); $record->insert($data); } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } echo Zend_Json::encode($result); exit; } }
/** * @abstract 文件升版 * @return null */ public function upgradeAction() { // 返回值数组 $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']; $user_name = $user_session->user_info['user_name']; $val = (object) $request; $json = json_decode($request['json']); $code_file_code_id = $json->code_id; $code_file_code = $json->code; $code_file_file_id = $json->file_id; $code_file_file = $json->file; $code_file_desc = isset($json->code_file_desc) ? $json->code_file_desc : ''; $code_file_project_no = isset($json->code_file_project_no) ? $json->code_file_project_no : ''; $files = new Dcc_Model_Files(); $upload = new Dcc_Model_Upload(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $upgrade = new Dcc_Model_Upgrade(); $employee = new Hra_Model_Employee(); $mail = new Application_Model_Log_Mail(); $member = new Admin_Model_Member(); $code = $code_file_code[0]; $stepRows = array(); if (count($code) > 0 && $code) { $codeModel = new Dcc_Model_Code(); // 获取当前文件类别对应的流程ID $row = $codeModel->getTypeInfo("t1.code = '{$code}'"); $flow_id = $row['dev_flow_id']; if ($flow_id) { // 根据流程ID获取阶段 $flow = new Admin_Model_Flow(); $step = new Admin_Model_Step(); $flowRow = $flow->getRow($flow_id); $step_ids = $flowRow['step_ids']; if ($step_ids) { $stepRows = $step->getListByFlow($step_ids); $state = $stepRows[0]['step_name']; } } } // 获取所有文件的版本号 $vers = array(); foreach ($code_file_code as $c) { $d = $files->getAdapter()->query("select max(ver)+0.1 as ver from oa_doc_files where code = :code and state = 'Active' and del_flg = 0", array('code' => $c))->fetch(); $v = round($d['ver'], 1); if (strcmp($v, (int) $v) === 0) { $v .= ".0"; } $vers[] = $v; } // 新增还是编辑 if ($val->id) { $result['info'] = '修改成功'; $data = array('state' => isset($state) ? 'Reviewing' : 'Active', 'code' => implode(',', $code_file_code), 'name' => implode(',', $code_file_file), 'file_ids' => implode(',', $code_file_file_id), 'ver' => implode(',', $vers), 'description' => $code_file_desc, 'project_info' => implode(',', $code_file_project_no), 'remark' => $val->remark, 'tag' => $val->tag, 'update_time' => $now, 'update_user' => $user); $id = $val->id; $where = "id = " . $id; // 修改升版记录 $upgradeData = array('reason' => $val->reason, 'reason_type' => $val->reason_type, 'update_time' => $now, 'update_user' => $user); $upgradeWhere = "file_id = {$id}"; try { if ($id) { $upgrade->update($upgradeData, $upgradeWhere); $files->update($data, $where); $attrval = new Admin_Model_Formval(); // 自定义字段 foreach ($request as $field => $value) { if (stripos($field, "intelligenceField") !== false) { $attrId = str_replace("intelligenceField", "", $field); $menu = 'oa_doc_files_' . $id; $formval = array('attrid' => $attrId, 'value' => $value, 'menu' => $menu); $where = "attrid = " . $attrId . " and menu = '" . $menu . "'"; if ($attrval->fetchAll($where)->count() > 0) { // 更新 $attrval->update($formval, $where); } else { $attrval->insert($formval); } } } // 操作记录 $data = array('type' => "files", 'table_name' => "oa_doc_files", 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => "编辑", 'ip' => $_SERVER['REMOTE_ADDR']); $record->insert($data); // 审核流程 // 删除已存在的审核记录 $review->delete("type='files' and file_id = " . $id); // 把阶段信息插入review记录 $first = true; foreach ($stepRows as $s) { $plan_user = $s['user']; if ($s['dept']) { $plan_dept = $s['dept']; // 根据角色id和项目号获取用户成员列表 $roleid = $s['dept']; $codeTmp = $employee->getAdapter()->query("select project_no from oa_doc_code where code = '{$code}'")->fetchObject(); $projectno = $codeTmp->project_no; // 如果不存在项目号,则直接取角色中的用户 否则根据角色id和项目号获取roleset id $tmpUser = array(); $tmpBool = true; if ($projectno) { // 根据角色id和项目号获取roleset id $rolesetTmp = $employee->getAdapter()->query("select group_concat(id) as id from oa_product_catalog_roleset where active=1 and catalog_id='{$projectno}' and role_id in ( " . $roleid . ")")->fetchObject(); $rolesetid = $rolesetTmp->id; if ($rolesetid) { $tmpBool = false; $userTmp = $employee->getAdapter()->query("select group_concat(user_id) as ids from oa_product_catalog_roleset_member where roleset_id in ( " . $rolesetid . ")")->fetchObject(); $tmpUser = explode(',', $userTmp->ids); // 如果没有取到用户,还是使用默认用户 if (count($tmpUser) == 0) { $tmpBool = true; } } } if ($tmpBool) { foreach (explode(',', $plan_dept) as $role) { $tmpRole = $member->getMemberWithNoManager($role); foreach ($tmpRole as $m) { $tmpUser[] = $m['user_id']; } } } if (count($tmpUser) == 0 && !$plan_user) { $tmpUser = $member->getUserids("系统管理员"); } // user id 转换成employee id if (count($tmpUser) > 0) { $tmpUser = $employee->getAdapter()->query("select group_concat(employee_id) as users from oa_user where active = 1 and id in ( " . implode(',', $tmpUser) . ")")->fetchObject(); $users = $tmpUser->users; } // 获取角色所有人员 // $tmpUser = $employee->getAdapter()->query("select group_concat(id) as ids from oa_employee where dept_id in ( " . $plan_dept . ")")->fetchObject(); if ($users) { if ($plan_user) { $plan_user .= ","; } $plan_user .= $users; } $repeatUser = explode(',', $plan_user); $repeatUser = array_unique($repeatUser); $plan_user = implode(',', $repeatUser); } $reviewData = array('type' => "files", 'file_id' => $id, 'plan_dept' => $s['dept'], 'plan_user' => $plan_user, 'method' => $s['method'], 'return' => $s['return'], 'step_name' => $s['step_name'], 'step_ename' => $s['step_ename']); $review->insert($reviewData); // 邮件任务 if ($first) { $to = $employee->getAdapter()->query("select group_concat(email) as mail_to from oa_employee where id in ( " . $plan_user . ")")->fetchObject(); $content = "你有文件升版需要审核,<p><b>文件号:</b>" . implode(',', $code_file_code) . "</p><p><b>版本:</b>" . implode(',', $vers) . "</p><p><b>升版原因:</b>" . $val->reason . "</p><p><b>备注:</b>" . $val->remark . "</p><p><b>申请人:</b>" . $user_name . "</p><p><b>申请时间:</b>" . $now . "</p><p>请登录系统查看详情!</p>"; $mailData = array('type' => '升版文件', 'subject' => '升版文件评审', 'to' => $to->mail_to, 'cc' => '', 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mailId = $mail->insert($mailData); if ($mailId) { $mail->send($mailId); } } $first = false; } // 没有审批流程,旧版文件自动作废 if (!isset($state)) { $sids = array($id); if (isset($sids) && count($sids) > 0) { if (count($code_file_code) > 0) { $codes = array(); foreach ($code_file_code as $c) { $codes[] = $c; } } if (isset($codes) && count($codes) > 0) { for ($i = 0; $i < count($codes); $i++) { $codes[$i] = "'" . $codes[$i] . "'"; } } $obsoluteWhere = " id not in (" . implode(',', $sids) . ") and code in (" . implode(',', $codes) . ")"; } $obsoluteData = array("state" => "Obsolete"); if (isset($obsoluteWhere)) { $files->update($obsoluteData, $obsoluteWhere); } // 更改文件状态为归档 $uploadData = array("archive" => 1, "archive_time" => $now); $uploadWhere = "id in (" . implode(',', $code_file_file_id) . ")"; // 更新文件 $upload->update($uploadData, $uploadWhere); } } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } echo Zend_Json::encode($result); exit; } else { $data = array('state' => isset($state) ? 'Reviewing' : 'Active', 'code' => implode(',', $code_file_code), 'name' => implode(',', $code_file_file), 'file_ids' => implode(',', $code_file_file_id), 'ver' => implode(',', $vers), 'description' => $code_file_desc, 'project_info' => implode(',', $code_file_project_no), 'remark' => $val->remark, 'tag' => $val->tag, 'create_time' => $now, 'create_user' => $user, 'update_time' => $now, 'update_user' => $user); try { $id = $files->insert($data); if ($id) { // 升版记录 $upgradeData = array('file_id' => $id, 'reason' => $val->reason, 'reason_type' => $val->reason_type, 'create_time' => $now, 'create_user' => $user, 'update_time' => $now, 'update_user' => $user); $upgrade->insert($upgradeData); // 自定义字段 $attrval = new Admin_Model_Formval(); foreach ($request as $field => $value) { if (stripos($field, "intelligenceField") !== false && $value) { $attrId = str_replace("intelligenceField", "", $field); $menu = 'oa_doc_files_' . $id; $formval = array('attrid' => $attrId, 'value' => $value, 'menu' => $menu); $attrval->insert($formval); } } // 操作记录 $data = array('type' => "files", 'table_name' => "oa_doc_files", 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => "申请", 'ip' => $_SERVER['REMOTE_ADDR']); $record->insert($data); // 审核流程 // 把阶段信息插入review记录 $first = true; foreach ($stepRows as $s) { $plan_user = $s['user']; if ($s['dept']) { $plan_dept = $s['dept']; // 根据角色id和项目号获取用户成员列表 $roleid = $s['dept']; $codeTmp = $employee->getAdapter()->query("select project_no from oa_doc_code where code = '{$code}'")->fetchObject(); $projectno = $codeTmp->project_no; // 如果不存在项目号,则直接取角色中的用户 否则根据角色id和项目号获取roleset id $tmpUser = array(); $tmpBool = true; if ($projectno) { // 根据角色id和项目号获取roleset id $rolesetTmp = $employee->getAdapter()->query("select group_concat(id) as id from oa_product_catalog_roleset where active=1 and catalog_id='{$projectno}' and role_id in ( " . $roleid . ")")->fetchObject(); $rolesetid = $rolesetTmp->id; if ($rolesetid) { $tmpBool = false; $userTmp = $employee->getAdapter()->query("select group_concat(user_id) as ids from oa_product_catalog_roleset_member where roleset_id in ( " . $rolesetid . ")")->fetchObject(); $tmpUser = explode(',', $userTmp->ids); // 如果没有取到用户,还是使用默认用户 if (count($tmpUser) == 0) { $tmpBool = true; } } } if ($tmpBool) { foreach (explode(',', $plan_dept) as $role) { $tmpRole = $member->getMemberWithNoManager($role); foreach ($tmpRole as $m) { $tmpUser[] = $m['user_id']; } } } if (count($tmpUser) == 0 && !$plan_user) { $tmpUser = $member->getUserids("系统管理员"); } // user id 转换成employee id if (count($tmpUser) > 0) { $tmpUser = $employee->getAdapter()->query("select group_concat(employee_id) as users from oa_user where active = 1 and id in ( " . implode(',', $tmpUser) . ")")->fetchObject(); $users = $tmpUser->users; } // 获取角色所有人员 // $tmpUser = $employee->getAdapter()->query("select group_concat(id) as ids from oa_employee where dept_id in ( " . $plan_dept . ")")->fetchObject(); if ($users) { if ($plan_user) { $plan_user .= ","; } $plan_user .= $users; } $repeatUser = explode(',', $plan_user); $repeatUser = array_unique($repeatUser); $plan_user = implode(',', $repeatUser); } $reviewData = array('type' => "files", 'file_id' => $id, 'plan_dept' => $s['dept'], 'plan_user' => $plan_user, 'method' => $s['method'], 'return' => $s['return'], 'step_name' => $s['step_name'], 'step_ename' => $s['step_ename']); $review->insert($reviewData); // 邮件任务 if ($first) { $to = $employee->getAdapter()->query("select group_concat(email) as mail_to from oa_employee where id in ( " . $plan_user . ")")->fetchObject(); $content = "你有文件升版需要审核,<p><b>文件号:</b>" . implode(',', $code_file_code) . "</p><p><b>版本:</b>" . implode(',', $vers) . "</p><p><b>升版原因:</b>" . $val->reason . "</p><p><b>备注:</b>" . $val->remark . "</p><p><b>申请人:</b>" . $user_name . "</p><p><b>申请时间:</b>" . $now . "</p><p>请登录系统查看详情!</p>"; $mailData = array('type' => '升版文件', 'subject' => '升版文件评审', 'to' => $to->mail_to, 'cc' => '', 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mailId = $mail->insert($mailData); if ($mailId) { $mail->send($mailId); } } $first = false; } // 没有审批流程,旧版文件自动作废 if (!isset($state)) { $sids = array($id); if (isset($sids) && count($sids) > 0) { if (count($code_file_code) > 0) { $codes = array(); foreach ($code_file_code as $c) { $codes[] = $c; } } if (isset($codes) && count($codes) > 0) { for ($i = 0; $i < count($codes); $i++) { $codes[$i] = "'" . $codes[$i] . "'"; } } $obsoluteWhere = " id not in (" . implode(',', $sids) . ") and code in (" . implode(',', $codes) . ")"; } $obsoluteData = array("state" => "Obsolete"); if (isset($obsoluteWhere)) { $files->update($obsoluteData, $obsoluteWhere); } // 更改文件状态为归档 $uploadData = array("archive" => 1, "archive_time" => $now); $uploadWhere = "id in (" . implode(',', $code_file_file_id) . ")"; // 更新文件 $upload->update($uploadData, $uploadWhere); } } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } echo Zend_Json::encode($result); exit; } }