'核销员ID', 'user.nickname' => '核销员昵称', 'user.mobile' => '核销员手机', 'w_user.w_user_id' => '核销/下单用户ID', 'w_user.w_user_nickname' => '核销/下单用户昵称', 'w_user.w_user_mobile' => '核销/下单用户手机', 'store.store_name' => '所属门店', 'log.capital_type' => '奖励类型', 'log.change_num' => '佣金', 'log.order_no' => '订单号', 'log.created_at' => '创建时间', ]; $temp = []; foreach ($fields as $key => $val) { $showField = explode('.', $key)[1]; if (strstr($showField, ' ')) { $showField = explode(' ', $showField)[1]; } if ($field === null) { $temp[$showField] = $val; } else if (in_array($showField, $field)) { $temp[$key] = $val; } } return $temp; } /** * 导出资产 */ public static function exportAssets(array $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 = isset($params['fields']) ? $params['fields'] : null; $exportField = self::exportFieldsList($fields); $exportField = array_keys($exportField); //如果有变动前金额,或者变动金额,加入变化类型用于计算 if (in_array('change_num', $fields)) array_push($exportField,'log.change_type'); if (in_array('w_user_id', $fields) || in_array('w_user_nickname', $fields) || in_array('w_user_mobile', $fields)) array_push($exportField,'log.contributor_id'); $where['where'][] = ['=', 'log.mall_id', $params['mall_id']]; $where['where'][] = ['=', 'log.from_type',WriteOffEnum::ADDONS_NAME]; if (!empty($params['user_keyward'])) { $user_ids = User::find()->select("id") ->where(['mall_id' => $params['mall_id']]) ->andWhere([ 'or', ['=', 'id', $params['user_keyward']], ['like', 'mobile', $params['user_keyward'] . '%', false], ['like', 'nickname', $params['user_keyward'] . '%', false] ]) ->asArray() ->column(); $where['where'][] = ['in', 'log.user_id', $user_ids]; } // 根据搜索手机号查询用户id if (!empty($params['w_user_keyward'])) { $user_ids = User::find()->select("id") ->where(['mall_id' => $params['mall_id']]) ->andWhere([ 'or', ['=', 'id', $params['w_user_keyward']], ['like', 'mobile', $params['w_user_keyward'] . '%', false], ['like', 'nickname', $params['w_user_keyward'] . '%', false] ]) ->asArray() ->column(); $where['where'][] = ['in', 'log.contributor_id', $user_ids]; } if (!empty($params['order_no'])) { $where['where'][] = ['=', 'log.order_no', $params['order_no']]; } if (!empty($params['capital_type'])) { $where['where'][] = ['=', 'log.capital_type', $params['capital_type']]; } if (!empty($params['start'])) { $where['where'][] = ['>=', 'log.created_at', strtotime($params['start'])]; } if (!empty($params['end'])) { $where['where'][] = ['<', 'log.created_at', strtotime($params['end'])]; } CapitalLog::$capitalType = $params['table']; $join = [['LEFT JOIN', User::tableName() . 'as user', 'log.user_id = user.id']]; $where['alias'] = 'log'; $where['join'] = $join; $where['order'] = 'log.created_at desc,log.id desc'; foreach($exportField as $key=> &$item){ if($item == 'w_user.w_user_id' || $item == 'w_user.w_user_mobile' || $item == 'w_user.w_user_nickname' || $item == 'store.store_name'){ unset($exportField[$key]); } } $where['select'] = $exportField; $model = CapitalLog::find(); CapitalLog::paramPack($where, $model); $list = []; $exportheader = []; $isSetHeader = true; //所有团队部分修改 $i = 1; $page_size = 1000; while ($log_list = $model->asArray()->offset(($i - 1) * $page_size)->limit($page_size)->all()){ foreach ($log_list as $l){ $w_user = null; if(!empty($l['contributor_id'])){ $w_user = User::find()->where(['id'=>$l['contributor_id']])->asArray()->one(); } $temp = []; //按顺序组装 if(in_array('user_id', $fields)) { $temp['user_id'] = $l['user_id']; $isSetHeader && array_push($exportheader, '核销员ID'); } if(in_array('nickname', $fields)) { $temp['nickname'] = $l['nickname']; $isSetHeader && array_push($exportheader, '核销员昵称'); } if(in_array('mobile', $fields)) { $temp['mobile'] = $l['mobile']; $isSetHeader && array_push($exportheader, '核销员手机'); } if(in_array('w_user_id', $fields)) { $temp['w_user_id'] = $w_user ? $w_user['id'] : ''; $isSetHeader && array_push($exportheader, '核销/下单用户ID'); } if(in_array('w_user_nickname', $fields)) { $temp['w_user_nickname'] = $w_user ? $w_user['nickname'] : ''; $isSetHeader && array_push($exportheader, '核销/下单用户昵称'); } if(in_array('w_user_mobile', $fields)) { $temp['w_user_mobile'] = $w_user ? $w_user['mobile'] : ''; $isSetHeader && array_push($exportheader, '核销/下单用户手机'); } if(in_array('store_name', $fields)) { $store_name = ''; $writeOffUser = WriteOffUser::findOne(['user_id'=>$l['user_id'],'status'=>StatusEnum::ENABLED]); if(!empty($writeOffUser)){ $store_name = Store::find()->where(['id'=>$writeOffUser['store_id']])->select('store_name')->scalar() ?? ''; } $temp['store_name'] = $store_name; $isSetHeader && array_push($exportheader, '所属门店'); } if(in_array('change_num', $fields) && isset($l['change_type'])) { $temp['change_num'] = $l['change_type'] == 'add' ? '+'. $l['change_num'] : '-' . $l['change_num']; $isSetHeader && array_push($exportheader, '佣金'); } if(in_array('capital_type', $fields)) { $source_text = WriteOffEnum::getTypeMap($l['capital_type']); $temp['source_text'] =$source_text; $isSetHeader && array_push($exportheader, '奖励类型'); } if(in_array('order_no', $fields)) { $temp['order_no'] = $l['order_no']; $isSetHeader && array_push($exportheader, '订单编号'); } if(in_array('created_at', $fields)) { $temp['created_at'] = date('Y-m-d H:i:s', $l['created_at']); $isSetHeader && array_push($exportheader, '创建时间'); } $list[] = $temp; $isSetHeader = false; } $i++; } if (!empty($list)) { $csv = new CsvTool(); $csv->filename = $filename; $csv->file_dirname = DownloadEnum::getTypeStorageDirMap($type); $csv->export_mode = CsvTool::EXPORT_MODE_ASYNC; $csv->header = $exportheader; $csv->data = $list; $csv->export(); $csv->updateDown($download, $params['mall_id']); } } catch (\Exception $e) { $download->status = 3; $res = $download->save(); var_dump($e->getMessage().$e->getFile().$e->getLine()); return $e->getMessage(); } } } }