java旋转算法

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

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

  1. id name
  2. --------------------
  3. 001 George
  4. 002 James
  5. 003 Wesley
  6. 004 Horace
  7. 005 Jason
  8. 006 Nice

离开table

  1. id leaveDate
  2. --------------------
  3. 005 2020/12/29
  4. 005 2020/12/30
  5. 002 2021/01/05
  6. 002 2021/01/13
  7. 003 2021/01/13
  8. 005 2021/01/22

历史记录表*尚不存在

  1. id techPhoneDate
  2. --------------------
  3. 001 2021/01/04
  4. 003 2021/01/05

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

  1. private List<Technicians> techs;
  2. private List<PhoneHistory> phoneHistory;
  3. private List<Leaves> leaves;
  4. public RotationResponse getTechOnDuty(String rotationDate) {
  5. RotationResponse resp = new RotationResponse();
  6. try {
  7. resp.setRotationDate(rotationDate);
  8. //check if its a weekend
  9. resp = validateDate(resp);
  10. if (resp.getErrorMessage() != null) {
  11. return resp;
  12. }
  13. String techId = findTechIdForDate(rotationDate); // find in history if there is an existing tech already calculated
  14. if (StringUtils.isNotBlank(techId)){
  15. resp.setTechnician(findTechById(techId));
  16. } else {
  17. resp.setTechnician(findTechById(getTechPhoneRotationForToday(rotationDate)));
  18. }
  19. return resp;
  20. } catch (Exception e) {
  21. return resp.setErrorMessage(e.getMessage());
  22. }
  23. }
  24. private String getTechPhoneRotationForToday(String rotationDate){
  25. // TODO
  26. }
x759pob2

x759pob21#

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

相关问题