Exemple #1
0
 /**
  * @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;
     }
 }
Exemple #2
0
 /**
  * @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;
     }
 }