122 lines
4.0 KiB
TypeScript
122 lines
4.0 KiB
TypeScript
/**
|
|
* 预种计划数据代理服务
|
|
* [2026-02-27] 新增:通过内部 HTTP 调用 planting-service 获取预种管理数据
|
|
*
|
|
* === 架构 ===
|
|
* admin-web → admin-service (本服务) → planting-service /internal/pre-planting/admin/*
|
|
* 复用现有 ContractService 的 axios 代理模式
|
|
*/
|
|
|
|
import { Injectable, Logger } from '@nestjs/common';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import axios, { AxiosInstance } from 'axios';
|
|
|
|
@Injectable()
|
|
export class PrePlantingProxyService {
|
|
private readonly logger = new Logger(PrePlantingProxyService.name);
|
|
private readonly httpClient: AxiosInstance;
|
|
|
|
constructor(private readonly configService: ConfigService) {
|
|
const plantingServiceUrl = this.configService.get<string>(
|
|
'PLANTING_SERVICE_URL',
|
|
'http://rwa-planting-service:3003',
|
|
);
|
|
|
|
this.httpClient = axios.create({
|
|
baseURL: plantingServiceUrl,
|
|
timeout: 30000,
|
|
});
|
|
|
|
this.logger.log(
|
|
`PrePlantingProxyService initialized, planting-service URL: ${plantingServiceUrl}`,
|
|
);
|
|
}
|
|
|
|
async getOrders(params: {
|
|
page?: number;
|
|
pageSize?: number;
|
|
keyword?: string;
|
|
status?: string;
|
|
}) {
|
|
try {
|
|
const qp = new URLSearchParams();
|
|
if (params.page) qp.append('page', params.page.toString());
|
|
if (params.pageSize) qp.append('pageSize', params.pageSize.toString());
|
|
if (params.keyword) qp.append('keyword', params.keyword);
|
|
if (params.status) qp.append('status', params.status);
|
|
|
|
const url = `/api/v1/internal/pre-planting/admin/orders?${qp.toString()}`;
|
|
this.logger.debug(`[getOrders] 请求: ${url}`);
|
|
const response = await this.httpClient.get(url);
|
|
return response.data;
|
|
} catch (error) {
|
|
this.logger.error(`[getOrders] 失败: ${error.message}`);
|
|
return { items: [], total: 0, page: params.page ?? 1, pageSize: params.pageSize ?? 20 };
|
|
}
|
|
}
|
|
|
|
async getPositions(params: {
|
|
page?: number;
|
|
pageSize?: number;
|
|
keyword?: string;
|
|
}) {
|
|
try {
|
|
const qp = new URLSearchParams();
|
|
if (params.page) qp.append('page', params.page.toString());
|
|
if (params.pageSize) qp.append('pageSize', params.pageSize.toString());
|
|
if (params.keyword) qp.append('keyword', params.keyword);
|
|
|
|
const url = `/api/v1/internal/pre-planting/admin/positions?${qp.toString()}`;
|
|
this.logger.debug(`[getPositions] 请求: ${url}`);
|
|
const response = await this.httpClient.get(url);
|
|
return response.data;
|
|
} catch (error) {
|
|
this.logger.error(`[getPositions] 失败: ${error.message}`);
|
|
return { items: [], total: 0, page: params.page ?? 1, pageSize: params.pageSize ?? 20 };
|
|
}
|
|
}
|
|
|
|
async getMerges(params: {
|
|
page?: number;
|
|
pageSize?: number;
|
|
keyword?: string;
|
|
status?: string;
|
|
}) {
|
|
try {
|
|
const qp = new URLSearchParams();
|
|
if (params.page) qp.append('page', params.page.toString());
|
|
if (params.pageSize) qp.append('pageSize', params.pageSize.toString());
|
|
if (params.keyword) qp.append('keyword', params.keyword);
|
|
if (params.status) qp.append('status', params.status);
|
|
|
|
const url = `/api/v1/internal/pre-planting/admin/merges?${qp.toString()}`;
|
|
this.logger.debug(`[getMerges] 请求: ${url}`);
|
|
const response = await this.httpClient.get(url);
|
|
return response.data;
|
|
} catch (error) {
|
|
this.logger.error(`[getMerges] 失败: ${error.message}`);
|
|
return { items: [], total: 0, page: params.page ?? 1, pageSize: params.pageSize ?? 20 };
|
|
}
|
|
}
|
|
|
|
async getStats() {
|
|
try {
|
|
const url = '/api/v1/internal/pre-planting/admin/stats';
|
|
this.logger.debug(`[getStats] 请求: ${url}`);
|
|
const response = await this.httpClient.get(url);
|
|
return response.data;
|
|
} catch (error) {
|
|
this.logger.error(`[getStats] 失败: ${error.message}`);
|
|
return {
|
|
totalOrders: 0,
|
|
totalPortions: 0,
|
|
totalAmount: 0,
|
|
totalMerges: 0,
|
|
totalTreesMerged: 0,
|
|
totalUsers: 0,
|
|
pendingContracts: 0,
|
|
};
|
|
}
|
|
}
|
|
}
|