feat(lzwcai_mcpskills_analyzeOrder): 添加MCP技能分析订单模块
- 创建基于MCP协议的SQL查询执行服务器 - 实现从businessQueries.json动态生成查询工具功能 - 支持中文工具名称自动转换为拼音 - 配置详细操作日志记录(仅输出到文件,不干扰MCP通信) - 添加订单延迟预警分析、工单进度跟踪、供应链风险预警等6个业务查询模板 - 提供完整的安装、使用和开发文档
This commit is contained in:
138
lzwcai_mcpskills_analyzeOrder/README.md
Normal file
138
lzwcai_mcpskills_analyzeOrder/README.md
Normal file
@@ -0,0 +1,138 @@
|
||||
# lzwcai-mcpskills-analyzeOrder
|
||||
|
||||
一个基于 MCP (Model Context Protocol) 的 SQL 查询执行服务器,支持从 JSON 配置文件动态生成查询工具。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- 🚀 动态工具生成:从 `businessQueries.json` 自动生成 MCP 工具
|
||||
- 🔧 灵活配置:支持自定义业务查询和参数验证
|
||||
- 📝 完整日志:详细的操作日志记录
|
||||
- 🌐 中文支持:工具名称自动转换为拼音
|
||||
|
||||
## 安装
|
||||
|
||||
### 使用 pip 安装
|
||||
|
||||
```bash
|
||||
pip install lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
### 从源码安装
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd lzwcai_mcp_sqlexecutor
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
### 使用 uv 安装(推荐)
|
||||
|
||||
```bash
|
||||
uv pip install lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 命令行启动
|
||||
|
||||
安装后,可以直接通过命令启动:
|
||||
|
||||
```bash
|
||||
lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
### 作为 Python 模块运行
|
||||
|
||||
```bash
|
||||
python -m lzwcai_mcp_sqlexecutor.main
|
||||
```
|
||||
|
||||
### 配置到 MCP 客户端
|
||||
|
||||
在你的 MCP 客户端配置文件中添加:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"lzwcai-sqlexecutor": {
|
||||
"command": "lzwcai-mcpskills-analyzeOrder"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### businessQueries.json
|
||||
|
||||
在 `businessQueries.json` 中定义你的业务查询:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "query-001",
|
||||
"businessName": "用户订单查询",
|
||||
"businessDescription": "根据用户ID查询订单信息",
|
||||
"sqlTemplate": "SELECT * FROM orders WHERE user_id = {{userId}}",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"required": ["userId"],
|
||||
"properties": {
|
||||
"userId": {
|
||||
"type": "integer",
|
||||
"description": "用户的唯一标识符",
|
||||
"examples": [10086]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 开发
|
||||
|
||||
### 依赖项
|
||||
|
||||
- Python >= 3.13
|
||||
- httpx >= 0.28.1
|
||||
- mcp[cli] >= 1.10.1
|
||||
- pypinyin >= 0.53.0
|
||||
|
||||
### 本地开发
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone <repository-url>
|
||||
cd lzwcai_mcp_sqlexecutor
|
||||
|
||||
# 安装开发依赖
|
||||
pip install -e .
|
||||
|
||||
# 运行服务器
|
||||
python -m lzwcai_mcp_sqlexecutor.main
|
||||
```
|
||||
|
||||
## 构建与发布
|
||||
|
||||
### 使用 build 构建
|
||||
|
||||
```bash
|
||||
pip install build
|
||||
python -m build
|
||||
```
|
||||
|
||||
### 发布到 PyPI
|
||||
|
||||
```bash
|
||||
pip install twine
|
||||
twine upload dist/*
|
||||
```
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT License
|
||||
|
||||
## 作者
|
||||
|
||||
lzwcai
|
||||
|
||||
10
lzwcai_mcpskills_analyzeOrder/lzwcai_mcpskills_analyzeOrder/.gitignore
vendored
Normal file
10
lzwcai_mcpskills_analyzeOrder/lzwcai_mcpskills_analyzeOrder/.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# Python-generated files
|
||||
__pycache__/
|
||||
*.py[oc]
|
||||
build/
|
||||
dist/
|
||||
wheels/
|
||||
*.egg-info
|
||||
|
||||
# Virtual environments
|
||||
.venv
|
||||
@@ -0,0 +1 @@
|
||||
3.13
|
||||
@@ -0,0 +1,154 @@
|
||||
# lzwcai-mcpskills-analyzeWorkOrder
|
||||
|
||||
一个基于 MCP (Model Context Protocol) 的 SQL 查询执行服务器,支持从 JSON 配置文件动态生成查询工具。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- 🚀 动态工具生成:从 `businessQueries.json` 自动生成 MCP 工具
|
||||
- 🔧 灵活配置:支持自定义业务查询和参数验证
|
||||
- 📝 完整日志:详细的操作日志记录(仅输出到文件,不干扰MCP通信)
|
||||
- 🌐 中文支持:工具名称自动转换为拼音
|
||||
|
||||
## 安装
|
||||
|
||||
### 使用 pip 安装
|
||||
|
||||
```bash
|
||||
pip install lzwcai-mcpskills-analyzeWorkOrder
|
||||
```
|
||||
|
||||
### 从源码安装
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd lzwcai_mcp_sqlexecutor
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
### 使用 uv 安装(推荐)
|
||||
|
||||
```bash
|
||||
uv pip install lzwcai-mcpskills-analyzeWorkOrder
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 命令行启动
|
||||
|
||||
安装后,可以直接通过命令启动:
|
||||
|
||||
```bash
|
||||
lzwcai-mcpskills-analyzeWorkOrder
|
||||
```
|
||||
|
||||
### 作为 Python 模块运行
|
||||
|
||||
```bash
|
||||
python -m lzwcai_mcp_sqlexecutor.main
|
||||
```
|
||||
|
||||
### 配置到 MCP 客户端
|
||||
|
||||
在你的 MCP 客户端配置文件中添加:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"lzwcai-sqlexecutor": {
|
||||
"command": "lzwcai-mcpskills-analyzeWorkOrder"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### businessQueries.json
|
||||
|
||||
在 `businessQueries.json` 中定义你的业务查询:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "query-001",
|
||||
"businessName": "用户订单查询",
|
||||
"businessDescription": "根据用户ID查询订单信息",
|
||||
"sqlTemplate": "SELECT * FROM orders WHERE user_id = {{userId}}",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"required": ["userId"],
|
||||
"properties": {
|
||||
"userId": {
|
||||
"type": "integer",
|
||||
"description": "用户的唯一标识符",
|
||||
"examples": [10086]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 开发
|
||||
|
||||
### 依赖项
|
||||
|
||||
- Python >= 3.13
|
||||
- httpx >= 0.28.1
|
||||
- mcp[cli] >= 1.10.1
|
||||
- pypinyin >= 0.53.0
|
||||
|
||||
### 本地开发
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
git clone <repository-url>
|
||||
cd lzwcai_mcp_sqlexecutor
|
||||
|
||||
# 安装开发依赖
|
||||
pip install -e .
|
||||
|
||||
# 运行服务器
|
||||
python -m lzwcai_mcp_sqlexecutor.main
|
||||
```
|
||||
|
||||
## 构建与发布
|
||||
|
||||
### 使用 build 构建
|
||||
|
||||
```bash
|
||||
pip install build
|
||||
python -m build
|
||||
```
|
||||
|
||||
### 发布到 PyPI
|
||||
|
||||
```bash
|
||||
pip install twine
|
||||
twine upload dist/*
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### MCP Inspector 显示 JSON 解析错误
|
||||
|
||||
如果在使用 MCP Inspector 测试时遇到 `SyntaxError: Unexpected non-whitespace character after JSON` 错误,这是因为:
|
||||
|
||||
1. **原因**:MCP 协议使用 stdio(标准输入输出)进行 JSON-RPC 通信,任何输出到 stdout 的内容(如 print 语句或控制台日志)都会破坏 JSON 格式。
|
||||
|
||||
2. **解决方案**:本服务器已将所有日志输出配置为仅写入文件(位于 `logs/` 目录),不输出到控制台。日志文件包括:
|
||||
- `lzwcai_mcp_sqlexecutor.log` - 主日志文件
|
||||
- `lzwcai_mcp_sqlexecutor_error.log` - 错误日志
|
||||
- `lzwcai_mcp_sqlexecutor_daily.log` - 按日期滚动的日志
|
||||
- `mcp_services.log` - MCP 服务专用日志
|
||||
|
||||
3. **查看日志**:如果需要调试,请查看 `logs/` 目录下的日志文件。
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT License
|
||||
|
||||
## 作者
|
||||
|
||||
lzwcai
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
"""
|
||||
lzwcai-mcpskills-analyzeOrder - MCP server for executing business SQL queries
|
||||
"""
|
||||
|
||||
__version__ = "0.1.2"
|
||||
__author__ = "lzwcai"
|
||||
|
||||
__all__ = []
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,71 @@
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:362] - 开始运行 MCP SQL Executor 服务器
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:313] - ============================================================
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:314] - 正在启动 MCP 服务器: lzwcai-mcpskills-analyzeOrder
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:315] - 版本: 0.1.0
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:316] - ============================================================
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:320] - 环境配置 - Database ID: 19
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:321] - 环境配置 - Datasource ID: 19
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:322] - 环境配置 - Skill ID:
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:323] - 环境配置 - Backend Base URL: http://192.168.11.24:8088
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:324] - ============================================================
|
||||
2026-01-08 00:15:16 - mcp_services - INFO - [main.py:329] - MCP 服务器已启动,等待客户端连接...
|
||||
2026-01-08 00:15:17 - mcp_services - INFO - [main.py:156] - 收到列出工具请求
|
||||
2026-01-08 00:15:17 - mcp_services - INFO - [main.py:119] - 初始化查询配置(数据源: local)...
|
||||
2026-01-08 00:15:17 - mcp_services - INFO - [main.py:55] - 成功加载 6 个业务查询配置
|
||||
2026-01-08 00:15:17 - mcp_services - INFO - [main.py:123] - 本地配置: 6 条
|
||||
2026-01-08 00:15:17 - mcp_services - INFO - [main.py:165] - 成功生成 6 个 MCP 工具
|
||||
2026-01-08 00:15:19 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: OrderDelayWarningAnalysis
|
||||
2026-01-08 00:15:19 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:15:19 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:15:27 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: WorkOrderProgressAndAnomalyNodes
|
||||
2026-01-08 00:15:27 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:15:28 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:15:37 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: OnePageDecisionBrief
|
||||
2026-01-08 00:15:37 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:15:38 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:15:58 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: EfficiencyOutputLossDashboard
|
||||
2026-01-08 00:15:58 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:15:59 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:16:07 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: SupplyChainRiskWarning
|
||||
2026-01-08 00:16:07 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:16:07 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:16:13 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: WorkOrderProgressAndAnomalyNodes
|
||||
2026-01-08 00:16:13 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:16:13 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:362] - 开始运行 MCP SQL Executor 服务器
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:313] - ============================================================
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:314] - 正在启动 MCP 服务器: lzwcai-mcpskills-analyzeOrder
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:315] - 版本: 0.1.0
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:316] - ============================================================
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:320] - 环境配置 - Database ID: 19
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:321] - 环境配置 - Datasource ID: 19
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:322] - 环境配置 - Skill ID:
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:323] - 环境配置 - Backend Base URL: http://192.168.11.24:8088
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:324] - ============================================================
|
||||
2026-01-08 00:30:22 - mcp_services - INFO - [main.py:329] - MCP 服务器已启动,等待客户端连接...
|
||||
2026-01-08 00:30:26 - mcp_services - INFO - [main.py:156] - 收到列出工具请求
|
||||
2026-01-08 00:30:26 - mcp_services - INFO - [main.py:119] - 初始化查询配置(数据源: local)...
|
||||
2026-01-08 00:30:26 - mcp_services - INFO - [main.py:55] - 成功加载 6 个业务查询配置
|
||||
2026-01-08 00:30:26 - mcp_services - INFO - [main.py:123] - 本地配置: 6 条
|
||||
2026-01-08 00:30:26 - mcp_services - INFO - [main.py:165] - 成功生成 6 个 MCP 工具
|
||||
2026-01-08 00:30:27 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: OrderDelayWarningAnalysis
|
||||
2026-01-08 00:30:27 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:27 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:32 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: WorkOrderProgressAndAnomalyNodes
|
||||
2026-01-08 00:30:32 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:32 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:34 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: SupplyChainRiskWarning
|
||||
2026-01-08 00:30:34 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:34 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:35 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: EfficiencyOutputLossDashboard
|
||||
2026-01-08 00:30:35 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:35 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:37 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: OnePageDecisionBrief
|
||||
2026-01-08 00:30:37 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:38 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:39 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: MetricTrendAndTurningPointWarning
|
||||
2026-01-08 00:30:39 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:39 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
2026-01-08 00:30:44 - mcp_services - INFO - [main.py:190] - 收到工具调用请求: MetricTrendAndTurningPointWarning
|
||||
2026-01-08 00:30:44 - mcp_services - INFO - [main.py:225] - 正在调用测试SQL API...
|
||||
2026-01-08 00:30:44 - mcp_services - INFO - [main.py:227] - 测试SQL API调用成功
|
||||
@@ -0,0 +1,373 @@
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
# 支持直接运行和模块导入两种方式
|
||||
try:
|
||||
from .utils import load_json, generate_tool_name, generate_input_schema
|
||||
from .utils import get_skill_by_id, DataSourceAPIClient, process_skill_response, test_sql_with_schema
|
||||
from .utils import get_database_id, get_datasource_id, get_skill_id, get_env_config
|
||||
from .utils.logger_config import logger_config
|
||||
except ImportError:
|
||||
from utils import load_json, generate_tool_name, generate_input_schema
|
||||
from utils import get_skill_by_id, DataSourceAPIClient, process_skill_response, test_sql_with_schema
|
||||
from utils import get_database_id, get_datasource_id, get_skill_id, get_env_config
|
||||
from utils.logger_config import logger_config
|
||||
|
||||
from mcp.server.models import InitializationOptions
|
||||
from mcp.server import NotificationOptions, Server
|
||||
import mcp.types as types
|
||||
|
||||
# 初始化 MCP 专用日志器
|
||||
mcp_logger = logger_config.setup_mcp_logging()
|
||||
|
||||
# ========== 数据源配置 ==========
|
||||
# 数据源类型常量
|
||||
DATA_SOURCE_API = "api" # 仅使用API数据
|
||||
DATA_SOURCE_LOCAL = "local" # 仅使用本地JSON数据
|
||||
DATA_SOURCE_BOTH = "both" # 合并本地和API数据
|
||||
|
||||
# 默认数据源(可修改)
|
||||
DEFAULT_DATA_SOURCE = DATA_SOURCE_LOCAL
|
||||
# ================================
|
||||
|
||||
|
||||
def get_queries():
|
||||
"""
|
||||
获取业务查询配置
|
||||
|
||||
Returns:
|
||||
list: 包含所有业务查询配置的列表
|
||||
"""
|
||||
try:
|
||||
# 获取当前文件所在目录
|
||||
current_dir = Path(__file__).parent
|
||||
|
||||
# 构建 businessQueries.json 的路径
|
||||
json_path = current_dir / "businessQueries.json"
|
||||
|
||||
mcp_logger.debug(f"正在读取业务查询配置文件: {json_path}")
|
||||
|
||||
# 使用 load_json 方法读取 JSON 文件
|
||||
queries = load_json(json_path)
|
||||
|
||||
mcp_logger.info(f"成功加载 {len(queries)} 个业务查询配置")
|
||||
|
||||
return queries
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"加载业务查询配置失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
def generate_tool_schema_from_query(query: dict) -> types.Tool:
|
||||
"""
|
||||
根据查询配置生成 MCP 工具模式
|
||||
|
||||
Args:
|
||||
query: 单个查询配置字典
|
||||
|
||||
Returns:
|
||||
types.Tool: MCP 工具对象
|
||||
"""
|
||||
try:
|
||||
# 获取参数定义并生成 inputSchema
|
||||
parameters = query.get('parameters', {})
|
||||
input_schema = generate_input_schema(parameters)
|
||||
|
||||
# 生成工具名称(格式: tool_拼音_id)
|
||||
# tool_name = generate_tool_name(query['businessName'], query['id'])
|
||||
tool_name = query['businessName']
|
||||
# 构建工具描述,包含业务名称和业务描述
|
||||
description = f"{query['businessName']}: {query['businessDescription']}"
|
||||
|
||||
mcp_logger.debug(f"生成工具模式: {tool_name} - {query['businessName']}")
|
||||
|
||||
return types.Tool(
|
||||
name=tool_name,
|
||||
description=description,
|
||||
inputSchema=input_schema
|
||||
)
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"生成工具模式失败: {query.get('id', 'unknown')}, 错误: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
# 创建 MCP 服务器实例
|
||||
server = Server("lzwcai-mcpskills-analyzeOrder")
|
||||
|
||||
# 缓存查询配置,避免重复加载
|
||||
_queries_cache = None
|
||||
|
||||
|
||||
async def get_queries_cache(source: str = None):
|
||||
"""
|
||||
获取或初始化查询配置缓存
|
||||
|
||||
Args:
|
||||
source: 数据源类型(默认使用 DEFAULT_DATA_SOURCE)
|
||||
- "api": 仅使用API数据
|
||||
- "local": 仅使用本地JSON数据
|
||||
- "both": 合并本地和API数据
|
||||
|
||||
Returns:
|
||||
查询配置列表
|
||||
"""
|
||||
global _queries_cache
|
||||
if _queries_cache is None:
|
||||
source = source or DEFAULT_DATA_SOURCE
|
||||
mcp_logger.info(f"初始化查询配置(数据源: {source})...")
|
||||
|
||||
if source == DATA_SOURCE_LOCAL:
|
||||
_queries_cache = get_queries()
|
||||
mcp_logger.info(f"本地配置: {len(_queries_cache)} 条")
|
||||
|
||||
elif source == DATA_SOURCE_API:
|
||||
try:
|
||||
_queries_cache = await call_third_party_api()
|
||||
mcp_logger.info(f"API配置: {len(_queries_cache)} 条")
|
||||
mcp_logger.info(f"API配置数组: {_queries_cache}")
|
||||
except Exception as e:
|
||||
mcp_logger.warning(f"API获取失败,降级使用本地配置: {e}")
|
||||
_queries_cache = get_queries()
|
||||
|
||||
else: # DATA_SOURCE_BOTH
|
||||
local = get_queries()
|
||||
try:
|
||||
api = await call_third_party_api()
|
||||
except Exception as e:
|
||||
mcp_logger.warning(f"API获取失败: {e}")
|
||||
api = []
|
||||
_queries_cache = local + api
|
||||
mcp_logger.info(f"配置总数: {len(_queries_cache)} 条(本地{len(local)}+API{len(api)})")
|
||||
|
||||
return _queries_cache
|
||||
|
||||
|
||||
@server.list_tools()
|
||||
async def handle_list_tools() -> list[types.Tool]:
|
||||
"""
|
||||
列出所有动态生成的 MCP 工具
|
||||
|
||||
Returns:
|
||||
list[types.Tool]: 所有可用的工具列表
|
||||
"""
|
||||
try:
|
||||
mcp_logger.info("收到列出工具请求")
|
||||
|
||||
queries = await get_queries_cache()
|
||||
tools = []
|
||||
|
||||
for query in queries:
|
||||
tool = generate_tool_schema_from_query(query)
|
||||
tools.append(tool)
|
||||
|
||||
mcp_logger.info(f"成功生成 {len(tools)} 个 MCP 工具")
|
||||
mcp_logger.debug(f"工具列表: {[tool.name for tool in tools]}")
|
||||
|
||||
return tools
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"列出工具失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
@server.call_tool()
|
||||
async def handle_call_tool(
|
||||
name: str,
|
||||
arguments: dict[str, Any] | None
|
||||
) -> list[types.TextContent]:
|
||||
"""
|
||||
处理工具调用请求
|
||||
|
||||
Args:
|
||||
name: 工具名称
|
||||
arguments: 工具参数
|
||||
|
||||
Returns:
|
||||
list[types.TextContent]: 工具执行结果(返回参数和对应的接口配置)
|
||||
"""
|
||||
try:
|
||||
mcp_logger.info(f"收到工具调用请求: {name}")
|
||||
mcp_logger.debug(f"工具参数: {arguments}")
|
||||
|
||||
# 获取查询配置缓存
|
||||
queries = await get_queries_cache()
|
||||
|
||||
# 根据工具名称查找对应的 item(接口配置)
|
||||
tool_item = None
|
||||
for query in queries:
|
||||
# tool_name = generate_tool_name(query['businessName'], query['id'])
|
||||
tool_name = query['businessName']
|
||||
if tool_name == name:
|
||||
tool_item = query
|
||||
break
|
||||
|
||||
# 构建返回结果
|
||||
import json
|
||||
|
||||
if tool_item:
|
||||
request_data = {
|
||||
"datasourceId": get_datasource_id(),
|
||||
"businessName": tool_item.get("businessName"),
|
||||
"businessDescription": tool_item.get("businessDescription"),
|
||||
"sqlTemplate": tool_item.get("sqlTemplate"),
|
||||
"parameters": tool_item.get("parameters"),
|
||||
"testParams": arguments or {}
|
||||
}
|
||||
|
||||
# 如果 arguments 中有 targetDatabaseName 且有值,添加到 request_data
|
||||
if arguments and arguments.get("targetDatabaseName"):
|
||||
request_data["targetDatabaseName"] = arguments["targetDatabaseName"]
|
||||
mcp_logger.debug(f"添加目标数据库名称: {arguments['targetDatabaseName']}")
|
||||
|
||||
# 调用测试SQL API
|
||||
try:
|
||||
mcp_logger.info("正在调用测试SQL API...")
|
||||
api_response = test_sql_with_schema(request_data)
|
||||
mcp_logger.info("测试SQL API调用成功")
|
||||
|
||||
# 返回包含 data 字段的结果
|
||||
result = {
|
||||
"success": True,
|
||||
"data": api_response
|
||||
}
|
||||
result_text = json.dumps(result, ensure_ascii=False, indent=2)
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"调用测试SQL API失败: {str(e)}"
|
||||
mcp_logger.error(error_msg, exc_info=True)
|
||||
result = {
|
||||
"success": False,
|
||||
"error": error_msg,
|
||||
"data": None
|
||||
}
|
||||
result_text = json.dumps(result, ensure_ascii=False, indent=2)
|
||||
else:
|
||||
error_msg = f"未找到工具 {name} 对应的配置"
|
||||
result = {
|
||||
"success": False,
|
||||
"error": error_msg,
|
||||
"data": None
|
||||
}
|
||||
result_text = json.dumps(result, ensure_ascii=False, indent=2)
|
||||
|
||||
mcp_logger.debug(f"工具调用结果: {result_text}")
|
||||
|
||||
return [
|
||||
types.TextContent(
|
||||
type="text",
|
||||
text=result_text
|
||||
)
|
||||
]
|
||||
except Exception as e:
|
||||
error_msg = f"工具调用失败: {name}, 错误: {e}"
|
||||
mcp_logger.error(error_msg, exc_info=True)
|
||||
return [
|
||||
types.TextContent(
|
||||
type="text",
|
||||
text=f"错误: {error_msg}"
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
async def call_third_party_api(skill_id: str = None) -> list:
|
||||
"""
|
||||
调用第三方API获取技能信息并返回处理后的数据
|
||||
|
||||
Args:
|
||||
skill_id: 技能ID(默认从环境变量 SKILL_ID 读取,如果未设置则使用 1981000305474482178)
|
||||
|
||||
Returns:
|
||||
处理后的查询配置列表(businessQueries格式)
|
||||
|
||||
Example:
|
||||
queries = await call_third_party_api()
|
||||
# 返回: [{"id": "...", "businessName": "...", ...}, ...]
|
||||
"""
|
||||
try:
|
||||
# 如果没有传入 skill_id,则从环境变量读取
|
||||
if skill_id is None:
|
||||
skill_id = get_skill_id()
|
||||
|
||||
mcp_logger.info(f"调用第三方API,skill_id: {skill_id}")
|
||||
|
||||
# 获取原始数据
|
||||
raw_result = get_skill_by_id(skill_id)
|
||||
|
||||
mcp_logger.info(f"成功{raw_result}")
|
||||
|
||||
# 处理并返回
|
||||
processed_queries = process_skill_response(raw_result)
|
||||
|
||||
mcp_logger.info(f"成功获取并处理 {len(processed_queries)} 条数据")
|
||||
return processed_queries
|
||||
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"API调用失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
async def async_main():
|
||||
"""MCP 服务器异步主函数"""
|
||||
try:
|
||||
mcp_logger.info("=" * 60)
|
||||
mcp_logger.info("正在启动 MCP 服务器: lzwcai-mcpskills-analyzeOrder")
|
||||
mcp_logger.info("版本: 0.1.0")
|
||||
mcp_logger.info("=" * 60)
|
||||
|
||||
# 输出环境配置信息
|
||||
env_config = get_env_config()
|
||||
mcp_logger.info(f"环境配置 - Database ID: {env_config['database_id']}")
|
||||
mcp_logger.info(f"环境配置 - Datasource ID: {env_config['datasource_id']}")
|
||||
mcp_logger.info(f"环境配置 - Skill ID: {env_config['skill_id']}")
|
||||
mcp_logger.info(f"环境配置 - Backend Base URL: {env_config['backend_base_url']}")
|
||||
mcp_logger.info("=" * 60)
|
||||
|
||||
from mcp.server.stdio import stdio_server
|
||||
|
||||
async with stdio_server() as (read_stream, write_stream):
|
||||
mcp_logger.info("MCP 服务器已启动,等待客户端连接...")
|
||||
|
||||
await server.run(
|
||||
read_stream,
|
||||
write_stream,
|
||||
InitializationOptions(
|
||||
server_name="lzwcai-mcpskills-analyzeOrder",
|
||||
server_version="0.1.0",
|
||||
capabilities=server.get_capabilities(
|
||||
notification_options=NotificationOptions(),
|
||||
experimental_capabilities={},
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
mcp_logger.info("MCP 服务器已关闭")
|
||||
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"MCP 服务器运行失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
def main():
|
||||
"""入口点函数(用于 console_scripts)"""
|
||||
try:
|
||||
# 初始化系统日志
|
||||
# MCP协议使用stdio通信,必须禁用控制台输出以避免干扰JSON-RPC通信
|
||||
logger_config.setup_logging(
|
||||
app_name="lzwcai_mcp_sqlexecutor",
|
||||
log_level=logging.INFO,
|
||||
console_output=False # 禁用控制台输出
|
||||
)
|
||||
|
||||
mcp_logger.info("开始运行 MCP SQL Executor 服务器")
|
||||
asyncio.run(async_main())
|
||||
|
||||
except KeyboardInterrupt:
|
||||
mcp_logger.info("收到中断信号,正在关闭服务器...")
|
||||
except Exception as e:
|
||||
mcp_logger.error(f"程序运行失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,35 @@
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "lzwcai-mcpskills-analyzeWorkOrder"
|
||||
version = "0.1.10"
|
||||
description = "MCP server for executing business SQL queries with dynamic tool generation"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
license = {text = "MIT"}
|
||||
authors = [
|
||||
{name = "lzwcai", email = "your-email@example.com"},
|
||||
]
|
||||
keywords = ["mcp", "sql", "executor", "server"]
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
]
|
||||
dependencies = [
|
||||
"httpx>=0.28.1",
|
||||
"mcp[cli]>=1.10.1",
|
||||
"pypinyin>=0.53.0",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
lzwcai-mcpskills-analyzeWorkOrder = "lzwcai_mcpskills_analyzeWorkOrder.main:main"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["lzwcai_mcpskills_analyzeWorkOrder"]
|
||||
|
||||
[tool.hatch.build.targets.wheel.force-include]
|
||||
"lzwcai_mcpskills_analyzeWorkOrder/businessQueries.json" = "lzwcai_mcpskills_analyzeWorkOrder/businessQueries.json"
|
||||
@@ -0,0 +1,169 @@
|
||||
-- =====================================================
|
||||
-- 交付风险预测:延迟概率与红/黄/绿预警等级
|
||||
-- 基于历史订单的生产周期、物流延误、设备故障等特征
|
||||
-- =====================================================
|
||||
|
||||
WITH
|
||||
-- 1. 全局生产特征(汇总所有工单)
|
||||
global_production AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_wo_count,
|
||||
AVG(CASE WHEN planned_qty > 0 THEN completed_qty / planned_qty ELSE 0 END) AS avg_completion_rate,
|
||||
SUM(CASE WHEN status IN ('OPEN', 'STARTED') THEN 1 ELSE 0 END) AS pending_wo_count,
|
||||
SUM(CASE WHEN status = 'CLOSED' THEN 1 ELSE 0 END) AS closed_wo_count
|
||||
FROM fact_work_order
|
||||
),
|
||||
|
||||
-- 2. 全局质检特征
|
||||
global_quality AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_inspection_count,
|
||||
SUM(COALESCE(pass_qty, 0)) AS total_pass_qty,
|
||||
SUM(COALESCE(fail_qty, 0)) AS total_fail_qty,
|
||||
CASE WHEN SUM(COALESCE(pass_qty, 0) + COALESCE(fail_qty, 0)) > 0
|
||||
THEN SUM(COALESCE(pass_qty, 0))::FLOAT / SUM(COALESCE(pass_qty, 0) + COALESCE(fail_qty, 0))
|
||||
ELSE 1 END AS qc_pass_rate
|
||||
FROM fact_quality_inspection
|
||||
),
|
||||
|
||||
-- 3. 全局工序不良特征
|
||||
global_operation AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_task_count,
|
||||
SUM(COALESCE(good_qty, 0)) AS total_good_qty,
|
||||
SUM(COALESCE(bad_qty, 0)) AS total_bad_qty,
|
||||
CASE WHEN SUM(COALESCE(good_qty, 0) + COALESCE(bad_qty, 0)) > 0
|
||||
THEN SUM(COALESCE(bad_qty, 0))::FLOAT / SUM(COALESCE(good_qty, 0) + COALESCE(bad_qty, 0))
|
||||
ELSE 0 END AS operation_defect_rate
|
||||
FROM fact_operation_task
|
||||
),
|
||||
|
||||
-- 4. 客户级别发货统计
|
||||
customer_shipment AS (
|
||||
SELECT
|
||||
customer_id,
|
||||
COUNT(*) AS shipment_count,
|
||||
SUM(COALESCE(amount, 0)) AS total_shipment_amount
|
||||
FROM fact_sales_shipment
|
||||
GROUP BY customer_id
|
||||
),
|
||||
|
||||
-- 5. 客户级别退货统计
|
||||
customer_return AS (
|
||||
SELECT
|
||||
customer_id,
|
||||
COUNT(*) AS return_count,
|
||||
SUM(COALESCE(amount, 0)) AS total_return_amount
|
||||
FROM fact_sales_return
|
||||
GROUP BY customer_id
|
||||
),
|
||||
|
||||
-- 6. 订单风险评估
|
||||
order_risk AS (
|
||||
SELECT
|
||||
so.sales_order_id,
|
||||
so.sales_order_number,
|
||||
c.customer_name,
|
||||
so.order_date_utc,
|
||||
so.deal_amount,
|
||||
so.payment_status,
|
||||
|
||||
-- 全局生产指标
|
||||
gp.avg_completion_rate AS production_completion_rate,
|
||||
gp.pending_wo_count,
|
||||
gp.total_wo_count AS work_order_count,
|
||||
|
||||
-- 全局质检指标
|
||||
gq.qc_pass_rate,
|
||||
gq.total_fail_qty,
|
||||
|
||||
-- 全局工序指标
|
||||
go.operation_defect_rate,
|
||||
|
||||
-- 客户级别指标
|
||||
COALESCE(cs.shipment_count, 0) AS shipment_count,
|
||||
COALESCE(cr.return_count, 0) AS return_count,
|
||||
CASE WHEN COALESCE(cs.shipment_count, 0) > 0
|
||||
THEN COALESCE(cr.return_count, 0)::FLOAT / cs.shipment_count
|
||||
ELSE 0 END AS return_rate
|
||||
|
||||
FROM fact_sales_order so
|
||||
LEFT JOIN dim_customer c ON so.customer_id = c.customer_id AND c.is_current = true
|
||||
CROSS JOIN global_production gp
|
||||
CROSS JOIN global_quality gq
|
||||
CROSS JOIN global_operation go
|
||||
LEFT JOIN customer_shipment cs ON so.customer_id = cs.customer_id
|
||||
LEFT JOIN customer_return cr ON so.customer_id = cr.customer_id
|
||||
)
|
||||
|
||||
-- 7. 最终输出
|
||||
SELECT
|
||||
sales_order_id,
|
||||
sales_order_number,
|
||||
customer_name,
|
||||
order_date_utc,
|
||||
deal_amount,
|
||||
payment_status,
|
||||
|
||||
-- 风险特征
|
||||
work_order_count,
|
||||
ROUND(production_completion_rate::NUMERIC, 2) AS production_completion_rate,
|
||||
pending_wo_count,
|
||||
ROUND(qc_pass_rate::NUMERIC, 2) AS qc_pass_rate,
|
||||
ROUND(operation_defect_rate::NUMERIC, 4) AS operation_defect_rate,
|
||||
return_count,
|
||||
ROUND(return_rate::NUMERIC, 4) AS return_rate,
|
||||
|
||||
-- 延迟概率
|
||||
ROUND((
|
||||
CASE WHEN production_completion_rate < 0.3 THEN 0.30
|
||||
WHEN production_completion_rate < 0.5 THEN 0.20
|
||||
WHEN production_completion_rate < 0.8 THEN 0.10
|
||||
ELSE 0 END
|
||||
+ CASE WHEN qc_pass_rate < 0.8 THEN 0.25
|
||||
WHEN qc_pass_rate < 0.9 THEN 0.15
|
||||
WHEN qc_pass_rate < 0.95 THEN 0.08
|
||||
ELSE 0 END
|
||||
+ CASE WHEN operation_defect_rate > 0.1 THEN 0.20
|
||||
WHEN operation_defect_rate > 0.05 THEN 0.12
|
||||
WHEN operation_defect_rate > 0.02 THEN 0.05
|
||||
ELSE 0 END
|
||||
+ CASE WHEN return_rate > 0.1 THEN 0.15
|
||||
WHEN return_rate > 0.05 THEN 0.08
|
||||
WHEN return_rate > 0.02 THEN 0.03
|
||||
ELSE 0 END
|
||||
+ CASE WHEN payment_status = 'UNPAID' THEN 0.10
|
||||
WHEN payment_status = 'PARTIAL' THEN 0.05
|
||||
ELSE 0 END
|
||||
)::NUMERIC, 2) AS delay_probability,
|
||||
|
||||
-- 红/黄/绿预警
|
||||
CASE
|
||||
WHEN (
|
||||
CASE WHEN production_completion_rate < 0.3 THEN 0.30 WHEN production_completion_rate < 0.5 THEN 0.20 WHEN production_completion_rate < 0.8 THEN 0.10 ELSE 0 END
|
||||
+ CASE WHEN qc_pass_rate < 0.8 THEN 0.25 WHEN qc_pass_rate < 0.9 THEN 0.15 WHEN qc_pass_rate < 0.95 THEN 0.08 ELSE 0 END
|
||||
+ CASE WHEN operation_defect_rate > 0.1 THEN 0.20 WHEN operation_defect_rate > 0.05 THEN 0.12 WHEN operation_defect_rate > 0.02 THEN 0.05 ELSE 0 END
|
||||
+ CASE WHEN return_rate > 0.1 THEN 0.15 WHEN return_rate > 0.05 THEN 0.08 WHEN return_rate > 0.02 THEN 0.03 ELSE 0 END
|
||||
+ CASE WHEN payment_status = 'UNPAID' THEN 0.10 WHEN payment_status = 'PARTIAL' THEN 0.05 ELSE 0 END
|
||||
) >= 0.50 THEN 'RED'
|
||||
WHEN (
|
||||
CASE WHEN production_completion_rate < 0.3 THEN 0.30 WHEN production_completion_rate < 0.5 THEN 0.20 WHEN production_completion_rate < 0.8 THEN 0.10 ELSE 0 END
|
||||
+ CASE WHEN qc_pass_rate < 0.8 THEN 0.25 WHEN qc_pass_rate < 0.9 THEN 0.15 WHEN qc_pass_rate < 0.95 THEN 0.08 ELSE 0 END
|
||||
+ CASE WHEN operation_defect_rate > 0.1 THEN 0.20 WHEN operation_defect_rate > 0.05 THEN 0.12 WHEN operation_defect_rate > 0.02 THEN 0.05 ELSE 0 END
|
||||
+ CASE WHEN return_rate > 0.1 THEN 0.15 WHEN return_rate > 0.05 THEN 0.08 WHEN return_rate > 0.02 THEN 0.03 ELSE 0 END
|
||||
+ CASE WHEN payment_status = 'UNPAID' THEN 0.10 WHEN payment_status = 'PARTIAL' THEN 0.05 ELSE 0 END
|
||||
) >= 0.25 THEN 'YELLOW'
|
||||
ELSE 'GREEN'
|
||||
END AS risk_level,
|
||||
|
||||
-- 风险原因
|
||||
CONCAT_WS(' | ',
|
||||
CASE WHEN production_completion_rate < 0.5 THEN '生产进度滞后' END,
|
||||
CASE WHEN qc_pass_rate < 0.9 THEN '质检通过率低' END,
|
||||
CASE WHEN operation_defect_rate > 0.05 THEN '工序不良率高' END,
|
||||
CASE WHEN return_rate > 0.05 THEN '历史退货率高' END,
|
||||
CASE WHEN payment_status = 'UNPAID' THEN '未付款' END
|
||||
) AS risk_reasons
|
||||
|
||||
FROM order_risk
|
||||
ORDER BY delay_probability DESC, deal_amount DESC;
|
||||
@@ -0,0 +1,25 @@
|
||||
"""Utils package for lzwcai_mcp_sqlexecutor"""
|
||||
|
||||
from .json_helper import load_json
|
||||
from .name_helper import generate_tool_name
|
||||
from .schema_helper import generate_input_schema, validate_input_schema
|
||||
from .api_client import DataSourceAPIClient, get_skill_by_id, process_skill_response, test_sql_with_schema
|
||||
from .env_config import get_database_id, get_datasource_id, get_skill_id, get_backend_base_url, get_env_config, set_env_variable
|
||||
|
||||
__all__ = [
|
||||
'load_json',
|
||||
'generate_tool_name',
|
||||
'generate_input_schema',
|
||||
'validate_input_schema',
|
||||
'DataSourceAPIClient',
|
||||
'get_skill_by_id',
|
||||
'process_skill_response',
|
||||
'test_sql_with_schema',
|
||||
'get_database_id',
|
||||
'get_datasource_id',
|
||||
'get_skill_id',
|
||||
'get_backend_base_url',
|
||||
'get_env_config',
|
||||
'set_env_variable'
|
||||
]
|
||||
|
||||
@@ -0,0 +1,318 @@
|
||||
"""
|
||||
第三方API调用客户端
|
||||
用于调用外部数据源接口
|
||||
"""
|
||||
|
||||
import httpx
|
||||
import logging
|
||||
import json
|
||||
from typing import Dict, Any, Optional, List
|
||||
|
||||
# 支持直接运行和模块导入两种方式
|
||||
try:
|
||||
from .env_config import get_backend_base_url
|
||||
except ImportError:
|
||||
from env_config import get_backend_base_url
|
||||
|
||||
# 获取日志记录器
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DataSourceAPIClient:
|
||||
"""数据源API客户端"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
base_url: Optional[str] = None,
|
||||
token: Optional[str] = None
|
||||
):
|
||||
"""
|
||||
初始化API客户端
|
||||
|
||||
Args:
|
||||
base_url: API基础URL(默认从环境变量 BACKEND_BASE_URL 读取,如果未设置则使用 http://192.168.2.236:8088)
|
||||
token: 认证令牌(Bearer Token)
|
||||
"""
|
||||
# 如果没有传入 base_url,则从环境变量读取
|
||||
if base_url is None:
|
||||
base_url = get_backend_base_url()
|
||||
|
||||
self.base_url = base_url.rstrip('/')
|
||||
self.token = token or "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjJiYTk4ODllLWM2ZGItNDQ5YS1iZmFjLTQ2YzMxODFlODg5NCJ9.dvi8zm0LsWvJ_h9zD5blnHFRxa4z4_WBm1R487ekE7HlHzrN6dnvqhK8askqT5b1EcE8myHwRzLVMoI8UOjOrw"
|
||||
self.client = httpx.Client(timeout=30.0)
|
||||
|
||||
def _get_headers(self) -> Dict[str, str]:
|
||||
"""
|
||||
获取请求头
|
||||
|
||||
Returns:
|
||||
请求头字典
|
||||
"""
|
||||
return {
|
||||
'Authorization': f'Bearer {self.token}',
|
||||
}
|
||||
|
||||
def get_skill_by_id(self, skill_id: str) -> Dict[str, Any]:
|
||||
"""
|
||||
根据技能ID获取技能信息
|
||||
|
||||
Args:
|
||||
skill_id: 技能ID
|
||||
|
||||
Returns:
|
||||
API响应数据
|
||||
|
||||
Raises:
|
||||
Exception: 请求失败时抛出
|
||||
"""
|
||||
try:
|
||||
url = f"{self.base_url}/datasource/skill/getBySkillId/{skill_id}"
|
||||
|
||||
logger.info(f"正在调用API: {url}")
|
||||
logger.info(f"请求参数 - skill_id: {skill_id}")
|
||||
|
||||
response = self.client.get(
|
||||
url,
|
||||
headers=self._get_headers()
|
||||
)
|
||||
|
||||
# 检查HTTP状态码
|
||||
response.raise_for_status()
|
||||
|
||||
# 解析JSON响应
|
||||
data = response.json()
|
||||
|
||||
logger.info(f"API调用成功: {url}")
|
||||
logger.debug(f"响应数据: {data}")
|
||||
|
||||
return data
|
||||
|
||||
except httpx.TimeoutException:
|
||||
error_msg = f"API请求超时: {url}"
|
||||
logger.error(error_msg)
|
||||
raise Exception(error_msg)
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
error_msg = f"API请求失败 (HTTP {e.response.status_code}): {url}"
|
||||
logger.error(error_msg)
|
||||
logger.error(f"错误响应: {e.response.text}")
|
||||
raise Exception(error_msg)
|
||||
|
||||
except httpx.RequestError as e:
|
||||
error_msg = f"API请求异常: {url}, 错误: {str(e)}"
|
||||
logger.error(error_msg)
|
||||
raise Exception(error_msg)
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"处理API响应时出错: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
raise Exception(error_msg)
|
||||
|
||||
def test_sql_with_schema(self, request_data: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
测试SQL语句并返回执行结果
|
||||
|
||||
Args:
|
||||
request_data: 请求数据,包含以下字段:
|
||||
- datasourceId: 数据源ID
|
||||
- businessName: 业务名称
|
||||
- businessDescription: 业务描述
|
||||
- sqlTemplate: SQL模板
|
||||
- parameters: 参数定义
|
||||
- testParams: 测试参数
|
||||
|
||||
Returns:
|
||||
API响应数据
|
||||
|
||||
Raises:
|
||||
Exception: 请求失败时抛出
|
||||
"""
|
||||
try:
|
||||
url = f"{self.base_url}/datasource/sqlExecutionLog/testSqlWithSchema"
|
||||
|
||||
# 构建请求头(包含Content-Type)
|
||||
headers = self._get_headers()
|
||||
headers['Content-Type'] = 'application/json'
|
||||
headers['Accept'] = '*/*'
|
||||
|
||||
logger.info(f"正在调用测试SQL API: {url}")
|
||||
logger.info(f"请求参数: {json.dumps(request_data, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 发送POST请求
|
||||
response = self.client.post(
|
||||
url,
|
||||
headers=headers,
|
||||
json=request_data
|
||||
)
|
||||
|
||||
# 检查HTTP状态码
|
||||
response.raise_for_status()
|
||||
|
||||
# 解析JSON响应
|
||||
result = response.json()
|
||||
|
||||
logger.info(f"测试SQL API调用成功")
|
||||
logger.debug(f"响应数据: {json.dumps(result, ensure_ascii=False, indent=2)}")
|
||||
|
||||
# 处理返回数据结构: {code, data: {errorMessage, data}, msg}
|
||||
# 检查外层 code
|
||||
if result.get("code") != 200:
|
||||
error_msg = result.get("msg", "接口返回错误")
|
||||
logger.error(f"接口返回错误: code={result.get('code')}, msg={error_msg}")
|
||||
raise Exception(error_msg)
|
||||
|
||||
# 检查内层 errorMessage
|
||||
inner_data = result.get("data", {})
|
||||
if inner_data.get("errorMessage"):
|
||||
error_msg = inner_data.get("errorMessage")
|
||||
logger.error(f"接口业务错误: {error_msg}")
|
||||
raise Exception(error_msg)
|
||||
|
||||
# 返回 data.data
|
||||
return inner_data.get("data")
|
||||
|
||||
except httpx.TimeoutException:
|
||||
error_msg = f"测试SQL API请求超时: {url}"
|
||||
logger.error(error_msg)
|
||||
raise Exception(error_msg)
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
error_msg = f"测试SQL API请求失败 (HTTP {e.response.status_code}): {url}"
|
||||
logger.error(error_msg)
|
||||
logger.error(f"错误响应: {e.response.text}")
|
||||
raise Exception(error_msg)
|
||||
|
||||
except httpx.RequestError as e:
|
||||
error_msg = f"测试SQL API请求异常: {url}, 错误: {str(e)}"
|
||||
logger.error(error_msg)
|
||||
raise Exception(error_msg)
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"处理测试SQL API响应时出错: {str(e)}"
|
||||
logger.error(error_msg, exc_info=True)
|
||||
raise Exception(error_msg)
|
||||
|
||||
def close(self):
|
||||
"""关闭HTTP客户端"""
|
||||
self.client.close()
|
||||
|
||||
|
||||
# 创建默认客户端实例
|
||||
default_client = DataSourceAPIClient()
|
||||
|
||||
|
||||
def get_skill_by_id(skill_id: str, base_url: Optional[str] = None, token: Optional[str] = None) -> Dict[str, Any]:
|
||||
"""
|
||||
便捷函数:根据技能ID获取技能信息
|
||||
|
||||
Args:
|
||||
skill_id: 技能ID
|
||||
base_url: API基础URL(可选,默认从环境变量 BACKEND_BASE_URL 读取)
|
||||
token: 认证令牌(可选,使用默认值)
|
||||
|
||||
Returns:
|
||||
API响应数据
|
||||
"""
|
||||
if base_url or token:
|
||||
client = DataSourceAPIClient(
|
||||
base_url=base_url,
|
||||
token=token
|
||||
)
|
||||
return client.get_skill_by_id(skill_id)
|
||||
else:
|
||||
return default_client.get_skill_by_id(skill_id)
|
||||
|
||||
|
||||
def test_sql_with_schema(request_data: Dict[str, Any], base_url: Optional[str] = None, token: Optional[str] = None) -> Dict[str, Any]:
|
||||
"""
|
||||
便捷函数:测试SQL语句并返回执行结果
|
||||
|
||||
Args:
|
||||
request_data: 请求数据,包含以下字段:
|
||||
- datasourceId: 数据源ID
|
||||
- businessName: 业务名称
|
||||
- businessDescription: 业务描述
|
||||
- sqlTemplate: SQL模板
|
||||
- parameters: 参数定义
|
||||
- testParams: 测试参数
|
||||
base_url: API基础URL(可选,默认从环境变量 BACKEND_BASE_URL 读取)
|
||||
token: 认证令牌(可选,使用默认值)
|
||||
|
||||
Returns:
|
||||
API响应数据
|
||||
"""
|
||||
if base_url or token:
|
||||
client = DataSourceAPIClient(
|
||||
base_url=base_url,
|
||||
token=token
|
||||
)
|
||||
return client.test_sql_with_schema(request_data)
|
||||
else:
|
||||
return default_client.test_sql_with_schema(request_data)
|
||||
|
||||
|
||||
def process_skill_response(response: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
处理API响应数据,映射为businessQueries格式
|
||||
|
||||
Args:
|
||||
response: API原始响应数据
|
||||
|
||||
Returns:
|
||||
处理后的查询配置列表
|
||||
"""
|
||||
try:
|
||||
# 提取data数组
|
||||
data_list = response.get("data", [])
|
||||
|
||||
# 默认的员工ID参数schema
|
||||
default_employee_schema = {
|
||||
"type": "object",
|
||||
"required": ["employeeId"],
|
||||
"properties": {
|
||||
"employeeId": {
|
||||
"type": "number",
|
||||
"description": "员工ID,用于标识员工的唯一数字标识符",
|
||||
"examples": [1001, 2002]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 映射每个skill为businessQuery格式
|
||||
queries = []
|
||||
for skill in data_list:
|
||||
# 解析sqlParams字符串为JSON对象
|
||||
sql_params = json.loads(skill.get("sqlParams", "{}"))
|
||||
|
||||
# 判断sqlParams是否为空对象
|
||||
is_empty_params = (
|
||||
not sql_params.get("properties") or
|
||||
len(sql_params.get("properties", {})) == 0
|
||||
) and (
|
||||
not sql_params.get("required") or
|
||||
len(sql_params.get("required", [])) == 0
|
||||
)
|
||||
|
||||
# 如果是空对象,使用默认的员工ID参数
|
||||
if is_empty_params:
|
||||
logger.info(f"技能 {skill.get('name')} (ID: {skill.get('id')}) 的sqlParams为空,使用默认员工ID参数")
|
||||
sql_params = default_employee_schema
|
||||
|
||||
# 映射字段
|
||||
query = {
|
||||
"id": skill.get("id"),
|
||||
"businessName": skill.get("name"),
|
||||
"businessDescription": skill.get("description"),
|
||||
"sqlTemplate": skill.get("sqlTemplate"),
|
||||
"parameters": sql_params,
|
||||
"datasourceId": skill.get("datasourceId")
|
||||
}
|
||||
queries.append(query)
|
||||
|
||||
logger.info(f"成功处理 {len(queries)} 条技能数据")
|
||||
return queries
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"处理API响应数据失败: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
"""环境变量配置模块"""
|
||||
|
||||
import os
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def get_database_id(default: str = "29") -> str:
|
||||
"""
|
||||
获取数据库ID环境变量
|
||||
|
||||
Args:
|
||||
default: 默认值(默认为 "29")
|
||||
|
||||
Returns:
|
||||
str: 数据库ID
|
||||
|
||||
Environment Variables:
|
||||
databaseId: 数据库ID
|
||||
"""
|
||||
return os.environ.get("databaseId", default)
|
||||
|
||||
|
||||
def get_datasource_id(default: str = "") -> str:
|
||||
"""
|
||||
获取数据源ID环境变量
|
||||
|
||||
Args:
|
||||
default: 默认值(默认为 "")
|
||||
|
||||
Returns:
|
||||
str: 数据源ID
|
||||
|
||||
Environment Variables:
|
||||
datasourceId: 数据源ID
|
||||
"""
|
||||
return os.environ.get("datasourceId", default)
|
||||
|
||||
|
||||
def get_skill_id(default: str = "") -> str:
|
||||
"""
|
||||
获取技能ID环境变量
|
||||
|
||||
Args:
|
||||
default: 默认值(默认为 "")
|
||||
|
||||
Returns:
|
||||
str: 技能ID
|
||||
|
||||
Environment Variables:
|
||||
skillId: 技能ID
|
||||
"""
|
||||
return os.environ.get("skillId", default)
|
||||
|
||||
|
||||
def get_backend_base_url(default: str = "http://lzwcai-demp-corp-manager:8086") -> str:
|
||||
"""
|
||||
获取后端API基础URL环境变量
|
||||
|
||||
Args:
|
||||
default: 默认值(默认为 "http://lzwcai-demp-corp-manager:8086")
|
||||
|
||||
Returns:
|
||||
str: 后端API基础URL
|
||||
|
||||
Environment Variables:
|
||||
backendBaseUrl: 后端API基础URL
|
||||
"""
|
||||
return os.environ.get("backendBaseUrl", default)
|
||||
|
||||
|
||||
def get_env_config() -> dict:
|
||||
"""
|
||||
获取所有环境配置
|
||||
|
||||
Returns:
|
||||
dict: 包含所有配置的字典
|
||||
|
||||
Example:
|
||||
config = get_env_config()
|
||||
print(config['database_id']) # 输出: "29"
|
||||
print(config['datasource_id']) # 输出: ""
|
||||
print(config['skill_id']) # 输出: ""
|
||||
print(config['backend_base_url']) # 输出: "http://lzwcai-demp-corp-manager:8086"
|
||||
"""
|
||||
return {
|
||||
"database_id": get_database_id(),
|
||||
"datasource_id": get_datasource_id(),
|
||||
"skill_id": get_skill_id(),
|
||||
"backend_base_url": get_backend_base_url()
|
||||
}
|
||||
|
||||
|
||||
def set_env_variable(key: str, value: str) -> None:
|
||||
"""
|
||||
设置环境变量(仅在当前进程中有效)
|
||||
|
||||
Args:
|
||||
key: 环境变量名
|
||||
value: 环境变量值
|
||||
|
||||
Example:
|
||||
set_env_variable("databaseId", "30")
|
||||
set_env_variable("skillId", "1234567890")
|
||||
"""
|
||||
os.environ[key] = value
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
"""JSON 文件读取工具"""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any, Union
|
||||
|
||||
|
||||
def load_json(json_path: Union[str, Path]) -> Any:
|
||||
"""
|
||||
读取 JSON 文件并返回其内容
|
||||
|
||||
Args:
|
||||
json_path: JSON 文件的路径(支持字符串或 Path 对象)
|
||||
|
||||
Returns:
|
||||
JSON 文件中解析后的数据(可以是字典、列表或其他 JSON 类型)
|
||||
|
||||
Raises:
|
||||
FileNotFoundError: 当文件不存在时
|
||||
json.JSONDecodeError: 当 JSON 格式无效时
|
||||
Exception: 其他读取错误
|
||||
|
||||
Example:
|
||||
>>> data = load_json('config.json')
|
||||
>>> print(data)
|
||||
{'key': 'value'}
|
||||
|
||||
>>> data = load_json(Path('data/users.json'))
|
||||
>>> print(data)
|
||||
[{'id': 1, 'name': 'Alice'}]
|
||||
"""
|
||||
try:
|
||||
# 转换为 Path 对象
|
||||
path = Path(json_path)
|
||||
|
||||
# 检查文件是否存在
|
||||
if not path.exists():
|
||||
raise FileNotFoundError(f"JSON 文件不存在: {json_path}")
|
||||
|
||||
# 检查是否为文件
|
||||
if not path.is_file():
|
||||
raise ValueError(f"路径不是一个文件: {json_path}")
|
||||
|
||||
# 读取并解析 JSON 文件
|
||||
with open(path, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
|
||||
return data
|
||||
|
||||
except json.JSONDecodeError as e:
|
||||
raise json.JSONDecodeError(
|
||||
f"JSON 格式错误: {e.msg}",
|
||||
e.doc,
|
||||
e.pos
|
||||
)
|
||||
except FileNotFoundError:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise Exception(f"读取 JSON 文件时发生错误: {str(e)}")
|
||||
|
||||
@@ -0,0 +1,489 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
统一日志配置模块
|
||||
提供系统级别的日志配置和管理
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class LoggerConfig:
|
||||
"""日志配置管理类"""
|
||||
|
||||
def __init__(self, logs_dir: str = None):
|
||||
"""初始化日志配置
|
||||
|
||||
Args:
|
||||
logs_dir: 日志目录路径,默认为项目根目录下的logs文件夹
|
||||
"""
|
||||
# 确定日志目录
|
||||
if logs_dir:
|
||||
self.logs_dir = Path(logs_dir)
|
||||
else:
|
||||
# 获取项目根目录(logger_config.py 在 utils 目录下,需要上升两层到达项目根目录)
|
||||
project_root = Path(__file__).parent.parent
|
||||
self.logs_dir = project_root / "logs"
|
||||
|
||||
# 创建日志目录
|
||||
self.logs_dir.mkdir(exist_ok=True)
|
||||
|
||||
# 日志格式
|
||||
self.log_format = '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s'
|
||||
self.date_format = '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
# 从环境变量获取日志级别,默认为INFO
|
||||
self.log_level = self._get_log_level_from_env()
|
||||
|
||||
# 是否已初始化
|
||||
self._initialized = False
|
||||
|
||||
def _get_log_level_from_env(self) -> int:
|
||||
"""从环境变量获取日志级别
|
||||
|
||||
Returns:
|
||||
int: 日志级别
|
||||
"""
|
||||
log_level_str = os.getenv('LOG_LEVEL', 'INFO').upper()
|
||||
|
||||
# 日志级别映射
|
||||
level_mapping = {
|
||||
'DEBUG': logging.DEBUG,
|
||||
'INFO': logging.INFO,
|
||||
'WARNING': logging.WARNING,
|
||||
'WARN': logging.WARNING, # 兼容性别名
|
||||
'ERROR': logging.ERROR,
|
||||
'CRITICAL': logging.CRITICAL,
|
||||
'FATAL': logging.CRITICAL # 兼容性别名
|
||||
}
|
||||
|
||||
return level_mapping.get(log_level_str, logging.INFO)
|
||||
|
||||
def setup_logging(self,
|
||||
app_name: str = "lzwcai_mcp_sqlexecutor",
|
||||
log_level: int = logging.INFO,
|
||||
max_file_size: int = 10 * 1024 * 1024, # 10MB
|
||||
backup_count: int = 5,
|
||||
console_output: bool = True) -> logging.Logger:
|
||||
"""设置系统日志配置
|
||||
|
||||
Args:
|
||||
app_name: 应用名称,用于日志文件命名
|
||||
log_level: 日志级别
|
||||
max_file_size: 单个日志文件最大大小(字节)
|
||||
backup_count: 保留的备份文件数量
|
||||
console_output: 是否输出到控制台
|
||||
|
||||
Returns:
|
||||
logging.Logger: 配置好的根日志器
|
||||
"""
|
||||
if self._initialized:
|
||||
return logging.getLogger()
|
||||
|
||||
# 设置根日志器
|
||||
root_logger = logging.getLogger()
|
||||
root_logger.setLevel(log_level)
|
||||
|
||||
# 清除现有的处理器
|
||||
for handler in root_logger.handlers[:]:
|
||||
root_logger.removeHandler(handler)
|
||||
|
||||
# 创建格式化器
|
||||
formatter = logging.Formatter(self.log_format, self.date_format)
|
||||
|
||||
# 1. 主日志文件 - 按大小滚动
|
||||
main_log_file = self.logs_dir / f"{app_name}.log"
|
||||
file_handler = RotatingFileHandler(
|
||||
main_log_file,
|
||||
maxBytes=max_file_size,
|
||||
backupCount=backup_count,
|
||||
encoding='utf-8'
|
||||
)
|
||||
file_handler.setLevel(log_level)
|
||||
file_handler.setFormatter(formatter)
|
||||
root_logger.addHandler(file_handler)
|
||||
|
||||
# 2. 错误日志文件 - 只记录ERROR及以上级别
|
||||
error_log_file = self.logs_dir / f"{app_name}_error.log"
|
||||
error_handler = RotatingFileHandler(
|
||||
error_log_file,
|
||||
maxBytes=max_file_size,
|
||||
backupCount=backup_count,
|
||||
encoding='utf-8'
|
||||
)
|
||||
error_handler.setLevel(logging.ERROR)
|
||||
error_handler.setFormatter(formatter)
|
||||
root_logger.addHandler(error_handler)
|
||||
|
||||
# 3. 按日期滚动的日志文件
|
||||
daily_log_file = self.logs_dir / f"{app_name}_daily.log"
|
||||
daily_handler = TimedRotatingFileHandler(
|
||||
daily_log_file,
|
||||
when='midnight',
|
||||
interval=1,
|
||||
backupCount=30, # 保留30天
|
||||
encoding='utf-8'
|
||||
)
|
||||
daily_handler.setLevel(log_level)
|
||||
daily_handler.setFormatter(formatter)
|
||||
daily_handler.suffix = "%Y-%m-%d"
|
||||
root_logger.addHandler(daily_handler)
|
||||
|
||||
# 4. 控制台输出
|
||||
# 重要:MCP协议使用stdio时,必须将日志输出到stderr,stdout仅用于JSON-RPC通信
|
||||
if console_output:
|
||||
console_handler = logging.StreamHandler(sys.stderr)
|
||||
console_handler.setLevel(log_level)
|
||||
console_formatter = logging.Formatter(
|
||||
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
self.date_format
|
||||
)
|
||||
console_handler.setFormatter(console_formatter)
|
||||
root_logger.addHandler(console_handler)
|
||||
|
||||
self._initialized = True
|
||||
|
||||
# 记录初始化信息
|
||||
root_logger.info(f"日志系统初始化完成 - 日志目录: {self.logs_dir}")
|
||||
root_logger.info(f"日志配置 - 级别: {logging.getLevelName(log_level)}, 文件大小限制: {max_file_size//1024//1024}MB, 备份数量: {backup_count}")
|
||||
|
||||
return root_logger
|
||||
|
||||
def get_module_logger(self, module_name: str) -> logging.Logger:
|
||||
"""获取模块专用日志器
|
||||
|
||||
Args:
|
||||
module_name: 模块名称
|
||||
|
||||
Returns:
|
||||
logging.Logger: 模块日志器
|
||||
"""
|
||||
return logging.getLogger(module_name)
|
||||
|
||||
def create_component_logger(self,
|
||||
component_name: str,
|
||||
log_file: str = None,
|
||||
log_level: int = None) -> logging.Logger:
|
||||
"""为特定组件创建独立的日志器
|
||||
|
||||
Args:
|
||||
component_name: 组件名称
|
||||
log_file: 独立日志文件名(可选)
|
||||
log_level: 日志级别(可选)
|
||||
|
||||
Returns:
|
||||
logging.Logger: 组件日志器
|
||||
"""
|
||||
logger = logging.getLogger(component_name)
|
||||
|
||||
if log_file:
|
||||
# 为组件创建独立的日志文件
|
||||
component_log_file = self.logs_dir / log_file
|
||||
handler = RotatingFileHandler(
|
||||
component_log_file,
|
||||
maxBytes=5 * 1024 * 1024, # 5MB
|
||||
backupCount=3,
|
||||
encoding='utf-8'
|
||||
)
|
||||
|
||||
formatter = logging.Formatter(self.log_format, self.date_format)
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
if log_level:
|
||||
handler.setLevel(log_level)
|
||||
|
||||
logger.addHandler(handler)
|
||||
logger.info(f"组件日志器创建完成: {component_name} -> {component_log_file}")
|
||||
|
||||
return logger
|
||||
|
||||
def setup_mqtt_logging(self) -> logging.Logger:
|
||||
"""设置MQTT专用日志
|
||||
|
||||
Returns:
|
||||
logging.Logger: MQTT日志器
|
||||
"""
|
||||
return self.create_component_logger(
|
||||
"mqtt_communication",
|
||||
"mqtt_communication.log",
|
||||
logging.DEBUG
|
||||
)
|
||||
|
||||
def setup_mcp_logging(self) -> logging.Logger:
|
||||
"""设置MCP专用日志
|
||||
|
||||
Returns:
|
||||
logging.Logger: MCP日志器
|
||||
"""
|
||||
return self.create_component_logger(
|
||||
"mcp_services",
|
||||
"mcp_services.log",
|
||||
logging.DEBUG
|
||||
)
|
||||
|
||||
def setup_api_logging(self) -> logging.Logger:
|
||||
"""设置API专用日志
|
||||
|
||||
Returns:
|
||||
logging.Logger: API日志器
|
||||
"""
|
||||
return self.create_component_logger(
|
||||
"api_requests",
|
||||
"api_requests.log",
|
||||
logging.INFO
|
||||
)
|
||||
|
||||
def get_logs_info(self) -> dict:
|
||||
"""获取日志系统信息
|
||||
|
||||
Returns:
|
||||
dict: 日志系统信息
|
||||
"""
|
||||
log_files = []
|
||||
if self.logs_dir.exists():
|
||||
for log_file in self.logs_dir.glob("*.log*"):
|
||||
stat = log_file.stat()
|
||||
log_files.append({
|
||||
"name": log_file.name,
|
||||
"size": stat.st_size,
|
||||
"modified": datetime.fromtimestamp(stat.st_mtime).isoformat()
|
||||
})
|
||||
|
||||
return {
|
||||
"logs_directory": str(self.logs_dir),
|
||||
"initialized": self._initialized,
|
||||
"log_files": log_files,
|
||||
"total_files": len(log_files)
|
||||
}
|
||||
|
||||
def cleanup_old_logs(self, days: int = 30):
|
||||
"""清理旧日志文件
|
||||
|
||||
Args:
|
||||
days: 保留天数
|
||||
"""
|
||||
if not self.logs_dir.exists():
|
||||
return
|
||||
|
||||
from datetime import timedelta
|
||||
cutoff_time = datetime.now() - timedelta(days=days)
|
||||
|
||||
cleaned_files = []
|
||||
for log_file in self.logs_dir.glob("*.log*"):
|
||||
if log_file.stat().st_mtime < cutoff_time.timestamp():
|
||||
try:
|
||||
log_file.unlink()
|
||||
cleaned_files.append(log_file.name)
|
||||
except Exception as e:
|
||||
logging.error(f"清理日志文件失败: {log_file.name}, 错误: {e}")
|
||||
|
||||
if cleaned_files:
|
||||
logging.info(f"清理了 {len(cleaned_files)} 个旧日志文件: {cleaned_files}")
|
||||
|
||||
def set_log_level(self, level: int, logger_name: str = None):
|
||||
"""动态调整日志级别
|
||||
|
||||
Args:
|
||||
level: 新的日志级别 (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL)
|
||||
logger_name: 指定日志器名称,None表示调整根日志器
|
||||
"""
|
||||
if logger_name:
|
||||
logger = logging.getLogger(logger_name)
|
||||
else:
|
||||
logger = logging.getLogger()
|
||||
|
||||
old_level = logger.level
|
||||
logger.setLevel(level)
|
||||
|
||||
# 同时调整所有处理器的级别
|
||||
for handler in logger.handlers:
|
||||
if not isinstance(handler, logging.StreamHandler) or handler.stream not in (sys.stdout, sys.stderr):
|
||||
# 不调整控制台处理器的级别,保持原有设置
|
||||
handler.setLevel(level)
|
||||
|
||||
level_name = logging.getLevelName(level)
|
||||
old_level_name = logging.getLevelName(old_level)
|
||||
target = logger_name or "根日志器"
|
||||
|
||||
logger.info(f"日志级别已调整: {target} {old_level_name} -> {level_name}")
|
||||
|
||||
def set_temporary_log_level(self, level: int, logger_name: str = None):
|
||||
"""临时调整日志级别(会保存原始级别用于恢复)
|
||||
|
||||
Args:
|
||||
level: 临时日志级别
|
||||
logger_name: 指定日志器名称,None表示调整根日志器
|
||||
"""
|
||||
if not hasattr(self, '_original_levels'):
|
||||
self._original_levels = {}
|
||||
|
||||
target_name = logger_name or 'root'
|
||||
|
||||
if logger_name:
|
||||
logger = logging.getLogger(logger_name)
|
||||
else:
|
||||
logger = logging.getLogger()
|
||||
|
||||
# 保存原始级别
|
||||
if target_name not in self._original_levels:
|
||||
self._original_levels[target_name] = logger.level
|
||||
|
||||
# 设置新级别
|
||||
self.set_log_level(level, logger_name)
|
||||
|
||||
level_name = logging.getLevelName(level)
|
||||
target = logger_name or "根日志器"
|
||||
logger.info(f"临时调整日志级别: {target} -> {level_name} (可通过restore_log_level恢复)")
|
||||
|
||||
def restore_log_level(self, logger_name: str = None):
|
||||
"""恢复日志级别到调整前的状态
|
||||
|
||||
Args:
|
||||
logger_name: 指定日志器名称,None表示恢复根日志器
|
||||
"""
|
||||
if not hasattr(self, '_original_levels'):
|
||||
logging.warning("没有找到保存的原始日志级别")
|
||||
return
|
||||
|
||||
target_name = logger_name or 'root'
|
||||
|
||||
if target_name not in self._original_levels:
|
||||
logging.warning(f"没有找到 {target_name} 的原始日志级别")
|
||||
return
|
||||
|
||||
original_level = self._original_levels[target_name]
|
||||
self.set_log_level(original_level, logger_name)
|
||||
|
||||
# 清除保存的级别
|
||||
del self._original_levels[target_name]
|
||||
|
||||
target = logger_name or "根日志器"
|
||||
level_name = logging.getLevelName(original_level)
|
||||
logging.info(f"已恢复日志级别: {target} -> {level_name}")
|
||||
|
||||
def get_current_log_levels(self) -> dict:
|
||||
"""获取当前所有日志器的级别信息
|
||||
|
||||
Returns:
|
||||
dict: 日志器级别信息
|
||||
"""
|
||||
levels_info = {}
|
||||
|
||||
# 根日志器
|
||||
root_logger = logging.getLogger()
|
||||
levels_info['root'] = {
|
||||
'level': root_logger.level,
|
||||
'level_name': logging.getLevelName(root_logger.level),
|
||||
'handlers_count': len(root_logger.handlers)
|
||||
}
|
||||
|
||||
# 其他已创建的日志器
|
||||
for name, logger in logging.Logger.manager.loggerDict.items():
|
||||
if isinstance(logger, logging.Logger):
|
||||
levels_info[name] = {
|
||||
'level': logger.level,
|
||||
'level_name': logging.getLevelName(logger.level),
|
||||
'handlers_count': len(logger.handlers)
|
||||
}
|
||||
|
||||
return levels_info
|
||||
|
||||
|
||||
# 全局日志配置实例
|
||||
logger_config = LoggerConfig()
|
||||
|
||||
|
||||
def setup_system_logging(app_name: str = "lzwcai_mcp_sqlexecutor",
|
||||
log_level: int = logging.INFO) -> logging.Logger:
|
||||
"""系统日志初始化快捷函数
|
||||
|
||||
Args:
|
||||
app_name: 应用名称
|
||||
log_level: 日志级别
|
||||
|
||||
Returns:
|
||||
logging.Logger: 根日志器
|
||||
"""
|
||||
return logger_config.setup_logging(app_name, log_level)
|
||||
|
||||
|
||||
def get_logger(name: str) -> logging.Logger:
|
||||
"""获取日志器的快捷函数
|
||||
|
||||
Args:
|
||||
name: 日志器名称
|
||||
|
||||
Returns:
|
||||
logging.Logger: 日志器实例
|
||||
"""
|
||||
return logger_config.get_module_logger(name)
|
||||
|
||||
|
||||
def set_log_level(level: int, logger_name: str = None):
|
||||
"""动态调整日志级别的快捷函数
|
||||
|
||||
Args:
|
||||
level: 新的日志级别 (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL)
|
||||
logger_name: 指定日志器名称,None表示调整根日志器
|
||||
|
||||
Examples:
|
||||
# 调整根日志器为DEBUG级别
|
||||
set_log_level(logging.DEBUG)
|
||||
|
||||
# 调整特定模块日志器为WARNING级别
|
||||
set_log_level(logging.WARNING, "agent_ontology.core")
|
||||
"""
|
||||
logger_config.set_log_level(level, logger_name)
|
||||
|
||||
|
||||
def set_temporary_log_level(level: int, logger_name: str = None):
|
||||
"""临时调整日志级别的快捷函数
|
||||
|
||||
Args:
|
||||
level: 临时日志级别
|
||||
logger_name: 指定日志器名称,None表示调整根日志器
|
||||
|
||||
Examples:
|
||||
# 临时调整为DEBUG级别进行调试
|
||||
set_temporary_log_level(logging.DEBUG)
|
||||
# ... 进行调试 ...
|
||||
# 恢复原始级别
|
||||
restore_log_level()
|
||||
"""
|
||||
logger_config.set_temporary_log_level(level, logger_name)
|
||||
|
||||
|
||||
def restore_log_level(logger_name: str = None):
|
||||
"""恢复日志级别的快捷函数
|
||||
|
||||
Args:
|
||||
logger_name: 指定日志器名称,None表示恢复根日志器
|
||||
"""
|
||||
logger_config.restore_log_level(logger_name)
|
||||
|
||||
|
||||
def get_current_log_levels() -> dict:
|
||||
"""获取当前日志级别信息的快捷函数
|
||||
|
||||
Returns:
|
||||
dict: 日志器级别信息
|
||||
|
||||
Examples:
|
||||
levels = get_current_log_levels()
|
||||
print(f"根日志器级别: {levels['root']['level_name']}")
|
||||
"""
|
||||
return logger_config.get_current_log_levels()
|
||||
|
||||
|
||||
# 便捷的日志级别常量
|
||||
class LogLevel:
|
||||
"""日志级别常量类"""
|
||||
DEBUG = logging.DEBUG
|
||||
INFO = logging.INFO
|
||||
WARNING = logging.WARNING
|
||||
ERROR = logging.ERROR
|
||||
CRITICAL = logging.CRITICAL
|
||||
@@ -0,0 +1,41 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
名称生成工具模块
|
||||
"""
|
||||
|
||||
from pypinyin import lazy_pinyin, Style
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def generate_tool_name(business_name: str, tool_id: str) -> str:
|
||||
"""
|
||||
根据业务名称和ID生成工具名称
|
||||
格式: tool_拼音_id
|
||||
|
||||
Args:
|
||||
business_name: 业务名称(中文)
|
||||
tool_id: 工具ID
|
||||
|
||||
Returns:
|
||||
str: 格式化的工具名称
|
||||
"""
|
||||
try:
|
||||
# 将中文转换为拼音(无音调,小写)
|
||||
pinyin_list = lazy_pinyin(business_name, style=Style.NORMAL)
|
||||
# 拼接拼音
|
||||
pinyin_str = ''.join(pinyin_list)
|
||||
|
||||
# 将 ID 中的 '-' 替换为 '_'
|
||||
formatted_id = tool_id.replace('-', '_')
|
||||
|
||||
# 组合成最终的工具名称
|
||||
tool_name = f"tool_{pinyin_str}_{formatted_id}"
|
||||
|
||||
return tool_name
|
||||
except Exception as e:
|
||||
logger.error(f"生成工具名称失败: {business_name}, {tool_id}, 错误: {e}", exc_info=True)
|
||||
# 降级处理:如果拼音转换失败,使用 ID
|
||||
return f"tool_{tool_id.replace('-', '_')}"
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Schema 生成工具模块
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, List
|
||||
|
||||
|
||||
def generate_input_schema(parameters: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""
|
||||
从查询配置的参数定义生成 MCP 工具的 inputSchema
|
||||
|
||||
此函数会保留完整的 JSON Schema 信息,包括:
|
||||
- type: Schema 类型(通常是 "object")
|
||||
- required: 必填字段列表
|
||||
- properties: 属性定义(包括每个属性的 type, description, format, examples 等)
|
||||
- description: Schema 的整体描述(如果有)
|
||||
- 以及其他任何 JSON Schema 标准字段
|
||||
|
||||
此函数还会自动添加以下字段(如果原始 parameters 中未定义):
|
||||
- targetDatabaseName: 目标数据库名称(非必填,默认为空字符串)
|
||||
|
||||
Args:
|
||||
parameters: 查询配置中的参数定义字典,应该是一个完整的 JSON Schema 对象
|
||||
|
||||
Returns:
|
||||
Dict[str, Any]: 符合 JSON Schema 规范的 inputSchema 对象
|
||||
|
||||
Example:
|
||||
>>> params = {
|
||||
... "type": "object",
|
||||
... "required": ["userId", "startTime"],
|
||||
... "properties": {
|
||||
... "userId": {
|
||||
... "type": "integer",
|
||||
... "description": "用户的唯一标识符",
|
||||
... "examples": [10086]
|
||||
... },
|
||||
... "startTime": {
|
||||
... "type": "string",
|
||||
... "format": "date-time",
|
||||
... "description": "查询的起始时间",
|
||||
... "examples": ["2023-01-01 00:00:00"]
|
||||
... }
|
||||
... }
|
||||
... }
|
||||
>>> schema = generate_input_schema(params)
|
||||
>>> # schema 将包含所有原始信息,包括 format 和 examples
|
||||
>>> # 同时会自动添加 targetDatabaseName 字段
|
||||
"""
|
||||
# 如果 parameters 本身就是一个完整的 JSON Schema 对象,直接使用
|
||||
# 但确保至少包含 type 和 properties
|
||||
if not parameters:
|
||||
# 如果 parameters 为空,返回一个空的 object schema
|
||||
return {
|
||||
"type": "object",
|
||||
"properties": {},
|
||||
"required": []
|
||||
}
|
||||
|
||||
# 检查 parameters 是否已经是完整的 JSON Schema 格式
|
||||
# 完整格式应该有 "type": "object" 和 "properties" 字段
|
||||
if "type" in parameters and parameters.get("type") == "object" and "properties" in parameters:
|
||||
# 已经是完整的 JSON Schema 格式,直接使用
|
||||
input_schema = dict(parameters)
|
||||
else:
|
||||
# parameters 是简化格式(直接是参数定义),需要转换为 JSON Schema 格式
|
||||
# 例如: {"workOrderNumber": {"type": "string", "description": "...", "required": true}}
|
||||
properties = {}
|
||||
required = []
|
||||
|
||||
for param_name, param_def in parameters.items():
|
||||
if isinstance(param_def, dict):
|
||||
# 提取 required 标记
|
||||
if param_def.get("required", False):
|
||||
required.append(param_name)
|
||||
|
||||
# 复制参数定义,但移除 required 字段(它应该在顶层的 required 数组中)
|
||||
prop_def = {k: v for k, v in param_def.items() if k != "required"}
|
||||
properties[param_name] = prop_def
|
||||
|
||||
input_schema = {
|
||||
"type": "object",
|
||||
"properties": properties,
|
||||
"required": required
|
||||
}
|
||||
|
||||
# 确保必需的字段存在
|
||||
if "type" not in input_schema:
|
||||
input_schema["type"] = "object"
|
||||
|
||||
if "properties" not in input_schema:
|
||||
input_schema["properties"] = {}
|
||||
|
||||
if "required" not in input_schema:
|
||||
input_schema["required"] = []
|
||||
|
||||
# 添加 targetDatabaseName 字段(如果不存在)
|
||||
if "targetDatabaseName" not in input_schema["properties"]:
|
||||
input_schema["properties"]["targetDatabaseName"] = {
|
||||
"type": "string",
|
||||
"description": "目标数据库名称",
|
||||
"default": ""
|
||||
}
|
||||
|
||||
# 保留所有其他字段,如 description, examples, format 等
|
||||
# JSON Schema 标准支持的字段都会被保留:
|
||||
# - additionalProperties
|
||||
# - patternProperties
|
||||
# - minProperties / maxProperties
|
||||
# - dependencies
|
||||
# - 等等
|
||||
|
||||
return input_schema
|
||||
|
||||
|
||||
def validate_input_schema(schema: Dict[str, Any]) -> tuple[bool, str]:
|
||||
"""
|
||||
验证 inputSchema 是否符合基本的 JSON Schema 规范
|
||||
|
||||
Args:
|
||||
schema: 要验证的 schema 对象
|
||||
|
||||
Returns:
|
||||
tuple[bool, str]: (是否有效, 错误消息或成功消息)
|
||||
|
||||
Example:
|
||||
>>> schema = {"type": "object", "properties": {"id": {"type": "string"}}}
|
||||
>>> is_valid, msg = validate_input_schema(schema)
|
||||
>>> print(is_valid, msg)
|
||||
True, "Schema 验证通过"
|
||||
"""
|
||||
if not isinstance(schema, dict):
|
||||
return False, "Schema 必须是一个字典对象"
|
||||
|
||||
if schema.get("type") != "object":
|
||||
return False, "Schema 的 type 字段必须是 'object'"
|
||||
|
||||
if "properties" not in schema:
|
||||
return False, "Schema 必须包含 properties 字段"
|
||||
|
||||
if not isinstance(schema.get("properties"), dict):
|
||||
return False, "Schema 的 properties 字段必须是一个字典对象"
|
||||
|
||||
# 验证 required 字段(如果存在)
|
||||
if "required" in schema:
|
||||
required = schema["required"]
|
||||
if not isinstance(required, list):
|
||||
return False, "Schema 的 required 字段必须是一个列表"
|
||||
|
||||
# 验证所有 required 的字段都在 properties 中定义
|
||||
properties = schema["properties"]
|
||||
for field in required:
|
||||
if field not in properties:
|
||||
return False, f"必填字段 '{field}' 未在 properties 中定义"
|
||||
|
||||
# 验证 properties 中每个字段的定义
|
||||
for prop_name, prop_def in schema["properties"].items():
|
||||
if not isinstance(prop_def, dict):
|
||||
return False, f"属性 '{prop_name}' 的定义必须是一个字典对象"
|
||||
|
||||
if "type" not in prop_def:
|
||||
return False, f"属性 '{prop_name}' 必须包含 type 字段"
|
||||
|
||||
return True, "Schema 验证通过"
|
||||
|
||||
497
lzwcai_mcpskills_analyzeOrder/lzwcai_mcpskills_analyzeOrder/uv.lock
generated
Normal file
497
lzwcai_mcpskills_analyzeOrder/lzwcai_mcpskills_analyzeOrder/uv.lock
generated
Normal file
@@ -0,0 +1,497 @@
|
||||
version = 1
|
||||
revision = 2
|
||||
requires-python = ">=3.13"
|
||||
|
||||
[[package]]
|
||||
name = "annotated-types"
|
||||
version = "0.7.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/aff/07c09a53a08bc/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/1f0/2e8b43a8fbbc3/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
version = "4.11.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "idna" },
|
||||
{ name = "sniffio" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/82a/8d0b81e318cc5/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/028/7e96f4d26d414/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "attrs"
|
||||
version = "25.4.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/16d/5969b87f0859e/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/adc/f7e2a1fb3b36a/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
version = "2025.10.5"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/47c/09d31ccf2acf0/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/0f2/12c2744a9bb6d/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.3.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/e7b/8232224eba16f/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/9b9/f285302c6e306/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorama"
|
||||
version = "0.4.6"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/086/95f5cb7ed6e05/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/4f1/d9991f5acc0ca/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.16.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/4e3/5b956cf45792e/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/63c/f8bbe7522de3b/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpcore"
|
||||
version = "1.0.9"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "certifi" },
|
||||
{ name = "h11" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/6e3/4463af53fd2ab/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/2d4/00746a40668fc/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpx"
|
||||
version = "0.28.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
{ name = "certifi" },
|
||||
{ name = "httpcore" },
|
||||
{ name = "idna" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/75e/98c5f16b0f35b/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d90/9fcccc110f8c7/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "httpx-sse"
|
||||
version = "0.4.3"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/9b1/ed0127459a660/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/0ac/1c9fe3c0afad2/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.11"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/795/dafcc9c04ed0c/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/771/a87f49d9defaf/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jsonschema"
|
||||
version = "4.25.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "attrs" },
|
||||
{ name = "jsonschema-specifications" },
|
||||
{ name = "referencing" },
|
||||
{ name = "rpds-py" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/e4a/9655ce0da0c0b/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/3fb/a0169e345c717/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jsonschema-specifications"
|
||||
version = "2025.9.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "referencing" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/b54/0987f239e7456/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/988/02fee3a11ee76/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lzwcai-mcpskills-analyzeWorkOrder"
|
||||
version = "0.1.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "httpx" },
|
||||
{ name = "mcp", extra = ["cli"] },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "httpx", specifier = ">=0.28.1" },
|
||||
{ name = "mcp", extras = ["cli"], specifier = ">=1.10.1" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.0.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/cb0/a2b4aa34f932c/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/873/27c59b172c501/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mcp"
|
||||
version = "1.10.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
{ name = "httpx" },
|
||||
{ name = "httpx-sse" },
|
||||
{ name = "jsonschema" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "pydantic-settings" },
|
||||
{ name = "python-multipart" },
|
||||
{ name = "sse-starlette" },
|
||||
{ name = "starlette" },
|
||||
{ name = "uvicorn", marker = "sys_platform != 'emscripten'" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/aaa/0957d8307feef/mcp-1.10.1.tar.gz", hash = "sha256:aaa0957d8307feeff180da2d9d359f2b801f35c0c67f1882136239055ef034c2" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/4d0/8301aefe906dc/mcp-1.10.1-py3-none-any.whl", hash = "sha256:4d08301aefe906dce0fa482289db55ce1db831e3e67212e65b5e23ad8454b3c5" },
|
||||
]
|
||||
|
||||
[package.optional-dependencies]
|
||||
cli = [
|
||||
{ name = "python-dotenv" },
|
||||
{ name = "typer" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/bb4/13d29f5eea38f/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/840/08a41e51615a4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic"
|
||||
version = "2.12.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "annotated-types" },
|
||||
{ name = "pydantic-core" },
|
||||
{ name = "typing-extensions" },
|
||||
{ name = "typing-inspection" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/7b8/fa15b831a4bbd/pydantic-2.12.2.tar.gz", hash = "sha256:7b8fa15b831a4bbde9d5b84028641ac3080a4ca2cbd4a621a661687e741624fd" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/25f/f718ee909acd8/pydantic-2.12.2-py3-none-any.whl", hash = "sha256:25ff718ee909acd82f1ff9b1a4acfd781bb23ab3739adaa7144f19a6a4e231ae" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic-core"
|
||||
version = "2.41.4"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/70e/47929a9d4a190/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/85e/050ad9e5f6fe1/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:85e050ad9e5f6fe1004eec65c914332e52f429bc0ae12d6fa2092407a462c746" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/e73/93f1d64792763/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7393f1d64792763a48924ba31d1e44c2cfbc05e3b1c2c9abb4ceeadd912cced" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/94d/ab0940b0d1fb2/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94dab0940b0d1fb28bcab847adf887c66a27a40291eedf0b473be58761c9799a" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/de7/c42f897e689ee/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de7c42f897e689ee6f9e93c4bec72b99ae3b32a2ade1c7e4798e690ff5246e02" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/664/b319919326227/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:664b3199193262277b8b3cd1e754fb07f2c6023289c815a1e1e8fb415cb247b1" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d95/b253b88f7d308/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95b253b88f7d308b1c0b417c4624f44553ba4762816f94e6986819b9c273fb2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a13/51f5bbdbbabc6/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1351f5bbdbbabc689727cb91649a00cb9ee7203e0a6e54e9f5ba9e22e384b84" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/1af/fa4798520b148/pydantic_core-2.41.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1affa4798520b148d7182da0615d648e752de4ab1a9566b7471bc803d88a062d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/7b7/4e18052fea4aa/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7b74e18052fea4aa8dea2fb7dbc23d15439695da6cbe6cfc1b694af1115df09d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/285/b643d75c0e30a/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:285b643d75c0e30abda9dc1077395624f314a37e3c09ca402d4015ef5979f1a2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f52/679ff4218d713/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f52679ff4218d713b3b33f88c89ccbf3a5c2c12ba665fb80ccc4192b4608dbab" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ecd/e6dedd6fff127/pydantic_core-2.41.4-cp313-cp313-win32.whl", hash = "sha256:ecde6dedd6fff127c273c76821bb754d793be1024bc33314a120f83a3c69460c" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d08/1a1f3800f0540/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl", hash = "sha256:d081a1f3800f05409ed868ebb2d74ac39dd0c1ff6c035b5162356d76030736d4" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f8e/49c9c364a7edc/pydantic_core-2.41.4-cp313-cp313-win_arm64.whl", hash = "sha256:f8e49c9c364a7edcbe2a310f12733aad95b022495ef2a8d653f645e5d20c1564" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ed9/7fd56a561f5eb/pydantic_core-2.41.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ed97fd56a561f5eb5706cebe94f1ad7c13b84d98312a05546f2ad036bafe87f4" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a87/0c307bf1ee91f/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a870c307bf1ee91fc58a9a61338ff780d01bfae45922624816878dce784095d2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d25/e97bc1f5f8f79/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25e97bc1f5f8f7985bdc2335ef9e73843bb561eb1fa6831fdfc295c1c2061cf" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d40/5d14bea042f16/pydantic_core-2.41.4-cp313-cp313t-win_amd64.whl", hash = "sha256:d405d14bea042f166512add3091c1af40437c2e7f86988f3915fabd27b1e9cd2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/19f/3684868309db5/pydantic_core-2.41.4-cp313-cp313t-win_arm64.whl", hash = "sha256:19f3684868309db5263a11bace3c45d93f6f24afa2ffe75a647583df22a2ff89" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/e92/05d97ed08a82e/pydantic_core-2.41.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:e9205d97ed08a82ebb9a307e92914bb30e18cdf6f6b12ca4bedadb1588a0bfe1" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/82d/f1f432b37d832/pydantic_core-2.41.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:82df1f432b37d832709fbcc0e24394bba04a01b6ecf1ee87578145c19cde12ac" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fc3/b4cc4539e055c/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3b4cc4539e055cfa39a3763c939f9d409eb40e85813257dcd761985a108554" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/b1e/b1754fce47c63/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b1eb1754fce47c63d2ff57fdb88c351a6c0150995890088b33767a10218eaa4e" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/e6a/b5ab30ef325b4/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6ab5ab30ef325b443f379ddb575a34969c333004fca5a1daa0133a6ffaad616" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/31a/41030b1d9ca49/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31a41030b1d9ca497634092b46481b937ff9397a86f9f51bd41c4767b6fc04af" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a44/ac1738591472c/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a44ac1738591472c3d020f61c6df1e4015180d6262ebd39bf2aeb52571b60f12" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d72/f2b5e6e82ab8f/pydantic_core-2.41.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d72f2b5e6e82ab8f94ea7d0d42f83c487dc159c5240d8f83beae684472864e2d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/c4d/1e854aaf04448/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c4d1e854aaf044487d31143f541f7aafe7b482ae72a022c664b2de2e466ed0ad" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/b56/8af94267729d7/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b568af94267729d76e6ee5ececda4e283d07bbb28e8148bb17adad93d025d25a" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/6d5/5fb8b1e8929b3/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6d55fb8b1e8929b341cc313a81a26e0d48aa3b519c1dbaadec3a6a2b4fcad025" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/5b6/6584e549e2e32/pydantic_core-2.41.4-cp314-cp314-win32.whl", hash = "sha256:5b66584e549e2e32a1398df11da2e0a7eff45d5c2d9db9d5667c5e6ac764d77e" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/557/a0aab88664cc5/pydantic_core-2.41.4-cp314-cp314-win_amd64.whl", hash = "sha256:557a0aab88664cc552285316809cab897716a372afaf8efdbef756f8b890e894" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/3f1/ea6f48a045745/pydantic_core-2.41.4-cp314-cp314-win_arm64.whl", hash = "sha256:3f1ea6f48a045745d0d9f325989d8abd3f1eaf47dd00485912d1a3a63c623a8d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/6c1/fe4c5404c448b/pydantic_core-2.41.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6c1fe4c5404c448b13188dd8bd2ebc2bdd7e6727fa61ff481bcc2cca894018da" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/523/e7da4d43b113b/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:523e7da4d43b113bf8e7b49fa4ec0c35bf4fe66b2230bfc5c13cc498f12c6c3e" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/572/9225de81fb65b/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5729225de81fb65b70fdb1907fcf08c75d498f4a6f15af005aabb1fdadc19dfa" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/de2/cfbb09e88f0f7/pydantic_core-2.41.4-cp314-cp314t-win_amd64.whl", hash = "sha256:de2cfbb09e88f0f795fd90cf955858fc2c691df65b1f21f0aa00b99f3fbc661d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d34/f950ae05a83e0/pydantic_core-2.41.4-cp314-cp314t-win_arm64.whl", hash = "sha256:d34f950ae05a83e0ede899c595f312ca976023ea1db100cd5aa188f7005e3ab0" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pydantic-settings"
|
||||
version = "2.11.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "pydantic" },
|
||||
{ name = "python-dotenv" },
|
||||
{ name = "typing-inspection" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/d0e/87a1c7d33593b/pydantic_settings-2.11.0.tar.gz", hash = "sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fe2/cea3413b9530d/pydantic_settings-2.11.0-py3-none-any.whl", hash = "sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.19.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/636/cb2477cec7f89/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/865/40386c03d588b/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "python-dotenv"
|
||||
version = "1.1.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/a8a/6399716257f45/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/31f/23644fe2602f8/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "python-multipart"
|
||||
version = "0.0.20"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/8dd/0cab45b8e2306/python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/8a6/2d3a8335e0658/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "referencing"
|
||||
version = "0.37.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "attrs" },
|
||||
{ name = "rpds-py" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/44a/efc3142c5b842/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/381/329a9f99628c9/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "14.2.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/73f/f50c7c0c1c77c/rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/76b/c51fe2e57d2b1/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rpds-py"
|
||||
version = "0.27.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/26a/1c73171d10b7a/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/e4b/9fcfbc0216338/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/144/1811a96eadca9/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/552/66dafa22e672f/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d78/827d7ac08627e/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ae9/2443798a40a92/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/c46/c9dd2403b66a2/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/2ef/e4eb1d01b7f5f/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/15d/3b4d83582d10c/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/4ed/2e16abbc982a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a75/f305c9b013289/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/67c/e762070474588/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/9d9/92ac10eb86d9b/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/4f7/5e4bd8ab8db62/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f90/25faafc62ed0b/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ed1/0dc32829e7d22/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/920/22bbbad0d4426/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/471/62fdab9407ec3/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fb8/9bec23fddc489/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/e48/af21883ded2b3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/6f5/b7bd8e219ed50/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/08f/1e20bccf73b08/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/0dc/5dceeaefcc96d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d76/f9cc8665acdc0/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/134/fae0e36022eda/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/eb1/1a4f1b2b63337/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/13e/608ac9f50a0ed/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/dd2/135527aa40f06/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/302/0724ade63fe32/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/8ee/50c3e41739886/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/acb/9aafccaae278f/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/b7f/b801aa7f845dd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fe0/dd05afb46597b/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/b6d/fb0e058adb12d/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ed0/90ccd235f6fa8/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/bf8/76e79763eecf3/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/12e/d005216a51b1d/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ee4/308f409a40e50/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/0b0/8d152555acf1f/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/dce/51c828941973a/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/c14/76d6f29eb81aa/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/3ce/0cac322b0d69b/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/dfb/fac137d2a3d07/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a6e/57b0abfe7cc51/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/faf/8d146f3d476ab/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/ba8/1d2b56b6d4911/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/84f/7d509870098de/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/a9e/960fc78fecd11/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/62f/85b665cedab1a/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fed/467af29776f65/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f27/29615f9d430af/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/1b2/07d881a9aef7b/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/639/fd5efec029f99/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/fec/c80cb2a90e28a/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/42a/89282d711711d/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/cf9/931f14223de59/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f39/f58a27cc6e59f/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/d5f/a0ee122dc09e2/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a" },
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/656/7d2bb951e2123/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shellingham"
|
||||
version = "1.5.4"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/8db/ca0739d487e5b/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/7ec/fff8f2fd72616/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sniffio"
|
||||
version = "1.3.1"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/f43/24edc670a0f49/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/2f6/da418d1f1e0fd/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sse-starlette"
|
||||
version = "3.0.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/ccd/60b5765ebb358/sse_starlette-3.0.2.tar.gz", hash = "sha256:ccd60b5765ebb3584d0de2d7a6e4f745672581de4f5005ab31c3a25d10b52b3a" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/16b/7cbfddbcd4eac/sse_starlette-3.0.2-py3-none-any.whl", hash = "sha256:16b7cbfddbcd4eaca11f7b586f3b8a080f1afe952c15813455b162edea619e5a" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "starlette"
|
||||
version = "0.48.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/7e8/cee469a8ab235/starlette-0.48.0.tar.gz", hash = "sha256:7e8cee469a8ab2352911528110ce9088fdc6a37d9876926e73da7ce4aa4c7a46" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/076/4ca97b0975825/starlette-0.48.0-py3-none-any.whl", hash = "sha256:0764ca97b097582558ecb498132ed0c7d942f233f365b86ba37770e026510659" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typer"
|
||||
version = "0.19.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "click" },
|
||||
{ name = "rich" },
|
||||
{ name = "shellingham" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/9ad/824308ded0ad0/typer-0.19.2.tar.gz", hash = "sha256:9ad824308ded0ad06cc716434705f691d4ee0bfd0fb081839d2e426860e7fdca" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/755/e7e19670ffad8/typer-0.19.2-py3-none-any.whl", hash = "sha256:755e7e19670ffad8283db353267cb81ef252f595aa6834a0d1ca9312d9326cb9" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.15.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/0ce/a48d173cc12fa/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/f0f/a19c6845758ab/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-inspection"
|
||||
version = "0.4.2"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/ba5/61c48a67c5958/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/4ed/1cacbdc298c22/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uvicorn"
|
||||
version = "0.37.0"
|
||||
source = { registry = "http://devpi.iepai.fun/lzwc/dev/+simple/" }
|
||||
dependencies = [
|
||||
{ name = "click" },
|
||||
{ name = "h11" },
|
||||
]
|
||||
sdist = { url = "http://devpi.iepai.fun/root/pypi/+f/411/5c8add6d3fd53/uvicorn-0.37.0.tar.gz", hash = "sha256:4115c8add6d3fd536c8ee77f0e14a7fd2ebba939fed9b02583a97f80648f9e13" }
|
||||
wheels = [
|
||||
{ url = "http://devpi.iepai.fun/root/pypi/+f/913/b2b8867234373/uvicorn-0.37.0-py3-none-any.whl", hash = "sha256:913b2b88672343739927ce381ff9e2ad62541f9f8289664fa1d1d3803fa2ce6c" },
|
||||
]
|
||||
13
lzwcai_mcpskills_analyzeOrder/main.py
Normal file
13
lzwcai_mcpskills_analyzeOrder/main.py
Normal file
@@ -0,0 +1,13 @@
|
||||
"""
|
||||
Entry point for lzwcai-mcpskills-analyzeOrder
|
||||
Runs the MCP server for SQL query execution
|
||||
"""
|
||||
import os
|
||||
|
||||
os.environ["databaseId"] = "19"
|
||||
os.environ["datasourceId"] = "19"
|
||||
os.environ["backendBaseUrl"] = "http://192.168.11.24:8088"
|
||||
if __name__ == "__main__":
|
||||
# Import and run the actual MCP server
|
||||
from lzwcai_mcpskills_analyzeOrder.main import main
|
||||
main()
|
||||
1094
lzwcai_mcpskills_analyzeOrder/manufacturing_data_model_v1.0.0.md
Normal file
1094
lzwcai_mcpskills_analyzeOrder/manufacturing_data_model_v1.0.0.md
Normal file
File diff suppressed because it is too large
Load Diff
35
lzwcai_mcpskills_analyzeOrder/pyproject.toml
Normal file
35
lzwcai_mcpskills_analyzeOrder/pyproject.toml
Normal file
@@ -0,0 +1,35 @@
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "lzwcai-mcpskills-analyzeOrder"
|
||||
version = "0.1.12"
|
||||
description = "MCP server for executing business SQL queries with dynamic tool generation"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13"
|
||||
license = {text = "MIT"}
|
||||
authors = [
|
||||
{name = "lzwcai", email = "your-email@example.com"},
|
||||
]
|
||||
keywords = ["mcp", "sql", "executor", "server"]
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.13",
|
||||
]
|
||||
dependencies = [
|
||||
"httpx>=0.28.1",
|
||||
"mcp[cli]>=1.10.1",
|
||||
"pypinyin>=0.53.0",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
lzwcai-mcpskills-analyzeOrder = "lzwcai_mcpskills_analyzeOrder.main:main"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["lzwcai_mcpskills_analyzeOrder"]
|
||||
|
||||
[tool.hatch.build.targets.wheel.force-include]
|
||||
"lzwcai_mcpskills_analyzeOrder/businessQueries.json" = "lzwcai_mcpskills_analyzeOrder/businessQueries.json"
|
||||
317
lzwcai_mcpskills_analyzeOrder/一页式决策简报.sql
Normal file
317
lzwcai_mcpskills_analyzeOrder/一页式决策简报.sql
Normal file
@@ -0,0 +1,317 @@
|
||||
-- =====================================================
|
||||
-- 一页式决策简报SQL
|
||||
-- One-Page Decision Brief
|
||||
-- 数据库: PostgreSQL
|
||||
-- =====================================================
|
||||
|
||||
-- =====================================================
|
||||
-- 主查询:一页式决策简报
|
||||
-- =====================================================
|
||||
WITH
|
||||
sales_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_orders,
|
||||
SUM(deal_amount) AS total_sales_amount,
|
||||
AVG(deal_amount) AS avg_order_amount,
|
||||
SUM(CASE WHEN payment_status = 'PAID' THEN 1 ELSE 0 END) AS paid_orders,
|
||||
SUM(CASE WHEN payment_status = 'PARTIAL' THEN 1 ELSE 0 END) AS partial_orders,
|
||||
SUM(CASE WHEN payment_status = 'UNPAID' THEN 1 ELSE 0 END) AS unpaid_orders,
|
||||
SUM(CASE WHEN payment_status = 'PAID' THEN deal_amount ELSE 0 END) AS paid_amount,
|
||||
SUM(CASE WHEN payment_status = 'UNPAID' THEN deal_amount ELSE 0 END) AS unpaid_amount
|
||||
FROM fact_sales_order
|
||||
),
|
||||
|
||||
production_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_work_orders,
|
||||
SUM(planned_qty) AS total_planned_qty,
|
||||
SUM(completed_qty) AS total_completed_qty,
|
||||
SUM(CASE WHEN status = 'CLOSED' THEN 1 ELSE 0 END) AS closed_orders,
|
||||
SUM(CASE WHEN status = 'STARTED' THEN 1 ELSE 0 END) AS started_orders,
|
||||
SUM(CASE WHEN status = 'OPEN' THEN 1 ELSE 0 END) AS open_orders
|
||||
FROM fact_work_order
|
||||
),
|
||||
|
||||
ar_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS receipt_count,
|
||||
SUM(amount) AS total_receipt_amount,
|
||||
AVG(amount) AS avg_receipt_amount
|
||||
FROM fact_ar_receipt
|
||||
),
|
||||
|
||||
ap_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS payment_count,
|
||||
SUM(amount) AS total_payment_amount,
|
||||
AVG(amount) AS avg_payment_amount
|
||||
FROM fact_ap_payment
|
||||
),
|
||||
|
||||
invoice_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS invoice_count,
|
||||
SUM(invoice_amount) AS total_invoice_amount,
|
||||
AVG(invoice_amount) AS avg_invoice_amount
|
||||
FROM fact_invoice
|
||||
),
|
||||
|
||||
return_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS return_count,
|
||||
SUM(amount) AS total_return_amount,
|
||||
AVG(amount) AS avg_return_amount
|
||||
FROM fact_sales_return
|
||||
),
|
||||
|
||||
shipment_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS shipment_count,
|
||||
SUM(amount) AS total_shipment_amount,
|
||||
AVG(amount) AS avg_shipment_amount
|
||||
FROM fact_sales_shipment
|
||||
),
|
||||
|
||||
purchase_summary AS (
|
||||
SELECT COUNT(*) AS purchase_order_count
|
||||
FROM fact_purchase_order
|
||||
),
|
||||
|
||||
quality_summary AS (
|
||||
SELECT
|
||||
COUNT(*) AS inspection_count,
|
||||
SUM(pass_qty) AS total_pass_qty,
|
||||
SUM(fail_qty) AS total_fail_qty
|
||||
FROM fact_quality_inspection
|
||||
),
|
||||
|
||||
labor_summary AS (
|
||||
SELECT
|
||||
COUNT(DISTINCT worker_name) AS worker_count,
|
||||
SUM(duration_minutes) AS total_work_minutes,
|
||||
SUM(report_qty) AS total_output_qty
|
||||
FROM fact_labor_report
|
||||
),
|
||||
|
||||
scrap_summary AS (
|
||||
SELECT COUNT(*) AS scrap_count
|
||||
FROM fact_scrap
|
||||
)
|
||||
|
||||
SELECT
|
||||
'Decision Brief' AS report_title,
|
||||
CURRENT_DATE AS report_date,
|
||||
|
||||
-- 销售板块
|
||||
ss.total_orders AS sales_order_count,
|
||||
ROUND(ss.total_sales_amount, 2) AS total_sales_amount,
|
||||
ROUND(ss.avg_order_amount, 2) AS avg_order_amount,
|
||||
ss.paid_orders AS paid_order_count,
|
||||
ss.partial_orders AS partial_paid_count,
|
||||
ss.unpaid_orders AS unpaid_order_count,
|
||||
ROUND(ss.paid_orders * 100.0 / NULLIF(ss.total_orders, 0), 1) AS payment_completion_rate,
|
||||
ROUND(ss.unpaid_amount, 2) AS receivable_amount,
|
||||
|
||||
-- 生产板块
|
||||
ps.total_work_orders AS work_order_count,
|
||||
ps.closed_orders AS completed_work_orders,
|
||||
ps.started_orders AS in_progress_work_orders,
|
||||
ps.open_orders AS pending_work_orders,
|
||||
ROUND(ps.total_planned_qty, 0) AS planned_qty,
|
||||
ROUND(ps.total_completed_qty, 0) AS completed_qty,
|
||||
ROUND(ps.total_completed_qty * 100.0 / NULLIF(ps.total_planned_qty, 0), 1) AS production_completion_rate,
|
||||
|
||||
-- 人效板块
|
||||
ls.worker_count AS active_worker_count,
|
||||
ROUND(ls.total_work_minutes / 60.0, 1) AS total_work_hours,
|
||||
ROUND(ls.total_output_qty, 0) AS total_output,
|
||||
ROUND(ls.total_output_qty / NULLIF(ls.worker_count, 0), 1) AS output_per_worker,
|
||||
ROUND(ls.total_output_qty / NULLIF(ls.total_work_minutes / 60.0, 0), 2) AS output_per_hour,
|
||||
|
||||
-- 质量板块
|
||||
qs.inspection_count AS qc_batch_count,
|
||||
ROUND(qs.total_pass_qty, 0) AS pass_qty,
|
||||
ROUND(qs.total_fail_qty, 0) AS fail_qty,
|
||||
ROUND(qs.total_pass_qty * 100.0 / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0), 2) AS pass_rate,
|
||||
ROUND(qs.total_fail_qty * 100.0 / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0), 2) AS defect_rate,
|
||||
scr.scrap_count AS scrap_record_count,
|
||||
|
||||
-- 财务板块
|
||||
ar.receipt_count AS ar_receipt_count,
|
||||
ROUND(ar.total_receipt_amount, 2) AS total_ar_amount,
|
||||
ap.payment_count AS ap_payment_count,
|
||||
ROUND(ap.total_payment_amount, 2) AS total_ap_amount,
|
||||
ROUND(ar.total_receipt_amount - ap.total_payment_amount, 2) AS net_cash_flow,
|
||||
inv.invoice_count AS invoice_count,
|
||||
ROUND(inv.total_invoice_amount, 2) AS total_invoice_amount,
|
||||
|
||||
-- 物流板块
|
||||
sh.shipment_count AS shipment_count,
|
||||
ROUND(sh.total_shipment_amount, 2) AS total_shipment_amount,
|
||||
pur.purchase_order_count AS purchase_order_count,
|
||||
|
||||
-- 售后板块
|
||||
ret.return_count AS return_count,
|
||||
ROUND(ret.total_return_amount, 2) AS total_return_amount,
|
||||
ROUND(ret.total_return_amount * 100.0 / NULLIF(ss.total_sales_amount, 0), 2) AS return_rate,
|
||||
|
||||
-- 综合健康度评估
|
||||
CASE
|
||||
WHEN (qs.total_pass_qty * 100.0 / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0)) >= 95
|
||||
AND (ps.total_completed_qty * 100.0 / NULLIF(ps.total_planned_qty, 0)) >= 80
|
||||
AND (ret.total_return_amount * 100.0 / NULLIF(ss.total_sales_amount, 0)) < 5
|
||||
THEN 'EXCELLENT'
|
||||
WHEN (qs.total_pass_qty * 100.0 / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0)) >= 90
|
||||
AND (ps.total_completed_qty * 100.0 / NULLIF(ps.total_planned_qty, 0)) >= 60
|
||||
AND (ret.total_return_amount * 100.0 / NULLIF(ss.total_sales_amount, 0)) < 10
|
||||
THEN 'GOOD'
|
||||
ELSE 'WARNING'
|
||||
END AS health_status
|
||||
|
||||
FROM sales_summary ss
|
||||
CROSS JOIN production_summary ps
|
||||
CROSS JOIN ar_summary ar
|
||||
CROSS JOIN ap_summary ap
|
||||
CROSS JOIN invoice_summary inv
|
||||
CROSS JOIN return_summary ret
|
||||
CROSS JOIN shipment_summary sh
|
||||
CROSS JOIN purchase_summary pur
|
||||
CROSS JOIN quality_summary qs
|
||||
CROSS JOIN labor_summary ls
|
||||
CROSS JOIN scrap_summary scr;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询1:本月 vs 上月对比分析
|
||||
-- =====================================================
|
||||
WITH
|
||||
current_month AS (
|
||||
SELECT
|
||||
'current_month' AS period,
|
||||
COUNT(*) AS order_count,
|
||||
SUM(deal_amount) AS sales_amount
|
||||
FROM fact_sales_order
|
||||
WHERE DATE_TRUNC('month', order_date_utc::timestamp) = DATE_TRUNC('month', CURRENT_DATE)
|
||||
),
|
||||
last_month AS (
|
||||
SELECT
|
||||
'last_month' AS period,
|
||||
COUNT(*) AS order_count,
|
||||
SUM(deal_amount) AS sales_amount
|
||||
FROM fact_sales_order
|
||||
WHERE DATE_TRUNC('month', order_date_utc::timestamp) = DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
|
||||
)
|
||||
SELECT
|
||||
period,
|
||||
order_count,
|
||||
ROUND(sales_amount, 2) AS sales_amount
|
||||
FROM current_month
|
||||
UNION ALL
|
||||
SELECT * FROM last_month;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询2:客户贡献度TOP10
|
||||
-- =====================================================
|
||||
SELECT
|
||||
c.customer_name,
|
||||
COUNT(so.sales_order_id) AS order_count,
|
||||
ROUND(SUM(so.deal_amount), 2) AS total_order_amount,
|
||||
ROUND(SUM(so.deal_amount) * 100.0 / (SELECT SUM(deal_amount) FROM fact_sales_order), 2) AS contribution_rate,
|
||||
SUM(CASE WHEN so.payment_status = 'PAID' THEN 1 ELSE 0 END) AS paid_order_count,
|
||||
SUM(CASE WHEN so.payment_status = 'UNPAID' THEN so.deal_amount ELSE 0 END) AS receivable_amount
|
||||
FROM fact_sales_order so
|
||||
INNER JOIN dim_customer c ON so.customer_id = c.customer_id AND c.is_current = 't'
|
||||
GROUP BY c.customer_name
|
||||
ORDER BY total_order_amount DESC
|
||||
LIMIT 10;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询3:产品类别业绩分析
|
||||
-- =====================================================
|
||||
SELECT
|
||||
p.product_category,
|
||||
COUNT(DISTINCT wo.work_order_id) AS work_order_count,
|
||||
ROUND(SUM(wo.planned_qty), 0) AS planned_qty,
|
||||
ROUND(SUM(wo.completed_qty), 0) AS completed_qty,
|
||||
ROUND(SUM(wo.completed_qty) * 100.0 / NULLIF(SUM(wo.planned_qty), 0), 1) AS completion_rate,
|
||||
COUNT(DISTINCT lr.worker_name) AS worker_count,
|
||||
ROUND(SUM(lr.duration_minutes) / 60.0, 1) AS total_work_hours
|
||||
FROM dim_product p
|
||||
LEFT JOIN fact_work_order wo ON p.product_id = wo.product_id
|
||||
LEFT JOIN fact_labor_report lr ON p.product_id = lr.product_id
|
||||
WHERE p.is_current = 't'
|
||||
GROUP BY p.product_category
|
||||
ORDER BY completed_qty DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询4:关键预警指标
|
||||
-- =====================================================
|
||||
SELECT
|
||||
'warning_metrics' AS category,
|
||||
'unpaid_order_amount' AS metric_name,
|
||||
ROUND(SUM(CASE WHEN payment_status = 'UNPAID' THEN deal_amount ELSE 0 END), 2) AS current_value,
|
||||
50000 AS threshold,
|
||||
CASE
|
||||
WHEN SUM(CASE WHEN payment_status = 'UNPAID' THEN deal_amount ELSE 0 END) > 50000
|
||||
THEN 'EXCEEDED' ELSE 'NORMAL'
|
||||
END AS status
|
||||
FROM fact_sales_order
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'warning_metrics',
|
||||
'defect_rate_pct',
|
||||
ROUND(SUM(fail_qty) * 100.0 / NULLIF(SUM(pass_qty) + SUM(fail_qty), 0), 2),
|
||||
5,
|
||||
CASE
|
||||
WHEN SUM(fail_qty) * 100.0 / NULLIF(SUM(pass_qty) + SUM(fail_qty), 0) > 5
|
||||
THEN 'EXCEEDED' ELSE 'NORMAL'
|
||||
END
|
||||
FROM fact_quality_inspection
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'warning_metrics',
|
||||
'production_completion_rate',
|
||||
ROUND(SUM(completed_qty) * 100.0 / NULLIF(SUM(planned_qty), 0), 2),
|
||||
70,
|
||||
CASE
|
||||
WHEN SUM(completed_qty) * 100.0 / NULLIF(SUM(planned_qty), 0) < 70
|
||||
THEN 'LOW' ELSE 'NORMAL'
|
||||
END
|
||||
FROM fact_work_order
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'warning_metrics',
|
||||
'return_rate_pct',
|
||||
ROUND((SELECT SUM(amount) FROM fact_sales_return) * 100.0 /
|
||||
NULLIF((SELECT SUM(deal_amount) FROM fact_sales_order), 0), 2),
|
||||
5,
|
||||
CASE
|
||||
WHEN (SELECT SUM(amount) FROM fact_sales_return) * 100.0 /
|
||||
NULLIF((SELECT SUM(deal_amount) FROM fact_sales_order), 0) > 5
|
||||
THEN 'EXCEEDED' ELSE 'NORMAL'
|
||||
END;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询5:月度趋势汇总
|
||||
-- =====================================================
|
||||
SELECT
|
||||
TO_CHAR(DATE_TRUNC('month', order_date_utc::timestamp), 'YYYY-MM') AS month,
|
||||
COUNT(*) AS order_count,
|
||||
ROUND(SUM(deal_amount), 2) AS sales_amount,
|
||||
ROUND(AVG(deal_amount), 2) AS avg_order_amount,
|
||||
SUM(CASE WHEN payment_status = 'PAID' THEN 1 ELSE 0 END) AS paid_count,
|
||||
SUM(CASE WHEN payment_status = 'UNPAID' THEN 1 ELSE 0 END) AS unpaid_count
|
||||
FROM fact_sales_order
|
||||
GROUP BY DATE_TRUNC('month', order_date_utc::timestamp)
|
||||
ORDER BY month DESC
|
||||
LIMIT 12;
|
||||
193
lzwcai_mcpskills_analyzeOrder/人效产值损耗三维模型仪表盘.sql
Normal file
193
lzwcai_mcpskills_analyzeOrder/人效产值损耗三维模型仪表盘.sql
Normal file
@@ -0,0 +1,193 @@
|
||||
-- =====================================================
|
||||
-- 人效-产值-损耗三维模型仪表盘SQL
|
||||
-- Efficiency-Output-Loss 3D Model Dashboard
|
||||
-- 数据库: PostgreSQL
|
||||
-- 维度: 产品类别(化工/机械/电子)作为部门维度
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 部门级综合仪表盘(主查询)
|
||||
WITH
|
||||
labor_stats AS (
|
||||
SELECT
|
||||
p.product_category AS department,
|
||||
COUNT(DISTINCT lr.worker_name) AS worker_count,
|
||||
SUM(lr.duration_minutes) AS total_work_minutes,
|
||||
SUM(lr.report_qty) AS total_output_qty,
|
||||
COUNT(DISTINCT lr.work_order_number) AS work_order_count
|
||||
FROM fact_labor_report lr
|
||||
INNER JOIN dim_product p ON lr.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY p.product_category
|
||||
),
|
||||
|
||||
work_order_stats AS (
|
||||
SELECT
|
||||
p.product_category AS department,
|
||||
COUNT(*) AS total_work_orders,
|
||||
SUM(wo.planned_qty) AS total_planned_qty,
|
||||
SUM(wo.completed_qty) AS total_completed_qty,
|
||||
SUM(CASE WHEN wo.status = 'CLOSED' THEN 1 ELSE 0 END) AS closed_orders,
|
||||
SUM(CASE WHEN wo.status = 'STARTED' THEN 1 ELSE 0 END) AS started_orders,
|
||||
SUM(CASE WHEN wo.status = 'OPEN' THEN 1 ELSE 0 END) AS open_orders
|
||||
FROM fact_work_order wo
|
||||
INNER JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY p.product_category
|
||||
),
|
||||
|
||||
quality_stats AS (
|
||||
SELECT
|
||||
p.product_category AS department,
|
||||
SUM(qi.pass_qty) AS total_pass_qty,
|
||||
SUM(qi.fail_qty) AS total_fail_qty,
|
||||
COUNT(*) AS inspection_count
|
||||
FROM fact_quality_inspection qi
|
||||
INNER JOIN dim_product p ON qi.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY p.product_category
|
||||
),
|
||||
|
||||
sales_stats AS (
|
||||
SELECT
|
||||
AVG(deal_amount) AS avg_order_amount,
|
||||
SUM(deal_amount) AS total_sales_amount,
|
||||
COUNT(*) AS order_count
|
||||
FROM fact_sales_order
|
||||
),
|
||||
|
||||
scrap_stats AS (
|
||||
SELECT COUNT(*) AS total_scrap_count
|
||||
FROM fact_scrap
|
||||
)
|
||||
|
||||
SELECT
|
||||
ls.department,
|
||||
|
||||
-- 人效维度
|
||||
ls.worker_count,
|
||||
ROUND(ls.total_work_minutes / 60.0, 2) AS total_work_hours,
|
||||
ls.total_output_qty,
|
||||
ROUND(ls.total_output_qty / NULLIF(ls.worker_count, 0), 2) AS output_per_worker,
|
||||
ROUND(ls.total_output_qty / NULLIF(ls.total_work_minutes / 60.0, 0), 2) AS output_per_hour,
|
||||
ROUND(
|
||||
ls.total_output_qty / NULLIF(ls.worker_count, 0) / NULLIF(ls.total_work_minutes / 60.0 / ls.worker_count, 0),
|
||||
2
|
||||
) AS efficiency_index,
|
||||
|
||||
-- 产值维度
|
||||
ws.total_planned_qty AS planned_qty,
|
||||
ws.total_completed_qty AS completed_qty,
|
||||
ROUND(ws.total_completed_qty / NULLIF(ws.total_planned_qty, 0) * 100, 2) AS plan_completion_rate,
|
||||
ROUND(ws.total_completed_qty * ss.avg_order_amount / 100, 2) AS estimated_output_value,
|
||||
ROUND(ws.total_completed_qty * ss.avg_order_amount / 100 / NULLIF(ls.worker_count, 0), 2) AS output_value_per_worker,
|
||||
|
||||
-- 损耗维度
|
||||
qs.total_pass_qty AS qc_pass_qty,
|
||||
qs.total_fail_qty AS qc_fail_qty,
|
||||
ROUND(qs.total_fail_qty / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0) * 100, 2) AS defect_rate,
|
||||
ROUND((ws.total_planned_qty - ws.total_completed_qty) / NULLIF(ws.total_planned_qty, 0) * 100, 2) AS production_loss_rate,
|
||||
|
||||
-- 综合评分
|
||||
ROUND(
|
||||
(ls.total_output_qty / NULLIF(ls.worker_count, 0) / NULLIF(ls.total_work_minutes / 60.0 / ls.worker_count, 0)) * 0.4 +
|
||||
(ws.total_completed_qty / NULLIF(ws.total_planned_qty, 0) * 100) * 0.35 +
|
||||
(qs.total_pass_qty / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0) * 100) * 0.25,
|
||||
2
|
||||
) AS performance_score,
|
||||
|
||||
-- 预警等级
|
||||
CASE
|
||||
WHEN (qs.total_fail_qty / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0) * 100) >= 10
|
||||
OR (ws.total_completed_qty / NULLIF(ws.total_planned_qty, 0) * 100) < 50
|
||||
THEN 'RED'
|
||||
WHEN (qs.total_fail_qty / NULLIF(qs.total_pass_qty + qs.total_fail_qty, 0) * 100) >= 5
|
||||
OR (ws.total_completed_qty / NULLIF(ws.total_planned_qty, 0) * 100) < 70
|
||||
THEN 'YELLOW'
|
||||
ELSE 'GREEN'
|
||||
END AS warning_level
|
||||
|
||||
FROM labor_stats ls
|
||||
LEFT JOIN work_order_stats ws ON ls.department = ws.department
|
||||
LEFT JOIN quality_stats qs ON ls.department = qs.department
|
||||
CROSS JOIN sales_stats ss
|
||||
CROSS JOIN scrap_stats scr
|
||||
ORDER BY performance_score DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 人员级明细报表
|
||||
-- =====================================================
|
||||
SELECT
|
||||
lr.worker_name,
|
||||
p.product_category AS department,
|
||||
COUNT(DISTINCT lr.work_order_number) AS work_order_count,
|
||||
SUM(lr.duration_minutes) AS total_work_minutes,
|
||||
ROUND(SUM(lr.duration_minutes) / 60.0, 2) AS total_work_hours,
|
||||
SUM(lr.report_qty) AS total_output,
|
||||
ROUND(SUM(lr.report_qty) / NULLIF(SUM(lr.duration_minutes) / 60.0, 0), 2) AS output_per_hour,
|
||||
RANK() OVER (PARTITION BY p.product_category ORDER BY SUM(lr.report_qty) DESC) AS dept_output_rank
|
||||
FROM fact_labor_report lr
|
||||
INNER JOIN dim_product p ON lr.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY lr.worker_name, p.product_category
|
||||
ORDER BY p.product_category, total_output DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 月度趋势分析
|
||||
-- =====================================================
|
||||
SELECT
|
||||
TO_CHAR(DATE_TRUNC('month', lr.event_time_utc::timestamp), 'YYYY-MM') AS month,
|
||||
p.product_category AS department,
|
||||
COUNT(DISTINCT lr.worker_name) AS active_worker_count,
|
||||
SUM(lr.duration_minutes) AS total_work_minutes,
|
||||
SUM(lr.report_qty) AS total_output,
|
||||
ROUND(SUM(lr.report_qty) / NULLIF(COUNT(DISTINCT lr.worker_name), 0), 2) AS output_per_worker,
|
||||
ROUND(SUM(lr.report_qty) / NULLIF(SUM(lr.duration_minutes) / 60.0, 0), 2) AS output_per_hour
|
||||
FROM fact_labor_report lr
|
||||
INNER JOIN dim_product p ON lr.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY DATE_TRUNC('month', lr.event_time_utc::timestamp), p.product_category
|
||||
ORDER BY month DESC, p.product_category;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 产品级损耗分析
|
||||
-- =====================================================
|
||||
SELECT
|
||||
p.product_category AS department,
|
||||
p.product_name,
|
||||
p.product_code,
|
||||
COALESCE(SUM(qi.pass_qty), 0) AS pass_qty,
|
||||
COALESCE(SUM(qi.fail_qty), 0) AS fail_qty,
|
||||
ROUND(
|
||||
COALESCE(SUM(qi.fail_qty), 0) /
|
||||
NULLIF(COALESCE(SUM(qi.pass_qty), 0) + COALESCE(SUM(qi.fail_qty), 0), 0) * 100,
|
||||
2
|
||||
) AS defect_rate,
|
||||
CASE
|
||||
WHEN COALESCE(SUM(qi.fail_qty), 0) /
|
||||
NULLIF(COALESCE(SUM(qi.pass_qty), 0) + COALESCE(SUM(qi.fail_qty), 0), 0) * 100 >= 10
|
||||
THEN 'HIGH'
|
||||
WHEN COALESCE(SUM(qi.fail_qty), 0) /
|
||||
NULLIF(COALESCE(SUM(qi.pass_qty), 0) + COALESCE(SUM(qi.fail_qty), 0), 0) * 100 >= 5
|
||||
THEN 'MEDIUM'
|
||||
ELSE 'LOW'
|
||||
END AS loss_level
|
||||
FROM dim_product p
|
||||
LEFT JOIN fact_quality_inspection qi ON p.product_id = qi.product_id
|
||||
WHERE p.is_current = 't'
|
||||
GROUP BY p.product_category, p.product_name, p.product_code
|
||||
ORDER BY defect_rate DESC NULLS LAST;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 5. 工单完成率分析
|
||||
-- =====================================================
|
||||
SELECT
|
||||
p.product_category AS department,
|
||||
wo.status,
|
||||
COUNT(*) AS order_count,
|
||||
SUM(wo.planned_qty) AS total_planned,
|
||||
SUM(wo.completed_qty) AS total_completed,
|
||||
ROUND(SUM(wo.completed_qty) / NULLIF(SUM(wo.planned_qty), 0) * 100, 2) AS completion_rate,
|
||||
ROUND(AVG(wo.completed_qty / NULLIF(wo.planned_qty, 0) * 100), 2) AS avg_completion_rate
|
||||
FROM fact_work_order wo
|
||||
INNER JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY p.product_category, wo.status
|
||||
ORDER BY p.product_category, wo.status;
|
||||
416
lzwcai_mcpskills_analyzeOrder/供应链风险预警.sql
Normal file
416
lzwcai_mcpskills_analyzeOrder/供应链风险预警.sql
Normal file
@@ -0,0 +1,416 @@
|
||||
-- =====================================================
|
||||
-- 供应链风险预警SQL
|
||||
-- Supply Chain Risk Warning
|
||||
-- 数据库: PostgreSQL
|
||||
-- =====================================================
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 供应商历史交期表现分析
|
||||
-- =====================================================
|
||||
WITH supplier_delivery AS (
|
||||
SELECT
|
||||
po.supplier_id,
|
||||
COUNT(*) AS order_count,
|
||||
COUNT(pr.purchase_receipt_id) AS receipt_count,
|
||||
AVG(
|
||||
CASE WHEN pr.doc_date_utc IS NOT NULL AND po.doc_date_utc IS NOT NULL
|
||||
THEN EXTRACT(DAY FROM pr.doc_date_utc::timestamp - po.doc_date_utc::timestamp)
|
||||
ELSE NULL END
|
||||
) AS avg_delivery_days,
|
||||
MAX(
|
||||
CASE WHEN pr.doc_date_utc IS NOT NULL AND po.doc_date_utc IS NOT NULL
|
||||
THEN EXTRACT(DAY FROM pr.doc_date_utc::timestamp - po.doc_date_utc::timestamp)
|
||||
ELSE NULL END
|
||||
) AS max_delivery_days,
|
||||
STDDEV(
|
||||
CASE WHEN pr.doc_date_utc IS NOT NULL AND po.doc_date_utc IS NOT NULL
|
||||
THEN EXTRACT(DAY FROM pr.doc_date_utc::timestamp - po.doc_date_utc::timestamp)
|
||||
ELSE NULL END
|
||||
) AS stddev_delivery_days
|
||||
FROM fact_purchase_order po
|
||||
LEFT JOIN fact_purchase_receipt pr ON po.supplier_id = pr.supplier_id
|
||||
GROUP BY po.supplier_id
|
||||
),
|
||||
|
||||
supplier_quality AS (
|
||||
SELECT
|
||||
pr.supplier_id,
|
||||
COUNT(pr.purchase_receipt_id) AS total_receipts,
|
||||
SUM(pr.receipt_qty_total) AS total_qty,
|
||||
SUM(pr.amount) AS total_amount
|
||||
FROM fact_purchase_receipt pr
|
||||
GROUP BY pr.supplier_id
|
||||
),
|
||||
|
||||
supplier_returns AS (
|
||||
SELECT
|
||||
pret.supplier_id,
|
||||
COUNT(*) AS return_count,
|
||||
SUM(CASE WHEN pret.return_reason = '损坏' THEN 1 ELSE 0 END) AS damage_count
|
||||
FROM fact_purchase_return pret
|
||||
GROUP BY pret.supplier_id
|
||||
),
|
||||
|
||||
supplier_quality_rate AS (
|
||||
SELECT
|
||||
sq.supplier_id,
|
||||
sq.total_receipts,
|
||||
sq.total_qty,
|
||||
sq.total_amount,
|
||||
COALESCE(sr.return_count, 0) AS return_count,
|
||||
COALESCE(sr.damage_count, 0) AS damage_count,
|
||||
CASE WHEN sq.total_receipts > 0
|
||||
THEN (sq.total_receipts - COALESCE(sr.return_count, 0)) * 100.0 / sq.total_receipts
|
||||
ELSE 100 END AS quality_rate
|
||||
FROM supplier_quality sq
|
||||
LEFT JOIN supplier_returns sr ON sq.supplier_id = sr.supplier_id
|
||||
),
|
||||
|
||||
supplier_risk AS (
|
||||
SELECT
|
||||
s.supplier_id,
|
||||
s.supplier_name,
|
||||
s.supplier_category,
|
||||
COALESCE(sd.order_count, 0) AS order_count,
|
||||
COALESCE(sd.receipt_count, 0) AS receipt_count,
|
||||
ROUND(COALESCE(sd.avg_delivery_days, 0), 1) AS avg_delivery_days,
|
||||
ROUND(COALESCE(sd.max_delivery_days, 0), 1) AS max_delivery_days,
|
||||
ROUND(COALESCE(sd.stddev_delivery_days, 0), 1) AS delivery_volatility,
|
||||
COALESCE(sqr.total_receipts, 0) AS total_receipts,
|
||||
COALESCE(sqr.return_count, 0) AS return_count,
|
||||
ROUND(COALESCE(sqr.quality_rate, 100), 1) AS quality_rate,
|
||||
CASE
|
||||
WHEN COALESCE(sd.avg_delivery_days, 0) > 60 THEN 40
|
||||
WHEN COALESCE(sd.avg_delivery_days, 0) > 45 THEN 30
|
||||
WHEN COALESCE(sd.avg_delivery_days, 0) > 30 THEN 20
|
||||
ELSE 10
|
||||
END +
|
||||
CASE
|
||||
WHEN COALESCE(sd.stddev_delivery_days, 0) > 20 THEN 30
|
||||
WHEN COALESCE(sd.stddev_delivery_days, 0) > 10 THEN 20
|
||||
ELSE 10
|
||||
END AS delivery_risk_score,
|
||||
CASE
|
||||
WHEN COALESCE(sqr.quality_rate, 100) < 80 THEN 50
|
||||
WHEN COALESCE(sqr.quality_rate, 100) < 90 THEN 30
|
||||
WHEN COALESCE(sqr.quality_rate, 100) < 95 THEN 15
|
||||
ELSE 5
|
||||
END AS quality_risk_score
|
||||
FROM dim_supplier s
|
||||
LEFT JOIN supplier_delivery sd ON s.supplier_id = sd.supplier_id
|
||||
LEFT JOIN supplier_quality_rate sqr ON s.supplier_id = sqr.supplier_id
|
||||
WHERE s.is_current = 't'
|
||||
),
|
||||
|
||||
supplier_risk_level AS (
|
||||
SELECT
|
||||
*,
|
||||
delivery_risk_score + quality_risk_score AS total_risk_score,
|
||||
CASE
|
||||
WHEN delivery_risk_score + quality_risk_score >= 80 THEN 'HIGH'
|
||||
WHEN delivery_risk_score + quality_risk_score >= 50 THEN 'MEDIUM'
|
||||
ELSE 'LOW'
|
||||
END AS risk_level,
|
||||
CASE
|
||||
WHEN delivery_risk_score >= 50 AND quality_risk_score >= 30 THEN 'DELIVERY_AND_QUALITY'
|
||||
WHEN delivery_risk_score >= 50 THEN 'DELIVERY_ISSUE'
|
||||
WHEN quality_risk_score >= 30 THEN 'QUALITY_ISSUE'
|
||||
ELSE 'NORMAL'
|
||||
END AS risk_pattern
|
||||
FROM supplier_risk
|
||||
)
|
||||
|
||||
SELECT
|
||||
supplier_name,
|
||||
supplier_category,
|
||||
order_count,
|
||||
receipt_count,
|
||||
avg_delivery_days,
|
||||
max_delivery_days,
|
||||
delivery_volatility,
|
||||
total_receipts,
|
||||
return_count,
|
||||
quality_rate,
|
||||
delivery_risk_score,
|
||||
quality_risk_score,
|
||||
total_risk_score,
|
||||
risk_level,
|
||||
risk_pattern
|
||||
FROM supplier_risk_level
|
||||
ORDER BY total_risk_score DESC, supplier_name;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询1:高风险订单预警清单
|
||||
-- =====================================================
|
||||
WITH supplier_risk_info AS (
|
||||
SELECT
|
||||
s.supplier_id,
|
||||
s.supplier_name,
|
||||
s.supplier_category,
|
||||
COALESCE(
|
||||
(SELECT AVG(EXTRACT(DAY FROM pr.doc_date_utc::timestamp - po2.doc_date_utc::timestamp))
|
||||
FROM fact_purchase_order po2
|
||||
LEFT JOIN fact_purchase_receipt pr ON po2.supplier_id = pr.supplier_id
|
||||
WHERE po2.supplier_id = s.supplier_id
|
||||
AND pr.doc_date_utc IS NOT NULL), 0
|
||||
) AS avg_delivery_days,
|
||||
COALESCE(
|
||||
(SELECT COUNT(*) FROM fact_purchase_return pret WHERE pret.supplier_id = s.supplier_id), 0
|
||||
) AS return_count,
|
||||
COALESCE(
|
||||
(SELECT COUNT(*) FROM fact_purchase_receipt pr WHERE pr.supplier_id = s.supplier_id), 0
|
||||
) AS receipt_count
|
||||
FROM dim_supplier s
|
||||
WHERE s.is_current = 't'
|
||||
),
|
||||
order_risk AS (
|
||||
SELECT
|
||||
po.purchase_order_number,
|
||||
po.doc_date_utc::date AS order_date,
|
||||
sri.supplier_name,
|
||||
sri.supplier_category,
|
||||
ROUND(sri.avg_delivery_days, 1) AS supplier_avg_days,
|
||||
sri.return_count,
|
||||
sri.receipt_count,
|
||||
CASE WHEN sri.receipt_count > 0
|
||||
THEN ROUND((sri.receipt_count - sri.return_count) * 100.0 / sri.receipt_count, 1)
|
||||
ELSE 100 END AS quality_rate,
|
||||
EXTRACT(DAY FROM CURRENT_TIMESTAMP - po.doc_date_utc::timestamp) AS days_since_order,
|
||||
CASE
|
||||
WHEN sri.avg_delivery_days > 45 AND sri.return_count > 0 THEN 'HIGH'
|
||||
WHEN sri.avg_delivery_days > 45 OR sri.return_count > 0 THEN 'MEDIUM'
|
||||
ELSE 'LOW'
|
||||
END AS risk_level
|
||||
FROM fact_purchase_order po
|
||||
JOIN supplier_risk_info sri ON po.supplier_id = sri.supplier_id
|
||||
)
|
||||
SELECT
|
||||
purchase_order_number,
|
||||
order_date,
|
||||
supplier_name,
|
||||
supplier_category,
|
||||
supplier_avg_days,
|
||||
quality_rate,
|
||||
days_since_order,
|
||||
risk_level,
|
||||
CASE
|
||||
WHEN risk_level = 'HIGH' THEN 'IMMEDIATE_FOLLOWUP'
|
||||
WHEN risk_level = 'MEDIUM' THEN 'MONITOR'
|
||||
ELSE 'NORMAL'
|
||||
END AS action_required
|
||||
FROM order_risk
|
||||
WHERE risk_level IN ('HIGH', 'MEDIUM')
|
||||
ORDER BY
|
||||
CASE risk_level WHEN 'HIGH' THEN 1 WHEN 'MEDIUM' THEN 2 ELSE 3 END,
|
||||
days_since_order DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询2:供应商类别风险分布
|
||||
-- =====================================================
|
||||
WITH supplier_stats AS (
|
||||
SELECT
|
||||
s.supplier_category,
|
||||
COUNT(DISTINCT s.supplier_id) AS supplier_count,
|
||||
COUNT(DISTINCT po.purchase_order_id) AS order_count,
|
||||
COUNT(DISTINCT pr.purchase_receipt_id) AS receipt_count,
|
||||
COUNT(DISTINCT pret.purchase_return_id) AS return_count,
|
||||
SUM(pr.amount) AS total_amount
|
||||
FROM dim_supplier s
|
||||
LEFT JOIN fact_purchase_order po ON s.supplier_id = po.supplier_id
|
||||
LEFT JOIN fact_purchase_receipt pr ON s.supplier_id = pr.supplier_id
|
||||
LEFT JOIN fact_purchase_return pret ON s.supplier_id = pret.supplier_id
|
||||
WHERE s.is_current = 't'
|
||||
GROUP BY s.supplier_category
|
||||
)
|
||||
SELECT
|
||||
supplier_category,
|
||||
supplier_count,
|
||||
order_count,
|
||||
receipt_count,
|
||||
return_count,
|
||||
CASE WHEN receipt_count > 0
|
||||
THEN ROUND((receipt_count - return_count) * 100.0 / receipt_count, 1)
|
||||
ELSE 100 END AS quality_rate,
|
||||
ROUND(COALESCE(total_amount, 0), 2) AS purchase_amount,
|
||||
CASE
|
||||
WHEN receipt_count > 0 AND return_count * 100.0 / receipt_count > 10 THEN 'HIGH'
|
||||
WHEN receipt_count > 0 AND return_count * 100.0 / receipt_count > 5 THEN 'MEDIUM'
|
||||
ELSE 'LOW'
|
||||
END AS category_risk_level
|
||||
FROM supplier_stats
|
||||
ORDER BY return_count DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询3:近期交期异常趋势
|
||||
-- =====================================================
|
||||
WITH monthly_delivery AS (
|
||||
SELECT
|
||||
DATE_TRUNC('month', pr.doc_date_utc::timestamp)::date AS month_start,
|
||||
COUNT(*) AS receipt_count,
|
||||
AVG(EXTRACT(DAY FROM pr.doc_date_utc::timestamp - po.doc_date_utc::timestamp)) AS avg_delivery_days
|
||||
FROM fact_purchase_receipt pr
|
||||
JOIN fact_purchase_order po ON pr.supplier_id = po.supplier_id
|
||||
WHERE pr.doc_date_utc IS NOT NULL AND po.doc_date_utc IS NOT NULL
|
||||
GROUP BY DATE_TRUNC('month', pr.doc_date_utc::timestamp)
|
||||
),
|
||||
monthly_returns AS (
|
||||
SELECT
|
||||
DATE_TRUNC('month', pret.doc_date_utc::timestamp)::date AS month_start,
|
||||
COUNT(*) AS return_count
|
||||
FROM fact_purchase_return pret
|
||||
GROUP BY DATE_TRUNC('month', pret.doc_date_utc::timestamp)
|
||||
),
|
||||
monthly_combined AS (
|
||||
SELECT
|
||||
md.month_start,
|
||||
md.receipt_count,
|
||||
ROUND(md.avg_delivery_days, 1) AS avg_delivery_days,
|
||||
COALESCE(mr.return_count, 0) AS return_count
|
||||
FROM monthly_delivery md
|
||||
LEFT JOIN monthly_returns mr ON md.month_start = mr.month_start
|
||||
),
|
||||
with_trend AS (
|
||||
SELECT
|
||||
*,
|
||||
LAG(avg_delivery_days, 1) OVER (ORDER BY month_start) AS prev_avg_days,
|
||||
LAG(return_count, 1) OVER (ORDER BY month_start) AS prev_return_count
|
||||
FROM monthly_combined
|
||||
)
|
||||
SELECT
|
||||
month_start,
|
||||
receipt_count,
|
||||
avg_delivery_days,
|
||||
return_count,
|
||||
CASE WHEN receipt_count > 0
|
||||
THEN ROUND(return_count * 100.0 / receipt_count, 1)
|
||||
ELSE 0 END AS return_rate,
|
||||
CASE
|
||||
WHEN prev_avg_days IS NULL THEN 'NONE'
|
||||
WHEN avg_delivery_days > prev_avg_days * 1.1 THEN 'INCREASING'
|
||||
WHEN avg_delivery_days < prev_avg_days * 0.9 THEN 'DECREASING'
|
||||
ELSE 'STABLE'
|
||||
END AS delivery_trend,
|
||||
CASE
|
||||
WHEN prev_return_count IS NULL THEN 'NONE'
|
||||
WHEN return_count > prev_return_count THEN 'INCREASING'
|
||||
WHEN return_count < prev_return_count THEN 'DECREASING'
|
||||
ELSE 'STABLE'
|
||||
END AS return_trend
|
||||
FROM with_trend
|
||||
ORDER BY month_start DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询4:风险预警汇总看板
|
||||
-- =====================================================
|
||||
WITH risk_summary AS (
|
||||
SELECT
|
||||
s.supplier_id,
|
||||
s.supplier_name,
|
||||
COALESCE(
|
||||
(SELECT COUNT(*) FROM fact_purchase_return pret WHERE pret.supplier_id = s.supplier_id), 0
|
||||
) AS return_count,
|
||||
COALESCE(
|
||||
(SELECT COUNT(*) FROM fact_purchase_receipt pr WHERE pr.supplier_id = s.supplier_id), 0
|
||||
) AS receipt_count
|
||||
FROM dim_supplier s
|
||||
WHERE s.is_current = 't'
|
||||
),
|
||||
risk_counts AS (
|
||||
SELECT
|
||||
SUM(CASE WHEN receipt_count > 0 AND return_count * 100.0 / receipt_count > 10 THEN 1 ELSE 0 END) AS high_risk_suppliers,
|
||||
SUM(CASE WHEN receipt_count > 0 AND return_count * 100.0 / receipt_count BETWEEN 5 AND 10 THEN 1 ELSE 0 END) AS medium_risk_suppliers,
|
||||
SUM(CASE WHEN receipt_count = 0 OR return_count * 100.0 / receipt_count < 5 THEN 1 ELSE 0 END) AS low_risk_suppliers,
|
||||
COUNT(*) AS total_suppliers
|
||||
FROM risk_summary
|
||||
),
|
||||
order_stats AS (
|
||||
SELECT
|
||||
COUNT(*) AS pending_orders,
|
||||
COUNT(CASE WHEN EXTRACT(DAY FROM CURRENT_TIMESTAMP - doc_date_utc::timestamp) > 30 THEN 1 END) AS overdue_orders
|
||||
FROM fact_purchase_order
|
||||
),
|
||||
return_stats AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_returns,
|
||||
COUNT(CASE WHEN doc_date_utc::timestamp >= CURRENT_DATE - INTERVAL '30 days' THEN 1 END) AS recent_returns
|
||||
FROM fact_purchase_return
|
||||
)
|
||||
SELECT
|
||||
'high_risk_suppliers' AS metric_name,
|
||||
rc.high_risk_suppliers::text AS metric_value,
|
||||
CASE WHEN rc.high_risk_suppliers > 0 THEN 'ATTENTION_NEEDED' ELSE 'NORMAL' END AS status
|
||||
FROM risk_counts rc
|
||||
UNION ALL
|
||||
SELECT 'medium_risk_suppliers', rc.medium_risk_suppliers::text,
|
||||
CASE WHEN rc.medium_risk_suppliers > 2 THEN 'MONITOR' ELSE 'NORMAL' END
|
||||
FROM risk_counts rc
|
||||
UNION ALL
|
||||
SELECT 'low_risk_suppliers', rc.low_risk_suppliers::text, 'NORMAL'
|
||||
FROM risk_counts rc
|
||||
UNION ALL
|
||||
SELECT 'pending_orders', os.pending_orders::text,
|
||||
CASE WHEN os.pending_orders > 20 THEN 'BACKLOG' ELSE 'NORMAL' END
|
||||
FROM order_stats os
|
||||
UNION ALL
|
||||
SELECT 'overdue_orders_30d', os.overdue_orders::text,
|
||||
CASE WHEN os.overdue_orders > 5 THEN 'DELIVERY_WARNING' ELSE 'NORMAL' END
|
||||
FROM order_stats os
|
||||
UNION ALL
|
||||
SELECT 'recent_returns_30d', rs.recent_returns::text,
|
||||
CASE WHEN rs.recent_returns > 3 THEN 'QUALITY_WARNING' ELSE 'NORMAL' END
|
||||
FROM return_stats rs;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询5:供应商风险排行榜
|
||||
-- =====================================================
|
||||
WITH supplier_metrics AS (
|
||||
SELECT
|
||||
s.supplier_id,
|
||||
s.supplier_name,
|
||||
s.supplier_category,
|
||||
COUNT(DISTINCT po.purchase_order_id) AS order_count,
|
||||
COUNT(DISTINCT pr.purchase_receipt_id) AS receipt_count,
|
||||
COUNT(DISTINCT pret.purchase_return_id) AS return_count,
|
||||
SUM(pr.amount) AS total_amount
|
||||
FROM dim_supplier s
|
||||
LEFT JOIN fact_purchase_order po ON s.supplier_id = po.supplier_id
|
||||
LEFT JOIN fact_purchase_receipt pr ON s.supplier_id = pr.supplier_id
|
||||
LEFT JOIN fact_purchase_return pret ON s.supplier_id = pret.supplier_id
|
||||
WHERE s.is_current = 't'
|
||||
GROUP BY s.supplier_id, s.supplier_name, s.supplier_category
|
||||
),
|
||||
ranked_suppliers AS (
|
||||
SELECT
|
||||
*,
|
||||
CASE WHEN receipt_count > 0
|
||||
THEN ROUND(return_count * 100.0 / receipt_count, 1)
|
||||
ELSE 0 END AS return_rate,
|
||||
ROW_NUMBER() OVER (ORDER BY
|
||||
CASE WHEN receipt_count > 0 THEN return_count * 1.0 / receipt_count ELSE 0 END DESC,
|
||||
return_count DESC
|
||||
) AS risk_rank
|
||||
FROM supplier_metrics
|
||||
)
|
||||
SELECT
|
||||
risk_rank,
|
||||
supplier_name,
|
||||
supplier_category,
|
||||
order_count,
|
||||
receipt_count,
|
||||
return_count,
|
||||
return_rate,
|
||||
ROUND(COALESCE(total_amount, 0), 2) AS purchase_amount,
|
||||
CASE
|
||||
WHEN return_rate > 10 THEN 'HIGH_RISK'
|
||||
WHEN return_rate > 5 THEN 'MEDIUM_RISK'
|
||||
WHEN return_count > 0 THEN 'LOW_RISK'
|
||||
ELSE 'EXCELLENT'
|
||||
END AS risk_assessment
|
||||
FROM ranked_suppliers
|
||||
ORDER BY risk_rank
|
||||
LIMIT 20;
|
||||
409
lzwcai_mcpskills_analyzeOrder/工单执行进度与异常节点.sql
Normal file
409
lzwcai_mcpskills_analyzeOrder/工单执行进度与异常节点.sql
Normal file
@@ -0,0 +1,409 @@
|
||||
-- =====================================================
|
||||
-- 工单执行进度与异常节点SQL
|
||||
-- 数据库: PostgreSQL
|
||||
-- 实时拉取工单数据,动态映射订单各环节状态
|
||||
-- =====================================================
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 工单执行进度主视图
|
||||
-- =====================================================
|
||||
WITH work_order_base AS (
|
||||
SELECT
|
||||
wo.work_order_id,
|
||||
wo.work_order_number,
|
||||
wo.product_id,
|
||||
wo.status,
|
||||
wo.planned_qty,
|
||||
wo.completed_qty,
|
||||
wo.event_time_utc::timestamp AS start_time,
|
||||
wo.last_updated_utc::timestamp AS last_update,
|
||||
wo.source_system
|
||||
FROM fact_work_order wo
|
||||
),
|
||||
|
||||
product_info AS (
|
||||
SELECT
|
||||
product_id,
|
||||
product_name,
|
||||
product_category
|
||||
FROM dim_product
|
||||
WHERE is_current = 't'
|
||||
),
|
||||
|
||||
labor_summary AS (
|
||||
SELECT
|
||||
work_order_number,
|
||||
COUNT(DISTINCT worker_name) AS worker_count,
|
||||
SUM(report_qty) AS total_report_qty,
|
||||
SUM(duration_minutes) AS total_minutes,
|
||||
MAX(event_time_utc::timestamp) AS last_report_time
|
||||
FROM fact_labor_report
|
||||
GROUP BY work_order_number
|
||||
),
|
||||
|
||||
quality_summary AS (
|
||||
SELECT
|
||||
work_order_number,
|
||||
SUM(pass_qty) AS pass_qty,
|
||||
SUM(fail_qty) AS fail_qty
|
||||
FROM fact_quality_inspection
|
||||
GROUP BY work_order_number
|
||||
),
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 工单进度计算与状态映射
|
||||
-- =====================================================
|
||||
work_order_progress AS (
|
||||
SELECT
|
||||
wb.work_order_id,
|
||||
wb.work_order_number,
|
||||
p.product_name,
|
||||
p.product_category,
|
||||
wb.status AS raw_status,
|
||||
|
||||
-- 状态映射
|
||||
CASE wb.status
|
||||
WHEN 'OPEN' THEN '待生产'
|
||||
WHEN 'STARTED' THEN '生产中'
|
||||
WHEN 'CLOSED' THEN '已完成'
|
||||
ELSE '未知'
|
||||
END AS status_name,
|
||||
|
||||
wb.planned_qty,
|
||||
wb.completed_qty,
|
||||
|
||||
-- 完成进度
|
||||
CASE WHEN wb.planned_qty > 0
|
||||
THEN ROUND(wb.completed_qty * 100.0 / wb.planned_qty, 1)
|
||||
ELSE 0 END AS completion_rate,
|
||||
|
||||
-- 剩余数量
|
||||
GREATEST(wb.planned_qty - wb.completed_qty, 0) AS remaining_qty,
|
||||
|
||||
wb.start_time,
|
||||
wb.last_update,
|
||||
|
||||
-- 已用时间(小时)
|
||||
ROUND(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - wb.start_time)) / 3600, 1) AS elapsed_hours,
|
||||
|
||||
-- 报工信息
|
||||
COALESCE(ls.worker_count, 0) AS worker_count,
|
||||
COALESCE(ls.total_report_qty, 0) AS total_report_qty,
|
||||
COALESCE(ls.total_minutes, 0) AS total_work_minutes,
|
||||
ls.last_report_time,
|
||||
|
||||
-- 质检信息
|
||||
COALESCE(qs.pass_qty, 0) AS qc_pass_qty,
|
||||
COALESCE(qs.fail_qty, 0) AS qc_fail_qty
|
||||
|
||||
FROM work_order_base wb
|
||||
LEFT JOIN product_info p ON wb.product_id = p.product_id
|
||||
LEFT JOIN labor_summary ls ON wb.work_order_number = ls.work_order_number
|
||||
LEFT JOIN quality_summary qs ON wb.work_order_number = qs.work_order_number
|
||||
),
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 异常节点检测
|
||||
-- =====================================================
|
||||
anomaly_detection AS (
|
||||
SELECT
|
||||
*,
|
||||
|
||||
-- 进度异常:进行中但完成率过低
|
||||
CASE
|
||||
WHEN raw_status = 'STARTED' AND elapsed_hours > 48 AND completion_rate < 20 THEN '进度严重滞后'
|
||||
WHEN raw_status = 'STARTED' AND elapsed_hours > 24 AND completion_rate < 30 THEN '进度滞后'
|
||||
ELSE NULL
|
||||
END AS progress_anomaly,
|
||||
|
||||
-- 质量异常:废品率过高
|
||||
CASE
|
||||
WHEN qc_pass_qty + qc_fail_qty > 0
|
||||
AND qc_fail_qty * 100.0 / (qc_pass_qty + qc_fail_qty) > 10 THEN '质量异常'
|
||||
ELSE NULL
|
||||
END AS quality_anomaly,
|
||||
|
||||
-- 报工异常:长时间无报工
|
||||
CASE
|
||||
WHEN raw_status = 'STARTED'
|
||||
AND last_report_time IS NOT NULL
|
||||
AND EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - last_report_time)) / 3600 > 24 THEN '报工停滞'
|
||||
WHEN raw_status = 'STARTED'
|
||||
AND last_report_time IS NULL
|
||||
AND elapsed_hours > 24 THEN '无报工记录'
|
||||
ELSE NULL
|
||||
END AS labor_anomaly,
|
||||
|
||||
-- 效率异常:人效过低
|
||||
CASE
|
||||
WHEN total_work_minutes > 0
|
||||
AND total_report_qty / (total_work_minutes / 60.0) < 5 THEN '效率偏低'
|
||||
ELSE NULL
|
||||
END AS efficiency_anomaly
|
||||
|
||||
FROM work_order_progress
|
||||
)
|
||||
|
||||
-- =====================================================
|
||||
-- 输出:工单执行进度明细
|
||||
-- =====================================================
|
||||
SELECT
|
||||
work_order_number AS "工单号",
|
||||
product_name AS "产品名称",
|
||||
product_category AS "产品类别",
|
||||
status_name AS "状态",
|
||||
planned_qty AS "计划数量",
|
||||
completed_qty AS "完成数量",
|
||||
remaining_qty AS "剩余数量",
|
||||
completion_rate AS "完成率(%)",
|
||||
worker_count AS "参与人数",
|
||||
ROUND(total_work_minutes / 60.0, 1) AS "累计工时(小时)",
|
||||
elapsed_hours AS "已用时间(小时)",
|
||||
|
||||
-- 异常标记
|
||||
COALESCE(progress_anomaly, '') ||
|
||||
CASE WHEN progress_anomaly IS NOT NULL AND quality_anomaly IS NOT NULL THEN ',' ELSE '' END ||
|
||||
COALESCE(quality_anomaly, '') ||
|
||||
CASE WHEN (progress_anomaly IS NOT NULL OR quality_anomaly IS NOT NULL) AND labor_anomaly IS NOT NULL THEN ',' ELSE '' END ||
|
||||
COALESCE(labor_anomaly, '') ||
|
||||
CASE WHEN (progress_anomaly IS NOT NULL OR quality_anomaly IS NOT NULL OR labor_anomaly IS NOT NULL) AND efficiency_anomaly IS NOT NULL THEN ',' ELSE '' END ||
|
||||
COALESCE(efficiency_anomaly, '') AS "异常标记",
|
||||
|
||||
-- 风险等级
|
||||
CASE
|
||||
WHEN progress_anomaly = '进度严重滞后' OR quality_anomaly IS NOT NULL THEN '高'
|
||||
WHEN progress_anomaly = '进度滞后' OR labor_anomaly IS NOT NULL THEN '中'
|
||||
WHEN efficiency_anomaly IS NOT NULL THEN '低'
|
||||
ELSE '-'
|
||||
END AS "风险等级"
|
||||
|
||||
FROM anomaly_detection
|
||||
ORDER BY
|
||||
CASE raw_status WHEN 'STARTED' THEN 1 WHEN 'OPEN' THEN 2 ELSE 3 END,
|
||||
CASE WHEN progress_anomaly IS NOT NULL THEN 0 ELSE 1 END,
|
||||
completion_rate ASC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询1:工单状态分布汇总
|
||||
-- =====================================================
|
||||
WITH status_summary AS (
|
||||
SELECT
|
||||
CASE status
|
||||
WHEN 'OPEN' THEN '待生产'
|
||||
WHEN 'STARTED' THEN '生产中'
|
||||
WHEN 'CLOSED' THEN '已完成'
|
||||
ELSE '未知'
|
||||
END AS status_name,
|
||||
status AS raw_status,
|
||||
COUNT(*) AS order_count,
|
||||
SUM(planned_qty) AS total_planned,
|
||||
SUM(completed_qty) AS total_completed
|
||||
FROM fact_work_order
|
||||
GROUP BY status
|
||||
)
|
||||
SELECT
|
||||
status_name AS "状态",
|
||||
order_count AS "工单数",
|
||||
ROUND(order_count * 100.0 / SUM(order_count) OVER (), 1) AS "占比(%)",
|
||||
ROUND(total_planned, 0) AS "计划总量",
|
||||
ROUND(total_completed, 0) AS "完成总量",
|
||||
CASE WHEN total_planned > 0
|
||||
THEN ROUND(total_completed * 100.0 / total_planned, 1)
|
||||
ELSE 0 END AS "完成率(%)"
|
||||
FROM status_summary
|
||||
ORDER BY
|
||||
CASE raw_status WHEN 'STARTED' THEN 1 WHEN 'OPEN' THEN 2 ELSE 3 END;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询2:异常工单预警清单
|
||||
-- =====================================================
|
||||
WITH work_order_anomaly AS (
|
||||
SELECT
|
||||
wo.work_order_number,
|
||||
p.product_name,
|
||||
wo.status,
|
||||
wo.planned_qty,
|
||||
wo.completed_qty,
|
||||
CASE WHEN wo.planned_qty > 0
|
||||
THEN ROUND(wo.completed_qty * 100.0 / wo.planned_qty, 1)
|
||||
ELSE 0 END AS completion_rate,
|
||||
ROUND(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - wo.event_time_utc::timestamp)) / 3600, 1) AS elapsed_hours,
|
||||
(SELECT MAX(lr.event_time_utc::timestamp)
|
||||
FROM fact_labor_report lr
|
||||
WHERE lr.work_order_number = wo.work_order_number) AS last_report_time
|
||||
FROM fact_work_order wo
|
||||
LEFT JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = 't'
|
||||
WHERE wo.status = 'STARTED'
|
||||
)
|
||||
SELECT
|
||||
work_order_number AS "工单号",
|
||||
product_name AS "产品",
|
||||
ROUND(planned_qty, 0) AS "计划数量",
|
||||
ROUND(completed_qty, 0) AS "完成数量",
|
||||
completion_rate AS "完成率(%)",
|
||||
elapsed_hours AS "已用时间(小时)",
|
||||
CASE
|
||||
WHEN elapsed_hours > 48 AND completion_rate < 20 THEN '进度严重滞后'
|
||||
WHEN elapsed_hours > 24 AND completion_rate < 30 THEN '进度滞后'
|
||||
WHEN last_report_time IS NULL AND elapsed_hours > 24 THEN '无报工记录'
|
||||
WHEN last_report_time IS NOT NULL
|
||||
AND EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - last_report_time)) / 3600 > 24 THEN '报工停滞'
|
||||
ELSE '正常'
|
||||
END AS "异常类型",
|
||||
CASE
|
||||
WHEN elapsed_hours > 48 AND completion_rate < 20 THEN '立即跟进,排查生产瓶颈'
|
||||
WHEN elapsed_hours > 24 AND completion_rate < 30 THEN '关注进度,协调资源'
|
||||
WHEN last_report_time IS NULL AND elapsed_hours > 24 THEN '确认工单是否已开工'
|
||||
WHEN last_report_time IS NOT NULL
|
||||
AND EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - last_report_time)) / 3600 > 24 THEN '跟进报工情况'
|
||||
ELSE '-'
|
||||
END AS "处理建议"
|
||||
FROM work_order_anomaly
|
||||
WHERE elapsed_hours > 24 AND completion_rate < 50
|
||||
OR (last_report_time IS NULL AND elapsed_hours > 24)
|
||||
OR (last_report_time IS NOT NULL
|
||||
AND EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - last_report_time)) / 3600 > 24)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN elapsed_hours > 48 AND completion_rate < 20 THEN 1
|
||||
WHEN elapsed_hours > 24 AND completion_rate < 30 THEN 2
|
||||
ELSE 3
|
||||
END,
|
||||
completion_rate ASC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询3:产品类别执行进度汇总
|
||||
-- =====================================================
|
||||
SELECT
|
||||
p.product_category AS "产品类别",
|
||||
COUNT(*) AS "工单数",
|
||||
SUM(CASE WHEN wo.status = 'OPEN' THEN 1 ELSE 0 END) AS "待生产",
|
||||
SUM(CASE WHEN wo.status = 'STARTED' THEN 1 ELSE 0 END) AS "生产中",
|
||||
SUM(CASE WHEN wo.status = 'CLOSED' THEN 1 ELSE 0 END) AS "已完成",
|
||||
ROUND(SUM(wo.planned_qty), 0) AS "计划总量",
|
||||
ROUND(SUM(wo.completed_qty), 0) AS "完成总量",
|
||||
CASE WHEN SUM(wo.planned_qty) > 0
|
||||
THEN ROUND(SUM(wo.completed_qty) * 100.0 / SUM(wo.planned_qty), 1)
|
||||
ELSE 0 END AS "整体完成率(%)"
|
||||
FROM fact_work_order wo
|
||||
LEFT JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = 't'
|
||||
GROUP BY p.product_category
|
||||
ORDER BY "工单数" DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询4:工单执行时间线
|
||||
-- =====================================================
|
||||
WITH timeline AS (
|
||||
SELECT
|
||||
wo.work_order_number,
|
||||
p.product_name,
|
||||
wo.status,
|
||||
wo.event_time_utc::timestamp AS start_time,
|
||||
wo.last_updated_utc::timestamp AS last_update,
|
||||
CASE WHEN wo.status = 'CLOSED'
|
||||
THEN ROUND(EXTRACT(EPOCH FROM (wo.last_updated_utc::timestamp - wo.event_time_utc::timestamp)) / 3600, 1)
|
||||
ELSE ROUND(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - wo.event_time_utc::timestamp)) / 3600, 1)
|
||||
END AS duration_hours,
|
||||
wo.planned_qty,
|
||||
wo.completed_qty
|
||||
FROM fact_work_order wo
|
||||
LEFT JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = 't'
|
||||
)
|
||||
SELECT
|
||||
work_order_number AS "工单号",
|
||||
product_name AS "产品",
|
||||
CASE status
|
||||
WHEN 'OPEN' THEN '待生产'
|
||||
WHEN 'STARTED' THEN '生产中'
|
||||
WHEN 'CLOSED' THEN '已完成'
|
||||
END AS "状态",
|
||||
TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI') AS "开始时间",
|
||||
TO_CHAR(last_update, 'YYYY-MM-DD HH24:MI') AS "最后更新",
|
||||
duration_hours AS "持续时间(小时)",
|
||||
ROUND(planned_qty, 0) AS "计划数量",
|
||||
ROUND(completed_qty, 0) AS "完成数量",
|
||||
CASE WHEN planned_qty > 0
|
||||
THEN ROUND(completed_qty * 100.0 / planned_qty, 1)
|
||||
ELSE 0 END AS "完成率(%)"
|
||||
FROM timeline
|
||||
ORDER BY start_time DESC
|
||||
LIMIT 50;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询5:实时生产看板汇总
|
||||
-- =====================================================
|
||||
WITH current_stats AS (
|
||||
SELECT
|
||||
COUNT(*) AS total_orders,
|
||||
SUM(CASE WHEN status = 'OPEN' THEN 1 ELSE 0 END) AS open_orders,
|
||||
SUM(CASE WHEN status = 'STARTED' THEN 1 ELSE 0 END) AS started_orders,
|
||||
SUM(CASE WHEN status = 'CLOSED' THEN 1 ELSE 0 END) AS closed_orders,
|
||||
SUM(planned_qty) AS total_planned,
|
||||
SUM(completed_qty) AS total_completed
|
||||
FROM fact_work_order
|
||||
),
|
||||
anomaly_stats AS (
|
||||
SELECT
|
||||
COUNT(*) AS anomaly_count
|
||||
FROM fact_work_order wo
|
||||
WHERE wo.status = 'STARTED'
|
||||
AND EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - wo.event_time_utc::timestamp)) / 3600 > 24
|
||||
AND wo.completed_qty * 100.0 / NULLIF(wo.planned_qty, 0) < 30
|
||||
),
|
||||
today_stats AS (
|
||||
SELECT
|
||||
COUNT(*) AS today_completed
|
||||
FROM fact_work_order
|
||||
WHERE status = 'CLOSED'
|
||||
AND last_updated_utc::date = CURRENT_DATE
|
||||
)
|
||||
SELECT
|
||||
'总工单数' AS "指标",
|
||||
cs.total_orders::text AS "数值",
|
||||
'-' AS "状态"
|
||||
FROM current_stats cs
|
||||
UNION ALL
|
||||
SELECT
|
||||
'待生产',
|
||||
cs.open_orders::text,
|
||||
CASE WHEN cs.open_orders > 20 THEN '积压' ELSE '正常' END
|
||||
FROM current_stats cs
|
||||
UNION ALL
|
||||
SELECT
|
||||
'生产中',
|
||||
cs.started_orders::text,
|
||||
'进行中'
|
||||
FROM current_stats cs
|
||||
UNION ALL
|
||||
SELECT
|
||||
'已完成',
|
||||
cs.closed_orders::text,
|
||||
'正常'
|
||||
FROM current_stats cs
|
||||
UNION ALL
|
||||
SELECT
|
||||
'整体完成率',
|
||||
ROUND(cs.total_completed * 100.0 / NULLIF(cs.total_planned, 0), 1)::text || '%',
|
||||
CASE
|
||||
WHEN cs.total_completed * 100.0 / NULLIF(cs.total_planned, 0) >= 80 THEN '良好'
|
||||
WHEN cs.total_completed * 100.0 / NULLIF(cs.total_planned, 0) >= 50 THEN '正常'
|
||||
ELSE '偏低'
|
||||
END
|
||||
FROM current_stats cs
|
||||
UNION ALL
|
||||
SELECT
|
||||
'异常工单数',
|
||||
ans.anomaly_count::text,
|
||||
CASE WHEN ans.anomaly_count > 5 THEN '需关注' ELSE '正常' END
|
||||
FROM anomaly_stats ans
|
||||
UNION ALL
|
||||
SELECT
|
||||
'今日完成',
|
||||
ts.today_completed::text,
|
||||
'-'
|
||||
FROM today_stats ts;
|
||||
426
lzwcai_mcpskills_analyzeOrder/指标趋势分析与拐点预警.sql
Normal file
426
lzwcai_mcpskills_analyzeOrder/指标趋势分析与拐点预警.sql
Normal file
@@ -0,0 +1,426 @@
|
||||
-- =====================================================
|
||||
-- 指标趋势分析与拐点预警SQL
|
||||
-- Metric Trend Analysis and Turning Point Warning
|
||||
-- 数据库: PostgreSQL
|
||||
-- =====================================================
|
||||
|
||||
-- =====================================================
|
||||
-- 1. 日度指标基础数据
|
||||
-- =====================================================
|
||||
WITH daily_metrics AS (
|
||||
SELECT
|
||||
DATE(lr.event_time_utc::timestamp) AS metric_date,
|
||||
COUNT(DISTINCT lr.worker_name) AS worker_count,
|
||||
SUM(lr.duration_minutes) / 60.0 AS total_hours,
|
||||
SUM(lr.report_qty) AS total_output,
|
||||
CASE WHEN SUM(lr.duration_minutes) > 0
|
||||
THEN SUM(lr.report_qty) / (SUM(lr.duration_minutes) / 60.0)
|
||||
ELSE 0 END AS hourly_efficiency
|
||||
FROM fact_labor_report lr
|
||||
GROUP BY DATE(lr.event_time_utc::timestamp)
|
||||
),
|
||||
|
||||
daily_quality AS (
|
||||
SELECT
|
||||
DATE(qi.event_time_utc::timestamp) AS metric_date,
|
||||
SUM(qi.pass_qty) AS pass_qty,
|
||||
SUM(qi.fail_qty) AS fail_qty,
|
||||
CASE WHEN SUM(qi.pass_qty) + SUM(qi.fail_qty) > 0
|
||||
THEN SUM(qi.fail_qty) * 100.0 / (SUM(qi.pass_qty) + SUM(qi.fail_qty))
|
||||
ELSE 0 END AS defect_rate
|
||||
FROM fact_quality_inspection qi
|
||||
GROUP BY DATE(qi.event_time_utc::timestamp)
|
||||
),
|
||||
|
||||
daily_production AS (
|
||||
SELECT
|
||||
DATE(wo.event_time_utc::timestamp) AS metric_date,
|
||||
SUM(wo.planned_qty) AS planned_qty,
|
||||
SUM(wo.completed_qty) AS completed_qty,
|
||||
CASE WHEN SUM(wo.planned_qty) > 0
|
||||
THEN SUM(wo.completed_qty) * 100.0 / SUM(wo.planned_qty)
|
||||
ELSE 0 END AS completion_rate
|
||||
FROM fact_work_order wo
|
||||
GROUP BY DATE(wo.event_time_utc::timestamp)
|
||||
),
|
||||
|
||||
combined_daily AS (
|
||||
SELECT
|
||||
COALESCE(dm.metric_date, dq.metric_date, dp.metric_date) AS metric_date,
|
||||
COALESCE(dm.worker_count, 0) AS worker_count,
|
||||
COALESCE(dm.total_hours, 0) AS total_hours,
|
||||
COALESCE(dm.total_output, 0) AS total_output,
|
||||
COALESCE(dm.hourly_efficiency, 0) AS hourly_efficiency,
|
||||
COALESCE(dq.defect_rate, 0) AS defect_rate,
|
||||
COALESCE(dp.completion_rate, 0) AS completion_rate
|
||||
FROM daily_metrics dm
|
||||
FULL OUTER JOIN daily_quality dq ON dm.metric_date = dq.metric_date
|
||||
FULL OUTER JOIN daily_production dp ON dm.metric_date = dp.metric_date
|
||||
WHERE COALESCE(dm.metric_date, dq.metric_date, dp.metric_date) IS NOT NULL
|
||||
),
|
||||
|
||||
numbered_data AS (
|
||||
SELECT
|
||||
*,
|
||||
ROW_NUMBER() OVER (ORDER BY metric_date) AS day_seq
|
||||
FROM combined_daily
|
||||
),
|
||||
|
||||
-- =====================================================
|
||||
-- 2. 移动平均计算 (7日移动平均)
|
||||
-- =====================================================
|
||||
moving_avg_step1 AS (
|
||||
SELECT
|
||||
metric_date,
|
||||
day_seq,
|
||||
worker_count,
|
||||
total_output,
|
||||
hourly_efficiency,
|
||||
defect_rate,
|
||||
completion_rate,
|
||||
AVG(hourly_efficiency) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7_efficiency,
|
||||
AVG(total_output) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7_output,
|
||||
AVG(defect_rate) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7_defect_rate,
|
||||
AVG(completion_rate) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7_completion_rate,
|
||||
AVG(day_seq) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_x
|
||||
FROM numbered_data
|
||||
),
|
||||
|
||||
moving_avg AS (
|
||||
SELECT
|
||||
*,
|
||||
LAG(ma7_efficiency, 1) OVER (ORDER BY metric_date) AS prev_ma7_efficiency,
|
||||
LAG(ma7_output, 1) OVER (ORDER BY metric_date) AS prev_ma7_output,
|
||||
LAG(ma7_defect_rate, 1) OVER (ORDER BY metric_date) AS prev_ma7_defect_rate
|
||||
FROM moving_avg_step1
|
||||
),
|
||||
|
||||
-- =====================================================
|
||||
-- 3. 简化的趋势斜率计算
|
||||
-- =====================================================
|
||||
slope_calc AS (
|
||||
SELECT
|
||||
*,
|
||||
(ma7_efficiency - LAG(ma7_efficiency, 3) OVER (ORDER BY metric_date)) / 3.0 AS slope_efficiency,
|
||||
(ma7_output - LAG(ma7_output, 3) OVER (ORDER BY metric_date)) / 3.0 AS slope_output,
|
||||
(ma7_defect_rate - LAG(ma7_defect_rate, 3) OVER (ORDER BY metric_date)) / 3.0 AS slope_defect
|
||||
FROM moving_avg
|
||||
),
|
||||
|
||||
-- =====================================================
|
||||
-- 4. 趋势判断与异常检测
|
||||
-- =====================================================
|
||||
trend_analysis AS (
|
||||
SELECT
|
||||
metric_date,
|
||||
hourly_efficiency,
|
||||
total_output,
|
||||
defect_rate,
|
||||
completion_rate,
|
||||
ROUND(ma7_efficiency, 2) AS ma7_efficiency,
|
||||
ROUND(ma7_output, 2) AS ma7_output,
|
||||
ROUND(ma7_defect_rate, 2) AS ma7_defect_rate,
|
||||
ROUND(COALESCE(slope_efficiency, 0), 4) AS slope_efficiency,
|
||||
ROUND(COALESCE(slope_output, 0), 4) AS slope_output,
|
||||
ROUND(COALESCE(slope_defect, 0), 4) AS slope_defect,
|
||||
prev_ma7_efficiency,
|
||||
prev_ma7_output,
|
||||
prev_ma7_defect_rate,
|
||||
|
||||
CASE
|
||||
WHEN COALESCE(slope_efficiency, 0) > 0.3 THEN 'RISING'
|
||||
WHEN COALESCE(slope_efficiency, 0) < -0.3 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS efficiency_trend,
|
||||
|
||||
CASE
|
||||
WHEN COALESCE(slope_output, 0) > 3 THEN 'RISING'
|
||||
WHEN COALESCE(slope_output, 0) < -3 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS output_trend,
|
||||
|
||||
CASE
|
||||
WHEN COALESCE(slope_defect, 0) > 0.3 THEN 'RISING'
|
||||
WHEN COALESCE(slope_defect, 0) < -0.3 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS defect_trend,
|
||||
|
||||
CASE
|
||||
WHEN ma7_efficiency > 0 AND ABS(hourly_efficiency - ma7_efficiency) > ma7_efficiency * 0.3 THEN 'ANOMALY'
|
||||
ELSE 'NORMAL'
|
||||
END AS efficiency_status,
|
||||
|
||||
CASE
|
||||
WHEN ma7_output > 0 AND ABS(total_output - ma7_output) > ma7_output * 0.3 THEN 'ANOMALY'
|
||||
ELSE 'NORMAL'
|
||||
END AS output_status,
|
||||
|
||||
CASE
|
||||
WHEN defect_rate > ma7_defect_rate * 1.5 AND defect_rate > 5 THEN 'ANOMALY'
|
||||
ELSE 'NORMAL'
|
||||
END AS defect_status
|
||||
|
||||
FROM slope_calc
|
||||
)
|
||||
|
||||
-- =====================================================
|
||||
-- 输出:日度趋势分析明细
|
||||
-- =====================================================
|
||||
SELECT
|
||||
metric_date,
|
||||
ROUND(hourly_efficiency, 2) AS hourly_output,
|
||||
ma7_efficiency AS efficiency_ma7,
|
||||
slope_efficiency,
|
||||
efficiency_trend,
|
||||
efficiency_status,
|
||||
CASE
|
||||
WHEN prev_ma7_efficiency IS NOT NULL
|
||||
AND ma7_efficiency > prev_ma7_efficiency AND slope_efficiency < 0 THEN 'TURNING_POINT'
|
||||
WHEN prev_ma7_efficiency IS NOT NULL
|
||||
AND ma7_efficiency < prev_ma7_efficiency AND slope_efficiency > 0 THEN 'TURNING_POINT'
|
||||
ELSE 'NONE'
|
||||
END AS efficiency_turning_point,
|
||||
ROUND(total_output, 0) AS daily_output,
|
||||
ma7_output AS output_ma7,
|
||||
slope_output,
|
||||
output_trend,
|
||||
output_status,
|
||||
CASE
|
||||
WHEN prev_ma7_output IS NOT NULL
|
||||
AND ma7_output > prev_ma7_output AND slope_output < 0 THEN 'TURNING_POINT'
|
||||
WHEN prev_ma7_output IS NOT NULL
|
||||
AND ma7_output < prev_ma7_output AND slope_output > 0 THEN 'TURNING_POINT'
|
||||
ELSE 'NONE'
|
||||
END AS output_turning_point,
|
||||
ROUND(defect_rate, 2) AS defect_rate,
|
||||
ma7_defect_rate AS defect_rate_ma7,
|
||||
slope_defect,
|
||||
defect_trend,
|
||||
defect_status,
|
||||
CASE
|
||||
WHEN prev_ma7_defect_rate IS NOT NULL
|
||||
AND ma7_defect_rate > prev_ma7_defect_rate AND slope_defect < 0 THEN 'TURNING_POINT'
|
||||
WHEN prev_ma7_defect_rate IS NOT NULL
|
||||
AND ma7_defect_rate < prev_ma7_defect_rate AND slope_defect > 0 THEN 'TURNING_POINT'
|
||||
ELSE 'NONE'
|
||||
END AS defect_turning_point
|
||||
FROM trend_analysis
|
||||
ORDER BY metric_date DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询1:周度趋势汇总
|
||||
-- =====================================================
|
||||
WITH weekly_metrics AS (
|
||||
SELECT
|
||||
DATE_TRUNC('week', lr.event_time_utc::timestamp)::date AS week_start,
|
||||
COUNT(DISTINCT lr.worker_name) AS worker_count,
|
||||
SUM(lr.duration_minutes) / 60.0 AS total_hours,
|
||||
SUM(lr.report_qty) AS total_output,
|
||||
CASE WHEN SUM(lr.duration_minutes) > 0
|
||||
THEN SUM(lr.report_qty) / (SUM(lr.duration_minutes) / 60.0)
|
||||
ELSE 0 END AS hourly_efficiency
|
||||
FROM fact_labor_report lr
|
||||
GROUP BY DATE_TRUNC('week', lr.event_time_utc::timestamp)
|
||||
),
|
||||
weekly_quality AS (
|
||||
SELECT
|
||||
DATE_TRUNC('week', qi.event_time_utc::timestamp)::date AS week_start,
|
||||
SUM(qi.fail_qty) * 100.0 / NULLIF(SUM(qi.pass_qty) + SUM(qi.fail_qty), 0) AS defect_rate
|
||||
FROM fact_quality_inspection qi
|
||||
GROUP BY DATE_TRUNC('week', qi.event_time_utc::timestamp)
|
||||
),
|
||||
weekly_combined AS (
|
||||
SELECT
|
||||
wm.week_start,
|
||||
wm.worker_count,
|
||||
wm.total_hours,
|
||||
wm.total_output,
|
||||
wm.hourly_efficiency,
|
||||
COALESCE(wq.defect_rate, 0) AS defect_rate
|
||||
FROM weekly_metrics wm
|
||||
LEFT JOIN weekly_quality wq ON wm.week_start = wq.week_start
|
||||
),
|
||||
weekly_with_lag AS (
|
||||
SELECT
|
||||
*,
|
||||
LAG(hourly_efficiency, 1) OVER (ORDER BY week_start) AS prev_efficiency,
|
||||
LAG(total_output, 1) OVER (ORDER BY week_start) AS prev_output,
|
||||
LAG(defect_rate, 1) OVER (ORDER BY week_start) AS prev_defect_rate
|
||||
FROM weekly_combined
|
||||
)
|
||||
SELECT
|
||||
week_start,
|
||||
worker_count,
|
||||
ROUND(total_hours, 1) AS total_hours,
|
||||
ROUND(total_output, 0) AS total_output,
|
||||
ROUND(hourly_efficiency, 2) AS hourly_output,
|
||||
ROUND(defect_rate, 2) AS defect_rate,
|
||||
CASE
|
||||
WHEN prev_efficiency IS NULL THEN 'NONE'
|
||||
WHEN hourly_efficiency > prev_efficiency * 1.1 THEN 'RISING'
|
||||
WHEN hourly_efficiency < prev_efficiency * 0.9 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS efficiency_trend,
|
||||
CASE
|
||||
WHEN prev_output IS NULL THEN 'NONE'
|
||||
WHEN total_output > prev_output * 1.1 THEN 'RISING'
|
||||
WHEN total_output < prev_output * 0.9 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS output_trend,
|
||||
CASE
|
||||
WHEN prev_defect_rate IS NULL THEN 'NONE'
|
||||
WHEN defect_rate > prev_defect_rate * 1.2 THEN 'RISING'
|
||||
WHEN defect_rate < prev_defect_rate * 0.8 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS defect_trend,
|
||||
ROUND((hourly_efficiency - COALESCE(prev_efficiency, hourly_efficiency)) / NULLIF(prev_efficiency, 0) * 100, 1) AS efficiency_wow_pct
|
||||
FROM weekly_with_lag
|
||||
ORDER BY week_start DESC;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询2:指标趋势汇总报告
|
||||
-- =====================================================
|
||||
WITH
|
||||
recent_data AS (
|
||||
SELECT
|
||||
DATE(lr.event_time_utc::timestamp) AS metric_date,
|
||||
SUM(lr.report_qty) / NULLIF(SUM(lr.duration_minutes) / 60.0, 0) AS hourly_efficiency,
|
||||
SUM(lr.report_qty) AS total_output
|
||||
FROM fact_labor_report lr
|
||||
WHERE lr.event_time_utc::timestamp >= CURRENT_DATE - INTERVAL '14 days'
|
||||
GROUP BY DATE(lr.event_time_utc::timestamp)
|
||||
),
|
||||
recent_quality AS (
|
||||
SELECT
|
||||
DATE(qi.event_time_utc::timestamp) AS metric_date,
|
||||
SUM(qi.fail_qty) * 100.0 / NULLIF(SUM(qi.pass_qty) + SUM(qi.fail_qty), 0) AS defect_rate
|
||||
FROM fact_quality_inspection qi
|
||||
WHERE qi.event_time_utc::timestamp >= CURRENT_DATE - INTERVAL '14 days'
|
||||
GROUP BY DATE(qi.event_time_utc::timestamp)
|
||||
),
|
||||
period_stats AS (
|
||||
SELECT
|
||||
AVG(CASE WHEN rd.metric_date >= CURRENT_DATE - INTERVAL '7 days' THEN rd.hourly_efficiency END) AS avg_eff_7d,
|
||||
AVG(CASE WHEN rd.metric_date >= CURRENT_DATE - INTERVAL '7 days' THEN rd.total_output END) AS avg_output_7d,
|
||||
AVG(CASE WHEN rd.metric_date < CURRENT_DATE - INTERVAL '7 days' THEN rd.hourly_efficiency END) AS avg_eff_prev7d,
|
||||
AVG(CASE WHEN rd.metric_date < CURRENT_DATE - INTERVAL '7 days' THEN rd.total_output END) AS avg_output_prev7d
|
||||
FROM recent_data rd
|
||||
),
|
||||
quality_stats AS (
|
||||
SELECT
|
||||
AVG(CASE WHEN rq.metric_date >= CURRENT_DATE - INTERVAL '7 days' THEN rq.defect_rate END) AS avg_defect_7d,
|
||||
AVG(CASE WHEN rq.metric_date < CURRENT_DATE - INTERVAL '7 days' THEN rq.defect_rate END) AS avg_defect_prev7d
|
||||
FROM recent_quality rq
|
||||
)
|
||||
SELECT
|
||||
'efficiency_per_hour' AS metric_name,
|
||||
ROUND(ps.avg_eff_7d, 2) AS last_7d_avg,
|
||||
ROUND(ps.avg_eff_prev7d, 2) AS prev_7d_avg,
|
||||
ROUND((ps.avg_eff_7d - ps.avg_eff_prev7d) / NULLIF(ps.avg_eff_prev7d, 0) * 100, 1) AS change_rate_pct,
|
||||
CASE
|
||||
WHEN ps.avg_eff_7d > ps.avg_eff_prev7d * 1.05 THEN 'RISING'
|
||||
WHEN ps.avg_eff_7d < ps.avg_eff_prev7d * 0.95 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END AS trend,
|
||||
CASE
|
||||
WHEN ABS(ps.avg_eff_7d - ps.avg_eff_prev7d) / NULLIF(ps.avg_eff_prev7d, 0) > 0.2 THEN 'ANOMALY'
|
||||
ELSE 'NORMAL'
|
||||
END AS warning
|
||||
FROM period_stats ps
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'daily_output',
|
||||
ROUND(ps.avg_output_7d, 0),
|
||||
ROUND(ps.avg_output_prev7d, 0),
|
||||
ROUND((ps.avg_output_7d - ps.avg_output_prev7d) / NULLIF(ps.avg_output_prev7d, 0) * 100, 1),
|
||||
CASE
|
||||
WHEN ps.avg_output_7d > ps.avg_output_prev7d * 1.05 THEN 'RISING'
|
||||
WHEN ps.avg_output_7d < ps.avg_output_prev7d * 0.95 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END,
|
||||
CASE
|
||||
WHEN ABS(ps.avg_output_7d - ps.avg_output_prev7d) / NULLIF(ps.avg_output_prev7d, 0) > 0.2 THEN 'ANOMALY'
|
||||
ELSE 'NORMAL'
|
||||
END
|
||||
FROM period_stats ps
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT
|
||||
'defect_rate_pct',
|
||||
ROUND(qs.avg_defect_7d, 2),
|
||||
ROUND(qs.avg_defect_prev7d, 2),
|
||||
ROUND((qs.avg_defect_7d - qs.avg_defect_prev7d) / NULLIF(qs.avg_defect_prev7d, 0) * 100, 1),
|
||||
CASE
|
||||
WHEN qs.avg_defect_7d > qs.avg_defect_prev7d * 1.1 THEN 'RISING'
|
||||
WHEN qs.avg_defect_7d < qs.avg_defect_prev7d * 0.9 THEN 'FALLING'
|
||||
ELSE 'STABLE'
|
||||
END,
|
||||
CASE
|
||||
WHEN qs.avg_defect_7d > 8 THEN 'THRESHOLD_EXCEEDED'
|
||||
WHEN qs.avg_defect_7d > qs.avg_defect_prev7d * 1.3 THEN 'ANOMALY_RISING'
|
||||
ELSE 'NORMAL'
|
||||
END
|
||||
FROM quality_stats qs;
|
||||
|
||||
|
||||
-- =====================================================
|
||||
-- 补充查询3:拐点预警汇总
|
||||
-- =====================================================
|
||||
WITH daily_eff AS (
|
||||
SELECT
|
||||
DATE(lr.event_time_utc::timestamp) AS metric_date,
|
||||
SUM(lr.report_qty) / NULLIF(SUM(lr.duration_minutes) / 60.0, 0) AS hourly_efficiency
|
||||
FROM fact_labor_report lr
|
||||
GROUP BY DATE(lr.event_time_utc::timestamp)
|
||||
),
|
||||
with_ma_step1 AS (
|
||||
SELECT
|
||||
metric_date,
|
||||
hourly_efficiency,
|
||||
AVG(hourly_efficiency) OVER (ORDER BY metric_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7
|
||||
FROM daily_eff
|
||||
),
|
||||
with_ma AS (
|
||||
SELECT
|
||||
metric_date,
|
||||
hourly_efficiency,
|
||||
ma7,
|
||||
LAG(ma7, 1) OVER (ORDER BY metric_date) AS prev_ma7,
|
||||
LAG(ma7, 2) OVER (ORDER BY metric_date) AS prev2_ma7
|
||||
FROM with_ma_step1
|
||||
),
|
||||
turning_points AS (
|
||||
SELECT
|
||||
metric_date,
|
||||
hourly_efficiency,
|
||||
ma7,
|
||||
prev_ma7,
|
||||
prev2_ma7,
|
||||
CASE
|
||||
WHEN prev2_ma7 IS NOT NULL
|
||||
AND prev_ma7 < prev2_ma7 AND ma7 > prev_ma7 THEN 'UPWARD'
|
||||
WHEN prev2_ma7 IS NOT NULL
|
||||
AND prev_ma7 > prev2_ma7 AND ma7 < prev_ma7 THEN 'DOWNWARD'
|
||||
ELSE NULL
|
||||
END AS turning_type
|
||||
FROM with_ma
|
||||
)
|
||||
SELECT
|
||||
metric_date,
|
||||
ROUND(hourly_efficiency, 2) AS daily_efficiency,
|
||||
ROUND(ma7, 2) AS ma7_line,
|
||||
turning_type,
|
||||
CASE
|
||||
WHEN turning_type = 'UPWARD' THEN 'MAINTAIN_CURRENT_MEASURES'
|
||||
WHEN turning_type = 'DOWNWARD' THEN 'INVESTIGATE_AND_IMPROVE'
|
||||
ELSE 'NONE'
|
||||
END AS recommendation
|
||||
FROM turning_points
|
||||
WHERE turning_type IS NOT NULL
|
||||
ORDER BY metric_date DESC
|
||||
LIMIT 10;
|
||||
154
lzwcai_mcpskills_analyzeOrder/订单延迟预警分析.sql
Normal file
154
lzwcai_mcpskills_analyzeOrder/订单延迟预警分析.sql
Normal file
@@ -0,0 +1,154 @@
|
||||
-- 订单延迟预警分析(最终优化版)
|
||||
-- Order Delay Warning Analysis
|
||||
WITH
|
||||
-- 1. 历史生产周期统计(全局平均,仅统计已完成工单)
|
||||
production_cycle_stats AS (
|
||||
SELECT
|
||||
COALESCE(
|
||||
AVG(
|
||||
GREATEST(0, EXTRACT(DAY FROM last_updated_utc - event_time_utc))
|
||||
),
|
||||
0
|
||||
) AS avg_production_days
|
||||
FROM fact_work_order
|
||||
WHERE status = 'CLOSED'
|
||||
AND last_updated_utc >= event_time_utc
|
||||
),
|
||||
|
||||
-- 2. 物流延误统计(按客户维度)
|
||||
logistics_delay_stats AS (
|
||||
SELECT
|
||||
customer_id,
|
||||
AVG(
|
||||
GREATEST(0, EXTRACT(DAY FROM event_time_utc - doc_date_utc))
|
||||
) AS avg_logistics_delay_days,
|
||||
SUM(
|
||||
CASE WHEN EXTRACT(DAY FROM event_time_utc - doc_date_utc) > 3
|
||||
THEN 1 ELSE 0 END
|
||||
) AS delay_count
|
||||
FROM fact_sales_shipment
|
||||
WHERE doc_date_utc IS NOT NULL
|
||||
AND event_time_utc IS NOT NULL
|
||||
GROUP BY customer_id
|
||||
),
|
||||
|
||||
-- 3. 质量问题统计(全局平均)
|
||||
quality_issue_stats AS (
|
||||
SELECT
|
||||
COALESCE(
|
||||
ROUND(
|
||||
SUM(fail_qty) * 100.0 / NULLIF(SUM(pass_qty + fail_qty), 0),
|
||||
2
|
||||
),
|
||||
0
|
||||
) AS defect_rate_pct
|
||||
FROM fact_quality_inspection
|
||||
WHERE pass_qty IS NOT NULL
|
||||
AND fail_qty IS NOT NULL
|
||||
),
|
||||
|
||||
-- 4. 报废率(全局)
|
||||
scrap_stats AS (
|
||||
SELECT
|
||||
COALESCE(
|
||||
(SELECT COUNT(*) FROM fact_scrap) * 100.0 /
|
||||
NULLIF((SELECT COUNT(*) FROM fact_work_order WHERE status = 'CLOSED'), 0),
|
||||
0
|
||||
) AS scrap_rate_pct
|
||||
),
|
||||
|
||||
-- 5. 当前生产滞后风险(全局)
|
||||
active_work_order_risk AS (
|
||||
SELECT
|
||||
COUNT(*) AS active_wo_count,
|
||||
COALESCE(
|
||||
SUM(
|
||||
CASE
|
||||
WHEN planned_qty > 0
|
||||
AND (completed_qty / planned_qty) < 0.3
|
||||
AND EXTRACT(DAY FROM NOW() - event_time_utc) > 7
|
||||
THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
),
|
||||
0
|
||||
) AS lagging_wo_count
|
||||
FROM fact_work_order
|
||||
WHERE status IN ('OPEN', 'STARTED')
|
||||
),
|
||||
|
||||
-- 6. 合并全局指标为单行
|
||||
global_metrics AS (
|
||||
SELECT
|
||||
pcs.avg_production_days,
|
||||
qis.defect_rate_pct,
|
||||
ss.scrap_rate_pct,
|
||||
awr.active_wo_count,
|
||||
awr.lagging_wo_count
|
||||
FROM production_cycle_stats pcs,
|
||||
quality_issue_stats qis,
|
||||
scrap_stats ss,
|
||||
active_work_order_risk awr
|
||||
)
|
||||
|
||||
-- 主查询
|
||||
SELECT
|
||||
so.sales_order_number AS order_number,
|
||||
c.customer_name AS customer_name,
|
||||
so.order_date_utc::DATE AS order_date,
|
||||
so.deal_amount AS order_amount,
|
||||
so.payment_status AS payment_status,
|
||||
|
||||
-- 风险指标
|
||||
ROUND(gm.avg_production_days::NUMERIC, 1) AS avg_production_days,
|
||||
ROUND(COALESCE(lds.avg_logistics_delay_days, 0)::NUMERIC, 1) AS avg_logistics_delay_days,
|
||||
COALESCE(lds.delay_count, 0)::INT AS historical_delay_count,
|
||||
ROUND(gm.defect_rate_pct::NUMERIC, 2) AS defect_rate_pct,
|
||||
ROUND(gm.scrap_rate_pct::NUMERIC, 2) AS scrap_rate_pct,
|
||||
gm.active_wo_count::INT AS active_work_order_count,
|
||||
gm.lagging_wo_count::INT AS lagging_work_order_count,
|
||||
|
||||
-- 延迟概率计算
|
||||
ROUND(
|
||||
LEAST(100, GREATEST(0,
|
||||
LEAST(25, GREATEST(0, gm.avg_production_days - 10) * 2.5) +
|
||||
LEAST(30, COALESCE(lds.avg_logistics_delay_days, 0) * 6) +
|
||||
LEAST(25, gm.defect_rate_pct * 2.5) +
|
||||
LEAST(20, gm.lagging_wo_count * 10)
|
||||
))::NUMERIC, 1
|
||||
) AS delay_probability_pct,
|
||||
|
||||
-- 预警等级
|
||||
CASE
|
||||
WHEN (
|
||||
LEAST(25, GREATEST(0, gm.avg_production_days - 10) * 2.5) +
|
||||
LEAST(30, COALESCE(lds.avg_logistics_delay_days, 0) * 6) +
|
||||
LEAST(25, gm.defect_rate_pct * 2.5) +
|
||||
LEAST(20, gm.lagging_wo_count * 10)
|
||||
) >= 60 THEN 'RED'
|
||||
WHEN (
|
||||
LEAST(25, GREATEST(0, gm.avg_production_days - 10) * 2.5) +
|
||||
LEAST(30, COALESCE(lds.avg_logistics_delay_days, 0) * 6) +
|
||||
LEAST(25, gm.defect_rate_pct * 2.5) +
|
||||
LEAST(20, gm.lagging_wo_count * 10)
|
||||
) >= 30 THEN 'YELLOW'
|
||||
ELSE 'GREEN'
|
||||
END AS warning_level,
|
||||
|
||||
-- 主要风险因素
|
||||
CASE
|
||||
WHEN gm.lagging_wo_count >= 2 THEN 'PRODUCTION_SEVERELY_DELAYED'
|
||||
WHEN COALESCE(lds.avg_logistics_delay_days, 0) > 5 THEN 'HIGH_LOGISTICS_DELAY_RISK'
|
||||
WHEN gm.avg_production_days > 15 THEN 'LONG_PRODUCTION_CYCLE'
|
||||
WHEN gm.defect_rate_pct > 10 THEN 'QUALITY_ISSUES'
|
||||
ELSE 'NORMAL'
|
||||
END AS primary_risk_factor
|
||||
|
||||
FROM fact_sales_order so
|
||||
LEFT JOIN dim_customer c
|
||||
ON so.customer_id = c.customer_id
|
||||
AND c.is_current = 't'
|
||||
CROSS JOIN global_metrics gm
|
||||
LEFT JOIN logistics_delay_stats lds
|
||||
ON so.customer_id = lds.customer_id
|
||||
ORDER BY delay_probability_pct DESC, so.order_date_utc DESC;
|
||||
@@ -1,4 +1,4 @@
|
||||
# lzwcai-mcpskills-analyzeWorkOrder
|
||||
# lzwcai-mcpskills-analyzeOrder
|
||||
|
||||
一个基于 MCP (Model Context Protocol) 的 SQL 查询执行服务器,支持从 JSON 配置文件动态生成查询工具。
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
### 使用 pip 安装
|
||||
|
||||
```bash
|
||||
pip install lzwcai-mcpskills-analyzeWorkOrder
|
||||
pip install lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
### 从源码安装
|
||||
@@ -28,7 +28,7 @@ pip install -e .
|
||||
### 使用 uv 安装(推荐)
|
||||
|
||||
```bash
|
||||
uv pip install lzwcai-mcpskills-analyzeWorkOrder
|
||||
uv pip install lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
## 使用方法
|
||||
@@ -38,7 +38,7 @@ uv pip install lzwcai-mcpskills-analyzeWorkOrder
|
||||
安装后,可以直接通过命令启动:
|
||||
|
||||
```bash
|
||||
lzwcai-mcpskills-analyzeWorkOrder
|
||||
lzwcai-mcpskills-analyzeOrder
|
||||
```
|
||||
|
||||
### 作为 Python 模块运行
|
||||
@@ -55,7 +55,7 @@ python -m lzwcai_mcp_sqlexecutor.main
|
||||
{
|
||||
"mcpServers": {
|
||||
"lzwcai-sqlexecutor": {
|
||||
"command": "lzwcai-mcpskills-analyzeWorkOrder"
|
||||
"command": "lzwcai-mcpskills-analyzeOrder"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
lzwcai-mcpskills-analyzeWorkOrder - MCP server for executing business SQL queries
|
||||
lzwcai-mcpskills-analyzeOrder - MCP server for executing business SQL queries
|
||||
"""
|
||||
|
||||
__version__ = "0.1.2"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -94,7 +94,7 @@ def generate_tool_schema_from_query(query: dict) -> types.Tool:
|
||||
|
||||
|
||||
# 创建 MCP 服务器实例
|
||||
server = Server("lzwcai-mcpskills-analyzeWorkOrder")
|
||||
server = Server("lzwcai-mcpskills-analyzeOrder")
|
||||
|
||||
# 缓存查询配置,避免重复加载
|
||||
_queries_cache = None
|
||||
@@ -311,7 +311,7 @@ async def async_main():
|
||||
"""MCP 服务器异步主函数"""
|
||||
try:
|
||||
mcp_logger.info("=" * 60)
|
||||
mcp_logger.info("正在启动 MCP 服务器: lzwcai-mcpskills-analyzeWorkOrder")
|
||||
mcp_logger.info("正在启动 MCP 服务器: lzwcai-mcpskills-analyzeOrder")
|
||||
mcp_logger.info("版本: 0.1.0")
|
||||
mcp_logger.info("=" * 60)
|
||||
|
||||
@@ -332,7 +332,7 @@ async def async_main():
|
||||
read_stream,
|
||||
write_stream,
|
||||
InitializationOptions(
|
||||
server_name="lzwcai-mcpskills-analyzeWorkOrder",
|
||||
server_name="lzwcai-mcpskills-analyzeOrder",
|
||||
server_version="0.1.0",
|
||||
capabilities=server.get_capabilities(
|
||||
notification_options=NotificationOptions(),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
Entry point for lzwcai-mcpskills-analyzeWorkOrder
|
||||
Entry point for lzwcai-mcpskills-analyzeOrder
|
||||
Runs the MCP server for SQL query execution
|
||||
"""
|
||||
import os
|
||||
@@ -9,5 +9,5 @@ os.environ["datasourceId"] = "19"
|
||||
os.environ["backendBaseUrl"] = "http://192.168.11.24:8088"
|
||||
if __name__ == "__main__":
|
||||
# Import and run the actual MCP server
|
||||
from lzwcai_mcpskills_analyzeWorkOrder.main import main
|
||||
from lzwcai_mcpskills_analyzeOrder.main import main
|
||||
main()
|
||||
|
||||
@@ -3,7 +3,7 @@ requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "lzwcai-mcpskills-analyzeWorkOrder"
|
||||
name = "lzwcai-mcpskills-analyzeOrder"
|
||||
version = "0.1.12"
|
||||
description = "MCP server for executing business SQL queries with dynamic tool generation"
|
||||
readme = "README.md"
|
||||
@@ -26,10 +26,10 @@ dependencies = [
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
lzwcai-mcpskills-analyzeWorkOrder = "lzwcai_mcpskills_analyzeWorkOrder.main:main"
|
||||
lzwcai-mcpskills-analyzeOrder = "lzwcai_mcpskills_analyzeOrder.main:main"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["lzwcai_mcpskills_analyzeWorkOrder"]
|
||||
packages = ["lzwcai_mcpskills_analyzeOrder"]
|
||||
|
||||
[tool.hatch.build.targets.wheel.force-include]
|
||||
"lzwcai_mcpskills_analyzeWorkOrder/businessQueries.json" = "lzwcai_mcpskills_analyzeWorkOrder/businessQueries.json"
|
||||
"lzwcai_mcpskills_analyzeOrder/businessQueries.json" = "lzwcai_mcpskills_analyzeOrder/businessQueries.json"
|
||||
|
||||
6
server.log
Normal file
6
server.log
Normal file
@@ -0,0 +1,6 @@
|
||||
{"level":30,"time":1767795873541,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"config>{\"host\":\"192.168.11.24\",\"user\":\"postgres\",\"password\":\"******\",\"database\":\"manufacturing_data_model_v1_0_0\",\"port\":5432}"}
|
||||
{"level":30,"time":1767795873541,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"MySQL MCP server running on stdio"}
|
||||
{"level":50,"time":1767796119331,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"List tables failed","sql":"SHOW TABLES","error":"connect ETIMEDOUT"}
|
||||
{"level":50,"time":1767797249666,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"Describe table failed","sql":"DESCRIBE ??","params":["fact_work_order"],"error":"connect ETIMEDOUT"}
|
||||
{"level":50,"time":1767797265187,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"Describe table failed","sql":"DESCRIBE ??","params":["fact_sales_order"],"error":"connect ETIMEDOUT"}
|
||||
{"level":50,"time":1767797277193,"pid":31816,"hostname":"MICROSO-UUDM3QK","msg":"Describe table failed","sql":"DESCRIBE ??","params":["fact_sales_shipment"],"error":"connect ETIMEDOUT"}
|
||||
342
sql/dim_bom.json
Normal file
342
sql/dim_bom.json
Normal file
@@ -0,0 +1,342 @@
|
||||
[
|
||||
{
|
||||
"bom_id": 1,
|
||||
"bom_number": "BOM67148266",
|
||||
"bom_topic": "BOM Topic 0",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "4904724113571",
|
||||
"unit_usage_qty": 6.77,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "谢谢有限运行大小希望什么女人.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "3/12/2025 04:38:26.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 2,
|
||||
"bom_number": "BOM41843358",
|
||||
"bom_topic": "BOM Topic 1",
|
||||
"is_primary": "f",
|
||||
"level_number": 3,
|
||||
"product_code": "7404817071704",
|
||||
"unit_usage_qty": 3.15,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "联系时候首页功能到了人民包括方面.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 13:59:24.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 3,
|
||||
"bom_number": "BOM98209951",
|
||||
"bom_topic": "BOM Topic 2",
|
||||
"is_primary": "f",
|
||||
"level_number": 2,
|
||||
"product_code": "2371469356556",
|
||||
"unit_usage_qty": 5.85,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "一种感觉只是都是程序上海.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "19/12/2025 21:41:57.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 4,
|
||||
"bom_number": "BOM54567090",
|
||||
"bom_topic": "BOM Topic 3",
|
||||
"is_primary": "t",
|
||||
"level_number": 2,
|
||||
"product_code": "7246071817298",
|
||||
"unit_usage_qty": 8.79,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "市场会员或者是一可是.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 15:22:25.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 5,
|
||||
"bom_number": "BOM15469037",
|
||||
"bom_topic": "BOM Topic 4",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "7756777017088",
|
||||
"unit_usage_qty": 6.14,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "说明电脑工作但是语言组织.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 09:21:49.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 6,
|
||||
"bom_number": "BOM38789955",
|
||||
"bom_topic": "BOM Topic 5",
|
||||
"is_primary": "f",
|
||||
"level_number": 2,
|
||||
"product_code": "2173642523324",
|
||||
"unit_usage_qty": 4.84,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "次数安全产品的话空间其他.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 01:14:37.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 7,
|
||||
"bom_number": "BOM44892173",
|
||||
"bom_topic": "BOM Topic 6",
|
||||
"is_primary": "f",
|
||||
"level_number": 2,
|
||||
"product_code": "9233722353722",
|
||||
"unit_usage_qty": 1.57,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "功能学校产品应用大小原因然后.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 09:40:17.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 8,
|
||||
"bom_number": "BOM57810577",
|
||||
"bom_topic": "BOM Topic 7",
|
||||
"is_primary": "t",
|
||||
"level_number": 3,
|
||||
"product_code": "2849807988474",
|
||||
"unit_usage_qty": 8.68,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "评论全国他们全部我的那些.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 15:29:21.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 9,
|
||||
"bom_number": "BOM85135415",
|
||||
"bom_topic": "BOM Topic 8",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "4018893752094",
|
||||
"unit_usage_qty": 5.04,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "企业根据学习事情公司情况.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 04:09:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 10,
|
||||
"bom_number": "BOM58635315",
|
||||
"bom_topic": "BOM Topic 9",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "3787077152814",
|
||||
"unit_usage_qty": 7.67,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "这种作为中国来自特别记者方面.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "5/12/2025 22:01:43.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 11,
|
||||
"bom_number": "BOM32942034",
|
||||
"bom_topic": "BOM Topic 10",
|
||||
"is_primary": "t",
|
||||
"level_number": 1,
|
||||
"product_code": "5034750643502",
|
||||
"unit_usage_qty": 4.85,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "起来增加拥有威望.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "15/12/2025 00:41:03.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 12,
|
||||
"bom_number": "BOM67116698",
|
||||
"bom_topic": "BOM Topic 11",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "2935355176842",
|
||||
"unit_usage_qty": 9.43,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "当然解决觉得次数过程汽车.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 13:59:04.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 13,
|
||||
"bom_number": "BOM57413843",
|
||||
"bom_topic": "BOM Topic 12",
|
||||
"is_primary": "t",
|
||||
"level_number": 1,
|
||||
"product_code": "3334503439324",
|
||||
"unit_usage_qty": 9.5,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "功能应该情况市场有关是一查看.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "6/12/2025 11:45:45.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 14,
|
||||
"bom_number": "BOM57164230",
|
||||
"bom_topic": "BOM Topic 13",
|
||||
"is_primary": "t",
|
||||
"level_number": 1,
|
||||
"product_code": "3717251229322",
|
||||
"unit_usage_qty": 2.43,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "中国方式电脑情况使用以及那些积分.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "30/11/2025 05:27:42.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 15,
|
||||
"bom_number": "BOM93108369",
|
||||
"bom_topic": "BOM Topic 14",
|
||||
"is_primary": "f",
|
||||
"level_number": 3,
|
||||
"product_code": "5567459110483",
|
||||
"unit_usage_qty": 3.52,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "直接企业发展一点.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "2/12/2025 08:37:40.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 16,
|
||||
"bom_number": "BOM11354551",
|
||||
"bom_topic": "BOM Topic 15",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "4219806010724",
|
||||
"unit_usage_qty": 5.7,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "法律使用同时工作名称应该.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 15:00:03.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 17,
|
||||
"bom_number": "BOM81835936",
|
||||
"bom_topic": "BOM Topic 16",
|
||||
"is_primary": "f",
|
||||
"level_number": 1,
|
||||
"product_code": "6664882480851",
|
||||
"unit_usage_qty": 1.75,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "而且音乐大学是否本站国内.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "1/12/2025 19:09:50.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 18,
|
||||
"bom_number": "BOM50885655",
|
||||
"bom_topic": "BOM Topic 17",
|
||||
"is_primary": "t",
|
||||
"level_number": 2,
|
||||
"product_code": "8442282024091",
|
||||
"unit_usage_qty": 5.72,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "设备设备政府到了时间.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 14:54:51.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 19,
|
||||
"bom_number": "BOM33362097",
|
||||
"bom_topic": "BOM Topic 18",
|
||||
"is_primary": "f",
|
||||
"level_number": 2,
|
||||
"product_code": "9499708203973",
|
||||
"unit_usage_qty": 9.05,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "不同然后当前或者其实城市.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 17:05:21.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"bom_id": 20,
|
||||
"bom_number": "BOM26137367",
|
||||
"bom_topic": "BOM Topic 19",
|
||||
"is_primary": "t",
|
||||
"level_number": 3,
|
||||
"product_code": "6791611168077",
|
||||
"unit_usage_qty": 5.75,
|
||||
"uom_code": "pcs",
|
||||
"supplier_name": null,
|
||||
"remark": "方面数据那么免费.",
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 05:34:17.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
542
sql/dim_contract.json
Normal file
542
sql/dim_contract.json
Normal file
@@ -0,0 +1,542 @@
|
||||
[
|
||||
{
|
||||
"contract_id": 3,
|
||||
"contract_number": "CTR81660784",
|
||||
"contract_name": "更多联系加入或者.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 684365.31,
|
||||
"order_time_utc": "18/12/2025 00:04:21.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 18:52:59.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 4,
|
||||
"contract_number": "CTR44307806",
|
||||
"contract_name": "的话美国.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 97780.58,
|
||||
"order_time_utc": "6/12/2025 20:41:45.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 14:55:12.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 5,
|
||||
"contract_number": "CTR58345859",
|
||||
"contract_name": "国际组织.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 252590.8,
|
||||
"order_time_utc": "22/12/2025 19:13:20.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "4/12/2025 05:51:48.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 6,
|
||||
"contract_number": "CTR17278314",
|
||||
"contract_name": "名称为了发布.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 707451.78,
|
||||
"order_time_utc": "11/12/2025 06:31:45.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 08:48:42.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 7,
|
||||
"contract_number": "CTR98700043",
|
||||
"contract_name": "支持经营资源.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 969842.7,
|
||||
"order_time_utc": "4/12/2025 09:11:28.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "5/12/2025 16:14:59.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 8,
|
||||
"contract_number": "CTR22254085",
|
||||
"contract_name": "的话任何.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 904551.51,
|
||||
"order_time_utc": "2/12/2025 01:32:08.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 05:03:27.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 9,
|
||||
"contract_number": "CTR7590087",
|
||||
"contract_name": "只有然后一个.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 35986.23,
|
||||
"order_time_utc": "24/12/2025 01:57:14.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 06:43:42.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 10,
|
||||
"contract_number": "CTR5777267",
|
||||
"contract_name": "原因位置一些.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 529490.38,
|
||||
"order_time_utc": "27/11/2025 13:49:57.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 02:14:05.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 11,
|
||||
"contract_number": "CTR67862033",
|
||||
"contract_name": "孩子用户.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 530066.09,
|
||||
"order_time_utc": "18/12/2025 06:58:22.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 21:13:10.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 12,
|
||||
"contract_number": "CTR60857461",
|
||||
"contract_name": "可是.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 415796.85,
|
||||
"order_time_utc": "4/12/2025 04:38:37.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "30/11/2025 23:47:38.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 13,
|
||||
"contract_number": "CTR80556762",
|
||||
"contract_name": "对于包括.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 731515.19,
|
||||
"order_time_utc": "14/12/2025 14:00:18.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 14:48:40.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 14,
|
||||
"contract_number": "CTR98887875",
|
||||
"contract_name": "社区数据.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 622814.77,
|
||||
"order_time_utc": "6/12/2025 10:52:49.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "14/12/2025 13:06:31.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 15,
|
||||
"contract_number": "CTR6024758",
|
||||
"contract_name": "空间一切.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 724038.19,
|
||||
"order_time_utc": "4/12/2025 03:02:50.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "9/12/2025 02:28:13.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 16,
|
||||
"contract_number": "CTR25809063",
|
||||
"contract_name": "资源以后.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 536320.63,
|
||||
"order_time_utc": "7/12/2025 11:53:48.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 06:18:16.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 17,
|
||||
"contract_number": "CTR96148770",
|
||||
"contract_name": "业务继续上海.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 694490.64,
|
||||
"order_time_utc": "8/12/2025 08:18:33.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 08:52:05.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 18,
|
||||
"contract_number": "CTR13885019",
|
||||
"contract_name": "然后信息学校那么.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 982606.97,
|
||||
"order_time_utc": "22/12/2025 04:50:54.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "17/12/2025 22:04:41.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 19,
|
||||
"contract_number": "CTR37965955",
|
||||
"contract_name": "朋友能够工具.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 130765.57,
|
||||
"order_time_utc": "16/12/2025 09:49:04.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 23:28:13.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 20,
|
||||
"contract_number": "CTR98917999",
|
||||
"contract_name": "不会成功.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 870232.96,
|
||||
"order_time_utc": "12/12/2025 01:29:33.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "9/12/2025 14:02:34.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 21,
|
||||
"contract_number": "CTR28931818",
|
||||
"contract_name": "查看其实用户.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 482313.74,
|
||||
"order_time_utc": "5/12/2025 05:53:42.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "20/12/2025 22:05:19.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 22,
|
||||
"contract_number": "CTR31758458",
|
||||
"contract_name": "为了情况公司以下.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 974632.67,
|
||||
"order_time_utc": "13/12/2025 16:19:05.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 11:08:38.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 23,
|
||||
"contract_number": "CTR5209037",
|
||||
"contract_name": "发展中文结果没有.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 159419.49,
|
||||
"order_time_utc": "15/12/2025 19:30:03.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 16:46:58.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 24,
|
||||
"contract_number": "CTR8945482",
|
||||
"contract_name": "经济.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 420611.41,
|
||||
"order_time_utc": "23/12/2025 12:06:27.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 05:38:43.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 25,
|
||||
"contract_number": "CTR83820527",
|
||||
"contract_name": "文章其他一起.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 253462.37,
|
||||
"order_time_utc": "15/12/2025 23:04:26.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "2/12/2025 05:18:41.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 26,
|
||||
"contract_number": "CTR61523978",
|
||||
"contract_name": "上海注意孩子.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 121050.22,
|
||||
"order_time_utc": "2/12/2025 14:15:52.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "1/12/2025 07:34:11.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 27,
|
||||
"contract_number": "CTR65179592",
|
||||
"contract_name": "以上由于非常增加.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 42397.07,
|
||||
"order_time_utc": "21/12/2025 10:58:39.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 08:44:14.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 28,
|
||||
"contract_number": "CTR97766433",
|
||||
"contract_name": "注意只要.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 755586.05,
|
||||
"order_time_utc": "30/11/2025 01:04:06.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 21:57:28.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 29,
|
||||
"contract_number": "CTR29842586",
|
||||
"contract_name": "电子科技.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 953952.46,
|
||||
"order_time_utc": "3/12/2025 02:58:31.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "6/12/2025 12:59:10.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 30,
|
||||
"contract_number": "CTR86826586",
|
||||
"contract_name": "首页有些完成.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 790563.49,
|
||||
"order_time_utc": "5/12/2025 22:28:07.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 03:57:44.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 31,
|
||||
"contract_number": "CTR82104791",
|
||||
"contract_name": "电脑文件日期的话.合同",
|
||||
"customer_name": null,
|
||||
"contract_amount": 33884.69,
|
||||
"order_time_utc": "22/12/2025 10:05:14.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 08:17:54.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"contract_id": 2,
|
||||
"contract_number": "CTR43151130",
|
||||
"contract_name": "教育觉得.合同",
|
||||
"customer_name": "华泰通安科技有限公司",
|
||||
"contract_amount": 532915.76,
|
||||
"order_time_utc": "4/12/2025 10:57:23.-1f+00",
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"contract_type": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "30/11/2025 10:50:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
}
|
||||
]
|
||||
382
sql/dim_customer.json
Normal file
382
sql/dim_customer.json
Normal file
@@ -0,0 +1,382 @@
|
||||
[
|
||||
{
|
||||
"customer_id": 2,
|
||||
"customer_name": "华泰通安科技有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "13583837573",
|
||||
"telephone": null,
|
||||
"email": "guiying96@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "湖南省阜新县牧野福州路A座 948012",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "19/12/2025 03:38:06.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 3,
|
||||
"customer_name": "海创网络有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "18957536746",
|
||||
"telephone": null,
|
||||
"email": "zzhang@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "海南省莉市海陵彭路l座 290465",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "30/11/2025 18:29:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 4,
|
||||
"customer_name": "菊风公司信息有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "13504075265",
|
||||
"telephone": null,
|
||||
"email": "xia54@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "辽宁省邯郸市淄川兴城路p座 565507",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "20/12/2025 06:40:06.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 5,
|
||||
"customer_name": "盟新科技有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "15814141145",
|
||||
"telephone": null,
|
||||
"email": "momin@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "四川省太原市崇文乌鲁木齐街c座 701509",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "17/12/2025 08:45:29.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 6,
|
||||
"customer_name": "四通传媒有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "13715663646",
|
||||
"telephone": null,
|
||||
"email": "taosun@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "贵州省桂荣市魏都尹路N座 263707",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "20/12/2025 17:27:20.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 7,
|
||||
"customer_name": "飞海科技传媒有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "13938217533",
|
||||
"telephone": null,
|
||||
"email": "jingzou@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "河南省台北市大兴张街O座 373438",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "5/12/2025 01:40:19.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 8,
|
||||
"customer_name": "易动力科技有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "13872486621",
|
||||
"telephone": null,
|
||||
"email": "oqian@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "河南省阜新市合川卢路o座 600090",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 11:41:23.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 9,
|
||||
"customer_name": "MBP软件网络有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "15684801530",
|
||||
"telephone": null,
|
||||
"email": "qiufang@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "福建省澳门市城东陈路K座 792594",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 22:23:16.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 10,
|
||||
"customer_name": "鑫博腾飞信息有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "18503391590",
|
||||
"telephone": null,
|
||||
"email": "lixia@example.org",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "广东省六安县长寿丁街f座 479607",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 15:03:47.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 11,
|
||||
"customer_name": "同兴万点传媒有限公司",
|
||||
"customer_source": "推荐",
|
||||
"phone": "15005909274",
|
||||
"telephone": null,
|
||||
"email": "ming77@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "上海市畅县黄浦潮州路Z座 168305",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 06:37:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 12,
|
||||
"customer_name": "浦华众城信息有限公司",
|
||||
"customer_source": "推荐",
|
||||
"phone": "13436637029",
|
||||
"telephone": null,
|
||||
"email": "qiaofang@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "澳门特别行政区梧州市大兴潮州街H座 920472",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 17:30:53.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 13,
|
||||
"customer_name": "华成育卓信息有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "18668177887",
|
||||
"telephone": null,
|
||||
"email": "guotao@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "山西省玉梅市怀柔胡路a座 437143",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 00:30:52.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 14,
|
||||
"customer_name": "双敏电子网络有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "13556032093",
|
||||
"telephone": null,
|
||||
"email": "mingong@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "山西省阜新县滨城何路o座 127755",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 01:41:03.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 15,
|
||||
"customer_name": "华成育卓网络有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "18853534189",
|
||||
"telephone": null,
|
||||
"email": "qtan@example.org",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "云南省林市淄川陈街m座 800035",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "30/11/2025 07:30:18.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 16,
|
||||
"customer_name": "信诚致远网络有限公司",
|
||||
"customer_source": "线上",
|
||||
"phone": "18851352720",
|
||||
"telephone": null,
|
||||
"email": "dren@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "山东省广州市璧山赵路U座 774845",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 05:06:12.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 17,
|
||||
"customer_name": "毕博诚传媒有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "18865747212",
|
||||
"telephone": null,
|
||||
"email": "pinggao@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "河北省北镇市魏都哈尔滨路N座 310652",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 18:21:02.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 18,
|
||||
"customer_name": "合联电子科技有限公司",
|
||||
"customer_source": "推荐",
|
||||
"phone": "13526318565",
|
||||
"telephone": null,
|
||||
"email": "guiyingwei@example.org",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "内蒙古自治区静县普陀南京街W座 344461",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 00:02:08.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 19,
|
||||
"customer_name": "诺依曼软件科技有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "13356911559",
|
||||
"telephone": null,
|
||||
"email": "minxue@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "新疆维吾尔自治区阜新市东城邯郸街O座 159144",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "2/12/2025 05:55:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 20,
|
||||
"customer_name": "襄樊地球村科技有限公司",
|
||||
"customer_source": "推荐",
|
||||
"phone": "18249985760",
|
||||
"telephone": null,
|
||||
"email": "jhan@example.net",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "重庆市昆明市高港张路U座 962119",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "3/12/2025 01:41:25.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"customer_id": 21,
|
||||
"customer_name": "新宇龙信息传媒有限公司",
|
||||
"customer_source": "线下",
|
||||
"phone": "15988906811",
|
||||
"telephone": null,
|
||||
"email": "mochao@example.com",
|
||||
"customer_level": null,
|
||||
"industry": null,
|
||||
"address": "海南省玉珍市永川袁街r座 604856",
|
||||
"is_locked": null,
|
||||
"deal_status": null,
|
||||
"last_follow_up_time_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "22/12/2025 18:33:48.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
102
sql/dim_equipment.json
Normal file
102
sql/dim_equipment.json
Normal file
@@ -0,0 +1,102 @@
|
||||
[
|
||||
{
|
||||
"equipment_id": 1,
|
||||
"equipment_number": "EQ4092",
|
||||
"equipment_name": "设备 0",
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 11:51:05.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 2,
|
||||
"equipment_number": "EQ2399",
|
||||
"equipment_name": "设备 1",
|
||||
"source_system": null,
|
||||
"row_valid_from": "26/11/2025 19:49:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 3,
|
||||
"equipment_number": "EQ4938",
|
||||
"equipment_name": "设备 2",
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 01:48:18.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 4,
|
||||
"equipment_number": "EQ2339",
|
||||
"equipment_name": "设备 3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 05:56:50.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 5,
|
||||
"equipment_number": "EQ9168",
|
||||
"equipment_name": "设备 4",
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 03:40:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 6,
|
||||
"equipment_number": "EQ79",
|
||||
"equipment_name": "设备 5",
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 11:39:15.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 7,
|
||||
"equipment_number": "EQ7709",
|
||||
"equipment_name": "设备 6",
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 05:33:52.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 8,
|
||||
"equipment_number": "EQ267",
|
||||
"equipment_name": "设备 7",
|
||||
"source_system": null,
|
||||
"row_valid_from": "19/12/2025 10:48:53.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 9,
|
||||
"equipment_number": "EQ8412",
|
||||
"equipment_name": "设备 8",
|
||||
"source_system": null,
|
||||
"row_valid_from": "17/12/2025 23:27:19.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"equipment_id": 10,
|
||||
"equipment_number": "EQ6494",
|
||||
"equipment_name": "设备 9",
|
||||
"source_system": null,
|
||||
"row_valid_from": "16/12/2025 06:33:13.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
122
sql/dim_operation.json
Normal file
122
sql/dim_operation.json
Normal file
@@ -0,0 +1,122 @@
|
||||
[
|
||||
{
|
||||
"operation_id": 1,
|
||||
"operation_number": "OP0",
|
||||
"operation_name": "组装",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 21:08:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 2,
|
||||
"operation_number": "OP10",
|
||||
"operation_name": "测试",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 18:31:51.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 3,
|
||||
"operation_number": "OP20",
|
||||
"operation_name": "测试",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "6/12/2025 22:57:16.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 4,
|
||||
"operation_number": "OP30",
|
||||
"operation_name": "焊接",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "28/11/2025 18:46:36.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 5,
|
||||
"operation_number": "OP40",
|
||||
"operation_name": "切割",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "22/12/2025 05:31:31.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 6,
|
||||
"operation_number": "OP50",
|
||||
"operation_name": "组装",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "28/11/2025 21:37:44.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 7,
|
||||
"operation_number": "OP60",
|
||||
"operation_name": "切割",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 17:31:04.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 8,
|
||||
"operation_number": "OP70",
|
||||
"operation_name": "焊接",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 15:06:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 9,
|
||||
"operation_number": "OP80",
|
||||
"operation_name": "测试",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "1/12/2025 06:01:40.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_id": 10,
|
||||
"operation_number": "OP90",
|
||||
"operation_name": "包装",
|
||||
"report_permission": "ALL",
|
||||
"report_ratio": 1.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "16/12/2025 15:42:26.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
1
sql/dim_person.json
Normal file
1
sql/dim_person.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
962
sql/dim_product.json
Normal file
962
sql/dim_product.json
Normal file
@@ -0,0 +1,962 @@
|
||||
[
|
||||
{
|
||||
"product_id": 2,
|
||||
"product_code": "7659126892780",
|
||||
"product_name": "怎么产品",
|
||||
"product_spec": "92x16mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 34.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 945.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 02:44:20.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 3,
|
||||
"product_code": "8039953217571",
|
||||
"product_name": "这样产品",
|
||||
"product_spec": "90x74mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 44.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 911.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 11:41:20.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 4,
|
||||
"product_code": "3638245508677",
|
||||
"product_name": "能够产品",
|
||||
"product_spec": "94x49mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 10.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 525.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "16/12/2025 17:47:25.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 5,
|
||||
"product_code": "7532736476482",
|
||||
"product_name": "地方产品",
|
||||
"product_spec": "98x96mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 20.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 672.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 13:06:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 6,
|
||||
"product_code": "9870194561288",
|
||||
"product_name": "或者产品",
|
||||
"product_spec": "52x44mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 13.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 928.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 23:41:10.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 7,
|
||||
"product_code": "5958126470076",
|
||||
"product_name": "类型产品",
|
||||
"product_spec": "35x63mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 47.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 540.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 12:30:43.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 8,
|
||||
"product_code": "6000417247214",
|
||||
"product_name": "选择产品",
|
||||
"product_spec": "17x41mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 11.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 856.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "14/12/2025 12:04:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 9,
|
||||
"product_code": "2049246368404",
|
||||
"product_name": "影响产品",
|
||||
"product_spec": "84x65mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 15.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 786.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "16/12/2025 17:48:38.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 10,
|
||||
"product_code": "5102629212767",
|
||||
"product_name": "两个产品",
|
||||
"product_spec": "16x73mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 19.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 529.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 04:51:01.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 11,
|
||||
"product_code": "2970356760935",
|
||||
"product_name": "这么产品",
|
||||
"product_spec": "26x100mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 19.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 595.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "5/12/2025 21:56:11.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 12,
|
||||
"product_code": "7040071637975",
|
||||
"product_name": "应用产品",
|
||||
"product_spec": "53x88mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 38.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 897.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 09:59:45.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 13,
|
||||
"product_code": "0879421094505",
|
||||
"product_name": "的话产品",
|
||||
"product_spec": "96x68mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 44.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 735.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "9/12/2025 11:00:02.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 14,
|
||||
"product_code": "6226799835614",
|
||||
"product_name": "社会产品",
|
||||
"product_spec": "60x58mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 27.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 781.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "17/12/2025 13:40:03.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 15,
|
||||
"product_code": "9006425053745",
|
||||
"product_name": "产品产品",
|
||||
"product_spec": "65x77mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 11.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 970.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 19:42:52.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 16,
|
||||
"product_code": "1583412793726",
|
||||
"product_name": "希望产品",
|
||||
"product_spec": "16x38mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 42.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 981.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 20:23:28.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 17,
|
||||
"product_code": "1977620666185",
|
||||
"product_name": "学校产品",
|
||||
"product_spec": "56x66mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 39.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 963.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "15/12/2025 22:13:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 18,
|
||||
"product_code": "1039445799063",
|
||||
"product_name": "不会产品",
|
||||
"product_spec": "38x36mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 41.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 562.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "15/12/2025 21:41:47.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 19,
|
||||
"product_code": "8211837706139",
|
||||
"product_name": "女人产品",
|
||||
"product_spec": "13x18mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 45.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 991.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "3/12/2025 17:44:55.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 20,
|
||||
"product_code": "6293974814849",
|
||||
"product_name": "名称产品",
|
||||
"product_spec": "23x70mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 38.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 806.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "3/12/2025 13:28:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 21,
|
||||
"product_code": "3188054791864",
|
||||
"product_name": "管理产品",
|
||||
"product_spec": "24x14mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 17.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 832.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "4/12/2025 11:49:53.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 22,
|
||||
"product_code": "2826090944868",
|
||||
"product_name": "一次产品",
|
||||
"product_spec": "43x88mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 24.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 759.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "21/12/2025 06:16:54.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 23,
|
||||
"product_code": "8464737749892",
|
||||
"product_name": "全部产品",
|
||||
"product_spec": "80x94mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 12.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 671.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "15/12/2025 19:17:02.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 24,
|
||||
"product_code": "4867845340588",
|
||||
"product_name": "成为产品",
|
||||
"product_spec": "38x44mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 50.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 754.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "11/12/2025 17:41:26.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 25,
|
||||
"product_code": "1100938008426",
|
||||
"product_name": "深圳产品",
|
||||
"product_spec": "69x15mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 18.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 961.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 17:42:28.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 26,
|
||||
"product_code": "2212618436227",
|
||||
"product_name": "活动产品",
|
||||
"product_spec": "74x82mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 47.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 861.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 12:23:26.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 27,
|
||||
"product_code": "0048151171408",
|
||||
"product_name": "市场产品",
|
||||
"product_spec": "18x44mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 36.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 956.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 14:31:25.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 28,
|
||||
"product_code": "9439810842752",
|
||||
"product_name": "以上产品",
|
||||
"product_spec": "14x45mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 37.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 817.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "19/12/2025 11:22:19.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 29,
|
||||
"product_code": "1326277406703",
|
||||
"product_name": "自己产品",
|
||||
"product_spec": "35x45mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 14.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 715.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "22/12/2025 17:00:58.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 30,
|
||||
"product_code": "1986049085170",
|
||||
"product_name": "研究产品",
|
||||
"product_spec": "92x61mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 37.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 782.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 19:48:54.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 31,
|
||||
"product_code": "8441750643383",
|
||||
"product_name": "基本产品",
|
||||
"product_spec": "90x26mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 46.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 833.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "28/11/2025 11:28:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 32,
|
||||
"product_code": "3801700019807",
|
||||
"product_name": "上海产品",
|
||||
"product_spec": "74x28mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 23.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 899.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 17:30:26.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 33,
|
||||
"product_code": "8498389498952",
|
||||
"product_name": "生产产品",
|
||||
"product_spec": "89x14mm",
|
||||
"product_category": "机械",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 17.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 830.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 07:13:37.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 34,
|
||||
"product_code": "8603181123814",
|
||||
"product_name": "广告产品",
|
||||
"product_spec": "46x59mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 19.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 894.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "26/11/2025 16:54:36.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 35,
|
||||
"product_code": "6835344685163",
|
||||
"product_name": "会员产品",
|
||||
"product_spec": "15x29mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 50.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 646.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "4/12/2025 18:38:08.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 36,
|
||||
"product_code": "4164661112277",
|
||||
"product_name": "单位产品",
|
||||
"product_spec": "29x58mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "kg",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 35.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 897.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 10:15:16.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 37,
|
||||
"product_code": "3698468656357",
|
||||
"product_name": "积分产品",
|
||||
"product_spec": "65x54mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 22.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 591.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 13:06:31.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 38,
|
||||
"product_code": "7220108163596",
|
||||
"product_name": "成功产品",
|
||||
"product_spec": "94x82mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 25.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 508.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "8/12/2025 16:35:40.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 39,
|
||||
"product_code": "5638608140665",
|
||||
"product_name": "说明产品",
|
||||
"product_spec": "93x97mm",
|
||||
"product_category": "电子",
|
||||
"product_type": null,
|
||||
"uom_code": "m",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 12.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 551.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 09:42:20.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 40,
|
||||
"product_code": "8341088934569",
|
||||
"product_name": "今天产品",
|
||||
"product_spec": "19x56mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 23.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 845.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "2/12/2025 04:21:42.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"product_id": 41,
|
||||
"product_code": "1440232079921",
|
||||
"product_name": "积分产品",
|
||||
"product_spec": "45x27mm",
|
||||
"product_category": "化工",
|
||||
"product_type": null,
|
||||
"uom_code": "pcs",
|
||||
"brand": null,
|
||||
"origin": null,
|
||||
"transport_condition": null,
|
||||
"barcode": null,
|
||||
"drawing_number": null,
|
||||
"material": null,
|
||||
"surface_treatment": null,
|
||||
"min_stock_qty": 43.0,
|
||||
"safety_stock_qty": null,
|
||||
"max_stock_qty": 665.0,
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 23:53:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
52
sql/dim_qc_reason.json
Normal file
52
sql/dim_qc_reason.json
Normal file
@@ -0,0 +1,52 @@
|
||||
[
|
||||
{
|
||||
"qc_reason_id": 1,
|
||||
"qc_reason_number": "QC822",
|
||||
"qc_reason_name": "尺寸偏差",
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 18:23:18.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"qc_reason_id": 2,
|
||||
"qc_reason_number": "QC838",
|
||||
"qc_reason_name": "表面划痕",
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 17:10:33.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"qc_reason_id": 3,
|
||||
"qc_reason_number": "QC428",
|
||||
"qc_reason_name": "功能失效",
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 01:46:51.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"qc_reason_id": 4,
|
||||
"qc_reason_number": "QC982",
|
||||
"qc_reason_name": "材料缺陷",
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 00:57:34.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"qc_reason_id": 5,
|
||||
"qc_reason_number": "QC840",
|
||||
"qc_reason_name": "其他",
|
||||
"source_system": null,
|
||||
"row_valid_from": "19/12/2025 10:43:50.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
112
sql/dim_routing.json
Normal file
112
sql/dim_routing.json
Normal file
@@ -0,0 +1,112 @@
|
||||
[
|
||||
{
|
||||
"routing_id": 1,
|
||||
"routing_number": "RT928664",
|
||||
"routing_name": "工艺路线 0",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "22/12/2025 01:28:41.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 2,
|
||||
"routing_number": "RT813173",
|
||||
"routing_name": "工艺路线 1",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 02:25:02.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 3,
|
||||
"routing_number": "RT317805",
|
||||
"routing_name": "工艺路线 2",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 22:26:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 4,
|
||||
"routing_number": "RT814274",
|
||||
"routing_name": "工艺路线 3",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "14/12/2025 18:17:46.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 5,
|
||||
"routing_number": "RT506986",
|
||||
"routing_name": "工艺路线 4",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "2/12/2025 07:40:10.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 6,
|
||||
"routing_number": "RT384801",
|
||||
"routing_name": "工艺路线 5",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 21:46:11.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 7,
|
||||
"routing_number": "RT472662",
|
||||
"routing_name": "工艺路线 6",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "1/12/2025 18:32:07.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 8,
|
||||
"routing_number": "RT557638",
|
||||
"routing_name": "工艺路线 7",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "12/12/2025 09:16:30.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 9,
|
||||
"routing_number": "RT394755",
|
||||
"routing_name": "工艺路线 8",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 09:36:41.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"routing_id": 10,
|
||||
"routing_number": "RT314588",
|
||||
"routing_name": "工艺路线 9",
|
||||
"operation_list_text": "Op1 -> Op2 -> Op3",
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 14:50:52.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
322
sql/dim_supplier.json
Normal file
322
sql/dim_supplier.json
Normal file
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"supplier_id": 2,
|
||||
"supplier_code": "29635153",
|
||||
"supplier_name": "飞利信科技有限公司",
|
||||
"supplier_category": "设备",
|
||||
"supplier_level": null,
|
||||
"address": "香港特别行政区浩县兴山吴街y座 393831",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 02:24:36.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 3,
|
||||
"supplier_code": "60827272",
|
||||
"supplier_name": "迪摩信息有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "安徽省天津县西峰刘路D座 348509",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "3/12/2025 00:04:20.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 4,
|
||||
"supplier_code": "35503811",
|
||||
"supplier_name": "联软传媒有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "天津市南宁县龙潭曹路V座 252377",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "14/12/2025 11:09:32.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 5,
|
||||
"supplier_code": "22043849",
|
||||
"supplier_name": "恒聪百汇网络有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "青海省昆明市华龙杭州路Y座 224823",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 16:26:10.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 6,
|
||||
"supplier_code": "66344148",
|
||||
"supplier_name": "惠派国际公司科技有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "甘肃省敏市大东福州街n座 946705",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 18:00:21.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 7,
|
||||
"supplier_code": "70123661",
|
||||
"supplier_name": "维旺明信息有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "福建省张家港市大东易路A座 727921",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "23/12/2025 09:19:05.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 8,
|
||||
"supplier_code": "75720629",
|
||||
"supplier_name": "凌云信息有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "甘肃省丹县涪城张路S座 323933",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "17/12/2025 18:46:28.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 9,
|
||||
"supplier_code": "26315249",
|
||||
"supplier_name": "襄樊地球村网络有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "辽宁省沈阳县普陀齐路l座 999109",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "26/11/2025 07:28:39.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 10,
|
||||
"supplier_code": "58018903",
|
||||
"supplier_name": "立信电子传媒有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "海南省辛集市丰都合肥路r座 299591",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 14:58:35.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 11,
|
||||
"supplier_code": "75456863",
|
||||
"supplier_name": "彩虹信息有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "内蒙古自治区冬梅县翔安萧街k座 167178",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 13:41:25.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 12,
|
||||
"supplier_code": "97373285",
|
||||
"supplier_name": "凌云科技有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "安徽省桂珍市璧山陈街Q座 440048",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 23:48:55.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 13,
|
||||
"supplier_code": "99941253",
|
||||
"supplier_name": "时空盒数字网络有限公司",
|
||||
"supplier_category": "设备",
|
||||
"supplier_level": null,
|
||||
"address": "内蒙古自治区上海市兴山齐齐哈尔街B座 464689",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 16:36:23.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 14,
|
||||
"supplier_code": "02905303",
|
||||
"supplier_name": "四通网络有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "福建省雪县黄浦刘街t座 138434",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 14:12:50.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 15,
|
||||
"supplier_code": "86588577",
|
||||
"supplier_name": "立信电子科技有限公司",
|
||||
"supplier_category": "设备",
|
||||
"supplier_level": null,
|
||||
"address": "山西省雪梅县门头沟通辽路k座 281455",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "27/11/2025 01:31:59.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 16,
|
||||
"supplier_code": "72076675",
|
||||
"supplier_name": "华远软件科技有限公司",
|
||||
"supplier_category": "设备",
|
||||
"supplier_level": null,
|
||||
"address": "浙江省欣县城东大冶街Q座 973420",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 20:36:53.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 17,
|
||||
"supplier_code": "80219491",
|
||||
"supplier_name": "佳禾传媒有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "甘肃省婷市沙湾蒋路y座 663937",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "25/12/2025 12:55:17.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 18,
|
||||
"supplier_code": "22760197",
|
||||
"supplier_name": "毕博诚网络有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "内蒙古自治区贵阳县牧野熊街N座 772146",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "18/12/2025 02:26:37.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 19,
|
||||
"supplier_code": "07094002",
|
||||
"supplier_name": "明腾传媒有限公司",
|
||||
"supplier_category": "服务",
|
||||
"supplier_level": null,
|
||||
"address": "江苏省柳县孝南曹街U座 889122",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "29/11/2025 22:22:17.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 20,
|
||||
"supplier_code": "03450178",
|
||||
"supplier_name": "数字100科技有限公司",
|
||||
"supplier_category": "原料",
|
||||
"supplier_level": null,
|
||||
"address": "江西省丹市沈河哈尔滨街W座 266948",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "28/11/2025 08:58:38.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"supplier_id": 21,
|
||||
"supplier_code": "39872104",
|
||||
"supplier_name": "恒聪百汇信息有限公司",
|
||||
"supplier_category": "设备",
|
||||
"supplier_level": null,
|
||||
"address": "内蒙古自治区建军市白云齐街I座 845016",
|
||||
"default_currency_code": null,
|
||||
"settlement_term": null,
|
||||
"contract_expiry_date_utc": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "22/12/2025 03:26:55.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
132
sql/dim_warehouse.json
Normal file
132
sql/dim_warehouse.json
Normal file
@@ -0,0 +1,132 @@
|
||||
[
|
||||
{
|
||||
"warehouse_id": 2,
|
||||
"warehouse_code": "WH001",
|
||||
"warehouse_name": "淑珍市仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 07:16:46.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 3,
|
||||
"warehouse_code": "WH002",
|
||||
"warehouse_name": "强市仓库",
|
||||
"warehouse_type": "成品仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 20:58:57.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 4,
|
||||
"warehouse_code": "WH003",
|
||||
"warehouse_name": "秀兰县仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "13/12/2025 22:49:34.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 5,
|
||||
"warehouse_code": "WH004",
|
||||
"warehouse_name": "太原县仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "15/12/2025 19:11:19.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 6,
|
||||
"warehouse_code": "WH005",
|
||||
"warehouse_name": "宇市仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "7/12/2025 22:34:16.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "25/12/2025 19:16:27.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 7,
|
||||
"warehouse_code": "WH001",
|
||||
"warehouse_name": "杰市仓库",
|
||||
"warehouse_type": "成品仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "24/12/2025 19:41:23.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 8,
|
||||
"warehouse_code": "WH002",
|
||||
"warehouse_name": "宇市仓库",
|
||||
"warehouse_type": "成品仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "4/12/2025 02:48:58.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 9,
|
||||
"warehouse_code": "WH003",
|
||||
"warehouse_name": "海口市仓库",
|
||||
"warehouse_type": "成品仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "26/12/2025 10:22:29.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 10,
|
||||
"warehouse_code": "WH004",
|
||||
"warehouse_name": "鹏市仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "4/12/2025 22:55:06.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
},
|
||||
{
|
||||
"warehouse_id": 11,
|
||||
"warehouse_code": "WH005",
|
||||
"warehouse_name": "斌市仓库",
|
||||
"warehouse_type": "原料仓",
|
||||
"status": "ENABLED",
|
||||
"address": null,
|
||||
"source_system": null,
|
||||
"row_valid_from": "10/12/2025 09:23:32.-1f+00",
|
||||
"row_valid_to": "31/12/9999 15:59:59+00",
|
||||
"is_current": "t",
|
||||
"last_updated_utc": "26/12/2025 05:36:09.-1f+00"
|
||||
}
|
||||
]
|
||||
422
sql/fact_ap_payment.json
Normal file
422
sql/fact_ap_payment.json
Normal file
@@ -0,0 +1,422 @@
|
||||
[
|
||||
{
|
||||
"ap_payment_id": 1,
|
||||
"doc_number": "AP22766562",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 6,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "9/2/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 25906.71,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 2,
|
||||
"doc_number": "AP88974654",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 8,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "16/11/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 37620.28,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 3,
|
||||
"doc_number": "AP80527903",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "17/12/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 27273.98,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 4,
|
||||
"doc_number": "AP46338366",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 3,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "17/5/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 7414.76,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 5,
|
||||
"doc_number": "AP5549914",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "16/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 39895.91,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 6,
|
||||
"doc_number": "AP30326495",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "16/10/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 18899.8,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 7,
|
||||
"doc_number": "AP32421924",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 5,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "14/10/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 16104.34,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 8,
|
||||
"doc_number": "AP58297564",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "9/4/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 45050.54,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 9,
|
||||
"doc_number": "AP44327338",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "8/9/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 43071.66,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 10,
|
||||
"doc_number": "AP58460499",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "7/5/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 37940.84,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 11,
|
||||
"doc_number": "AP39014534",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 4,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "10/10/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 47428.08,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 12,
|
||||
"doc_number": "AP14023853",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 5,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "10/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 37875.28,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 13,
|
||||
"doc_number": "AP35235417",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 8,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "18/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 11187.59,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 14,
|
||||
"doc_number": "AP83466622",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "23/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 29825.07,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 15,
|
||||
"doc_number": "AP65495215",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 9,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "12/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 29137.77,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 16,
|
||||
"doc_number": "AP60440000",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 6,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "16/8/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 25254.48,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 17,
|
||||
"doc_number": "AP66571233",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 7,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "15/2/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 23098.47,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 18,
|
||||
"doc_number": "AP33958730",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 3,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "27/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 4477.6,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 19,
|
||||
"doc_number": "AP18134079",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 8,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "21/4/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 35126.28,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ap_payment_id": 20,
|
||||
"doc_number": "AP16449942",
|
||||
"doc_type": "PAYMENT",
|
||||
"supplier_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "16/5/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 30644.26,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
422
sql/fact_ar_receipt.json
Normal file
422
sql/fact_ar_receipt.json
Normal file
@@ -0,0 +1,422 @@
|
||||
[
|
||||
{
|
||||
"ar_receipt_id": 1,
|
||||
"doc_number": "AR7319819",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 2,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "29/5/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 41230.16,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 2,
|
||||
"doc_number": "AR97132012",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "27/6/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 45220.89,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 3,
|
||||
"doc_number": "AR60123143",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 4,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "31/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 3280.64,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 4,
|
||||
"doc_number": "AR80668128",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 4,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "24/8/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 20409.1,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 5,
|
||||
"doc_number": "AR8000318",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 9,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "6/2/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 29089.97,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 6,
|
||||
"doc_number": "AR41555486",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 8,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "10/12/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 45088.01,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 7,
|
||||
"doc_number": "AR97684129",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "6/3/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 44233.58,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 8,
|
||||
"doc_number": "AR8875506",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 4,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "19/10/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 26942.91,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 9,
|
||||
"doc_number": "AR88315098",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 6,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "7/12/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 16724.37,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 10,
|
||||
"doc_number": "AR93427405",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 3,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "18/12/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 12976.69,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 11,
|
||||
"doc_number": "AR93851917",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 4,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "14/10/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 30762.29,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 12,
|
||||
"doc_number": "AR1052947",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 9,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "9/2/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 9059.86,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 13,
|
||||
"doc_number": "AR30085293",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 8,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "28/3/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 7984.02,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 14,
|
||||
"doc_number": "AR66296577",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 5,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "23/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 2698.12,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 15,
|
||||
"doc_number": "AR60642387",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 7,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "27/7/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 12560.89,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 16,
|
||||
"doc_number": "AR728466",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "27/11/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 29503.57,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 17,
|
||||
"doc_number": "AR57762580",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 6,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "27/1/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 10832.88,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 18,
|
||||
"doc_number": "AR78376295",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 10,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "2/6/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 32247.78,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 19,
|
||||
"doc_number": "AR10637382",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 9,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "5/5/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 38910.41,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"ar_receipt_id": 20,
|
||||
"doc_number": "AR60241043",
|
||||
"doc_type": "RECEIPT",
|
||||
"customer_id": 1,
|
||||
"contract_id": null,
|
||||
"doc_date_utc": "11/2/2025 16:00:00+00",
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"amount": 10016.02,
|
||||
"amount_base": null,
|
||||
"fee_amount": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": null,
|
||||
"written_off_amount": null,
|
||||
"unwritten_off_amount": null,
|
||||
"related_doc_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
322
sql/fact_cash_flow.json
Normal file
322
sql/fact_cash_flow.json
Normal file
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"cash_flow_id": 1,
|
||||
"doc_number": "CF6768483",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 256.26,
|
||||
"expense_amount": 1306.72,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 2,
|
||||
"doc_number": "CF3288503",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 1739.28,
|
||||
"expense_amount": 440.53,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 3,
|
||||
"doc_number": "CF39687070",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 4150.02,
|
||||
"expense_amount": 2808.29,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 4,
|
||||
"doc_number": "CF5123241",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 895.46,
|
||||
"expense_amount": 6540.48,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 5,
|
||||
"doc_number": "CF92582604",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 1050.94,
|
||||
"expense_amount": 2203.11,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 6,
|
||||
"doc_number": "CF19573339",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 1820.84,
|
||||
"expense_amount": 7786.78,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 7,
|
||||
"doc_number": "CF69107956",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 5520.24,
|
||||
"expense_amount": 6787.02,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 8,
|
||||
"doc_number": "CF12203628",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 5671.04,
|
||||
"expense_amount": 5991.79,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 9,
|
||||
"doc_number": "CF96412637",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 8718.46,
|
||||
"expense_amount": 4419.49,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 10,
|
||||
"doc_number": "CF12272309",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 5214.02,
|
||||
"expense_amount": 2497.47,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 11,
|
||||
"doc_number": "CF19227489",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 9817.26,
|
||||
"expense_amount": 4641.33,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 12,
|
||||
"doc_number": "CF71604298",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 6002.9,
|
||||
"expense_amount": 7628.47,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 13,
|
||||
"doc_number": "CF94626179",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 8908.12,
|
||||
"expense_amount": 1403.26,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 14,
|
||||
"doc_number": "CF89012391",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 8731.32,
|
||||
"expense_amount": 1779.07,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 15,
|
||||
"doc_number": "CF67343535",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 3998.41,
|
||||
"expense_amount": 1184.74,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 16,
|
||||
"doc_number": "CF22081511",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 6956.41,
|
||||
"expense_amount": 6908.72,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 17,
|
||||
"doc_number": "CF96019961",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 1420.7,
|
||||
"expense_amount": 5795.18,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 18,
|
||||
"doc_number": "CF92790804",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 5683.75,
|
||||
"expense_amount": 9111.8,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 19,
|
||||
"doc_number": "CF93146536",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 8435.89,
|
||||
"expense_amount": 1738.36,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"cash_flow_id": 20,
|
||||
"doc_number": "CF37862214",
|
||||
"doc_type": "CASHFLOW",
|
||||
"account_name": null,
|
||||
"doc_date_utc": null,
|
||||
"business_type": null,
|
||||
"income_amount": 2913.84,
|
||||
"expense_amount": 4442.69,
|
||||
"balance_amount": null,
|
||||
"counterparty": null,
|
||||
"remark": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
192
sql/fact_commission.json
Normal file
192
sql/fact_commission.json
Normal file
@@ -0,0 +1,192 @@
|
||||
[
|
||||
{
|
||||
"commission_id": 1,
|
||||
"commission_person": "吴建",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 739.75,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 2,
|
||||
"commission_person": "赵雪",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 316.02,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 3,
|
||||
"commission_person": "任龙",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 872.32,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 4,
|
||||
"commission_person": "徐涛",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 139.82,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 5,
|
||||
"commission_person": "王秀珍",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 269.59,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 6,
|
||||
"commission_person": "杨婷婷",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 228.49,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 7,
|
||||
"commission_person": "王秀芳",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 919.07,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 8,
|
||||
"commission_person": "刘芳",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 524.2,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 9,
|
||||
"commission_person": "郑林",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 987.76,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"commission_id": 10,
|
||||
"commission_person": "朱帅",
|
||||
"department": null,
|
||||
"commission_rate_pct": null,
|
||||
"coefficient": null,
|
||||
"receivable_commission": 958.02,
|
||||
"received_commission": null,
|
||||
"contract_id": null,
|
||||
"customer_id": null,
|
||||
"product_name": null,
|
||||
"opportunity_name": null,
|
||||
"contract_amount": null,
|
||||
"deal_time_utc": null,
|
||||
"is_invoiced": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
102
sql/fact_inventory_count.json
Normal file
102
sql/fact_inventory_count.json
Normal file
@@ -0,0 +1,102 @@
|
||||
[
|
||||
{
|
||||
"inventory_count_id": 1,
|
||||
"count_number": "CNT55217992",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "25/9/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 2,
|
||||
"count_number": "CNT11377040",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "20/4/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 3,
|
||||
"count_number": "CNT94805545",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "5/10/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 4,
|
||||
"count_number": "CNT64741450",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "23/1/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 5,
|
||||
"count_number": "CNT89069471",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "16/6/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 6,
|
||||
"count_number": "CNT6215086",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "17/12/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 7,
|
||||
"count_number": "CNT72116393",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "12/1/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 8,
|
||||
"count_number": "CNT25970731",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "20/12/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 9,
|
||||
"count_number": "CNT96428082",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "5/9/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_count_id": 10,
|
||||
"count_number": "CNT32858501",
|
||||
"warehouse_name": null,
|
||||
"count_name": null,
|
||||
"count_time_utc": "1/6/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
4002
sql/fact_inventory_movement.json
Normal file
4002
sql/fact_inventory_movement.json
Normal file
File diff suppressed because it is too large
Load Diff
122
sql/fact_inventory_transfer.json
Normal file
122
sql/fact_inventory_transfer.json
Normal file
@@ -0,0 +1,122 @@
|
||||
[
|
||||
{
|
||||
"inventory_transfer_id": 1,
|
||||
"transfer_number": "TR86704957",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "12/9/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 2,
|
||||
"transfer_number": "TR25229646",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "3/2/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 3,
|
||||
"transfer_number": "TR20773990",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "14/5/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 4,
|
||||
"transfer_number": "TR79949116",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "28/5/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 5,
|
||||
"transfer_number": "TR53104189",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "14/12/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 6,
|
||||
"transfer_number": "TR60080040",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "30/7/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 7,
|
||||
"transfer_number": "TR65555184",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "21/7/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 8,
|
||||
"transfer_number": "TR10515517",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "26/7/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 9,
|
||||
"transfer_number": "TR15089271",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "1/10/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"inventory_transfer_id": 10,
|
||||
"transfer_number": "TR36502040",
|
||||
"transfer_name": null,
|
||||
"tag": null,
|
||||
"transfer_time_utc": "6/3/2025 16:00:00+00",
|
||||
"plate_number": null,
|
||||
"delivery_mode": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
322
sql/fact_invoice.json
Normal file
322
sql/fact_invoice.json
Normal file
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"invoice_id": 1,
|
||||
"invoice_request_number": "INV36396299",
|
||||
"contract_id": null,
|
||||
"customer_id": 5,
|
||||
"invoice_amount": 28586.57,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "6/7/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 2,
|
||||
"invoice_request_number": "INV69987646",
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"invoice_amount": 31731.68,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "14/6/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 3,
|
||||
"invoice_request_number": "INV86425647",
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"invoice_amount": 21165.3,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "14/7/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 4,
|
||||
"invoice_request_number": "INV31949080",
|
||||
"contract_id": null,
|
||||
"customer_id": 3,
|
||||
"invoice_amount": 3492.19,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "7/3/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 5,
|
||||
"invoice_request_number": "INV26915438",
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"invoice_amount": 5276.53,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "30/4/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 6,
|
||||
"invoice_request_number": "INV95836121",
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"invoice_amount": 27742.82,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "2/2/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 7,
|
||||
"invoice_request_number": "INV62615584",
|
||||
"contract_id": null,
|
||||
"customer_id": 10,
|
||||
"invoice_amount": 3952.38,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "17/5/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 8,
|
||||
"invoice_request_number": "INV12452264",
|
||||
"contract_id": null,
|
||||
"customer_id": 8,
|
||||
"invoice_amount": 49931.53,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "24/1/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 9,
|
||||
"invoice_request_number": "INV28287981",
|
||||
"contract_id": null,
|
||||
"customer_id": 9,
|
||||
"invoice_amount": 10737.77,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "16/4/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 10,
|
||||
"invoice_request_number": "INV18976893",
|
||||
"contract_id": null,
|
||||
"customer_id": 5,
|
||||
"invoice_amount": 32111.73,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "13/7/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 11,
|
||||
"invoice_request_number": "INV91178844",
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"invoice_amount": 29249.76,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "20/8/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 12,
|
||||
"invoice_request_number": "INV58682278",
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"invoice_amount": 32661.61,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "1/5/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 13,
|
||||
"invoice_request_number": "INV77991324",
|
||||
"contract_id": null,
|
||||
"customer_id": 8,
|
||||
"invoice_amount": 46350.89,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "19/6/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 14,
|
||||
"invoice_request_number": "INV25245957",
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"invoice_amount": 33793.45,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "2/4/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 15,
|
||||
"invoice_request_number": "INV81090744",
|
||||
"contract_id": null,
|
||||
"customer_id": 9,
|
||||
"invoice_amount": 26883.11,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "2/8/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 16,
|
||||
"invoice_request_number": "INV10910850",
|
||||
"contract_id": null,
|
||||
"customer_id": 6,
|
||||
"invoice_amount": 28263.65,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "18/6/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 17,
|
||||
"invoice_request_number": "INV16880249",
|
||||
"contract_id": null,
|
||||
"customer_id": 5,
|
||||
"invoice_amount": 1304.23,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "29/9/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 18,
|
||||
"invoice_request_number": "INV881944",
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"invoice_amount": 47111.67,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "29/10/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 19,
|
||||
"invoice_request_number": "INV63773037",
|
||||
"contract_id": null,
|
||||
"customer_id": 5,
|
||||
"invoice_amount": 39694.31,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "4/12/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"invoice_id": 20,
|
||||
"invoice_request_number": "INV82625925",
|
||||
"contract_id": null,
|
||||
"customer_id": 10,
|
||||
"invoice_amount": 35210.5,
|
||||
"contract_amount": null,
|
||||
"invoice_date_utc": "30/10/2025 16:00:00+00",
|
||||
"actual_invoice_date_utc": null,
|
||||
"invoice_type": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
902
sql/fact_labor_report.json
Normal file
902
sql/fact_labor_report.json
Normal file
@@ -0,0 +1,902 @@
|
||||
[
|
||||
{
|
||||
"labor_report_id": 1,
|
||||
"work_order_number": "WO6412",
|
||||
"task_name": null,
|
||||
"product_id": 19,
|
||||
"operation_status": null,
|
||||
"worker_name": "周峰",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "17/12/2025 05:41:28.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 2,
|
||||
"work_order_number": "WO2388",
|
||||
"task_name": null,
|
||||
"product_id": 14,
|
||||
"operation_status": null,
|
||||
"worker_name": "熊兵",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "13/12/2025 07:08:00.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 3,
|
||||
"work_order_number": "WO1629",
|
||||
"task_name": null,
|
||||
"product_id": 13,
|
||||
"operation_status": null,
|
||||
"worker_name": "伍岩",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "12/12/2025 14:05:41.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 4,
|
||||
"work_order_number": "WO5008",
|
||||
"task_name": null,
|
||||
"product_id": 7,
|
||||
"operation_status": null,
|
||||
"worker_name": "王建",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 02:32:16.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 5,
|
||||
"work_order_number": "WO7200",
|
||||
"task_name": null,
|
||||
"product_id": 8,
|
||||
"operation_status": null,
|
||||
"worker_name": "赵浩",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "21/12/2025 16:34:12.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 6,
|
||||
"work_order_number": "WO4458",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "谢桂英",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "14/12/2025 06:54:43.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 7,
|
||||
"work_order_number": "WO7776",
|
||||
"task_name": null,
|
||||
"product_id": 17,
|
||||
"operation_status": null,
|
||||
"worker_name": "许萍",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "22/12/2025 00:04:35.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 8,
|
||||
"work_order_number": "WO5361",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "朱颖",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "14/12/2025 20:27:57.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 9,
|
||||
"work_order_number": "WO1098",
|
||||
"task_name": null,
|
||||
"product_id": 4,
|
||||
"operation_status": null,
|
||||
"worker_name": "李辉",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "1/12/2025 12:46:43.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 10,
|
||||
"work_order_number": "WO5575",
|
||||
"task_name": null,
|
||||
"product_id": 16,
|
||||
"operation_status": null,
|
||||
"worker_name": "庄霞",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "12/12/2025 18:29:43.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 11,
|
||||
"work_order_number": "WO1265",
|
||||
"task_name": null,
|
||||
"product_id": 4,
|
||||
"operation_status": null,
|
||||
"worker_name": "刘桂香",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 10:44:05.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 12,
|
||||
"work_order_number": "WO3524",
|
||||
"task_name": null,
|
||||
"product_id": 10,
|
||||
"operation_status": null,
|
||||
"worker_name": "徐兵",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "7/12/2025 22:21:36.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 13,
|
||||
"work_order_number": "WO1914",
|
||||
"task_name": null,
|
||||
"product_id": 14,
|
||||
"operation_status": null,
|
||||
"worker_name": "陶霞",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "16/12/2025 06:22:53.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 14,
|
||||
"work_order_number": "WO6005",
|
||||
"task_name": null,
|
||||
"product_id": 15,
|
||||
"operation_status": null,
|
||||
"worker_name": "罗东",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "3/12/2025 02:34:28.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 15,
|
||||
"work_order_number": "WO5624",
|
||||
"task_name": null,
|
||||
"product_id": 19,
|
||||
"operation_status": null,
|
||||
"worker_name": "刘东",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "2/12/2025 21:47:35.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 16,
|
||||
"work_order_number": "WO6872",
|
||||
"task_name": null,
|
||||
"product_id": 7,
|
||||
"operation_status": null,
|
||||
"worker_name": "陈文",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "17/12/2025 20:15:54.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 17,
|
||||
"work_order_number": "WO4081",
|
||||
"task_name": null,
|
||||
"product_id": 12,
|
||||
"operation_status": null,
|
||||
"worker_name": "李波",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "6/12/2025 17:20:02.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 18,
|
||||
"work_order_number": "WO8892",
|
||||
"task_name": null,
|
||||
"product_id": 8,
|
||||
"operation_status": null,
|
||||
"worker_name": "鲁飞",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "10/12/2025 00:59:40.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 19,
|
||||
"work_order_number": "WO6903",
|
||||
"task_name": null,
|
||||
"product_id": 8,
|
||||
"operation_status": null,
|
||||
"worker_name": "赵海燕",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "1/12/2025 18:59:21.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 20,
|
||||
"work_order_number": "WO1683",
|
||||
"task_name": null,
|
||||
"product_id": 20,
|
||||
"operation_status": null,
|
||||
"worker_name": "董柳",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "2/12/2025 06:07:09.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 21,
|
||||
"work_order_number": "WO1211",
|
||||
"task_name": null,
|
||||
"product_id": 3,
|
||||
"operation_status": null,
|
||||
"worker_name": "王玉珍",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "19/12/2025 08:58:24.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 22,
|
||||
"work_order_number": "WO8142",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "杜凤英",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "9/12/2025 20:20:59.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 23,
|
||||
"work_order_number": "WO5186",
|
||||
"task_name": null,
|
||||
"product_id": 9,
|
||||
"operation_status": null,
|
||||
"worker_name": "杨荣",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "1/12/2025 05:44:20.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 24,
|
||||
"work_order_number": "WO9034",
|
||||
"task_name": null,
|
||||
"product_id": 8,
|
||||
"operation_status": null,
|
||||
"worker_name": "江龙",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "12/12/2025 10:32:57.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 25,
|
||||
"work_order_number": "WO9982",
|
||||
"task_name": null,
|
||||
"product_id": 11,
|
||||
"operation_status": null,
|
||||
"worker_name": "金峰",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "22/12/2025 04:35:19.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 26,
|
||||
"work_order_number": "WO7206",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "黄旭",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 10:30:58.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 27,
|
||||
"work_order_number": "WO7799",
|
||||
"task_name": null,
|
||||
"product_id": 7,
|
||||
"operation_status": null,
|
||||
"worker_name": "梁海燕",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "25/12/2025 22:48:21.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 28,
|
||||
"work_order_number": "WO6625",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "赵秀云",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 07:18:49.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 29,
|
||||
"work_order_number": "WO2794",
|
||||
"task_name": null,
|
||||
"product_id": 18,
|
||||
"operation_status": null,
|
||||
"worker_name": "张娟",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 22:59:31.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 30,
|
||||
"work_order_number": "WO2496",
|
||||
"task_name": null,
|
||||
"product_id": 18,
|
||||
"operation_status": null,
|
||||
"worker_name": "刘淑珍",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "7/12/2025 06:50:59.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 31,
|
||||
"work_order_number": "WO8351",
|
||||
"task_name": null,
|
||||
"product_id": 16,
|
||||
"operation_status": null,
|
||||
"worker_name": "李桂珍",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "11/12/2025 11:06:03.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 32,
|
||||
"work_order_number": "WO8138",
|
||||
"task_name": null,
|
||||
"product_id": 5,
|
||||
"operation_status": null,
|
||||
"worker_name": "王丽华",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "7/12/2025 00:15:47.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 33,
|
||||
"work_order_number": "WO9452",
|
||||
"task_name": null,
|
||||
"product_id": 20,
|
||||
"operation_status": null,
|
||||
"worker_name": "石英",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 21:53:06.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 34,
|
||||
"work_order_number": "WO4409",
|
||||
"task_name": null,
|
||||
"product_id": 4,
|
||||
"operation_status": null,
|
||||
"worker_name": "陆桂珍",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "7/12/2025 16:39:07.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 35,
|
||||
"work_order_number": "WO7925",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "吴欣",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "16/12/2025 06:38:52.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 36,
|
||||
"work_order_number": "WO8532",
|
||||
"task_name": null,
|
||||
"product_id": 16,
|
||||
"operation_status": null,
|
||||
"worker_name": "江桂英",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 02:26:17.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 37,
|
||||
"work_order_number": "WO7266",
|
||||
"task_name": null,
|
||||
"product_id": 4,
|
||||
"operation_status": null,
|
||||
"worker_name": "周秀英",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "3/12/2025 08:23:32.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 38,
|
||||
"work_order_number": "WO4046",
|
||||
"task_name": null,
|
||||
"product_id": 17,
|
||||
"operation_status": null,
|
||||
"worker_name": "魏岩",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "9/12/2025 19:24:07.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 39,
|
||||
"work_order_number": "WO8200",
|
||||
"task_name": null,
|
||||
"product_id": 1,
|
||||
"operation_status": null,
|
||||
"worker_name": "曾桂花",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "5/12/2025 22:42:57.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 40,
|
||||
"work_order_number": "WO3456",
|
||||
"task_name": null,
|
||||
"product_id": 16,
|
||||
"operation_status": null,
|
||||
"worker_name": "胥秀梅",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "9/12/2025 18:41:22.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 41,
|
||||
"work_order_number": "WO5008",
|
||||
"task_name": null,
|
||||
"product_id": 3,
|
||||
"operation_status": null,
|
||||
"worker_name": "郑峰",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "25/12/2025 06:04:38.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 42,
|
||||
"work_order_number": "WO7168",
|
||||
"task_name": null,
|
||||
"product_id": 16,
|
||||
"operation_status": null,
|
||||
"worker_name": "季军",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "6/12/2025 01:04:07.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 43,
|
||||
"work_order_number": "WO7984",
|
||||
"task_name": null,
|
||||
"product_id": 15,
|
||||
"operation_status": null,
|
||||
"worker_name": "林浩",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "21/12/2025 08:52:28.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 44,
|
||||
"work_order_number": "WO5715",
|
||||
"task_name": null,
|
||||
"product_id": 12,
|
||||
"operation_status": null,
|
||||
"worker_name": "向娟",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "21/12/2025 09:13:33.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 45,
|
||||
"work_order_number": "WO1740",
|
||||
"task_name": null,
|
||||
"product_id": 3,
|
||||
"operation_status": null,
|
||||
"worker_name": "陈畅",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 04:24:48.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 46,
|
||||
"work_order_number": "WO7612",
|
||||
"task_name": null,
|
||||
"product_id": 6,
|
||||
"operation_status": null,
|
||||
"worker_name": "尹荣",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "16/12/2025 11:39:30.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 47,
|
||||
"work_order_number": "WO7327",
|
||||
"task_name": null,
|
||||
"product_id": 17,
|
||||
"operation_status": null,
|
||||
"worker_name": "黄慧",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "10/12/2025 16:24:45.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 48,
|
||||
"work_order_number": "WO4578",
|
||||
"task_name": null,
|
||||
"product_id": 9,
|
||||
"operation_status": null,
|
||||
"worker_name": "朱秀兰",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 05:01:09.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 49,
|
||||
"work_order_number": "WO1076",
|
||||
"task_name": null,
|
||||
"product_id": 10,
|
||||
"operation_status": null,
|
||||
"worker_name": "孟小红",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "22/12/2025 02:15:01.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"labor_report_id": 50,
|
||||
"work_order_number": "WO2427",
|
||||
"task_name": null,
|
||||
"product_id": 17,
|
||||
"operation_status": null,
|
||||
"worker_name": "鲍桂花",
|
||||
"report_qty": 10.0,
|
||||
"good_qty": null,
|
||||
"bad_qty": null,
|
||||
"duration_minutes": 60.0,
|
||||
"uom_code": null,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "16/12/2025 09:22:53.-1f+00",
|
||||
"supplier_id": null,
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
401
sql/fact_lead.json
Normal file
401
sql/fact_lead.json
Normal file
@@ -0,0 +1,401 @@
|
||||
[
|
||||
{
|
||||
"lead_id": 1,
|
||||
"lead_name": "南机空间",
|
||||
"lead_source": "线下",
|
||||
"phone": "13454543434",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 01:20:50+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 01:20:50+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 2,
|
||||
"lead_name": "杨婷",
|
||||
"lead_source": null,
|
||||
"phone": "13876785939",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 3,
|
||||
"lead_name": "袁龙",
|
||||
"lead_source": null,
|
||||
"phone": "13623737069",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 4,
|
||||
"lead_name": "齐萍",
|
||||
"lead_source": null,
|
||||
"phone": "13799386215",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 5,
|
||||
"lead_name": "郭玉梅",
|
||||
"lead_source": null,
|
||||
"phone": "15993191738",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 6,
|
||||
"lead_name": "黄辉",
|
||||
"lead_source": null,
|
||||
"phone": "15806905278",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 7,
|
||||
"lead_name": "王红霞",
|
||||
"lead_source": null,
|
||||
"phone": "18597835513",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 8,
|
||||
"lead_name": "潘红霞",
|
||||
"lead_source": null,
|
||||
"phone": "18685119644",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 9,
|
||||
"lead_name": "乔丽娟",
|
||||
"lead_source": null,
|
||||
"phone": "13367787703",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 10,
|
||||
"lead_name": "尹畅",
|
||||
"lead_source": null,
|
||||
"phone": "13056776353",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 11,
|
||||
"lead_name": "梁淑珍",
|
||||
"lead_source": null,
|
||||
"phone": "13286948682",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 12,
|
||||
"lead_name": "牛淑华",
|
||||
"lead_source": null,
|
||||
"phone": "15110881281",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 13,
|
||||
"lead_name": "郑桂芳",
|
||||
"lead_source": null,
|
||||
"phone": "13564615531",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 14,
|
||||
"lead_name": "连艳",
|
||||
"lead_source": null,
|
||||
"phone": "13324744584",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 15,
|
||||
"lead_name": "秦秀云",
|
||||
"lead_source": null,
|
||||
"phone": "15214943375",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 16,
|
||||
"lead_name": "蒋淑兰",
|
||||
"lead_source": null,
|
||||
"phone": "18617232139",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 17,
|
||||
"lead_name": "刘丽娟",
|
||||
"lead_source": null,
|
||||
"phone": "13452051385",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 18,
|
||||
"lead_name": "何利",
|
||||
"lead_source": null,
|
||||
"phone": "18568387229",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 19,
|
||||
"lead_name": "韦晨",
|
||||
"lead_source": null,
|
||||
"phone": "18677015384",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 20,
|
||||
"lead_name": "陶亮",
|
||||
"lead_source": null,
|
||||
"phone": "15537189558",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"lead_id": 21,
|
||||
"lead_name": "霍龙",
|
||||
"lead_source": null,
|
||||
"phone": "13575091415",
|
||||
"telephone": null,
|
||||
"email": null,
|
||||
"address": null,
|
||||
"industry": null,
|
||||
"customer_level": null,
|
||||
"next_contact_time_utc": null,
|
||||
"follow_up_status": null,
|
||||
"is_converted": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
852
sql/fact_operation_task.json
Normal file
852
sql/fact_operation_task.json
Normal file
@@ -0,0 +1,852 @@
|
||||
[
|
||||
{
|
||||
"operation_task_id": 1,
|
||||
"work_order_number": "WO2050",
|
||||
"operation_id": 9,
|
||||
"product_id": 12,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "2/12/2025 08:39:49.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 2,
|
||||
"work_order_number": "WO3412",
|
||||
"operation_id": 3,
|
||||
"product_id": 2,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "23/12/2025 12:56:30.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 3,
|
||||
"work_order_number": "WO1280",
|
||||
"operation_id": 7,
|
||||
"product_id": 7,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "9/12/2025 11:29:47.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 4,
|
||||
"work_order_number": "WO2560",
|
||||
"operation_id": 9,
|
||||
"product_id": 11,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "2/12/2025 17:14:48.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 5,
|
||||
"work_order_number": "WO4545",
|
||||
"operation_id": 10,
|
||||
"product_id": 2,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 14:07:08.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 6,
|
||||
"work_order_number": "WO9513",
|
||||
"operation_id": 2,
|
||||
"product_id": 4,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "9/12/2025 06:46:09.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 7,
|
||||
"work_order_number": "WO4953",
|
||||
"operation_id": 7,
|
||||
"product_id": 10,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 18:39:40.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 8,
|
||||
"work_order_number": "WO8166",
|
||||
"operation_id": 7,
|
||||
"product_id": 15,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "2/12/2025 17:39:35.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 9,
|
||||
"work_order_number": "WO7515",
|
||||
"operation_id": 8,
|
||||
"product_id": 6,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "5/12/2025 10:41:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 10,
|
||||
"work_order_number": "WO7376",
|
||||
"operation_id": 2,
|
||||
"product_id": 12,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 17:48:15.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 11,
|
||||
"work_order_number": "WO4728",
|
||||
"operation_id": 4,
|
||||
"product_id": 20,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "15/12/2025 06:03:04.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 12,
|
||||
"work_order_number": "WO4393",
|
||||
"operation_id": 4,
|
||||
"product_id": 5,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 07:57:55.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 13,
|
||||
"work_order_number": "WO9411",
|
||||
"operation_id": 8,
|
||||
"product_id": 13,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "15/12/2025 19:16:43.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 14,
|
||||
"work_order_number": "WO5246",
|
||||
"operation_id": 7,
|
||||
"product_id": 8,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "19/12/2025 20:58:25.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 15,
|
||||
"work_order_number": "WO6942",
|
||||
"operation_id": 1,
|
||||
"product_id": 19,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "23/12/2025 09:33:24.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 16,
|
||||
"work_order_number": "WO5874",
|
||||
"operation_id": 4,
|
||||
"product_id": 19,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "3/12/2025 00:37:44.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 17,
|
||||
"work_order_number": "WO7218",
|
||||
"operation_id": 2,
|
||||
"product_id": 7,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "14/12/2025 22:03:44.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 18,
|
||||
"work_order_number": "WO5273",
|
||||
"operation_id": 1,
|
||||
"product_id": 14,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "26/12/2025 04:52:23.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 19,
|
||||
"work_order_number": "WO2136",
|
||||
"operation_id": 7,
|
||||
"product_id": 20,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 12:44:27.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 20,
|
||||
"work_order_number": "WO2274",
|
||||
"operation_id": 6,
|
||||
"product_id": 15,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "24/12/2025 02:34:14.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 21,
|
||||
"work_order_number": "WO4494",
|
||||
"operation_id": 8,
|
||||
"product_id": 5,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 19:33:37.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 22,
|
||||
"work_order_number": "WO9614",
|
||||
"operation_id": 4,
|
||||
"product_id": 20,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "21/12/2025 07:58:16.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 23,
|
||||
"work_order_number": "WO7692",
|
||||
"operation_id": 10,
|
||||
"product_id": 7,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "25/12/2025 06:29:31.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 24,
|
||||
"work_order_number": "WO8917",
|
||||
"operation_id": 8,
|
||||
"product_id": 9,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "7/12/2025 08:04:15.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 25,
|
||||
"work_order_number": "WO3626",
|
||||
"operation_id": 9,
|
||||
"product_id": 17,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "16/12/2025 23:17:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 26,
|
||||
"work_order_number": "WO8432",
|
||||
"operation_id": 1,
|
||||
"product_id": 17,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "5/12/2025 19:27:30.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 27,
|
||||
"work_order_number": "WO5053",
|
||||
"operation_id": 6,
|
||||
"product_id": 19,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "5/12/2025 19:19:41.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 28,
|
||||
"work_order_number": "WO5175",
|
||||
"operation_id": 9,
|
||||
"product_id": 15,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "22/12/2025 13:22:32.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 29,
|
||||
"work_order_number": "WO6692",
|
||||
"operation_id": 1,
|
||||
"product_id": 17,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "23/12/2025 22:41:23.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 30,
|
||||
"work_order_number": "WO9712",
|
||||
"operation_id": 3,
|
||||
"product_id": 18,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "11/12/2025 02:41:38.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 31,
|
||||
"work_order_number": "WO7626",
|
||||
"operation_id": 8,
|
||||
"product_id": 13,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "10/12/2025 11:33:13.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 32,
|
||||
"work_order_number": "WO7697",
|
||||
"operation_id": 8,
|
||||
"product_id": 11,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "23/12/2025 03:31:49.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 33,
|
||||
"work_order_number": "WO9549",
|
||||
"operation_id": 4,
|
||||
"product_id": 16,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "18/12/2025 15:55:47.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 34,
|
||||
"work_order_number": "WO4509",
|
||||
"operation_id": 4,
|
||||
"product_id": 17,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "23/12/2025 11:21:31.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 35,
|
||||
"work_order_number": "WO6662",
|
||||
"operation_id": 6,
|
||||
"product_id": 8,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "5/12/2025 01:16:16.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 36,
|
||||
"work_order_number": "WO1397",
|
||||
"operation_id": 3,
|
||||
"product_id": 16,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "19/12/2025 18:18:53.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 37,
|
||||
"work_order_number": "WO1895",
|
||||
"operation_id": 7,
|
||||
"product_id": 13,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "13/12/2025 06:58:01.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 38,
|
||||
"work_order_number": "WO5442",
|
||||
"operation_id": 5,
|
||||
"product_id": 14,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "15/12/2025 05:37:07.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 39,
|
||||
"work_order_number": "WO9508",
|
||||
"operation_id": 10,
|
||||
"product_id": 14,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "12/12/2025 04:07:43.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 40,
|
||||
"work_order_number": "WO4792",
|
||||
"operation_id": 3,
|
||||
"product_id": 3,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "12/12/2025 08:22:44.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 41,
|
||||
"work_order_number": "WO5999",
|
||||
"operation_id": 2,
|
||||
"product_id": 10,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "8/12/2025 20:22:04.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 42,
|
||||
"work_order_number": "WO2856",
|
||||
"operation_id": 5,
|
||||
"product_id": 18,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "18/12/2025 16:18:09.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 43,
|
||||
"work_order_number": "WO6857",
|
||||
"operation_id": 5,
|
||||
"product_id": 9,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "19/12/2025 23:59:26.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 44,
|
||||
"work_order_number": "WO9478",
|
||||
"operation_id": 6,
|
||||
"product_id": 2,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "18/12/2025 14:22:32.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 45,
|
||||
"work_order_number": "WO5980",
|
||||
"operation_id": 7,
|
||||
"product_id": 13,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "11/12/2025 13:40:42.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 46,
|
||||
"work_order_number": "WO3082",
|
||||
"operation_id": 2,
|
||||
"product_id": 20,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "26/12/2025 03:01:27.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 47,
|
||||
"work_order_number": "WO9465",
|
||||
"operation_id": 7,
|
||||
"product_id": 13,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "14/12/2025 03:12:40.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 48,
|
||||
"work_order_number": "WO6276",
|
||||
"operation_id": 8,
|
||||
"product_id": 18,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "25/12/2025 23:51:26.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 49,
|
||||
"work_order_number": "WO9260",
|
||||
"operation_id": 5,
|
||||
"product_id": 16,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 06:59:31.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"operation_task_id": 50,
|
||||
"work_order_number": "WO2693",
|
||||
"operation_id": 9,
|
||||
"product_id": 6,
|
||||
"planned_start_time_utc": null,
|
||||
"planned_end_time_utc": null,
|
||||
"actual_start_time_utc": null,
|
||||
"actual_end_time_utc": null,
|
||||
"planned_qty": 100.0,
|
||||
"good_qty": 98.0,
|
||||
"bad_qty": 2.0,
|
||||
"bad_reason_text": null,
|
||||
"event_time_utc": "20/12/2025 01:40:23.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
212
sql/fact_opportunity.json
Normal file
212
sql/fact_opportunity.json
Normal file
@@ -0,0 +1,212 @@
|
||||
[
|
||||
{
|
||||
"opportunity_id": 1,
|
||||
"opportunity_name": "出现商机",
|
||||
"customer_id": 3,
|
||||
"opportunity_amount": 10178.17,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 2,
|
||||
"opportunity_name": "一起商机",
|
||||
"customer_id": 3,
|
||||
"opportunity_amount": 88569.91,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 3,
|
||||
"opportunity_name": "程序商机",
|
||||
"customer_id": 5,
|
||||
"opportunity_amount": 84196.37,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 4,
|
||||
"opportunity_name": "说明商机",
|
||||
"customer_id": 2,
|
||||
"opportunity_amount": 10003.92,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 5,
|
||||
"opportunity_name": "孩子商机",
|
||||
"customer_id": 10,
|
||||
"opportunity_amount": 72339.91,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 6,
|
||||
"opportunity_name": "控制商机",
|
||||
"customer_id": 3,
|
||||
"opportunity_amount": 44096.15,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 7,
|
||||
"opportunity_name": "那么商机",
|
||||
"customer_id": 9,
|
||||
"opportunity_amount": 47860.89,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 8,
|
||||
"opportunity_name": "游戏商机",
|
||||
"customer_id": 6,
|
||||
"opportunity_amount": 24936.97,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 9,
|
||||
"opportunity_name": "评论商机",
|
||||
"customer_id": 6,
|
||||
"opportunity_amount": 51882.51,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 10,
|
||||
"opportunity_name": "显示商机",
|
||||
"customer_id": 9,
|
||||
"opportunity_amount": 68081.56,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 11,
|
||||
"opportunity_name": "建设商机",
|
||||
"customer_id": 2,
|
||||
"opportunity_amount": 42515.21,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 12,
|
||||
"opportunity_name": "电话商机",
|
||||
"customer_id": 5,
|
||||
"opportunity_amount": 48403.11,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 13,
|
||||
"opportunity_name": "当然商机",
|
||||
"customer_id": 2,
|
||||
"opportunity_amount": 38638.05,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 14,
|
||||
"opportunity_name": "美国商机",
|
||||
"customer_id": 7,
|
||||
"opportunity_amount": 27767.22,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"opportunity_id": 15,
|
||||
"opportunity_name": "因为商机",
|
||||
"customer_id": 6,
|
||||
"opportunity_amount": 89630.93,
|
||||
"expected_deal_date_utc": null,
|
||||
"next_contact_time_utc": null,
|
||||
"status_group": null,
|
||||
"stage": null,
|
||||
"result": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
142
sql/fact_production_plan.json
Normal file
142
sql/fact_production_plan.json
Normal file
@@ -0,0 +1,142 @@
|
||||
[
|
||||
{
|
||||
"production_plan_id": 1,
|
||||
"assembly_work_order_number": "AWO40743515",
|
||||
"work_order_count": 5,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 2,
|
||||
"assembly_work_order_number": "AWO8398648",
|
||||
"work_order_count": 5,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 3,
|
||||
"assembly_work_order_number": "AWO14185163",
|
||||
"work_order_count": 3,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 4,
|
||||
"assembly_work_order_number": "AWO15498809",
|
||||
"work_order_count": 5,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 5,
|
||||
"assembly_work_order_number": "AWO49921525",
|
||||
"work_order_count": 5,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 6,
|
||||
"assembly_work_order_number": "AWO36182849",
|
||||
"work_order_count": 3,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 7,
|
||||
"assembly_work_order_number": "AWO64090531",
|
||||
"work_order_count": 4,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 8,
|
||||
"assembly_work_order_number": "AWO30488156",
|
||||
"work_order_count": 1,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 9,
|
||||
"assembly_work_order_number": "AWO86661804",
|
||||
"work_order_count": 1,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"production_plan_id": 10,
|
||||
"assembly_work_order_number": "AWO72968658",
|
||||
"work_order_count": 5,
|
||||
"finished_count": null,
|
||||
"planned_qty": 100.0,
|
||||
"completed_qty": null,
|
||||
"plan_status": null,
|
||||
"progress_text": null,
|
||||
"customer_name": null,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
322
sql/fact_purchase_order.json
Normal file
322
sql/fact_purchase_order.json
Normal file
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"purchase_order_id": 1,
|
||||
"purchase_order_number": "PO46687889",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "11/7/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 2,
|
||||
"purchase_order_number": "PO52924265",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "20/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 3,
|
||||
"purchase_order_number": "PO71059352",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "15/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 4,
|
||||
"purchase_order_number": "PO81421429",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "11/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 5,
|
||||
"purchase_order_number": "PO30442381",
|
||||
"supplier_id": 2,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "22/5/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 6,
|
||||
"purchase_order_number": "PO41110345",
|
||||
"supplier_id": 2,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "31/5/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 7,
|
||||
"purchase_order_number": "PO49227120",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 8,
|
||||
"purchase_order_number": "PO53044033",
|
||||
"supplier_id": 9,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 9,
|
||||
"purchase_order_number": "PO35646206",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "25/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 10,
|
||||
"purchase_order_number": "PO94831278",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "21/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 11,
|
||||
"purchase_order_number": "PO49569902",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "22/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 12,
|
||||
"purchase_order_number": "PO76891465",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "20/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 13,
|
||||
"purchase_order_number": "PO9667614",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 14,
|
||||
"purchase_order_number": "PO5970081",
|
||||
"supplier_id": 9,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "17/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 15,
|
||||
"purchase_order_number": "PO13604696",
|
||||
"supplier_id": 3,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "2/5/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 16,
|
||||
"purchase_order_number": "PO4070883",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "15/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 17,
|
||||
"purchase_order_number": "PO85696564",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "5/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 18,
|
||||
"purchase_order_number": "PO82742840",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 19,
|
||||
"purchase_order_number": "PO22906470",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "7/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_order_id": 20,
|
||||
"purchase_order_number": "PO13277527",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "26/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"delivery_note_number": null,
|
||||
"settlement_date_utc": null,
|
||||
"settlement_term": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
692
sql/fact_purchase_receipt.json
Normal file
692
sql/fact_purchase_receipt.json
Normal file
@@ -0,0 +1,692 @@
|
||||
[
|
||||
{
|
||||
"purchase_receipt_id": 1,
|
||||
"purchase_receipt_number": "PRC62269319",
|
||||
"supplier_id": 6,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "30/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 8077.53,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 2,
|
||||
"purchase_receipt_number": "PRC92878594",
|
||||
"supplier_id": 6,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "3/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 40158.06,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 3,
|
||||
"purchase_receipt_number": "PRC31612946",
|
||||
"supplier_id": 7,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "17/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 27389.28,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 4,
|
||||
"purchase_receipt_number": "PRC31143884",
|
||||
"supplier_id": 5,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 35097.27,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 5,
|
||||
"purchase_receipt_number": "PRC99344468",
|
||||
"supplier_id": 3,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 21866.74,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 6,
|
||||
"purchase_receipt_number": "PRC47897055",
|
||||
"supplier_id": 2,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "19/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 42154.17,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 7,
|
||||
"purchase_receipt_number": "PRC10587372",
|
||||
"supplier_id": 8,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "2/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 23628.14,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 8,
|
||||
"purchase_receipt_number": "PRC53434148",
|
||||
"supplier_id": 8,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "4/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 22893.66,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 9,
|
||||
"purchase_receipt_number": "PRC41830227",
|
||||
"supplier_id": 3,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "18/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 16564.55,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 10,
|
||||
"purchase_receipt_number": "PRC23410942",
|
||||
"supplier_id": 3,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "4/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 31343.7,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 11,
|
||||
"purchase_receipt_number": "PRC4288899",
|
||||
"supplier_id": 1,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "9/7/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 46399.39,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 12,
|
||||
"purchase_receipt_number": "PRC66873664",
|
||||
"supplier_id": 8,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 18013.85,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 13,
|
||||
"purchase_receipt_number": "PRC29982381",
|
||||
"supplier_id": 1,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 5657.47,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 14,
|
||||
"purchase_receipt_number": "PRC18938089",
|
||||
"supplier_id": 9,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "9/10/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 37930.6,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 15,
|
||||
"purchase_receipt_number": "PRC72177866",
|
||||
"supplier_id": 2,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "26/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 21695.35,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 16,
|
||||
"purchase_receipt_number": "PRC2413184",
|
||||
"supplier_id": 6,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "26/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 17542.38,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 17,
|
||||
"purchase_receipt_number": "PRC69715967",
|
||||
"supplier_id": 7,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "30/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 45678.83,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 18,
|
||||
"purchase_receipt_number": "PRC60563471",
|
||||
"supplier_id": 10,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "3/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 17592.33,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 19,
|
||||
"purchase_receipt_number": "PRC47113160",
|
||||
"supplier_id": 1,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "4/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 18159.37,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 20,
|
||||
"purchase_receipt_number": "PRC43664801",
|
||||
"supplier_id": 4,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "16/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 26731.57,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 21,
|
||||
"purchase_receipt_number": "PRC44202374",
|
||||
"supplier_id": 1,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "13/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 12562.58,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 22,
|
||||
"purchase_receipt_number": "PRC63546936",
|
||||
"supplier_id": 5,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "13/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 39919.96,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 23,
|
||||
"purchase_receipt_number": "PRC64419670",
|
||||
"supplier_id": 4,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "2/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 21096.59,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 24,
|
||||
"purchase_receipt_number": "PRC66177549",
|
||||
"supplier_id": 9,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "19/7/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 40616.92,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 25,
|
||||
"purchase_receipt_number": "PRC91456627",
|
||||
"supplier_id": 7,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "4/10/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 33138.8,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 26,
|
||||
"purchase_receipt_number": "PRC71057930",
|
||||
"supplier_id": 2,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 43056.15,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 27,
|
||||
"purchase_receipt_number": "PRC85631925",
|
||||
"supplier_id": 7,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "13/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 19537.31,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 28,
|
||||
"purchase_receipt_number": "PRC95966229",
|
||||
"supplier_id": 5,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "29/10/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 41578.09,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 29,
|
||||
"purchase_receipt_number": "PRC28157373",
|
||||
"supplier_id": 5,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "8/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 38451.56,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_receipt_id": 30,
|
||||
"purchase_receipt_number": "PRC59018290",
|
||||
"supplier_id": 2,
|
||||
"purchase_order_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "3/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"contract_number": null,
|
||||
"amount": 28844.54,
|
||||
"estimated_cost": null,
|
||||
"receipt_qty_total": 100.0,
|
||||
"paid_amount": null,
|
||||
"unpaid_amount": null,
|
||||
"payment_status": null,
|
||||
"returned_qty": null,
|
||||
"not_returned_qty": null,
|
||||
"return_status": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
322
sql/fact_purchase_request.json
Normal file
322
sql/fact_purchase_request.json
Normal file
@@ -0,0 +1,322 @@
|
||||
[
|
||||
{
|
||||
"purchase_request_id": 1,
|
||||
"purchase_request_number": "PR74373407",
|
||||
"supplier_id": 3,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "9/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 40343.59,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 2,
|
||||
"purchase_request_number": "PR3197164",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 10282.5,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 3,
|
||||
"purchase_request_number": "PR25213757",
|
||||
"supplier_id": 9,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 30633.66,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 4,
|
||||
"purchase_request_number": "PR77290340",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "12/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 43069.26,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 5,
|
||||
"purchase_request_number": "PR4968719",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "3/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 12416.66,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 6,
|
||||
"purchase_request_number": "PR43870003",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "19/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 17904.11,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 7,
|
||||
"purchase_request_number": "PR29802771",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 12826.31,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 8,
|
||||
"purchase_request_number": "PR66861238",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "15/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 17490.41,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 9,
|
||||
"purchase_request_number": "PR1133525",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "25/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 22588.43,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 10,
|
||||
"purchase_request_number": "PR90232127",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 48310.07,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 11,
|
||||
"purchase_request_number": "PR87761304",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "30/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 9754.54,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 12,
|
||||
"purchase_request_number": "PR34707409",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/7/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 17262.64,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 13,
|
||||
"purchase_request_number": "PR88853692",
|
||||
"supplier_id": 5,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "29/10/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 29440.3,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 14,
|
||||
"purchase_request_number": "PR81818155",
|
||||
"supplier_id": 3,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "15/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 38365.41,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 15,
|
||||
"purchase_request_number": "PR68228246",
|
||||
"supplier_id": 2,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "27/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 36025.66,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 16,
|
||||
"purchase_request_number": "PR531304",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 21933.52,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 17,
|
||||
"purchase_request_number": "PR29567205",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 37543.26,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 18,
|
||||
"purchase_request_number": "PR21593197",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "24/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 34965.61,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 19,
|
||||
"purchase_request_number": "PR44612134",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "12/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 29549.23,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_request_id": 20,
|
||||
"purchase_request_number": "PR11456222",
|
||||
"supplier_id": 4,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "1/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"total_amount": 34575.02,
|
||||
"status": null,
|
||||
"related_order_number": null,
|
||||
"contract_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
72
sql/fact_purchase_return.json
Normal file
72
sql/fact_purchase_return.json
Normal file
@@ -0,0 +1,72 @@
|
||||
[
|
||||
{
|
||||
"purchase_return_id": 1,
|
||||
"purchase_return_number": "PRET10055889",
|
||||
"supplier_id": 1,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "11/6/2025 16:00:00+00",
|
||||
"return_reason": "损坏",
|
||||
"contract_number": null,
|
||||
"related_order_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_return_id": 2,
|
||||
"purchase_return_number": "PRET94654435",
|
||||
"supplier_id": 8,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "8/9/2025 16:00:00+00",
|
||||
"return_reason": "损坏",
|
||||
"contract_number": null,
|
||||
"related_order_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_return_id": 3,
|
||||
"purchase_return_number": "PRET35781733",
|
||||
"supplier_id": 10,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/8/2025 16:00:00+00",
|
||||
"return_reason": "损坏",
|
||||
"contract_number": null,
|
||||
"related_order_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_return_id": 4,
|
||||
"purchase_return_number": "PRET26734831",
|
||||
"supplier_id": 4,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "8/9/2025 16:00:00+00",
|
||||
"return_reason": "损坏",
|
||||
"contract_number": null,
|
||||
"related_order_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"purchase_return_id": 5,
|
||||
"purchase_return_number": "PRET48298023",
|
||||
"supplier_id": 7,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "1/6/2025 16:00:00+00",
|
||||
"return_reason": "损坏",
|
||||
"contract_number": null,
|
||||
"related_order_number": null,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
722
sql/fact_quality_inspection.json
Normal file
722
sql/fact_quality_inspection.json
Normal file
@@ -0,0 +1,722 @@
|
||||
[
|
||||
{
|
||||
"quality_inspection_id": 1,
|
||||
"inspection_number": "QC79170659",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "6/12/2025 08:34:41.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 2,
|
||||
"inspection_number": "QC2841764",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 5,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "19/12/2025 11:33:45.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 3,
|
||||
"inspection_number": "QC32330966",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 1,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "15/12/2025 21:49:03.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 4,
|
||||
"inspection_number": "QC83789760",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 3,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "5/12/2025 03:01:43.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 5,
|
||||
"inspection_number": "QC23748035",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "5/12/2025 13:19:26.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 6,
|
||||
"inspection_number": "QC85580865",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 7,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "17/12/2025 10:55:38.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 7,
|
||||
"inspection_number": "QC26947404",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 15,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "7/12/2025 02:22:38.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 8,
|
||||
"inspection_number": "QC14244389",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 10,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "14/12/2025 03:21:23.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 9,
|
||||
"inspection_number": "QC17261920",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 10,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "17/12/2025 08:20:08.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 10,
|
||||
"inspection_number": "QC65680691",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 10,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "5/12/2025 19:44:53.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 11,
|
||||
"inspection_number": "QC45201646",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 10,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "20/12/2025 05:34:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 12,
|
||||
"inspection_number": "QC2904611",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 20,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "10/12/2025 04:04:54.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 13,
|
||||
"inspection_number": "QC50101129",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "2/12/2025 10:56:45.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 14,
|
||||
"inspection_number": "QC7654355",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 1,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "20/12/2025 03:36:22.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 15,
|
||||
"inspection_number": "QC65262328",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 13,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "16/12/2025 01:39:27.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 16,
|
||||
"inspection_number": "QC57707379",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "6/12/2025 02:57:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 17,
|
||||
"inspection_number": "QC82854790",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 10,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "18/12/2025 07:01:24.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 18,
|
||||
"inspection_number": "QC31389428",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 3,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "1/12/2025 11:36:51.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 19,
|
||||
"inspection_number": "QC36989388",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 3,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "18/12/2025 05:59:26.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 20,
|
||||
"inspection_number": "QC1416316",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "25/12/2025 07:12:03.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 21,
|
||||
"inspection_number": "QC53323968",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 20,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "24/12/2025 05:05:29.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 22,
|
||||
"inspection_number": "QC18108361",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 20,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "5/12/2025 08:28:06.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 23,
|
||||
"inspection_number": "QC57970449",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 4,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "15/12/2025 21:37:57.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 24,
|
||||
"inspection_number": "QC58088949",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "10/12/2025 15:20:33.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 25,
|
||||
"inspection_number": "QC3644411",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 3,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "20/12/2025 07:56:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 26,
|
||||
"inspection_number": "QC58243176",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 6,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "26/12/2025 05:22:18.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 27,
|
||||
"inspection_number": "QC21517907",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "18/12/2025 03:00:20.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 28,
|
||||
"inspection_number": "QC68062150",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "6/12/2025 21:26:49.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 29,
|
||||
"inspection_number": "QC33189904",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 14,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "4/12/2025 11:29:26.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 30,
|
||||
"inspection_number": "QC68953666",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 2,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "22/12/2025 08:50:42.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 31,
|
||||
"inspection_number": "QC29461199",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 1,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "16/12/2025 15:51:08.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 32,
|
||||
"inspection_number": "QC45390570",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "5/12/2025 07:04:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 33,
|
||||
"inspection_number": "QC24502363",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 11,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "21/12/2025 19:48:36.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 34,
|
||||
"inspection_number": "QC34620271",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 8,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "15/12/2025 07:39:23.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 35,
|
||||
"inspection_number": "QC56151325",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "16/12/2025 00:21:15.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 36,
|
||||
"inspection_number": "QC86107178",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 19,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "11/12/2025 02:12:45.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 37,
|
||||
"inspection_number": "QC99037226",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 9,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "18/12/2025 06:14:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 38,
|
||||
"inspection_number": "QC27521865",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 18,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "IN_PROCESS",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "25/12/2025 17:38:29.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 39,
|
||||
"inspection_number": "QC11711535",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 6,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "15/12/2025 15:19:18.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"quality_inspection_id": 40,
|
||||
"inspection_number": "QC26733168",
|
||||
"inspection_batch_number": null,
|
||||
"work_order_number": null,
|
||||
"product_id": 17,
|
||||
"supplier_id": null,
|
||||
"qc_reason_id": null,
|
||||
"qc_type": "FINAL",
|
||||
"pass_qty": 95.0,
|
||||
"fail_qty": 5.0,
|
||||
"sales_order_number": null,
|
||||
"customer_name": null,
|
||||
"ship_qty": null,
|
||||
"event_time_utc": "20/12/2025 10:23:15.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
2102
sql/fact_sales_order.json
Normal file
2102
sql/fact_sales_order.json
Normal file
File diff suppressed because it is too large
Load Diff
152
sql/fact_sales_return.json
Normal file
152
sql/fact_sales_return.json
Normal file
@@ -0,0 +1,152 @@
|
||||
[
|
||||
{
|
||||
"sales_return_id": 1,
|
||||
"sales_return_number": "RET33607093",
|
||||
"customer_id": 8,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "22/2/2025 16:00:00+00",
|
||||
"amount": 3873.24,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 2,
|
||||
"sales_return_number": "RET17956713",
|
||||
"customer_id": 1,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "10/8/2025 16:00:00+00",
|
||||
"amount": 4677.54,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 3,
|
||||
"sales_return_number": "RET64807117",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "11/5/2025 16:00:00+00",
|
||||
"amount": 4327.39,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 4,
|
||||
"sales_return_number": "RET67765737",
|
||||
"customer_id": 8,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "17/7/2025 16:00:00+00",
|
||||
"amount": 4937.5,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 5,
|
||||
"sales_return_number": "RET20539715",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "31/5/2025 16:00:00+00",
|
||||
"amount": 3970.17,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 6,
|
||||
"sales_return_number": "RET19806490",
|
||||
"customer_id": 2,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "10/8/2025 16:00:00+00",
|
||||
"amount": 1424.25,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 7,
|
||||
"sales_return_number": "RET65157989",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "17/7/2025 16:00:00+00",
|
||||
"amount": 2324.6,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 8,
|
||||
"sales_return_number": "RET23958183",
|
||||
"customer_id": 5,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "27/10/2025 16:00:00+00",
|
||||
"amount": 715.04,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 9,
|
||||
"sales_return_number": "RET13387787",
|
||||
"customer_id": 3,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "18/4/2025 16:00:00+00",
|
||||
"amount": 3646.64,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_return_id": 10,
|
||||
"sales_return_number": "RET13090325",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"return_reason": "质量问题",
|
||||
"is_reship": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "31/1/2025 16:00:00+00",
|
||||
"amount": 3795.88,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
482
sql/fact_sales_shipment.json
Normal file
482
sql/fact_sales_shipment.json
Normal file
@@ -0,0 +1,482 @@
|
||||
[
|
||||
{
|
||||
"sales_shipment_id": 1,
|
||||
"shipment_number": "SH24823992",
|
||||
"customer_id": 7,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "3/7/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 12086.56,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 2,
|
||||
"shipment_number": "SH34635337",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "27/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 18792.46,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 3,
|
||||
"shipment_number": "SH88366414",
|
||||
"customer_id": 1,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "9/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 5747.19,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 4,
|
||||
"shipment_number": "SH57206465",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "31/5/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 3556.75,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 5,
|
||||
"shipment_number": "SH57511283",
|
||||
"customer_id": 3,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "23/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 12916.49,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 6,
|
||||
"shipment_number": "SH48137491",
|
||||
"customer_id": 1,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "5/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 7813.07,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 7,
|
||||
"shipment_number": "SH27541058",
|
||||
"customer_id": 3,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "26/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 12511.55,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 8,
|
||||
"shipment_number": "SH70220367",
|
||||
"customer_id": 7,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "18/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 3138.85,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 9,
|
||||
"shipment_number": "SH55193994",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "27/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 11332.5,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 10,
|
||||
"shipment_number": "SH17856572",
|
||||
"customer_id": 1,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "29/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 13076.02,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 11,
|
||||
"shipment_number": "SH28422300",
|
||||
"customer_id": 10,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "20/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 7275.45,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 12,
|
||||
"shipment_number": "SH61251946",
|
||||
"customer_id": 8,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "8/10/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 19433.81,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 13,
|
||||
"shipment_number": "SH64983519",
|
||||
"customer_id": 9,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "1/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 16433.8,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 14,
|
||||
"shipment_number": "SH73216699",
|
||||
"customer_id": 9,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "1/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 6400.14,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 15,
|
||||
"shipment_number": "SH81029178",
|
||||
"customer_id": 5,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "26/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 16318.92,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 16,
|
||||
"shipment_number": "SH72625775",
|
||||
"customer_id": 6,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "21/12/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 11595.61,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 17,
|
||||
"shipment_number": "SH61687721",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "7/5/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 5710.41,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 18,
|
||||
"shipment_number": "SH32435794",
|
||||
"customer_id": 3,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "7/4/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 17535.07,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 19,
|
||||
"shipment_number": "SH29875774",
|
||||
"customer_id": 8,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "31/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 4436.25,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 20,
|
||||
"shipment_number": "SH9932668",
|
||||
"customer_id": 9,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "11/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 5888.78,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 21,
|
||||
"shipment_number": "SH36240144",
|
||||
"customer_id": 9,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 17137.02,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 22,
|
||||
"shipment_number": "SH96157441",
|
||||
"customer_id": 3,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "15/1/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 1167.8,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 23,
|
||||
"shipment_number": "SH18823114",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "30/8/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 8319.09,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 24,
|
||||
"shipment_number": "SH28275600",
|
||||
"customer_id": 7,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "17/6/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 16231.08,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 25,
|
||||
"shipment_number": "SH84358888",
|
||||
"customer_id": 4,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "28/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 17400.46,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 26,
|
||||
"shipment_number": "SH13641433",
|
||||
"customer_id": 10,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "6/9/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 18342.63,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 27,
|
||||
"shipment_number": "SH18469349",
|
||||
"customer_id": 5,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "20/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 15479.16,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 28,
|
||||
"shipment_number": "SH18420257",
|
||||
"customer_id": 9,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "13/3/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 10248.8,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 29,
|
||||
"shipment_number": "SH64951199",
|
||||
"customer_id": 10,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "14/11/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 13947.55,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
},
|
||||
{
|
||||
"sales_shipment_id": 30,
|
||||
"shipment_number": "SH36825810",
|
||||
"customer_id": 1,
|
||||
"contract_number": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"doc_date_utc": "20/2/2025 16:00:00+00",
|
||||
"delivery_date_utc": null,
|
||||
"transport_mode": null,
|
||||
"customs_number": null,
|
||||
"amount": 9783.1,
|
||||
"event_time_utc": "26/12/2025 05:36:10.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:10.-1f+00"
|
||||
}
|
||||
]
|
||||
92
sql/fact_scrap.json
Normal file
92
sql/fact_scrap.json
Normal file
@@ -0,0 +1,92 @@
|
||||
[
|
||||
{
|
||||
"scrap_id": 1,
|
||||
"scrap_number": "SCR29224832",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "11/11/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 2,
|
||||
"scrap_number": "SCR94358885",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "23/1/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 3,
|
||||
"scrap_number": "SCR5362558",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "20/6/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 4,
|
||||
"scrap_number": "SCR20950494",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "1/4/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 5,
|
||||
"scrap_number": "SCR40775893",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "21/3/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 6,
|
||||
"scrap_number": "SCR56499569",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "27/2/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 7,
|
||||
"scrap_number": "SCR31480752",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "3/7/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 8,
|
||||
"scrap_number": "SCR38577142",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "4/2/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 9,
|
||||
"scrap_number": "SCR37752664",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "14/3/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"scrap_id": 10,
|
||||
"scrap_number": "SCR56248465",
|
||||
"warehouse_name": null,
|
||||
"scrap_time_utc": "10/10/2025 16:00:00+00",
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
1082
sql/fact_work_order.json
Normal file
1082
sql/fact_work_order.json
Normal file
File diff suppressed because it is too large
Load Diff
162
sql/fact_write_off.json
Normal file
162
sql/fact_write_off.json
Normal file
@@ -0,0 +1,162 @@
|
||||
[
|
||||
{
|
||||
"write_off_id": 1,
|
||||
"write_off_number": "WOFF4957019",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 5,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 2250.39,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 2,
|
||||
"write_off_number": "WOFF86844048",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 4232.3,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 3,
|
||||
"write_off_number": "WOFF5965561",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 6,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 2778.39,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 4,
|
||||
"write_off_number": "WOFF35734725",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 6,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 1788.25,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 5,
|
||||
"write_off_number": "WOFF98551101",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 1,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 680.83,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 6,
|
||||
"write_off_number": "WOFF46489967",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 272.54,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 7,
|
||||
"write_off_number": "WOFF51718480",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 9,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 3758.38,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 8,
|
||||
"write_off_number": "WOFF79810467",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 6,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 596.88,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 9,
|
||||
"write_off_number": "WOFF97024109",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 7,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 1841.56,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
},
|
||||
{
|
||||
"write_off_id": 10,
|
||||
"write_off_number": "WOFF59780497",
|
||||
"doc_date_utc": null,
|
||||
"contract_id": null,
|
||||
"customer_id": 2,
|
||||
"supplier_id": null,
|
||||
"write_off_type": null,
|
||||
"currency_code": null,
|
||||
"fx_rate": null,
|
||||
"discount_amount": null,
|
||||
"write_off_amount": 1310.11,
|
||||
"event_time_utc": "26/12/2025 05:36:11.-1f+00",
|
||||
"source_system": null,
|
||||
"last_updated_utc": "26/12/2025 05:36:11.-1f+00"
|
||||
}
|
||||
]
|
||||
107
sql/现有表.json
Normal file
107
sql/现有表.json
Normal file
@@ -0,0 +1,107 @@
|
||||
[
|
||||
{
|
||||
"table_name": "dim_bom"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_contract"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_customer"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_equipment"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_operation"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_person"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_product"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_qc_reason"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_routing"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_supplier"
|
||||
},
|
||||
{
|
||||
"table_name": "dim_warehouse"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_ap_payment"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_ar_receipt"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_cash_flow"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_commission"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_inventory_count"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_inventory_movement"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_inventory_transfer"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_invoice"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_labor_report"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_lead"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_operation_task"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_opportunity"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_production_plan"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_purchase_order"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_purchase_receipt"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_purchase_request"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_purchase_return"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_quality_inspection"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_sales_order"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_sales_return"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_sales_shipment"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_scrap"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_work_order"
|
||||
},
|
||||
{
|
||||
"table_name": "fact_write_off"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user