123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- /// <summary>
- /// 任务卡实例
- /// </summary>
- public class TaskCardVo : ItemVo
- {
- /// <summary>
- /// 任务状态(1完成/0未完成)
- /// </summary>
- public Enum_TaskCardStateType state;
- /// <summary>
- /// 当前任务步骤数据
- /// </summary>
- public List<Ins_TaskStepVo> curSteps;
- /// <summary>
- /// 排序后的任务步骤数据
- /// </summary>
- /// <returns></returns>
- public List<Ins_TaskStepVo> GetOrderedSteps()
- {
- var li = curSteps.OrderBy(st => st.progress()).ToList();
- if (this.state >= Enum_TaskCardStateType.finish)
- {
- li.Reverse();
- }
- return li;
- }
- public sm_item_taskcard mo => sm_item_taskcard.GetMoById(int.Parse(this.typeId));
- /// <summary>
- /// 找到任务卡的终点步骤
- /// </summary>
- /// <returns></returns>
- public List<sm_task_step>FinialSteps()=>mo.tasksteps.Split(',').ToList()
- .ConvertAll(s=>sm_task_step.GetMoByID(int.Parse(s)).FinalStep());
-
- /// <summary>
- /// 当前任务步骤索引
- /// </summary>
- [Obsolete("已过时,curSteps变为并行的,所以这个字段已无意义.-gwang 2020.12.25", true)]
- public int curStepIndex = 0;
-
- [Obsolete("前往数据迁移到任务步骤上了. gwang-2020年12月22日10:49", true)]
- public GotoParaser Goto => new GotoParaser(mo.goto_module);
- }
- #region 内部类
- /// <summary>
- /// 跳转类型参数拆分
- /// </summary>
- public class GotoParaser
- {
- private string _goto_str;
- private Enum_GotoType _goto;
- private List<string> _paras;
- public GotoParaser(string goto_module_string)
- {
- this._goto_str = goto_module_string;
- var arr = _goto_str.Split(':');
- if (arr.Length > 0)
- {
- if (arr[0] != "")
- {
- _goto = (Enum_GotoType)Convert.ToInt32(arr[0]);
- }
- else
- {
- _goto = (Enum_GotoType)0;
- }
- }
- else
- { // 如果字符串是空的设置默认值
- _goto = (Enum_GotoType)0;
- }
- _paras = new List<string>();
- if (arr.Length > 1)
- {
- _paras.AddRange(arr[1].Split(',').ToList());//.ConvertAll<int>(s => Convert.ToInt32(s)));
- }
- }
- public Enum_GotoType GotoType => _goto;
- public List<string> Params => _paras;
- }
- #endregion
- /// <summary>
- /// 任务步骤实例数据
- /// </summary>
- public class Ins_TaskStepVo
- {
- /// <summary>
- /// 模板数据ID
- /// </summary>
- public int typeId = 0;
- /// <summary>
- /// 当前计数
- /// </summary>
- public int cur = 0;
- /// <summary>
- /// start/finish act已执行(0:startAct未执行,1:StartAct已执行且finishAct未执行,2:finishAct已执行)
- /// </summary>
- public int actState = 0;
- /// <summary>
- /// start/finish act 的执行状态
- /// </summary>
- /// <returns></returns>
- public EActionState ActionState() => (EActionState)actState;
- /// <summary>
- /// 是否需要执行StartAction
- /// </summary>
- /// <returns></returns>
- public bool ShouldDoStartAction() => actState < 1 && mo().StartAction.cmd != 0;
- /// <summary>
- /// 是否需要执行FinishAction
- /// </summary>
- /// <returns></returns>
- public bool ShouldDoFinishAction() => actState <= 1 && isFinish() && mo().FinishAction.cmd != 0;
- /// <summary>
- /// 快速访问模板数据
- /// </summary>
- /// <returns></returns>
- public sm_task_step mo() => sm_task_step.GetMoByID(this.typeId);
- /// <summary>
- /// 计数最大值
- /// </summary>
- /// <returns></returns>
- public int max()
- {
- return mo().num;
- }
- /// <summary>
- /// 将条件参数拆分成字符串数组
- /// </summary>
- /// <returns></returns>
- private string[] paras() => mo().paras.Split(',');
- /// <summary>
- /// 当前进度
- /// </summary>
- /// <returns></returns>
- public float progress() => (float)cur / max();
- /// <summary>
- /// 是否完成
- /// </summary>
- /// <returns></returns>
- public bool isFinish() => cur >= max();
- /// <summary>
- /// 任务进度提示字符串
- /// </summary>
- /// <returns></returns>
- public string ProgressInfo() => $"{mo().des} ({cur}/{max()}).";
- /// <summary>
- /// 前往数据
- /// </summary>
- public GotoParaser Goto => new GotoParaser(mo().goto_module);
- /// <summary>
- ///
- /// </summary>
- public enum EActionState
- {
- /// <summary>
- /// startAction未完成
- /// </summary>
- StartActionUndone = 0,
- /// <summary>
- /// StartAction已经完成,并且finishAction未完成
- /// </summary>
- StartActionOkAndFinishActionUndone = 1,
- /// <summary>
- /// finishAction也已经完成
- /// </summary>
- FinishActionOk = 2
- }
- }
|