using BP.CCOA; using BP.DA; using BP.En; using BP.Port; using BP.Web; using BP.WF; using NPOI.POIFS.FileSystem; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.Remoting; using System.Text; using System.Threading.Tasks; namespace BP.TA { public class TaskAPI { #region 菜单列表. /// /// 发起 /// /// public static string DB_Start() { Templates ens = new Templates(); return BP.Tools.Json.ToJson(ens.ToDataTableField()); } /// /// 待办 /// /// public static string DB_Todolist() { Tasks tas = new Tasks(); QueryObject qo = new QueryObject(tas); qo.addLeftBracket(); qo.AddWhere(TaskAttr.EmpNo, WebUser.No); qo.addAnd(); qo.AddWhereIn(TaskAttr.TaskSta, "(1,4,6)"); // 待办的, 审核中的,需要重做的. qo.addRightBracket(); qo.addOr(); qo.addLeftBracket(); qo.AddWhere(TaskAttr.SenderNo, WebUser.No); qo.addAnd(); qo.AddWhereIn(TaskAttr.TaskSta, "(2,5)"); // 审核中, 退回. qo.addRightBracket(); qo.addOrderBy("ADT"); qo.DoQuery(); return BP.Tools.Json.ToJson(tas.ToDataTableField()); } /// /// 在途 /// /// public static string DB_Running() { return ""; } #endregion 菜单列表. #region 项目 /// /// 创建工作 /// /// 模板编号 /// public static string Prj_CreateNo(string templateNo) { Template template = new Template(templateNo); //该模板类型下是否有这个项目. Project prj = new Project(); int i = prj.Retrieve(ProjectAttr.PrjSta, 0, "TemplateNo", template.No, ProjectAttr.StarterNo, WebUser.No); if (i == 1) return prj.No; prj.Name = template.Name; prj.PrjDesc = template.PrjDesc; //任务描述. prj.StarterNo = WebUser.No; prj.StarterName = WebUser.Name; prj.PrjSta = 0; //空白状态. prj.No = BP.DA.DBAccess.GenerOID("PrjNo").ToString().PadLeft(5, '0'); prj.RDT = DataType.CurrentDateTime; prj.TemplateNo = template.No; prj.TemplateName = template.Name; prj.Insert(); if (template.TaskModel.Equals("Daily") == true) { prj.PrjSta = 2; //运行状态. prj.Update(); return prj.No; } if (template.TaskModel.Equals("Section") == true) { //获得节点. Nodes nds = new Nodes(); nds.Retrieve(NodeAttr.TemplateNo, templateNo, "Idx"); //为节点的人员创建工作. foreach (Node nd in nds) { Task ta = new Task(); ta.NodeNo = nd.No; ta.NodeName = nd.Name; ta.Title = nd.Name; ta.TaskSta = 0; ta.ItIsRead = 0; //发送人= 任务的下达人. ta.SenderNo = BP.Web.WebUser.No; ta.SenderName = BP.Web.WebUser.Name; //生成负责人. string fzrEmpNo = nd.GenerFZR(); if (DataType.IsNullOrEmpty(fzrEmpNo) == false) { Emp fzr = new Emp(); ta.EmpNo = fzr.No; ta.EmpName = fzr.Name; } //Todo: 生成协助人.暂不实现. //赋值项目信息. ta.PrjNo = prj.No; ta.PrjName = prj.Name; ta.WCL = 0; ta.PRI = 0; ta.TaskSta = 0; ta.StarterNo = BP.Web.WebUser.No; ta.StarterName = BP.Web.WebUser.Name; ta.InsertAsOID(DBAccess.GenerOID("Task")); //ta.EmpNo = item. } return prj.No; } return "err@没有判断的类型:" + template.TaskModel; } public static string Prj_Start(string prjNo) { Project prj = new Project(prjNo); if (prj.PrjSta == 0 || prj.PrjSta == 1) { } else { //throw new Exception("项目已经启动了,您不能在执行启动。"); return "err@项目已经启动了,您不能在执行启动。"; } prj.PrjSta = 2; //设置启动状态. prj.RDT = DataType.CurrentDateTime; // 获得所有的任务. Tasks tas = new Tasks(); tas.Retrieve(TaskAttr.PrjNo, prjNo); // 工作人员. WorkerList wl = new WorkerList(); wl.PrjNo = prj.No; wl.PrjName = prj.Name; wl.RDT = DataType.CurrentDateTime; // 列表. string msg = "任务分配给:"; foreach (Task ta in tas) { ta.PrjSta = prj.PrjSta; ta.PrjName = prj.Name; ta.PRI = prj.PRI; ta.TaskSta = TaskSta.Todolist; //设置启动. ta.RDT = DataType.CurrentDateTime; ta.ADT = DataType.CurrentDateTime; ta.Update(); //开始创建任务. wl.setMyPK(ta.TaskID + "_" + ta.EmpNo); wl.EmpNo = ta.EmpNo; //工作人员. wl.EmpName = ta.EmpName; wl.PrjNo = ta.PrjNo; //项目信息. wl.PrjName = prj.Name; wl.SenderNo = WebUser.No; //发送人. wl.SenderName = WebUser.Name; wl.RDT = DataType.CurrentDateTime; //记录日期 wl.ADT = DataType.CurrentDateTime; //活动日期. wl.Insert(); //插入任务. msg += "节点:" + ta.NodeName + " 人员:" + ta.EmpName; TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "Alte", "工作分配", "任务[" + ta.Title + "]分配给[" + ta.EmpName + "]", WebUser.No, WebUser.Name); } prj.Msg = msg; //更新消息. prj.NumComplete = 0; prj.NumTasks = tas.Count; prj.Update(); BP.TA.TaskAPI.Port_WriteTrack(prjNo, 0, "Start", "项目启动", msg, WebUser.No, WebUser.Name); return "启动成功:" + msg; } /// /// 设置完成 /// /// 项目编号 /// 执行结果 public static string Prj_Complete(string prjNo) { DBAccess.RunSQL("UPDATE TA_Project SET PrjSta=" + PrjSta.Complete + ",WCL=100 WHERE No='" + prjNo + "'"); DBAccess.RunSQL("UPDATE TA_Task SET TaskSta=" + TaskSta.WorkOver + " WHERE PrjNo='" + prjNo + "'"); BP.TA.TaskAPI.Port_WriteTrack(prjNo, 0, "Complete", "完成", "项目完成.", WebUser.No, WebUser.Name); return "项目完成."; } /// /// 物理删除 /// /// 项目编号 /// 执行结果 public static string Prj_DeleteByRel(string prjNo) { DBAccess.RunSQL("DELETE FROM TA_Project WHERE No='" + prjNo + "'"); DBAccess.RunSQL("DELETE FROM TA_Task WHERE PrjNo='" + prjNo + "'"); DBAccess.RunSQL("DELETE FROM TA_Track WHERE PrjNo='" + prjNo + "'"); return "删除成功."; } /// /// 删除标记 /// /// /// public static string Prj_DeleteByFlag(string prjNo) { DBAccess.RunSQL("UPDATE TA_Project SET PrjSta=7 WHERE No='" + prjNo + "'"); DBAccess.RunSQL("UPDATE TA_Task SET TaskSta=7 WHERE PrjNo='" + prjNo + "'"); BP.TA.TaskAPI.Port_WriteTrack(prjNo, 0, "DeleteByFlag", "逻辑删除", "逻辑删除.", WebUser.No, WebUser.Name); return "删除成功."; } /// /// 写日志 /// /// 模板编号 /// 工作ID /// 活动类型 /// 活动名称 /// 执行内容 public static void Port_WriteTrack(string prjNo, int workid, string actionType, string actionTypeName, string docs, string empNo, string empName, int wcl = 0, int useHH = 0, int useMM = 0) { Track ta = new Track(); ta.setMyPK(DBAccess.GenerGUID()); ta.TaskID = workid; ta.PrjNo = prjNo; if (empNo == null) empNo = WebUser.No; if (empName == null) empName = WebUser.Name; //当事人. ta.EmpNo = empNo; ta.EmpName = empName; ta.ActionType = actionType; ta.ActionName = actionTypeName; ta.Docs = docs; ta.RecNo = WebUser.No; ta.RecName = WebUser.Name; ta.RDT = DataType.CurrentDateTime; ta.UseHH = useHH; ta.UseMM = useMM; ta.Insert(); } #endregion 项目 #region 任务 /// /// 任务审核 /// /// 任务ID /// 审核结果0=不通过,1=通过. /// 审核信息 /// public static string Task_CheckSubmit(Int64 taskID, int checkResult, string docs) { Task ta = new Task(taskID); if (ta.TaskSta == TaskSta.SubmitChecking) return "err@当前不是待审核状态,您不能执行该操作."; //不通过. if (checkResult == 0) { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "TaskSubmit", "任务审核", "不通过,意见:" + docs, WebUser.No, WebUser.Name); ta.TaskSta = TaskSta.ReTodolist; ta.WCL = 50; //完成率设置100%. } else { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "TaskSubmit", "任务审核", "通过,意见:" + docs, WebUser.No, WebUser.Name); ta.TaskSta = TaskSta.ReTodolist; } ta.NowMsg = docs; ta.ADT = DataType.CurrentDateTime; //活动日期. ta.Update(); return "审核提交成功."; } public static string Task_CheckReturn(Int64 taskID, int checkResult, string docs, string shiftEmpNo) { Task ta = new Task(taskID); if (ta.TaskSta != TaskSta.ReturnWork) return "err@当前不是退回审核状态,您不能执行该操作."; //不通过. if (checkResult == 0) { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "CheckReturn", "任务退回审核", "不通过,意见:" + docs, WebUser.No, WebUser.Name); ta.TaskSta = TaskSta.ReTodolist; // ta.WCL = 0; //完成率设置100%. } //同意. if (checkResult == 1) { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "CheckReturn", "任务退回审核", "通过,意见:" + docs, WebUser.No, WebUser.Name); ta.TaskSta = TaskSta.WorkOver; ta.WCL = 0; //完成率设置未 0 . } //移交给其他人. if (checkResult == 2) return "err@该功能还没有完成."; ta.NowMsg = docs; ta.ADT = DataType.CurrentDateTime; //活动日期. ta.Update(); return "退回审核提交成功."; } /// /// 任务退回 /// /// /// 退回原因 /// 退回结果 public static string Task_Return(Int64 taskID, string docs) { Task ta = new Task(taskID); if (ta.TaskSta == TaskSta.ReturnWork) return "err@当前已经是退回,不能重复执行."; ta.WCL = 0; //完成率设置 0 . ta.TaskSta = TaskSta.ReturnWork; //让其检查. ta.ADT = DataType.CurrentDateTime; //活动日期. ta.Update(); TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "ReturnWork", "退回", "退回原因:" + docs, WebUser.No, WebUser.Name); return "已经退回给[" + ta.SenderName + "],请等待他批准。"; } /// /// 移交给指定的人 /// /// /// /// /// public static string Task_Shift(Int64 taskID, string toEmpNo, string docs) { Emp emp = new Emp(toEmpNo); Task ta = new Task(taskID); ta.EmpNo = toEmpNo; ta.EmpName = emp.Name; ta.TaskSta = TaskSta.Todolist; ta.WCL = 0; //完成率设置 0 . ta.TaskSta = TaskSta.Todolist; //设置待办.. ta.ADT = DataType.CurrentDateTime; //活动日期. ta.NowMsg = "移交原因:[" + docs + "]移交人:[" + WebUser.Name + "]移交日期:[" + ta.ADT + "]"; ta.Update(); TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "Shift", "移交", ta.NowMsg, WebUser.No, WebUser.Name); return "移交[" + emp.Name + "]"; } public static string Task_HuiBao(Int64 taskID, string docs1, string docs2, int wcl, int hh, int mm) { Task ta = new Task(taskID); ta.WCL = 0; //完成率设置 0 . if (wcl == 100) { ta.TaskSta = TaskSta.SubmitChecking; //提交状态,让其检查. ta.NowMsg = docs1; } else { ta.TaskSta = TaskSta.Todolist; ta.NowMsg = "工作内容:[" + docs1 + "]计划:[" + docs2 + "]"; } ta.ADT = DataType.CurrentDateTime; //活动日期. ta.Update(); if (wcl == 100) { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "TaskSubmit", "任务提交", ta.NowMsg, WebUser.No, WebUser.Name, wcl, hh, mm); return "汇报给[" + ta.SenderName + "]"; } else { TaskAPI.Port_WriteTrack(ta.PrjNo, ta.OID, "HuiBao", "汇报工作", ta.NowMsg, WebUser.No, WebUser.Name, wcl, hh, mm); return "任务提交给:[" + ta.SenderName + "]审核."; } } #endregion 任务 } }