32], [['order_source'], 'string'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'mall_id' => '商城ID', 'user_id' => '经销商用户ID', 'agent_id' => '经销商ID', 'order_id' => '订单ID', 'level' => '经销商等级', 'order_price' => '订单金额', 'commission' => '佣金金额', 'reward_type' => '奖励类型', 'order_source' => '来源,order:主订单表', 'status' => '状态[-1删除; 0 禁用; 1正常]', 'created_at' => '创建时间', 'updated_at' => '更新时间', ]; } public function getUser(){ return $this->hasOne(User::class, ['id' => 'user_id']); } public function getAgentLevel(){ return $this->hasOne(AgentLevel::class, ['level' => 'level','mall_id'=>'mall_id'])->andWhere(['<>','status',StatusEnum::DELETE]); } /** * 导出字段 */ public static function exportFieldsList($field = null) { $fields = [ 'user_id' => '用户ID', 'nickname' => '昵称', 'mobile' => '手机号', 'created_at' => '时间', 'commission' => '累计佣金', 'level' => '经销商等级', 'order_no' => '订单号', 'order_price' => '订单金额', 'goods_name' => '商品名称' ]; return $fields; $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 fieldsList($field = null) { $fields = [ 'user_id' => '用户ID', 'nickname' => '昵称', 'mobile' => '手机号', 'created_at' => '时间', 'commission' => '累计佣金', 'level' => '经销商等级', 'order_no' => '订单号', 'order_price' => '订单金额', 'goods_name' => '商品名称' ]; if ($field === null) return $fields; $temp = []; foreach ($field as $val) { if (isset($fields[$val])) $temp[$val] = $fields[$val]; } return $temp; } /** * @name: * @msg: 处理导出数据,这个方法是异步队列处理时使用的,请别修改 * @param {array} $data * @return bool */ public static function exportHandle(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 = $params['fields']; $fields_arr = self::fieldsList(); $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; $model = self::find(); $model->where(['mall_id' => $params['mall_id']]); $model->andWhere(['>=', 'status', StatusEnum::DISABLED]); $user_id_arr = []; //拼接查询条件 if (!empty($params['level'])) $model->andWhere(['=', 'level', $params['level']]); if (!empty($params['keyword'])) { $condition['where'] = [[ 'or', ['like', 'nickname', $params['keyword']], ['like', 'mobile', $params['keyword']], ['id' => $params['keyword']] ]]; $user_list = User::lists($condition); $user_id_arr = array_column($user_list, 'id'); } if ($user_id_arr) { $model->andWhere(['in', 'user_id', $user_id_arr]); } if ($params['date_start']) { $model->andWhere(['>=', 'created_at', $params['date_start']]); } if ($params['date_end']) { $model->andWhere(['<=', 'created_at', $params['date_end']]); } if ($params['order_no']) { $order_list = Order::lists([ 'where' => [ ['mall_id' => $params['mall_id']], ['like', 'order_no', $params['order_no']] ], 'select' => 'id', ]); $model->andWhere(['order_id' => array_column($order_list, 'id') ?? []]); } $model->with(['user', 'agentLevel' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }]); //遍历组装数据 foreach ($model->asArray()->batch() as $list) { $order_detail_list = OrderDetail::lists([ 'where' => [ ['mall_id' => $params['mall_id']], ['order_id' => array_column($list, 'order_id') ?? []] ], 'select' => 'id, goods_name, order_id', 'index' => 'order_id', 'with' => [ 'order' => function ($query) { return $query->select('id, order_no'); } ] ]); //查询上级昵称数组 $csv->data = array_map(function ($agent) use ($fields, $order_detail_list) { $row = []; //遍历所选字段 foreach ($fields as $field) { if (in_array($field, ['created_at'])) { $row[] = !empty($agent[$field]) ? date('Y-m-d H:i:s', $agent[$field]) : ''; } elseif (in_array($field, ['nickname', 'mobile'])) { $row[] = !empty($agent['user'][$field]) ? $agent['user'][$field] : ''; } elseif (in_array($field, ['level'])) { $row[] = !empty($agent['agentLevel']['name']) ? $agent['agentLevel']['name'] : ''; } elseif (in_array($field, ['order_no'])) { $row[] = isset($order_detail_list[$agent['order_id']]) ? $order_detail_list[$agent['order_id']]['order']['order_no'] : ''; } elseif (in_array($field, ['goods_name'])) { $row[] = isset($order_detail_list[$agent['order_id']]) ? $order_detail_list[$agent['order_id']]['goods_name'] : ''; } else { $row[] = !empty($agent[$field]) ? $agent[$field] : ''; } } return $row; }, $list); $csv->export(); } $csv->updateDown($download, $params['mall_id']); return true; } catch (\Exception $e) { $download->status = 3; $res = $download->save(); var_dump($e->getMessage()); self::setStaticError($e->getMessage()); return false; } } } /** * @desc:保存数据 * @Author: hua * @Date: 2021/10/23 * @Time: 17:23 * @Copyright: copyright (c) 2021 广东七件事集团 * @param array $params * @return Agent|false|null */ public static function setData(array $params) { try { if(!empty($params['id'])){ $model = self::findOne(['mall_id' => $params['mall_id'], 'id' => $params['id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]); if (empty($model)) throw new \Exception('服务不存在或已删除'); }else{ $model = new self(); $model->loadDefaultValues(); } if (!$model->load($params, '')) throw new \Exception($model->getErrorMessage()); if (!$model->save()) throw new \Exception($model->getErrorMessage()); return $model; } catch (\Exception $e) { self::$static_error = $e->getMessage(); return false; } } }