<%@ WebHandler Language="C#" Class="Kernel" %> using System; using System.Collections.Generic; using System.Web; using System.Data; using System.Web.SessionState; using System.Text; using eMIS; public class Kernel : IHttpHandler , IRequiresSessionState { public void ProcessRequest (HttpContext context) { if (context.Session["userid"]==null) context.Response.End(); DataManager dm = new DataManager(); try { dm.Operator.BeginTrans(); string nodeId = context.Request.QueryString["nid"].ToString(); string recordId = context.Request.QueryString["rid"].ToString(); string flowId = context.Request.QueryString["fid"].ToString(); string currUserId = context.Session["userid"].ToString(); string currUserCnName = context.Session["usercnname"].ToString(); string yj = context.Request.QueryString["yj"].ToString(); string result = context.Request.QueryString["jg"].ToString(); string rwbz = yj; string menuId=""; string sql,newId,toUserId; string endorseId = context.Request.QueryString["eid"].ToString(); //删除工作任务,工作提示 //兼容性考虑,获取hqid object obj = null; //dm.ExecuteScalar("select hqid from XT_LCSL_HQ where qhid=" + endorseId); string hqid = endorseId;// obj.ToString(); obj = dm.ExecuteScalar("select id from XT_LCRW where LCID='" + flowId + "' and JDID='" + nodeId + "' and JLID='" + recordId + "' and JSRID='" + currUserId + "' and qtid='" + hqid + "'"); if(obj==null) throw new Exception("该工作已经处理!"); dm.ExecuteNonQuery("delete XT_LCRW where qtid='" + hqid + "'"); obj = dm.ExecuteScalar("select id from com_xtcdb where lcid='" + flowId + "' and jdid='" + nodeId + "'"); if(obj!=null) { menuId = obj.ToString(); } InstanceManager im = new InstanceManager(context,dm,menuId); im.FlowNode = flowId+"."+nodeId; im.Flow.Init(recordId); string state = im.Flow.GetFlowState(recordId); //修改加签状态 DataTable dt = dm.Operator.ExecuteTable("select * from XT_LCSL_HQ where hqid=" + endorseId); string id = dt.Rows[0]["hqid"].ToString(); string cx = dt.Rows[0]["cx"].ToString(); string nt = dt.Rows[0]["nt"].ToString(); string ticks = dt.Rows[0]["pc"].ToString(); string fromUserId = dt.Rows[0]["ryid2"].ToString();//加签发起人id string bdlrid = dt.Rows[0]["ryid3"].ToString(); string dl = "1"; if (bdlrid=="" || bdlrid == fromUserId) { bdlrid = fromUserId; dl = "0"; } string s; dt.Rows[0]["zt"] = 1; dm.Operator.Save(dt,"XT_LCSL_HQ","hqid"); //流程日志 string fromUserCnName = UserManager.GetUserCnName(dm,fromUserId); string toUserCnName; rwbz = rwbz.Replace("\r\n", " "); rwbz = rwbz.Replace("'", "''"); string url,message; string action; string title; if (GetCurrentIscompleted(dm, ticks, cx)) { //当前序号完成 string nextIndex = GetNextIndex(dm, ticks, cx); if (nextIndex == "") { //全部执行完成,增加发起人工作任务 newId = dm.GetNewID(); action = (nt == "1" ? "加签" : "转发"); if (nt == "1") { sql = "insert into XT_LCRW (ID,CDID,LCID,JDID,JLID,JSSJ,JSRID,FSRID,LX,CXMC,dl,bdlrid,bz,jsr,fsr,jdms,fl,SYSTEM_ID) values ("; sql += newId + ",null," + flowId + "," + nodeId + "," + recordId + ",getdate()," + fromUserId + "," + currUserId + ",'发送','" + im.Flow.FlowInstance.Description + "',"+dl+"," + bdlrid + ",'" + rwbz + "','" + fromUserCnName + "','" + currUserCnName + "','" + action + "返回','"+action+"返回','"+DataManager.GetSystemID()+"')"; dm.ExecuteNonQuery(sql); title = action + "完成(" + im.Flow.FlowInstance.Description + ")"; im.Messaging.EmailSend(title, im.Flow.GetTaskEmailContent(title, newId, fromUserId), fromUserId); } //state = im.Flow.UpdateNodeState(state, nodeId, "A"); //不修改流程状态 //修改流程实例表状态 //im.Flow.FlowInstance.StateValue = state; //im.Flow.FlowInstance.StateDescription = "已加签"; //im.Flow.FlowInstanceSave(); //修改记录状态 //im.Flow.RecordStateSave(recordId, state, "已加签", "加签"); //im.Flow.SaveApprovalOpinion("发送", recordId, currUserId, nodeId, nodeId, fromUserId, yj, result, nt, im.Flow.GetNodeProperty(nodeId, "JDMC") + "加签", "0", "0"); if(nt=="1") { im.Flow.EndorseSendMessage("加签(" + im.Flow.FlowInstance.Description + ")", recordId, fromUserId, newId); } else { url = "/Common6/Code/ObjectDisplayPage.ashx?rid=" + recordId + "&oid=" + im.Flow.BusinessObjectID + "&" + DateTime.Now.Ticks.ToString(); message = "【转发审批返回】:" + currUserCnName + result + "" + im.Flow.FlowInstance.Description + "" + yj; im.Messaging.MisSend(im.Flow.FlowInstance.Description + " 转发评审", message, fromUserId, "系统", "0", url); //im.Flow.SaveApprovalOpinion("发送", recordId, currUserId, nodeId, null, fromUserId, yj, result, nt, null, "0", "0"); } WriteLog(dm, im, yj, recordId, currUserId, fromUserCnName, fromUserId); } else { //没有执行完,给下个序号发工作任务 sql = "select ryid,hqid,nt from XT_LCSL_HQ where nt="+nt+" and pc='" + ticks + "' and jlid='" + recordId + "' and jd1='" + nodeId + "' and zt=0 and cx=" + nextIndex; DataTable table = dm.Operator.ExecuteTable(sql); int c = table.Rows.Count; DataRow r = null; for (int idx = 0; idx < c; idx++) { r = table.Rows[idx]; toUserId = r[0].ToString(); toUserCnName = (dm.Operator.ExecuteScalar("select xingming from com_yhb where id=" + toUserId)).ToString(); nt = r[2].ToString(); action = (nt == "1" ? "加签" : "转发"); newId = dm.GetNewID(); sql = "insert into XT_LCRW (ID,CDID,LCID,JDID,JLID,JSSJ,JSRID,FSRID,LX,CXMC,dl,bdlrid,bz,jdms,qtid,tb,fl,SYSTEM_ID) values ("; sql += newId + ",null," + flowId + "," + nodeId + "," + recordId + ",getdate()," + toUserId + "," + currUserId + ",'加签','" + action + "(" + im.Flow.FlowInstance.Description + ")',0," + toUserId + ",'" + rwbz + "','" + im.Flow.GetNodeProperty(nodeId, "JDMC") + "','" + r["hqid"].ToString() + "'," + (nt == "1" ? "1" : "0") + ",'"+action+"','"+DataManager.GetSystemID()+"')"; dm.ExecuteNonQuery(sql); if(nt=="1") { im.Flow.EndorseSendMessage("" + action + "(" + im.Flow.FlowInstance.Description + ")", recordId, toUserId, newId); } else { url = "/Common6/Code/ObjectDisplayPage.ashx?rid=" + recordId + "&oid=" + im.Flow.BusinessObjectID + "&" + DateTime.Now.Ticks.ToString(); message = "【转发审批返回】:" + currUserCnName + result + "" + im.Flow.FlowInstance.Description + "" + yj; im.Messaging.MisSend(im.Flow.FlowInstance.Description + " 转发评审", message, fromUserId, "系统", "0", url); //im.Flow.SaveApprovalOpinion("发送", recordId, currUserId, nodeId, null, fromUserId, yj, result, nt, null, "0", "0"); } title = action + "(" + im.Flow.FlowInstance.Description + ")"; im.Messaging.EmailSend(title, im.Flow.GetTaskEmailContent(title, newId, toUserId), toUserId); WriteLog(dm, im, yj, recordId, currUserId, toUserCnName, toUserId); im.Flow.AddNewApproval(recordId,currUserId,nodeId,toUserId,nt,action + "(" + im.Flow.FlowInstance.Description + ")",im.Flow.GetApprovalParentID(hqid),r[1].ToString()); //im.Flow.SaveApprovalOpinion("发送", recordId, currUserId, im.Flow.CurrentNodeID, im.Flow.CurrentNodeID, toUserId, yj, result, nt, im.Flow.GetNodeProperty(im.Flow.CurrentNodeID, "JDMC") + action, "0", "0"); // im.Flow.SaveApprovalOpinion("发送", recordId, currUserId, im.Flow.CurrentNodeID, im.Flow.CurrentNodeID, null, yj, "加签"); } } } else { WriteLog(dm, im, yj, recordId, currUserId, fromUserCnName, fromUserId); } im.Flow.UpdateApprovalOpinion(hqid,yj, result); im.Flow.XT_TASKS_DONE_SAVE(); if (context.Session["loginguid"] != null) im.Flow.DeleteTaskValidate(context.Session["loginguid"].ToString()); dm.Operator.CommitTrans(); if (context.Request.QueryString["m"] == null) { context.Response.Write(""); } else { context.Response.Write("ok"); } } catch (Exception e) { dm.Operator.RollbackTrans(); string ret = e.Message; if (context.Session["superman"].ToString() == "1") ret += "\r\n" + e.StackTrace; if (context.Request.QueryString["m"] == null) context.Response.Write(""); else context.Response.Write(ret.Replace("\r\n", " ")); } finally { dm.Operator.CloseConnection(); } } //public bool GetCurrentIscompleted(DataManager dm, string recordId, string nodeId, string currendIndex) //{ // bool b = false; // string sql = "select count(*) from XT_LCSL_HQ where lx=1 and jlid='" + recordId + "' and jd1='" + nodeId + "' and zt=0 and cx=" + currendIndex; // object obj = dm.Operator.ExecuteScalar(sql); // if (obj != null) // { // b = ((int)obj == 0); // } // return b; //} public bool GetCurrentIscompleted(DataManager dm, string ticks, string currendIndex) { bool b = false; string sql = "select count(*) from XT_LCSL_HQ where pc='" + ticks + "' and zt=0 and cx=" + currendIndex; object obj = dm.Operator.ExecuteScalar(sql); if (obj != null) { b = ((int)obj == 0); } return b; } public string GetNextIndex(DataManager dm, string ticks, string currendIndex) { string nextIndex = ""; string sql = "select min(cx) from XT_LCSL_HQ where pc='" + ticks + "' and zt=0 and cx>" + currendIndex; object obj = dm.Operator.ExecuteScalar(sql); if (obj != null) { nextIndex = obj.ToString(); } return nextIndex; } //public string GetNextIndex(DataManager dm, string recordId,string nodeId,string currendIndex) //{ // string nextIndex = ""; // string sql = "select min(cx) from XT_LCSL_HQ where lx=1 and jlid='" + recordId + "' and jd1='" + nodeId + "' and zt=0 and cx>" + currendIndex; // object obj = dm.Operator.ExecuteScalar(sql); // if (obj != null) // { // nextIndex = obj.ToString(); // } // return nextIndex; //} public void WriteLog(DataManager dm, InstanceManager instance, string remark, string recordId, string fromUserId,string toUserCnName,string toUserId) { DataTable dt = dm.ExecuteTable("select * from XT_LCRZ where 1=2"); DataRow row = dt.NewRow(); row["ID"] = instance.GetNewID(); row["CXMC"] = instance.Flow.FlowInstanceDescription; object obj = dm.ExecuteScalar("select max(czsj) from XT_LCRZ where jlid=" + recordId + " and jdid_d=" + instance.Flow.CurrentNodeID); if (obj!=null) row["jssj"] = obj.ToString(); row["LCID"] = instance.Flow.FlowID; row["JDID"] = instance.Flow.CurrentNodeID; row["JDMC"] = "加签"; //instance.Flow.GetNodeProperty(instance.Flow.CurrentNodeID, "JDMC"); row["JLID"] = recordId; row["LX"] = "加签"; row["CZSJ"] = DateTime.Now; row["CZRID"] = fromUserId; row["BZ"] = remark; row["JDID_D"] = instance.Flow.CurrentNodeID; row["ZT"] = 1; row["JSR"] = toUserCnName; dt.Rows.Add(row); instance.SystemDbOperator.Append(dt, "XT_LCRZ"); int i = instance.SystemDbOperator.ExecuteNonQuery("update xt_lcsl_czr set lasttime=getdate() where jlid=" + recordId + " and ryid=" + fromUserId); if (i == 0) instance.SystemDbOperator.ExecuteNonQuery("insert into xt_lcsl_czr (jlid,ryid,lasttime) values (" + recordId + "," + fromUserId + ",getdate())"); } public bool IsReusable { get { return false; } } }