using System;
using System.Collections.Generic;
using BP.Sys;
using BP.Web;
using BP.Port;
using BP.DA;
using BP.WF.Template;
namespace BP.WF
{
public class ShiftWork
{
///
/// 工作移交
///
/// 工作ID
/// 要移交的人
/// 移交信息
/// 执行结果
public static string Node_Shift_ToEmp(Int64 workID, string toEmp, string msg)
{
if (toEmp.Equals(WebUser.No) == true)
throw new Exception("err@您不能移交给您自己。");
GenerWorkFlow gwf = new GenerWorkFlow(workID);
if (gwf.WFSta == WFSta.Complete)
throw new Exception("err@流程已经完成,您不能执行移交了。");
int i = 0;
//人员.
Emp emp = new Emp(toEmp);
Node nd = new Node(gwf.FK_Node);
Work work = nd.HisWork;
work.OID = workID;
if (nd.TodolistModel == TodolistModel.Order
|| nd.TodolistModel == TodolistModel.Teamup
|| nd.TodolistModel == TodolistModel.TeamupGroupLeader)
{
/*如果是队列模式,或者是协作模式, 就直接把自己的gwl 信息更新到被移交人身上. */
//检查被移交人是否在当前的待办列表里否?
GenerWorkerList gwl = new GenerWorkerList();
i = gwl.Retrieve(GenerWorkerListAttr.FK_Emp, emp.UserID,
GenerWorkerListAttr.FK_Node, nd.NodeID,
GenerWorkerListAttr.WorkID, workID);
if (i == 1)
return "err@移交失败,您所移交的人员(" + emp.UserID + " " + emp.Name + ")已经在代办列表里.";
//把自己的待办更新到被移交人身上.
string sql = "UPDATE WF_GenerWorkerlist SET IsRead=0, FK_Emp='" + emp.UserID + "', FK_EmpText='" + emp.Name + "' WHERE FK_Emp='" + WebUser.No + "' AND FK_Node=" + gwf.FK_Node + " AND WorkID=" + workID;
int myNum = DBAccess.RunSQL(sql);
#region 判断是否是,admin的移交.
if (myNum == 0)
{
//说明移交人是 admin,执行的.
GenerWorkerLists mygwls = new GenerWorkerLists();
mygwls.Retrieve(GenerWorkerListAttr.WorkID, workID,
GenerWorkerListAttr.FK_Node, gwf.FK_Node);
if (mygwls.Count == 0)
throw new Exception("err@系统错误,没有找到待办.");
//把他们都删除掉.
mygwls.Delete(GenerWorkerListAttr.WorkID, workID,
GenerWorkerListAttr.FK_Node, gwf.FK_Node);
//取出来第1个,把人员信息改变掉.
foreach (GenerWorkerList item in mygwls)
{
item.FK_Emp = WebUser.No;
item.FK_EmpText = WebUser.Name;
item.FK_Dept = WebUser.FK_Dept;
item.DeptName = WebUser.FK_DeptName;
item.IsRead = false;
item.Insert(); //执行插入.
break;
}
}
#endregion 判断是否是,admin的移交.
//记录日志.
Glo.AddToTrack(ActionType.Shift, nd.FK_Flow, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmp, emp.Name, msg, null);
//移交后事件
string atPara1 = "@SendToEmpIDs=" + emp.UserID;
string info = "@" + ExecEvent.DoNode(EventListNode.ShitAfter, nd, work, null, atPara1);
//处理移交后发送的消息事件,发送消息.
PushMsgs pms1 = new PushMsgs();
pms1.Retrieve(PushMsgAttr.FK_Node, nd.NodeID, PushMsgAttr.FK_Event, EventListNode.ShitAfter);
foreach (PushMsg pm in pms1)
pm.DoSendMessage(nd, nd.HisWork, null, null, null, emp.UserID);
gwf.WFState = WFState.Shift;
gwf.TodoEmpsNum = 1;
gwf.TodoEmps = WebUser.No + "," + WebUser.Name + ";";
gwf.Update();
return "移交成功." + info;
}
//非协作模式.
GenerWorkerLists gwls = new GenerWorkerLists();
gwls.Retrieve(GenerWorkerListAttr.FK_Node, gwf.FK_Node, GenerWorkerListAttr.WorkID, gwf.WorkID);
gwls.Delete(GenerWorkerListAttr.FK_Node, gwf.FK_Node, GenerWorkerListAttr.WorkID, gwf.WorkID);
foreach (GenerWorkerList item in gwls)
{
item.FK_Emp = emp.UserID;
item.FK_EmpText = emp.Name;
item.IsEnable = true;
item.Insert();
break;
}
gwf.WFState = WFState.Shift;
gwf.TodoEmpsNum = 1;
gwf.TodoEmps = emp.UserID + "," + emp.Name + ";";
gwf.Update();
//记录日志.
Glo.AddToTrack(ActionType.Shift, nd.FK_Flow, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmp, emp.Name, msg, null);
string inf1o = "@工作移交成功。@您已经成功的把工作移交给:" + emp.UserID + " , " + emp.Name;
//移交后事件
string atPara = "@SendToEmpIDs=" + emp.UserID;
WorkNode wn = new WorkNode(work, nd);
inf1o += "@" + ExecEvent.DoNode(EventListNode.ShitAfter, wn, null, atPara);
return inf1o;
}
///
/// 工作移交
///
/// 工作ID
/// 要移交的多个人,比如:zhangsan,lisi
///
/// 执行信息.err@说明执行错误.
public static string Node_Shift_ToEmps(Int64 workID, string toEmps, string msg)
{
if (toEmps.Equals(WebUser.No) == true)
throw new Exception("err@您不能移交给您自己。");
GenerWorkFlow gwf = new GenerWorkFlow(workID);
if (gwf.WFSta == WFSta.Complete)
throw new Exception("err@流程已经完成,您不能执行移交了。");
//定义变量,查询出来当前的人员列表.
GenerWorkerLists gwls = new GenerWorkerLists();
gwls.Retrieve(GenerWorkerListAttr.FK_Node, gwf.FK_Node,
GenerWorkerListAttr.WorkID, workID);
//定义变量.
GenerWorkerList gwl = null;
int i = 0;
//人员.
Node nd = new Node(gwf.FK_Node);
Work work = nd.HisWork;
work.OID = workID;
string info = null;
string[] strs = toEmps.Split(',');
string empNames = "";
foreach (string toEmp in strs)
{
Emp emp = new Emp(toEmp);
if (nd.TodolistModel == TodolistModel.Order
|| nd.TodolistModel == TodolistModel.Teamup
|| nd.TodolistModel == TodolistModel.TeamupGroupLeader)
{
/*如果是队列模式,或者是协作模式, 就直接把自己的gwl 信息更新到被移交人身上. */
//检查被移交人是否在当前的待办列表里否?
i = gwl.Retrieve(GenerWorkerListAttr.FK_Emp, emp.UserID,
GenerWorkerListAttr.FK_Node, nd.NodeID,
GenerWorkerListAttr.WorkID, workID);
if (i == 1)
{
info += "err@移交失败,您所移交的人员(" + emp.UserID + " " + emp.Name + ")已经在代办列表里.";
continue;
}
if (i == 0)
return "";
//写入移交数据.
gwl = (GenerWorkerList)gwls[0];
gwl.FK_Emp = emp.UserID;
gwl.FK_EmpText = emp.Name;
gwl.IsPassInt = 0;
gwl.Insert();
//记录日志.
Glo.AddToTrack(ActionType.Shift, nd.FK_Flow, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmp, emp.Name, msg, null);
//移交后事件
string atPara1 = "@SendToEmpIDs=" + emp.UserID;
info += "@" + ExecEvent.DoNode(EventListNode.ShitAfter, nd, work, null, atPara1);
//处理移交后发送的消息事件,发送消息.
PushMsgs pms1 = new PushMsgs();
pms1.Retrieve(PushMsgAttr.FK_Node, nd.NodeID, PushMsgAttr.FK_Event, EventListNode.ShitAfter);
foreach (PushMsg pm in pms1)
pm.DoSendMessage(nd, nd.HisWork, null, null, null, emp.UserID);
info += "info@成功移交给:" + emp.UserID + "," + emp.Name;
continue;
}
//非协作模式.
//写入移交数据.
gwl = (GenerWorkerList)gwls[0];
gwl.FK_Emp = emp.UserID;
gwl.FK_EmpText = emp.Name;
gwl.IsPassInt = 0;
gwl.Insert();
}
//重新查询.
gwls.Retrieve(GenerWorkerListAttr.FK_Node, gwf.FK_Node,
GenerWorkerListAttr.WorkID, workID);
//工作处理人员.
string todoEmps = "";
foreach (GenerWorkerList mygwl in gwls)
{
todoEmps += mygwl.FK_Emp + "," + mygwl.FK_EmpText + ";";
}
//更新主表信息.
gwf.WFState = WFState.Shift;
gwf.TodoEmpsNum = gwls.Count;
gwf.TodoEmps = todoEmps; //处理人员.
gwf.Update();
//删除自己的待办.
DBAccess.RunSQL("DELETE FROM WF_GenerWorkerList WHERE WorkID="+gwf.WorkID+" AND FK_Node="+gwf.FK_Node+" AND FK_Emp='"+WebUser.No+"'");
//记录日志.
Glo.AddToTrack(ActionType.Shift, nd.FK_Flow, workID, gwf.FID, nd.NodeID, nd.Name,
WebUser.No, WebUser.Name, nd.NodeID, nd.Name, toEmps, "移交给多个人", msg, null);
//移交后事件.
string atPara = "@SendToEmpIDs=" + toEmps;
WorkNode wn = new WorkNode(work, nd);
info += "@" + ExecEvent.DoNode(EventListNode.ShitAfter, wn, null, atPara);
return info;
}
///
/// 撤消移交
///
///
public static string DoUnShift(Int64 workid)
{
GenerWorkFlow gwf = new GenerWorkFlow(workid);
GenerWorkerLists wls = new GenerWorkerLists();
wls.Retrieve(GenerWorkerListAttr.WorkID, workid, GenerWorkerListAttr.FK_Node, gwf.FK_Node);
if (wls.Count == 0)
return "移交失败没有当前的工作。";
Node nd = new Node(gwf.FK_Node);
Work wk1 = nd.HisWork;
wk1.OID = workid;
wk1.Retrieve();
// 记录日志.
WorkNode wn = new WorkNode(wk1, nd);
wn.AddToTrack(ActionType.UnShift, WebUser.No, WebUser.Name, nd.NodeID, nd.Name, "撤消移交");
//删除撤销信息.
DBAccess.RunSQL("DELETE FROM WF_ShiftWork WHERE WorkID=" + workid + " AND FK_Node=" + gwf.FK_Node);
//更新流程主表字段信息
gwf.WFState = WFState.Runing;
gwf.Update();
if (wls.Count == 1)
{
GenerWorkerList wl = (GenerWorkerList)wls[0];
wl.FK_Emp = WebUser.No;
wl.FK_EmpText = WebUser.Name;
wl.IsEnable = true;
wl.IsPass = false;
wl.Update();
return "@撤消移交成功。";
}
GenerWorkerList mywl = null;
foreach (GenerWorkerList wl in wls)
{
if (wl.FK_Emp == WebUser.No)
{
wl.FK_Emp = WebUser.No;
wl.FK_EmpText = WebUser.Name;
wl.IsEnable = true;
wl.IsPass = false;
wl.Update();
mywl = wl;
}
else
{
wl.Delete();
}
}
if (mywl != null)
return "@撤消移交成功";
GenerWorkerList wk = (GenerWorkerList)wls[0];
GenerWorkerList wkNew = new GenerWorkerList();
wkNew.Copy(wk);
wkNew.FK_Emp = WebUser.No;
wkNew.FK_EmpText = WebUser.Name;
wkNew.IsEnable = true;
wkNew.IsPass = false;
wkNew.Insert();
return "@撤消移交成功";
}
}
}