# 绿纤美业ERP工资核算服务 ## 项目简介 这是一个基于.NET 6开发的跨平台控制台服务,专门用于绿纤美业ERP系统的月末财务工资核算。该服务支持Windows、Linux、CentOS等操作系统,能够自动计算员工工资、生成工资报表并发送邮件通知。 ## 功能特性 - ✅ **跨平台支持**: 支持Windows、Linux、CentOS等操作系统 - ✅ **用户信息初始化**: 自动从系统用户表获取用户信息并插入到工资表 - ✅ **自动工资核算**: 根据绿纤美业薪酬规则自动计算员工工资 - ✅ **多角色支持**: 支持健康师、店长、主任、店助等不同岗位的工资计算 - ✅ **金三角提成**: 支持金三角(战队)提成计算 - ✅ **门店生命线**: 基于门店生命线的考核机制 - ✅ **新店保护**: 支持新店特殊薪酬规则 - ✅ **报表导出**: 自动生成Excel/CSV格式的工资报表 - ✅ **邮件通知**: 支持邮件通知功能 - ✅ **日志记录**: 完整的操作日志记录 - ✅ **Docker支持**: 支持Docker容器化部署 ## 技术栈 - **.NET 6.0**: 跨平台运行时 - **SqlSugar**: ORM框架,支持MySQL数据库 - **Serilog**: 结构化日志记录 - **Microsoft.Extensions**: 依赖注入和配置管理 - **Yitter.IdGenerator**: 分布式ID生成 ## 系统要求 ### 开发环境 - .NET 6.0 SDK - Visual Studio 2022 或 VS Code - MySQL 5.7+ 或 8.0+ ### 运行环境 - .NET 6.0 Runtime - MySQL数据库连接 - 网络连接(用于数据库访问) ## 快速开始 ### 1. 克隆项目 ```bash git clone [项目地址] cd service/LqSalaryCalculationService ``` ### 2. 配置数据库 编辑 `appsettings.json` 文件,配置数据库连接字符串: ```json { "ConnectionStrings": { "DefaultConnection": "Database=lqerp;Data Source=your-server;Port=3306;User Id=your-username;Password=your-password;Charset=utf8;" } } ``` ### 3. 运行服务 #### Windows ```cmd # 计算当前月份工资 start.bat # 计算指定月份工资 start.bat 2024-09 # 显示帮助 start.bat --help ``` #### Linux/CentOS ```bash # 计算当前月份工资 ./start.sh # 计算指定月份工资 ./start.sh 2024-09 # 显示帮助 ./start.sh --help ``` #### 直接使用dotnet命令 ```bash # 还原包 dotnet restore # 构建项目 dotnet build -c Release # 运行服务 dotnet run --configuration Release -- 2024-09 ``` ## Docker部署 ### 1. 构建Docker镜像 ```bash docker build -t lq-salary-calculation-service . ``` ### 2. 运行容器 ```bash # 运行容器 docker run -d \ --name salary-service \ -v $(pwd)/logs:/app/logs \ -v $(pwd)/output:/app/output \ -v $(pwd)/backup:/app/backup \ lq-salary-calculation-service 2024-09 # 查看日志 docker logs salary-service ``` ### 3. 使用Docker Compose ```bash # 启动服务 docker-compose up -d # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` ## 配置说明 ### appsettings.json配置项 ```json { "ConnectionStrings": { "DefaultConnection": "数据库连接字符串" }, "SalaryCalculation": { "CalculationMonth": "计算月份", "OutputPath": "./output", "BackupPath": "./backup", "LogPath": "./logs", "EnableEmailNotification": true, "EmailSettings": { "SmtpServer": "smtp.163.com", "SmtpPort": 587, "Username": "邮箱用户名", "Password": "邮箱密码", "FromEmail": "发件人邮箱", "ToEmails": ["收件人邮箱列表"] } } } ``` ## 工作流程 ### 1. 用户信息初始化 服务启动时首先执行以下步骤: 1. **获取用户基础信息**: - 从 `BASE_USER` 表获取 `F_Id`(用户编号)、`F_REALNAME`(姓名)、`F_GW`(岗位) - 通过 `F_MDID`(门店编号)关联 `lq_mdxx` 表获取 `dm`(门店名称) 2. **获取金三角信息**: - 通过用户ID在 `lq_jinsanjiao_user` 表中查找对应月份的金三角ID - 通过金三角ID在 `lq_ycsd_jsj` 表中获取 `jsj`(金三角名称) 3. **插入工资表**: - 将用户信息插入到 `lq_gz`(工资表)的对应字段: - `userid` ← `F_Id`(用户编号) - `xm` ← `F_REALNAME`(姓名) - `hsgw` ← `F_GW`(岗位) - `md` ← `dm`(门店名称) - `jsjzd` ← `jsj`(金三角名称) ### 2. 工资核算 完成用户信息初始化后,执行工资核算: ## 薪酬规则 ### 健康师薪酬规则 - **一星**: 月消耗≥10000元 且 项目数≥96个 → 底薪2000元 - **二星**: 月消耗≥20000元 且 项目数≥126个 → 底薪2200元 - **三星**: 月消耗≥40000元 且 项目数≥156个 → 底薪2400元 - **0星**: 未达到最低标准 → 底薪1800元 ### 金三角提成规则 - **3人战队**: 业绩30000-150000元,提成比例3%-7% - **2人战队**: 业绩20000-80000元,提成比例3%-6% - **1人战队**: 业绩10000-60000元,提成比例3%-6% ### 管理岗位薪酬规则 - **店长**: 底薪4000元,基于毛利的提成计算 - **主任**: 底薪3500元,基于毛利的提成计算 - **店助**: 底薪3000元,基于毛利的提成计算 ## 输出文件 服务运行后会在以下目录生成文件: - `./output/`: 工资报表文件(Excel/CSV格式) - `./logs/`: 日志文件 - `./backup/`: 备份文件 ## 日志说明 日志文件位置:`./logs/salary-calculation-YYYY-MM-DD.log` 日志级别: - **Information**: 一般信息 - **Warning**: 警告信息 - **Error**: 错误信息 - **Fatal**: 致命错误 ## 故障排除 ### 常见问题 1. **数据库连接失败** - 检查数据库连接字符串是否正确 - 确认数据库服务是否运行 - 检查网络连接 2. **权限不足** - 确保有足够的文件系统权限 - 检查输出目录是否可写 3. **依赖包问题** - 运行 `dotnet restore` 还原包 - 检查网络连接 ### 调试模式 ```bash # 启用详细日志 export ASPNETCORE_ENVIRONMENT=Development dotnet run --configuration Debug -- 2024-09 ``` ## 开发指南 ### 项目结构 ``` LqSalaryCalculationService/ ├── Models/ # 数据模型 │ ├── EmployeeSalary.cs # 员工工资模型 │ └── SalaryCalculationConfig.cs # 配置模型 ├── Services/ # 服务层 │ ├── ISalaryCalculationService.cs # 服务接口 │ └── SalaryCalculationService.cs # 服务实现 ├── Program.cs # 程序入口 ├── appsettings.json # 配置文件 ├── Dockerfile # Docker配置 ├── docker-compose.yml # Docker Compose配置 ├── start.sh # Linux启动脚本 ├── start.bat # Windows启动脚本 └── README.md # 说明文档 ``` ### 添加新的薪酬规则 1. 在 `SalaryCalculationService.cs` 中添加新的计算方法 2. 在 `CalculateSalaryAsync` 方法中添加新的岗位判断 3. 更新配置文件以支持新的参数 ## 版本历史 ### v1.0.0 (2024-09-11) - 初始版本发布 - 支持基础工资核算功能 - 支持跨平台部署 - 支持Docker容器化 ## 许可证 本项目仅供内部使用,请勿用于商业用途。 ## 技术支持 如有技术问题,请联系开发团队或查看项目文档。 --- **注意**: 请确保在生产环境中正确配置数据库连接和邮件设置。