Example #1
0
        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 ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";

            //数据库链接
            string connectionString = ToolsClass.GetConfig("DataOnLine");

            //sqlServer
            da        = new DbHelper.SqlHelper("SqlServer", connectionString);
            SqlHelper = new BankDbHelper.SqlHelper("SqlServer", connectionString);
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //获取请求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", ",");
            //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
            string AppWyy = ToolsClass.GetConfig("AppWyy");

            string[] ScList    = AppWyy.Split('$');
            string   agentId   = ScList[0].ToString();
            string   corpId    = ScList[1].ToString();
            string   appKey    = ScList[2].ToString();
            string   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));
            string result = string.Empty;

            IsLocalHost = traApprClass.IsLocalHost == null ? "0" : traApprClass.IsLocalHost;
            string path = context.Request.Path.Replace("Approval/CLFBXSP.ashx", "clfbxspmul");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

            ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + traApprClass.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
            if (sign != traApprClass.Sign)
            {
                context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                return;
            }
            GetMulParams getMulParams = new GetMulParams();

            #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));
            string access_token = tokenClass.access_token;
            int    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;
            }
            string audiName = userXqClass.name;

            #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("[申请号]", traApprClass.BillNo).Replace("[工号]", userXqClass.jobnumber);

            obj = da.GetDataTable(Sql);
            if (obj == null)
            {
                context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}");
                return;
            }

            dt = obj as DataTable;
            string AuditingGuid = dt.Rows[0]["GUID"].ToString();

            #endregion 获取用户guid

            //判断当前是流程节点中的哪个流程
            Sql = $"select count( DISTINCT  NodeNumber) NodeNumber  from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'";
            //得到当前流程节点的数量
            string nodeNumber = da.GetValue(Sql).ToString();
            //得到当前流程信息
            NodeInfo[]    NodeInfo    = (NodeInfo[])JsonConvert.DeserializeObject(da.GetValue($"select  ProcessNodeInfo from ExpeTrav 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();
            if (traApprClass.IsSp == "1")
            {
                audiIdea = "同意";
            }
            else if (traApprClass.IsSp == "2")
            {
                audiIdea = "驳回";
            }
            else
            {
                audiIdea = "抄送";
            }

            //获取当前单号的发起人和待报销人
            string fqrall = traApprClass.DDOperatorId;
            var    fqr    = da.GetDataTable($"select DDOperatorId,InsteadOperatorGuid,IsSp from ExpeTrav 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();
            }

            //判断当前人是否已经审批过
            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 (da.GetDataTable(Sql).Rows.Count == 0)
            {
                ToolsClass.TxtLog("差旅费申请审批日志", "\r\n返回前端信息:" + JsonConvert.SerializeObject(new PublicResult
                {
                    errcode = "1",
                    errmsg  = "当前单据您已经审批过,请勿点击太快或者重复提交!"
                }));
                context.Response.Write(JsonConvert.SerializeObject(new PublicResult
                {
                    errcode = "1",
                    errmsg  = "当前单据您已经审批过,请勿点击太快或者重复提交!"
                }));
                return;
            }

            //如果审批人意见为同意
            if (audiIdea == "同意" || audiIdea == "抄送")
            {
                try
                {
                    bool processIsEnd = false;

                    processIsEnd = CommonHelper.SaveComments(traApprClass, userXqClass, nodeNumber, context, ddUrl, "差旅费申请审批日志", out result);

                    //可以给下个人发送消息
                    if (processIsEnd)
                    //如果当前流程节点走完
                    {
                        //判断当前单号是否已经结束
                        sql = "";
                        sql = $"select ISSP from ExpeTrav where BillNo ='{traApprClass.BillNo}'";
                        if (da.GetValue(sql).ToString() != "0")
                        {
                            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;
                            //插入相应的信息到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 = da.ExecSql(sqlList);
                            if (obj == null)
                            {
                                context.Response.Write("{\"errmsg\":\"保存多级流程差旅费报销审批节点信息出错(DD6002)\",\"errcode\":1}");
                                return;
                            }
                            //获取下个节点的人员信息

                            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(da.GetValue(sql).ToString());
                                }
                            }

                            //给申请人发送审批意见  给下个节点的人员发送目前为止的审批状态及意见,给之前的人也发
                            //获取现在的审批意见
                            sql         = "";
                            sql         = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'";
                            logComments = da.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(da.GetValue(sql).ToString());
                                logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                            }

                            //&AType={NodeInfodetailPeople[0].AType}
                            urlcsjson = ddUrl + $"/clfui/shenpi/index.html?billno={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]["TotalAmount"].ToString() + "¥ 调休: " + dt.Rows[0]["OffDay"].ToString() + "天\r\n申请人: " + traApprClass.OperatorName + "【差旅费】\r\n审批意见: " + traApprClass.AuditingIdea + "\"}}}";

                            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发送通知调用钉钉api入参:" + 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 ExpeTrav set HangState = '0',HangDDIDs = '' where billno = '{traApprClass.BillNo}'";
                            da.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 + "clfbxspmul");
                                        webrequest.Method         = "post";
                                        new Action(() =>
                                        {
                                            fasongqingqiu ad = new fasongqingqiu
                                            {
                                                BillNo       = traApprClass.BillNo,
                                                DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                                IsSp         = "3",
                                                DDOperatorId = traApprClass.DDOperatorId,
                                                OperatorName = traApprClass.OperatorName,
                                                BillClassId  = traApprClass.BillClassId,
                                                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 (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 = 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() == traApprClass.DDOperatorId)
                                        {
                                            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "clfbxspmul");
                                            webrequest.Method         = "post";
                                            new Action(() =>
                                            {
                                                fasongqingqiu ad = new fasongqingqiu
                                                {
                                                    BillNo       = traApprClass.BillNo,
                                                    DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                                    IsSp         = "1",
                                                    DDOperatorId = traApprClass.DDOperatorId,
                                                    OperatorName = traApprClass.OperatorName,
                                                    BillClassId  = traApprClass.BillClassId,
                                                    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();
                                                    }
                                            }).Invoke();
                                        }
                                    }
                                });
                            }
                        }
                        //如果是最后一级
                        //给申请人发送审批意见  给之前的人发
                        //获取现在的审批意见
                        else
                        {
                            //更新单据消息id与返回内容
                            Sql = "update EXPETRAV set IsSp='1' where billno='" + traApprClass.BillNo + "'";

                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("差旅费申请审批日志", "\r\n更新EXPETRAV表:" + Sql.ToString() + "\r\n");
                            }

                            obj = da.ExecSql(Sql);

                            if (obj == null)
                            {
                                context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                                return;
                            }

                            #region 调用审核存储过程

                            billno        = traApprClass.BillNo;
                            keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, AuditingGuid, ProName);
                            if (keyValuePairs["ReturnValue"].ToString() != "0")
                            {
                                ToolsClass.TxtLog("差旅费申请审批日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n");
                                Sql = "update EXPETRAV set IsSp='0' where billno='" + traApprClass.BillNo + "'";

                                obj = da.ExecSql(Sql);
                                if (obj == null)
                                {
                                    context.Response.Write("{\"errmsg\":\"更新审批状态出错(DD6006)\",\"errcode\":1}");
                                    return;
                                }

                                Sql = $"update ApprovalComments set ApprovalComments='',Urls='',ApprovalStatus='0',ApprovalDate='{DateTime.Now}',DDMessageId='' where BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}'";
                                ToolsClass.TxtLog("差旅费申请审批日志", "\r\n存储过程报错后执行语句:" + sql + "\r\n" + Sql);
                                SqlHelper.ExecSql(Sql);
                                context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}");
                                return;
                            }
                            #endregion 调用审核存储过程

                            sql         = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'";
                            logComments = da.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(da.GetValue(sql).ToString());
                                logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                            }

                            urlcsjson = ddUrl + $"/clfui/shenpi/index.html?billno={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]["TotalAmount"].ToString() + "¥ 调休: " + dt.Rows[0]["OffDay"].ToString() + "天\r\n申请人: " + traApprClass.OperatorName + "【差旅费】\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发送通知调用钉钉api入参:" + 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;
                            }
                        }
                    }
                    else
                    {
                        ToolsClass.TxtLog("差旅费申请审批日志", "\r\n不给下个人发消息???:" + result + "\r\n");
                        context.Response.Write(result);
                        return;
                    }
                    //var resultgetmul = ;
                    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)
                {
                    Sql = $"update ApprovalComments set ApprovalComments='',Urls='',ApprovalStatus='0',ApprovalDate='{DateTime.Now}',DDMessageId='' where BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}'";
                    SqlHelper.ExecSql(Sql);
                    ToolsClass.TxtLog("差旅费申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel
                    {
                        errcode = "-1",
                        errmsg  = $"单据审批失败,失败原因{ex.Message + ex.StackTrace}"
                    }));
                    context.Response.End();
                }
            }
            //如果是已驳回,给操作人发送通知,将意见及日期保存到ApprovalComments表,并改变状态,,改变出差申请表中的状态,改为2,代表已驳回
            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 BillClassId='{traApprClass.BillClassId}' and NodeNumber ='{int.Parse(nodeNumber) + 1}'";
                da.ExecSql(Sql);
                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("差旅费申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                }

                //更新单据消息id与返回内容
                Sql = "update EXPETRAV set IsSp='" + traApprClass.IsSp + "',isAuditing = '1' where billno='" + traApprClass.BillNo + "'";

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("差旅费申请审批日志", "\r\n操作EXPETRAV表" + Sql.ToString() + "\r\n");
                }

                obj = da.ExecSql(Sql);

                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                    return;
                }

                //给当前节点以前的人及申请人发送通知,通知已驳回,并改变出差申请表中的状态
                sql         = "";
                sql         = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{traApprClass.BillNo}' and BillClassId='{traApprClass.BillClassId}'";
                logComments = da.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(da.GetValue(sql).ToString());
                    logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                }

                urlcsjson = ddUrl + $"/clfui/shenpi/index.html?billno={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]["TotalAmount"].ToString() + "¥ 调休: " + dt.Rows[0]["OffDay"].ToString() + "天\r\n申请人: " + traApprClass.OperatorName + "【差旅费】\r\n审批意见: " + traApprClass.AuditingIdea + "\"}}}";

                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发送通知调用钉钉api入参:" + 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 EXPETRAV set HangState = '0',HangDDIDs = '' where billno = '{traApprClass.BillNo}'";
                da.ExecSql(sql);

                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;
            }
        }
Example #2
0
        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 ymadk = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da        = new DbHelper.SqlHelper("SqlServer", connectionString);
            SqlHelper = new BankDbHelper.SqlHelper("SqlServer", connectionString);
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //获取请求json
            using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
            {
                CsJson = reader.ReadToEnd();
            }
            GetMulParams getMulParams = new GetMulParams();
            string       result       = string.Empty;

            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");
            }

            //前端传入数据
            TravelApprovalMul traApprClass = new TravelApprovalMul();

            traApprClass = (TravelApprovalMul)JsonConvert.DeserializeObject(CsJson, typeof(TravelApprovalMul));

            string path = context.Request.Path.Replace("Approval/TSPM.ashx", "tasp");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

            ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + traApprClass.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
            if (sign != traApprClass.Sign)
            {
                context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                return;
            }

            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

                #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.StartDate,b.EndDate from  FlowEmployee a left join (select convert(varchar(20), min(b.StartDate), 23) StartDate,convert(varchar(20), max(EndDate), 23) EndDate from  TravelReq a left join TravelReqDetail b on a.billno = b.billno where a.billno = '" + traApprClass.BillNo + "' group by a.billno) b on 1 = 1 where a.employeecode = '" + userXqClass.jobnumber + "'";
                obj = da.GetDataTable(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"用户不存在(DD9002)\",\"errcode\":1}");
                    return;
                }
                dt = obj as DataTable;
                if (dt.Rows.Count == 0)
                {
                    context.Response.Write("{\"errmsg\":\"申请信息不存在(DD9003)\",\"errcode\":1}");
                    return;
                }
                AuditingGuid = dt.Rows[0]["guid"].ToString();

                #endregion 获取用户guid

                //判断当前是流程节点中的哪个流程
                Sql = $"select count( DISTINCT  NodeNumber) NodeNumber  from ApprovalComments where BillNo ='{traApprClass.BillNo}'";
                //得到当前流程节点的数量
                string nodeNumber = da.GetValue(Sql).ToString();
                //得到当前流程信息
                NodeInfo[]    NodeInfo    = (NodeInfo[])JsonConvert.DeserializeObject(da.GetValue($"select  ProcessNodeInfo from TravelReq 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();
                if (traApprClass.IsAuditing == "1")
                {
                    audiIdea = "同意";
                }
                else if (traApprClass.IsAuditing == "2")
                {
                    audiIdea = "驳回";
                }
                else
                {
                    audiIdea = "抄送";
                }

                //如果审批人意见为同意
                if (audiIdea == "同意" || audiIdea == "抄送")
                {
                    //将意见及日期保存到ApprovalComments表,并改变状态
                    Sql = "";
                    Sql = $"update ApprovalComments set ApprovalComments='{traApprClass.AuditingIdea}',Urls='{JsonConvert.SerializeObject(traApprClass.Urls)}',ApprovalStatus='{traApprClass.IsAuditing}',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}'";
                    da.ExecSql(Sql);
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                    }

                    bool processIsEnd = false;
                    //判断当前节点是领导还是非领导
                    Sql = "";
                    // 1 2 3 null
                    Sql = $"select  distinct  IsLeader IsLeader, IsAndOr IsAndOr from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}'  and BillClassId='{traApprClass.BillClassId}'";
                    DataTable IsLeader = da.GetDataTable(Sql);

                    if (IsLeader.Rows[0]["IsLeader"].ToString() == "1")
                    {
                        //领导为一次审批或者会签
                        if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                        {
                            Sql = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                processIsEnd = true;
                            }
                        }
                        //领导为或签
                        else if (IsLeader.Rows[0]["IsAndOr"].ToString() == "3")
                        {
                            processIsEnd = true;
                            Sql          = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                Sql = "";
                                Sql = $"update ApprovalComments set ApprovalStatus='1',ApprovalComments='工号为{userXqClass.jobnumber}的审批人已签',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}' and ApprovalStatus='0'";
                                da.ExecSql(Sql);
                            }

                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                            }
                        }
                    }

                    //如果不是领导
                    if (IsLeader.Rows[0]["IsLeader"].ToString() != "1")
                    {
                        if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                        {
                            Sql = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                processIsEnd = true;
                            }
                        }
                        else if (IsLeader.Rows[0]["IsAndOr"].ToString() == "3")
                        {
                            processIsEnd = true;
                            Sql          = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                Sql = "";
                                Sql = $"update ApprovalComments set ApprovalStatus='1',ApprovalComments='工号为{userXqClass.jobnumber}的审批人已签',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}' and ApprovalStatus='0'";
                                da.ExecSql(Sql);
                            }

                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                            }
                        }
                        else
                        {
                            processIsEnd = true;
                        }
                    }
                    //可以给下个人发送消息
                    if (processIsEnd)
                    //如果当前流程节点走完
                    {
                        //判断当前单号是否已经结束
                        sql = "";
                        sql = $"select IsAuditing from TravelReq where BillNo ='{traApprClass.BillNo}'";
                        if (da.GetValue(sql).ToString() != "0")
                        {
                            result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                            ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                            context.Response.Write(result);
                            return;
                        }
                        //判断是否是根结点,判断数量(去重)是否小于流程的长度
                        //是否是最后一个流程
                        // if (int.Parse(nodeNumber) < NodeInfo.Length && da.GetValue($"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'").ToString() != "0")
                        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(da.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 = da.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 = da.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(da.GetValue(sql).ToString());
                                logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                            }
                            urlcsjson = ddUrl + $"/shenpi/index.html?billno={traApprClass.BillNo}&BillClassId={traApprClass.BillClassId}&showmenu=false";
                            urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                            CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"出发日期: " + dt.Rows[0]["StartDate"].ToString() + "\r\n申请人: " + traApprClass.OperatorName + "【出差】\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;
                            }
                            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 + "tasp");
                                        webrequest.Method         = "post";
                                        new Action(() =>
                                        {
                                            fasongqingqiu ad = new fasongqingqiu
                                            {
                                                BillNo       = traApprClass.BillNo,
                                                DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                                IsAuditing   = "3",
                                                DDOperatorId = traApprClass.DDOperatorId,
                                                OperatorName = traApprClass.OperatorName,
                                                BillClassId  = traApprClass.BillClassId
                                                ,
                                                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 (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 = 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() == traApprClass.DDOperatorId)
                                        {
                                            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "tasp");
                                            webrequest.Method         = "post";
                                            new Action(() =>
                                            {
                                                fasongqingqiu ad = new fasongqingqiu
                                                {
                                                    BillNo       = traApprClass.BillNo,
                                                    DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                                    IsAuditing   = "1",
                                                    DDOperatorId = traApprClass.DDOperatorId,
                                                    OperatorName = traApprClass.OperatorName,
                                                    BillClassId  = traApprClass.BillClassId,
                                                    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();
                                                    }
                                            }).Invoke();
                                        }
                                    }
                                });
                            }
                        }
                        //如果是最后一级
                        //给申请人发送审批意见  给之前的人发
                        //获取现在的审批意见
                        else
                        {
                            //更新单据消息id与返回内容
                            Sql = "update TravelReq set isauditing='1',auditingdate=getdate()  where billno='" + traApprClass.BillNo + "'";
                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作TravelReq表:" + Sql.ToString() + "\r\n");
                            }

                            obj         = da.ExecSql(Sql);
                            sql         = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and BillClassId='{traApprClass.BillClassId}'";
                            logComments = da.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(da.GetValue(sql).ToString());
                                logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                            }
                            urlcsjson = ddUrl + $"/shenpi/index.html?billno={traApprClass.BillNo}&BillClassId={traApprClass.BillClassId}&showmenu=false";
                            urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                            CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"出发日期: " + dt.Rows[0]["StartDate"].ToString() + "\r\n申请人: " + traApprClass.OperatorName + "【出差】\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;
                            }
                        }
                    }
                    result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                    ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                    context.Response.Write(result);
                    return;
                }
                //如果是已驳回,给操作人发送通知,将意见及日期保存到ApprovalComments表,并改变状态,,改变出差申请表中的状态,改为2,代表已驳回
                if (audiIdea == "驳回")
                {
                    //将意见及日期保存到ApprovalComments表,并改变状态
                    Sql = "";
                    Sql = $"update ApprovalComments set ApprovalComments='{traApprClass.AuditingIdea}',Urls='{JsonConvert.SerializeObject(traApprClass.Urls)}',ApprovalStatus='{traApprClass.IsAuditing}',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}' and ApprovalID='{userXqClass.jobnumber}' and NodeNumber ='{int.Parse(nodeNumber) + 1}'  and BillClassId='{traApprClass.BillClassId}'";
                    da.ExecSql(Sql);
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                    }

                    bool processIsEnd = false;
                    //判断当前节点是领导还是非领导
                    Sql = "";
                    // 1 2 3 null
                    Sql = $"select  distinct  IsLeader IsLeader, IsAndOr IsAndOr from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}'  and BillClassId='{traApprClass.BillClassId}'";
                    DataTable IsLeader = da.GetDataTable(Sql);

                    if (IsLeader.Rows[0]["IsLeader"].ToString() == "1")
                    {
                        //领导为依次审批或者会签
                        if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                        {
                            processIsEnd = true;
                        }
                        //领导为或签
                        else
                        {
                            Sql = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                processIsEnd = true;
                            }
                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                            }
                        }
                    }

                    //如果不是领导
                    if (IsLeader.Rows[0]["IsLeader"].ToString() != "1")
                    {
                        if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                        {
                            processIsEnd = true;
                        }
                        else
                        {
                            Sql = "";
                            // 1 2 3 null
                            Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                            //当前节点未完成
                            if (da.GetValue(Sql).ToString() != "0")
                            {
                                processIsEnd = false;
                                result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                                context.Response.Write(result);
                                return;
                            }
                            else
                            {
                                processIsEnd = true;
                            }
                            if (isWrite == "1")
                            {
                                ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                            }
                        }
                    }
                    if (processIsEnd)
                    {
                        //更新单据消息id与返回内容
                        Sql = "update TravelReq set isauditing='2',auditingdate=getdate()  where billno='" + traApprClass.BillNo + "'";
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作TravelReq表:" + Sql.ToString() + "\r\n");
                        }

                        obj = da.ExecSql(Sql);
                        //给当前节点以前的人及申请人发送通知,通知已驳回,并改变出差申请表中的状态
                        sql         = "";
                        sql         = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and BillClassId='{traApprClass.BillClassId}'";
                        logComments = da.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(da.GetValue(sql).ToString());
                            logcoments.Append(logComments.Rows[i]["ApprovalName"].ToString() + ":" + logComments.Rows[i]["ApprovalComments"].ToString());
                        }
                        urlcsjson = ddUrl + $"/shenpi/index.html?billno={traApprClass.BillNo}&BillClassId={traApprClass.BillClassId}&showmenu=false";
                        urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                        CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"出发日期: " + dt.Rows[0]["StartDate"].ToString() + "\r\n申请人: " + traApprClass.OperatorName + "【出差】\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;
                        }

                        result = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                        ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n返回前端信息:" + result + "\r\n");
                        context.Response.Write(result);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
Example #3
0
        /// <summary>
        /// 保存意见,判断单据状态
        /// </summary>
        /// <returns></returns>
        public static bool SaveComments(TravelApprovalMul traApprClass, GetUserXq userXqClass, string nodeNumber, HttpContext context, string ddUrl, string logType, out string result)
        {
            string    connectionString = ToolsClass.GetConfig("DataOnLine");
            SqlHelper SqlHelper        = new SqlHelper("SqlServer", connectionString);

            result = string.Empty;
            string       IsLocalHost  = traApprClass.IsLocalHost == null ? "0" : traApprClass.IsLocalHost;
            string       ymadk        = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";
            GetMulParams getMulParams = new GetMulParams();
            //将意见及日期保存到ApprovalComments表,并改变状态
            string 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);
            ToolsClass.TxtLog(logType, "\r\n操作ApprovalComments表:" + Sql + "\r\n");
            bool processIsEnd = false;

            //判断当前节点是领导还是非领导
            Sql = "";
            // 1 2 3 null
            Sql = $"select  distinct  IsLeader IsLeader, IsAndOr IsAndOr from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}'  and BillClassId='{traApprClass.BillClassId}'";
            DataTable IsLeader = SqlHelper.GetDataTable(Sql);

            if (IsLeader.Rows[0]["IsLeader"].ToString() == "1")
            {
                //领导为一次审批或者会签
                if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                {
                    Sql = "";
                    // 1 2 3 null
                    Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                    //当前节点未完成
                    if (SqlHelper.GetValue(Sql).ToString() != "0")
                    {
                        if (IsLocalHost == "0")
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            // context.Response.Write(result);
                        }
                        else
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(new ResultGetMulParams {
                                errcode = "0", errmsg = "", NextUrl = ""
                            });
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            // context.Response.Write(result);
                        }
                        return(processIsEnd);
                    }
                    else
                    {
                        processIsEnd = true;
                    }
                }
                //领导为或签
                else if (IsLeader.Rows[0]["IsAndOr"].ToString() == "3")
                {
                    processIsEnd = true;
                    Sql          = "";
                    // 1 2 3 null
                    Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                    //当前节点未完成
                    if (SqlHelper.GetValue(Sql).ToString() != "0")
                    {
                        if (IsLocalHost == "0")
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            //context.Response.Write(result);
                        }
                        else
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(new ResultGetMulParams {
                                errcode = "0", errmsg = "", NextUrl = ""
                            });
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            // context.Response.Write(result);
                        }
                        return(processIsEnd);
                    }
                    else
                    {
                        Sql = "";
                        Sql = $"update ApprovalComments set ApprovalStatus='1',ApprovalComments='工号为{userXqClass.jobnumber}的审批人已签',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}' and ApprovalStatus='0'";
                        SqlHelper.ExecSql(Sql);
                    }
                    ToolsClass.TxtLog(logType, "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                }
            }

            //如果不是领导
            if (IsLeader.Rows[0]["IsLeader"].ToString() != "1")
            {
                if (IsLeader.Rows[0]["IsAndOr"].ToString() == "1" || IsLeader.Rows[0]["IsAndOr"].ToString() == "2")
                {
                    Sql = "";
                    // 1 2 3 null
                    Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                    //当前节点未完成
                    if (SqlHelper.GetValue(Sql).ToString() != "0")
                    {
                        if (IsLocalHost == "0")
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            //context.Response.Write(result);
                        }
                        else
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(new ResultGetMulParams {
                                errcode = "0", errmsg = "", NextUrl = ""
                            });
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            //context.Response.Write(result);
                        }
                        return(processIsEnd);
                    }
                    else
                    {
                        processIsEnd = true;
                    }
                }
                else if (IsLeader.Rows[0]["IsAndOr"].ToString() == "3")
                {
                    processIsEnd = true;
                    Sql          = "";
                    // 1 2 3 null
                    Sql = $"select  count(*) from ApprovalComments where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and ApprovalStatus='0'  and BillClassId='{traApprClass.BillClassId}'";
                    //当前节点未完成
                    if (SqlHelper.GetValue(Sql).ToString() != "0")
                    {
                        if (IsLocalHost == "0")
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(getMulParams.resultGetMulParams(ymadk, traApprClass.DDAuditingId, ddUrl, SqlHelper));
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            // context.Response.Write(result);
                        }
                        else
                        {
                            processIsEnd = false;
                            result       = JsonConvert.SerializeObject(new ResultGetMulParams {
                                errcode = "0", errmsg = "", NextUrl = ""
                            });
                            ToolsClass.TxtLog(logType, "\r\n返回前端信息:" + result + "\r\n");
                            //  context.Response.Write(result);
                        }
                        return(processIsEnd);
                    }
                    else
                    {
                        Sql = "";
                        Sql = $"update ApprovalComments set ApprovalStatus='1',ApprovalComments='工号为{userXqClass.jobnumber}的审批人已签',ApprovalDate='{DateTime.Now}' where BillNo ='{traApprClass.BillNo}'  and NodeNumber ='{int.Parse(nodeNumber) + 1}' and BillClassId='{traApprClass.BillClassId}' and ApprovalStatus='0'";
                        SqlHelper.ExecSql(Sql);
                    }
                    ToolsClass.TxtLog(logType, "\r\n操作ApprovalComments表:" + Sql + "\r\n");
                }
                else
                {
                    processIsEnd = true;
                }
            }

            return(processIsEnd);
        }
Example #4
0
        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();
            }
        }