%@ 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;
}
}
}