java旋转算法

uurity8g  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(408)

我在一家小型能源公司工作,我被要求创建一个方法,该方法将被调用,以确定我们的哪些技术人员将把公司下班时间的电话带回家。
我们有两张table我可以考虑
技师表

id           name
--------------------
001         George
002         James
003         Wesley
004         Horace
005         Jason
006         Nice

离开table

id        leaveDate
--------------------
005       2020/12/29
005       2020/12/30
002       2021/01/05
002       2021/01/13
003       2021/01/13
005       2021/01/22

历史记录表*尚不存在

id        techPhoneDate
--------------------
001       2021/01/04
003       2021/01/05

我可以创建一个新的表与电话历史记录,以保持对谁历史上被分配到它的标签,我只想有一些东西,将确保轮换是公平的,并将跳过该人如果休假,并将分配给他们在下一个可能的天
如果是周末,我已经有了返回错误的代码,如果历史记录表已经有一个计算出的那天的技术人员,它只会返回那个技术人员。在计算时还应考虑是否将增加一名新技术人员。
我起初认为这是一个简单的方法,但我如何才能找到谁负责今天的电话呢?

private List<Technicians> techs;
private List<PhoneHistory> phoneHistory;
private List<Leaves> leaves;

public RotationResponse getTechOnDuty(String rotationDate) {

        RotationResponse resp = new RotationResponse();

        try {

        resp.setRotationDate(rotationDate);
        //check if its a weekend
        resp = validateDate(resp);

        if (resp.getErrorMessage() != null) {
            return resp;
        }

        String techId = findTechIdForDate(rotationDate); // find in history if there is an existing tech already calculated

        if (StringUtils.isNotBlank(techId)){
            resp.setTechnician(findTechById(techId));
        } else {
            resp.setTechnician(findTechById(getTechPhoneRotationForToday(rotationDate)));
        }

        return resp;

        } catch (Exception e) {
            return resp.setErrorMessage(e.getMessage());
        }

    }

private String getTechPhoneRotationForToday(String rotationDate){
// TODO
}
x759pob2

x759pob21#

也许 吧:
为每个技术人员保留一张表格,上面有团队加入和离开的日期(他们是什么时候开始为公司工作的)
定义一个时间段来分析决策,例如过去的一年
在该期间和每个工作日重复:
数一数那天队里有多少技术人员
按技术人员的1/#计算比例电话“义务”
为每位技术人员合计此项义务
如果技师有电话值班,则每天从“义务金额”中扣除1
然后在第二天指派没有休假且负有最高责任的技术人员
也可能避免连续的工作日:使用下一个最高责任的人
确定一天是否是一个工作日本身很有挑战性

相关问题