public function actionReturnRateMonth() { $id = wanhunet::$app->request->post('id'); /** @var InvestMonth[] $investMonths */ $investMonths = InvestMonth::find()->joinWith(['investList' => function ($query) { /** @var \yii\db\ActiveQuery $query */ $query->joinWith(['member' => function ($query) { /** @var \yii\db\ActiveQuery $query */ $query->select(Member::$SELECT_ROW); }, 'invest']); }])->orderBy('id desc')->where(['m_status' => InvestMonth::STATUS_ACTIVE])->andWhere([InvestMonth::tableName() . '.id' => $id])->andWhere(['<=', 'm_time', time()])->asArray()->all(); $members = []; $assetMoneys = []; $ims = []; $investOver = []; foreach ($investMonths as $investMonth) { $memberId = $investMonth['investList']['member']['id']; if (isset($members[$memberId])) { $memberAsset =& $members[$memberId]; } else { $asset = $asset = Asset::find()->where(['user_id' => $memberId])->asArray()->one(); $members[$memberId] = $asset['money']; $memberAsset =& $members[$memberId]; } if (InvestMonth::find()->where(['invest_list_id' => $investMonth['invest_list_id'], 'm_status' => InvestMonth::STATUS_ACTIVE])->count() == 1) { $investOver[] = $investMonth['investList']['id']; $step = $investMonth['investList']['investment_sum'] + $investMonth['m_step']; } else { $step = $investMonth['m_step']; } $memberAsset += $step; $assetMoneys[] = [$memberId, $step, AssetMoney::STATUS_INC, AssetMoney::TYPE_MONEY, wanhunet::$app->controller->getRoute(), $memberId, json_encode([mb_substr($investMonth['investList']['invest']['title'], 0, 5, 'utf-8') . '第' . $investMonth['m_date'] . '个月的返息']), time(), time()]; $ims[$investMonth['id']] = ['m_status' => InvestMonth::STATUS_DELETED]; } $batchInsertRows = ['user_id', 'step', 'status', 'type', 'action', 'action_uid', 'llinfo', 'created_at', 'updated_at']; $connection = wanhunet::$app->db; foreach ($members as $user_id => $amemberAsset) { $connection->createCommand()->update(Asset::tableName(), ['money' => $amemberAsset], ['user_id' => $user_id])->execute(); } foreach ($ims as $im_id => $im) { $connection->createCommand()->update(InvestMonth::tableName(), $im, ['id' => $im_id])->execute(); } foreach ($investOver as $in) { $connection->createCommand()->update(InvestList::tableName(), ['status' => InvestList::STATUS_ORDER_TRIAL], ['id' => $in])->execute(); } if (count($assetMoneys) > 0) { $connection->createCommand()->batchInsert(AssetMoney::tableName(), $batchInsertRows, $assetMoneys)->execute(); } }