5.Java实战案例
提供的开发 Java 脚本的项目工具
1, 案例简述
根据员工不同的职级,计算不同加班时长给予的加班费。
T0 级别 加班费 100 元/每小时
T1 级别 加班费 200 元/每小时
目前本地的 Excel 的表格格式为
员工职级表,列有 员工姓名、职级。
员工加班明细表,列有 员工姓名、加班时长。
需要计算 员工加班费表,列有 员工姓名、加班费。
2,案例开发
新建方案,添加分组
注:此处添加分组采用“Excel 导入方式”
点击确定后,输入分组“员工职级表”分组和数据都已经上传进系统。
同理上传“员工加班明细表”
最后设置下输出结果分组“员工加班费表”
3, 设置计算规则
在下载的 example 项目中,开始开发脚本代码。
3.1,为方便本地调试,先修改 com.xrxs.calculation.open.platform.mock.data.MockDataUtil 中,修改为相应的 mock 数据。
本例中 mock 数据为
{"员工职级表":[{"员工姓名":"张三","职级":"T0"},{"员工姓名":"李四","职级":"T1"},{"员工姓名":"王五","职级":"T1"}],"员工加班明细表":[{"员工姓名":"张三","加班时长":"2"},{"员工姓名":"李四","加班时长":"5"},{"员工姓名":"王五","加班时长":"10"}]}
如实战中数据较多,可以每个表挑选几条数据编写 mock 数据。
3.2,编写逻辑脚本代码。在 com.xrxs.calculation.open.platform.node.JavaDemo 中编写。
import com.xrxs.calculation.open.platform.bean.ParamsContext;
import com.yomahub.liteflow.script.ScriptExecuteWrap;
import com.yomahub.liteflow.script.body.JaninoCommonScriptBody;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JavaDemo implements JaninoCommonScriptBody {
public Void body(ScriptExecuteWrap wrap) {
ParamsContext paramsContext = (ParamsContext) wrap.cmp.getFirstContextBean();
//获取入参
Map<String, List<Map<String, String>>> tableDetailMap = paramsContext.getTableDetailMap();
List<Map<String, String>> rankList = (List) tableDetailMap.get("员工职级表");
List<Map<String, String>> overtimeList = (List) tableDetailMap.get("员工加班明细表");
//处理员工加班格式
Map<String, Integer> employee2OvertimeMap = new HashMap<>(); // 员工姓名 -> 加班时长
for (Map<String, String> stringStringMap : overtimeList) {
employee2OvertimeMap.put(stringStringMap.get("员工姓名"), Integer.parseInt((String) stringStringMap.get("加班时长")));
}
//定义输出数据
Map<String, List<Map<String, String>>> resultDataMap = new HashMap<>();
List<Map<String, String>> lineList = new ArrayList<>();
resultDataMap.put("员工加班费表", lineList);
for (Map<String, String> eachMap : rankList) {
String name = (String) eachMap.get("员工姓名");
String rank = (String) eachMap.get("职级");
int overtimeFee = this.calOvertimeFee(rank, (Integer) employee2OvertimeMap.get(name));
Map<String, String> eachOutMap = new HashMap<>();
eachOutMap.put("员工姓名", name);
eachOutMap.put("加班费", overtimeFee + "");
lineList.add(eachOutMap);
}
paramsContext.setResultDataMap(resultDataMap);
return null;
}
private int calOvertimeFee(String rank, int overtimeSum) {
int overtimeFee = 0;
switch (rank) {
case "T0":
overtimeFee = overtimeSum * 100;
break;
case "T1":
overtimeFee = overtimeSum * 200;
break;
}
return overtimeFee;
}
}
3.3,编译没问题后,将代码粘贴到 /resources/java/javaDemo.java 中。
3.4,启动项目运行。
注:此时如项目启动失败,大概率为“脚本中不支持泛型”,需要强制转换为响应的类型。
3.5,启动成功后,执行 http://localhost:8080/ 查看返回值是否 符合输出预期,如符合预期,可以粘贴到 薪人薪事系统提交审核。
3.6,审核通过后点击计算
3.7,查看输出结果分组数据。
符合预期。