test_tech_dashboard_statistics.sh 6.09 KB
#!/bin/bash

# 测试科技部驾驶舱 GetStatistics 接口 - 验证新增字段
# 使用方法: ./scripts/sh/test_tech_dashboard_statistics.sh

BASE_URL="http://localhost:2011"
TOKEN=""

echo "=========================================="
echo "测试科技部驾驶舱 GetStatistics 接口"
echo "验证新增字段:开单、储扣、退款、消耗、手工费"
echo "=========================================="
echo ""

# 1. 登录获取token
echo "1. 登录获取token..."
LOGIN_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/oauth/Login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e")

TOKEN=$(echo $LOGIN_RESPONSE | python3 -c "import sys, json; print(json.load(sys.stdin)['data']['token'])" 2>/dev/null)

if [ -z "$TOKEN" ]; then
  echo "❌ 登录失败,无法获取token"
  exit 1
fi

echo "✅ Token获取成功"
echo ""

# 2. 测试使用科技部ID查询
echo "2. 测试使用科技部ID查询..."
TECH_DEPT_ID="734725579919590661"  # 科技一部ID
STATISTICS_MONTH="202601"

RESPONSE=$(curl -s -X POST "${BASE_URL}/api/Extend/LqTechDepartmentDashboard/GetStatistics" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{
    \"techDepartmentId\": \"${TECH_DEPT_ID}\",
    \"statisticsMonth\": \"${STATISTICS_MONTH}\"
  }")

echo "响应状态码: $(echo "$RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('code', 'N/A'))" 2>/dev/null)"
echo ""

# 3. 验证新增字段是否存在
echo "3. 验证新增字段是否存在..."
VALIDATION_RESULT=$(echo "$RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 and data.get('data'):
        result = data['data']
        missing_fields = []
        required_fields = {
            'BillingAmount': '开单金额',
            'DeductAmount': '储扣金额',
            'RefundAmount': '退款金额',
            'ConsumeAmount': '消耗金额',
            'HandworkFee': '手工费'
        }
        
        for field, name in required_fields.items():
            if field not in result:
                missing_fields.append(f'{name}({field})')
        
        if missing_fields:
            print('❌ 以下字段缺失:')
            for field in missing_fields:
                print(f'  - {field}')
            exit(1)
        else:
            print('✅ 所有新增字段都存在')
            print('')
            print('字段值:')
            for field, name in required_fields.items():
                value = result.get(field, 0)
                print(f'  {name}({field}): {value}')
            exit(0)
    else:
        print('❌ 响应数据格式不正确')
        print('响应内容:', json.dumps(data, indent=2, ensure_ascii=False))
        exit(1)
except Exception as e:
    print(f'❌ 解析响应失败: {e}')
    exit(1)
" 2>/dev/null)

if [ $? -ne 0 ]; then
  echo "$VALIDATION_RESULT"
  echo ""
  echo "完整响应:"
  echo "$RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$RESPONSE"
  exit 1
fi

echo "$VALIDATION_RESULT"
echo ""

# 4. 显示完整响应数据
echo "4. 完整响应数据:"
echo "$RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 and data.get('data'):
        result = data['data']
        print('=' * 60)
        print('基础指标:')
        print(f'  溯源金额: {result.get(\"TraceabilityAmount\", 0)}')
        print(f'  Cell金额: {result.get(\"CellAmount\", 0)}')
        print(f'  科美总收入: {result.get(\"TotalKemeiIncome\", 0)}')
        print(f'  管理的门店数: {result.get(\"ManagedStoreCount\", 0)}')
        print(f'  活跃门店数: {result.get(\"ActiveStoreCount\", 0)}')
        print('')
        print('开单/退卡明细:')
        print(f'  开单溯源金额: {result.get(\"BillingTraceabilityAmount\", 0)}')
        print(f'  退卡溯源金额: {result.get(\"RefundTraceabilityAmount\", 0)}')
        print(f'  开单Cell金额: {result.get(\"BillingCellAmount\", 0)}')
        print(f'  退卡Cell金额: {result.get(\"RefundCellAmount\", 0)}')
        print('')
        print('新增字段:')
        print(f'  开单金额(BillingAmount): {result.get(\"BillingAmount\", 0)}')
        print(f'  储扣金额(DeductAmount): {result.get(\"DeductAmount\", 0)}')
        print(f'  退款金额(RefundAmount): {result.get(\"RefundAmount\", 0)}')
        print(f'  消耗金额(ConsumeAmount): {result.get(\"ConsumeAmount\", 0)}')
        print(f'  手工费(HandworkFee): {result.get(\"HandworkFee\", 0)}')
        print('=' * 60)
    else:
        print('响应数据格式不正确')
        print(json.dumps(data, indent=2, ensure_ascii=False))
except Exception as e:
    print(f'解析失败: {e}')
" 2>/dev/null

echo ""

# 5. 测试使用门店ID列表查询
echo "5. 测试使用门店ID列表查询..."
STORE_ID="1649328471923847198"  # 绿纤川音店

STORE_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/Extend/LqTechDepartmentDashboard/GetStatistics" \
  -H "Authorization: ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{
    \"storeIds\": [\"${STORE_ID}\"],
    \"statisticsMonth\": \"${STATISTICS_MONTH}\"
  }")

echo "响应状态码: $(echo "$STORE_RESPONSE" | python3 -c "import sys, json; print(json.load(sys.stdin).get('code', 'N/A'))" 2>/dev/null)"
echo ""

# 验证门店ID查询的字段
echo "门店ID查询的新增字段值:"
echo "$STORE_RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 and data.get('data'):
        result = data['data']
        print(f'  开单金额: {result.get(\"BillingAmount\", 0)}')
        print(f'  储扣金额: {result.get(\"DeductAmount\", 0)}')
        print(f'  退款金额: {result.get(\"RefundAmount\", 0)}')
        print(f'  消耗金额: {result.get(\"ConsumeAmount\", 0)}')
        print(f'  手工费: {result.get(\"HandworkFee\", 0)}')
    else:
        print('响应数据格式不正确')
except Exception as e:
    print(f'解析失败: {e}')
" 2>/dev/null

echo ""

echo "=========================================="
echo "✅ 测试完成"
echo "=========================================="