public function importAction() { $result = array('success' => true, 'info' => '导入成功'); $request = $this->getRequest()->getParams(); $now = date('Y-m-d H:i:s'); if (isset($_FILES['csv'])) { $now = date('Y-m-d H:i:s'); $user_session = new Zend_Session_Namespace('user'); $user_id = $user_session->user_info['user_id']; $file = $_FILES['csv']; $file_extension = strrchr($file['name'], "."); $h = new Application_Model_Helpers(); $tmp_file_name = $h->getMicrotimeStr() . $file_extension; $savepath = "../temp/"; $tmp_file_path = $savepath . $tmp_file_name; move_uploaded_file($file["tmp_name"], $tmp_file_path); $materiel = new Product_Model_Materiel(); $supply = new Product_Model_Bpartner(); $db = $materiel->getAdapter(); $file = fopen($tmp_file_path, "r"); $data = array(); while (!feof($file)) { array_push($data, fgetcsv($file)); } // 数据校验 if (count($data) <= 1) { $result['success'] = false; $result['info'] = "文件中无数据!"; fclose($file); echo Zend_Json::encode($result); exit; } // 文件格式 # 物料号 MPQ MOQ LT 供应商1 供应商2 备注 $errorCode = array(); $okData = array(); for ($i = 1; $i < count($data); $i++) { $num = $i + 1; $row = $data[$i]; if (count($row) < 2 || !$row[1]) { continue; } for ($k = 0; $k < count($row); $k++) { $row[$k] = str_replace("\"", "", $row[$k]); } // check materiel code if ($materiel->checkExist($row[1])) { // data $code = $row[1]; $supply1Id = $supply2Id = ''; $mpq = $moq = $lt = 0; $manufacturers = $remark = ''; if (isset($row[2]) && $row[2] && is_numeric($row[2])) { $mpq = $row[2]; } if (isset($row[3]) && $row[3] && is_numeric($row[3])) { $moq = $row[3]; } if (isset($row[4]) && $row[4] && is_numeric($row[4])) { $lt = $row[4]; } // supply $supply1 = isset($row[5]) ? $row[5] : 0; $supply2 = isset($row[6]) ? $row[6] : 0; // check supply exists if ($supply1) { $supply1 = iconv('GBK', 'UTF-8', $supply1); $where = "code = '{$supply1}' or cname like '{$supply1}' or ename like '{$supply1}' or concat(code, cname) like '{$supply1}' or concat(code, ename) like '{$supply1}'"; $supply1Data = $supply->getJoinList($where, array(), array('id')); if (count($supply1Data) > 0) { $supply1Id = $supply1Data[0]['id']; } } if ($supply2) { $supply2 = iconv('GBK', 'UTF-8', $supply2); $where = "code = '{$supply2}' or cname like '{$supply2}' or ename like '{$supply2}' or concat(code, cname) like '{$supply2}' or concat(code, ename) like '{$supply2}'"; $supply2Data = $supply->getJoinList($where, array(), array('id')); if (count($supply2Data) > 0) { $supply2Id = $supply2Data[0]['id']; } } $manufacturers = isset($row[7]) ? iconv('GBK', 'UTF-8', $row[7]) : ''; $remark = isset($row[8]) ? iconv('GBK', 'UTF-8', $row[8]) : ''; $profile = array('mpq' => $mpq, 'moq' => $moq, 'tod' => $lt, 'supply1' => $supply1Id, 'supply2' => $supply2Id, 'manufacturers' => $manufacturers, 'remark' => $remark); $where = "code = '{$code}'"; try { $materiel->update($profile, $where); } catch (Exception $e) { $errorCode[] = $code; } $okData[] = $row; } else { $errorCode[] = $row[1]; } } if (count($errorCode) > 0) { $result['error'] = $errorCode; } fclose($file); } 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(); $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 removeAction() { // 返回值数组 $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']; $json = json_decode($request['json']); $deleted = $json->deleted; $materiel = new Product_Model_Materiel(); $record = new Dcc_Model_Record(); $review = new Dcc_Model_Review(); if (count($deleted) > 0) { foreach ($deleted as $val) { $id = $val->id; // 操作记录 $data = array('type' => "materiel", 'table_name' => "oa_product_materiel", 'table_id' => $id, 'handle_user' => $user, 'handle_time' => $now, 'action' => "删除", 'ip' => $_SERVER['REMOTE_ADDR']); try { // 增加record记录 $record->insert($data); // 删除review记录 $review->delete("type = 'materiel' and file_id = {$id}"); // 更新物料状态 $materiel->update(array('state' => 'Deleted'), "id = {$id}"); } catch (Exception $e) { $result['result'] = false; $result['info'] = $e->getMessage(); echo Zend_Json::encode($result); exit; } } } echo Zend_Json::encode($result); exit; }