public void ProcessRequest(HttpContext context) { //判断客户端请求是否为post方法 if (context.Request.HttpMethod.ToUpper() != "POST") { context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}"); return; } string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain"; string ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/"; //数据库链接 connectionString = ToolsClass.GetConfig("DataOnLine"); //sqlServer da = new BankDbHelper.SqlHelper("SqlServer", connectionString); //获取请求json using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { CsJson = reader.ReadToEnd(); } if (CsJson == "") { context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}"); return; } CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ","); string JsonData = CsJson; //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret AppWyy = ToolsClass.GetConfig("AppWyy"); ScList = AppWyy.Split('$'); agentId = ScList[0].ToString(); corpId = ScList[1].ToString(); appKey = ScList[2].ToString(); appSecret = ScList[3].ToString(); isWrite = ToolsClass.GetConfig("isWrite"); ddUrl = ToolsClass.GetConfig("ddUrl"); if (isWrite == "1") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n入参:" + CsJson + "\r\n"); } string ddMessageId = string.Empty; OtherCostSQModel otherCostSQModel = new OtherCostSQModel(); otherCostSQModel = (OtherCostSQModel)JsonConvert.DeserializeObject(CsJson, typeof(OtherCostSQModel)); string path = context.Request.Path.Replace("Approval/OtherCostSQ.ashx", "othercostsq"); //验证请求sign string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32); ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + otherCostSQModel.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path); if (sign != otherCostSQModel.Sign) { context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}"); return; } string NodeInfo = JsonConvert.SerializeObject(otherCostSQModel.NodeInfo).Replace(",{\"AType\":\"\",\"PersonId\":\"select\",\"PersonName\":\"请选择\"}", ""); try { #region 获取access_token url = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret; FhJson = ToolsClass.ApiFun("GET", url, ""); TokenClass tokenClass = new TokenClass(); tokenClass = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass)); access_token = tokenClass.access_token; errcode = tokenClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}"); return; } #endregion 获取access_token billTypeNo = "100520005055"; billNoPro = "QTFY"; ProName = "EXPEREFERdd"; typeName = "其他费用"; typeUrl = ddUrl + "/qtfyui/shenpi/index.html?billno="; string fqrall = otherCostSQModel.DDOperatorId; string jnumber = otherCostSQModel.ApplPers; string sqr = otherCostSQModel.OperatorName; if (otherCostSQModel.IsInsteadApply == "1") { fqrall = fqrall + "," + otherCostSQModel.InsteadOperatorGuid; sqr = "【代】" + otherCostSQModel.InsteadOperatorName; jnumber = da.GetValue($"select top 1 employeecode from flowemployee where ddid = '{otherCostSQModel.InsteadOperatorGuid}'").ToString(); } else { otherCostSQModel.OperatorGuid = da.GetValue($"select top 1 guid from flowemployee where ddid = '{fqrall}' and orgcode ='{otherCostSQModel.DeptCode}'").ToString(); } #region 获取申请流水号 Sql = "select dbo.GetBillNo('" + billTypeNo + "','" + jnumber + "',getdate())"; obj = da.GetValue(Sql); billno = obj.ToString(); if (billno == "1") { billno = billNoPro + jnumber + DateTime.Now.ToString("yyyyMMdd") + "0001"; Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "' and BillDate<>convert(varchar(20),GETDATE(),120)"; } else { Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "'"; } obj = da.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新其他费用单号出错(DD9002)\",\"errcode\":1}"); return; } string guid = string.Empty; #endregion 获取申请流水号 #region 获取用户guid Sql = $"select top 1 a.GUID,b.TotalAmount,b.OffDay from operators a left join (select sum(TotalAmount) TotalAmount, sum(OffDay) OffDay from ExpetravDetail where billno = '[申请号]' group by billno) b on 1 = 1 where a.code = '[工号]'"; Sql = Sql.Replace("[申请号]", otherCostSQModel.BillNo).Replace("[工号]", jnumber); obj = da.GetDataTable(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}"); return; } dt = obj as DataTable; operatorGuid = dt.Rows[0]["GUID"].ToString(); #endregion 获取用户guid if (otherCostSQModel.NodeInfo.Length == 0) { //自动同意 //更新单据消息id与返回内容 #region 保存信息 sqlList.Clear(); sqlTou.Clear(); sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,OperatorGuid,FlowEmployeeGuid,ProcessNodeInfo,ApplPers,DDOperatorId,JsonData,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl,Notes) Values('") .Append(billno).Append("','") .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','") .Append(otherCostSQModel.FeeType).Append("','") .Append(operatorGuid).Append("','") .Append(otherCostSQModel.OperatorGuid).Append("','") .Append(NodeInfo).Append("','") .Append(jnumber).Append("','") .Append(otherCostSQModel.DDOperatorId).Append("','") .Append(JsonData).Append("','") .Append(otherCostSQModel.BillCount).Append("','") .Append(otherCostSQModel.FeeAmount).Append("','") .Append(otherCostSQModel.DeptName).Append("','") .Append(otherCostSQModel.DeptCode).Append("','") .Append(otherCostSQModel.NoCountFee).Append("','") .Append(otherCostSQModel.BearOrga).Append("','") .Append(otherCostSQModel.AppendixUrl).Append("','") .Append(JsonConvert.SerializeObject(otherCostSQModel.Urls)).Append("','") .Append(otherCostSQModel.IsInsteadApply).Append("','") .Append(otherCostSQModel.InsteadOperatorGuid).Append("','") .Append(otherCostSQModel.PictureUrl).Append("','") .Append(otherCostSQModel.Notes) .Append("')"); sqlList.Add(sqlTou.ToString()); for (int i = 0; i < otherCostSQModel.OtherCostSQModels.Count; i++) { guid = Guid.NewGuid().ToString(); Sql = string.Empty; Sql = $"insert into ExpeOtherDetail(BillNo,GUID,BillCount,BillAmount,FeeTypeDetail) values('{billno}','{guid}','{otherCostSQModel.OtherCostSQModels[i].Count}','{otherCostSQModel.OtherCostSQModels[i].Amount}','{otherCostSQModel.OtherCostSQModels[i].FType}')"; sqlList.Add(Sql); ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作ExpeotherDetail表:" + Sql + "\r\n"); } if (isWrite == "1") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作Expeother表:" + sqlTou.ToString() + "\r\n"); } obj = da.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}"); return; } #endregion 保存信息 #region 调用提交存储过程 keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, operatorGuid, ProName); if (keyValuePairs["ReturnValue"].ToString() != "0") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); sqlList.Clear(); Sql = "delete from EXPEOTHER where BillNo='" + billno + "'"; sqlList.Add(Sql); obj = da.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}"); return; } context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}"); return; } #endregion 调用提交存储过程 Sql = "update EXPEOTHER set IsSp='1',auditingdate=getdate() where billno='" + billno + "'"; ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作EXPEOTHER表:" + Sql.ToString() + "\r\n"); obj = da.ExecSql(Sql); Sql = ""; #region 发送工作通知消息 urlcsjson = typeUrl + "" + $"{billno}&BillClassId={otherCostSQModel.BillClassId}&showmenu=false"; urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + otherCostSQModel.FeeAmount + "¥ 发票: " + otherCostSQModel.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + otherCostSQModel.Notes + "\"}}}"; FhJson = ToolsClass.ApiFun("POST", url, CsJson); var xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); ddMessageId = xxtzClass2.task_id.ToString(); #endregion 发送工作通知消息 context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}"); return; } //获取第一级流程的人员信息 NodeInfoDetailPerson[] NodeInfodetailPeople = otherCostSQModel.NodeInfo[0].NodeInfoDetails[0].Persons; //从入参中得到审批人及抄送人的信息 //指定人员的id列表 StringBuilder piddept = new StringBuilder(); string sql = ""; for (int i = 0; i < NodeInfodetailPeople.Length; i++) { if (i > 0) { piddept.Append(","); } //判断传空 if (NodeInfodetailPeople[i].PersonId != "select" && NodeInfodetailPeople[i].PersonId != "") { sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'"; piddept.Append(da.GetValue(sql).ToString()); } } #region 保存信息 sqlList.Clear(); sqlTou.Clear(); sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,OperatorGuid,FlowEmployeeGuid,JsonData,ProcessNodeInfo,ApplPers,DDOperatorId,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl,Notes) Values('") .Append(billno).Append("','") .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','") .Append(otherCostSQModel.FeeType).Append("','") .Append(operatorGuid).Append("','") .Append(otherCostSQModel.OperatorGuid).Append("','") .Append(JsonData).Append("','") .Append(NodeInfo).Append("','") .Append(jnumber).Append("','") .Append(otherCostSQModel.DDOperatorId).Append("','") .Append(otherCostSQModel.BillCount).Append("','") .Append(otherCostSQModel.FeeAmount).Append("','") .Append(otherCostSQModel.DeptName).Append("','") .Append(otherCostSQModel.DeptCode).Append("','") .Append(otherCostSQModel.NoCountFee).Append("','") .Append(otherCostSQModel.BearOrga).Append("','") .Append(otherCostSQModel.AppendixUrl).Append("','") .Append(JsonConvert.SerializeObject(otherCostSQModel.Urls)).Append("','") .Append(otherCostSQModel.IsInsteadApply).Append("','") .Append(otherCostSQModel.InsteadOperatorGuid).Append("','") .Append(otherCostSQModel.PictureUrl).Append("','") .Append(otherCostSQModel.Notes) .Append("')"); sqlList.Add(sqlTou.ToString()); for (int i = 0; i < otherCostSQModel.OtherCostSQModels.Count; i++) { guid = Guid.NewGuid().ToString(); Sql = string.Empty; Sql = $"insert into ExpeOtherDetail(BillNo,GUID,BillCount,BillAmount,FeeTypeDetail) values('{billno}','{guid}','{otherCostSQModel.OtherCostSQModels[i].Count}','{otherCostSQModel.OtherCostSQModels[i].Amount}','{otherCostSQModel.OtherCostSQModels[i].FType}')"; sqlList.Add(Sql); ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作ExpeotherDetail表:" + Sql + "\r\n"); } if (isWrite == "1") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作Expeother表:" + sqlTou.ToString() + "\r\n"); } obj = da.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}"); return; } #endregion 保存信息 #region 调用提交存储过程 keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, operatorGuid, ProName); if (keyValuePairs["ReturnValue"].ToString() != "0") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); sqlList.Clear(); Sql = "delete from EXPEOTHER where BillNo='" + billno + "'"; sqlList.Add(Sql); obj = da.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}"); return; } context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}"); return; } #endregion 调用提交存储过程 #region 发送工作通知消息 urlcsjson = typeUrl + "" + $"{billno}&BillClassId={otherCostSQModel.BillClassId}&showmenu=false"; urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + otherCostSQModel.FeeAmount + "¥ 发票: " + otherCostSQModel.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + otherCostSQModel.Notes + "\"}}}"; FhJson = ToolsClass.ApiFun("POST", url, CsJson); XXTZ xxtzClass = new XXTZ(); xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); ddMessageId = xxtzClass.task_id.ToString(); errcode = xxtzClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的报销申请,消息通知失败(DD9004)\",\"errcode\":1}"); return; } #endregion 发送工作通知消息 //保存流程信息到comments表 sqlList.Clear(); for (int i = 0; i < NodeInfodetailPeople.Length; i++) { sqlTou.Clear(); if (NodeInfodetailPeople[i].PersonId != "select") { sqlTou.Append("insert into ApprovalComments(CommentsId,BillClassId,BillNo,ApprovalID,ApprovalName,ApprovalComments,ApprovalStatus,DDMessageId,AType,ApprovalDate,IsAndOr,IsLeader,PersonType,NodeNumber) values('").Append(Guid.NewGuid().ToString()).Append("','") .Append(otherCostSQModel.BillClassId).Append("','") .Append(billno).Append("','") .Append(NodeInfodetailPeople[i].PersonId).Append("','") .Append(NodeInfodetailPeople[i].PersonName).Append("','")//内部数据库用户GUID .Append("").Append("','") .Append("0").Append("','") .Append(ddMessageId).Append("','") .Append(NodeInfodetailPeople[i].AType).Append("','") .Append(DateTime.Now).Append("','") .Append(otherCostSQModel.NodeInfo[0].NodeInfoDetails[0].IsAndOr).Append("','") .Append(otherCostSQModel.NodeInfo[0].NodeInfoDetails[0].IsLeader).Append("','") .Append(otherCostSQModel.NodeInfo[0].NodeInfoType).Append("','") .Append("2").Append("')"); sqlList.Add(sqlTou.ToString()); if (isWrite == "1") { ToolsClass.TxtLog("其他费用报销申请日志", "\r\n操作ApprovalComments表:" + sqlTou.ToString() + "\r\n"); } } } //执行SQL语句Insert obj = da.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"保存申请信息节点信息出错(DD6002)\",\"errcode\":1}"); return; } path = context.Request.Path.Replace("Approval/OtherCostSQ.ashx", "othercostsp"); //验证请求sign sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32); //如果下个是抄送人 TaskFactory taskFactory = new TaskFactory(); if (otherCostSQModel.NodeInfo[0].NodeInfoType == "3") { //根据数据开启多个线程调用审批接口 taskFactory.StartNew(() => { for (int i = 0; i < NodeInfodetailPeople.Length; i++) { HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "othercostsp"); webrequest.Method = "post"; new Action(() => { fasongqingqiu ad = new fasongqingqiu { BillNo = billno, DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(), IsSp = "3", DDOperatorId = otherCostSQModel.InsteadOperatorGuid, OperatorName = otherCostSQModel.InsteadOperatorName, BillClassId = otherCostSQModel.BillClassId, FeeType = otherCostSQModel.FeeType, Sign = sign }; byte[] postdatabyte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad)); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); using (var httpWebResponse = webrequest.GetResponse()) using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream())) { String ret = responseStream.ReadToEnd(); } }).Invoke(); } }); } if (otherCostSQModel.NodeInfo[0].NodeInfoType == "2") { DataRow[] dataRows = null; sql = ""; sql = $"select ApprovalComments,ApprovalName,ApprovalID from ApprovalComments where BillNo ='{billno}' and BillClassId='{otherCostSQModel.BillClassId}' and ApprovalStatus ='1'"; DataTable logComments = da.GetDataTable(sql); //如果下个环节中的人在之前已同意,自动调用此接口同意完成审批 taskFactory.StartNew(() => { for (int i = 0; i < NodeInfodetailPeople.Length; i++) { dataRows = logComments.Select("ApprovalID ='" + NodeInfodetailPeople[i].PersonId + "'"); //如果之前已经同意或者是发起人 if (dataRows.Length != 0 || da.GetValue($"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'").ToString() == otherCostSQModel.InsteadOperatorGuid) { HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "othercostsp"); webrequest.Method = "post"; new Action(() => { fasongqingqiu ad = new fasongqingqiu { BillNo = billno, DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(), IsSp = "1", DDOperatorId = otherCostSQModel.InsteadOperatorGuid, OperatorName = otherCostSQModel.InsteadOperatorName, BillClassId = otherCostSQModel.BillClassId, AuditingIdea = "同意", FeeType = otherCostSQModel.FeeType, Sign = sign }; byte[] postdatabyte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad)); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); using (var httpWebResponse = webrequest.GetResponse()) using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream())) { String ret = responseStream.ReadToEnd(); } }).Invoke(); } } }); } //如果是撤回重新提交的,删除之前的单子 if (!string.IsNullOrEmpty(otherCostSQModel.OldBillNo)) { da.ExecSql($"delete ExpeOtherDetail where billno = '{otherCostSQModel.OldBillNo}'"); da.ExecSql($"delete EXPEOTHER where billno = '{otherCostSQModel.OldBillNo}'"); da.ExecSql($"delete approvalcomments where billno = '{otherCostSQModel.OldBillNo}'"); da.Dispose(); ToolsClass.TxtLog("其他费用报销申请日志", "\r\n删除旧单据:" + $"delete ExpeOtherDetail where billno = '{otherCostSQModel.OldBillNo}'" + $"delete EXPEOTHER where billno = '{otherCostSQModel.OldBillNo}'" + "\r\n"); } context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}"); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); context.Response.End(); } }
private string ddUrl = ""; //钉钉前端地址 public void ProcessRequest(HttpContext context) { //判断客户端请求是否为post方法 if (context.Request.HttpMethod.ToUpper() != "POST") { context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}"); return; } string FileUrl = ToolsClass.GetConfig("FileUrl"); GetMulParams getMulParams = new GetMulParams(); string ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/"; //数据库链接 connectionString = ToolsClass.GetConfig("DataOnLine"); SqlHelper = new BankDbHelper.SqlHelper("SqlServer", connectionString); //获取请求json using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { CsJson = reader.ReadToEnd(); } string result = string.Empty; string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain"; if (CsJson == "") { context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}"); return; } CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ","); //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret AppWyy = ToolsClass.GetConfig("AppWyy"); ScList = AppWyy.Split('$'); agentId = ScList[0].ToString(); corpId = ScList[1].ToString(); appKey = ScList[2].ToString(); appSecret = ScList[3].ToString(); isWrite = ToolsClass.GetConfig("isWrite"); ddUrl = ToolsClass.GetConfig("ddUrl"); if (isWrite == "1") { ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n申请审批入参:" + CsJson + "\r\n"); } string IsLocalHost = "0"; //前端传入数据 TravelApprovalMul traApprClass = new TravelApprovalMul(); traApprClass = (TravelApprovalMul)JsonConvert.DeserializeObject(CsJson, typeof(TravelApprovalMul)); IsLocalHost = traApprClass.IsLocalHost == null ? "0" : traApprClass.IsLocalHost; string path1 = context.Request.Path.Replace("Approval/MedConfigAuditing.ashx", "medconfigauditing"); //验证请求sign string sign = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32); ToolsClass.TxtLog("生成的sign", "生成的" + "sign1:" + sign + "传入的sign" + traApprClass.Sign + "\r\n 后台字符串:" + signUrl + path1 + "Romens1/DingDing2" + path1); if (sign != traApprClass.Sign) { context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}"); return; } try { if (traApprClass.IsSp == "1") { audiIdea = "同意"; } else if (traApprClass.IsSp == "2") { audiIdea = "驳回"; } else { audiIdea = "抄送"; } billTypeNo = "2018121301"; ProName = "MedConfigAuditing"; typeUrl = ddUrl + "/yibao/shenpi/index.html?billno="; //获取当前单号的发起人和待报销人 string fqrall = traApprClass.DDOperatorId; var fqr = SqlHelper.GetDataTable($"select OperatorGuid,REFERGUID,IsSp from MedConfig where BillNo = '{traApprClass.BillNo}'"); if (traApprClass.DDOperatorId != traApprClass.ReferDDID) { fqrall = fqrall + "," + traApprClass.ReferDDID; } #region 获取access_token url = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret; FhJson = ToolsClass.ApiFun("GET", url, ""); TokenClass tokenClass = new TokenClass(); tokenClass = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass)); access_token = tokenClass.access_token; errcode = tokenClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}"); return; } #endregion 获取access_token #region 获取用户详情 url = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + traApprClass.DDAuditingId; FhJson = ToolsClass.ApiFun("GET", url, ""); GetUserXq userXqClass = new GetUserXq(); userXqClass = (GetUserXq)JsonConvert.DeserializeObject(FhJson, typeof(GetUserXq)); errcode = userXqClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取审批人详细信息报错(DD6003)\",\"errcode\":1}"); return; } audiName = userXqClass.name; #endregion 获取用户详情 #region 获取用户guid Sql = $"select Guid from operators where code = '[工号]'"; Sql = Sql.Replace("[申请号]", traApprClass.BillNo).Replace("[工号]", userXqClass.jobnumber); obj = SqlHelper.GetDataTable(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}"); return; } dt = obj as DataTable; AuditingGuid = dt.Rows[0]["Guid"].ToString(); #endregion 获取用户guid if (SqlHelper.GetValue($"select issp from medconfig where billno ='{traApprClass.BillNo}'").ToString() != "0") { context.Response.Write("{\"errmsg\":\"当前单据已经审核,不允许重复审核!\",\"errcode\":1}"); return; } XXTZ xxtzClass2 = new XXTZ(); if (audiIdea == "同意" || audiIdea == "抄送") { bool processIsEnd = true; // processIsEnd = CommonHelper.SaveComments(traApprClass, userXqClass, nodeNumber, context, ddUrl, "医保及三方授权审批日志", out result); //可以给下个人发送消息 if (processIsEnd) //如果当前流程节点走完 { billno = traApprClass.BillNo; keyValuePairs = CommonHelper.sqlPro(SqlHelper.GetValue($"select guid from MedConfig where billno = '{billno}'").ToString(), billTypeNo, AuditingGuid, ProName); if (keyValuePairs["ReturnValue"].ToString() != "0") { ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); Sql = "update MedConfig set IsSp='0' where billno='" + traApprClass.BillNo + "'"; obj = SqlHelper.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新审批状态出错(DD6006)\",\"errcode\":1}"); return; } context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}"); return; } Sql = $"update MedConfig set IsSp='1',AuditingReason = '{traApprClass.AuditingIdea}' where billno='{traApprClass.BillNo}'"; FhJson = ToolsClass.ApiFun("POST", ymadk + "SetSignFile", "{\"BillNo\":\"" + traApprClass.BillNo + "\"}").Replace(@"\", "/"); FileLocationJson jgobj = (FileLocationJson)JsonConvert.DeserializeObject(FhJson, typeof(FileLocationJson)); ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n操作MedConfig表:" + Sql.ToString() + "\r\n"); obj = SqlHelper.ExecSql(Sql); urlcsjson = typeUrl + traApprClass.BillNo + $"&BillClassId={traApprClass.BillClassId}&showmenu=false"; urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); DDMsgModelLink link = new DDMsgModelLink { messageUrl = $"dingtalk://dingtalkclient/page/link?url={ urlcsjson}&pc_slide=true", picUrl = "@", text = $"\r\n单号为[{billno}]的单据已同意", title = $"已{audiIdea }【{ audiName }】" }; DDMsgModelLinkMsg dDMsg = new DDMsgModelLinkMsg { link = link, msgtype = "link" }; string ddmsgModel = JsonConvert.SerializeObject(new DDMsgModel { agent_id = agentId, userid_list = fqrall, msg = dDMsg }); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, ddmsgModel); if (isWrite == "1") { ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n审批发送通知Json:" + ddmsgModel + "\r\n返回json:\r\n" + FhJson); } xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); errcode = xxtzClass2.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的申请消息通知失败(DD6004)\",\"errcode\":1}"); return; } string sqlm = CommonHelper.CreateRandomCode(5); string nowdownurl = FileUrl + jgobj.fileurl; string xzdzqd = ddUrl + "/yibao/download/index.html"; Sql = $"update MedConfig set DownUrlInfo = '{sqlm},{nowdownurl}' where billno='{traApprClass.BillNo}'"; SqlHelper.ExecSql(Sql); DDMsgModelText dDMsgModelText = new DDMsgModelText { agent_id = agentId, userid_list = fqrall, msg = new DDMsgModelTextMsg { msgtype = "text", text = new text { content = "授权文件下载地址,请点击下载:\r\n" + xzdzqd + "\r\n提取验证码: " + sqlm } } }; ddmsgModel = JsonConvert.SerializeObject(dDMsgModelText); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, ddmsgModel); } else { ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); return; } //if (IsLocalHost == "0") //{ // result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper)); // ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); // context.Response.Write(result); //} //else //{ // result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); // ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); // context.Response.Write(result); //} result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); return; } if (audiIdea == "驳回") { Sql = $"update MedConfig set IsSp='2',auditingdate=getdate(),AuditingGuid = '{AuditingGuid}',AuditingReason = '{traApprClass.AuditingIdea}' where billno='{traApprClass.BillNo }'"; obj = SqlHelper.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}"); return; } ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n操作MedConfig表:" + Sql); //给当前节点以前的人及申请人发送通知,通知已驳回 urlcsjson = typeUrl + traApprClass.BillNo + $"&BillClassId={traApprClass.BillClassId}&showmenu=false"; urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); DDMsgModelLink link = new DDMsgModelLink { messageUrl = $"dingtalk://dingtalkclient/page/link?url={urlcsjson}&pc_slide=true", picUrl = "@", text = $"\r\n单号为【{traApprClass.BillNo}】的单据没有审核通过。\r\n 拒绝原因:{traApprClass.AuditingIdea}。", title = $"已{audiIdea }【{ audiName }】" }; DDMsgModelLinkMsg dDMsg = new DDMsgModelLinkMsg { link = link, msgtype = "link" }; string ddmsgModel = JsonConvert.SerializeObject(new DDMsgModel { agent_id = agentId, userid_list = fqrall, msg = dDMsg }); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, ddmsgModel); if (isWrite == "1") { ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n发送通知出入参Json:" + ddmsgModel); } xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); errcode = xxtzClass2.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的医保及三方授权消息通知失败(DD6004)\",\"errcode\":1}"); return; } } result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); //if (IsLocalHost == "0") //{ // result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper)); // ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); // context.Response.Write(result); //} //else //{ // result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); // ToolsClass.TxtLog("医保及三方授权审批日志", "\r\n返回前端信息:" + result + "\r\n"); // context.Response.Write(result); //} return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); context.Response.End(); } }
private StringBuilder FhJson = new StringBuilder();//返回JSON public void ProcessRequest(HttpContext context) { //判断客户端请求是否为post方法 if (context.Request.HttpMethod.ToUpper() != "POST") { context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}"); return; } //数据库链接 connectionString = ToolsClass.GetConfig("DataOnLine"); string leaderName = ToolsClass.GetConfig("leaderName"); //sqlServer da = new BankDbHelper.SqlHelper("SqlServer", connectionString); isWrite = ToolsClass.GetConfig("isWrite"); //获取请求json using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { CsJson = reader.ReadToEnd(); } string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain"; if (CsJson == "") { context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}"); return; } CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ","); DeptAndPeopleInfo dapi = new DeptAndPeopleInfo(); dapi = (DeptAndPeopleInfo)JsonConvert.DeserializeObject(CsJson, typeof(DeptAndPeopleInfo)); string path1 = context.Request.Path.Replace("Approval/TongXunLu.ashx", "dept"); string path2 = context.Request.Path.Replace("Approval/TongXunLu.ashx", "role"); string path3 = context.Request.Path.Replace("Approval/TongXunLu.ashx", "people"); //验证请求sign string sign1 = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32); string sign2 = ToolsClass.md5(signUrl + path2 + "Romens1/DingDing2" + path2, 32); string sign3 = ToolsClass.md5(signUrl + path3 + "Romens1/DingDing2" + path3, 32); ToolsClass.TxtLog("生成的sign", "生成的" + "sign1:" + sign1 + "sign2:" + sign2 + "sign3:" + sign3 + "传入的sign" + dapi.Sign + "\r\n 后台字符串:" + signUrl + path3 + "Romens1/DingDing2" + path3); if (sign1 != dapi.Sign && sign2 != dapi.Sign && sign3 != dapi.Sign) { context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}"); return; } if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n入参" + CsJson + "\r\n"); } #region 增加部门 Type DeptName FatherId if (dapi.Type == "deptadd") { try { sql = $"select count(*) from Organization where ParentGuid ='{dapi.FatherId}'"; int nowcout = int.Parse(da.GetValue(sql).ToString()) + 1; string nowcounts = dapi.FatherId + "-" + nowcout.ToString().PadLeft(2, '0'); sql = ""; sql = $"insert into Organization(Guid,ParentGuid,Code,Name,FinanceCode) values('{nowcounts}','{dapi.FatherId}','{nowcounts}','{dapi.DeptName}','{nowcounts}') "; da.ExecSql(sql); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"Detail\":[{\"OrgCode\":\"" + nowcounts + "\",\"OrgName\":\"" + dapi.DeptName + "\"}]"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n增加部门信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"增加部门信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 增加部门 Type DeptName FatherId #region 增加人员 Type DeptCode EmployeeCode EmployeeName DDId IsLeader if (dapi.Type == "peopleadd") { try { sql = ""; sql = $"insert into flowemployee(Guid,employeecode,employeename,orgcode,ddid,isleader) values('{Guid.NewGuid().ToString()}','{dapi.EmployeeCode}','{dapi.EmployeeName}','{dapi.DeptCode}','{dapi.DDId}','{dapi.IsLeader}') "; da.ExecSql(sql); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n增加人员信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"增加人员信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 增加人员 Type DeptCode EmployeeCode EmployeeName DDId IsLeader #region 查询所有部门 Type if (dapi.Type == "deptSelect") { try { sql = $"select Guid,Name,ParentGuid from Organization where isNull(disable,'0') ='0'"; DataTable depts = da.GetDataTable(sql); List <Organization> Depts = new List <Organization>(); OrgModel orgModel = new OrgModel(); for (int i = 0; i < depts.Rows.Count; i++) { Depts.Add(new Organization { OrgCode = depts.Rows[i]["Guid"].SqlDataBankToString(), OrgName = depts.Rows[i]["Name"].SqlDataBankToString(), ParentGuid = depts.Rows[i]["ParentGuid"].SqlDataBankToString() }); } orgModel.errcode = "0"; orgModel.errmsg = "查询成功"; orgModel.Depts = Depts; string deptResult = JsonConvert.SerializeObject(orgModel); if (isWrite == "1") { ToolsClass.TxtLog("Query dept ", $"\r\n查询部门信息返回:{deptResult}\r\n"); } context.Response.Write(deptResult); return; } catch (Exception ex) { context.Response.Write(JsonConvert.SerializeObject(new CommonModel { errcode = "1", errmsg = "查询部门信息报错" })); return; } } #endregion 查询所有部门 Type #region 增加角色组 Type RoleGroupName Remarks if (dapi.Type == "roleGroupAdd") { try { sql = ""; sql = $"insert into RoleGroup(RoleGroupId,RoleGroupName,Remarks) values('{Guid.NewGuid().ToString()}','{dapi.RoleGroupName}','{dapi.Remarks}')"; da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n增加角色组信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"增加角色组信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 增加角色组 Type RoleGroupName Remarks #region 增加角色 Type RoleName Remarks RoleGroupCode,RoleCode Depts 增加role 增加rolewithorg if (dapi.Type == "roleAdd") { try { sql = ""; string roleid = Guid.NewGuid().ToString(); sql = $"insert into Role(RoleId,RoleName,Remarks,RoleGroupId) values('{roleid}','{dapi.RoleName}','{dapi.Remarks}','{dapi.RoleGroupCode}') "; if (dapi.IsAll == "1") { //批量插入RoleWithOrg表 StringBuilder sqlInsert = new StringBuilder(); DataTable depts = da.GetDataTable("select distinct guid from Organization where isnull(IsForbidden,0) !='1'"); sqlInsert.Append("insert into RoleWithOrg(RoleId,OrgCode) values"); for (int i = 0; i < depts.Rows.Count; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('{roleid}','{depts.Rows[i]["guid"]}')"); } da.ExecSql(sqlInsert.ToString()); da.ExecSql(sql); FhJson.Clear(); } else { //批量插入RoleWithOrg表 StringBuilder sqlInsert = new StringBuilder(); sqlInsert.Append("insert into RoleWithOrg(RoleId,OrgCode) values"); for (int i = 0; i < dapi.Depts.Length; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('{roleid}','{dapi.Depts[i].DeptCode}')"); } da.ExecSql(sqlInsert.ToString()); da.ExecSql(sql); FhJson.Clear(); } FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n增加角色信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"增加角色信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 增加角色 Type RoleName Remarks RoleGroupCode,RoleCode Depts 增加role 增加rolewithorg #region 除角色 Type RoleCode 删除role 删除rolewithorg if (dapi.Type == "roleRemove") { try { sql = ""; sql = $"select count(Roleid) from EmpsRoleId where Roleid='{dapi.RoleCode}' and status ='1'"; string count = da.GetValue(sql).ToString(); if (count != "0") { FhJson.Clear(); FhJson.Append("{\"errmsg\":\"此角色有成员正在使用,不能删除\",\"errcode\":\"1\"}"); context.Response.Write(FhJson.ToString()); return; } else { if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "集团财务") { da.ExecSql($"delete rolewithemp where PersonId = '{dapi.EmployeeCode}' and type= '1'"); } if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "出纳") { da.ExecSql($"delete rolewithemp where PersonId = '{dapi.EmployeeCode}' and type= '2'"); } sql = ""; sql = $"update EmpsRoleId set status ='0' where Roleid ='{dapi.RoleCode}'"; da.ExecSql(sql); da.ExecSql($"update rolewithorg set status ='0' where roleid ='{dapi.RoleCode}'"); da.ExecSql($"update role set status ='0' where roleid ='{dapi.RoleCode}'"); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); } if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n删除角色信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"删除角色信息报错(DD1002):" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 除角色 Type RoleCode 删除role 删除rolewithorg #region 设置角色 Type EmployeeCode RoleCode EmployeeName if (dapi.Type == "SetRole") { try { sql = ""; sql = $"insert into EmpsRoleId(RoleId,employeecode) values('{dapi.RoleCode}','{dapi.EmployeeCode}')"; da.ExecSql(sql); if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}' and status ='1'").ToString() == "集团财务") { da.ExecSql($"insert into rolewithemp(type,PersonId,PersonName) values('1','{dapi.EmployeeCode}','{dapi.EmployeeName}')"); } if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}' and status ='1'").ToString() == "出纳") { da.ExecSql($"insert into rolewithemp(type,PersonId,PersonName) values('2','{dapi.EmployeeCode}','{dapi.EmployeeName}')"); } FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n设置角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"设置角色信息报错(DD1004)\",\"errcode\":1}"); return; } } #endregion 设置角色 Type EmployeeCode RoleCode EmployeeName //{"Type":"RemoveEmpRole","RoleCode":"294efa53-f23f-4c42-8685-358a303c7398","EmployeeCode":"10653","Sign":"5F85B5FDED6FDD8573BD30E2408711E3"} #region 移除角色 Type EmployeeCode RoleCode DeptCode if (dapi.Type == "RemoveEmpRole") { try { sql = ""; sql = $"update EmpsRoleId set status ='0' where employeecode ='{dapi.EmployeeCode}' and roleid ='{dapi.RoleCode}' and status = '1'"; da.ExecSql(sql); if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "集团财务") { da.ExecSql($"delete rolewithemp where PersonId = '{dapi.EmployeeCode}' and type= '1'"); } if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "出纳") { da.ExecSql($"delete rolewithemp where PersonId = '{dapi.EmployeeCode}' and type= '2'"); } FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n移除角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"移除角色信息报错(DD1004)\",\"errcode\":1}"); return; } } #endregion 移除角色 Type EmployeeCode RoleCode DeptCode #region 查询角色组 Type if (dapi.Type == "SelectRoleGroup") { try { sql = "SELECT RoleGroupId,RoleGroupName FROM RoleGroup where status ='1'"; obj = da.GetDataTable(sql); dt = obj as DataTable; FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"count\":").Append(dt.Rows.Count).Append(",\"data\":["); if (dt.Rows.Count > 0) { for (int x = 0; x < dt.Rows.Count; x++) { if (x > 0) { FhJson.Append(","); } FhJson.Append("{"); for (int y = 0; y < dt.Columns.Count; y++) { if (y > 0) { FhJson.Append(","); } FhJson.Append("\"").Append(dt.Columns[y].ColumnName).Append("\":\"").Append(dt.Rows[x][dt.Columns[y].ColumnName].ToString()).Append("\""); } FhJson.Append("}"); } } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"查询角色信息报错(DD1004)\",\"errcode\":1}"); return; } } #endregion 查询角色组 Type #region 给角色增加人员 Type Employees RoleCode if (dapi.Type == "addpeopletorole") { try { //批量插入RoleWithOrg表 StringBuilder sqlInsert = new StringBuilder(); sqlInsert.Append("insert into EmpsRoleId(RoleId,employeecode) values"); for (int i = 0; i < dapi.Employees.Length; i++) { if (i > 0) { sqlInsert.Append(","); } if (da.GetDataTable($"select * from EmpsRoleId where RoleId='{dapi.RoleCode}' and employeecode='{dapi.Employees[i].EmployeeCode}' and status ='1'").Rows.Count > 0) { context.Response.Write("{\"errmsg\":\"当前角色已经存在此人员!\",\"errcode\":1}"); return; } sqlInsert.Append($"('{dapi.RoleCode}','{dapi.Employees[i].EmployeeCode}')"); } da.ExecSql(sqlInsert.ToString()); if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "集团财务") { sqlInsert.Append("insert into rolewithemp(Type,PersonId,PersonName) values"); for (int i = 0; i < dapi.Employees.Length; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('1','{dapi.Employees[i].EmployeeCode}','{dapi.Employees[i].EmployeeName}')"); } da.ExecSql(sqlInsert.ToString()); } if (da.GetValue($"select rolename from role where roleid='{dapi.RoleCode}'").ToString() == "出纳") { sqlInsert.Append("insert into rolewithemp(Type,PersonId,PersonName) values"); for (int i = 0; i < dapi.Employees.Length; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('2','{dapi.Employees[i].EmployeeCode}','{dapi.Employees[i].EmployeeName}')"); } da.ExecSql(sqlInsert.ToString()); } if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n给角色添加人员信息返回:" + FhJson.ToString() + "\r\n"); } FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"给角色添加人员信息报错" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 给角色增加人员 Type Employees RoleCode #region 修改角色组 Type RoleGroupName RoleGroupCode if (dapi.Type == "roleGroupEdit") { try { sql = ""; sql = $"update RoleGroup set RoleGroupName='{dapi.RoleGroupName}' where RoleGroupId ='{dapi.RoleGroupCode}' and status ='1'"; da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n修改角色组信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"修改角色组信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 修改角色组 Type RoleGroupName RoleGroupCode #region 除角色组 RoleGroupCode Type 下面没有角色的才可以删除 if (dapi.Type == "roleGroupRemove") { try { sql = ""; sql = $"select count(RoleGroupId) from role where RoleGroupId='{dapi.RoleGroupCode}' and status ='1'"; string count = da.GetValue(sql).ToString(); if (count != "0") { FhJson.Clear(); FhJson.Append("{\"errmsg\":\"此角色组下有正在使用角色,不能删除\",\"errcode\":\"1\"}"); context.Response.Write(FhJson.ToString()); return; } else { sql = ""; sql = $"update RoleGroup set status = '0' where RoleGroupId ='{dapi.RoleGroupCode}'"; da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); } if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n删除角色组信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"删除角色组信息报错(DD1002):" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 除角色组 RoleGroupCode Type 下面没有角色的才可以删除 #region 查询角色组及角色 Type 以及所有人员 以及所管理部门 if (dapi.Type == "SelectRole") { try { sql = ""; sql = "select RoleGroupId, RoleGroupName from RoleGroup where status ='1'"; DataTable roleGroup = da.GetDataTable(sql); DataTable emps = null; FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"data\":["); if (roleGroup.Rows.Count > 0) { for (int i = 0; i < roleGroup.Rows.Count; i++) { if (i > 0) { FhJson.Append(","); } FhJson.Append("{\"RoleGroupId\":\"" + roleGroup.Rows[i]["RoleGroupId"] + "\",\"RoleGroupName\":\"" + roleGroup.Rows[i]["RoleGroupName"] + "\",\"Roles\":["); sql = ""; sql = $"SELECT Roleid Roleid,RoleName RoleName FROM Role where RoleGroupId = '{roleGroup.Rows[i]["RoleGroupId"]}' and status = '1'"; obj = da.GetDataTable(sql); dt = obj as DataTable; for (int j = 0; j < dt.Rows.Count; j++) { if (j > 0) { FhJson.Append(","); } FhJson.Append("{\"Roleid\":\"" + dt.Rows[j]["Roleid"] + "\",\"RoleName\":\"" + dt.Rows[j]["RoleName"] + "\",\"Employees\":["); sql = ""; sql = $"select distinct a.employeename employeename,a.employeecode employeecode from flowemployee a join EmpsRoleId b on a.employeecode = b.EmployeeCode where b.roleid ='{dt.Rows[j]["Roleid"]}' and status = '1'"; //查询当前角色内的人员 emps = da.GetDataTable(sql); for (int ems = 0; ems < emps.Rows.Count; ems++) { if (ems > 0) { FhJson.Append(","); } FhJson.Append("{\"EmployeeCode\":\"" + emps.Rows[ems]["employeecode"] + "\",\"EmployeeName\":\"" + emps.Rows[ems]["employeename"] + "\"}"); } FhJson.Append("]}"); } FhJson.Append("]}"); } } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"查询角色信息报错(DD1004)\",\"errcode\":1}"); return; } } #endregion 查询角色组及角色 Type 以及所有人员 以及所管理部门 #region 修改角色 Type RoleName Remarks RoleGroupCode RoleCode Depts if (dapi.Type == "roleEdit") { try { sql = ""; sql = $"update Role set RoleName ='{dapi.RoleName}',Remarks = '{dapi.Remarks}',RoleGroupId ='{dapi.RoleGroupCode}' where RoleId ='{dapi.RoleCode}'"; da.ExecSql(sql); da.ExecSql($"update rolewithorg set status = '0' where roleid ='{dapi.RoleCode}'"); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); //批量插入RoleWithOrg表 StringBuilder sqlInsert = new StringBuilder(); sqlInsert.Append("insert into RoleWithOrg(RoleId,OrgCode) values"); for (int i = 0; i < dapi.Depts.Length; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('{dapi.RoleCode}','{dapi.Depts[i].DeptCode}')"); } da.ExecSql(sqlInsert.ToString()); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n修改角色信息返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"修改角色信息报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 修改角色 Type RoleName Remarks RoleGroupCode RoleCode Depts #region 增加角色与部门对应关系 DeptCode RoleId if (dapi.Type == "roleWithOrgAdd") { try { sql = ""; sql = $"insert into RoleWithOrg(OrgCode,RoleId) values('{dapi.DeptCode}','{dapi.RoleCode}') "; da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n增加角色与部门对应关系:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"增加角色与部门对应关系报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 增加角色与部门对应关系 DeptCode RoleId #region 除角色与部门对应关系 DeptCode RoleId if (dapi.Type == "roleWithOrgRemove") { try { sql = ""; sql = $"update RoleWithOrg set status = '0' where OrgCode = '{dapi.DeptCode}' and RoleId = '{dapi.RoleCode}'"; da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n删除角色与部门对应关系:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"删除角色与部门对应关系报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 除角色与部门对应关系 DeptCode RoleId #region 修改角色与部门对应关系 Depts RoleId RoleGroupCode RoleName if (dapi.Type == "roleWithOrgEdit") { try { sql = ""; sql = $"update RoleWithOrg set status = '0' where RoleId = '{dapi.RoleCode}' and status ='1'"; da.ExecSql(sql); sql = ""; sql = $"update Role set RoleName = '{dapi.RoleName}' where RoleId = '{dapi.RoleCode}' and status ='1'"; da.ExecSql(sql); StringBuilder sqlInsert = new StringBuilder(); sqlInsert.Append("insert into RoleWithOrg(RoleId,OrgCode) values"); for (int i = 0; i < dapi.Depts.Length; i++) { if (i > 0) { sqlInsert.Append(","); } sqlInsert.Append($"('{dapi.RoleCode}','{dapi.Depts[i].DeptCode}')"); } da.ExecSql(sqlInsert.ToString()); da.ExecSql(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\"}"); context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 修改角色与部门对应关系 Depts RoleId RoleGroupCode RoleName #region 查询角色与部门对应关系 RoleId sign if (dapi.Type == "roleWithOrgSelect") { try { sql = ""; sql = $"select distinct a.OrgCode,a.RoleId ,b.RoleName,C.Name from RoleWithOrg a join role b on a.roleid = b.roleid join Organization c on a.orgcode = c.guid where a.status = '1' and a.roleid ='{dapi.RoleCode}'"; DataTable rwo = da.GetDataTable(sql); sql = ""; sql = $"select distinct a.RoleId,b.RoleName from RoleWithOrg a join role b on a.roleid = b.roleid where a.roleid ='{dapi.RoleCode}' and a.status ='1' and b.status = '1'"; DataTable rwo2 = da.GetDataTable(sql); FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"roleWithOrg\":["); for (int i = 0; i < rwo2.Rows.Count; i++) { if (i > 0) { FhJson.Append(","); } FhJson.Append("{\"RoleId\":\"" + rwo2.Rows[i]["RoleId"] + "\",\"RoleName\":\"" + rwo2.Rows[i]["RoleName"] + "\",\"Depts\":["); for (int j = 0; j < rwo.Rows.Count; j++) { if (j > 0) { FhJson.Append(","); } FhJson.Append("{\"DeptCode\":\"" + rwo.Rows[j]["OrgCode"] + "\",\"DeptName\":\"" + rwo.Rows[j]["Name"] + "\"}"); } FhJson.Append("]}"); } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询角色与部门对应关系:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 查询角色与部门对应关系 RoleId sign #region 查询当前人的角色 (RoleId sign) if (dapi.Type == "personRole") { try { //查询当前人的工号 sql = $"select distinct employeecode from flowemployee where ddid ='{dapi.DDId}'"; dapi.EmployeeCode = da.GetValue(sql).ToString(); sql = $"select distinct b.RoleName from EmpsRoleId a join role b on a.roleid = b.roleid where a.status = '1' and b.status = '1' and a.EmployeeCode ='{dapi.EmployeeCode}'"; DataTable rwo = da.GetDataTable(sql); sql = ""; int isCashier = 0; int isJTLeader = 0; var dataRows = rwo.Select("RoleName ='出纳'"); var isJTLeaders = leaderName.Split(','); if (dataRows.Length != 0) { isCashier = 1; } for (int i = 0; i < isJTLeaders.Length; i++) { var dataRowsl = rwo.Select($"RoleName ='{isJTLeaders[i]}'"); if (dataRowsl.Length != 0) { isJTLeader = 1; i = isJTLeaders.Length; } } FhJson.Clear(); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"isCashier\":\"" + isCashier + "\",\"isJTLeader\":\"" + isJTLeader + "\",\"personRole\":["); for (int i = 0; i < rwo.Rows.Count; i++) { if (i > 0) { FhJson.Append(","); } FhJson.Append("{\"RoleName\":\"" + rwo.Rows[i]["RoleName"] + "\"}"); } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询当前人员的角色信息:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); return; } } #endregion 查询当前人的角色 (RoleId sign) #region 查询所有角色以及管理部门 Type if (dapi.Type == "roleOrgAllSelect") { try { sql = $"select RoleId,RoleName from Role where status = '1'"; DataTable Roles = da.GetDataTable(sql); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"Roles\":["); DataTable roleorg = new DataTable(); for (int i = 0; i < Roles.Rows.Count; i++) { if (i > 0) { FhJson.Append(","); } FhJson.Append("{\"RoleId\":\"" + Roles.Rows[i]["RoleId"] + "\",\"RoleName\":\"" + Roles.Rows[i]["RoleName"] + "\",\"Depts\":["); sql = $"select a.RoleId RoleId,a.RoleName RoleName,b.OrgCode OrgCode,c.Name OrgName from Role a join RoleWithOrg b on a.roleid = b.roleid join Organization c on b.orgcode = c.guid where a.roleid ='{Roles.Rows[i]["RoleId"]}' and status ='1'"; roleorg = da.GetDataTable(sql); for (int ad = 0; ad < roleorg.Rows.Count; ad++) { if (ad > 0) { FhJson.Append(","); } FhJson.Append("{\"OrgCode\":\"" + roleorg.Rows[ad]["OrgCode"] + "\",\"OrgName\":\"" + roleorg.Rows[ad]["OrgName"] + "\"}"); } FhJson.Append("]}"); } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"查询角色报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 查询所有角色以及管理部门 Type #region 查询所有角色 Type if (dapi.Type == "roleAllSelect") { try { sql = $"select RoleId,RoleName from Role where status ='1'"; DataTable Roles = da.GetDataTable(sql); FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"Roles\":["); for (int i = 0; i < Roles.Rows.Count; i++) { if (i > 0) { FhJson.Append(","); } FhJson.Append("{\"RoleId\":\"" + Roles.Rows[i]["RoleId"] + "\",\"RoleName\":\"" + Roles.Rows[i]["RoleName"] + "\"}"); } FhJson.Append("]}"); if (isWrite == "1") { ToolsClass.TxtLog("修改审批架构信息日志", "\r\n查询角色返回:" + FhJson.ToString() + "\r\n"); } context.Response.Write(FhJson.ToString()); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"查询角色报错(DD1002)\",\"errcode\":1}"); return; } } #endregion 查询所有角色 Type else { context.Response.Write("{\"errmsg\":\"还需要其他功能??17854238990(DD1000)\",\"errcode\":1}"); return; } }
private string ddUrl = ""; //钉钉前端地址 public void ProcessRequest(HttpContext context) { //判断客户端请求是否为post方法 if (context.Request.HttpMethod.ToUpper() != "POST") { context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}"); return; } GetMulParams getMulParams = new GetMulParams(); string ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/"; //数据库链接 connectionString = ToolsClass.GetConfig("DataOnLine"); SqlHelper = new BankDbHelper.SqlHelper("SqlServer", connectionString); //获取请求json using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { CsJson = reader.ReadToEnd(); } string result = string.Empty; string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain"; if (CsJson == "") { context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}"); return; } CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ","); //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret AppWyy = ToolsClass.GetConfig("AppWyy"); ScList = AppWyy.Split('$'); agentId = ScList[0].ToString(); corpId = ScList[1].ToString(); appKey = ScList[2].ToString(); appSecret = ScList[3].ToString(); isWrite = ToolsClass.GetConfig("isWrite"); ddUrl = ToolsClass.GetConfig("ddUrl"); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n申请审批入参:" + CsJson + "\r\n"); } string IsLocalHost = "0"; //前端传入数据 TravelApprovalMul traApprClass = new TravelApprovalMul(); traApprClass = (TravelApprovalMul)JsonConvert.DeserializeObject(CsJson, typeof(TravelApprovalMul)); IsLocalHost = traApprClass.IsLocalHost == null ? "0" : traApprClass.IsLocalHost; string path1 = context.Request.Path.Replace("Approval/OtherCostSP.ashx", "othercostsp"); //验证请求sign string sign = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32); ToolsClass.TxtLog("生成的sign", "生成的" + "sign1:" + sign + "传入的sign" + traApprClass.Sign + "\r\n 后台字符串:" + signUrl + path1 + "Romens1/DingDing2" + path1); if (sign != traApprClass.Sign) { context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}"); return; } try { if (traApprClass.IsSp == "1") { audiIdea = "同意"; } else if (traApprClass.IsSp == "2") { audiIdea = "驳回"; } else { audiIdea = "抄送"; } billTypeNo = "100520005055"; ProName = "EXPEAUDITINGdd"; typeName = "其他费用"; typeUrl = ddUrl + "/qtfyui/shenpi/index.html?billno="; //获取当前单号的发起人和待报销人 string fqrall = traApprClass.DDOperatorId; var fqr = SqlHelper.GetDataTable($"select DDOperatorId,InsteadOperatorGuid,IsSp from EXPEOTHER where BillNo = '{traApprClass.BillNo}'"); if (fqr.Rows.Count == 0) { context.Response.Write("{\"errmsg\":\"当前单据已撤回\",\"errcode\":1}"); return; } else if (fqr.Rows[0]["IsSp"].ToString() == "3") { context.Response.Write("{\"errmsg\":\"当前单据已撤回\",\"errcode\":1}"); return; } if (fqr.Rows[0]["InsteadOperatorGuid"].ToString() != fqrall) { fqrall = fqrall + "," + fqr.Rows[0]["InsteadOperatorGuid"].ToString(); } #region 获取access_token url = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret; FhJson = ToolsClass.ApiFun("GET", url, ""); TokenClass tokenClass = new TokenClass(); tokenClass = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass)); access_token = tokenClass.access_token; errcode = tokenClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}"); return; } #endregion 获取access_token #region 获取用户详情 url = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + traApprClass.DDAuditingId; FhJson = ToolsClass.ApiFun("GET", url, ""); GetUserXq userXqClass = new GetUserXq(); userXqClass = (GetUserXq)JsonConvert.DeserializeObject(FhJson, typeof(GetUserXq)); errcode = userXqClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取审批人详细信息报错(DD6003)\",\"errcode\":1}"); return; } audiName = userXqClass.name; #endregion 获取用户详情 #region 获取用户guid Sql = $"select top 1 a.Guid,b.BillCount,b.FeeAmount from operators a left join (select BillCount,FeeAmount from EXPEOTHER where billno = '[申请号]') b on 1 = 1 where a.code = '[工号]'"; Sql = Sql.Replace("[申请号]", traApprClass.BillNo).Replace("[工号]", userXqClass.jobnumber); obj = SqlHelper.GetDataTable(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}"); return; } dt = obj as DataTable; AuditingGuid = dt.Rows[0]["Guid"].ToString(); #endregion 获取用户guid //判断当前是流程节点中的哪个流程 Sql = $"select count( DISTINCT NodeNumber) NodeNumber from ApprovalComments where BillNo ='{traApprClass.BillNo}'"; //得到当前流程节点的数量 string nodeNumber = SqlHelper.GetValue(Sql).ToString(); //得到当前流程信息 //更新单据消息id与返回内容 NodeInfo[] NodeInfo = null; NodeInfo = (NodeInfo[])JsonConvert.DeserializeObject(SqlHelper.GetValue($"select ProcessNodeInfo from EXPEOTHER where BillNo='{traApprClass.BillNo}'").ToString(), typeof(NodeInfo[])); XXTZ xxtzClass2 = new XXTZ(); StringBuilder piddept = new StringBuilder(); string sql = ""; DataTable logComments = new DataTable(); StringBuilder logcoments = new StringBuilder(); //判断当前人是否已经审批过 Sql = $"select * from ApprovalComments where ApprovalStatus='0' and BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}'"; ToolsClass.TxtLog("其他费用申请审批日志", "\r\n查询当前人的审批节点" + Sql + "\r\n"); if (SqlHelper.GetDataTable(Sql).Rows.Count == 0) { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + JsonConvert.SerializeObject(new PublicResult { errcode = "1", errmsg = "当前单据您已经审批过,请勿点击太快或者重复提交!" }) + "\r\n"); context.Response.Write(JsonConvert.SerializeObject(new PublicResult { errcode = "1", errmsg = "当前单据您已经审批过,请勿点击太快或者重复提交!" })); return; } if (audiIdea == "同意" || audiIdea == "抄送") { bool processIsEnd = false; processIsEnd = CommonHelper.SaveComments(traApprClass, userXqClass, nodeNumber, context, ddUrl, "其他费用申请审批日志", out result); //可以给下个人发送消息 if (processIsEnd) //如果当前流程节点走完 { //判断当前单号是否已经结束 sql = ""; sql = $"select issp from EXPEOTHER where BillNo ='{traApprClass.BillNo}'"; if (SqlHelper.GetValue(sql).ToString() != "0" && traApprClass.IsSp == "2") { if (IsLocalHost == "0") { result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper)); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } else { result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } return; } //判断是否是根结点,判断数量(去重)是否小于流程的长度 //是否是最后一个流程 if (int.Parse(nodeNumber) < NodeInfo.Length) { //获取下个节点的人员信息 NodeInfoDetailPerson[] NodeInfodetailPeople = NodeInfo[int.Parse(nodeNumber)].NodeInfoDetails[0].Persons; for (int i = 0; i < NodeInfodetailPeople.Length; i++) { if (i > 0) { piddept.Append(","); } //判断传空 if (NodeInfodetailPeople[i].PersonId != "") { sql = ""; sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'"; piddept.Append(SqlHelper.GetValue(sql).ToString()); } } //插入相应的信息到comments表中 sqlList.Clear(); for (int i = 0; i < NodeInfodetailPeople.Length; i++) { sqlTou.Clear(); sqlTou.Append("insert into ApprovalComments(CommentsId,BillClassId,BillNo,ApprovalID,ApprovalName,ApprovalComments,ApprovalStatus,AType,ApprovalDate,IsAndOr,IsLeader,PersonType,NodeNumber) values('") .Append(Guid.NewGuid().ToString()).Append("','") .Append(traApprClass.BillClassId).Append("','") .Append(traApprClass.BillNo).Append("','") .Append(NodeInfodetailPeople[i].PersonId).Append("','") .Append(NodeInfodetailPeople[i].PersonName).Append("','")//内部数据库用户GUID .Append("").Append("','") .Append("0").Append("','") .Append(NodeInfodetailPeople[i].AType).Append("','") .Append(DateTime.Now).Append("','") .Append(NodeInfo[int.Parse(nodeNumber)].NodeInfoDetails[0].IsAndOr).Append("','") .Append(NodeInfo[int.Parse(nodeNumber)].NodeInfoDetails[0].IsLeader).Append("','") .Append(NodeInfo[int.Parse(nodeNumber)].NodeInfoType).Append("','") .Append(int.Parse(nodeNumber) + 2).Append("')"); sqlList.Add(sqlTou.ToString()); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n操作ApprovalComments表:" + sqlTou.ToString() + "\r\n"); } } //执行SQL语句Insert obj = SqlHelper.ExecSql(sqlList); if (obj == null) { context.Response.Write("{\"errmsg\":\"保存出差申请节点信息出错(DD6002)\",\"errcode\":1}"); return; } //给申请人发送审批意见 给下个节点的人员发送目前为止的审批状态及意见,给之前的人也发 //获取现在的审批意见 sql = ""; sql = $"select ApprovalComments,ApprovalName,ApprovalID from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'"; logComments = SqlHelper.GetDataTable(sql); //"【出差】\r\n审批意见: " + traApprClass.AuditingIdea + "\"}}}"; for (int i = 0; i < logComments.Rows.Count; i++) { if (i > 0) { logcoments.Append(","); } //piddept.Append(","); sql = ""; sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{logComments.Rows[i]["ApprovalID"].ToString()}'"; // piddept.Append(SqlHelper.GetValue(sql).ToString()); logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString()); } urlcsjson = typeUrl + traApprClass.BillNo + $"&BillClassId={traApprClass.BillClassId}&showmenu=false"; urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"金额: " + dt.Rows[0]["FeeAmount"].ToString() + "¥ 发票: " + dt.Rows[0]["BillCount"].ToString() + "张\r\n申请人: " + traApprClass.OperatorName + "【" + typeName + "】\r\n审批意见: " + logcoments.ToString() + "\"}}}"; url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, CsJson); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n发送通知入参:" + CsJson + "\r\n出参:" + FhJson); } xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); errcode = xxtzClass2.errcode; if (errcode != 0) { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n其他费用申请审批申请审批发送通知失败" + "钉钉id不正确!"); context.Response.Write("{\"errmsg\":\"您的出差申请消息通知失败(DD6004)\",\"errcode\":1}"); return; } sql = $"update EXPEOTHER set HangState = '0',HangDDIDs = '' where billno = '{traApprClass.BillNo}'"; SqlHelper.ExecSql(sql); TaskFactory taskFactory = new TaskFactory(); //如果下个是抄送人 if (NodeInfo[int.Parse(nodeNumber)].NodeInfoType == "3") { //根据数据开启多个线程调用审批接口 taskFactory.StartNew(() => { for (int i = 0; i < NodeInfodetailPeople.Length; i++) { HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "othercostsp"); webrequest.Method = "post"; fasongqingqiu ad = new fasongqingqiu { BillNo = traApprClass.BillNo, DDAuditingId = SqlHelper.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(), IsSp = "3", DDOperatorId = traApprClass.DDOperatorId, OperatorName = traApprClass.OperatorName, BillClassId = traApprClass.BillClassId, FeeType = traApprClass.FeeType, Sign = sign }; byte[] postdatabyte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad)); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); using (var httpWebResponse = webrequest.GetResponse()) using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream())) { String ret = responseStream.ReadToEnd(); } } }); } if (NodeInfo[int.Parse(nodeNumber)].NodeInfoType == "2") { DataRow[] dataRows = null; sql = ""; sql = $"select ApprovalComments,ApprovalName,ApprovalID from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}' and ApprovalStatus ='1'"; logComments = SqlHelper.GetDataTable(sql); //如果下个环节中的人在之前已同意,自动调用此接口同意完成审批 taskFactory.StartNew(() => { for (int i = 0; i < NodeInfodetailPeople.Length; i++) { dataRows = logComments.Select("ApprovalID ='" + NodeInfodetailPeople[i].PersonId + "'"); if (dataRows.Length != 0 || SqlHelper.GetValue($"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'").ToString() == traApprClass.DDOperatorId) { HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "othercostsp"); webrequest.Method = "post"; fasongqingqiu ad = new fasongqingqiu { BillNo = traApprClass.BillNo, DDAuditingId = SqlHelper.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(), IsSp = "1", DDOperatorId = traApprClass.DDOperatorId, OperatorName = traApprClass.OperatorName, BillClassId = traApprClass.BillClassId, FeeType = traApprClass.FeeType, AuditingIdea = "同意", Sign = sign }; byte[] postdatabyte = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad)); webrequest.ContentLength = postdatabyte.Length; Stream stream; stream = webrequest.GetRequestStream(); stream.Write(postdatabyte, 0, postdatabyte.Length); stream.Close(); using (var httpWebResponse = webrequest.GetResponse()) using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream())) { String ret = responseStream.ReadToEnd(); } } } }); } } //如果是最后一级 //给申请人发送审批意见 给之前的人发 //获取现在的审批意见 else { //更新单据消息id与返回内容 if (traApprClass.FeeType == "00") { Sql = "update EXPEENTEMENT set IsSp='1',auditingdate=getdate() where billno='" + traApprClass.BillNo + "'"; } else { Sql = "update EXPEOTHER set IsSp='1',auditingdate=getdate() where billno='" + traApprClass.BillNo + "'"; } if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n操作Expeother表:" + Sql.ToString() + "\r\n"); } obj = SqlHelper.ExecSql(Sql); billno = traApprClass.BillNo; keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, "", ProName); if (keyValuePairs["ReturnValue"].ToString() != "0") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); if (traApprClass.FeeType == "00") { Sql = "update EXPEENTEMENT set IsSp='0' where billno='" + traApprClass.BillNo + "'"; } else { Sql = "update EXPEOTHER set IsSp='0' where billno='" + traApprClass.BillNo + "'"; } obj = SqlHelper.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新审批状态出错(DD6006)\",\"errcode\":1}"); return; } context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}"); return; } sql = $"select ApprovalComments,ApprovalName,ApprovalID from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'"; logComments = SqlHelper.GetDataTable(sql); //"【出差】\r\n审批意见: " + traApprClass.AuditingIdea + "\"}}}"; for (int i = 0; i < logComments.Rows.Count; i++) { if (i > 0) { logcoments.Append(","); //piddept.Append(","); } sql = ""; sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{logComments.Rows[i]["ApprovalID"].ToString()}'"; // piddept.Append(SqlHelper.GetValue(sql).ToString()); logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString()); } urlcsjson = typeUrl + traApprClass.BillNo + $"&BillClassId={traApprClass.BillClassId}&showmenu=false"; urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"金额: " + dt.Rows[0]["FeeAmount"].ToString() + "¥ 发票: " + dt.Rows[0]["BillCount"].ToString() + "张\r\n申请人: " + traApprClass.OperatorName + "【" + typeName + "】\r\n审批意见: " + logcoments.ToString() + "\"}}}"; url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, CsJson); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n审批发送通知:" + CsJson + "FhJson\r\n:" + FhJson); } xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); errcode = xxtzClass2.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的申请消息通知失败(DD6004)\",\"errcode\":1}"); return; } sql = $"update EXPEOTHER set HangState = '0',HangDDIDs = '' where billno = '{traApprClass.BillNo}'"; SqlHelper.ExecSql(sql); } } else { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); return; } if (IsLocalHost == "0") { result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper)); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } else { result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } return; } if (audiIdea == "驳回") { //将意见及日期保存到ApprovalComments表,并改变状态 Sql = ""; Sql = $"update ApprovalComments set ApprovalComments='{traApprClass.AuditingIdea}',Urls='{JsonConvert.SerializeObject(traApprClass.Urls)}',ApprovalStatus='{traApprClass.IsSp}',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}'"; SqlHelper.ExecSql(Sql); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n"); } //更新单据消息id与返回内容 Sql = "update EXPEOTHER set IsSp='2',isAuditing = '1',auditingdate=getdate() where billno='" + traApprClass.BillNo + "'"; if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n操作Expeother表:" + Sql.ToString() + "\r\n"); } obj = SqlHelper.ExecSql(Sql); //给当前节点以前的人及申请人发送通知,通知已驳回,并改变出差申请表中的状态 sql = ""; sql = $"select ApprovalComments,ApprovalName,ApprovalID from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'"; logComments = SqlHelper.GetDataTable(sql); //"【出差】\r\n审批意见: " + traApprClass.AuditingIdea + "\"}}}"; for (int i = 0; i < logComments.Rows.Count; i++) { if (i > 0) { logcoments.Append(","); // piddept.Append(","); } sql = ""; sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{logComments.Rows[i]["ApprovalID"].ToString()}'"; // piddept.Append(SqlHelper.GetValue(sql).ToString()); logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString()); } urlcsjson = typeUrl + traApprClass.BillNo + $"&BillClassId={traApprClass.BillClassId}&showmenu=false"; urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"金额: " + dt.Rows[0]["FeeAmount"].ToString() + "¥ 发票: " + dt.Rows[0]["BillCount"].ToString() + "张\r\n申请人: " + traApprClass.OperatorName + "【" + typeName + "】\r\n审批意见: " + logcoments.ToString() + "\"}}}"; url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; FhJson = ToolsClass.ApiFun("POST", url, CsJson); if (isWrite == "1") { ToolsClass.TxtLog("其他费用申请审批日志", "\r\n发送通知出入参=>CsJson:" + CsJson + "\r\n出参:" + FhJson); } xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); errcode = xxtzClass2.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的其他费用申请消息通知失败(DD6004)\",\"errcode\":1}"); return; } sql = $"update EXPEOTHER set HangState = '0',HangDDIDs = '' where billno = '{traApprClass.BillNo}'"; SqlHelper.ExecSql(sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}"); return; } } if (IsLocalHost == "0") { result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper)); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } else { result = JsonConvert.SerializeObject(new ResultGetMulParams { errcode = "0", errmsg = "", NextUrl = "" }); ToolsClass.TxtLog("其他费用申请审批日志", "\r\n返回前端信息:" + result + "\r\n"); context.Response.Write(result); } return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); context.Response.End(); } }
public void ProcessRequest(HttpContext context) { //判断客户端请求是否为post方法 if (context.Request.HttpMethod.ToUpper() != "POST") { context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}"); return; } string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain"; string ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/"; //数据库链接 connectionString = ToolsClass.GetConfig("DataOnLine"); //sqlServer da = new BankDbHelper.SqlHelper("SqlServer", connectionString); //获取请求json using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { CsJson = reader.ReadToEnd(); } if (CsJson == "") { context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}"); return; } CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ","); string JsonData = CsJson; //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret AppWyy = ToolsClass.GetConfig("AppWyy"); ScList = AppWyy.Split('$'); agentId = ScList[0].ToString(); corpId = ScList[1].ToString(); appKey = ScList[2].ToString(); appSecret = ScList[3].ToString(); isWrite = ToolsClass.GetConfig("isWrite"); ddUrl = ToolsClass.GetConfig("ddUrl"); if (isWrite == "1") { ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n入参:" + CsJson + "\r\n"); } string ddMessageId = string.Empty; MedConfigReqRequest configReqRequest = new MedConfigReqRequest(); configReqRequest = (MedConfigReqRequest)JsonConvert.DeserializeObject(CsJson, typeof(MedConfigReqRequest)); string path = context.Request.Path.Replace("Approval/MedConfigReq.ashx", "medconfigreq"); //验证请求sign string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32); ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + configReqRequest.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path); if (sign != configReqRequest.Sign) { context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}"); return; } string NodeInfo = JsonConvert.SerializeObject(configReqRequest.NodeInfo).Replace(",{\"AType\":\"\",\"PersonId\":\"select\",\"PersonName\":\"请选择\"}", ""); try { #region 获取access_token url = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret; FhJson = ToolsClass.ApiFun("GET", url, ""); TokenClass tokenClass = new TokenClass(); tokenClass = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass)); access_token = tokenClass.access_token; errcode = tokenClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}"); return; } #endregion 获取access_token ProName = "MedConfigRefer"; typeName = "医保及三方授权"; typeUrl = ddUrl + "/yibao/shenpi/index.html?billno="; string fqrall = configReqRequest.OperatorDDID; //根据ddid获取内部系统中operator中guid //获得提交人信息dt var referinfo = da.GetDataTable($"select a.GUID,a.code,a.name from operators a where code = (select top 1 employeecode from flowemployee where ddid = '{configReqRequest.ReferDDID}')"); if (referinfo.Rows.Count == 0) { context.Response.Write("{\"errmsg\":\"当前操作人员未在operators或者flowemployee中维护信息!请联系信息部解决\",\"errcode\":1}"); return; } string ReferGuid = referinfo.Rows[0]["GUID"].ToString(); string jnumber = referinfo.Rows[0]["code"].ToString(); string sqr = configReqRequest.OperatorName; if (configReqRequest.IsInsteadApply == "1") { fqrall = fqrall + "," + configReqRequest.ReferDDID; sqr = "【代替】" + configReqRequest.InsteadOperatorName; jnumber = da.GetValue($"select top 1 employeecode from flowemployee where ddid = '{configReqRequest.ReferDDID}'").ToString(); } operatorGuid = da.GetValue($"select a.GUID from operators a where code = (select top 1 employeecode from flowemployee where ddid = '{configReqRequest.OperatorDDID}')").ToString(); #region 获取申请流水号 Sql = $"select dbo.GetBillNo('{billTypeNo}','{jnumber}',getdate())"; billno = da.GetValue(Sql).ToString(); if (billno == "1") { billno = billNoPro + DateTime.Now.ToString("yyyyMMdd") + "0001"; Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "' and BillDate<>convert(varchar(20),GETDATE(),120)"; } else { Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "'"; } obj = da.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"更新医保授权申请单号出错(DD9002)\",\"errcode\":1}"); return; } string guid = string.Empty; #endregion 获取申请流水号 #region 暂不会有没有审批人现象 //if (configReqRequest.NodeInfo.Count == 0) //{ // //自动同意 // //更新单据消息id与返回内容 // #region 保存信息 // sqlList.Clear(); // sqlTou.Clear(); // sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,OperatorGuid,FlowEmployeeGuid,ProcessNodeInfo,ApplPers,DDOperatorId,JsonData,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl,Notes) Values('") // .Append(billno).Append("','") // .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','") // .Append(configReqRequest.FeeType).Append("','") // .Append(operatorGuid).Append("','") // .Append(configReqRequest.OperatorGuid).Append("','") // .Append(NodeInfo).Append("','") // .Append(jnumber).Append("','") // .Append(configReqRequest.DDOperatorId).Append("','") // .Append(JsonData).Append("','") // .Append(configReqRequest.BillCount).Append("','") // .Append(configReqRequest.FeeAmount).Append("','") // .Append(configReqRequest.DeptName).Append("','") // .Append(configReqRequest.DeptCode).Append("','") // .Append(configReqRequest.NoCountFee).Append("','") // .Append(configReqRequest.BearOrga).Append("','") // .Append(configReqRequest.AppendixUrl).Append("','") // .Append(JsonConvert.SerializeObject(configReqRequest.Urls)).Append("','") // .Append(configReqRequest.IsInsteadApply).Append("','") // .Append(configReqRequest.InsteadOperatorGuid).Append("','") // .Append(configReqRequest.PictureUrl).Append("','") // .Append(configReqRequest.Notes) // .Append("')"); // sqlList.Add(sqlTou.ToString()); // for (int i = 0; i < configReqRequest.configReqRequests.Count; i++) // { // guid = Guid.NewGuid().ToString(); // Sql = string.Empty; // Sql = $"insert into ExpeOtherDetail(BillNo,GUID,BillCount,BillAmount,FeeTypeDetail) values('{billno}','{guid}','{configReqRequest.configReqRequests[i].Count}','{configReqRequest.configReqRequests[i].Amount}','{configReqRequest.configReqRequests[i].FType}')"; // sqlList.Add(Sql); // ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n操作ExpeotherDetail表:" + Sql + "\r\n"); // } // if (isWrite == "1") // { // ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n操作Expeother表:" + sqlTou.ToString() + "\r\n"); // } // obj = da.ExecSql(sqlList); // if (obj == null) // { // context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}"); // return; // } // #endregion 保存信息 // #region 调用提交存储过程 // keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, operatorGuid, ProName); // if (keyValuePairs["ReturnValue"].ToString() != "0") // { // ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); // sqlList.Clear(); // Sql = "delete from EXPEOTHER where BillNo='" + billno + "'"; // sqlList.Add(Sql); // obj = da.ExecSql(sqlList); // if (obj == null) // { // context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}"); // return; // } // context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}"); // return; // } // #endregion 调用提交存储过程 // Sql = "update EXPEOTHER set IsSp='1',auditingdate=getdate() where billno='" + billno + "'"; // ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n操作EXPEOTHER表:" + Sql.ToString() + "\r\n"); // obj = da.ExecSql(Sql); // Sql = ""; // #region 发送工作通知消息 // urlcsjson = typeUrl + "" + $"{billno}&BillClassId={configReqRequest.BillClassId}&showmenu=false"; // urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); // url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; // CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + configReqRequest.FeeAmount + "¥ 发票: " + configReqRequest.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + configReqRequest.Notes + "\"}}}"; // FhJson = ToolsClass.ApiFun("POST", url, CsJson); // var xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); // ddMessageId = xxtzClass2.task_id.ToString(); // #endregion 发送工作通知消息 // context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}"); // return; //} #endregion 暂不会有没有审批人现象 //获取第一级流程的人员信息 NodeInfoDetailPerson[] NodeInfodetailPeople = configReqRequest.NodeInfo[0].NodeInfoDetails[0].Persons; //从入参中得到审批人及抄送人的信息 //指定人员的id列表 StringBuilder piddept = new StringBuilder(); string sql = ""; for (int i = 0; i < NodeInfodetailPeople.Length; i++) { if (i > 0) { piddept.Append(","); } //判断传空 if (NodeInfodetailPeople[i].PersonId != "select" && NodeInfodetailPeople[i].PersonId != "") { sql = $"select top 1 DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'"; piddept.Append(da.GetValue(sql).ToString()); } } #region 保存信息 string medGuid = Guid.NewGuid().ToString(); sqlList.Clear(); sqlTou.Clear(); string mainMedConfig = $"insert into MedConfig (Guid,BillNo,BillDate,BillTime,CusGuid,CusCode,CusName,MedType,ProductType,IsAuditing,AuditingGuid,AuditingDate,OperatorGuid,Notes,YXQ,YXQFlag,iswrite,YXQType,ISREFER,REFERGUID,REFERDATE,FileUrl,AuditingReason,IsSp) Values('{medGuid}','{billno}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}','{DateTime.Now.ToString(" HH:mm:ss")}',null,'{configReqRequest.CustCode}','{configReqRequest.CustName}','{configReqRequest.MedTypeList}','{configReqRequest.ProductType}','0',null,null,'{operatorGuid}','{configReqRequest.Notes}',null,null,'0','{configReqRequest.YXQType}','0',null,null,null,null,0)"; if (isWrite == "1") { ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n操作MedConfig表:" + mainMedConfig + "\r\n"); } obj = da.ExecSql(mainMedConfig); if (obj == null) { context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}"); return; } #endregion 保存信息 #region 调用提交存储过程 keyValuePairs = CommonHelper.sqlPro(medGuid, billTypeNo, ReferGuid, ProName); if (keyValuePairs["ReturnValue"].ToString() != "0") { ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n"); sqlList.Clear(); Sql = "delete from MedConfig where guid='" + medGuid + "'"; obj = da.ExecSql(Sql); if (obj == null) { context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}"); return; } context.Response.Write("{\"errmsg\":\"执行存储过程报错\",\"errcode\":1}"); return; } #endregion 调用提交存储过程 #region 发送工作通知消息 urlcsjson = typeUrl + "" + $"{billno}&BillClassId={configReqRequest.BillClassId}&showmenu=false"; urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8); url = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token; DDMsgModelLink link = new DDMsgModelLink { messageUrl = $"dingtalk://dingtalkclient/page/link?url={ urlcsjson}&pc_slide=true", picUrl = "@", text = $"\r\n申请日期:{ DateTime.Now.ToString("yyyy-MM-dd")}\r\n备注:{configReqRequest.Notes}", title = $"{sqr }发起的【医保及三方支付申请】" }; DDMsgModelLinkMsg dDMsg = new DDMsgModelLinkMsg { link = link, msgtype = "link" }; string ddmsgModel = JsonConvert.SerializeObject(new DDMsgModel { agent_id = agentId, userid_list = piddept.ToString() + "," + fqrall, msg = dDMsg }); FhJson = ToolsClass.ApiFun("POST", url, ddmsgModel); ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n发送通知json:" + ddmsgModel + "\r\n"); XXTZ xxtzClass = new XXTZ(); xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ)); ddMessageId = xxtzClass.task_id.ToString(); errcode = xxtzClass.errcode; if (errcode != 0) { context.Response.Write("{\"errmsg\":\"您的报销申请,消息通知失败(DD9004)\",\"errcode\":1}"); return; } #endregion 发送工作通知消息 //如果是撤回重新提交的,删除之前的单子 //if (!string.IsNullOrEmpty(configReqRequest.OldBillNo)) //{ // da.ExecSql($"delete ExpeOtherDetail where billno = '{configReqRequest.OldBillNo}'"); // da.ExecSql($"delete EXPEOTHER where billno = '{configReqRequest.OldBillNo}'"); // da.ExecSql($"delete approvalcomments where billno = '{configReqRequest.OldBillNo}'"); // da.Dispose(); // ToolsClass.TxtLog("医保及三方授权申请日志", "\r\n删除旧单据:" + $"delete ExpeOtherDetail where billno = '{configReqRequest.OldBillNo}'" + $"delete EXPEOTHER where billno = '{configReqRequest.OldBillNo}'" + "\r\n"); //} context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}"); return; } catch (Exception ex) { context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}"); context.Response.End(); } }