Giter Club home page Giter Club logo

kickoff's Introduction

Do not ask me anything about computers - I'm just an enthusiast.

kickoff's People

Contributors

oatw avatar

Stargazers

 avatar

Watchers

 avatar  avatar

kickoff's Issues

关于任务上移、下移、升级、降级的处理

Kickoff中更新wbs的内置处理机制

对任务层级或顺序的更新,本质上是更新wbs

对不同场景下wbs的更新,Kickoff内置了一套默认更新机制,同时支持通过before-update事件对默认更新机制进行拦截。

wbs更新为自身后代级别wbs不符逻辑性,直接默认更新失败,不同场景下内置的更新机制所执行的程序逻辑为:

场景一:不改变从属的父级任务关系更新wbs,如3.2.2 -> 3.2.1

  1. 在计入目标任务的条件下:按照目标任务旧wbs查找其后代任务,计算所有任务的新wbs,并记录下所有任务实例和新、旧wbs;
  2. 在不计入目标任务的条件下:如为向后移动,递减计算目标任务新、旧wbs范围内的任务(包含当前wbs等于新wbs的任务)及它们后代任务的新wbs;如为向前移动,递增计算目标任务新、旧wbs范围内的任务(包含当前wbs等于新wbs的任务)及他们后代任务的新wbs,并记录下所有任务实例和新、旧wbs;
  3. 查找所有dependencies中含有记录中旧wbs的任务,按照记录中对应的新wbs计算新dependencies,并记录下所有任务实例和新、旧dependencies,如果存在与前面步骤记录中相同的任务实例,则合并记录项;
  4. 按记录项依次触发before-update事件,如任一事件被阻止,则取消整个更新事务;反之,按照记录项依次更新任务实例,并触发after-touchafter-update事件。

场景二:更新wbs为顶级任务wbs,如3.2.2 -> 1

  1. 在不计入目标任务的条件下:按目标任务旧wbs查找其祖先任务,冒泡计算祖先任务的正确周期,并记录周期不正确的祖先任务实例和新、旧end,如果该祖先任务有非里程碑子任务,且有beginning/end晚于该祖先任务最晚子任务ends2f/f2f型前置任务关系,则计算从该祖先任务的dependencies中删除对应前置任务wbs后的新dependencies,并记录新、旧dependencies;
  2. 在计入目标任务的条件下:按照目标任务旧wbs查找其后代任务,计算所有任务的新wbs,并记录下所有任务实例和新、旧wbs;
  3. 在不计入目标任务的条件下:按目标任务旧wbs查找其后方兄弟任务,递减计算并记录兄弟任务和兄弟任务后代任务的实例及新、旧wbs;
  4. 在计入目标任务的条件下:按照目标任务新wbs查找其新的后方兄弟任务,递增计算并记录兄弟任务和兄弟任务后代任务的实例及新、旧wbs,如果存在与前面步骤中相同的任务实例,则使用记录中的新wbs作为计算基准,覆盖原记录中相同任务实例的新、旧wbs;
  5. 查找所有dependencies中含有记录中旧wbs的任务,按照记录中对应的新wbs计算查找到的任务的新dependencies,如果该任务实例在前面步骤中记录过dependencies,则使用记录中的对应新dependencies作为计算基准,并记录下所有任务实例和新、旧dependencies,如果存在与之前步骤中相同的任务实例,则合并记录项;
  6. 按记录项依次触发before-update事件,如任一事件被阻止,则取消整个更新事务;反之,按照记录项依次更新任务实例,并触发after-touchafter-update事件。

场景三:改变从属的父级任务关系更新wbs,如3.2.2 -> 2.1或3.2.2 -> 3.2或2.1 -> 3.2.2

  1. 在不计入目标任务的条件下:按目标任务旧wbs查找其祖先任务,冒泡计算祖先任务的正确周期,并记录周期不正确的祖先任务实例和新、旧end,如果该祖先任务有非里程碑子任务,且有beginning/end晚于该祖先任务最晚子任务ends2f/f2f型前置任务关系,则计算从该祖先任务的dependencies中删除对应前置任务wbs后的新dependencies,并记录新、旧dependencies;
  2. 在计入目标任务的条件下:按目标任务新wbs查找其祖先任务,冒泡计算祖先任务的正确周期,并记录周期不正确的祖先任务实例和新、旧end/beginning,如果该祖先任务有非里程碑子任务,且有beginning/end晚于该祖先任务最晚子任务ends2f/f2f前置任务关系,或beginning/end晚于该祖先任务最早子任务beginnings2s/f2s型前置任务关系,则计算该祖先任务dependencies中删除对应前置任务wbs后的新dependencies,如果新的dependencies中包含目标任务或目标任务后代任务的旧wbs,需顺次执行删除计算。如果目标任务或目标任务后代任务的dependencies中有该祖先任务的wbs,则计算目标任务或其后代任务dependencies中删除该祖先任务wbs后的新dependencies。如果前面步骤中记录过对应任务实例的dependencies,则以记录中的新dependencies作为以上删除计算的基础。完成计算后,在记录中新增或合并该任务实例及新、旧dependencies;
  3. 在计入目标任务的条件下:按照目标任务旧wbs查找其后代任务,计算所有任务的新wbs,并记录下所有任务实例和新、旧wbs,如果目标任务存在于前面步骤的记录中,则合并记录项;
  4. 在不计入目标任务的条件下:按目标任务旧wbs查找其后方兄弟任务,递减计算并记录兄弟任务和兄弟任务后代任务的实例及新、旧wbs,如果兄弟任务或其后代任务存在于前面步骤的记录中,则合并记录项;
  5. 在计入目标任务的条件下:按照目标任务新wbs查找其新的后方兄弟任务,递增计算并记录兄弟任务和兄弟任务后代任务的实例及新、旧wbs,如果存在与前面步骤中相同的任务实例,则使用记录中的新wbs作为计算基准,覆盖原记录中相同任务实例的新、旧wbs;
  6. 查找所有dependencies中含有记录中旧wbs的任务,按照记录中对应的新wbs计算查找到的任务的新dependencies,如果该任务实例在前面步骤中记录过dependencies,则使用记录中的对应新dependencies作为计算基准,并记录下所有任务实例和新、旧dependencies,如果存在与之前步骤中相同的任务实例,则合并记录项;
  7. 按记录项依次触发before-update事件,如任一事件被阻止,则取消整个更新事务;反之,按照记录项依次更新任务实例,并触发after-touchafter-update事件。

根据以上程序执行过程的梳理,核心方法需至少实现三个:

  • propagateAncestors:计算祖先周期,已实现。
  • calcDependencies:计算前置依赖,已实现。
  • collectUniqueResource:搜集事务记录,需要支持同任务实例的记录项合并、wbs覆盖更新、dependencies合并更新。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.