yonbip-code-gen-mcp
Version:
YonBIP高级版代码生成MCP
163 lines (113 loc) • 4.25 kB
Markdown
# 项目奖金计算服务实现模板 (ProjectBonusCalImpl)
## 概述
项目奖金计算服务实现类([ProjectBonusCalImpl](file:///D:/project/aw-pbd/c-aw-gd-pbd-be/dev-c-aw-gd-pbd-service/src/main/java/com/yonyou/aw/pbd/service/impl/projectbonuscal/ProjectBonusCalImpl.java))是一个用于计算项目奖金的业务逻辑实现类。该类提供了多种与项目奖金计算相关的方法,包括单个计算、批量计算、状态更新等核心功能。
## 主要功能
1. **单个项目奖金计算**
2. **批量项目奖金计算**
3. **项目奖金状态更新**
4. **数据过滤和校验**
5. **审批流程处理**
## 核心方法说明
### 1. CalMoney - 单个项目奖金计算
```java
public ProjectBonusCalculation CalMoney(Map<String, Object> param) throws Exception
```
**功能**: 根据传入参数计算单个项目奖金
**参数**:
- `param`: 计算所需参数Map,包含项目合同等信息
**返回值**:
- `ProjectBonusCalculation`: 项目奖金计算结果对象
### 2. filterID - 数据过滤
```java
public List<String> filterID(Map<String, Object> param) throws Exception
```
**功能**: 过滤不需要参与计算的项目数据
**参数**:
- `param`: 过滤条件参数
**返回值**:
- `List<String>`: 需要排除的项目ID列表
### 3. updateAfterApprove - 审批后处理
```java
public Map<String, Object> updateAfterApprove(Map<String, Object> param)
```
**功能**: 在审批通过后执行相关操作,如推送下游数据、更新状态等
**参数**:
- `param`: 审批相关信息
**返回值**:
- `Map<String, Object>`: 处理结果
### 4. CalMoneyList - 批量计算奖金
```java
public Map<String, Object> CalMoneyList(Map<String, Object> param) throws Exception
```
**功能**: 批量计算项目奖金数据
**参数**:
- `param`: 批量计算参数
**返回值**:
- `Map<String, Object>`: 计算结果
### 5. updateStatus - 更新项目奖金状态
```java
public Map<String, Object> updateStatus(Map<String, Object> param) throws BusinessException, InstantiationException, IllegalAccessException
```
**功能**: 更新项目奖金的状态(如确认、取消确认等)
**参数**:
- `param`: 状态更新参数
**返回值**:
- `Map<String, Object>`: 更新结果
### 6. BatchCalMoney - 批量计算奖金包
```java
public Map<String, Object> BatchCalMoney(Map<String, Object> param) throws Exception
```
**功能**: 根据组织和周期批量计算奖金包
**参数**:
- `param`: 批量计算参数,包含组织ID和考核周期
**返回值**:
- `Map<String, Object>`: 批量计算结果
## 依赖组件
- `IYmsJdbcApi`: 数据库操作接口
- `IBillCommonRepository`: 单据通用仓库服务
- `IBillQueryRepository`: 单据查询仓库服务
- `ITeamEvalService`: 团队评估服务
## 使用示例
### 单个计算示例
```java
@Autowired
private IProjectBonusCal projectBonusCal;
public void calculateProjectBonus() {
Map<String, Object> param = new HashMap<>();
param.put("project_contract", "contract_id");
param.put("assessment_cycle", "2023Q1");
try {
ProjectBonusCalculation result = projectBonusCal.CalMoney(param);
// 处理计算结果
} catch (Exception e) {
// 异常处理
}
}
```
### 批量计算示例
```java
@Autowired
private IProjectBonusCal projectBonusCal;
public void batchCalculateProjectBonus() {
Map<String, Object> param = new HashMap<>();
param.put("pk_org", "org_id");
param.put("assessmentCycle", "2023Q1");
try {
Map<String, Object> result = projectBonusCal.BatchCalMoney(param);
// 处理计算结果
} catch (Exception e) {
// 异常处理
}
}
```
## 注意事项
1. 所有涉及资金计算的方法都使用了`BigDecimal`以确保精度
2. 方法上添加了`@Transactional`注解确保事务一致性
3. 对于重要的业务操作,添加了前置校验和后置处理
4. 使用了权限控制,确保数据安全
5. 实现了完整的异常处理机制
## 扩展建议
1. 可以根据具体业务需求调整计算公式
2. 可以增加更多的校验规则
3. 可以添加日志记录以便追踪计算过程
4. 可以增加缓存机制提高重复计算的性能