'ID', 'mall_id' => '商城ID', 'store_id' => '门店、多商户的ID', 'store_type' => '类型:1门店,2多商户', 'store_user_id' => '店主、商户user_id', 'business_user_id' => '招商员user_id', 'history_income' => '累计收入', 'history_earn' => '累计利润', 'status' => '状态:-1删除,0禁用,1启用', 'store_created_at' => '门店创建时间', 'created_at' => '创建时间', 'updated_at' => '更新时间', ]; } /** * 数据设置 */ public static function setData(array $params) { try{ if (!isset($params['mall_id']) || empty($params['mall_id'])) throw new Exception('缺少商城ID'); if (isset($params['store_id']) && !empty($params['store_id'])) { $model = self::findOne(['mall_id' => $params['mall_id'], 'store_id' => $params['store_id'], 'store_type' => $params['store_type'], 'status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]); if ($model) { if (isset($params['history_income'])) { $model->history_income += $params['history_income']; unset($params['history_income']); } if (isset($params['history_earn'])) { $model->history_earn += $params['history_earn']; unset($params['history_earn']); } } } if (!isset($model) || empty($model)) { $model = new self(); $model->loadDefaultValues(); $model->mall_id = $params['mall_id']; $model->status = StatusEnum::ENABLED; } if (!$model->load($params,'') || !$model->save()) throw new Exception($model->getErrorMessage()); return $model; }catch(Exception $e){ self::setStaticError($e->getMessage()); return false; } } /** * 门店店主 * @return \yii\db\ActiveQuery */ public function getStoreUser() { return $this->hasOne(User::class, ['id' => 'store_user_id'])->select('id,mobile,nickname,avatar_url,parent_id,username'); } /** * 招商员 * @return \yii\db\ActiveQuery */ public function getBusinessUser() { return $this->hasOne(User::class, ['id' => 'business_user_id'])->select('id,mobile,nickname,avatar_url,parent_id,username'); } /** * 处理门店列表 */ public static function dealStoreList(array $list, $mall_id) { $store_ids = $mch_ids = []; foreach ($list as $item) { if ($item['store_type'] == BusinessBonusEnums::STORE_TYPE_STORE) { $store_ids[] = $item['store_id']; } else { $mch_ids[] = $item['store_id']; } } $store_array = $mch_array = []; if ($store_ids) { $store_list = Store::find() ->select('id,user_id,store_name,expire_time,user_nums,created_at,province_id,city_id,district_id,address') ->andWhere(['>=', 'status', StatusEnum::DISABLED]) ->andWhere(['in', 'id', $store_ids]) ->andWhere(['=', 'mall_id', $mall_id]) ->asArray() ->all(); $store_array = array_column($store_list, null, 'id'); } if ($mch_ids) { $mch_list = Mch::find() ->select('id,user_id,store_name,expire_time,user_nums,created_at,province_id,city_id,district_id,address') ->andWhere(['>=', 'status', StatusEnum::DISABLED]) ->andWhere(['in', 'id', $mch_ids]) ->andWhere(['=', 'mall_id', $mall_id]) ->asArray() ->all(); $mch_array = array_column($mch_list, null, 'id'); } foreach ($list as $key => $val) { if ($val['store_type'] == BusinessBonusEnums::STORE_TYPE_STORE) { $val['store_info'] = $store_array[$val['store_id']] ?? []; } else if ($val['store_type'] == BusinessBonusEnums::STORE_TYPE_MCH) { $val['store_info'] = $mch_array[$val['store_id']] ?? []; } $list[$key] = $val; } return $list; } /** * 可导出的字段 * @param null $field * @return array */ public static function fieldsList($field = null, $store_type) { if ($store_type == BusinessBonusEnums::FROM_TYPE_STORE) { $store_name = '门店'; $store_user_nums = '门店会员总数'; } else { $store_name = '商户'; $store_user_nums = '商户会员总数'; } $fields = [ 'id' => '序号', 'store_name' => $store_name, 'store_user_id' => '店长ID', 'store_user_nickname' => '店长昵称', 'store_user_mobile' => '店长手机号', 'business_user_id' => '招商员ID', 'business_user_nickname' => '招商员昵称', 'business_user_mobile' => '招商员手机号', 'history_income' => '累计收入', 'history_earn' => '累计利润', 'store_user_nums' => $store_user_nums, 'expire_time' => '有效期', 'store_created_at' => '创建时间', ]; if ($field === null) return $fields; $temp = []; foreach ($field as $val) { $temp[$val] = $fields[$val] ?? $val; } return $temp; } /** * 导出处理手柄 */ 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); $condition = $params['condition']; $list = self::lists($condition, true); $list = self::dealStoreList($list, $params['mall_id']); $filename = $download->name; $type = $download->type; $fields = $params['fields']; $fields_arr = self::fieldsList(null, $params['store_type']); $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; $csv_data = []; foreach ($list as $data) { $row = []; foreach ($fields as $field) { switch ($field) { case 'store_name': $row[] = $data['store_info']['store_name'] ?? ''; break; case 'store_user_mobile': $row[] = $data['storeUser']['mobile'] ?? ''; break; case 'store_user_nickname': $row[] = $data['storeUser']['nickname'] ?? ''; break; case 'business_user_nickname': $row[] = $data['businessUser']['nickname'] ?? ''; break; case 'business_user_mobile': $row[] = $data['businessUser']['mobile'] ?? ''; break; case 'store_user_nums': $row[] = $data['store_info']['user_nums'] ?? ''; break; case 'expire_time': $time = $data['store_info']['expire_time'] ?? ''; $row[] = $time ? date('Y-m-d H:i:s', $time) : ''; break; case 'store_created_at': $time = $data['store_created_at'] ?? ''; $row[] = $time ? date('Y-m-d H:i:s', $time) : ''; break; default: $row[] = $data[$field] ?? ''; break; } } $csv_data[] = $row; } $csv->data = $csv_data; $csv->export(); $csv->updateDown($download, $params['mall_id']); return true; } catch (Exception $e) { $download->status = 3; $download->save(); self::setStaticError($e->getMessage()); return $e->getMessage(); } } } }