<%@ 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(); System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); string operateTimeLog = ""; 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 endorseId = context.Request.QueryString["eid"].ToString(); string currUserId = context.Session["userid"].ToString(); string currUserCnName = context.Session["usercnname"].ToString(); string yj = context.Request.QueryString["yj"].ToString(); string toUserId = context.Request.QueryString["uid"].ToString(); string endorseType = context.Request.QueryString["et"].ToString(); string rwbz = yj; string menuId=""; string sql; string newpc = DateTime.Now.Ticks.ToString(); string action; object 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); operateTimeLog += "01:" + sw.ElapsedMilliseconds.ToString() + "; "; //修改加签状态 DataTable dt = dm.Operator.ExecuteTable("select id,pc,hqid from XT_LCSL_HQ where id=" + endorseId); string id = dt.Rows[0]["id"].ToString(); string hqid = dt.Rows[0]["hqid"].ToString(); string async; if (endorseType == "1") { //删除工作任务,工作提示 dm.ExecuteNonQuery("delete XT_LCRW where qtid='" + hqid + "'"); async = "1"; action = "加签"; } else { async = "0"; action = "转发"; } operateTimeLog += "02:" + sw.ElapsedMilliseconds.ToString() + "; "; //增加提交的会签记录 string newhqid1 = dm.GetNewID(); dm.ExecuteNonQuery("insert into XT_LCSL_HQ (hqid,jlid,jd1,jd2,ryid,zt,cx,ryid2,bz,fromid,lx,nt,pc) values ('" + newhqid1 + "','" + recordId + "','" + nodeId + "','" + nodeId + "','" + toUserId + "',0,0,'" + currUserId + "',null," + id + ",2," + endorseType + ",'" + newpc + "')"); //增加待办的会签记录 yj = yj.Replace("\r\n", " "); yj = yj.Replace("'", "''"); string newhqid = dm.GetNewID(); dm.ExecuteNonQuery("insert into XT_LCSL_HQ (hqid,jlid,jd1,jd2,ryid,zt,cx,ryid2,bz,fromid,lx,nt,pc) values ('" + newhqid + "','" + recordId + "','" + nodeId + "','" + nodeId + "','" + toUserId + "',0,0,'" + currUserId + "','" + yj + "'," + newhqid1 + ",1," + endorseType + ",'" + newpc + "')"); //流程日志 string fromUserCnName = currUserCnName; string toUserCnName = (string)(dm.Operator.ExecuteScalar("select xingming from com_yhb where id ='" + toUserId + "'")); //工作任务 operateTimeLog += "03:" + sw.ElapsedMilliseconds.ToString() + "; "; string newId = dm.GetNewID(); sql = "insert into XT_LCRW (ID,CDID,LCID,JDID,JLID,JSSJ,JSRID,FSRID,LX,CXMC,dl,bdlrid,bz,jdms,fsr,jsr,qtid,tb) values ("; sql += newId + ",null," + flowId + "," + nodeId + "," + recordId + ",getdate()," + toUserId + "," + currUserId + ",'加签','"+action+"(" + im.Flow.FlowInstance.Description + ")',0," + toUserId + ",'" + rwbz + "','" + im.Flow.GetNodeProperty(nodeId, "JDMC") + "','" + currUserCnName + "','" + toUserCnName + "','" + newhqid + "'," + async + ")"; dm.ExecuteNonQuery(sql); im.Flow.EndorseSendMessage(action+ "(" + im.Flow.FlowInstance.Description + ")", recordId, toUserId, newId); operateTimeLog += "04:" + sw.ElapsedMilliseconds.ToString() + "; "; string title = action + "(" + im.Flow.FlowInstance.Description + ")"; im.Messaging.EmailSend(title, im.Flow.GetTaskEmailContent(title, newId, toUserId), toUserId); operateTimeLog += "05:" + sw.ElapsedMilliseconds.ToString() + "; "; WriteLog(dm, im, yj, recordId, currUserId, toUserCnName, toUserId); operateTimeLog += "06:" + sw.ElapsedMilliseconds.ToString() + "; "; string newApprovalId = im.Flow.AddNewApprovalOpinion(recordId, currUserId, nodeId, toUserId, yj, "提交" + action, endorseType, im.Flow.GetNodeProperty(nodeId, "JDMC") + action, im.Flow.GetApprovalID(newhqid1), newhqid1); im.Flow.AddNewApproval(recordId, currUserId, nodeId, toUserId, endorseType, im.Flow.GetNodeProperty(nodeId, "JDMC") + action, im.Flow.GetApprovalID(newhqid), newhqid); operateTimeLog += "07:" + sw.ElapsedMilliseconds.ToString() + "; "; if (context.Session["loginguid"] != null) im.Flow.DeleteTaskValidate(context.Session["loginguid"].ToString()); operateTimeLog += "08:" + sw.ElapsedMilliseconds.ToString() + "; "; dm.Operator.CommitTrans(); operateTimeLog += "09:" + sw.ElapsedMilliseconds.ToString() + "; "; if (sw.ElapsedMilliseconds > 2000) { dm.Operator.ExecuteNonQuery("insert into XT_ERRORLOG (id,funcode,xml) values ('" + dm.GetNewID() + "','4','" + operateTimeLog + "')"); } context.Response.Write(""); } catch (Exception e) { dm.Operator.RollbackTrans(); context.Response.Write(""); } 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 nt=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 string GetNextIndex(DataManager dm, string recordId,string nodeId,string currendIndex) { string nextIndex = ""; string sql = "select min(cx) from XT_LCSL_HQ where nt=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"); } public bool IsReusable { get { return false; } } }