/** * @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']; $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_project_no = isset($json->code_file_project_no) ? $json->code_file_project_no : ''; $code_file_desc = isset($json->code_file_desc) ? $json->code_file_desc : ''; $files = new Dcc_Model_Files(); $upload = new Dcc_Model_Upload(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $mail = new Application_Model_Log_Mail(); $member = new Admin_Model_Member(); // 检查文件号是否已经使用 foreach ($code_file_code as $code) { if ($files->fetchAll("FIND_IN_SET('{$code}', code) and del_flg = 0 and (state = 'Reviewing' or state = 'Active' or state = 'Obsolete') ")->count() > 0) { $result['result'] = false; $result['info'] = "文件 {$code} 已存在!"; echo Zend_Json::encode($result); exit; } $vers[] = "1.0"; } $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['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']; } } } // 新增还是编辑 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), 'send_require' => isset($val->send_require) ? 1 : 0, 'remark' => $val->remark, 'tag' => $val->tag, 'update_time' => $now, 'update_user' => $user); $id = $val->id; $where = "id = " . $id; try { if ($id) { $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; } // 获取角色所有人员 if (isset($users) && $users) { if ($plan_user) { $plan_user .= ","; } $plan_user .= $users; } $repeatUser = explode(',', $plan_user); $plan_user = array(); foreach ($repeatUser as $u) { if ($u && !in_array($u, $plan_user)) { $plan_user[] = $u; } } $plan_user = implode(',', $plan_user); } $reviewData = array('type' => "files", 'file_id' => $id, '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->description . "</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; } } } 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), 'send_require' => isset($val->send_require) ? 1 : 0, 'remark' => $val->remark, 'tag' => $val->tag, 'create_time' => $now, 'create_user' => $user, 'update_time' => $now, 'update_user' => $user, 'archive_time' => isset($state) ? '' : $now); try { $id = $files->insert($data); 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); } } // 操作记录 $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); $plan_user = array(); foreach ($repeatUser as $u) { if ($u && !in_array($u, $plan_user)) { $plan_user[] = $u; } } $plan_user = implode(',', $plan_user); } $reviewData = array('type' => "files", 'file_id' => $id, '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->description . "</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; } }
/** * @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 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']; $user_name = $user_session->user_info['user_name']; $val = (object) $request; $materiel = new Product_Model_Materiel(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); $employee = new Hra_Model_Employee(); $mail = new Application_Model_Log_Mail(); $member = new Admin_Model_Member(); $fadev = new Product_Model_Fadev(); $faModel = new Product_Model_Fa(); $sondev = new Product_Model_Sondev(); $flow = new Admin_Model_Flow(); $step = new Admin_Model_Step(); $db = $fadev->getAdapter(); $type = $val->upd_type; if ($type == 'new') { $bomModel = new Product_Model_Newbom(); } else { $bomModel = new Product_Model_Updbom(); } // 检查BOM信息是否完整 if (!isset($val->id) || !$val->id) { $result['result'] = false; $result['info'] = "BOM信息不完整,请重新编辑"; echo Zend_Json::encode($result); exit; } $id = $val->id; $ismanager = ""; if (isset($val->ismanager) && $val->ismanager == '1') { $ismanager = "1"; $managerState = $val->state; } // BOM完整:存在上级物料和下级物料,每个上级物料都有下级物料,替代料都存在 $bomFinishFlg = true; $facount = 0; $faData = $fadev->fetchAll("type = '{$type}' and nid = " . $id)->toArray(); if (count($faData) > 0) { $files = new Dcc_Model_Files(); foreach ($faData as $farow) { if ($farow['bom_file']) { $fileArr = explode(',', $farow['bom_file']); foreach ($fileArr as $filecode) { if ($files->fetchAll("code='{$filecode}' and state ='Active'")->count() == 0) { $result['result'] = false; $result['info'] = "BOM " . $farow['code'] . "的关联文件:“<b>" . $filecode . "</b>”不存在!"; echo Zend_Json::encode($result); exit; } } } } } $sonData = $sondev->fetchAll("nid = " . $id)->toArray(); if (count($faData) > 0 && count($sonData) > 0) { foreach ($sonData as $son) { if ($son['replace'] == "") { continue; } $replace = explode(',', $son['replace']); foreach ($replace as $r) { if ($materiel->fetchAll("code='{$r}'")->count() == 0) { $result['result'] = false; $result['info'] = "物料" . $son['code'] . "的替代料:<b>" . $r . "</b>不存在!"; echo Zend_Json::encode($result); exit; } } } foreach ($faData as $fa) { foreach ($sonData as $son) { if ($fa['recordkey'] == $son['recordkey']) { $facount++; break; } } } if ($facount != count($faData)) { $bomFinishFlg = false; } } else { $bomFinishFlg = false; } if (!$bomFinishFlg) { $result['result'] = false; $result['info'] = "BOM信息不完整,请重新编辑"; echo Zend_Json::encode($result); exit; } // 下级BOM未归档 $materielType = new Product_Model_Type(); $bomArr = array(); foreach ($faData as $fa) { if ($type == 'new') { // 检查上级bom是否已经存在,或者正在申请 $join = array(array('type' => INNERJOIN, 'table' => $bomModel->getName(), 'condition' => $fadev->getName() . '.nid = ' . $bomModel->getName() . '.id')); $jwhere = $fadev->getName() . ".code = '" . $fa['code'] . "' and (" . $bomModel->getName() . ".state = 'Active' or " . $bomModel->getName() . ".state = 'Reviewing')"; if ($fadev->getJoinCount($jwhere, $join)) { $result['result'] = false; $result['info'] = "BOM“" . $fa['code'] . "”已存在或正在申请"; echo Zend_Json::encode($result); exit; } // 检查bom的状态,不能是作废或者删除 $bomMateriel = $materiel->getMaterielByCode($fa['code']); if (!$bomMateriel) { $result['result'] = false; $result['info'] = "物料“" . $fa['code'] . "”不存在"; echo Zend_Json::encode($result); exit; } if ($bomMateriel['state'] == 'Obsolete' || $bomMateriel['state'] == 'Deleted') { $result['result'] = false; $result['info'] = "物料“" . $fa['code'] . "”已作废"; echo Zend_Json::encode($result); exit; } } // 检查下级bom是否归档 foreach ($sonData as $son) { if (isset($bomArr[$son['id']]) && $bomArr[$son['id']]) { $isbom = true; } else { if (isset($bomArr[$son['id']]) && !$bomArr[$son['id']]) { $isbom = false; } else { $d = $materiel->fetchRow('id = ' . $son['id']); $d = $materielType->fetchRow('id = ' . $d['type']); $bomArr[$son['id']] = $d['bom']; $isbom = false; } } if ($isbom) { if ($faModel->fetchAll("id = '" . $son['id'] . "'")->count() == 0) { $result['result'] = false; $result['info'] = "子BOM“" . $son['code'] . "”未归档"; echo Zend_Json::encode($result); exit; } } } } // 根据BOM获取审批流 $flow_id = ""; if (isset($val->review_flow)) { $flow_id = $val->review_flow; $flowRow = $db->query("select t1.* from oa_admin_flow t1 where t1.id='{$flow_id}'")->fetchObject(); } if (!$flow_id) { $flowRow = $db->query("select t1.* from oa_admin_flow t1 inner join oa_product_bom_config t2 on t1.flow_name=t2.flow where t2.type='{$type}'")->fetchObject(); if ($flowRow) { $flow_id = $flowRow->id; } } if (!$flow_id) { $result['result'] = false; $result['info'] = "还没有配置BOM审核流程,请联系管理员配置"; echo Zend_Json::encode($result); exit; } // 根据流程ID获取阶段 $step_ids = $flowRow->step_ids; if ($step_ids) { $stepRows = $step->getListByFlow($step_ids); $state = "Reviewing"; } $state = "Reviewing"; if (isset($managerState) && $managerState) { $state = $managerState; } if ($type == 'new') { $data = array("description" => isset($val->description) ? $val->description : "", "state" => $state, "remark" => isset($val->remark) ? $val->remark : "", "update_time" => $now, "update_user" => $user); } else { $data = array("upd_type" => isset($val->upd_type) ? $val->upd_type : "", "replace_flg" => isset($val->replace_flg) ? 1 : 0, "description" => isset($val->description) ? $val->description : "", "upd_reason" => isset($val->upd_reason) ? $val->upd_reason : "", "reason_type" => isset($val->reason_type) ? $val->reason_type : "", "state" => $state, "remark" => isset($val->remark) ? $val->remark : "", "update_time" => $now, "update_user" => $user); } if (isset($managerState) && $managerState == 'Active') { $data['archive_time'] = $now; } try { $bomModel->update($data, "id=" . $id); // 自定义字段 $attrval = new Admin_Model_Formval(); if ($type == 'new') { $table = "oa_product_bom_new"; $recordType = "bom"; } else { if ($type == 'ECO') { $table = "oa_product_bom_eco"; $recordType = "ecobom"; } else { if ($type == 'DEV') { $table = "oa_product_bom_dev"; $recordType = "devbom"; } } } $menu = $table . '_' . $id; $attrval->delete("menu = '" . $menu . "'"); foreach ($request as $field => $value) { if (stripos($field, "intelligenceField") !== false && $value) { $attrId = str_replace("intelligenceField", "", $field); $formval = array('attrid' => $attrId, 'value' => $value, 'menu' => $menu); $attrval->insert($formval); } } $action = "申请"; if ($record->fetchAll("type='{$recordType}' and table_id={$id}")->count() > 0) { $action = "编辑"; } // 操作记录 $data = array('type' => $recordType, 'table_name' => $table, 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => $action, 'ip' => $_SERVER['REMOTE_ADDR']); $record->insert($data); // 管理员将状态改为审核中也会触发审批流程 if (!$ismanager || isset($managerState) && $managerState == 'Reviewing') { // 审核流程 // 把阶段信息插入review记录 // 删除已有流程 $review->delete("type='{$recordType}' and file_id = {$id}"); $first = true; foreach ($stepRows as $s) { $plan_user = $s['user']; if ($s['dept']) { $tmpUser = array(); $plan_dept = $s['dept']; foreach (explode(',', $plan_dept) as $role) { $tmpRole = $member->getMemberWithNoManager($role); foreach ($tmpRole as $m) { $tmpUser[] = $m['user_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; } if (isset($users) && $users) { if ($plan_user) { $plan_user .= ","; } $plan_user .= $users; } } $repeatUser = explode(',', $plan_user); $repeatUser = array_unique($repeatUser); $plan_user = implode(',', $repeatUser); $reviewData = array('type' => "{$recordType}", 'file_id' => $id, '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(); $boms = array(); foreach ($faData as $fa) { if ($type == 'new') { $boms[] = $fa['code']; } else { $boms[] = $fa['code'] . " V" . $fa['ver']; } } if ($type == 'new') { $content = "你有新BOM归档申请需要审核,<p>" . "<b>BOM号:</b>" . implode(',', $boms) . "</p>" . "<p><b>描述:</b>" . $val->description . "</p>" . "<p><b>备注:</b>" . $val->remark . "</p>" . "<p><b>申请人:</b>" . $user_name . "</p>" . "<p><b>申请时间:</b>" . $now . "</p>" . "<p>请登录系统查看详情!</p>"; } else { $reson_type = ""; if ($val->reason_type) { $codemaster = new Admin_Model_Codemaster(); $mstData = $codemaster->getList("type=6 and code='" . $val->reason_type . "'"); if ($mstData && count($mstData) > 0) { $reson_type = $mstData[0]['text']; } } $content = "你有新BOM升版申请需要审核,<p>" . "<b>BOM号:</b>" . implode(',', $boms) . "</p>" . "<p><b>升版类型:</b>" . $val->upd_type . "</p>" . "<p><b>升版原因分类:</b>" . $reson_type . "</p>" . "<p><b>升版原因:</b>" . $val->upd_reason . "</p>" . "<p><b>升版描述:</b>" . $val->description . "</p>" . "<p><b>备注:</b>" . $val->remark . "</p>" . "<p><b>申请人:</b>" . $user_name . "</p>" . "<p><b>申请时间:</b>" . $now . "</p>" . "<p>请登录系统查看详情!</p>"; } $mailData = array('type' => 'BOM归档审批', 'subject' => 'BOM归档审批', 'to' => $to->mail_to, 'cc' => '', 'content' => $content, 'send_time' => $now, 'add_date' => $now); $mailId = $mail->insert($mailData); if ($mailId) { $mail->send($mailId); } } $first = false; } } else { if (isset($managerState) && $managerState == 'Active') { $bomfaData = $fadev->fetchAll("type = '{$type}' and nid=" . $id)->toArray(); // 如果是多个BOM,需要拆分 foreach ($bomfaData as $bomfa) { // 升版的情况,旧版作废 $facode = $bomfa['code']; if ($type != 'new') { $obsoleteData = array("state" => "Obsolete"); $obsoleteWhere = "code = '{$facode}'"; $faModel->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) select nid, recordkey, id, code, project_no, bom_file, qty, 'EBOM', ver, type, remark 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); } // 更新所有record的finish_flg为0 $reviewWhere = "type = '{$recordType}' and file_id = {$id}"; // 审核情况 $reviewData = array("actual_user" => $user, "finish_time" => $now, "finish_flg" => '1'); // 更新审核情况 $review->update($reviewData, $reviewWhere); } } } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } echo Zend_Json::encode($result); exit; }