#!/bin/bash # 测试所有薪酬计算服务的保护逻辑 # 验证已锁定和已确认的记录不会被覆盖 BASE_URL="http://localhost:2011" YEAR=2025 MONTH=12 echo "============================================================" echo "薪酬计算保护逻辑测试" echo "============================================================" echo "" echo "测试目标:" echo "1. 验证所有9个薪酬计算接口是否正常工作" echo "2. 确认已锁定或已确认的记录不会被覆盖" echo "3. 检查日志输出是否正确" echo "" echo "测试月份: ${YEAR}年${MONTH}月" echo "============================================================" echo "" # 获取Token echo "1. 获取认证Token..." TOKEN=$(curl -s -X POST "${BASE_URL}/api/oauth/Login" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | \ python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('token', ''))" 2>/dev/null) if [ -z "$TOKEN" ]; then echo "❌ 获取Token失败,请检查:" echo " - 后端服务是否运行" echo " - 服务地址是否正确(默认:http://localhost:2011)" echo " - 登录账号密码是否正确" exit 1 fi echo "✅ Token获取成功" echo "" # 测试函数 test_salary_calculation() { local name=$1 local endpoint=$2 local description=$3 echo "------------------------------------------------------------" echo "测试: ${name}" echo "接口: ${endpoint}" echo "------------------------------------------------------------" # 调用计算接口 start_time=$(date +%s) response=$(curl -s -X POST "${BASE_URL}${endpoint}?year=${YEAR}&month=${MONTH}" \ -H "Authorization: ${TOKEN}" \ -H "Content-Type: application/json" \ -w "\n%{http_code}") end_time=$(date +%s) elapsed=$((end_time - start_time)) http_code=$(echo "$response" | tail -n 1) body=$(echo "$response" | sed '$d') echo "响应时间: ${elapsed}秒" echo "HTTP状态码: ${http_code}" if [ "$http_code" = "200" ]; then # 检查响应内容 code=$(echo "$body" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('code', ''))" 2>/dev/null) if [ "$code" = "200" ]; then msg=$(echo "$body" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('msg', ''))" 2>/dev/null) echo "✅ ${name} - 计算成功" if [ ! -z "$msg" ]; then echo " 消息: ${msg}" fi echo "" return 0 else error_msg=$(echo "$body" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('msg', '未知错误'))" 2>/dev/null) echo "❌ ${name} - 计算失败" echo " 错误: ${error_msg}" echo " 响应: ${body:0:200}" echo "" return 1 fi else echo "❌ ${name} - HTTP错误: ${http_code}" echo " 响应: ${body:0:200}" echo "" return 1 fi } # 测试所有薪酬计算接口 echo "2. 开始测试所有薪酬计算接口..." echo "" success_count=0 fail_count=0 # 1. 健康师工资 if test_salary_calculation "健康师工资" \ "/api/Extend/LqSalary/calculate/health-coach" \ "健康师薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 2. 店长工资 if test_salary_calculation "店长工资" \ "/api/Extend/LqStoreManagerSalary/calculate/store-manager" \ "店长薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 3. 主任工资 if test_salary_calculation "主任工资" \ "/api/Extend/LqDirectorSalary/calculate/director" \ "主任薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 4. 店助工资 if test_salary_calculation "店助工资" \ "/api/Extend/LqAssistantSalary/calculate/assistant" \ "店助薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 5. 科技部老师工资 if test_salary_calculation "科技部老师工资" \ "/api/Extend/LqTechTeacherSalary/calculate/tech-teacher" \ "科技部老师薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 6. 大项目部老师工资 if test_salary_calculation "大项目部老师工资" \ "/api/Extend/LqMajorProjectTeacherSalary/calculate/major-project-teacher" \ "大项目部老师薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 7. 大项目主管工资 if test_salary_calculation "大项目主管工资" \ "/api/Extend/LqMajorProjectDirectorSalary/calculate/major-project-director" \ "大项目主管薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 8. 科技部总经理工资 if test_salary_calculation "科技部总经理工资" \ "/api/Extend/LqTechGeneralManagerSalary/calculate/tech-general-manager" \ "科技部总经理薪酬服务"; then ((success_count++)) else ((fail_count++)) fi sleep 1 # 9. 事业部总经理工资 if test_salary_calculation "事业部总经理工资" \ "/api/Extend/LqBusinessUnitManagerSalary/calculate/business-unit-manager" \ "事业部总经理薪酬服务"; then ((success_count++)) else ((fail_count++)) fi # 输出测试总结 echo "============================================================" echo "测试总结" echo "============================================================" echo "总测试数: 9" echo "✅ 成功: ${success_count}" echo "❌ 失败: ${fail_count}" echo "" if [ $fail_count -eq 0 ]; then echo "✅ 所有薪酬计算接口测试通过!" else echo "⚠️ 有 ${fail_count} 个接口测试失败,请检查日志" fi echo "" echo "============================================================" echo "测试说明" echo "============================================================" echo "1. 接口调用成功后,请检查后端日志:" echo " - 是否显示'跳过了 N 条已锁定或已确认的工资记录'" echo " - 确认已锁定或已确认的记录数量是否正确" echo "" echo "2. 检查数据库中已锁定或已确认的记录:" echo " - 扣款项目是否被保留" echo " - 补贴项目是否被保留" echo " - 其他导入的数据是否被保留" echo "" echo "3. 验证方法:" echo " - 导入Excel添加扣款项目" echo " - 锁定部分记录" echo " - 员工确认部分记录" echo " - 再次计算工资" echo " - 检查已锁定/已确认的记录,扣款项目应该被保留" echo "============================================================"