test_lq_salary_complete.sh 5.59 KB
#!/bin/bash

# 完整测试健康师工资服务接口
# 使用方法:./scripts/sh/test_lq_salary_complete.sh

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

echo "=========================================="
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失败"
  echo "响应: $LOGIN_RESPONSE"
  exit 1
fi

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

# 2. 测试计算工资接口
echo "2. 测试计算健康师工资接口(calculate/health-coach)..."
echo "请求参数: year=2025, month=9"
echo ""

CALCULATE_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/Extend/LqSalary/calculate/health-coach?year=2025&month=9" \
  -H "Authorization: ${TOKEN}")

if echo "$CALCULATE_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); exit(0 if data.get('code') == 200 or '操作成功' in str(data) or data == '' else 1)" 2>/dev/null; then
  echo "✅ 计算健康师工资接口测试通过"
else
  echo "❌ 计算健康师工资接口测试失败"
  echo "$CALCULATE_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$CALCULATE_RESPONSE"
  exit 1
fi
echo ""

# 3. 测试导入接口
echo "3. 测试导入工资接口(import)..."
echo "使用文件: ExportFiles/工资导入/健康师工资_带ID.xlsx"
echo ""

if [ ! -f "ExportFiles/工资导入/健康师工资_带ID.xlsx" ]; then
  echo "❌ Excel文件不存在: ExportFiles/工资导入/健康师工资_带ID.xlsx"
  exit 1
fi

IMPORT_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/Extend/LqSalary/import" \
  -H "Authorization: ${TOKEN}" \
  -F "file=@ExportFiles/工资导入/健康师工资_带ID.xlsx")

IMPORT_RESULT=$(echo "$IMPORT_RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 and data.get('data', {}).get('success'):
        print('SUCCESS')
        print(f\"成功: {data['data'].get('successCount', 0)} 条\")
        print(f\"失败: {data['data'].get('failCount', 0)} 条\")
        print(f\"跳过: {data['data'].get('skippedCount', 0)} 条\")
        if data['data'].get('failCount', 0) > 0:
            errors = data['data'].get('errors', [])
            if errors:
                print(f\"前3个错误:\")
                for i, err in enumerate(errors[:3], 1):
                    print(f\"  {i}. {err}\")
    else:
        print('FAILED')
        print(json.dumps(data, indent=2, ensure_ascii=False))
except Exception as e:
    print(f'ERROR: {e}')
    print(sys.stdin.read()[:500])
" 2>/dev/null)

if echo "$IMPORT_RESULT" | grep -q "SUCCESS"; then
  echo "✅ 导入工资接口测试通过"
  echo "$IMPORT_RESULT" | grep -v "SUCCESS"
else
  echo "❌ 导入工资接口测试失败"
  echo "$IMPORT_RESULT"
  exit 1
fi
echo ""

# 4. 测试确认接口(需要先锁定一条记录)
echo "4. 测试员工确认工资条接口(confirm)..."
echo "提示:需要先锁定一条工资记录才能测试确认接口"
echo ""

# 查询一条记录
SALARY_RECORD=$(curl -s -X GET "${BASE_URL}/api/Extend/LqSalary/health-coach?currentPage=1&pageSize=1&year=2025&month=9" \
  -H "Authorization: ${TOKEN}")

RECORD_ID=$(echo "$SALARY_RECORD" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 and data.get('data', {}).get('list'):
        record = data['data']['list'][0]
        print(record.get('id', ''))
        print(record.get('employeeId', ''))
except:
    pass
" 2>/dev/null)

RECORD_ID_LINE=$(echo "$RECORD_ID" | head -1)
EMPLOYEE_ID_LINE=$(echo "$RECORD_ID" | tail -1)

if [ -z "$RECORD_ID_LINE" ] || [ -z "$EMPLOYEE_ID_LINE" ]; then
  echo "⚠️  无法获取测试用的工资记录,跳过确认接口测试"
  echo "提示:请先确保有可用的工资记录,并且该记录已锁定(IsLocked=1)"
else
  echo "使用记录ID: $RECORD_ID_LINE, 员工ID: $EMPLOYEE_ID_LINE"
  echo ""
  echo "注意:此记录需要先锁定才能测试确认接口"
  echo "可以使用SQL: UPDATE lq_salary_statistics SET F_IsLocked = 1 WHERE F_Id = '$RECORD_ID_LINE'"
  echo ""
  
  # 尝试调用确认接口(可能会失败,因为记录可能未锁定)
  CONFIRM_RESPONSE=$(curl -s -X POST "${BASE_URL}/api/Extend/LqSalary/confirm" \
    -H "Authorization: ${TOKEN}" \
    -H "Content-Type: application/json" \
    -d "{\"id\":\"$RECORD_ID_LINE\",\"employeeId\":\"$EMPLOYEE_ID_LINE\",\"remark\":\"测试确认\"}")
  
  CONFIRM_RESULT=$(echo "$CONFIRM_RESPONSE" | python3 -c "
import sys, json
try:
    data = json.load(sys.stdin)
    if data.get('code') == 200 or '确认成功' in str(data):
        print('SUCCESS')
    else:
        print('EXPECTED_ERROR')
        print(f\"消息: {data.get('msg', '未知错误')}\")
except Exception as e:
    print(f'ERROR: {e}')
" 2>/dev/null)
  
  if echo "$CONFIRM_RESULT" | grep -q "SUCCESS"; then
    echo "✅ 确认接口测试通过"
  elif echo "$CONFIRM_RESULT" | grep -q "EXPECTED_ERROR"; then
    echo "⚠️  确认接口返回预期错误(记录可能未锁定):"
    echo "$CONFIRM_RESULT" | grep -v "EXPECTED_ERROR"
    echo "这是正常的,说明验证逻辑工作正常"
  else
    echo "❌ 确认接口测试异常"
    echo "$CONFIRM_RESULT"
  fi
fi

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