/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer $id the ID of the model to be loaded * @return Menus the loaded model * @throws CHttpException */ public function loadModel($id) { $model = Material::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
public function actionIndex() { //获取用户名和密码 $name = Yii::app()->request->getParam('name'); $password = Yii::app()->request->getParam('password'); if (!$name) { Error::output(Error::ERR_NO_USER_NAME); } if (!$password) { Error::output(Error::ERR_NO_PASSWORD); } //获取用户模型 $userinfo = Members::model()->find('name=:name', array(':name' => $name)); if (!$userinfo) { Error::output(Error::ERR_NO_USER); } else { $_password = md5($userinfo->salt . $password); if ($_password != $userinfo->password) { Error::output(Error::ERR_INVALID_PASSWORD); } } //登陆成功生成user_login $userLogin = UserLogin::model()->find('user_id = :user_id', array(':user_id' => $userinfo->id)); if (!$userLogin) { //不存在就创建 $userLogin = new UserLogin(); $userLogin->user_id = $userinfo->id; $userLogin->username = $name; } $userLogin->login_time = time(); $userLogin->token = md5(time() . Common::getGenerateSalt()); $userLogin->visit_client = Common::getClientType(); $userLogin->ip = Common::getIp(); $userLogin->save(); $member = CJSON::decode(CJSON::encode($userinfo)); $member['token'] = $userLogin->token; unset($member['password'], $member['salt']); //返回数据 //如果存在头像,就返回 if ($member['avatar']) { //取图片数据 $material = Material::model()->findByPk($member['avatar']); $member['avatar'] = array('host' => Yii::app()->params['img_url'], 'filepath' => $material->filepath, 'filename' => $material->filename); } Out::jsonOutput($member); }
public function beforeControllerAction($controller, $action) { if (parent::beforeControllerAction($controller, $action)) { //如果需要登陆就检测用户是否登陆 if (defined('NEED_LOGIN') && NEED_LOGIN) { //检测 $accessToken = Yii::app()->request->getParam('access_token'); if (!$accessToken) { Error::output(Error::ERR_NO_LOGIN); } else { //检测token有没有过期 $userLogin = UserLogin::model()->find("token = :token AND login_time + " . Yii::app()->params['login_expire_time'] . " > " . time(), array(':token' => $accessToken)); if ($userLogin) { //根据用户id查询用户信息 $memberInfo = Members::model()->find('id = :id', array(':id' => $userLogin->user_id)); if (!$memberInfo) { Error::output(Error::ERR_NO_LOGIN); } //转换成数组 $memberInfo = CJSON::decode(CJSON::encode($memberInfo)); //把用户信息存放到user里面供访问 unset($memberInfo['password'], $memberInfo['salt']); //如果存在头像,就返回 if ($memberInfo['avatar']) { //取图片数据 $material = Material::model()->findByPk($memberInfo['avatar']); $memberInfo['avatar'] = array('host' => Yii::app()->params['img_url'], 'filepath' => $material->filepath, 'filename' => $material->filename); } $this->_user = $memberInfo; } else { Error::output(Error::ERR_NO_LOGIN); } } } return true; } else { return false; } }
static function ImportDo() { // Делаем запись в таблицу отчетов импорта $logreport = new Logreport(); $logreport->logreport_date = date('Y-m-d'); $logreport->save(); self::$logreport_id = $logreport->logreport_id; // Идем по файлам импорта из 1С (os.xls - Основные средства, mat.xls - Материалы) foreach (['os.xls', 'mat.xls'] as $filename) { self::$filename = dirname($_SERVER['SCRIPT_FILENAME']) . '/imp/' . $filename; self::$os = self::$filename === dirname($_SERVER['SCRIPT_FILENAME']) . '/imp/os.xls' ? true : false; var_dump(self::$filename); var_dump(file_exists(self::$filename)); if (file_exists(self::$filename)) { ini_set('max_execution_time', 1000); // 1000 seconds ini_set('memory_limit', 1073741824); // 1Gbyte Max Memory $chunkSize = 1000; //размер считываемых строк за раз $startRow = self::$os ? self::$os_start : self::$mat_start; //начинаем читать с определенной строки $exit = false; //флаг выхода $empty_value = 0; //счетчик пустых знаений // Загружаем данные из файла Excel require_once Yii::app()->basePath . '/extensions/PHPExcel/Classes/PHPExcel/IOFactory.php'; $objReader = PHPExcel_IOFactory::createReaderForFile(self::$filename); $objReader->setReadDataOnly(true); $chunkFilter = new chunkReadFilter(); $objReader->setReadFilter($chunkFilter); // Грузим правила импорта для сотрудников self::$employeewords = ARData::Data(Importemployee::model())->GetDataObject(); // Определяем показатели импорта self::$logreport_errors = 0; // Не загружено записей из-за ошибок self::$logreport_updates = 0; // Записей изменено self::$logreport_additions = 0; // Записей добавлено self::$logreport_missed = 0; // Записей пропущено (исключены из обработки) self::$logreport_amount = 0; // Всего записей while (!$exit) { // Инициализируем переменные // $row = $sheetData[self::$rownum_xls]; $chunkFilter->setRows($startRow, $chunkSize); //устанавливаем знаечние фильтра $objPHPExcel = $objReader->load(self::$filename); //открываем файл $objPHPExcel->setActiveSheetIndex(0); //устанавливаем индекс активной страницы $objWorksheet = $objPHPExcel->getActiveSheet(); //делаем активной нужную страницу // Идем по данных excel for ($i = $startRow; $i < $startRow + $chunkSize; $i++) { //внутренний цикл по строкам self::$rownum_xls = $i; $value = trim(htmlspecialchars($objWorksheet->getCellByColumnAndRow(0, $i)->getValue())); //получаем первое знаение в строке if (empty($value)) { //проверяем значение на пустоту $empty_value++; } if ($empty_value == 1) { //после трех пустых значений, завершаем обработку файла, думая, что это конец $exit = true; break; } /* Манипуляции с данными каким Вам угодно способом, в PHPExcel их превеликое множество */ $row = $objWorksheet->rangeToArray('A' . $i . ':Q' . $i, null, true, true, true); $row = $row[key($row)]; $material = new Material(); $employee = new Employee(); $mattraffic = new Mattraffic(); $matlog = new Matlog(); $employeelog = new Employeelog(); $traflog = new Traflog(); $MaterialDo = false; $EmployeeDo = false; $MattrafficDo = false; // Применяем значения атрубутов Материальной ценности $MaterialDo = self::MaterialDo($material, $matlog, $row); if ($MaterialDo) { // Применяем значения атрубутов Сотрудника $EmployeeDo = self::EmployeeDo($employee, $employeelog, $row); if ($EmployeeDo) { // Применяем значения атрубутов "Операции над материальной ценностью" $MattrafficDo = self::MattrafficDo($mattraffic, $traflog, $row, $material, $employee->employee_id); } } // Начинаем транзакцию $transaction = Yii::app()->db->beginTransaction(); try { // $matlog->matlog_type !== 5 - Если Запись не изменилась не пишем в лог if ($matlog->matlog_type !== 5 && ($MaterialDo || count($material->getErrors()) > 0)) { $matlog->save(false); } if ($MaterialDo) { // $employeelog->employeelog_type !== 5 - Если Запись не изменилась не пишем в лог if ($employeelog->employeelog_type !== 5 && ($EmployeeDo || count($employee->getErrors()) > 0)) { $employeelog->save(false); } if ($EmployeeDo) { if ($MattrafficDo || count($mattraffic->getErrors()) > 0) { if ($matlog->IsNewRecord) { $matlog->material_number = $material->material_number; // Иначе пишется предыдущее значение количества материальной ценности $matlog->save(false); } if ($employeelog->IsNewRecord) { $employeelog->save(false); } $traflog->id_matlog = $matlog->matlog_id; $traflog->id_employeelog = $employeelog->employeelog_id; $traflog->save(false); } if ($MattrafficDo) { $material->save(false); $employee->save(false); $mattraffic->id_material = $material->material_id; $mattraffic->id_mol = $employee->employee_id; $mattraffic->save(false); // Применяем значения атрубутов, если материальная ценность списна self::WriteOffDo($material, $matlog, $mattraffic, $traflog, $row); } } } $transaction->commit(); } catch (Exception $e) { $transaction->rollback(); throw new CException($e->getMessage() . ' $rownum_xls = ' . self::$rownum_xls . '; $filename = ' . self::$filename); } } $objPHPExcel->disconnectWorksheets(); //чистим unset($objPHPExcel); //память $startRow += $chunkSize; //переходим на следующий шаг цикла, увеличивая строку, с которой будем читать файл } $logreport->logreport_additions += self::$logreport_additions; $logreport->logreport_updates += self::$logreport_updates; $logreport->logreport_errors += self::$logreport_errors; $logreport->logreport_missed += self::$logreport_missed; $logreport->logreport_amount += self::$rownum_xls - (self::$os ? self::$os_start : self::$mat_start); $logreport->save(); } } ARData::Data(Traflog::model(), Traflog::model()->Test())->PrintData(); echo '<BR>'; ARData::Data(Matlog::model(), Matlog::model()->Test())->PrintData(); echo '<BR>'; ARData::Data(Employeelog::model(), Employeelog::model()->Test())->PrintData(); echo '<BR>'; ARData::Data(Material::model(), Material::model()->Test())->PrintData(); echo '<BR> Акты списания'; ARData::Data(Writeoffakt::model(), Writeoffakt::model()->Test())->PrintData(); }