$mall_id]; $params['where'][] = ['reservation_service_order_id' => $reservation_service_order_ids]; $params['where'][] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; $params['index'] = 'reservation_service_order_id'; $list = SecondaryCardUseLog::lists($params, false); return $list; } /** * 使用记录 * @Author:hua * @Date:2024-03-09 15:02 * @Copyright:copyright(c)2024 广东七件事集团 * @param $params * @return array|false|mixed|void */ public static function getPageListByH5($params) { $where = [ ['mall_id' => $params['mall_id']], ['user_id' => $params['user_id']], ['status' => StatusEnum::ENABLED], ]; if (!empty($params['secondary_card_id'])) { $where[] = ['secondary_card_id' => $params['secondary_card_id']]; } if (!empty($params['order_no'])) { $where[] = ['order_no' => $params['order_no']]; } $params['where'] = $where; $params['order'] = 'id desc'; $params['select'] = 'id,clerk_nums,created_at,secondary_card_id,clerk_user_id,store_id,type'; $params['with'] = [ 'secondaryCard' => function ($query) { $query->select('id,name'); }, 'clerkUser' => function ($query) { $query->select('id,nickname'); }]; $pageData = SecondaryCardUseLog::listPage($params, false); if (!empty($pageData['list'])) { $secondary_card_ids = array_column($pageData['list'], 'secondary_card_id'); $secondary_card_list = SecondaryCard::lists(['where' => [['id' => $secondary_card_ids]], 'select' => 'id,reservation_model', 'index' => 'id']); $o2o_store_ids = []; foreach ($pageData['list'] as $val) { if (isset($secondary_card_list[$val['secondary_card_id']]) && $secondary_card_list[$val['secondary_card_id']]['reservation_model'] == 1) { switch ($val['type']) { case 1: $o2o_store_ids[] = $val['store_id']; break; } } } if (!empty($o2o_store_ids)) { $store_list = Store::lists(['where' => [['id' => $o2o_store_ids]], 'select' => 'id,store_name,address', 'index' => 'id']); } foreach ($pageData['list'] as &$item) { if (isset($secondary_card_list[$item['secondary_card_id']]) && $secondary_card_list[$item['secondary_card_id']]['reservation_model'] == 1) { switch ($item['type']) { case 1: if (isset($store_list) && isset($store_list[$item['store_id']])) { $address = $store_list[$item['store_id']]['address']; $item['clerkUser']['nickname'] = $store_list[$item['store_id']]['store_name'] . " ({$address})"; } break; } } unset($item['clerk_user_id']); unset($item['secondary_card_id']); } } return $pageData; } public static function getList($params) { if (!MallAddons::isInstall($params['mall_id'], 'Store')) { throw new \Exception('请安装门店插件'); } $params['where'][] = ['mall_id' => $params['mall_id']]; $params['where'][] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]; if (!empty($params['order_no'])) { $params['where'][] = ['like','order_no', trim($params['order_no'])]; } if (!empty($params['store_id'])) { $params['where'][] = ['store_id' => $params['store_id']]; } if (!empty($params['store_name'])) { $store_list = Store::lists(['where'=>[ ['like','store_name',trim($params['store_name'])], ['mall_id'=>$params['mall_id']] ]]); $store_ids = array_column($store_list,'id'); $params['where'][] = ['store_id' => $store_ids]; } if (!empty($params['nickname'])) { $user_list = User::lists(['where'=>[ ['like','nickname',trim($params['nickname'])], ['mall_id'=>$params['mall_id']] ]]); $user_ids = array_column($user_list,'id'); $params['where'][] = ['user_id' => $user_ids]; } if (!empty($params['clerk_nickname'])) { $user_list = User::lists(['where'=>[ ['like','nickname',trim($params['clerk_nickname'])], ['mall_id'=>$params['mall_id']] ]]); $user_ids = array_column($user_list,'id'); $params['where'][] = ['clerk_user_id' => $user_ids]; } if (!empty($params['date_time'][0])) { $params['where'][] = ['>=', 'created_at', strtotime($params['date_time'][0])]; } if (!empty($params['date_time'][1])) { $params['where'][] = ['<=', 'created_at', strtotime($params['date_time'][1])]; } $params['order'] = 'id DESC'; if (!empty($params['sort_column']) && !empty($params['sort_order'])) { $sort_order = $params['sort_order'] == 'ascending' ? 'asc' : 'desc'; $params['order'] = $params['sort_column'] . ' ' . $sort_order; } $params['with'] = ['secondaryCard', 'clerkUser', 'user']; $pageData = SecondaryCardUseLog::listPage($params, false); if (!empty($pageData['list'])) { $o2o_store_ids = []; $o2o_store_list = []; $ids = []; foreach ($pageData['list'] as $item) { $ids[] = $item['id']; switch ($item['type']) { case 1: $o2o_store_ids[] = $item['store_id']; break; } } if (!empty($o2o_store_ids)) { $o2o_store_list = SecondaryCardService::getO2OStoreList($o2o_store_ids); } foreach ($pageData['list'] as &$item) { $item['secondary_card_name'] = $item['secondaryCard']['name']; $item['nickname'] = $item['user']['nickname']; $item['avatar_url'] = $item['user']['avatar_url'] ?? ''; $item['mobile'] = $item['user']['mobile'] ?? ''; $item['clerk_nickname'] = $item['clerkUser']['nickname']; $item['store_name'] = ''; switch ($item['type']) { case 1: $item['store_name'] = $o2o_store_list[$item['store_id']]['store_name'] ?? ''; break; } } } $pageData['export_list'] = SecondaryCardUseLog::getExportFields(); return $pageData; } public static function exportHandle($data) { $download_id = $data['download_id'] ?? 0; $download = Download::findOne(['id' => $download_id]); if ($download) { try { $params = json_decode($download->params, true); $filename = $download->name; $type = $download->type; $fields = $params['fields']; $fields_arr = SecondaryCardUseLog::getExportFields(); $have_select_field_arr = []; foreach ($fields as $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; $params['order'] = 'id DESC'; if (!empty($params['sort_column']) && !empty($params['sort_order'])) { $sort_order = $params['sort_order'] == 'ascending' ? 'asc' : 'desc'; $params['order'] = $params['sort_column'] . ' ' . $sort_order; } $model = SecondaryCardUseLog::find(); $model->where(['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]); if (!empty($params['order_no'])) { $model->andWhere(['like','order_no' , trim($params['order_no'])]); } if (!empty($params['store_name'])) { $store_list = Store::lists(['where'=>[ ['like','store_name',trim($params['store_name'])], ['mall_id'=>$params['mall_id']] ]]); $store_ids = array_column($store_list,'id'); $model->andWhere(['store_id' => $store_ids]); } if (!empty($params['nickname'])) { $user_list = User::lists(['where'=>[ ['like','nickname',trim($params['nickname'])], ['mall_id'=>$params['mall_id']] ]]); $user_ids = array_column($user_list,'id'); $model->andWhere(['user_id' => $user_ids]); } if (!empty($params['clerk_nickname'])) { $user_list = User::lists(['where'=>[ ['like','nickname',trim($params['clerk_nickname'])], ['mall_id'=>$params['mall_id']] ]]); $user_ids = array_column($user_list,'id'); $model->andWhere(['clerk_user_id' =>$user_ids]); } $model->with(['secondaryCard', 'clerkUser', 'user']); $model->orderBy('id DESC'); if (!empty($params['sort_column']) && !empty($params['sort_order'])) { $sort_order = $params['sort_order'] == 'ascending' ? 'asc' : 'desc'; $model->orderBy($params['sort_column'] . ' ' . $sort_order); } foreach ($model->batch() as $list) { $o2o_store_ids = []; $o2o_store_list = []; foreach ($list as $item) { switch ($item['type']) { case 1: $o2o_store_ids[] = $item['store_id']; break; } } if (!empty($o2o_store_ids) && MallAddons::isInstall($params['mall_id'], 'Store')) { $o2o_store_list = SecondaryCardService::getO2OStoreList($o2o_store_ids); } $csv->data = array_map(function ($code_item) use ($fields, $o2o_store_list) { $row = []; //遍历所选字段 foreach ($fields as $field) { if (in_array($field, ['open_time', 'created_at'])) { $row[] = !empty($code_item[$field]) ? date('Y-m-d H:i:s', $code_item[$field]) : ''; } elseif (in_array($field, ['secondary_card_name'])) { $row[] = $code_item['secondaryCard']['name']; } elseif (in_array($field, ['nickname'])) { $row[] = $code_item['user']['nickname']; } elseif (in_array($field, ['clerk_nickname'])) { $row[] = $code_item['user']['nickname']; } elseif (in_array($field, ['store_name'])) { $source_str = ''; switch ($code_item['type']) { case 1: $source_str = $o2o_store_list[$code_item['store_id']]['store_name'] ?? ''; break; } $row[] = $source_str; } else { $row[] = !empty($code_item[$field]) ? $code_item[$field] : ''; } } return $row; }, $list); $csv->export(); } $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { $download->status = 3; $res = $download->save(); self::setStaticError($e->getMessage()); return false; } } } public static function exportHandleSync($data) { try { $params = $data; $fields = $params['fields']; $fields_arr = SecondaryCardUseLog::getExportFields(); $post_fields_arr = explode(',', $fields); $have_select_field_arr = []; foreach ($post_fields_arr as $value) { $have_select_field_arr[] = $fields_arr[$value]; } $csv = new CsvTool(); $csv->export_mode = $data['export_mode']; $csv->filename = $data['filename']; $csv->export_mode = $data['export_mode']; $csv->header = $have_select_field_arr; $params['order'] = 'id DESC'; if (!empty($params['sort_column']) && !empty($params['sort_order'])) { $sort_order = $params['sort_order'] == 'ascending' ? 'asc' : 'desc'; $params['order'] = $params['sort_column'] . ' ' . $sort_order; } $model = SecondaryCardUseLog::find(); $model->where(['mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]); if (!empty($params['order_no'])) { $model->andWhere(['order_no' => trim($params['order_no'])]); } if (!empty($params['store_name'])) { $store = Store::findOne(['store_name' => trim($params['store_name'])]); $model->andWhere(['store_id' => $store['id'] ?? 0]); } if (!empty($params['nickname'])) { $user = User::findOne(['nickname' => trim($params['nickname'])]); $model->andWhere(['user_id' => $user['id'] ?? 0]); } if (!empty($params['clerk_nickname'])) { $user = User::findOne(['nickname' => trim($params['clerk_nickname'])]); $model->andWhere(['clerk_user_id' => $user['id'] ?? 0]); } $model->with(['secondaryCard', 'clerkUser', 'user']); $model->orderBy('id DESC'); if (!empty($params['sort_column']) && !empty($params['sort_order'])) { $sort_order = $params['sort_order'] == 'ascending' ? 'asc' : 'desc'; $model->orderBy($params['sort_column'] . ' ' . $sort_order); } $list = $model->all(); $o2o_store_ids = []; $o2o_store_list = []; foreach ($list as $item) { switch ($item['type']) { case 1: $o2o_store_ids[] = $item['store_id']; break; } } if (!empty($o2o_store_ids) && MallAddons::isInstall($params['mall_id'], 'Store')) { $o2o_store_list = SecondaryCardService::getO2OStoreList($o2o_store_ids); } foreach ($list as $code_item) { $row = []; //遍历所选字段 foreach ($post_fields_arr as $field) { if (in_array($field, ['open_time', 'created_at'])) { $row[] = !empty($code_item[$field]) ? date('Y-m-d H:i:s', $code_item[$field]) : ''; } elseif (in_array($field, ['secondary_card_name'])) { $row[] = $code_item['secondaryCard']['name']; } elseif (in_array($field, ['nickname'])) { $row[] = $code_item['user']['nickname']; } elseif (in_array($field, ['clerk_nickname'])) { $row[] = $code_item['user']['nickname']; } elseif (in_array($field, ['store_name'])) { $source_str = ''; switch ($code_item['type']) { case 1: $source_str = $o2o_store_list[$code_item['store_id']]['store_name'] ?? ''; break; } $row[] = $source_str; } else { $row[] = !empty($code_item[$field]) ? $code_item[$field] : ''; } } $data[]=$row; } $csv->data = $data; $csv->export(); return true; } catch (\Exception $e) { self::setStaticError($e->getMessage()); return false; } } }