$download_id]); if ($download) { $params = Json::decode($download->params); switch ($params['func']) { case 'o': return self::o($download); case 'f': return self::f($download); } } return false; } protected static function o(Download $download) { try { $params = Json::decode($download->params); $filename = $download->name; $type = $download->type; $model = QiShangTongOrder::find(); $model->where(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]); if (!empty($params['mall_id'])) { $model->andWhere(['mall_id' => $params['mall_id']]); } elseif (!empty($params['keyword'])) { $mIds = Mall::find()->where(['or', ['like', 'id', $params['keyword']], ['like', 'name', $params['keyword']]]) ->select('id')->column(); if (!empty($mIds)) { $model->andWhere(['mall_id' => $mIds]); } else { $model->andWhere(['mall_id' => 0]); } } if (!empty($params['order_no'])) { $model->andWhere(['like', 'order_no', $params['order_no']]); } if (!empty($params['third_order_no'])) { $model->andWhere(['like', 'third_order_no', $params['third_order_no']]); } if (!empty($params['member'])) { $query = User::find(); if (!empty($params['mall_id'])) $query->where(['mall_id' => $params['mall_id']]); $uids = $query->andWhere(['or', ['like', 'id', $params['member']], ['like', 'mobile', $params['member']], ['like', 'nickname', $params['member']]]) ->andWhere(['status' => StatusEnum::ENABLED]) ->select('id')->column(); if (!empty($uids)) { $model->andWhere(['user_id' => $uids]); } else { $model->andWhere(['user_id' => 0]); } } $model->with(['order' => function($query) { $query->with(['detail' => function($dQuery) { $dQuery->select('id, order_id, goods_name, goods_attr_name'); }, 'user' => function ($query) { $query->select('id,nickname,username,mobile'); }]); }, 'mall' => function($query) { $query->select('id, name'); }]); $fields = $params['fields']; $fields_arr = [ 'mall_id' => '商城ID', 'mall_name' => '商城名称', 'order_no' => '订单编号', 'third_order_no'=> '第三方订单编号', 'req_success' => '推单状态', 'updated_at' => '推单时间', 'last_resp' => '推单详情', 'goods_name' => '商品名称', 'goods_attr_name' => '规格名称', 'pay_money' => '支付金额', 'pay_time' => '支付时间' ]; $have_select_field_arr = []; foreach ($fields as $value) { if (isset($fields_arr[$value])) $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; foreach ($model->batch() as $orders) { foreach ($orders as $item) { $row = []; foreach ($fields as $field) { switch (true) { case in_array($field, ['mall_name']): $row[] = $item['mall']['name'] ?? '未知商城'; break; case in_array($field, ['created_at', 'updated_at']): $row[] = !empty($item[$field]) ? date('Y-m-d H:i:s', $item[$field]) : ''; break; case in_array($field, ['pay_time']): $row[] = !empty($item['order'][$field]) ? date('Y-m-d H:i:s', $item['order'][$field]) : ''; break; case in_array($field, ['req_success']): $row[] = $item[$field] == 100 ? '成功' : '失败'; break; case in_array($field, ['goods_name', 'goods_attr_name']): $row[] = $item['order']['detail'][0][$field] ?? ''; break; case in_array($field, ['pay_money']): $row[] = $item['order'][$field] ?? ''; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } $csv->data[] = $row; } $csv->export(); } $csv->updateDown($download, empty($params['mall_id']) ? SettingService::getMasterMall() : $params['mall_id']); } catch (\Exception $e) { $download->status = 3; $res = $download->save(); dd($e->getMessage() . $e->getFile() . $e->getLine()); self::setStaticError($e->getMessage()); return $e->getMessage(); } } protected static function f(Download $download) { try { $params = Json::decode($download->params); $filename = $download->name; $type = $download->type; $model = QiShangTongBalanceLog::find(); $model->where(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]); if (!empty($params['mall_id'])) { $model->andWhere(['mall_id' => $params['mall_id']]); } elseif (!empty($params['keyword'])) { $mIds = Mall::find()->where(['or', ['like', 'id', $params['keyword']], ['like', 'name', $params['keyword']]]) ->select('id')->column(); if (!empty($mIds)) { $model->andWhere(['mall_id' => $mIds]); } else { $model->andWhere(['mall_id' => 0]); } } if (!empty($params['date_start'])) $model->andWhere(['>=', 'created_at', strtotime($params['date_start'])]); if (!empty($params['date_end'])) $model->andWhere(['<=', 'created_at', strtotime($params['date_end'])]); $model->with(['mall' => function($query) { $query->select('id, name'); }]); $fields = $params['fields']; $fields_arr = [ 'mall_id' => '商城ID', 'mall_name' => '商城名称', 'order_no' => '异动单号', 'created_at' => '创建时间', 'amount' => '异动金额', 'type' => '异动类型', 'direction' => '增加/减少', 'remark' => '异动备注' ]; $have_select_field_arr = []; foreach ($fields as $value) { if (isset($fields_arr[$value])) $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $have_select_field_arr; foreach ($model->batch() as $orders) { foreach ($orders as $item) { $row = []; foreach ($fields as $field) { switch (true) { case in_array($field, ['mall_name']): $row[] = $item['mall']['name'] ?? '未知商城'; break; case in_array($field, ['created_at', 'updated_at']): $row[] = !empty($item[$field]) ? date('Y-m-d H:i:s', $item[$field]) : ''; break; case in_array($field, ['type']): $row[] = QiShangTongEnums::BALANCE_LOG_TYPE_MAP[$item[$field]] ?? ''; break; case in_array($field, ['direction']): $row[] = $item[$field] == 1 ? '增加' : '减少'; break; default: $row[] = !empty($item[$field]) ? $item[$field] : ''; } } $csv->data[] = $row; } $csv->export(); } $csv->updateDown($download, empty($params['mall_id']) ? SettingService::getMasterMall() : $params['mall_id']); } catch (\Exception $e) { $download->status = 3; $res = $download->save(); dd($e->getMessage() . $e->getFile() . $e->getLine()); self::setStaticError($e->getMessage()); return $e->getMessage(); } } }