5.Java实战案例

提供的开发 Java 脚本的项目工具

下载附件 example.zip

image

1, 案例简述

根据员工不同的职级,计算不同加班时长给予的加班费。

T0 级别 加班费 100 元/每小时

T1 级别 加班费 200 元/每小时

目前本地的 Excel 的表格格式为

员工职级表,列有 员工姓名、职级。

员工加班明细表,列有 员工姓名、加班时长。

需要计算 员工加班费表,列有 员工姓名、加班费。

下载附件 员工职级表.xlsx

下载附件 员工加班明细表.xlsx

2,案例开发

新建方案,添加分组

注:此处添加分组采用“Excel 导入方式”

image

点击确定后,输入分组“员工职级表”分组和数据都已经上传进系统。

image

同理上传“员工加班明细表”

image

最后设置下输出结果分组“员工加班费表”

image

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/ 查看返回值是否 符合输出预期,如符合预期,可以粘贴到 薪人薪事系统提交审核。

image

3.6,审核通过后点击计算

image

3.7,查看输出结果分组数据。

image

符合预期。

2024 © 企家有道网络技术(北京)有限公司版权所有@京ICP备15035315号 all right reserved,powered by Gitbookupdate by: 2024-04-09 09:45:21

results matching ""

    No results matching ""