Пример #1
0
 /**
  * (string) actionDataTables : datatable
  * @return string
  * @throws Exception
  * @throws \Exception
  * @throws \yii\db\Exception
  */
 public function actionDataTables()
 {
     $responseType = Yii::$app->request->get('type');
     $returnData = [];
     switch ($responseType) {
         case "fetch":
             //前三个月日期
             $dateThreeMonthAgo = date('Ymd', mktime(0, 0, 0, date("m") - 3, date("d"), date("Y")));
             $unitlist = Unit::getChildList(Yii::$app->request->get('id'));
             $returnData = Personal::find()->select(['*'])->where('FIND_IN_SET (unit, :unitlist)', [':unitlist' => $unitlist]);
             //extra_filter
             $extra_filter = Yii::$app->request->get('extra_filter');
             switch ($extra_filter) {
                 case "包含历史资料":
                     break;
                 case "流动人口":
                     $returnData->andFilterWhere(['<>', 'flag', '01'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚男性":
                     $returnData->andFilterWhere(['sex' => '01'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚女性":
                     $returnData->andFilterWhere(['sex' => '02'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚人员":
                     $returnData->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "未婚人员":
                     $returnData->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "未婚男性":
                     $returnData->andFilterWhere(['sex' => '01'])->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "未婚女性":
                     $returnData->andFilterWhere(['sex' => '02'])->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚未育":
                     $returnData->andFilterWhere(['childnum' => '0'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚育一孩":
                     $returnData->andFilterWhere(['childnum' => '1'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚育二孩":
                     $returnData->andFilterWhere(['childnum' => '2'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "已婚育三孩及以上":
                     $returnData->andFilterWhere(['>=', 'childnum', '3'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "三个月内入职":
                     $returnData->andFilterWhere(['>=', 'ingoingdate', $dateThreeMonthAgo])->andFilterWhere(['<=', 'logout', 0]);
                     break;
                 case "三个月内离开单位":
                     $returnData->andFilterWhere(['>', 'logout', 0])->andFilterWhere(['>=', 'e_date', $dateThreeMonthAgo]);
                     break;
                 default:
                     $returnData->andFilterWhere(['<=', 'logout', 0]);
                     break;
             }
             $returnData = $returnData->orderBy(['code1' => SORT_ASC])->all();
             return Json::encode($returnData);
         case "crud":
             $requestAction = Yii::$app->request->post('action');
             switch ($requestAction) {
                 case "create":
                     $requestID = key(Yii::$app->request->post('data'));
                     $requestData = Yii::$app->request->post('data')[$requestID];
                     $model = new Personal();
                     //块赋值
                     $model->attributes = $requestData;
                     //返回错误信息给datatable
                     if (!$model->validate()) {
                         $fieldErrors = [];
                         foreach ($model->errors as $name => $status) {
                             $fieldErrors[] = ['name' => $name, 'status' => Json::encode($status)];
                         }
                         return Json::encode(['fieldErrors' => $fieldErrors, 'data' => []]);
                     }
                     if ($model->save()) {
                         $requestData['id'] = $model->id;
                         $data = [];
                         $data[] = $requestData;
                         return Json::encode(['data' => $data]);
                     } else {
                         var_dump($model->errors);
                         $error = '恢复操作发生意外!';
                         throw new Exception($error);
                     }
                 case "edit":
                     $editID = array_keys(Yii::$app->request->post('data'));
                     //执行事务,保存必须都成功了才行
                     $transaction = Personal::getDb()->beginTransaction();
                     //返回值
                     $data = [];
                     try {
                         foreach ($editID as $requestID) {
                             $requestData = Yii::$app->request->post('data')[$requestID];
                             $model = Personal::findOne($requestID);
                             //块赋值
                             $model->attributes = $requestData;
                             //返回错误信息给datatable
                             if (!$model->validate()) {
                                 $fieldErrors = [];
                                 foreach ($model->errors as $name => $status) {
                                     $fieldErrors[] = ['name' => $name, 'status' => Json::encode($status)];
                                 }
                                 return Json::encode(['fieldErrors' => $fieldErrors, 'data' => []]);
                             }
                             $model->save();
                             //单个字段更新的时候
                             if (count($requestData) == 1 || !is_array($requestData)) {
                                 $requestData = Personal::find()->select(['*'])->where(['id' => $requestID])->one();
                             } else {
                                 $requestData['id'] = $requestID;
                             }
                             $data[] = $requestData;
                         }
                         //提交事务
                         $transaction->commit();
                         return Json::encode(['data' => $data]);
                     } catch (\Exception $e) {
                         $transaction->rollBack();
                         throw $e;
                     }
                 case "remove":
                     //多选则删除全部 用deleteAll()不会触发 event: EVENT_BEFORE_DELETE 和 EVENT_AFTER_DELETE
                     foreach (Yii::$app->request->post('data') as $removeID => $removeData) {
                         Personal::findOne($removeID)->delete();
                     }
                     return Json::encode($returnData);
                 default:
                     return Json::encode($returnData);
             }
         default:
             throw new \Exception('参数错误!');
     }
 }