示例#1
0
        /// <summary>
        /// 查询数据库
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        private DataSet QueryDataBase(List <SQLBuilder> query)
        {
            DataSet ds = new DataSet()
            {
                CaseSensitive = false
            };

            if (query.Count > 0)
            {
                SqlCommand command = new SqlCommand(
                    //拼接SQL
                    query.Select(builder => builder.SQL)
                    .Aggregate((a, b) => a.Append(b).AppendLine()).ToString()
                    );

                //添加参数
                query.SelectMany(builder => builder.Parms)
                .Distinct(new SqlParameterComparer())
                .Each(p => command.Parameters.Add(p));

                //查询SQL名称列表
                var names = query.Select(builder => builder.Name).ToArray();
                var conn  = new DbHelper.SqlHelper("");

                if (string.IsNullOrEmpty(_connectionkey) == true)
                {
                    throw new ArgumentNullException("_connectionkey 不能为空");
                }

                if (string.IsNullOrEmpty(_connectionkey) == false)
                {
                    conn = new DbHelper.SqlHelper(_connectionkey);
                }

                try
                {
                    using (var reader = conn.GetDataReader(command))
                    {
                        ds.Load(reader, LoadOption.PreserveChanges, names);
                    }
                }
                finally
                {
                    conn.Dispose();
                }
            }

            return(ds);
        }
示例#2
0
        string ddUrl = "";                                            //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", "");
            //#微应用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("DDLog", "\r\nTxfAudi=>入参:" + CsJson + "\r\n");
            }

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

            traApprClass = (TravelApproval)JsonConvert.DeserializeObject(CsJson, typeof(TravelApproval));
            try
            {
                if (traApprClass.IsSp == "1")
                {
                    audiIdea = "同意";
                }
                else if (traApprClass.IsSp == "2")
                {
                    audiIdea = "驳回";
                }
                else
                {
                    audiIdea = "抄送";
                }

                if (traApprClass.FeeType == "01")
                {
                    //市内交通费
                    billTypeNo = "100520005015";
                    ProName    = "EXPEAUDITING";
                    typeName   = "交通费";
                    typeUrl    = ddUrl + "/jtfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "02")
                {
                    //通讯费
                    billTypeNo = "100520005020";
                    ProName    = "EXPEAUDITING";
                    typeName   = "通讯费";
                    typeUrl    = ddUrl + "/txfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "03")
                {
                    //车辆费
                    billTypeNo = "100520005025";
                    ProName    = "EXPEAUDITING";
                    typeName   = "车辆费";
                    typeUrl    = ddUrl + "/clui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "04")
                {
                    //房租费
                    billTypeNo = "100520005030";
                    ProName    = "EXPEAUDITING";
                    typeName   = "房租费";
                    typeUrl    = ddUrl + "/fzfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "05")
                {
                    //水费
                    billTypeNo = "100520005035";
                    ProName    = "EXPEAUDITING";
                    typeName   = "水费";
                    typeUrl    = ddUrl + "/sfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "06")
                {
                    //电费
                    billTypeNo = "100520005040";
                    ProName    = "EXPEAUDITING";
                    typeName   = "电费";
                    typeUrl    = ddUrl + "/dfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "00")
                {
                    //招待费
                    billTypeNo = "100520005010";
                    ProName    = "EXPEAUDITING";
                    typeName   = "招待费";
                    typeUrl    = ddUrl + "/zdfui/shenpi/index.html?billno=";
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"提交的报销类型不存在(DD9001)\",\"errcode\":1}");
                    return;
                }

                #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

                #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
                if (traApprClass.FeeType == "00")
                {
                    Sql = "select top 1 a.Guid,b.BillCount,b.FeeAmount from  Employee a left join (select BillCount,FeeAmount from EXPEENTEMENT where billno = '[申请号]') b on 1 = 1 where a.employeecode = '[工号]'";
                }
                else
                {
                    Sql = "select top 1 a.Guid,b.BillCount,b.FeeAmount from  Employee a left join (select BillCount,FeeAmount from EXPEOTHER where billno = '[申请号]') b on 1 = 1 where a.employeecode = '[工号]'";
                }
                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;
                AuditingGuid = dt.Rows[0]["Guid"].ToString();
                #endregion

                #region 更新审批信息
                if (traApprClass.FeeType == "00")
                {
                    //更新单据消息id与返回内容
                    Sql = "update EXPEENTEMENT set IsSp='" + traApprClass.IsSp + "',auditingidea='" + traApprClass.AuditingIdea + "',DDAuditingId='" + traApprClass.DDAuditingId + "',auditingguid='" + AuditingGuid + "' where billno='" + traApprClass.BillNo + "'";
                }
                else
                {
                    //更新单据消息id与返回内容
                    Sql = "update EXPEOTHER set IsSp='" + traApprClass.IsSp + "',auditingidea='" + traApprClass.AuditingIdea + "',DDAuditingId='" + traApprClass.DDAuditingId + "',auditingguid='" + AuditingGuid + "' where billno='" + traApprClass.BillNo + "'";
                }

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nTxfAudi=>update:" + Sql.ToString() + "\r\n");
                }

                obj = da.ExecSql(Sql);

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

                #region 调用审核存储过程
                if (traApprClass.IsSp == "1")
                {
                    billno = traApprClass.BillNo;
                    if (!sqlPro())
                    {
                        if (traApprClass.FeeType == "00")
                        {
                            Sql = "update EXPEENTEMENT set IsSp='0',auditingidea=null,DDAuditingId=null,auditingguid=null where billno='" + traApprClass.BillNo + "'";
                        }
                        else
                        {
                            Sql = "update EXPEOTHER set IsSp='0',auditingidea=null,DDAuditingId=null,auditingguid=null where billno='" + traApprClass.BillNo + "'";
                        }

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

                        context.Response.Write("{\"errmsg\":\"" + ProResult + "(DD9003)\",\"errcode\":1}");
                        return;
                    }
                }
                #endregion

                #region 发送工作通知消息
                CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + traApprClass.DDAuditingId + "," + traApprClass.CopyPerson + "," + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + typeUrl + "" + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"金额: " + dt.Rows[0]["FeeAmount"].ToString() + "¥ 发票: " + dt.Rows[0]["BillCount"].ToString() + "张\r\n申请人: " + traApprClass.OperatorName + "【" + typeName + "】\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("DDLog", "\r\nTxfAudi=>CsJson:" + CsJson + "FhJson\r\n:" + FhJson);
                }

                XXTZ xxtzClass2 = new XXTZ();
                xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode    = xxtzClass2.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的报销申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#3
0
        string ddUrl = "";                 //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", "");
            //#微应用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("DDLog", "\r\nProInfo=>入参:" + CsJson + "\r\n");
            }

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

            traApprClass = (TravelApproval)JsonConvert.DeserializeObject(CsJson, typeof(TravelApproval));
            try
            {
                if (traApprClass.IsAuditing == "1")
                {
                    audiIdea = "同意";
                }
                else if (traApprClass.IsAuditing == "2")
                {
                    audiIdea = "驳回";
                }
                else
                {
                    audiIdea = "抄送";
                }
                #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

                #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

                #region 发送工作通知消息
                CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + traApprClass.DDAuditingId + "," + traApprClass.CopyPerson + "," + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + ddUrl + "/shenpi/index.html?billno=" + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "【" + audiName + "】\",\"text\":\"出发日期: " + dt.Rows[0]["StartDate"].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("DDLog", "\r\nProInfo=>CsJson:" + CsJson + "FhJson\r\n:" + FhJson);
                }

                XXTZ xxtzClass2 = new XXTZ();
                xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode    = xxtzClass2.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的出差申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 发送普通会话消息
                //if (traApprClass.Cid != "" && traApprClass.Cid != null)
                //{
                //    CsJson = "{\"cid\":\"" + traApprClass.Cid + "\",\"sender\":\"" + traApprClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"http://oa.romens.cn:8090/shenpi/index.html?billno=" + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"已" + audiIdea + "\",\"text\":\"" + audiName + audiIdea + "了审批\"}}}";

                //    url = "https://oapi.dingtalk.com/message/send_to_conversation?access_token=" + access_token;
                //    FhJson = ToolsClass.ApiFun("POST", url, CsJson);
                //    if (isWrite == "1")
                //    {
                //        ToolsClass.TxtLog("DDLog", "\r\nProInfo=>CsJson:" + CsJson + "FhJson\r\n:" + FhJson);
                //    }

                //    XXTZ xxtzClass = new XXTZ();
                //    xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                //    errcode = xxtzClass.errcode;
                //    if (errcode != 0)
                //    {
                //        context.Response.Write("{\"errmsg\":\"您的出差申请消息通知失败(DD6004)\",\"errcode\":1}");
                //        return;
                //    }
                //}
                #endregion

                #region 更新审批信息
                //更新单据消息id与返回内容
                Sql = "update TravelReq set isauditing='" + traApprClass.IsAuditing + "',auditingdate=getdate(),auditingidea='" + traApprClass.AuditingIdea + "',DDAuditingId='" + traApprClass.DDAuditingId + "',auditingguid='" + AuditingGuid + "',auditingname='" + audiName + "' where billno='" + traApprClass.BillNo + "'";

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nProInfo=>update:" + Sql.ToString() + "\r\n");
                }

                obj = da.ExecSql(Sql);

                if (obj == null)
                {
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("DDLog", "\r\nProInfo=>update:" + Sql.ToString() + "\r\n");
                    }
                    context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                    return;
                }
                #endregion

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#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 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();
            }
        }
示例#5
0
        private StringBuilder FhJson = new StringBuilder();//返回JSON

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                    errcode = "1", errmsg = "请求方式不允许,请使用POST方式", Detail = null
                }));
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

            isWrite = ToolsClass.GetConfig("isWrite");

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

            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
            //json转Hashtable
            Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
            Hashtable returnhash = jgobj as Hashtable;

            if (returnhash == null)
            {
                ToolsClass.TxtLog("查询审批信息日志", $"\r\n入参{ CsJson}\r\n");
                context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                    errcode = "1", errmsg = "报文格式错误(DD0003)", Detail = null
                }));
                return;
            }
            string path = context.Request.Path.Replace("Travel/SelApproval.ashx", "selapproval");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

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

            WTypeId      = returnhash["WTypeId"].ToString();
            SpTypeId     = returnhash["SpTypeId"].ToString();
            selValue     = returnhash["Value"].ToString().Trim();
            DDOperatorId = returnhash["DDOperatorId"].ToString();
            if (isWrite == "1")
            {
                ToolsClass.TxtLog("查询审批信息日志", $"\r\n入参:{CsJson}\r\n");
            }

            #region 查询审批信息

            string result = string.Empty;
            try
            {
                sql = "select selectsql from  dataquerydefine where dataquerytype='20190605DD_SelApproval'";
                obj = da.GetValue(sql);
                if (obj == null)
                {
                    context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                        errcode = "0", errmsg = "数据源表中没有进行配置", Detail = null
                    }));
                    return;
                }
                sql = obj.ToString();

                #region 查询SQL语句

                //根据selValue判断是否去哪查询

                if (WTypeId == "1")//我审批的
                {
                    //待审批的
                    if (SpTypeId == "0")
                    {
                        sql = $"select Top 80 * from  (select a.BillNo BillNo,a.IsAccount, b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea ,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount,a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费'  when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType,  BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where BillNo in (select BillNo from ApprovalComments where ApprovalID = (select distinct EmployeeCode from FlowEmployee where ddid = '{DDOperatorId}') and persontype = 2 and ApprovalStatus = '0' and BillNo<> '')  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') and issp = '0' and isnull(HangState,'0')='0'   order by BillDate asc";
                    }

                    //已审批的
                    if (SpTypeId == "1")
                    {
                        sql = $"select Top 80 * from(select a.BillNo,0 IsAccount, 0 BillCount, 0 FeeAmount, isnull(a.IsAuditing, 0) IsSp, A.OperatorName + '提交的出差申请' + (case when isnull(a.IsAuditing, 0) = 1 then '[已同意]' when isnull(a.IsAuditing, 0) = 2 then '[已驳回]' else '' end ) Title,11 FType, BillDate,a.TravelReason Notes, a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,'' IsInsteadApply,'' InsteadOperatorGuid from TravelReq A union select a.BillNo BillNo,a.IsAccount, b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount,a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费' when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where    BillNo in (select BillNo from ApprovalComments where ApprovalID = (select distinct EmployeeCode from FlowEmployee where ddid = '{DDOperatorId}') and persontype = 2 and ApprovalStatus in (1, 2) and BillNo<> '')  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') order by BillDate desc";
                    }

                    //取一条待审批的
                    if (SpTypeId == "2")
                    {
                        sql = $"select Top 1 * from (select a.BillNo BillNo,a.IsAccount,  b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea ,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费' when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType,  BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount,  a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where BillNo in (select BillNo from ApprovalComments where ApprovalID = (select distinct EmployeeCode from FlowEmployee where ddid = '{DDOperatorId}') and persontype = 2 and ApprovalStatus = '0' and BillNo<> '')  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') and issp = '0' and isnull(HangState,'0')='0' order by BillDate asc";
                    }
                    //出纳和集团领导查看已付款的
                    if (SpTypeId == "3")
                    {
                        //sql = $"select Top 80 * from(select a.BillNo,0 IsAccount, 0 BillCount, 0 FeeAmount, isnull(a.IsAuditing, 0) IsSp, A.OperatorName + '提交的出差申请' + (case when isnull(a.IsAuditing, 0) = 1 then '[已同意]' when isnull(a.IsAuditing, 0) = 2 then '[已驳回]' else '' end ) Title,11 FType, BillDate,a.TravelReason Notes, a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,'' IsInsteadApply,'' InsteadOperatorGuid from TravelReq A union select a.BillNo BillNo,a.IsAccount, b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount,a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费' when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where isAccount = '1'  and BillNo in (select BillNo from ApprovalComments where ApprovalID = (select distinct EmployeeCode from FlowEmployee where ddid = '{DDOperatorId}') and persontype = 2 and ApprovalStatus =1 and BillNo<> '')  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') order by BillDate desc";
                        sql = $"select Top 80 * from(select a.BillNo,0 IsAccount, 0 BillCount, 0 FeeAmount, isnull(a.IsAuditing, 0) IsSp, A.OperatorName + '提交的出差申请' + (case when isnull(a.IsAuditing, 0) = 1 then '[已同意]' when isnull(a.IsAuditing, 0) = 2 then '[已驳回]' else '' end ) Title,11 FType, BillDate,a.TravelReason Notes, a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,'' IsInsteadApply,'' InsteadOperatorGuid from TravelReq A union select a.BillNo BillNo,a.IsAccount, b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount,a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费' when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where isAccount = '1'  and BillNo in (select BillNo from ApprovalComments where persontype = 2 and ApprovalStatus =1 and BillNo<> '')  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') order by BillDate desc";
                    }

                    //查询待审批已挂起的
                    if (SpTypeId == "4")
                    {
                        sql = $"select Top 80 * from (select a.BillNo BillNo,a.IsAccount,  b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea ,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费' when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType,  BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount,  a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState,a.HangDDIDs from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where HangDDIDs like '%{DDOperatorId}%'  and (Title like '%{selValue}%' or BillNo like '%{selValue}%') and issp = '0' and isnull(HangState,'0')='1' order by BillDate asc";
                    }
                }
                if (WTypeId == "2")//我发起的
                {
                    sql = sql.Replace("BillNo in (select BillNo from ApprovalComments where persontype [审批类型] and BillNo <> '')", $"'{DDOperatorId}'   in(DDOperatorId,InsteadOperatorGuid)");
                    //sql = sql.Replace("BillNo in (select BillNo from ApprovalComments where ApprovalID =(select distinct EmployeeCode from Employee where ddid ='[钉钉ID]') and persontype [审批类型] and BillNo <> '')", $"'{DDOperatorId}'   in(DDOperatorId,InsteadOperatorGuid)");
                }
                //else if (WTypeId == "3")//抄送我的
                //{
                //    sql = sql.Replace("[审批类型]", "=3");
                //}
                else if (WTypeId == "3")//抄送我的
                {
                    context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                        errcode = "0", errmsg = "查询数据为空", Detail = null
                    }));
                    return;
                }

                if ((SpTypeId == "0" || SpTypeId == "2") && WTypeId != "1")//待审批
                {
                    sql = sql.Replace("[审批状态]", "in(0,3)");
                }
                else if (SpTypeId == "1" && WTypeId != "1")//已审批
                {
                    sql = sql.Replace("[审批状态]", "in(1,2)");
                }

                sql = sql.Replace("[查询条件]", selValue).Replace("[钉钉ID]", DDOperatorId);

                #endregion 查询SQL语句

                ToolsClass.TxtLog("查询审批信息日志", "\r\n查询语句" + sql + "\r\n");
                obj = da.GetDataTable(sql);
                dt  = obj as DataTable;
                string isdt = "0";
                ApprovalOverViewModel         approvalOverViewModel = new ApprovalOverViewModel();
                List <ApprovalOverViewDetail> Detail = new List <ApprovalOverViewDetail>();
                if (dt.Rows.Count > 0)
                {
                    approvalOverViewModel.errcode = "0";
                    approvalOverViewModel.errmsg  = "查询当前人的单据信息成功!";

                    for (int x = 0; x < dt.Rows.Count; x++)
                    {
                        isdt = dt.Rows[x]["IsInsteadApply"].ToString();

                        if (dt.Rows[x]["InsteadOperatorGuid"].ToString() == DDOperatorId && dt.Rows[x]["DDOperatorId"].ToString() != DDOperatorId)
                        {
                            //被别人代替报销的
                            isdt = "2";
                        }
                        sql = "";
                        sql = $"select distinct BillClassId from approvalcomments where billno ='{dt.Rows[x]["BillNo"].ToString()}'";
                        string ftype = dt.Rows[x]["FType"].ToString();
                        if (ftype.Length == 1)
                        {
                            ftype = "0" + ftype;
                        }
                        if (da.GetValue(sql) == null)
                        {
                            Detail.Add(new ApprovalOverViewDetail
                            {
                                IsSp                = dt.Rows[x]["IsSp"].ToString(),
                                AuditingIdea        = dt.Rows[x]["AuditingIdea"].ToString(),
                                BillCount           = dt.Rows[x]["BillCount"].ToString(),
                                BillDate            = dt.Rows[x]["BillDate"].ToString(),
                                BillNo              = dt.Rows[x]["BillNo"].ToString(),
                                CustName            = dt.Rows[x]["CustName"].ToString(),
                                FeeAmount           = dt.Rows[x]["FeeAmount"].ToString(),
                                FType               = ftype,
                                InsteadOperatorGuid = dt.Rows[x]["InsteadOperatorGuid"].ToString(),
                                IsAccount           = dt.Rows[x]["IsAccount"].ToString(),
                                IsInsteadApply      = isdt,
                                Notes               = dt.Rows[x]["Notes"].ToString(),
                                Title               = dt.Rows[x]["Title"].ToString()
                            });
                        }
                        else
                        {
                            Detail.Add(new ApprovalOverViewDetail
                            {
                                IsSp                = dt.Rows[x]["IsSp"].ToString(),
                                BillClassId         = da.GetValue(sql).ToString(),
                                AuditingIdea        = dt.Rows[x]["AuditingIdea"].ToString(),
                                BillCount           = dt.Rows[x]["BillCount"].ToString(),
                                BillDate            = dt.Rows[x]["BillDate"].ToString(),
                                BillNo              = dt.Rows[x]["BillNo"].ToString(),
                                CustName            = dt.Rows[x]["CustName"].ToString(),
                                FeeAmount           = dt.Rows[x]["FeeAmount"].ToString(),
                                FType               = ftype,
                                InsteadOperatorGuid = dt.Rows[x]["InsteadOperatorGuid"].ToString(),
                                IsAccount           = dt.Rows[x]["IsAccount"].ToString(),
                                IsInsteadApply      = isdt,
                                Notes               = dt.Rows[x]["Notes"].ToString(),
                                Title               = dt.Rows[x]["Title"].ToString()
                            });
                        }
                    }
                    approvalOverViewModel.Detail = Detail;
                }
                else
                {
                    context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                        errcode = "0", errmsg = "查询数据为空", Detail = null
                    }));
                    return;
                }
                result = JsonConvert.SerializeObject(approvalOverViewModel);
                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("查询审批信息日志", $"\r\n返回:{result}\r\n");
                }
                context.Response.Write(result);
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write(JsonConvert.SerializeObject(new ApprovalOverViewModel {
                    errcode = "1", errmsg = ex.Message, Detail = null
                }));
                return;
            }

            #endregion 查询审批信息
        }
示例#6
0
        private StringBuilder FhJson = new StringBuilder();//返回JSON

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //string Requestip = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            //if (string.IsNullOrEmpty(Requestip)) { Requestip = context.Request.ServerVariables["REMOTE_ADDR"]; }
            //if (string.IsNullOrEmpty(Requestip)) { Requestip = context.Request.UserHostAddress; }
            //if (string.IsNullOrEmpty(Requestip)) { Requestip = "0.0.0.0"; }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

            //获取请求json
            using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
            {
                CsJson = reader.ReadToEnd();
            }
            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"调用接口入参不能为空(DD0003)\",\"errcode\":1}");
                return;
            }
            ToolsClass.TxtLog("登录后台入参", "入参:" + CsJson.ToString());
            //json转Hashtable
            Object jgobj = ToolsClass.DeserializeObject(CsJson);

            Hashtable returnhash = jgobj as Hashtable;

            byte[] outputb = Convert.FromBase64String(returnhash["UserPwd"].ToString());
            string pwd1    = Encoding.Default.GetString(outputb);

            byte[] outputb2 = Convert.FromBase64String(returnhash["UserName"].ToString());
            string username = Encoding.Default.GetString(outputb2);
            string pwd      = ToolsClass.md5(pwd1 + "fanfanfan", 32);

            try
            {
                sql = $"select employeecode,employeename,pwd from flowEmployee where EmployeeCode='{username}' and pwd = '{pwd}'";
                ToolsClass.TxtLog("登录后台入参", "查询语句" + sql);
                obj = da.GetDataTable(sql);
                dt  = obj as DataTable;
                FhJson.Clear();
                string sign = ToolsClass.md5(username + "Romens1/DingDing2/Login3", 32);
                ToolsClass.TxtLog("登录后台入参", "测试" + sign);
                if (sign != returnhash["Sign"].ToString())
                {
                    context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                    return;
                }
                if (dt.Rows.Count > 0)
                {
                    context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":\"0\"}");
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"用户名不正确或密码错误!\",\"errcode\":1}");
                    return;
                }
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                return;
            }
        }
示例#7
0
        string ddUrl = "";        //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                ToolsClass.TxtLog("DDLog", "\r\nTxfApproval=>入参:" + CsJson + "\r\n");
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\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("DDLog", "\r\nTxfApproval=>入参:" + CsJson + "\r\n");
            }

            TxfClass txfClass = new TxfClass();

            txfClass = (TxfClass)JsonConvert.DeserializeObject(CsJson, typeof(TxfClass));
            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

                if (txfClass.FeeType == "01")
                {
                    //市内交通费
                    billTypeNo = "100520005015";
                    billNoPro  = "JTF";
                    ProName    = "EXPEREFER";
                    typeName   = "交通费";
                    typeUrl    = ddUrl + "/jtfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "02")
                {
                    //通讯费
                    billTypeNo = "100520005020";
                    billNoPro  = "TXF";
                    ProName    = "EXPEREFER";
                    typeName   = "通讯费";
                    typeUrl    = ddUrl + "/txfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "03")
                {
                    //车辆费
                    billTypeNo = "100520005025";
                    billNoPro  = "CLF";
                    ProName    = "EXPEREFER";
                    typeName   = "车辆费";
                    typeUrl    = ddUrl + "/clui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "04")
                {
                    //房租费
                    billTypeNo = "100520005030";
                    billNoPro  = "FZ";
                    ProName    = "EXPEREFER";
                    typeName   = "房租费";
                    typeUrl    = ddUrl + "/fzfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "05")
                {
                    //水费
                    billTypeNo = "100520005035";
                    billNoPro  = "SF";
                    ProName    = "EXPEREFER";
                    typeName   = "水费";
                    typeUrl    = ddUrl + "/sfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "06")
                {
                    //电费
                    billTypeNo = "100520005040";
                    billNoPro  = "DF";
                    ProName    = "EXPEREFER";
                    typeName   = "电费";
                    typeUrl    = ddUrl + "/dfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "00")
                {
                    //招待费
                    billTypeNo = "100520005010";
                    billNoPro  = "ZDF";
                    ProName    = "EXPEREFER";
                    typeName   = "招待费";
                    typeUrl    = ddUrl + "/zdfui/shenpi/index.html?billno=";
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"提交的报销类型不存在(DD9001)\",\"errcode\":1}");
                    return;
                }

                #region 获取申请流水号
                Sql          = "select dbo.GetBillNo('" + billTypeNo + "','" + txfClass.ApplPers + "',getdate())";
                obj          = da.GetValue(Sql);
                billno       = obj.ToString();
                operatorGuid = txfClass.OperatorGuid;
                if (billno == "1")
                {
                    billno = billNoPro + txfClass.ApplPers + DateTime.Now.ToString("yyyyMMdd") + "0001";

                    Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "' and BillDate<>convert(varchar(20),GETDATE(),120)";
                }
                else
                {
                    Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "'";
                }

                obj = da.ExecSql(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新通信费单号出错(DD9002)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 保存信息
                sqlList.Clear();
                sqlTou.Clear();
                if (txfClass.FeeType == "00")
                {
                    sqlTou.Append("insert into EXPEENTEMENT(BillNo,BillDate,OperatorGuid,ApplPers,DDOperatorId,BillCount,FeeAmount,NoCountFee,BearOrga,AppendixUrl,PictureUrl,Notes,SelAuditingGuid,SelAuditingName,CopypersonID,CopyPersonName,CustCode) Values('")
                    .Append(billno).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd")).Append("','")
                    .Append(txfClass.OperatorGuid).Append("','")
                    .Append(txfClass.ApplPers).Append("','")
                    .Append(txfClass.DDOperatorId).Append("','")
                    .Append(txfClass.BillCount).Append("','")
                    .Append(txfClass.FeeAmount).Append("','")
                    .Append(txfClass.NoCountFee).Append("','")
                    .Append(txfClass.BearOrga).Append("','")
                    .Append(txfClass.AppendixUrl).Append("','")
                    .Append(txfClass.PictureUrl).Append("','")
                    .Append(txfClass.Notes).Append("','")
                    .Append(txfClass.SelAuditingGuid).Append("','")
                    .Append(txfClass.SelAuditingName).Append("','")
                    .Append(txfClass.CopypersonID).Append("','")
                    .Append(txfClass.CopyPersonName).Append("','")
                    .Append(txfClass.CustCode).Append("')");
                }
                else
                {
                    sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,OperatorGuid,ApplPers,DDOperatorId,BillCount,FeeAmount,NoCountFee,BearOrga,AppendixUrl,PictureUrl,Notes,SelAuditingGuid,SelAuditingName,CopypersonID,CopyPersonName) Values('")
                    .Append(billno).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd")).Append("','")
                    .Append(txfClass.FeeType).Append("','")
                    .Append(txfClass.OperatorGuid).Append("','")
                    .Append(txfClass.ApplPers).Append("','")
                    .Append(txfClass.DDOperatorId).Append("','")
                    .Append(txfClass.BillCount).Append("','")
                    .Append(txfClass.FeeAmount).Append("','")
                    .Append(txfClass.NoCountFee).Append("','")
                    .Append(txfClass.BearOrga).Append("','")
                    .Append(txfClass.AppendixUrl).Append("','")
                    .Append(txfClass.PictureUrl).Append("','")
                    .Append(txfClass.Notes).Append("','")
                    .Append(txfClass.SelAuditingGuid).Append("','")
                    .Append(txfClass.SelAuditingName).Append("','")
                    .Append(txfClass.CopypersonID).Append("','")
                    .Append(txfClass.CopyPersonName).Append("')");
                }
                sqlList.Add(sqlTou.ToString());

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nTxfApproval=>insert:" + sqlTou.ToString() + "\r\n");
                }
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 调用提交存储过程
                if (!sqlPro())
                {
                    //招待费
                    if (txfClass.FeeType == "00")
                    {
                        sqlList.Clear();
                        Sql = "delete from EXPEENTEMENT where BillNo='" + billno + "'";
                        sqlList.Add(Sql);
                    }
                    else
                    {
                        sqlList.Clear();
                        Sql = "delete from EXPEOTHER where BillNo='" + billno + "'";
                        sqlList.Add(Sql);
                    }
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }

                    context.Response.Write("{\"errmsg\":\"" + ProResult + "(DD9003)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 发送工作通知消息
                url    = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + txfClass.SelAuditingGuid + "," + txfClass.CopypersonID + "," + txfClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + typeUrl + "" + billno + "\",\"picUrl\":\"@\",\"title\":\"" + txfClass.OperatorName + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + txfClass.FeeAmount + "¥  发票: " + txfClass.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + txfClass.Notes + "\"}}}";
                FhJson = ToolsClass.ApiFun("POST", url, CsJson);

                XXTZ xxtzClass = new XXTZ();
                xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode   = xxtzClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的报销申请,消息通知失败(DD9004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#8
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;
            }
        }
示例#9
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }

            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", "");
            //#微应用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("DDLog", "\r\nExpeTravReq=>入参:" + CsJson + "\r\n");
            }

            CLFBX clfbxClass = new CLFBX();

            clfbxClass       = (CLFBX)JsonConvert.DeserializeObject(CsJson, typeof(CLFBX));
            clfbxClass.Notes = Regex.Replace(clfbxClass.Notes, @"[\n\r]", "").Replace("\\", "");
            if (clfbxClass.ExpeTravDetail.Length <= 0)
            {
                context.Response.Write("{\"errmsg\":\"费用明细不允许为空,请添加费用明细(DD7001)\",\"errcode\":1}");
                return;
            }
            try
            {
                operatorGuid = clfbxClass.OperatorGuid;

                #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

                if (clfbxClass.isRe == "1")//是否需要生产新的申请号
                {
                    #region 获取申请流水号
                    Sql    = "select dbo.GetBillNo('DDTrvelReq','" + clfbxClass.JobNumber + "',getdate())";
                    obj    = da.GetValue(Sql);
                    billno = obj.ToString();

                    if (billno == "1")
                    {
                        billno = "CL" + clfbxClass.JobNumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                        Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq' and BillDate<>convert(varchar(20),GETDATE(),120)";
                    }
                    else
                    {
                        Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq'";
                    }
                    obj = da.ExecSql(Sql);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }
                    billno = billno + "_B";
                    #endregion
                }
                else
                {
                    billno = clfbxClass.BillNo;
                }

                #region 保存信息
                sqlList.Clear();
                sqlTou.Clear();
                sqlTou.Append("insert into ExpeTrav(BillNo,BillDate,Notes,OperatorGuid,Applpers,DDOperatorId,BearOrga,CostType,NoCountFee,SelAuditingGuid,CopyPerson,SelAuditingName,CopyPersonName,AppendixUrl,PictureUrl) values('")
                .Append(billno).Append("','")
                .Append(DateTime.Now.ToString("yyyy-MM-dd")).Append("','")
                .Append(clfbxClass.Notes).Append("','")
                .Append(clfbxClass.OperatorGuid).Append("','")
                .Append(clfbxClass.JobNumber).Append("','")
                .Append(clfbxClass.DDOperatorId).Append("','")
                .Append(clfbxClass.BearOrga).Append("','")
                .Append(clfbxClass.CostType).Append("','")
                .Append(clfbxClass.NoCountFee).Append("','")
                .Append(clfbxClass.SelAuditingGuid).Append("','")
                .Append(clfbxClass.CopyPerson).Append("','")
                .Append(clfbxClass.SelAuditingName).Append("','")
                .Append(clfbxClass.CopyPersonName).Append("','")
                .Append(clfbxClass.AppendixUrl).Append("','")
                .Append(clfbxClass.PictureUrl).Append("')");
                sqlList.Add(sqlTou.ToString());

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nExpeTravReq=>insertTou:" + sqlTou.ToString() + "\r\n");
                }

                sqlTou.Clear();
                sqlTou.Append("insert into ExpetravDetail(TripNo,BillNo,Guid,DepaDate,RetuDate,DepaCity,DestCity,DepaCity1,DestCity1,CustCode,DetailNo,AlloDay,OffDay,AlloPric,AlloAmount,OtherFee,TranMode,TranCount,TranAmount,GasAmount,HsrAmount,AccoCount,AccoAmount,CityTrafCount,CityTraAmont,TotalAmount) values('");
                for (int i = 0; i < clfbxClass.ExpeTravDetail.Length; i++)
                {
                    AccoCount     = "0"; // 住宿票张数
                    AccoAmount    = "0"; // 住宿金额
                    CityTrafCount = "0"; // 市内交通票张数
                    CityTraAmount = "0"; // 市内交通金额
                    oneSumAmount  = 0;   //第一行的和
                    SumMony       = SumMony + Double.Parse(clfbxClass.ExpeTravDetail[i].TotalAmount);
                    sqlTiPro.Clear();
                    detailNo = detailNo + 1;
                    TripNo   = 1;
                    sqlTiPro.Append(sqlTou.ToString()).Append(i + 1).Append("','")
                    .Append(billno).Append("',newid(),'")
                    .Append(clfbxClass.ExpeTravDetail[i].DepaDate).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].RetuDate).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].DepaCity3).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].DestCity3).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].DepaCity1).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].DestCity1).Append("','")
                    .Append(clfbxClass.ExpeTravDetail[i].CustCode).Append("','");
                    for (int j = 0; j < clfbxClass.ExpeTravDetail[i].PList.Length; j++)
                    {
                        if (j == 0)
                        {
                            sqlTi.Clear();
                            sqlTi.Append(sqlTiPro.ToString()).Append(detailNo)
                            .Append("','").Append(clfbxClass.ExpeTravDetail[i].AlloDay)
                            .Append("','").Append(clfbxClass.ExpeTravDetail[i].OffDay)
                            .Append("','").Append(clfbxClass.ExpeTravDetail[i].AlloPric)
                            .Append("','").Append(clfbxClass.ExpeTravDetail[i].AlloAmount)
                            .Append("','").Append(clfbxClass.ExpeTravDetail[i].OtherFee);
                            oneSumAmount = oneSumAmount + Double.Parse(clfbxClass.ExpeTravDetail[i].AlloAmount) + Double.Parse(clfbxClass.ExpeTravDetail[i].OtherFee);
                        }

                        if (clfbxClass.ExpeTravDetail[i].PList[j].FType == "火车票" || clfbxClass.ExpeTravDetail[i].PList[j].FType == "飞机票" || clfbxClass.ExpeTravDetail[i].PList[j].FType == "汽车票" || clfbxClass.ExpeTravDetail[i].PList[j].FType == "轮船票")
                        {
                            if (TripNo == 1)
                            {
                                sqlTi.Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Count)
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Amount)
                                .Append("','0','0");
                                oneSumAmount = oneSumAmount + Double.Parse(clfbxClass.ExpeTravDetail[i].PList[j].Amount);
                                detailNo     = detailNo + 1;
                                TripNo       = TripNo + 1;
                            }
                            else
                            {
                                sqlTi2.Clear();
                                sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Count)
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Amount)
                                .Append("','0','0','0','0','0','0','").Append(clfbxClass.ExpeTravDetail[i].PList[j].SumAmount)
                                .Append("')");
                                sqlList.Add(sqlTi2.ToString());
                                detailNo = detailNo + 1;
                                TripNo   = TripNo + 1;
                                ToolsClass.TxtLog("DDLog", "\r\nExpeTravReq=>insertTi:" + sqlTi2.ToString() + "\r\n");
                            }
                        }
                        else if (clfbxClass.ExpeTravDetail[i].PList[j].FType == "自驾")
                        {
                            if (TripNo == 1)
                            {
                                sqlTi.Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].FType)
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Count)
                                .Append("','0','").Append(clfbxClass.ExpeTravDetail[i].PList[j].GasAmount)
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].HsrAmount);

                                oneSumAmount = oneSumAmount + Double.Parse(clfbxClass.ExpeTravDetail[i].PList[j].SumAmount);
                                detailNo     = detailNo + 1;
                                TripNo       = TripNo + 1;
                            }
                            else
                            {
                                sqlTi2.Clear();
                                sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].FType)
                                .Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].Count)
                                .Append("','0','").Append(clfbxClass.ExpeTravDetail[i].PList[j].GasAmount).Append("','").Append(clfbxClass.ExpeTravDetail[i].PList[j].HsrAmount).Append("','0','0','0','0','").Append(clfbxClass.ExpeTravDetail[i].PList[j].SumAmount)
                                .Append("')");
                                sqlList.Add(sqlTi2.ToString());

                                detailNo = detailNo + 1;
                                TripNo   = TripNo + 1;
                                ToolsClass.TxtLog("DDLog", "\r\nExpeTravReq=>insertTi:" + sqlTi2.ToString() + "\r\n");
                            }
                        }
                        else if (clfbxClass.ExpeTravDetail[i].PList[j].FType == "住宿票")
                        {
                            AccoCount    = clfbxClass.ExpeTravDetail[i].PList[j].Count;
                            AccoAmount   = clfbxClass.ExpeTravDetail[i].PList[j].Amount;
                            oneSumAmount = oneSumAmount + Double.Parse(clfbxClass.ExpeTravDetail[i].PList[j].Amount);
                        }
                        else if (clfbxClass.ExpeTravDetail[i].PList[j].FType == "市内交通票")
                        {
                            CityTrafCount = clfbxClass.ExpeTravDetail[i].PList[j].Count;
                            CityTraAmount = clfbxClass.ExpeTravDetail[i].PList[j].Amount;
                            oneSumAmount  = oneSumAmount + Double.Parse(clfbxClass.ExpeTravDetail[i].PList[j].Amount);
                        }
                    }

                    sqlTi.Append("','").Append(AccoCount)
                    .Append("','").Append(AccoAmount)
                    .Append("','").Append(CityTrafCount)
                    .Append("','").Append(CityTraAmount)
                    .Append("','").Append(oneSumAmount).Append("')");

                    sqlList.Add(sqlTi.ToString());
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("DDLog", "\r\nExpeTravReq=>insert:" + sqlTi.ToString() + "\r\n");
                    }
                }
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 调用提交存储过程
                if (!sqlPro())
                {
                    aList.Clear();
                    Sql = "delete from ExpeTrav where BillNo='" + billno + "'";
                    aList.Add(Sql);

                    Sql = "delete from ExpetravDetail where BillNo='" + billno + "'";
                    aList.Add(Sql);

                    Sql = "delete from CUSTIMPLLOG where SourceBill='" + billno + "'";
                    aList.Add(Sql);
                    obj = da.ExecSql(aList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }

                    context.Response.Write("{\"errmsg\":\"" + ProResult + "(DD9003)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 差旅费报销 申请 发送工作通知消息
                url    = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + clfbxClass.SelAuditingGuid + "," + clfbxClass.CopyPerson + "," + clfbxClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + ddUrl + "/clfui/shenpi/index.html?billno=" + billno + "\",\"picUrl\":\"@\",\"title\":\"" + clfbxClass.OperatorName + "的【差旅费】报销申请\",\"text\":\"金额: " + SumMony + " ¥\r\n行程: " + clfbxClass.ExpeTravDetail[0].DepaCity1 + " - " + clfbxClass.ExpeTravDetail[0].DestCity1 + "\r\n申请日期: " + System.DateTime.Now.ToString("yyyy-MM-dd") + "\"}}}";
                FhJson = ToolsClass.ApiFun("POST", url, CsJson);

                XXTZ xxtzClass = new XXTZ();
                xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode   = xxtzClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的差旅费报销申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#10
0
        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");

            da = new DbHelper.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();
            }

            Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
            Hashtable returnhash = jgobj as Hashtable;

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

            ToolsClass.TxtLog("审批信息修改日志", context.Request.Path.ToLower() + "\r\n修改后的数据:" + CsJson + "\r\n");

            string path1 = context.Request.Path.Replace("Approval/ChangeSQDetails.ashx", "changeclfbxdetails");
            string path2 = context.Request.Path.Replace("Approval/ChangeSQDetails.ashx", "changeqitadetails");
            string path3 = context.Request.Path.Replace("Approval/ChangeSQDetails.ashx", "changezddetails");
            string path4 = context.Request.Path.Replace("Approval/ChangeSQDetails.ashx", "changeqtfydetails");
            //验证请求sign
            string sign1 = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32);
            string sign2 = ToolsClass.md5(signUrl + path2 + "Romens1/DingDing2" + path2, 32);
            string sign3 = ToolsClass.md5(signUrl + path3 + "Romens1/DingDing2" + path3, 32);
            string sign4 = ToolsClass.md5(signUrl + path4 + "Romens1/DingDing2" + path4, 32);

            ToolsClass.TxtLog("生成的sign", "生成的" + "sign:" + sign1 + ";" + sign2 + ";" + sign3 + ";" + sign4 + ";" + "传入的sign" + returnhash["Sign"].ToString() + "\r\n");

            if (sign1 != returnhash["Sign"].ToString() && sign2 != returnhash["Sign"].ToString() && sign3 != returnhash["Sign"].ToString() && sign4 != returnhash["Sign"].ToString())
            {
                context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                return;
            }
            try
            {
                if (returnhash["BillNo"].ToString().Contains("CL"))
                {
                    //前端传入数据
                    changeCLFBXSQRC = new ChangeCLFBXSQRC();
                    changeCLFBXSQRC = (ChangeCLFBXSQRC)JsonConvert.DeserializeObject(CsJson, typeof(ChangeCLFBXSQRC));

                    isclf = 1;
                }
                else if (returnhash["BillNo"].ToString().Contains("TXF") || returnhash["BillNo"].ToString().Contains("JTF"))
                {
                    //前端传入数据
                    changeQTSQRC = new ChangeQTSQRC();
                    changeQTSQRC = (ChangeQTSQRC)JsonConvert.DeserializeObject(CsJson, typeof(ChangeQTSQRC));

                    isclf = 2;
                }
                else if (returnhash["BillNo"].ToString().Contains("ZDF"))
                {
                    //前端传入数据
                    changeZDSQRC = new ChangeZDSQRC();
                    changeZDSQRC = (ChangeZDSQRC)JsonConvert.DeserializeObject(CsJson, typeof(ChangeZDSQRC));

                    isclf = 3;
                }
                else if (returnhash["BillNo"].ToString().Contains("QTFY"))
                {
                    //前端传入数据
                    changeQTFYSQRC = new ChangeQTFYSQRC();
                    changeQTFYSQRC = (ChangeQTFYSQRC)JsonConvert.DeserializeObject(CsJson, typeof(ChangeQTFYSQRC));

                    isclf = 4;
                }
                string updatedetail    = "";
                string updateCCnum     = "";
                string insertLogMain   = "";
                string insertLogDetail = "";

                if (isclf == 1)
                {
                    updateCCnum = $"update ExpeTrav set CCNum = CCNum -1 where billno = '{changeCLFBXSQRC.BillNo}'";
                    string guid = Guid.NewGuid().ToString();
                    //修改可修改次数减一
                    //保存修改的日志内容
                    insertLogMain   = $"insert into BILLCHANGELOG(GUID,BILLTYPE,BILLNAME,DDID,SPPName,BILLNO,ChangeReason)  values('{guid}','{changeCLFBXSQRC.BillType}','差旅费报销','{changeCLFBXSQRC.SPPDDid}','{changeCLFBXSQRC.SPPName}','{changeCLFBXSQRC.BillNo}','{changeCLFBXSQRC.ChangeReason}')";
                    insertLogDetail = $"INSERT INTO ExpeTravDetailLOG(BillNo, Detailno, CustCode, DepaDate, RetuDate , DepaCity, DestCity, TranMode, TranCount, TranAmount, AlloDay,AlloPric,AlloAmount, AccoCount, AccoAmount , CityTrafCount , CityTraAmont , TotalAmount, GUID , OtherFee , GasAmount , HSRAmount , OffDay , TaxAmount , TripNo, DepaCity1, DestCity1, MAINGUID) SELECT BillNo, Detailno, CustCode, DepaDate, RetuDate , DepaCity, DestCity, TranMode, TranCount, TranAmount, AlloDay,AlloPric,AlloAmount, AccoCount, AccoAmount , CityTrafCount , CityTraAmont , TotalAmount, GUID , OtherFee , GasAmount , HSRAmount , OffDay , TaxAmount , TripNo, DepaCity1, DestCity1, '{guid}' FROM ExpeTravDetail  where  BillNo='{changeCLFBXSQRC.BillNo}'";

                    sqlList.Clear();
                    sqlList.Add(updateCCnum);
                    sqlList.Add(insertLogMain);
                    sqlList.Add(insertLogDetail);
                    da.ExecSql(sqlList);
                    sqlList.Clear();

                    #region 修改差旅费

                    //,isnull(B.TripNo,0) TripNo,convert(varchar(20),B.DepaDate,120) DepaDate,convert(varchar(20),B.RetuDate,120) RetuDate,B.DepaCity,B.DestCity,B.CustCode,e.CustName,B.DetailNo,B.AlloDay,B.OffDay,AlloPric, AlloAmount,OtherFee,B.TranMode,B.TranCount,TranAmount,GasAmount,HsrAmount,B.AccoCount,AccoAmount,B.CityTrafCount,CityTraAmont,TotalAmount
                    for (int i = 0; i < changeCLFBXSQRC.ExpeTravDetail.Length; i++)
                    {
                        double ta = 0.00;
                        ta           = double.Parse(changeCLFBXSQRC.ExpeTravDetail[i].TranAmount) + double.Parse(changeCLFBXSQRC.ExpeTravDetail[i].AlloAmount) + double.Parse(changeCLFBXSQRC.ExpeTravDetail[i].OtherFee);
                        updatedetail = $"update ExpeTravDetail set TranCount ='{changeCLFBXSQRC.ExpeTravDetail[i].TranCount}',TranAmount='{changeCLFBXSQRC.ExpeTravDetail[i].TranAmount}',AlloDay='{changeCLFBXSQRC.ExpeTravDetail[i].AlloDay}',AlloPric='{changeCLFBXSQRC.ExpeTravDetail[i].AlloPric}',AlloAmount='{changeCLFBXSQRC.ExpeTravDetail[i].AlloAmount}',AccoCount='{changeCLFBXSQRC.ExpeTravDetail[i].AccoCount}',AccoAmount='{changeCLFBXSQRC.ExpeTravDetail[i].AccoAmount}',CityTrafCount='{changeCLFBXSQRC.ExpeTravDetail[i].CityTrafCount}',CityTraAmont='{changeCLFBXSQRC.ExpeTravDetail[i].CityTraAmont}',TotalAmount='{ta}',OtherFee='{changeCLFBXSQRC.ExpeTravDetail[i].OtherFee}',DepaDate='{changeCLFBXSQRC.ExpeTravDetail[i].DepaDate}',RetuDate='{changeCLFBXSQRC.ExpeTravDetail[i].RetuDate}',DepaCity='{changeCLFBXSQRC.ExpeTravDetail[i].DepaCity}',DestCity='{changeCLFBXSQRC.ExpeTravDetail[i].DestCity}',GasAmount='{changeCLFBXSQRC.ExpeTravDetail[i].GasAmount}',HSRAmount='{changeCLFBXSQRC.ExpeTravDetail[i].HsrAmount}',TranMode='{changeCLFBXSQRC.ExpeTravDetail[i].TranMode}',OffDay='{changeCLFBXSQRC.ExpeTravDetail[i].OffDay}'  where BillNo = '{changeCLFBXSQRC.BillNo}' and Detailno = '{changeCLFBXSQRC.ExpeTravDetail[i].DetailNo}' and TripNo='{changeCLFBXSQRC.ExpeTravDetail[i].TripNo}'";
                        sqlTou.Clear();
                        sqlTou.Append(updatedetail);
                        sqlList.Add(sqlTou.ToString());
                        ToolsClass.TxtLog("审批信息修改日志", "\r\n执行的sql语句:" + updatedetail + "\r\n");
                    }

                    string ss = da.ExecSql(sqlList);
                    da.ExecSql($"update ExpeTravDetail");
                    ToolsClass.TxtLog("审批信息修改日志", "\r\n执行的sql语句返回:" + ss + "\r\n");
                    if (ss == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新流程失败\",\"errcode\":1}");
                        return;
                    }

                    ToolsClass.TxtLog("审批信息修改日志", $"\r\n 修改单据明细:{updatedetail} \r\n  修改可修改次数:{updateCCnum}  \r\n    保存日志主表:{insertLogMain} \r\n   保存日志明细:{insertLogDetail}");

                    #endregion 修改差旅费
                }
                else if (isclf == 2)
                {
                    //修改可修改次数减一
                    updateCCnum = $"update ExpeOther set CCNum = CCNum -1 where billno = '{changeQTSQRC.BillNo}'";
                    string guid = Guid.NewGuid().ToString();

                    //保存修改的日志内容
                    insertLogMain   = $"insert into BILLCHANGELOG(GUID,BILLTYPE,BILLNAME,DDID,SPPName,BILLNO,ChangeReason)  values('{guid}','{changeQTSQRC.BillType}','交通费、通讯费报销','{changeQTSQRC.SPPDDid}','{changeQTSQRC.SPPName}','{changeQTSQRC.BillNo}','{changeQTSQRC.ChangeReason}')";
                    insertLogDetail = $"INSERT INTO ExpeOtherLOG(BillNo,BillDate,FeeType ,ApplPers,BearOrga,BillCount,FeeAmount,Notes ,OperatorGuid,IsAuditing ,AuditingGUID ,AuditingDate,IsAccount ,AccountGUID ,AccountDate,REALDATE,ISREFER,REFERGUID,REFERDATE ,NoCountFee ,DDOperatorId,DDAuditingId ,AppendixUrl ,PictureUrl ,SelAuditingGuid ,SelAuditingName,CopypersonID ,CopyPersonName ,IsSp ,AuditingIdea,ProcessNodeInfo,Urls,DeptCode ,DeptName ,CCNum,MAINGUID) SELECT BillNo,BillDate,FeeType ,ApplPers,BearOrga,BillCount,FeeAmount,Notes ,OperatorGuid,IsAuditing ,AuditingGUID ,AuditingDate,IsAccount ,AccountGUID ,AccountDate,REALDATE,ISREFER,REFERGUID,REFERDATE ,NoCountFee ,DDOperatorId,DDAuditingId ,AppendixUrl ,PictureUrl ,SelAuditingGuid ,SelAuditingName,CopypersonID ,CopyPersonName ,IsSp ,AuditingIdea,ProcessNodeInfo,Urls,DeptCode ,DeptName ,CCNum, '{guid}' FROM ExpeOther  where  BillNo='{changeQTSQRC.BillNo}'";

                    sqlList.Clear();
                    sqlList.Add(updateCCnum);
                    sqlList.Add(insertLogMain);
                    sqlList.Add(insertLogDetail);
                    da.ExecSql(sqlList);

                    updatedetail = $"update ExpeOther set BillCount='{changeQTSQRC.BillCount}',FeeAmount='{changeQTSQRC.FeeAmount}'  where BillNo = '{changeQTSQRC.BillNo}'";

                    if (da.ExecSql(updatedetail) == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新流程失败\",\"errcode\":1}");
                        return;
                    }

                    ToolsClass.TxtLog("审批信息修改日志", $"\r\n 修改单据明细:{updatedetail} \r\n  修改可修改次数:{updateCCnum}  \r\n    保存日志主表:{insertLogMain} \r\n   保存日志明细:{insertLogDetail}");
                }
                else if (isclf == 3)
                {
                    //修改可修改次数减一
                    updateCCnum = $"update ExpeEnteMent set CCNum = CCNum -1 where billno = '{changeZDSQRC.BillNo}'";
                    string guid = Guid.NewGuid().ToString();

                    //保存修改的日志内容
                    insertLogMain   = $"insert into BILLCHANGELOG(GUID,BILLTYPE,BILLNAME,DDID,SPPName,BILLNO,ChangeReason)  values('{guid}','{changeZDSQRC.BillType}','招待费报销','{changeZDSQRC.SPPDDid}','{changeZDSQRC.SPPName}','{changeZDSQRC.BillNo}','{changeZDSQRC.ChangeReason}')";
                    insertLogDetail = $"INSERT INTO ExpeEnteMentLOG( BillNo,BillDate,ApplPers,BearOrga ,CustCode ,BillCount,FeeAmount ,Notes ,OperatorGuid,IsAuditing ,AuditingGUID,AuditingDate ,IsAccount ,AccountGUID,AccountDate,REALDATE ,ISREFER ,REFERGUID ,REFERDATE ,NoCountFee,DDOperatorId,DDAuditingId,AppendixUrl,PictureUrl,SelAuditingGuid ,SelAuditingName ,CopypersonID ,CopyPersonName,IsSp ,AuditingIdea ,ProcessNodeInfo,Urls,DeptCode,DeptName ,CCNum,MAINGUID) SELECT BillNo,BillDate,ApplPers,BearOrga ,CustCode ,BillCount,FeeAmount ,Notes ,OperatorGuid,IsAuditing ,AuditingGUID,AuditingDate ,IsAccount ,AccountGUID,AccountDate,REALDATE ,ISREFER ,REFERGUID ,REFERDATE ,NoCountFee,DDOperatorId,DDAuditingId,AppendixUrl,PictureUrl,SelAuditingGuid ,SelAuditingName ,CopypersonID ,CopyPersonName,IsSp ,AuditingIdea ,ProcessNodeInfo,Urls,DeptCode,DeptName ,CCNum, '{guid}' FROM ExpeEnteMent  where  BillNo='{changeZDSQRC.BillNo}'";

                    sqlList.Clear();
                    sqlList.Add(updateCCnum);
                    sqlList.Add(insertLogMain);
                    sqlList.Add(insertLogDetail);
                    da.ExecSql(sqlList);

                    updatedetail = $"update ExpeEnteMent set BillCount='{changeZDSQRC.BillCount}',FeeAmount='{changeZDSQRC.FeeAmount}'  where BillNo = '{changeZDSQRC.BillNo}'";

                    if (da.ExecSql(updatedetail) == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新流程失败\",\"errcode\":1}");
                        return;
                    }

                    ToolsClass.TxtLog("审批信息修改日志", $"\r\n 修改单据明细:{updatedetail} \r\n  修改可修改次数:{updateCCnum}  \r\n    保存日志主表:{insertLogMain} \r\n   保存日志明细:{insertLogDetail}");
                }
                else if (isclf == 4)
                {
                    //修改可修改次数减一
                    updateCCnum = $"update ExpeOther set CCNum = CCNum -1 where billno = '{changeQTFYSQRC.BillNo}'";
                    string guid = Guid.NewGuid().ToString();

                    //保存修改的日志内容
                    insertLogMain   = $"insert into BILLCHANGELOG(GUID,BILLTYPE,BILLNAME,DDID,SPPName,BILLNO,ChangeReason)  values('{guid}','{changeQTFYSQRC.BillType}','其他费用报销','{changeQTFYSQRC.SPPDDid}','{changeQTFYSQRC.SPPName}','{changeQTFYSQRC.BillNo}','{changeQTFYSQRC.ChangeReason}')";
                    insertLogDetail = $"INSERT INTO ExpeOtherLOG(BillNo,BillDate,FeeType ,ApplPers,BearOrga,BillCount,FeeAmount,Notes ,OperatorGuid,IsAuditing ,AuditingGUID ,AuditingDate,IsAccount ,AccountGUID ,AccountDate,REALDATE,ISREFER,REFERGUID,REFERDATE ,NoCountFee ,DDOperatorId,DDAuditingId ,AppendixUrl ,PictureUrl ,SelAuditingGuid ,SelAuditingName,CopypersonID ,CopyPersonName ,IsSp ,AuditingIdea,ProcessNodeInfo,Urls,DeptCode ,DeptName ,CCNum,MAINGUID) SELECT BillNo,BillDate,FeeType ,ApplPers,BearOrga,BillCount,FeeAmount,Notes ,OperatorGuid,IsAuditing ,AuditingGUID ,AuditingDate,IsAccount ,AccountGUID ,AccountDate,REALDATE,ISREFER,REFERGUID,REFERDATE ,NoCountFee ,DDOperatorId,DDAuditingId ,AppendixUrl ,PictureUrl ,SelAuditingGuid ,SelAuditingName,CopypersonID ,CopyPersonName ,IsSp ,AuditingIdea,ProcessNodeInfo,Urls,DeptCode ,DeptName ,CCNum, '{guid}' FROM ExpeOther  where  BillNo='{changeQTFYSQRC.BillNo}'";

                    sqlList.Clear();
                    sqlList.Add(updateCCnum);
                    sqlList.Add(insertLogMain);
                    sqlList.Add(insertLogDetail);
                    ToolsClass.TxtLog("审批信息修改日志", $"\r\n 修改可修改次数:{updateCCnum}  \r\n    保存日志主表:{insertLogMain} \r\n   保存日志明细:{insertLogDetail}");
                    da.ExecSql(sqlList);

                    sqlList.Clear();
                    for (int i = 0; i < changeQTFYSQRC.OtherCostSQModels.Count; i++)
                    {
                        updatedetail = $"insert into ExpeOtherDetailLOG(BillNo,MAINGUID,BillCount,BillAmount,FeeTypeDetail) values('{changeQTFYSQRC.BillNo}','{guid}','{changeQTFYSQRC.OtherCostSQModels[i].Count}','{changeQTFYSQRC.OtherCostSQModels[i].Amount}','{changeQTFYSQRC.OtherCostSQModels[i].FType}')";
                        sqlList.Add(updatedetail);
                        ToolsClass.TxtLog("审批信息修改日志", "\r\n执行的sql语句:" + updatedetail + "\r\n");
                    }
                    da.ExecSql(sqlList);
                    sqlList.Clear();
                    updatedetail = $"update ExpeOther set BillCount='{changeQTFYSQRC.BillCount}',FeeAmount='{changeQTFYSQRC.FeeAmount}'  where BillNo = '{changeQTFYSQRC.BillNo}'";
                    da.ExecSql(updatedetail);
                    ToolsClass.TxtLog("审批信息修改日志", "\r\n执行的sql语句:" + updatedetail + "\r\n");
                    for (int i = 0; i < changeQTFYSQRC.OtherCostSQModels.Count; i++)
                    {
                        updatedetail = string.Empty;
                        updatedetail = $"update ExpeOtherDetail set BillCount ='{changeQTFYSQRC.OtherCostSQModels[i].Count}',BillAmount='{changeQTFYSQRC.OtherCostSQModels[i].Amount}'  where BillNo = '{changeQTFYSQRC.BillNo}' and FeeTypeDetail = '{changeQTFYSQRC.OtherCostSQModels[i].FType}'";
                        sqlTou.Clear();
                        sqlTou.Append(updatedetail);
                        sqlList.Add(sqlTou.ToString());
                        ToolsClass.TxtLog("审批信息修改日志", "\r\n执行的sql语句:" + updatedetail + "\r\n");
                    }
                    da.ExecSql(sqlList);
                    if (da.ExecSql(updatedetail) == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新流程失败\",\"errcode\":1}");
                        return;
                    }
                }
                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#11
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;
            }

            try
            {
                string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
                //数据库链接
                connectionString = ToolsClass.GetConfig("DataOnLine");
                //sqlServer
                da = new DbHelper.SqlHelper("SqlServer", connectionString);
                //获取请求json
                using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
                {
                    CsJson = reader.ReadToEnd();
                }

                if (CsJson == "")
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }
                CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
                //json转Hashtable
                ToolsClass.TxtLog("GetUser入参", "\r\nGetUser入参:" + CsJson);
                Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
                Hashtable returnhash = jgobj as Hashtable;
                if (returnhash == null)
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }

                string path1 = context.Request.Path.Replace("GetUser.ashx", "getuser");
                string path2 = context.Request.Path.Replace("GetUser.ashx", "getdepart");
                //验证请求sign
                string sign1 = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32);
                string sign2 = ToolsClass.md5(signUrl + path2 + "Romens1/DingDing2" + path2, 32);
                ToolsClass.TxtLog("生成的sign", "生成的" + "sign1:" + sign1 + "sign2:" + sign2 + "传入的sign" + returnhash["Sign"].ToString() + "\r\n 后台字符串:" + signUrl + path2 + "Romens1/DingDing2" + path2);
                if (sign1 != returnhash["Sign"].ToString() && sign2 != returnhash["Sign"].ToString())
                {
                    context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                    return;
                }

                selType = returnhash["TypeId"].ToString();
                if (returnhash.Contains("id"))
                {
                    selId = returnhash["id"].ToString();
                    if (selId == "")
                    {
                        context.Response.Write("{\"errmsg\":\"ID不允许为空(DD2001)\",\"errcode\":1}");
                        return;
                    }
                }

                //#微应用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");

                //获取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;
                }
                //取用户信息
                if (selType == "SelUser01")
                {
                    url    = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + access_token + "&code=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");

                    //免登授权码 获取用户userid
                    GetUserId userClass = new GetUserId();
                    userClass = (GetUserId)JsonConvert.DeserializeObject(FhJson, typeof(GetUserId));
                    errcode   = userClass.errcode;
                    if (errcode != 0)
                    {
                        context.Response.Write("{\"errmsg\":\"" + userClass.errmsg + "\",\"errcode\":1}");
                        return;
                    }

                    //获取用户详情
                    url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + userClass.userid;
                    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\":\"" + userClass.errmsg + "\",\"errcode\":1}");
                        return;
                    }

                    //查询用户信息
                    sql = "select Top 1 A.GUID OperatorGuid,A.EmployeeCode JobNumber,A.EmployeeName OperatorName,A.OrgCode,b.Name OrgName from FlowEmployee a left join ORGANIZATION b on a.OrgCode=b.Code where a.EmployeeCode='" + userXqClass.jobnumber + "'";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    if (dt.Rows.Count > 0)
                    {
                        FhJson = "{\"errmsg\":\"ok\",\"errcode\":0,\"userid\":\"" + userClass.userid + "\",\"OperatorGuid\":\"" + dt.Rows[0]["OperatorGuid"].ToString() +
                                 "\",\"OperatorName\":\"" + dt.Rows[0]["OperatorName"].ToString() +
                                 "\",\"Avatar\":\"" + userXqClass.avatar +
                                 "\",\"JobNumber\":\"" + dt.Rows[0]["JobNumber"].ToString() +
                                 "\",\"OrgCode\":\"" + dt.Rows[0]["OrgCode"].ToString() +
                                 "\",\"OrgName\":\"" + dt.Rows[0]["OrgName"].ToString() + "\"}";
                    }
                    else
                    {
                        FhJson = "{\"errmsg\":\"当前用户不存在\",\"errcode\":1}";
                    }
                }
                //获取用户详情
                else if (selType == "SelUser02")
                {
                    url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户userid列表
                else if (selType == "SelUser03")
                {
                    url    = "https://oapi.dingtalk.com/user/getDeptMember?access_token=" + access_token + "&deptId=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户列表
                else if (selType == "SelUser04")
                {
                    url    = "https://oapi.dingtalk.com/user/simplelist?access_token=" + access_token + "&department_id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门用户详情
                else if (selType == "SelUser05")
                {
                    url    = "https://oapi.dingtalk.com/user/listbypage?access_token=" + access_token + "&department_id=" + selId + "&offset=0&size=10";
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取管理员列表
                else if (selType == "SelUser06")
                {
                    url    = "https://oapi.dingtalk.com/user/get_admin?access_token=" + access_token;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取管理员通讯录权限范围
                else if (selType == "SelUser07")
                {
                    url    = "https://oapi.dingtalk.com/topapi/user/get_admin_scope?access_token=" + access_token + "&userid=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取子部门ID列表
                else if (selType == "SelDepart01")
                {
                    url    = "https://oapi.dingtalk.com/department/list_ids?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门列表
                else if (selType == "SelDepart02")
                {
                    url    = "https://oapi.dingtalk.com/department/list?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取部门详情
                else if (selType == "SelDepart03")
                {
                    url    = "https://oapi.dingtalk.com/department/get?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //查询部门的所有上级父部门
                else if (selType == "SelDepart04")
                {
                    url    = "https://oapi.dingtalk.com/department/list_parent_depts_by_dept?access_token=" + access_token + "&id=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                //获取企业员工人数
                else if (selType == "SelDepart05")
                {
                    //onlyActive 0:包含未激活钉钉的人员数量 1:不包含未激活钉钉的人员数量
                    url    = "https://oapi.dingtalk.com/user/get_org_user_count?access_token=" + access_token + "&onlyActive=" + selId;
                    FhJson = ToolsClass.ApiFun("GET", url, "");
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"查询其他信息请关机(DD1003)\",\"errcode\":1}");
                    return;
                }
                ToolsClass.TxtLog("GetUser", "\r\n返给前端json:" + FhJson);
                context.Response.Write(FhJson);
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                return;
            }
        }
示例#12
0
        private StringBuilder FhJson = new StringBuilder();//返回JSON

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

            isWrite = ToolsClass.GetConfig("isWrite");

            //获取请求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", ",");
            //json转Hashtable
            Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
            Hashtable returnhash = jgobj as Hashtable;

            if (returnhash == null)
            {
                ToolsClass.TxtLog("查询组织信息日志", "\r\n入参" + CsJson + "\r\n");
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }

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

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

            selType  = returnhash["TypeId"].ToString();
            selValue = returnhash["Value"].ToString();
            if (selType == "SelOrgAndAllEmployee01")
            {
                IsLeader = returnhash["IsLeader"].ToString();
            }
            if (isWrite == "1")
            {
                ToolsClass.TxtLog("查询组织信息日志", "\r\n入参TypeId:" + CsJson + "\r\n");
            }

            if (selType == "GetAuditingState")
            {
                sql = $"select count(*) from  (select a.BillNo BillNo,a.IsAccount, b.BillCount,b.FeeAmount,isnull(a.IsSp, 0) IsSp,C.employeename + '提交的雨诺差旅费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,12 FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPerson,'' CustName,A.AuditingIdea ,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from  ExpeTrav a left join(SELECT BILLNO, SUM(TOTALAMOUNT) FeeAmount, sum(TranCount)+sum(AccoCount) + sum(CityTrafCount) BillCount FROM EXPETRAVDETAIL GROUP BY BILLNO) b ON A.BILLNO = b.BILLNO left join FlowEmployee c on a.InsteadOperatorGuid = c.ddid union select a.BillNo BillNo, a.IsAccount,a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺' + (case when a.FeeType = '01' then '交通费' when a.FeeType = '02' then '通讯费' when a.FeeType = '03' then '车辆费' when a.FeeType = '04' then '房租费' when a.FeeType = '05' then '水费' when a.FeeType = '06' then '电费'  when a.FeeType = '07' then '其他费用' end)+'审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,A.FeeType FType,  BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson,'' CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from EXPEOTHER a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid union select a.BillNo BillNo,a.IsAccount, a.BillCount,a.FeeAmount,isnull(a.IsSp, 0) IsSp,B.employeename + '提交的雨诺招待费审批' + (case when isnull(a.IsSp,0)= 1 then '[已同意]' when isnull(a.IsSp,0)= 2 then '[已驳回]' else '' end ) Title,'00' FType, BillDate,a.Notes,a.DDOperatorId,a.SelAuditingGuid,a.CopyPersonID CopyPerson, c.CustName,A.AuditingIdea,a.IsInsteadApply,isnull(a.InsteadOperatorGuid,'') InsteadOperatorGuid,a.HangState from EXPEENTEMENT a left join FlowEmployee b on a.InsteadOperatorGuid = b.ddid left join Customer c on a.CustCode = c.CustCode) t where BillNo in (select BillNo from ApprovalComments where ApprovalID = (select distinct EmployeeCode from FlowEmployee where ddid = '{selValue}') and persontype = 2 and ApprovalStatus = '0' and BillNo<> '')   and issp = '0'";
                string result = JsonConvert.SerializeObject(new PublicResult
                {
                    errcode       = "0",
                    errmsg        = "ok",
                    Auditingstate = da.GetDataTable(sql).Rows.Count <= 0 ? "0" : "1",
                    BillNos       = da.GetDataTable(sql).Rows.Count <= 0 ? "0" : da.GetValue(sql).ToString()
                });
                context.Response.Write(result);
                return;
            }

            #region 模糊查询客户信息

            if (selType == "SelCustom01")
            {
                try
                {
                    if (selValue.Length < 3)
                    {
                        context.Response.Write("{\"errmsg\":\"请至少输入三个字符(DD1001)\",\"errcode\":1}");
                        return;
                    }
                    sql = "select CustCode,CustName from customer where custname like '%" + selValue + "%'";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    FhJson.Clear();
                    FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"count\":").Append(dt.Rows.Count).Append(",\"data\":[");
                    if (dt.Rows.Count > 0)
                    {
                        for (int x = 0; x < dt.Rows.Count; x++)
                        {
                            if (x > 0)
                            {
                                FhJson.Append(",");
                            }
                            var    dtcountday = da.GetDataTable($"select sum(cast(isnull(replace(replace(YXQType,'天',''),'永久有效',''),0) as int)) countday from MEDCONFIG where isnull(iswrite,0)=1 and  CusCode='{dt.Rows[x]["CustCode"].ToString()}' group by CusCode  ");
                            string scountday  = dtcountday.Rows.Count == 0 ? null : dtcountday.Rows[0]["countday"].ToString();
                            int    countday   = string.IsNullOrEmpty(scountday) ? 0 : int.Parse(scountday);

                            if (da.GetDataTable($"select billno from medconfig where CusCode='{dt.Rows[x]["CustCode"].ToString()}'").Rows.Count == 0)
                            {
                                FhJson.Append("{\"CustCode\":\"").Append(dt.Rows[x]["CustCode"].ToString())
                                .Append("\",\"CustName\":\"").Append(dt.Rows[x]["CustName"].ToString())
                                .Append("\",\"MedConfig180\":\"").Append(0)
                                .Append("\"}");
                            }
                            else
                            {
                                int countdayss = countday >= 180 ? 1 : 0;

                                FhJson.Append("{\"CustCode\":\"").Append(dt.Rows[x]["CustCode"].ToString())
                                .Append("\",\"CustName\":\"").Append(dt.Rows[x]["CustName"].ToString())
                                .Append("\",\"MedConfig180\":\"").Append(countdayss)
                                .Append("\"}");
                            }
                        }
                    }
                    FhJson.Append("]}");

                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("DDLog", "\r\nSelect=>返回:" + FhJson.ToString() + "\r\n");
                    }
                    context.Response.Write(FhJson.ToString());
                    return;
                }
                catch (Exception ex)
                {
                    context.Response.Write("{\"errmsg\":\"查询客户信息报错" + ex.Message + "\",\"errcode\":1}");
                    return;
                }
            }

            #endregion 模糊查询客户信息

            #region CODE查询客户信息

            else if (selType == "SelCustom02")
            {
                try
                {
                    sql = "select CustCode,CustName from customer where custcode='" + selValue + "'";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    FhJson.Clear();
                    FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"count\":").Append(dt.Rows.Count).Append(",\"data\":[");
                    if (dt.Rows.Count > 0)
                    {
                        for (int x = 0; x < dt.Rows.Count; x++)
                        {
                            if (x > 0)
                            {
                                FhJson.Append(",");
                            }

                            int countday = int.Parse(da.GetValue($"select sum(cast(isnull(replace(replace(YXQType,'天',''),'永久有效',''),0) as int)) countday from MEDCONFIG where isnull(iswrite,0)=1 and  CusCode='{dt.Rows[x]["CustCode"].ToString()}' group by CusCode  ").ToString()) >= 180 ? 1 : 0;

                            FhJson.Append("{\"CustCode\":\"").Append(dt.Rows[x]["CustCode"].ToString())
                            .Append("\",\"CustName\":\"").Append(dt.Rows[x]["CustName"].ToString())
                            .Append("\",\"MedConfig180\":\"").Append(countday)
                            .Append("\"}");
                        }
                    }
                    FhJson.Append("]}");
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("查询客户信息", "\r\n返回:" + FhJson.ToString() + "\r\n");
                    }
                    context.Response.Write(FhJson.ToString());
                    return;
                }
                catch (Exception ex)
                {
                    context.Response.Write("{\"errmsg\":\"查询客户信息报错" + ex.Message + "\",\"errcode\":1}");
                    return;
                }
            }

            #endregion CODE查询客户信息

            #region 查询医保类型

            else if (selType == "GetTypeOfHealthInsurance")
            {
                try
                {
                    sql = string.Empty;
                    sql = "select selectsql from dataselectdefine where  DataSelectType = '20190930001'";
                    string selectsql = da.GetValue(sql).ToString().Replace("[选择条件]", $" and(code like'%{selValue}%' or name like '%{selValue}%') ");
                    dt = da.GetDataTable(selectsql);
                    List <HealthInsurance> data = new List <HealthInsurance>();
                    if (dt.Rows.Count == 0)
                    {
                        context.Response.Write(JsonConvert.SerializeObject(new HealthInsuranceResponse
                        {
                            errcode = "0",
                            errmsg  = "暂无可用医保类型,请检查相应的数据源"
                        }));
                        return;
                    }
                    else
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            data.Add(new HealthInsurance
                            {
                                Status  = false,
                                MedName = dt.Rows[i]["名称"].ToString(),
                                MedType = dt.Rows[i]["代码"].ToString()
                            });
                        }
                    }

                    string HealthInsuranceResponseJson = JsonConvert.SerializeObject(new HealthInsuranceResponse
                    {
                        errcode = "0",
                        errmsg  = "查询成功",
                        data    = data
                    });

                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("医保类型查询", $"\r\n返回前端json:\r\n{HealthInsuranceResponseJson}");
                    }
                    context.Response.Write(HealthInsuranceResponseJson);
                    return;
                }
                catch (Exception ex)
                {
                    context.Response.Write("{\"errmsg\":\"医保类型查询报错" + ex.Message + "\",\"errcode\":1}");
                    return;
                }
            }

            #endregion 查询医保类型

            #region 查询用户组织机构信息

            else if (selType == "SelOrg01")
            {
                try
                {
                    sql = "SELECT CODE OrgCode,NAME OrgName FROM ORGANIZATION WHERE ISNULL(ISFORBIDDEN,0)=0  AND  NAME like '%" + selValue + "%'";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    if (dt.Rows.Count > 0)
                    {
                        FhJson.Clear();
                        FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"Detail\":[");

                        for (int x = 0; x < dt.Rows.Count; x++)
                        {
                            if (x > 0)
                            {
                                FhJson.Append(",");
                            }
                            FhJson.Append("{\"OrgCode\":\"").Append(dt.Rows[x]["OrgCode"].ToString())
                            .Append("\",\"OrgName\":\"").Append(dt.Rows[x]["OrgName"].ToString())
                            .Append("\"}");
                        }
                        FhJson.Append("]}");
                    }
                    else
                    {
                        FhJson.Clear();
                        FhJson.Append("{\"errmsg\":\"查询数据为空\",\"errcode\":0,\"Detail\":[{\"OrgCode\":\"\",\"OrgName\":\"\"]}");
                    }

                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("DDLog", "\r\nSelect=>返回:" + FhJson.ToString() + "\r\n");
                    }
                    context.Response.Write(FhJson.ToString());
                    return;
                }
                catch
                {
                    context.Response.Write("{\"errmsg\":\"查询机构信息报错(DD1006)\",\"errcode\":1}");
                    return;
                }
            }

            #endregion 查询用户组织机构信息

            #region 根据TypeId、isLeade、Value来决定查询方式

            else if (selType == "SelOrgAndAllEmployee01")
            {
                try
                {
                    //按照角色查询
                    if (selValue == "1")
                    {
                        sql = "select RoleId,RoleName from role ";
                        obj = da.GetDataTable(sql);
                        dt  = obj as DataTable;
                        string sqlEmployees = "";
                        if (IsLeader == "0")
                        {
                            sqlEmployees = "select distinct a.employeecode EmployeeCode,a.employeename EmployeeName,a.IsLeader IsLeader,b.Roleid  RoleId from FlowEmployee a join EmpsRoleId b on a.employeecode = b.employeecode  where   a.disable = '0' and ISNULL(a.DDId,0) !='0' and b.status = '1'";
                        }
                        else if (IsLeader == "1")
                        {
                            sqlEmployees = "select distinct a.employeecode EmployeeCode,a.employeename EmployeeName,a.IsLeader IsLeader,b.Roleid  RoleId from FlowEmployee a join EmpsRoleId b on a.employeecode = b.employeecode  where   a.disable = '0' and ISNULL(a.DDId,0) !='0' and b.status = '1' and a.isleader != '0'";
                        }
                        DataTable dtEmployees = da.GetDataTable(sqlEmployees);
                        if (dt.Rows.Count > 0)
                        {
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"Detail\":[");

                            for (int x = 0; x < dt.Rows.Count; x++)
                            {
                                if (x > 0)
                                {
                                    FhJson.Append(",");
                                }
                                FhJson.Append("{\"RoleCode\":\"").Append(dt.Rows[x]["RoleId"].ToString())
                                .Append("\",\"RoleName\":\"").Append(dt.Rows[x]["RoleName"].ToString())
                                .Append("\",\"RoleEmployees\":[");
                                DataRow[] tmptable = dtEmployees.Select($"RoleId = '{dt.Rows[x]["RoleId"]}'");
                                //将各个角色的信息包装到里面
                                for (int i = 0; i < tmptable.Length; i++)
                                {
                                    if (i > 0)
                                    {
                                        FhJson.Append(",");
                                    }
                                    FhJson.Append("{\"EmployeeCode\":\"").Append(tmptable[i]["EmployeeCode"].ToString())
                                    .Append("\",\"EmployeeName\":\"").Append(tmptable[i]["EmployeeName"].ToString())
                                    .Append("\",\"IsLeader\":\"").Append(tmptable[i]["IsLeader"].ToString())
                                    .Append("\"}");
                                }
                                FhJson.Append("]}");
                            }
                            FhJson.Append("]}");
                        }
                        else
                        {
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"查询数据为空\",\"errcode\":0,\"Detail\":[{\"OrgCode\":\"\",\"OrgName\":\"\"]}");
                        }

                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("查询组织信息日志", "\r\n返回:" + FhJson.ToString() + "\r\n");
                        }
                        context.Response.Write(FhJson.ToString());
                        return;
                    }

                    //树状结构按部门查询
                    else if (selValue == "3")
                    {
                        sql = "SELECT CODE OrgCode,NAME OrgName,ParentGuid FROM ORGANIZATION WHERE ISNULL(Disable,0)=0";
                        obj = da.GetDataTable(sql);
                        dt  = obj as DataTable;
                        string sqlEmployees = "";
                        if (IsLeader == "0")
                        {
                            sqlEmployees = "select a.employeecode EmployeeCode,a.employeename EmployeeName,a.orgcode OrgCode,b.name OrgName,a.IsLeader IsLeader from FlowEmployee a left join organization b on a.orgcode = b.Code  where a.disable ='0' and ISNULL(a.DDId,0) !='0'";
                        }
                        else if (IsLeader == "1")
                        {
                            sqlEmployees = $"select a.employeecode EmployeeCode,a.employeename EmployeeName,a.orgcode OrgCode,b.name OrgName,a.IsLeader IsLeader from FlowEmployee a left join organization b on a.orgcode = b.Code  where  a.IsLeader!='0'  and  a.disable ='0' and ISNULL(a.DDId,0) !='0'";
                        }
                        DataTable dtEmployees = da.GetDataTable(sqlEmployees);
                        if (dt.Rows.Count > 0)
                        {
                            sql = "";
                            sql = "SELECT max(DATALENGTH(guid)) FROM[RomensManage].[dbo].[Organization] ";
                            int MaxCount = (int.Parse(da.GetValue(sql).ToString()) + 1) / 3 - 1;
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"MaxCount\":\"");
                            FhJson.Append(MaxCount.ToString());
                            FhJson.Append("\",\"Detail\":[");
                            for (int x = 0; x < dt.Rows.Count; x++)
                            {
                                if (x > 0)
                                {
                                    FhJson.Append(",");
                                }
                                FhJson.Append("{\"OrgCode\":\"").Append(dt.Rows[x]["OrgCode"].ToString())
                                .Append("\",\"OrgName\":\"").Append(dt.Rows[x]["OrgName"].ToString())
                                .Append("\",\"OrgEmployees\":[");
                                DataRow[] tmptable = dtEmployees.Select($"OrgCode = '{dt.Rows[x]["OrgCode"]}'");
                                //DataRow[] tmptable = dtEmployees.Select();
                                //将各个部门的信息包装到里面
                                for (int i = 0; i < tmptable.Length; i++)
                                {
                                    if (i > 0)
                                    {
                                        FhJson.Append(",");
                                    }
                                    FhJson.Append("{\"EmployeeCode\":\"").Append(tmptable[i]["EmployeeCode"].ToString())
                                    .Append("\",\"EmployeeName\":\"").Append(tmptable[i]["EmployeeName"].ToString())
                                    .Append("\",\"IsLeader\":\"").Append(tmptable[i]["IsLeader"].ToString())
                                    .Append("\"}");
                                }
                                FhJson.Append("]}");
                            }
                            FhJson.Append("]}");
                        }
                        else
                        {
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"查询数据为空\",\"errcode\":0,\"Detail\":[{\"OrgCode\":\"\",\"OrgName\":\"\"]}");
                        }

                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("DDLog", "\r\nSelect=>返回:" + FhJson.ToString() + "\r\n");
                        }
                        context.Response.Write(FhJson.ToString());
                        return;
                    }

                    //按照部门查询
                    else
                    {
                        sql = "SELECT CODE OrgCode,NAME OrgName,ParentGuid FROM ORGANIZATION WHERE ISNULL(Disable,0)=0";
                        obj = da.GetDataTable(sql);
                        dt  = obj as DataTable;
                        string sqlEmployees = "";
                        if (IsLeader == "0")
                        {
                            sqlEmployees = "select a.employeecode EmployeeCode,a.employeename EmployeeName,a.orgcode OrgCode,b.name OrgName,a.IsLeader IsLeader from FlowEmployee a left join organization b on a.orgcode = b.Code  where a.disable ='0' and ISNULL(a.DDId,0) !='0'";
                        }
                        else if (IsLeader == "1")
                        {
                            sqlEmployees = $"select a.employeecode EmployeeCode,a.employeename EmployeeName,a.orgcode OrgCode,b.name OrgName,a.IsLeader IsLeader from FlowEmployee a left join organization b on a.orgcode = b.Code  where  a.IsLeader!='0'  and  a.disable ='0' and ISNULL(a.DDId,0) !='0'";
                        }
                        DataTable dtEmployees = da.GetDataTable(sqlEmployees);
                        if (dt.Rows.Count > 0)
                        {
                            sql = "SELECT max(DATALENGTH(guid)) FROM[RomensManage].[dbo].[Organization] ";
                            int MaxCount = (int.Parse(da.GetValue(sql).ToString()) + 1) / 3 - 1;
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"MaxCount\":\"");
                            FhJson.Append(MaxCount.ToString());
                            FhJson.Append("\",\"Detail\":[");
                            for (int x = 0; x < dt.Rows.Count; x++)
                            {
                                if (x > 0)
                                {
                                    FhJson.Append(",");
                                }
                                FhJson.Append("{\"OrgCode\":\"").Append(dt.Rows[x]["OrgCode"].ToString())
                                .Append("\",\"OrgName\":\"").Append(dt.Rows[x]["OrgName"].ToString())
                                .Append("\",\"OrgEmployees\":[");
                                DataRow[] tmptable = dtEmployees.Select($"OrgCode = '{dt.Rows[x]["OrgCode"]}'");
                                //DataRow[] tmptable = dtEmployees.Select();
                                //将各个部门的信息包装到里面
                                for (int i = 0; i < tmptable.Length; i++)
                                {
                                    if (i > 0)
                                    {
                                        FhJson.Append(",");
                                    }
                                    FhJson.Append("{\"EmployeeCode\":\"").Append(tmptable[i]["EmployeeCode"].ToString())
                                    .Append("\",\"EmployeeName\":\"").Append(tmptable[i]["EmployeeName"].ToString())
                                    .Append("\",\"IsLeader\":\"").Append(tmptable[i]["IsLeader"].ToString())
                                    .Append("\"}");
                                }
                                FhJson.Append("]}");
                            }
                            FhJson.Append("]}");
                        }
                        else
                        {
                            FhJson.Clear();
                            FhJson.Append("{\"errmsg\":\"查询数据为空\",\"errcode\":0,\"Detail\":[{\"OrgCode\":\"\",\"OrgName\":\"\"]}");
                        }

                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("DDLog", "\r\nSelect=>返回:" + FhJson.ToString() + "\r\n");
                        }
                        context.Response.Write(FhJson.ToString());
                        return;
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                    return;
                }
            }

            #endregion 根据TypeId、isLeade、Value来决定查询方式

            else
            {
                context.Response.Write("{\"errmsg\":\"查询其他信息请关机(DD1000)\",\"errcode\":1}");
                return;
            }
        }
示例#13
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
            string ymadk   = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            string ddMessageId = string.Empty;

            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
            string JsonData = CsJson;

            //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
            AppWyy    = ToolsClass.GetConfig("AppWyy");
            ScList    = AppWyy.Split('$');
            agentId   = ScList[0].ToString();
            corpId    = ScList[1].ToString();
            appKey    = ScList[2].ToString();
            appSecret = ScList[3].ToString();

            isWrite = ToolsClass.GetConfig("isWrite");
            ddUrl   = ToolsClass.GetConfig("ddUrl");

            if (isWrite == "1")
            {
                ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n入参:" + CsJson + "\r\n");
            }

            TxfjtfMul txfClass = new TxfjtfMul();

            txfClass = (TxfjtfMul)JsonConvert.DeserializeObject(CsJson, typeof(TxfjtfMul));

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

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

            string NodeInfo = JsonConvert.SerializeObject(txfClass.NodeInfo).Replace(",{\"AType\":\"\",\"PersonId\":\"select\",\"PersonName\":\"请选择\"}", "");

            try
            {
                #region 获取access_token

                url    = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret;
                FhJson = ToolsClass.ApiFun("GET", url, "");

                TokenClass tokenClass = new TokenClass();
                tokenClass   = (TokenClass)JsonConvert.DeserializeObject(FhJson, typeof(TokenClass));
                access_token = tokenClass.access_token;
                errcode      = tokenClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"获取ACCESS_TOKEN报错(DD0004)\",\"errcode\":1}");
                    return;
                }

                #endregion 获取access_token

                if (txfClass.FeeType == "01")
                {
                    //市内交通费
                    billTypeNo = "100520005015";
                    billNoPro  = "JTF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "交通费";
                    typeUrl    = ddUrl + "/jtfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "02")
                {
                    //通讯费
                    billTypeNo = "100520005020";
                    billNoPro  = "TXF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "通讯费";
                    typeUrl    = ddUrl + "/txfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "03")
                {
                    //车辆费
                    billTypeNo = "100520005025";
                    billNoPro  = "CLF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "车辆费";
                    typeUrl    = ddUrl + "/clui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "04")
                {
                    //房租费
                    billTypeNo = "100520005030";
                    billNoPro  = "FZ";
                    ProName    = "EXPEREFERdd";
                    typeName   = "房租费";
                    typeUrl    = ddUrl + "/fzfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "05")
                {
                    //水费
                    billTypeNo = "100520005035";
                    billNoPro  = "SF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "水费";
                    typeUrl    = ddUrl + "/sfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "06")
                {
                    //电费
                    billTypeNo = "100520005040";
                    billNoPro  = "DF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "电费";
                    typeUrl    = ddUrl + "/dfui/shenpi/index.html?billno=";
                }
                else if (txfClass.FeeType == "00")
                {
                    //招待费
                    billTypeNo = "100520005010";
                    billNoPro  = "ZDF";
                    ProName    = "EXPEREFERdd";
                    typeName   = "招待费";
                    typeUrl    = ddUrl + "/zdfui/shenpi/index.html?billno=";
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"提交的报销类型不存在(DD9001)\",\"errcode\":1}");
                    return;
                }
                string fqrall  = txfClass.DDOperatorId;
                string jnumber = txfClass.ApplPers;
                string sqr     = txfClass.OperatorName;
                if (txfClass.IsInsteadApply == "1")
                {
                    fqrall  = fqrall + "," + txfClass.InsteadOperatorGuid;
                    sqr     = "【代】" + txfClass.InsteadOperatorName;
                    jnumber = da.GetValue($"select top 1 employeecode from flowemployee where ddid = '{txfClass.InsteadOperatorGuid}'").ToString();
                }
                else
                {
                    txfClass.OperatorGuid = da.GetValue($"select top 1 guid from flowemployee where ddid = '{fqrall}' and orgcode ='{txfClass.DeptCode}'").ToString();
                }

                #region 获取申请流水号

                Sql    = "select dbo.GetBillNo('" + billTypeNo + "','" + jnumber + "',getdate())";
                obj    = da.GetValue(Sql);
                billno = obj.ToString();
                if (billno == "1")
                {
                    billno = billNoPro + jnumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                    Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "' and BillDate<>convert(varchar(20),GETDATE(),120)";
                }
                else
                {
                    Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='" + billTypeNo + "'";
                }

                obj = da.ExecSql(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新通信费单号出错(DD9002)\",\"errcode\":1}");
                    return;
                }

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

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

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

                #endregion 获取用户guid

                if (txfClass.NodeInfo.Length == 0)
                {
                    //自动同意
                    //更新单据消息id与返回内容

                    #region 保存信息

                    sqlList.Clear();
                    sqlTou.Clear();
                    if (txfClass.FeeType == "00")
                    {
                        sqlTou.Append("insert into EXPEENTEMENT(BillNo,BillDate,FlowEmployeeGuid,OperatorGuid,ProcessNodeInfo,ApplPers,DDOperatorId,JsonData,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,PictureUrl,Notes,Urls,IsInsteadApply,InsteadOperatorGuid,CustCode) Values('")
                        .Append(billno).Append("','")
                        .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                        .Append(txfClass.OperatorGuid).Append("','")
                        .Append(operatorGuid).Append("','")
                        .Append(NodeInfo).Append("','")
                        .Append(jnumber).Append("','")
                        .Append(txfClass.DDOperatorId).Append("','")
                        .Append(JsonData).Append("','")
                        .Append(txfClass.BillCount).Append("','")
                        .Append(txfClass.FeeAmount).Append("','")
                        .Append(txfClass.DeptName).Append("','")
                        .Append(txfClass.DeptCode).Append("','")
                        .Append(txfClass.NoCountFee).Append("','")
                        .Append(txfClass.BearOrga).Append("','")
                        .Append(txfClass.AppendixUrl).Append("','")
                        .Append(txfClass.PictureUrl).Append("','")
                        .Append(txfClass.Notes).Append("','")
                        .Append(JsonConvert.SerializeObject(txfClass.Urls)).Append("','")
                        .Append(txfClass.IsInsteadApply).Append("','")
                        .Append(txfClass.InsteadOperatorGuid).Append("','")
                        .Append(txfClass.CustCode).Append("')");
                    }
                    else
                    {
                        sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,FlowEmployeeGuid,OperatorGuid,ProcessNodeInfo,ApplPers,DDOperatorId,JsonData,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl,Notes) Values('")
                        .Append(billno).Append("','")
                        .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                        .Append(txfClass.FeeType).Append("','")
                        .Append(txfClass.OperatorGuid).Append("','")
                        .Append(operatorGuid).Append("','")
                        .Append(NodeInfo).Append("','")
                        .Append(jnumber).Append("','")
                        .Append(txfClass.DDOperatorId).Append("','")
                        .Append(JsonData).Append("','")
                        .Append(txfClass.BillCount).Append("','")
                        .Append(txfClass.FeeAmount).Append("','")
                        .Append(txfClass.DeptName).Append("','")
                        .Append(txfClass.DeptCode).Append("','")
                        .Append(txfClass.NoCountFee).Append("','")
                        .Append(txfClass.BearOrga).Append("','")
                        .Append(txfClass.AppendixUrl).Append("','")
                        .Append(JsonConvert.SerializeObject(txfClass.Urls)).Append("','")
                        .Append(txfClass.IsInsteadApply).Append("','")
                        .Append(txfClass.InsteadOperatorGuid).Append("','")
                        .Append(txfClass.PictureUrl).Append("','")
                        .Append(txfClass.Notes)
                        .Append("')");
                    }
                    sqlList.Add(sqlTou.ToString());

                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n操作Expeother表:" + sqlTou.ToString() + "\r\n");
                    }
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 保存信息

                    #region 调用提交存储过程

                    keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, operatorGuid, ProName);
                    ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n调用提交存储过程:" + JsonConvert.SerializeObject(keyValuePairs) + "\r\n");
                    if (keyValuePairs["ReturnValue"].ToString() != "0")
                    {
                        //招待费
                        if (txfClass.FeeType == "00")
                        {
                            sqlList.Clear();
                            Sql = "delete from EXPEENTEMENT where BillNo='" + billno + "'";
                            sqlList.Add(Sql);
                        }
                        else
                        {
                            sqlList.Clear();
                            Sql = "delete from EXPEOTHER where BillNo='" + billno + "'";
                            sqlList.Add(Sql);
                        }
                        obj = da.ExecSql(sqlList);
                        if (obj == null)
                        {
                            context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                            return;
                        }
                        context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 调用提交存储过程

                    if (txfClass.FeeType == "00")
                    {
                        Sql = "update EXPEENTEMENT set IsSp='1',auditingdate=getdate()  where billno='" + billno + "'";
                        ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n操作EXPEENTEMENT表:" + Sql.ToString() + "\r\n");
                    }
                    else
                    {
                        Sql = "update EXPEOTHER set IsSp='1',auditingdate=getdate()  where billno='" + billno + "'";
                        ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n操作EXPEOTHER表:" + Sql.ToString() + "\r\n");
                    }
                    obj = da.ExecSql(Sql);
                    Sql = "";

                    #region 发送工作通知消息

                    urlcsjson = typeUrl + "" + $"{billno}&BillClassId={txfClass.BillClassId}&showmenu=false";
                    urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                    url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                    CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + txfClass.FeeAmount + "¥  发票: " + txfClass.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + txfClass.Notes + "\"}}}";
                    FhJson    = ToolsClass.ApiFun("POST", url, CsJson);
                    var xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                    ddMessageId = xxtzClass2.task_id.ToString();

                    #endregion 发送工作通知消息

                    context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                    return;
                }

                //获取第一级流程的人员信息
                NodeInfoDetailPerson[] NodeInfodetailPeople = txfClass.NodeInfo[0].NodeInfoDetails[0].Persons;
                //从入参中得到审批人及抄送人的信息
                //指定人员的id列表
                StringBuilder piddept = new StringBuilder();
                string        sql     = "";

                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    if (i > 0)
                    {
                        piddept.Append(",");
                    }

                    //判断传空
                    if (NodeInfodetailPeople[i].PersonId != "select" && NodeInfodetailPeople[i].PersonId != "")
                    {
                        sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'";
                        piddept.Append(da.GetValue(sql).ToString());
                    }
                }

                #region 保存信息

                sqlList.Clear();
                sqlTou.Clear();
                if (txfClass.FeeType == "00")
                {
                    sqlTou.Append("insert into EXPEENTEMENT(BillNo,BillDate,FlowEmployeeGuid,OperatorGuid,ProcessNodeInfo,ApplPers,DDOperatorId,JsonData,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,PictureUrl,Notes,Urls,IsInsteadApply,InsteadOperatorGuid,CustCode) Values('")
                    .Append(billno).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                    .Append(txfClass.OperatorGuid).Append("','")
                    .Append(operatorGuid).Append("','")
                    .Append(NodeInfo).Append("','")
                    .Append(jnumber).Append("','")
                    .Append(txfClass.DDOperatorId).Append("','")
                    .Append(JsonData).Append("','")
                    .Append(txfClass.BillCount).Append("','")
                    .Append(txfClass.FeeAmount).Append("','")
                    .Append(txfClass.DeptName).Append("','")
                    .Append(txfClass.DeptCode).Append("','")
                    .Append(txfClass.NoCountFee).Append("','")
                    .Append(txfClass.BearOrga).Append("','")
                    .Append(txfClass.AppendixUrl).Append("','")
                    .Append(txfClass.PictureUrl).Append("','")
                    .Append(txfClass.Notes).Append("','")
                    .Append(JsonConvert.SerializeObject(txfClass.Urls)).Append("','")
                    .Append(txfClass.IsInsteadApply).Append("','")
                    .Append(txfClass.InsteadOperatorGuid).Append("','")
                    .Append(txfClass.CustCode).Append("')");
                }
                else
                {
                    sqlTou.Append("insert into EXPEOTHER(BillNo,BillDate,FeeType,FlowEmployeeGuid,OperatorGuid,JsonData,ProcessNodeInfo,ApplPers,DDOperatorId,BillCount,FeeAmount,DeptName,DeptCode,NoCountFee,BearOrga,AppendixUrl,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl,Notes) Values('")
                    .Append(billno).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                    .Append(txfClass.FeeType).Append("','")
                    .Append(txfClass.OperatorGuid).Append("','")
                    .Append(operatorGuid).Append("','")
                    .Append(JsonData).Append("','")
                    .Append(NodeInfo).Append("','")
                    .Append(jnumber).Append("','")
                    .Append(txfClass.DDOperatorId).Append("','")
                    .Append(txfClass.BillCount).Append("','")
                    .Append(txfClass.FeeAmount).Append("','")
                    .Append(txfClass.DeptName).Append("','")
                    .Append(txfClass.DeptCode).Append("','")
                    .Append(txfClass.NoCountFee).Append("','")
                    .Append(txfClass.BearOrga).Append("','")
                    .Append(txfClass.AppendixUrl).Append("','")
                    .Append(JsonConvert.SerializeObject(txfClass.Urls)).Append("','")
                    .Append(txfClass.IsInsteadApply).Append("','")
                    .Append(txfClass.InsteadOperatorGuid).Append("','")
                    .Append(txfClass.PictureUrl).Append("','")
                    .Append(txfClass.Notes)
                    .Append("')");
                }
                sqlList.Add(sqlTou.ToString());

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n操作Expeother表:" + sqlTou.ToString() + "\r\n");
                }
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                #endregion 保存信息

                #region 调用提交存储过程

                keyValuePairs = CommonHelper.sqlPro(billno, billTypeNo, operatorGuid, ProName);
                ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n调用提交存储过程:" + JsonConvert.SerializeObject(keyValuePairs) + "\r\n");
                if (keyValuePairs["ReturnValue"].ToString() != "0")
                {
                    //招待费
                    if (txfClass.FeeType == "00")
                    {
                        sqlList.Clear();
                        Sql = "delete from EXPEENTEMENT where BillNo='" + billno + "'";
                        sqlList.Add(Sql);
                    }
                    else
                    {
                        sqlList.Clear();
                        Sql = "delete from EXPEOTHER where BillNo='" + billno + "'";
                        sqlList.Add(Sql);
                    }
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }

                    context.Response.Write("{\"errmsg\":\"" + ProResult + "(DD9003)\",\"errcode\":1}");
                    return;
                }

                #endregion 调用提交存储过程

                #region 发送工作通知消息

                urlcsjson = typeUrl + "" + $"{billno}&BillClassId={txfClass.BillClassId}&showmenu=false";
                urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + txfClass.FeeAmount + "¥  发票: " + txfClass.BillCount + " 张\r\n申请日期: " + DateTime.Now.ToString("yyyy-MM-dd") + "\r\n备注: " + txfClass.Notes + "\"}}}";
                FhJson    = ToolsClass.ApiFun("POST", url, CsJson);

                XXTZ xxtzClass = new XXTZ();
                xxtzClass   = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode     = xxtzClass.errcode;
                ddMessageId = xxtzClass.task_id.ToString();
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的报销申请,消息通知失败(DD9004)\",\"errcode\":1}");
                    return;
                }

                #endregion 发送工作通知消息

                //保存流程信息到comments表
                sqlList.Clear();
                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    sqlTou.Clear();
                    if (NodeInfodetailPeople[i].PersonId != "select")
                    {
                        sqlTou.Append("insert into ApprovalComments(CommentsId,BillClassId,BillNo,ApprovalID,ApprovalName,ApprovalComments,ApprovalStatus,DDMessageId,AType,ApprovalDate,IsAndOr,IsLeader,PersonType,NodeNumber) values('").Append(Guid.NewGuid().ToString()).Append("','")
                        .Append(txfClass.BillClassId).Append("','")
                        .Append(billno).Append("','")
                        .Append(NodeInfodetailPeople[i].PersonId).Append("','")
                        .Append(NodeInfodetailPeople[i].PersonName).Append("','")//内部数据库用户GUID
                        .Append("").Append("','")
                        .Append("0").Append("','")
                        .Append(ddMessageId).Append("','")
                        .Append(NodeInfodetailPeople[i].AType).Append("','")
                        .Append(DateTime.Now).Append("','")
                        .Append(txfClass.NodeInfo[0].NodeInfoDetails[0].IsAndOr).Append("','")
                        .Append(txfClass.NodeInfo[0].NodeInfoDetails[0].IsLeader).Append("','")
                        .Append(txfClass.NodeInfo[0].NodeInfoType).Append("','")
                        .Append("2").Append("')");
                        sqlList.Add(sqlTou.ToString());
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n操作ApprovalComments表:" + sqlTou.ToString() + "\r\n");
                        }
                    }
                }
                //执行SQL语句Insert
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存申请信息节点信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                path = context.Request.Path.Replace("Approval/TxfJtfZdfSQ.ashx", "zlfyspmul");
                //验证请求sign
                sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);
                //如果下个是抄送人
                TaskFactory taskFactory = new TaskFactory();
                if (txfClass.NodeInfo[0].NodeInfoType == "3")
                {
                    //根据数据开启多个线程调用审批接口

                    taskFactory.StartNew(() =>
                    {
                        for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                        {
                            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "zlfyspmul");
                            webrequest.Method         = "post";
                            new Action(() =>
                            {
                                fasongqingqiu ad = new fasongqingqiu
                                {
                                    BillNo       = billno,
                                    DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                    IsSp         = "3",
                                    DDOperatorId = txfClass.InsteadOperatorGuid,
                                    OperatorName = txfClass.InsteadOperatorName,
                                    BillClassId  = txfClass.BillClassId,
                                    FeeType      = txfClass.FeeType,
                                    Sign         = sign
                                };
                                byte[] postdatabyte      = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad));
                                webrequest.ContentLength = postdatabyte.Length;
                                Stream stream;
                                stream = webrequest.GetRequestStream();
                                stream.Write(postdatabyte, 0, postdatabyte.Length);
                                stream.Close();
                                using (var httpWebResponse = webrequest.GetResponse())
                                    using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream()))
                                    {
                                        String ret = responseStream.ReadToEnd();
                                    }
                            }).Invoke();
                        }
                    });
                }

                if (txfClass.NodeInfo[0].NodeInfoType == "2")
                {
                    DataRow[] dataRows = null;

                    sql = "";
                    sql = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{billno}'  and BillClassId='{txfClass.BillClassId}' and ApprovalStatus ='1'";
                    DataTable logComments = da.GetDataTable(sql);
                    //如果下个环节中的人在之前已同意,自动调用此接口同意完成审批
                    taskFactory.StartNew(() =>
                    {
                        for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                        {
                            dataRows = logComments.Select("ApprovalID ='" + NodeInfodetailPeople[i].PersonId + "'");
                            //如果之前已经同意或者是发起人
                            if (dataRows.Length != 0 || da.GetValue($"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'").ToString() == txfClass.InsteadOperatorGuid)
                            {
                                HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "zlfyspmul");
                                webrequest.Method         = "post";
                                new Action(() =>
                                {
                                    fasongqingqiu ad = new fasongqingqiu
                                    {
                                        BillNo       = billno,
                                        DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                        IsSp         = "1",
                                        DDOperatorId = txfClass.InsteadOperatorGuid,
                                        OperatorName = txfClass.InsteadOperatorName,
                                        BillClassId  = txfClass.BillClassId,
                                        AuditingIdea = "同意",
                                        FeeType      = txfClass.FeeType,
                                        Sign         = sign
                                    };
                                    byte[] postdatabyte      = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(ad));
                                    webrequest.ContentLength = postdatabyte.Length;
                                    Stream stream;
                                    stream = webrequest.GetRequestStream();
                                    stream.Write(postdatabyte, 0, postdatabyte.Length);
                                    stream.Close();
                                    using (var httpWebResponse = webrequest.GetResponse())
                                        using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream()))
                                        {
                                            String ret = responseStream.ReadToEnd();
                                        }
                                }).Invoke();
                            }
                        }
                    });
                }

                //如果是撤回重新提交的,删除之前的单子
                if (!string.IsNullOrEmpty(txfClass.OldBillNo))
                {
                    da.ExecSql($"delete EXPEOTHER where billno = '{txfClass.OldBillNo}'");
                    da.ExecSql($"delete EXPEENTEMENT where billno = '{txfClass.OldBillNo}'");
                    da.ExecSql($"delete approvalcomments where billno = '{txfClass.OldBillNo}'");
                    da.Dispose();
                    ToolsClass.TxtLog("交通费、通讯费、招待费等费用报销申请日志", "\r\n删除旧单据:" + $"delete EXPEOTHER where billno = '{txfClass.OldBillNo}'" + $"delete EXPEENTEMENT where billno = '{txfClass.OldBillNo}'" + "\r\n");
                }
                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#14
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                    errcode = "1", errmsg = "请求方式不允许,请使用POST方式"
                }));
                return;
            }
            try
            {
                string signUrl = ToolsClass.GetConfig("signUrl");
                context.Response.ContentType = "text/plain";
                //数据库链接
                connectionString = ToolsClass.GetConfig("DataOnLine");
                string MedConfig180AuditingInfo = ToolsClass.GetConfig("MedConfig180AuditingInfo");
                //sqlServer
                da = new DbHelper.SqlHelper("SqlServer", connectionString);
                //获取请求json
                using (var reader = new StreamReader(context.Request.InputStream, Encoding.UTF8))
                {
                    CsJson = reader.ReadToEnd();
                }

                if (CsJson == "")
                {
                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                        errcode = "1", errmsg = "报文格式错误"
                    }));
                    return;
                }
                CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
                ToolsClass.TxtLog("获取审批流程信息日志", "\r\n入参:" + CsJson + "\r\n");
                //json转Hashtable
                object    jgobj      = ToolsClass.DeserializeObject(CsJson);
                Hashtable returnhash = jgobj as Hashtable;
                if (returnhash == null)
                {
                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                        errcode = "1", errmsg = "报文格式错误"
                    }));
                    return;
                }

                string path = context.Request.Path.Replace("Approval/ProcessInfo.ashx", "getprocessbegin");
                //验证请求sign
                string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);
                ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + returnhash["Sign"].ToString() + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
                if (sign != returnhash["Sign"].ToString())
                {
                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                        errcode = "1", errmsg = "Sign不正确"
                    }));
                    return;
                }
                string MedConfig180 = string.Empty;
                selType        = returnhash["TypeId"].ToString();
                DDOperatorId   = returnhash["DDOperatorId"].ToString();
                DDOperatorName = returnhash["DDOperatorName"].ToString();
                if (returnhash.ContainsKey("MedConfig180"))
                {
                    MedConfig180 = returnhash["MedConfig180"].ToString();
                }
                //#微应用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");

                #region 获取access_token

                url    = "https://oapi.dingtalk.com/gettoken?appkey=" + appKey + "&appsecret=" + appSecret;
                fjsons = ToolsClass.ApiFun("GET", url, "");

                TokenClass tokenClass = new TokenClass();
                tokenClass   = (TokenClass)JsonConvert.DeserializeObject(fjsons, typeof(TokenClass));
                access_token = tokenClass.access_token;
                int errcode = tokenClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"" + tokenClass.errmsg + "\",\"errcode\":1}");
                    return;
                }

                #endregion 获取access_token

                #region 获取用户详情

                url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + DDOperatorId;
                fjsons = ToolsClass.ApiFun("GET", url, "");

                GetUserXq userXqClass = new GetUserXq();
                userXqClass = (GetUserXq)JsonConvert.DeserializeObject(fjsons, typeof(GetUserXq));
                errcode     = userXqClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                        errcode = "1", errmsg = userXqClass.errmsg
                    }));
                    return;
                }

                #endregion 获取用户详情
                List <RUPNodeinfo> NodeInfo      = new List <RUPNodeinfo>();
                string             returnProcess = "";
                //取用户信息,进入功能时获取审批流程信息
                if (selType == "psin")
                {
                    //如果是高级领导发起审批
                    if (da.GetDataTable($"select * from flowemployee where orgcode ='00' and isleader='1' and ddid='{DDOperatorId}' and disable ='0'").Rows.Count != 0)
                    {
                        DataTable roleWithEmp = da.GetDataTable("select distinct Type,PersonId,PersonName  from RoleWithEmp where status = '1'");
                        if (roleWithEmp.Rows.Count == 0)
                        {
                            context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                                errcode = "1", errmsg = "未配置高级领导审批流程,请联系相关人员进行RoleWithEmp中数据配置!"
                            }));
                            return;
                        }
                        DataRow[] dataRows1, dataRows2 = null;
                        //为1 的是集团财务
                        dataRows1 = roleWithEmp.Select("Type ='1'");
                        List <RUPNodeinfodetail>
                        NodeInfoDetailsCW     = new List <RUPNodeinfodetail>(),
                            NodeInfoDetailsCN = new List <RUPNodeinfodetail>();
                        List <RUPPerson>
                        Personscaiwu  = new List <RUPPerson>(),
                            Personscn = new List <RUPPerson>();

                        for (int ri = 0; ri < dataRows1.Length; ri++)
                        {
                            Personscaiwu.Add(new RUPPerson {
                                AType      = "集团财务",
                                PersonId   = dataRows1[ri]["PersonId"].SqlDataBankToString(),
                                PersonName = dataRows1[ri]["PersonName"].SqlDataBankToString()
                            });
                        }
                        NodeInfoDetailsCW.Add(new RUPNodeinfodetail {
                            GroupType = "集团财务",
                            IsAndOr   = "1",
                            IsLeader  = "0",
                            Persons   = Personscaiwu
                        });
                        NodeInfo.Add(new RUPNodeinfo {
                            NodeInfoDetails = NodeInfoDetailsCW, NodeInfoType = "2"
                        });
                        //为2的是出纳
                        dataRows2 = roleWithEmp.Select("Type ='2'");
                        for (int ci = 0; ci < dataRows2.Length; ci++)
                        {
                            Personscn.Add(new RUPPerson {
                                AType      = "出纳",
                                PersonId   = dataRows2[ci]["PersonId"].SqlDataBankToString(),
                                PersonName = dataRows2[ci]["PersonName"].SqlDataBankToString()
                            });
                        }
                        NodeInfoDetailsCN.Add(new RUPNodeinfodetail
                        {
                            GroupType = "出纳",
                            IsAndOr   = "1",
                            IsLeader  = "0",
                            Persons   = Personscn
                        });

                        NodeInfo.Add(new RUPNodeinfo {
                            NodeInfoDetails = NodeInfoDetailsCN, NodeInfoType = "2"
                        });
                        returnProcess = JsonConvert.SerializeObject(new ReturnUserProcess {
                            NodeInfo = NodeInfo,
                            errcode  = "0",
                            errmsg   = ""
                        });
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("获取审批流程信息日志", "\r\n返回高级领导审批流程:" + returnProcess + "\r\n");
                        }
                        context.Response.Write(returnProcess);
                        return;
                    }

                    if (MedConfig180 == "1")
                    {
                        List <RUPNodeinfodetail> NodeInfoDetailsYB = new List <RUPNodeinfodetail>();
                        List <RUPPerson>         PersonsYB         = new List <RUPPerson>();

                        NodeInfo.Clear();
                        PersonsYB.Add(new RUPPerson {
                            AType      = "指定人",
                            PersonId   = MedConfig180AuditingInfo.Split(',')[0],
                            PersonName = MedConfig180AuditingInfo.Split(',')[1]
                        });
                        NodeInfoDetailsYB.Add(new RUPNodeinfodetail
                        {
                            GroupType = "指定人",
                            IsAndOr   = "1",
                            IsLeader  = "0",
                            Persons   = PersonsYB
                        });
                        NodeInfo.Add(new RUPNodeinfo
                        {
                            NodeInfoDetails = NodeInfoDetailsYB,
                            NodeInfoType    = "2"
                        });
                        returnProcess = JsonConvert.SerializeObject(new ReturnUserProcess
                        {
                            NodeInfo = NodeInfo,
                            errcode  = "0",
                            errmsg   = ""
                        });
                        context.Response.Write(returnProcess);
                        return;
                    }

                    string BillClassId = returnhash["BillClassId"].ToString();
                    string billName    = returnhash["BillName"].ToString();
                    string deptCode    = returnhash["DeptCode"].ToString();
                    sql = $"select nodeid,BilliClassid,BillClassName,NodeNumber,CharacterTypes,ApprovalType,persons,IsAndOr,IsEnd from ApprovalNode where BilliClassid = '{BillClassId}' order by NodeNumber";
                    //找到相对应的流程信息
                    DataTable processdt = da.GetDataTable(sql);
                    DataTable deptdt;
                    DataTable roledt;

                    NodeInfo.Clear();

                    //嗯 开始组json,如果你看到这段代码,劝你别轻举妄动,仔细观察再改,容易出事,修改之前切记切记,三思而后行
                    List <RUPPerson>
                    PersonsRy,
                        PersonsJs,
                        PersonsCs,
                        PersonsBm1 = new List <RUPPerson>(),
                        PersonsBm2 = new List <RUPPerson>(),
                        PersonsBm3 = new List <RUPPerson>(),
                        PersonsBm4 = new List <RUPPerson>(),
                        PersonsBm5 = new List <RUPPerson>();

                    List <RUPNodeinfodetail>
                    NodeInfoDetailsRy,
                        NodeInfoDetailsCs,
                        NodeInfoDetailsJs,
                        NodeInfoDetailsBm1 = new List <RUPNodeinfodetail>(),
                        NodeInfoDetailsBm2 = new List <RUPNodeinfodetail>(),
                        NodeInfoDetailsBm3 = new List <RUPNodeinfodetail>(),
                        NodeInfoDetailsBm4 = new List <RUPNodeinfodetail>(),
                        NodeInfoDetailsBm5 = new List <RUPNodeinfodetail>();

                    PSPPerson pSPPerson = new PSPPerson();
                    string    deptid, deptname;
                    //是否是主管
                    PSPApprovalType pSPApprovalType = new PSPApprovalType();
                    for (int i = 0; i < processdt.Rows.Count; i++)
                    {
                        PSPPerson[] Persons = (PSPPerson[])JsonConvert.DeserializeObject(processdt.Rows[i]["Persons"].SqlDataBankToString(), typeof(PSPPerson[]));
                        if (processdt.Rows[i]["CharacterTypes"].SqlDataBankToString() == "2")
                        {
                            pSPApprovalType = null;
                            pSPApprovalType = (PSPApprovalType)JsonConvert.DeserializeObject(processdt.Rows[i]["ApprovalType"].SqlDataBankToString(), typeof(PSPApprovalType));

                            //按照人员审批
                            if (pSPApprovalType.Type == "1")
                            {
                                PersonsRy         = new List <RUPPerson>();
                                NodeInfoDetailsRy = new List <RUPNodeinfodetail>();
                                for (int k = 0; k < Persons.Length; k++)
                                {
                                    PersonsRy.Add(new RUPPerson
                                    {
                                        AType      = "指定人",
                                        PersonId   = Persons[k].PersonId,
                                        PersonName = Persons[k].PersonName
                                    });
                                }
                                NodeInfoDetailsRy.Add(new RUPNodeinfodetail
                                {
                                    GroupType = "指定人",
                                    IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                    IsLeader  = "0",
                                    Persons   = PersonsRy
                                });
                                NodeInfo.Add(new RUPNodeinfo
                                {
                                    NodeInfoDetails = NodeInfoDetailsRy,
                                    NodeInfoType    = "2"
                                });
                            }
                            //按照部门审批
                            if (pSPApprovalType.Type == "2")
                            {
                                //查询当前的人的级别以及部门编号 取isleader最大的为准
                                sql = $"select a.IsLeader IsLeader, b.guid orgcode from FlowEmployee a join Organization b on a.orgcode = b. guid where a.EmployeeCode = '{userXqClass.jobnumber}' and a.orgcode ='{deptCode}' and a.disable ='0' order by a.IsLeader desc";

                                DataTable loinfo = da.GetDataTable(sql);
                                if (loinfo.Rows.Count == 0)
                                {
                                    context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                                        errcode = "1", errmsg = "未配置审批流程,请联系相关人员进行FlowEmployee表配置!"
                                    }));
                                    return;
                                }
                                string leaderlevel = loinfo.Rows[0]["IsLeader"].SqlDataBankToString();
                                string orgcode     = loinfo.Rows[0]["orgcode"].SqlDataBankToString();
                                //直接主管 一级主管
                                if (pSPApprovalType.Level == "1")
                                {
                                    //判断他是否是主管
                                    if (int.Parse(leaderlevel) > 0)
                                    {
                                        sql = null;
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}') and disable ='0' and IsLeader ='1' ";
                                    }
                                    else
                                    {
                                        sql = null;
                                        // sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select guid from Organization where guid = '{orgcode}') and disable ='0' and  IsLeader ='{int.Parse(leaderlevel) + 1}'";

                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select guid from Organization where guid = '{orgcode}') and disable ='0' and  IsLeader ='1'";
                                    }
                                    deptdt = da.GetDataTable(sql);
                                    if (deptdt.Rows.Count != 0)
                                    {
                                        for (int k = 0; k < deptdt.Rows.Count; k++)
                                        {
                                            deptid   = deptdt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                            deptname = deptdt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                            PersonsBm1.Add(new RUPPerson
                                            {
                                                AType      = "直接主管",
                                                PersonId   = deptid,
                                                PersonName = deptname
                                            });
                                        }
                                        NodeInfoDetailsBm1.Add(new RUPNodeinfodetail
                                        {
                                            GroupType = "直接主管",
                                            IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                            IsLeader  = "1",
                                            Persons   = PersonsBm1
                                        });
                                        NodeInfo.Add(new RUPNodeinfo
                                        {
                                            NodeInfoDetails = NodeInfoDetailsBm1,
                                            NodeInfoType    = "2"
                                        });
                                    }
                                }
                                //二级主管
                                if (pSPApprovalType.Level == "2")
                                {
                                    //判断他是否是主管
                                    if (int.Parse(leaderlevel) > 0)
                                    {
                                        //二级主管
                                        sql = null;
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}')) and disable ='0' and IsLeader ='{int.Parse(leaderlevel) + 2}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}')) and disable ='0' and IsLeader ='1'";
                                    }
                                    else
                                    //当前人不是主管
                                    {
                                        sql = null;
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}')) and disable ='0' and IsLeader ='{int.Parse(leaderlevel) + 2}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}')) and disable ='0' and IsLeader ='1'";
                                    }
                                    deptdt = da.GetDataTable(sql);
                                    if (deptdt.Rows.Count != 0)
                                    {
                                        for (int k = 0; k < deptdt.Rows.Count; k++)
                                        {
                                            deptid   = deptdt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                            deptname = deptdt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                            PersonsBm2.Add(new RUPPerson
                                            {
                                                AType      = "二级主管",
                                                PersonId   = deptid,
                                                PersonName = deptname
                                            });
                                        }
                                        NodeInfoDetailsBm2.Add(new RUPNodeinfodetail
                                        {
                                            GroupType = "二级主管",
                                            IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                            IsLeader  = "1",
                                            Persons   = PersonsBm2
                                        });
                                        NodeInfo.Add(new RUPNodeinfo
                                        {
                                            NodeInfoDetails = NodeInfoDetailsBm2,
                                            NodeInfoType    = "2"
                                        });
                                    }
                                }
                                //三级主管
                                if (pSPApprovalType.Level == "3")
                                {
                                    //判断他是否是主管
                                    if (int.Parse(leaderlevel) > 0)
                                    {
                                        sql = null;
                                        //三级主管
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}'))) and disable ='0'  and IsLeader ='{int.Parse(leaderlevel) + 3}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}'))) and disable ='0'  and IsLeader ='1";
                                    }
                                    else
                                    {
                                        sql = null;
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}'))) and disable ='0'  and IsLeader ='{int.Parse(leaderlevel) + 3}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}'))) and disable ='0'  and IsLeader ='1";
                                    }
                                    deptdt = da.GetDataTable(sql);
                                    if (deptdt.Rows.Count != 0)
                                    {
                                        for (int k = 0; k < deptdt.Rows.Count; k++)
                                        {
                                            deptid   = deptdt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                            deptname = deptdt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                            PersonsBm3.Add(new RUPPerson
                                            {
                                                AType      = "三级主管",
                                                PersonId   = deptid,
                                                PersonName = deptname
                                            });
                                        }
                                        NodeInfoDetailsBm3.Add(new RUPNodeinfodetail
                                        {
                                            GroupType = "三级主管",
                                            IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                            IsLeader  = "1",
                                            Persons   = PersonsBm3
                                        });
                                        NodeInfo.Add(new RUPNodeinfo
                                        {
                                            NodeInfoDetails = NodeInfoDetailsBm3,
                                            NodeInfoType    = "2"
                                        });
                                    }
                                }
                                //四级主管
                                if (pSPApprovalType.Level == "4")
                                {
                                    //判断他是否是主管
                                    if (int.Parse(leaderlevel) > 0)
                                    {
                                        sql = null;
                                        //四级主管
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}')))) and disable ='0'  and IsLeader ='{int.Parse(leaderlevel) + 4}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}')))) and disable ='0'  and IsLeader ='1'";
                                    }
                                    else
                                    {
                                        sql = null;
                                        //员工的四级主管
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}')))) and disable ='0' and IsLeader ='{int.Parse(leaderlevel) + 4}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}')))) and disable ='0' and IsLeader ='1'";
                                    }
                                    deptdt = da.GetDataTable(sql);
                                    if (deptdt.Rows.Count != 0)
                                    {
                                        for (int k = 0; k < deptdt.Rows.Count; k++)
                                        {
                                            deptid   = deptdt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                            deptname = deptdt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                            PersonsBm4.Add(new RUPPerson
                                            {
                                                AType      = "四级主管",
                                                PersonId   = deptid,
                                                PersonName = deptname
                                            });
                                        }
                                        NodeInfoDetailsBm4.Add(new RUPNodeinfodetail
                                        {
                                            GroupType = "四级主管",
                                            IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                            IsLeader  = "1",
                                            Persons   = PersonsBm4
                                        });
                                        NodeInfo.Add(new RUPNodeinfo
                                        {
                                            NodeInfoDetails = NodeInfoDetailsBm4,
                                            NodeInfoType    = "2"
                                        });
                                    }
                                }
                                //五级主管
                                if (pSPApprovalType.Level == "5")
                                {
                                    //判断他是否是主管
                                    if (int.Parse(leaderlevel) > 0)
                                    {
                                        sql = null;
                                        //五级主管
                                        //sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}'))))) and disable ='0'  and IsLeader ='{int.Parse(leaderlevel) + 5}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = '{orgcode}'))))) and disable ='0'  and IsLeader ='1'";
                                    }
                                    else
                                    {
                                        sql = null;
                                        //员工的五级主管
                                        // sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}'))))) and disable ='0' and IsLeader ='{int.Parse(leaderlevel) + 5}'";
                                        sql = $"select  EmployeeCode, EmployeeName from FlowEmployee where orgcode =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid =(select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid = (select  case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select case when isnull(Guid,'')='00' then '' else ParentGuid end ParentGuid from Organization where guid= (select guid from Organization where guid = '{orgcode}'))))) and disable ='0' and IsLeader ='1'";
                                    }
                                    deptdt = da.GetDataTable(sql);
                                    if (deptdt.Rows.Count != 0)
                                    {
                                        for (int k = 0; k < deptdt.Rows.Count; k++)
                                        {
                                            deptid   = deptdt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                            deptname = deptdt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                            PersonsBm5.Add(new RUPPerson
                                            {
                                                AType      = "五级主管",
                                                PersonId   = deptid,
                                                PersonName = deptname
                                            });
                                        }
                                        NodeInfoDetailsBm5.Add(new RUPNodeinfodetail
                                        {
                                            GroupType = "五级主管",
                                            IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                            IsLeader  = "1",
                                            Persons   = PersonsBm5
                                        });
                                        NodeInfo.Add(new RUPNodeinfo
                                        {
                                            NodeInfoDetails = NodeInfoDetailsBm5,
                                            NodeInfoType    = "2"
                                        });
                                    }
                                }
                            }
                            //按角色审批 type 为3 level 为角色id
                            if (pSPApprovalType.Type == "3")
                            {
                                #region

                                //当前操作人的部门deptCode
                                //当前环节的角色组名称是pSPApprovalType.Level
                                sql = "";
                                sql = $"select distinct a.EmployeeCode EmployeeCode, a.EmployeeName EmployeeName,b.RoleName RoleName,c.roleid from FlowEmployee a join EmpsRoleId c on a.EmployeeCode = c.EmployeeCode join role b on b.roleid = c.roleid  where  c.RoleId in (select RoleId from RoleWithOrg where orgcode='{deptCode}' and status ='1') and c.Roleid in (select Roleid from Role where RoleGroupId = '{pSPApprovalType.Level}' and status ='1') and a.disable ='0' and c.status ='1' and b.status='1'";
                                ToolsClass.TxtLog("获取审批流程信息", "\r\n查询相应角色sql:" + sql + "\r\n");
                                roledt = da.GetDataTable(sql);
                                if (roledt.Rows.Count != 0)
                                {
                                    NodeInfoDetailsJs = new List <RUPNodeinfodetail>();
                                    PersonsJs         = new List <RUPPerson>();
                                    for (int k = 0; k < roledt.Rows.Count; k++)
                                    {
                                        deptid   = roledt.Rows[k]["EmployeeCode"].SqlDataBankToString();
                                        deptname = roledt.Rows[k]["EmployeeName"].SqlDataBankToString();
                                        PersonsJs.Add(new RUPPerson
                                        {
                                            AType      = roledt.Rows[k]["RoleName"].SqlDataBankToString(),
                                            PersonId   = deptid,
                                            PersonName = deptname
                                        });
                                    }
                                    NodeInfoDetailsJs.Add(new RUPNodeinfodetail
                                    {
                                        GroupType = da.GetValue($"select RoleGroupName from RoleGroup where RoleGroupId ='{pSPApprovalType.Level}'").SqlDataBankToString(),
                                        IsAndOr   = processdt.Rows[i]["IsAndOr"].SqlDataBankToString(),
                                        IsLeader  = "0",
                                        Persons   = PersonsJs
                                    });
                                    NodeInfo.Add(new RUPNodeinfo
                                    {
                                        NodeInfoDetails = NodeInfoDetailsJs,
                                        NodeInfoType    = "2"
                                    });
                                }
                                #endregion
                            }
                        }
                        //抄送环节
                        if (processdt.Rows[i]["CharacterTypes"].SqlDataBankToString() == "3")
                        {
                            NodeInfoDetailsCs = new List <RUPNodeinfodetail>();
                            PersonsCs         = new List <RUPPerson>();
                            for (int k = 0; k < Persons.Length; k++)
                            {
                                PersonsCs.Add(new RUPPerson
                                {
                                    AType      = "抄送人",
                                    PersonId   = Persons[k].PersonId,
                                    PersonName = Persons[k].PersonName
                                });
                            }
                            NodeInfoDetailsCs.Add(new RUPNodeinfodetail
                            {
                                GroupType = "抄送人",
                                IsAndOr   = "",
                                IsLeader  = "0",
                                Persons   = PersonsCs
                            });
                            NodeInfo.Add(new RUPNodeinfo
                            {
                                NodeInfoDetails = NodeInfoDetailsCs,
                                NodeInfoType    = "3"
                            });
                        }
                    }
                    returnProcess = JsonConvert.SerializeObject(new ReturnUserProcess
                    {
                        NodeInfo = NodeInfo,
                        errcode  = "0",
                        errmsg   = ""
                    });
                    ToolsClass.TxtLog("获取审批流程信息日志", "\r\n返回当前操作人审批流程:" + returnProcess + "\r\n");
                    context.Response.Write(returnProcess);
                    return;
                }

                //获取用户当前的部门
                else if (selType == "deptin")
                {
                    sql = $"select a.IsLeader IsLeader, b.guid orgcode,b.Name orgName,b.ParentGuid from FlowEmployee a join Organization b on a.orgcode = b. guid where a.EmployeeCode = '{userXqClass.jobnumber}' and a.disable = '0'";
                    DataTable           loinfo = da.GetDataTable(sql);
                    string              orgcode, orgName, ParentGuid;
                    List <Organization> DeptInfo = new List <Organization>();
                    for (int i = 0; i < loinfo.Rows.Count; i++)
                    {
                        orgcode    = loinfo.Rows[i]["orgcode"].SqlDataBankToString();
                        orgName    = loinfo.Rows[i]["orgName"].SqlDataBankToString();
                        ParentGuid = loinfo.Rows[i]["ParentGuid"].SqlDataBankToString();
                        DeptInfo.Add(new Organization
                        {
                            OrgCode    = orgcode,
                            OrgName    = orgName,
                            ParentGuid = ParentGuid
                        });
                    }
                    string result = JsonConvert.SerializeObject(new ReturnUserOrg {
                        DeptInfo = DeptInfo,
                        errcode  = "0",
                        errmsg   = "ok"
                    });
                    ToolsClass.TxtLog("获取用户当前的部门", $"执行的sql:{ sql }\r\n,返回的数据:\r\n{result}");
                    context.Response.Write(result);
                    return;
                }
            }
            catch (Exception ex)
            {
                context.Response.Write(JsonConvert.SerializeObject(new CommonModel {
                    errcode = "1", errmsg = ex.Message
                }));
                return;
            }
        }
示例#15
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 signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
            string ymadk   = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
            string JsonData = CsJson;

            //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
            AppWyy    = ToolsClass.GetConfig("AppWyy");
            ScList    = AppWyy.Split('$');
            agentId   = ScList[0].ToString();
            corpId    = ScList[1].ToString();
            appKey    = ScList[2].ToString();
            appSecret = ScList[3].ToString();

            isWrite = ToolsClass.GetConfig("isWrite");
            ddUrl   = ToolsClass.GetConfig("ddUrl");

            if (isWrite == "1")
            {
                ToolsClass.TxtLog("多级审批出差申请日志", "\r\n申请入参:" + CsJson + "\r\n");
            }

            TAMcs tAMcs = new TAMcs();

            tAMcs = (TAMcs)JsonConvert.DeserializeObject(CsJson, typeof(TAMcs));
            string path = context.Request.Path.Replace("Approval/TAMultistage.ashx", "tam");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

            ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + tAMcs.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
            if (sign != tAMcs.Sign)
            {
                context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                return;
            }
            //string s = JsonConvert.SerializeObject(tAMcs.NodeInfo);
            string NodeInfo = JsonConvert.SerializeObject(tAMcs.NodeInfo).Replace(",{\"AType\":\"\",\"PersonId\":\"select\",\"PersonName\":\"请选择\"}", "");

            if (tAMcs.Detail.Length <= 0)
            {
                context.Response.Write("{\"errmsg\":\"行程不允许为空,请添加行程(DD6001)\",\"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=" + tAMcs.DDOperatorId;
                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;
                }
                operatorName = userXqClass.name;

                #endregion 获取用户详情

                #region 获取用户guid

                Sql = "select top 1 guid from  FlowEmployee where employeecode='" + userXqClass.jobnumber + $"' and orgcode='{tAMcs.DeptCode}'";
                obj = da.GetValue(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}");
                    return;
                }
                operatorGuid = obj.ToString();

                #endregion 获取用户guid

                #region 获取申请流水号

                Sql    = "select dbo.GetBillNo('DDTrvelReq','" + userXqClass.jobnumber + "',getdate())";
                obj    = da.GetValue(Sql);
                billno = obj.ToString();

                if (billno == "1")
                {
                    billno = "CL" + userXqClass.jobnumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                    Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq' and BillDate<>convert(varchar(20),GETDATE(),120)";
                }
                else
                {
                    Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq'";
                }
                obj = da.ExecSql(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                    return;
                }

                if (tAMcs.NodeInfo.Length == 0)
                {
                    //自动同意

                    #region 保存行程信息

                    sqlList.Clear();
                    sqlTou.Clear();

                    sqlTou.Append("insert into TravelReq(BillNo,TravelReason,Notes,DeptName,DeptCode,DDOperatorId,OperatorGuid,Urls,ProcessNodeInfo,BillDate,IsAuditing,OperatorName,AppendixUrl,PictureUrl) values('").Append(billno).Append("','")
                    .Append(tAMcs.TravelReason).Append("','")
                    .Append(tAMcs.Notes).Append("','")
                    .Append(tAMcs.DeptName).Append("','")
                    .Append(tAMcs.DeptCode).Append("','")
                    .Append(tAMcs.DDOperatorId).Append("','")
                    .Append(operatorGuid).Append("','")    //内部数据库用户GUID
                    .Append(JsonConvert.SerializeObject(tAMcs.Urls)).Append("','")
                    .Append(NodeInfo).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                    .Append("0").Append("','")
                    .Append(operatorName).Append("','");
                    if (string.IsNullOrEmpty(tAMcs.AppendixUrl))
                    {
                        sqlTou.Append("未传").Append("','");
                    }
                    else
                    {
                        sqlTou.Append(tAMcs.AppendixUrl).Append("','");
                    }
                    if (string.IsNullOrEmpty(tAMcs.PictureUrl))
                    {
                        sqlTou.Append("未传").Append("')");
                    }
                    else
                    {
                        sqlTou.Append(tAMcs.PictureUrl).Append("')");
                    }
                    sqlList.Add(sqlTou.ToString());

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

                    sqlTou.Clear();
                    sqlTou.Append("insert into TravelReqDetail(BillNo,Guid,TranMode,OtherTranMode,IsReturn,DepaCity,DepaCity1,DepaCity2,DestCity,DestCity1,DestCity2,StartDate,EndDate,Hours,Days,BearOrga,CustCode,CustName,Peers,PeersName) values('");
                    for (int i = 0; i < tAMcs.Detail.Length; i++)
                    {
                        sqlTi.Clear();
                        sqlTi.Append(sqlTou.ToString()).Append(billno).Append("','")
                        .Append(Guid.NewGuid().ToString()).Append("','")
                        .Append(tAMcs.Detail[i].TranMode).Append("','")
                        .Append(tAMcs.Detail[i].OtherTranMode).Append("','")
                        .Append(tAMcs.Detail[i].IsReturn).Append("','")
                        .Append(tAMcs.Detail[i].DepaCity).Append("','")
                        .Append(tAMcs.Detail[i].DepaCity1).Append("','")
                        .Append(tAMcs.Detail[i].DepaCity2).Append("','")
                        .Append(tAMcs.Detail[i].DestCity).Append("','")
                        .Append(tAMcs.Detail[i].DestCity1).Append("','")
                        .Append(tAMcs.Detail[i].DestCity2).Append("','")
                        .Append(tAMcs.Detail[i].StartDate).Append(":01','")
                        .Append(tAMcs.Detail[i].EndDate).Append(":01','")
                        .Append(tAMcs.Detail[i].Hours).Append("','")
                        .Append(tAMcs.Detail[i].Days).Append("','")
                        .Append(tAMcs.Detail[i].BearOrga).Append("','")
                        .Append(tAMcs.Detail[i].CustCode).Append("','")
                        .Append(tAMcs.Detail[i].CustName).Append("','")
                        .Append(tAMcs.Detail[i].Peers).Append("','")
                        .Append(tAMcs.Detail[i].PeersName).Append("')");
                        sqlList.Add(sqlTi.ToString());
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("多级审批出差申请日志", "操作TravelReq表:" + sqlTi.ToString() + "\r\n");
                        }
                    }
                    //执行SQL语句Insert
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 保存行程信息

                    Sql = "update TravelReq set isauditing='1',auditingdate=getdate()  where billno='" + billno + "'";
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("多级审批出差申请审批日志", "\r\n操作TravelReq表:" + Sql.ToString() + "\r\n");
                    }
                    obj = da.ExecSql(Sql);

                    urlcsjson = ddUrl + $"/shenpi/index.html?billno={billno}&BillClassId={tAMcs.BillClassId}&showmenu=false";
                    urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                    url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                    CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + tAMcs.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + operatorName + "的【出差】申请\",\"text\":\"出发日期: " + tAMcs.Detail[0].StartDate.Substring(0, 10) + "\r\n返程日期: " + tAMcs.Detail[0].EndDate.Substring(0, 10) + "\r\n事由: " + tAMcs.TravelReason + "\"}}}";
                    FhJson    = ToolsClass.ApiFun("POST", url, CsJson);

                    context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                    return;
                }

                #endregion 获取申请流水号

                //获取第一级流程的人员信息
                NodeInfoDetailPerson[] NodeInfodetailPeople = tAMcs.NodeInfo[0].NodeInfoDetails[0].Persons;

                //从入参中得到审批人及抄送人的信息
                //指定人员的id列表
                StringBuilder piddept = new StringBuilder();
                string        sql     = "";

                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    if (i > 0)
                    {
                        piddept.Append(",");
                    }

                    //判断传空
                    if (NodeInfodetailPeople[i].PersonId != "select" && NodeInfodetailPeople[i].PersonId != "")
                    {
                        sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'";
                        piddept.Append(da.GetValue(sql).ToString());
                    }
                }

                #region 保存行程信息

                sqlList.Clear();
                sqlTou.Clear();

                sqlTou.Append("insert into TravelReq(BillNo,TravelReason,Notes,DeptName,DeptCode,DDOperatorId,OperatorGuid,JsonData,Urls,ProcessNodeInfo,BillDate,IsAuditing,OperatorName,AppendixUrl,PictureUrl) values('").Append(billno).Append("','")
                .Append(tAMcs.TravelReason).Append("','")
                .Append(tAMcs.Notes).Append("','")
                .Append(tAMcs.DeptName).Append("','")
                .Append(tAMcs.DeptCode).Append("','")
                .Append(tAMcs.DDOperatorId).Append("','")
                .Append(operatorGuid).Append("','")    //内部数据库用户GUID
                .Append(JsonData).Append("','")
                .Append(JsonConvert.SerializeObject(tAMcs.Urls)).Append("','")
                .Append(NodeInfo).Append("','")
                .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                .Append("0").Append("','")
                .Append(operatorName).Append("','");
                if (string.IsNullOrEmpty(tAMcs.AppendixUrl))
                {
                    sqlTou.Append("未传").Append("','");
                }
                else
                {
                    sqlTou.Append(tAMcs.AppendixUrl).Append("','");
                }
                if (string.IsNullOrEmpty(tAMcs.PictureUrl))
                {
                    sqlTou.Append("未传").Append("')");
                }
                else
                {
                    sqlTou.Append(tAMcs.PictureUrl).Append("')");
                }
                sqlList.Add(sqlTou.ToString());

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

                sqlTou.Clear();
                sqlTou.Append("insert into TravelReqDetail(BillNo,Guid,TranMode,OtherTranMode,IsReturn,DepaCity,DepaCity1,DepaCity2,DestCity,DestCity1,DestCity2,StartDate,EndDate,Hours,Days,BearOrga,CustCode,CustName,Peers,PeersName) values('");
                for (int i = 0; i < tAMcs.Detail.Length; i++)
                {
                    sqlTi.Clear();
                    sqlTi.Append(sqlTou.ToString()).Append(billno).Append("','")
                    .Append(Guid.NewGuid().ToString()).Append("','")
                    .Append(tAMcs.Detail[i].TranMode).Append("','")
                    .Append(tAMcs.Detail[i].OtherTranMode).Append("','")
                    .Append(tAMcs.Detail[i].IsReturn).Append("','")
                    .Append(tAMcs.Detail[i].DepaCity).Append("','")
                    .Append(tAMcs.Detail[i].DepaCity1).Append("','")
                    .Append(tAMcs.Detail[i].DepaCity2).Append("','")
                    .Append(tAMcs.Detail[i].DestCity).Append("','")
                    .Append(tAMcs.Detail[i].DestCity1).Append("','")
                    .Append(tAMcs.Detail[i].DestCity2).Append("','")
                    .Append(tAMcs.Detail[i].StartDate).Append(":01','")
                    .Append(tAMcs.Detail[i].EndDate).Append(":01','")
                    .Append(tAMcs.Detail[i].Hours).Append("','")
                    .Append(tAMcs.Detail[i].Days).Append("','")
                    .Append(tAMcs.Detail[i].BearOrga).Append("','")
                    .Append(tAMcs.Detail[i].CustCode).Append("','")
                    .Append(tAMcs.Detail[i].CustName).Append("','")
                    .Append(tAMcs.Detail[i].Peers).Append("','")
                    .Append(tAMcs.Detail[i].PeersName).Append("')");
                    sqlList.Add(sqlTi.ToString());
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("多级审批出差申请日志", "操作TravelReq表:" + sqlTi.ToString() + "\r\n");
                    }
                }
                //执行SQL语句Insert
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                #endregion 保存行程信息

                //保存流程信息到comments表
                sqlList.Clear();
                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    sqlTou.Clear();
                    if (NodeInfodetailPeople[i].PersonId != "select")
                    {
                        sqlTou.Append("insert into ApprovalComments(CommentsId,BillClassId,BillNo,ApprovalID,ApprovalName,ApprovalComments,ApprovalStatus,AType,ApprovalDate,IsAndOr,IsLeader,PersonType,NodeNumber) values('").Append(Guid.NewGuid().ToString()).Append("','")
                        .Append(tAMcs.BillClassId).Append("','")
                        .Append(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(tAMcs.NodeInfo[0].NodeInfoDetails[0].IsAndOr).Append("','")
                        .Append(tAMcs.NodeInfo[0].NodeInfoDetails[0].IsLeader).Append("','")
                        .Append(tAMcs.NodeInfo[0].NodeInfoType).Append("','")
                        .Append("2").Append("')");
                        sqlList.Add(sqlTou.ToString());
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("多级审批出差申请日志", "\r\n操作ApprovalComments表:" + sqlTou.ToString() + "\r\n");
                        }
                    }
                }
                //执行SQL语句Insert
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存出差申请节点信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                #region 发送工作通知消息

                url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                urlcsjson = ddUrl + $"/shenpi/index.html?billno={billno}&BillClassId={tAMcs.BillClassId}&showmenu=false";
                urlcsjson = HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + piddept.ToString() + "," + tAMcs.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + operatorName + "的【出差】申请\",\"text\":\"出发日期: " + tAMcs.Detail[0].StartDate.Substring(0, 10) + "\r\n返程日期: " + tAMcs.Detail[0].EndDate.Substring(0, 10) + "\r\n事由: " + tAMcs.TravelReason + "\"}}}";
                FhJson    = ToolsClass.ApiFun("POST", url, CsJson);

                ToolsClass.TxtLog("多级审批出差申请日志", "发起申请" + CsJson.ToString() + "\r\n");
                XXTZ xxtzClass = new XXTZ();
                xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode   = xxtzClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的出差申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }

                #endregion 发送工作通知消息

                path = context.Request.Path.Replace("Approval/TAMultistage.ashx", "tasp");
                //验证请求sign
                sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);
                TaskFactory taskFactory = new TaskFactory();
                if (tAMcs.NodeInfo[0].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       = billno,
                                    DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                    IsAuditing   = "3",
                                    DDOperatorId = tAMcs.DDOperatorId,
                                    OperatorName = operatorName,
                                    BillClassId  = tAMcs.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 (tAMcs.NodeInfo[0].NodeInfoType == "2")
                {
                    DataRow[] dataRows = null;

                    sql = "";
                    sql = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{billno}'  and BillClassId='{tAMcs.BillClassId}' and ApprovalStatus ='1'";
                    DataTable logComments = da.GetDataTable(sql);
                    //如果下个环节中的人在之前已同意,自动调用此接口同意完成审批
                    taskFactory.StartNew(() =>
                    {
                        for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                        {
                            dataRows = logComments.Select("ApprovalID ='" + NodeInfodetailPeople[i].PersonId + "'");
                            //如果之前已经同意或者是发起人
                            if (dataRows.Length != 0 || da.GetValue($"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'").ToString() == tAMcs.DDOperatorId)
                            {
                                HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "tasp");
                                webrequest.Method         = "post";
                                new Action(() =>
                                {
                                    fasongqingqiu ad = new fasongqingqiu
                                    {
                                        BillNo       = billno,
                                        DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                        IsAuditing   = "1",
                                        DDOperatorId = tAMcs.DDOperatorId,
                                        OperatorName = operatorName,
                                        BillClassId  = tAMcs.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();
                            }
                        }
                    });
                }

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#16
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";
            string ymadk   = System.Configuration.ConfigurationManager.AppSettings["ymadk"].ToString() + "/";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }

            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
            string JsonData = CsJson;

            //#微应用ID:agentId #企业ID:corpId #应用的唯一标识:appKey #应用的密钥:appSecret
            AppWyy    = ToolsClass.GetConfig("AppWyy");
            ScList    = AppWyy.Split('$');
            agentId   = ScList[0].ToString();
            corpId    = ScList[1].ToString();
            appKey    = ScList[2].ToString();
            appSecret = ScList[3].ToString();

            isWrite = ToolsClass.GetConfig("isWrite");
            ddUrl   = ToolsClass.GetConfig("ddUrl");

            if (isWrite == "1")
            {
                ToolsClass.TxtLog("差旅费申请日志", "\r\n发起申请入参:" + CsJson + "\r\n");
            }

            MulCLFBX mulCLFBX = new MulCLFBX();

            mulCLFBX = (MulCLFBX)JsonConvert.DeserializeObject(CsJson, typeof(MulCLFBX));
            string ddMessageId = string.Empty;
            string path        = context.Request.Path.Replace("Approval/CLFBXSQ.ashx", "clfbxsqmul");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

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



            //格式固定!!
            string NodeInfo = JsonConvert.SerializeObject(mulCLFBX.NodeInfo).Replace(",{\"AType\":\"\",\"PersonId\":\"select\",\"PersonName\":\"请选择\"}", "");

            if (string.IsNullOrEmpty(NodeInfo))
            {
                context.Response.Write("{\"errmsg\":\"审批流程不正确,请检查后重试!\",\"errcode\":1}");
                return;
            }
            //[{"NodeInfoType":"2","NodeInfoDetails":[{"Persons":[{"PersonId":"10719","PersonName":"孙鸣国"}],"IsAndOr":"1","IsLeader":"1"}]},{"NodeInfoType":"2","NodeInfoDetails":[{"Persons":[{"PersonId":"10071","PersonName":"岳惠"},{"PersonId":"select","PersonName":"点击选择"}],"IsAndOr":"1","IsLeader":"1"}]},{"NodeInfoType":"3","NodeInfoDetails":[{"Persons":[{"PersonId":"10071","PersonName":"岳惠"},{"PersonId":"10602","PersonName":"王燕春"}],"IsAndOr":"","IsLeader":"0"}]}]
            mulCLFBX.Notes = Regex.Replace(mulCLFBX.Notes, @"[\n\r]", "").Replace("\\", "");
            if (mulCLFBX.ExpeTravDetail.Length <= 0)
            {
                context.Response.Write("{\"errmsg\":\"费用明细不允许为空,请添加费用明细(DD7001)\",\"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

                string sqr     = mulCLFBX.OperatorName;
                string fqrall  = mulCLFBX.DDOperatorId;
                string jnumber = mulCLFBX.JobNumber;
                //获取当前单号的发起人和待报销人
                if (mulCLFBX.DDOperatorId != mulCLFBX.InsteadOperatorGuid)
                {
                    sqr     = "【代】" + mulCLFBX.InsteadOperatorName;
                    fqrall  = fqrall + "," + mulCLFBX.InsteadOperatorGuid;
                    jnumber = da.GetValue($"select top 1 employeecode from flowemployee where ddid = '{mulCLFBX.InsteadOperatorGuid}'").ToString();
                }
                else
                {
                    mulCLFBX.OperatorGuid = da.GetValue($"select top 1 guid from flowemployee where ddid = '{fqrall}' and orgcode ='{mulCLFBX.DeptCode}'").ToString();
                }

                if (mulCLFBX.IsRe == "1")//是否需要生产新的申请号
                {
                    #region 获取申请流水号

                    Sql    = "select dbo.GetBillNo('DDTrvelReq','" + jnumber + "',getdate())";
                    obj    = da.GetValue(Sql);
                    billno = obj.ToString();

                    if (billno == "1")
                    {
                        billno = "CL" + jnumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                        Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq' and BillDate<>convert(varchar(20),GETDATE(),120)";
                    }
                    else
                    {
                        Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq'";
                    }
                    obj = da.ExecSql(Sql);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }
                    billno = billno + "_B";

                    #endregion 获取申请流水号
                }
                else
                {
                    billno = mulCLFBX.BillNo;
                    if (string.IsNullOrEmpty(billno))
                    {
                        context.Response.Write("{\"errmsg\":\"请您选择正确的出差单号!\",\"errcode\":1}");
                        return;
                    }
                }

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

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

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

                #endregion 获取用户guid

                if (mulCLFBX.NodeInfo.Length == 0)
                {
                    //自动同意

                    #region 保存信息

                    sqlList.Clear();
                    sqlTou.Clear();
                    sqlTou.Append("insert into ExpeTrav(BillNo,BillDate,Notes,DeptName,DeptCode,FlowEmployeeGuid,OperatorGuid,JsonData,ProcessNodeInfo,Applpers,DDOperatorId,BearOrga,CostType,NoCountFee,TravelReason,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl) values('")
                    .Append(billno).Append("','")
                    .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                    .Append(mulCLFBX.Notes).Append("','")
                    .Append(mulCLFBX.DeptName).Append("','")
                    .Append(mulCLFBX.DeptCode).Append("','")
                    .Append(mulCLFBX.OperatorGuid).Append("','")
                    .Append(operatorGuid).Append("','")
                    .Append(JsonData).Append("','")
                    .Append(NodeInfo).Append("','")
                    .Append(jnumber).Append("','")
                    .Append(mulCLFBX.DDOperatorId).Append("','")
                    .Append(mulCLFBX.BearOrga).Append("','")
                    .Append(mulCLFBX.CostType).Append("','")
                    .Append(mulCLFBX.NoCountFee).Append("','")
                    .Append(mulCLFBX.TravelReason).Append("','")
                    .Append(JsonConvert.SerializeObject(mulCLFBX.Urls)).Append("','")
                    .Append(mulCLFBX.IsInsteadApply).Append("','")
                    .Append(mulCLFBX.InsteadOperatorGuid).Append("','")
                    .Append(mulCLFBX.PictureUrl).Append("')");
                    sqlList.Add(sqlTou.ToString());

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

                    sqlTou.Clear();
                    sqlTou.Append("insert into ExpetravDetail(TripNo,BillNo,Guid,DepaDate,RetuDate,DepaCity,DestCity,DepaCity1,DestCity1,CustCode,DetailNo,AlloDay,OffDay,AlloPric,AlloAmount,OtherFee,TranMode,TranCount,TranAmount,GasAmount,HsrAmount,AccoCount,AccoAmount,CityTrafCount,CityTraAmont,TotalAmount) values('");
                    for (int i = 0; i < mulCLFBX.ExpeTravDetail.Length; i++)
                    {
                        oneSumAmount = 0;//第一行的和
                        SumMony      = SumMony + Double.Parse(mulCLFBX.ExpeTravDetail[i].TotalAmount);
                        sqlTiPro.Clear();
                        detailNo = detailNo + 1;
                        TripNo   = 1;
                        sqlTiPro.Append(sqlTou.ToString()).Append(i + 1).Append("','")
                        .Append(billno).Append("',newid(),'")
                        .Append(mulCLFBX.ExpeTravDetail[i].DepaDate).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].RetuDate).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].DepaCity3).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].DestCity3).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].DepaCity1).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].DestCity1).Append("','")
                        .Append(mulCLFBX.ExpeTravDetail[i].CustCode).Append("','");
                        for (int j = 0; j < mulCLFBX.ExpeTravDetail[i].PList.Length; j++)
                        {
                            if (j == 0)
                            {
                                sqlTi.Clear();
                                sqlTi.Append(sqlTiPro.ToString()).Append(detailNo)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloDay)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].OffDay)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloPric)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloAmount)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].OtherFee);
                                oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].AlloAmount) + Double.Parse(mulCLFBX.ExpeTravDetail[i].OtherFee);
                            }

                            if (TripNo == 1)
                            {
                                sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                                .Append("','0','0");
                                oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].Amount);
                                detailNo     = detailNo + 1;
                                TripNo       = TripNo + 1;
                            }
                            else
                            {
                                sqlTi2.Clear();
                                sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                                .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                                .Append("','0','0','0','0','0','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                                .Append("')");
                                sqlList.Add(sqlTi2.ToString());
                                detailNo = detailNo + 1;
                                TripNo   = TripNo + 1;
                                ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ExpeTravReq表:" + sqlTi2.ToString() + "\r\n");
                            }

                            #region 原有逻辑

                            //if (mulCLFBX.ExpeTravDetail[i].PList[j].FType == "火车票" || mulCLFBX.ExpeTravDetail[i].PList[j].FType == "飞机票" || mulCLFBX.ExpeTravDetail[i].PList[j].FType == "汽车票" || mulCLFBX.ExpeTravDetail[i].PList[j].FType == "轮船票")
                            //{
                            //    if (TripNo == 1)
                            //    {
                            //        sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                            //            .Append("','0','0");
                            //        oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].Amount);
                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //    }
                            //    else
                            //    {
                            //        sqlTi2.Clear();
                            //        sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                            //            .Append("','0','0','0','0','0','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                            //            .Append("')");
                            //        sqlList.Add(sqlTi2.ToString());
                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //        ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ExpeTravReq表:" + sqlTi2.ToString() + "\r\n");
                            //    }
                            //}
                            //else if (mulCLFBX.ExpeTravDetail[i].PList[j].FType == "自驾")
                            //{
                            //    if (TripNo == 1)
                            //    {
                            //        sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            //            .Append("','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].GasAmount)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].HsrAmount);

                            //        oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount);
                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //    }
                            //    else
                            //    {
                            //        sqlTi2.Clear();
                            //        sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            //            .Append("','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].GasAmount).Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].HsrAmount).Append("','0','0','0','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                            //            .Append("')");
                            //        sqlList.Add(sqlTi2.ToString());

                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //        ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ExpeTravReq表:" + sqlTi2.ToString() + "\r\n");
                            //    }
                            //}
                            //else if (mulCLFBX.ExpeTravDetail[i].PList[j].FType == "住宿票")
                            //{
                            //    AccoCount = mulCLFBX.ExpeTravDetail[i].PList[j].Count;
                            //    AccoAmount = mulCLFBX.ExpeTravDetail[i].PList[j].Amount;

                            //    if (TripNo == 1)
                            //    {
                            //        oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].Amount);
                            //        sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            //.Append("','").Append("0")
                            //            //.Append("','").Append("0")
                            //            .Append("','").Append(AccoCount)
                            //            .Append("','").Append(AccoAmount)
                            //            .Append("','0','0");

                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //    }
                            //    else
                            //    {
                            //        sqlTi2.Clear();
                            //        sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            //.Append("','").Append("0")
                            //            //.Append("','").Append("0")
                            //            .Append("','").Append(AccoCount)
                            //            .Append("','").Append(AccoAmount)
                            //            .Append("','0','0','")
                            //            .Append(AccoCount)
                            //            .Append("','")
                            //            .Append(AccoAmount)
                            //            .Append("','0','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                            //            .Append("')");
                            //        sqlList.Add(sqlTi2.ToString());
                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //        ToolsClass.TxtLog("差旅费申请日志", "\r\n住宿票:" + sqlTi2.ToString() + "\r\n");
                            //    }

                            //}
                            //else if (mulCLFBX.ExpeTravDetail[i].PList[j].FType == "市内交通票")
                            //{
                            //    CityTrafCount = mulCLFBX.ExpeTravDetail[i].PList[j].Count;
                            //    CityTraAmount = mulCLFBX.ExpeTravDetail[i].PList[j].Amount;

                            //    if (TripNo == 1)
                            //    {
                            //        oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].Amount);
                            //        sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            //.Append("','").Append("0")
                            //            //.Append("','").Append("0")
                            //            .Append("','").Append(CityTrafCount)
                            //            .Append("','").Append(CityTraAmount)
                            //            .Append("','0','0");

                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //    }
                            //    else
                            //    {
                            //        sqlTi2.Clear();
                            //        sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            //            //.Append("','").Append("0")
                            //            //.Append("','").Append("0")
                            //            .Append("','").Append(CityTrafCount)
                            //            .Append("','").Append(CityTraAmount)
                            //            .Append("','0','0','0','0','")
                            //            .Append(CityTrafCount)
                            //            .Append("','")
                            //            .Append(CityTraAmount)
                            //            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                            //            .Append("')");
                            //        sqlList.Add(sqlTi2.ToString());
                            //        detailNo = detailNo + 1;
                            //        TripNo = TripNo + 1;
                            //        ToolsClass.TxtLog("差旅费申请日志", "\r\n市内交通票:" + sqlTi2.ToString() + "\r\n");
                            //    }
                            //}

                            #endregion 原有逻辑
                        }

                        //sqlTi.Append("','").Append(AccoCount)
                        //    .Append("','").Append(AccoAmount)
                        //    .Append("','").Append(CityTrafCount)
                        //    .Append("','").Append(CityTraAmount)
                        //    .Append("','").Append(oneSumAmount).Append("')");

                        sqlTi.Append("','").Append("0")
                        .Append("','").Append("0")
                        .Append("','").Append("0")
                        .Append("','").Append("0")
                        .Append("','").Append(oneSumAmount).Append("')");

                        sqlList.Add(sqlTi.ToString());
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ExpeTravReq表:" + sqlTi.ToString() + "\r\n");
                        }
                    }
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 保存信息

                    #region 调用提交存储过程

                    keyValuePairs = CommonHelper.sqlPro(billno, "100520005005", operatorGuid, ProName);
                    if (keyValuePairs["ReturnValue"].ToString() != "0")
                    {
                        ToolsClass.TxtLog("差旅费申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n");
                        aList.Clear();
                        Sql = "delete from ExpeTrav where BillNo='" + billno + "'";
                        aList.Add(Sql);

                        Sql = "delete from ExpetravDetail where BillNo='" + billno + "'";
                        aList.Add(Sql);

                        Sql = "delete from CUSTIMPLLOG where SourceBill='" + billno + "'";
                        aList.Add(Sql);
                        obj = da.ExecSql(aList);
                        if (obj == null)
                        {
                            context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                            return;
                        }

                        context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 调用提交存储过程

                    Sql = "update EXPETRAV set IsSp='1' where billno  where billno='" + billno + "'";
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("差旅费申请日志", "\r\n操作EXPETRAV表:" + Sql.ToString() + "\r\n");
                    }
                    obj = da.ExecSql(Sql);

                    urlcsjson = ddUrl + $"/clfui/shenpi/index.html?billno={billno}&BillClassId={mulCLFBX.BillClassId}&showmenu=false";
                    urlcsjson = System.Web.HttpUtility.UrlEncode(urlcsjson, System.Text.Encoding.UTF8);
                    url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                    CsJson    = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + fqrall + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + "dingtalk://dingtalkclient/page/link?url=" + urlcsjson + "&pc_slide=true\",\"picUrl\":\"@\",\"title\":\"" + sqr + "的【差旅费】报销申请\",\"text\":\"金额: " + SumMony + " ¥\r\n行程: " + mulCLFBX.ExpeTravDetail[0].DepaCity1 + " - " + mulCLFBX.ExpeTravDetail[0].DestCity1 + "\r\n申请日期: " + System.DateTime.Now.ToString("yyyy-MM-dd") + "\"}}}";
                    FhJson    = ToolsClass.ApiFun("POST", url, CsJson);

                    var xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                    ddMessageId = xxtzClass2.task_id.ToString();
                    context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                    return;
                }

                //获取第一级流程的人员信息
                NodeInfoDetailPerson[] NodeInfodetailPeople = mulCLFBX.NodeInfo[0].NodeInfoDetails[0].Persons;
                //从入参中得到审批人及抄送人的信息
                //指定人员的id列表
                StringBuilder piddept = new StringBuilder();
                string        sql     = "";
                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    if (i > 0)
                    {
                        piddept.Append(",");
                    }

                    //判断传空
                    if (NodeInfodetailPeople[i].PersonId != "select" && NodeInfodetailPeople[i].PersonId != "")
                    {
                        sql = $"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'";
                        piddept.Append(da.GetValue(sql).ToString());
                    }
                }

                #region 保存信息

                sqlList.Clear();
                sqlTou.Clear();
                sqlTou.Append("insert into ExpeTrav(BillNo,BillDate,Notes,DeptName,DeptCode,OperatorGuid,FlowEmployeeGuid,JsonData,ProcessNodeInfo,Applpers,DDOperatorId,BearOrga,CostType,NoCountFee,TravelReason,Urls,IsInsteadApply,InsteadOperatorGuid,PictureUrl) values('")
                .Append(billno).Append("','")
                .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                .Append(mulCLFBX.Notes).Append("','")
                .Append(mulCLFBX.DeptName).Append("','")
                .Append(mulCLFBX.DeptCode).Append("','")
                .Append(operatorGuid).Append("','")
                .Append(mulCLFBX.OperatorGuid).Append("','")
                .Append(JsonData).Append("','")
                .Append(NodeInfo).Append("','")
                .Append(jnumber).Append("','")
                .Append(mulCLFBX.DDOperatorId).Append("','")
                .Append(mulCLFBX.BearOrga).Append("','")
                .Append(mulCLFBX.CostType).Append("','")
                .Append(mulCLFBX.NoCountFee).Append("','")
                .Append(mulCLFBX.TravelReason).Append("','")
                .Append(JsonConvert.SerializeObject(mulCLFBX.Urls)).Append("','")
                .Append(mulCLFBX.IsInsteadApply).Append("','")
                .Append(mulCLFBX.InsteadOperatorGuid).Append("','")
                .Append(mulCLFBX.PictureUrl).Append("')");
                sqlList.Add(sqlTou.ToString());

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

                sqlTou.Clear();
                sqlTou.Append("insert into ExpetravDetail(TripNo,BillNo,Guid,DepaDate,RetuDate,DepaCity,DestCity,DepaCity1,DestCity1,CustCode,DetailNo,AlloDay,OffDay,AlloPric,AlloAmount,OtherFee,TranMode,TranCount,TranAmount,GasAmount,HsrAmount,AccoCount,AccoAmount,CityTrafCount,CityTraAmont,TotalAmount) values('");
                for (int i = 0; i < mulCLFBX.ExpeTravDetail.Length; i++)
                {
                    oneSumAmount = 0;//第一行的和
                    SumMony      = SumMony + Double.Parse(mulCLFBX.ExpeTravDetail[i].TotalAmount);
                    sqlTiPro.Clear();
                    detailNo = detailNo + 1;
                    TripNo   = 1;
                    sqlTiPro.Append(sqlTou.ToString()).Append(i + 1).Append("','")
                    .Append(billno).Append("',newid(),'")
                    .Append(mulCLFBX.ExpeTravDetail[i].DepaDate).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].RetuDate).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].DepaCity3).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].DestCity3).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].DepaCity1).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].DestCity1).Append("','")
                    .Append(mulCLFBX.ExpeTravDetail[i].CustCode).Append("','");
                    for (int j = 0; j < mulCLFBX.ExpeTravDetail[i].PList.Length; j++)
                    {
                        if (j == 0)
                        {
                            sqlTi.Clear();
                            sqlTi.Append(sqlTiPro.ToString()).Append(detailNo)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloDay)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].OffDay)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloPric)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].AlloAmount)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].OtherFee);
                            oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].AlloAmount) + Double.Parse(mulCLFBX.ExpeTravDetail[i].OtherFee);
                        }
                        if (TripNo == 1)
                        {
                            sqlTi.Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                            .Append("','0','0");
                            oneSumAmount = oneSumAmount + Double.Parse(mulCLFBX.ExpeTravDetail[i].PList[j].Amount);
                            detailNo     = detailNo + 1;
                            TripNo       = TripNo + 1;
                        }
                        else
                        {
                            sqlTi2.Clear();
                            sqlTi2.Append(sqlTiPro.ToString()).Append(detailNo).Append("','0','0','0','0','0")
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].FType.Replace("票", ""))
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Count)
                            .Append("','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].Amount)
                            .Append("','0','0','0','0','0','0','").Append(mulCLFBX.ExpeTravDetail[i].PList[j].SumAmount)
                            .Append("')");
                            sqlList.Add(sqlTi2.ToString());
                            detailNo = detailNo + 1;
                            TripNo   = TripNo + 1;
                            ToolsClass.TxtLog("差旅费申请日志", "\r\n明细表:" + sqlTi2.ToString() + "\r\n");
                        }
                    }

                    sqlTi.Append("','").Append("0")
                    .Append("','").Append("0")
                    .Append("','").Append("0")
                    .Append("','").Append("0")
                    .Append("','").Append(oneSumAmount).Append("')");
                    sqlList.Add(sqlTi.ToString());
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ExpeTravReq表:" + sqlTi.ToString() + "\r\n");
                    }
                }
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                #endregion 保存信息

                #region 调用提交存储过程

                keyValuePairs = CommonHelper.sqlPro(billno, "100520005005", operatorGuid, ProName);
                if (keyValuePairs["ReturnValue"].ToString() != "0")
                {
                    ToolsClass.TxtLog("差旅费申请日志", "\r\n调用存储过程失败:" + keyValuePairs["ReturnMsg"].ToString() + "\r\n");
                    aList.Clear();
                    Sql = "delete from ExpeTrav where BillNo='" + billno + "'";
                    aList.Add(Sql);

                    Sql = "delete from ExpetravDetail where BillNo='" + billno + "'";
                    aList.Add(Sql);

                    Sql = "delete from CUSTIMPLLOG where SourceBill='" + billno + "'";
                    aList.Add(Sql);
                    obj = da.ExecSql(aList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"删除提交信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }

                    context.Response.Write("{\"errmsg\":\"" + keyValuePairs["ReturnMsg"].ToString() + "(DD9003)\",\"errcode\":1}");
                    return;
                }

                #endregion 调用提交存储过程

                #region 差旅费报销 申请 发送工作通知消息

                url       = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                urlcsjson = ddUrl + $"/clfui/shenpi/index.html?billno={billno}&BillClassId={mulCLFBX.BillClassId}&showmenu=false";
                urlcsjson = System.Web.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\":\"" + sqr + "的【差旅费】报销申请\",\"text\":\"金额: " + SumMony + " ¥\r\n行程: " + mulCLFBX.ExpeTravDetail[0].DepaCity1 + " - " + mulCLFBX.ExpeTravDetail[0].DestCity1 + "\r\n申请日期: " + System.DateTime.Now.ToString("yyyy-MM-dd") + "\"}}}";
                FhJson    = ToolsClass.ApiFun("POST", url, CsJson);

                XXTZ xxtzClass = new XXTZ();
                xxtzClass   = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode     = xxtzClass.errcode;
                ddMessageId = xxtzClass.task_id.ToString();
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的差旅费报销申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }

                #endregion 差旅费报销 申请 发送工作通知消息

                //保存流程信息到comments表
                sqlList.Clear();
                for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                {
                    sqlTou.Clear();
                    if (NodeInfodetailPeople[i].PersonId != "select")
                    {
                        sqlTou.Append("insert into ApprovalComments(CommentsId,BillClassId,BillNo,ApprovalID,ApprovalName,ApprovalComments,ApprovalStatus,DDMessageId,AType,ApprovalDate,IsAndOr,IsLeader,PersonType,NodeNumber) values('").Append(Guid.NewGuid().ToString()).Append("','")
                        .Append(mulCLFBX.BillClassId).Append("','")
                        .Append(billno).Append("','")
                        .Append(NodeInfodetailPeople[i].PersonId).Append("','")
                        .Append(NodeInfodetailPeople[i].PersonName).Append("','")//内部数据库用户GUID
                        .Append("").Append("','")
                        .Append("0").Append("','")
                        .Append(ddMessageId).Append("','")
                        .Append(NodeInfodetailPeople[i].AType).Append("','")
                        .Append(DateTime.Now).Append("','")
                        .Append(mulCLFBX.NodeInfo[0].NodeInfoDetails[0].IsAndOr).Append("','")
                        .Append(mulCLFBX.NodeInfo[0].NodeInfoDetails[0].IsLeader).Append("','")
                        .Append(mulCLFBX.NodeInfo[0].NodeInfoType).Append("','")
                        .Append("2").Append("')");
                        sqlList.Add(sqlTou.ToString());
                        if (isWrite == "1")
                        {
                            ToolsClass.TxtLog("差旅费申请日志", "\r\n操作ApprovalComments表:" + sqlTou.ToString() + "\r\n");
                        }
                    }
                }
                //执行SQL语句Insert
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存差旅费报销申请节点信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

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

                TaskFactory taskFactory = new TaskFactory();
                //如果下个是抄送人
                if (mulCLFBX.NodeInfo[0].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       = billno,
                                    DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                    IsSp         = "3",
                                    DDOperatorId = mulCLFBX.InsteadOperatorGuid,
                                    OperatorName = mulCLFBX.InsteadOperatorName,
                                    BillClassId  = mulCLFBX.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 (mulCLFBX.NodeInfo[0].NodeInfoType == "2")
                {
                    DataRow[] dataRows = null;

                    sql = "";
                    sql = $"select ApprovalComments,ApprovalName,ApprovalID  from ApprovalComments where BillNo ='{billno}'  and BillClassId='{mulCLFBX.BillClassId}' and ApprovalStatus ='1'";
                    DataTable logComments = da.GetDataTable(sql);
                    //如果下个环节中的人在之前已同意,自动调用此接口同意完成审批
                    taskFactory.StartNew(() =>
                    {
                        for (int i = 0; i < NodeInfodetailPeople.Length; i++)
                        {
                            dataRows = logComments.Select("ApprovalID ='" + NodeInfodetailPeople[i].PersonId + "'");
                            //如果之前已经同意或者是发起人
                            if (dataRows.Length != 0 || da.GetValue($"select distinct DDId from FlowEmployee where EmployeeCode ='{NodeInfodetailPeople[i].PersonId}'").ToString() == mulCLFBX.InsteadOperatorGuid)
                            {
                                HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(ymadk + "clfbxspmul");
                                webrequest.Method         = "post";
                                new Action(() =>
                                {
                                    fasongqingqiu ad = new fasongqingqiu
                                    {
                                        BillNo       = billno,
                                        DDAuditingId = da.GetValue($"select distinct ddid from FlowEmployee where employeecode='{NodeInfodetailPeople[i].PersonId}'").ToString(),
                                        IsSp         = "1",
                                        DDOperatorId = mulCLFBX.InsteadOperatorGuid,
                                        OperatorName = mulCLFBX.InsteadOperatorName,
                                        BillClassId  = mulCLFBX.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();
                            }
                        }
                    });
                }

                //如果是撤回重新提交的,删除之前的单子
                if (!string.IsNullOrEmpty(mulCLFBX.OldBillNo))
                {
                    da.ExecSql($"delete ExpetravDetail where billno = '{mulCLFBX.OldBillNo}'");
                    da.ExecSql($"delete ExpeTrav where billno = '{mulCLFBX.OldBillNo}'");
                    da.ExecSql($"delete approvalcomments where billno = '{mulCLFBX.OldBillNo}'");
                    da.Dispose();
                    ToolsClass.TxtLog("其他费用报销申请日志", "\r\n删除旧单据:" + $"delete ExpetravDetail where billno = '{mulCLFBX.OldBillNo}'" + $"delete ExpeTrav where billno = '{mulCLFBX.OldBillNo}'" + "\r\n");
                }
                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\" " + ex.Message + ",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#17
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
            //#微应用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");
            }

            PSP psp = new PSP();

            psp = (PSP)JsonConvert.DeserializeObject(CsJson, typeof(PSP));
            if (psp.Data.Length <= 0)
            {
                context.Response.Write("{\"errmsg\":\"流程不允许为空,请添加流程(DD6001)\",\"errcode\":1}");
                return;
            }

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

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

            string sqlss = ",";

            try
            {
                #region 保存流程信息

                sqlList.Clear();
                sqlTou.Clear();
                for (int i = 1; i <= psp.Data.Length; i++)
                {
                    if (i > 1)
                    {
                        sqlTou.Clear();
                    }
                    sqlTou.Append("insert into ApprovalNode(nodeid,BilliClassid,BillClassName,NodeNumber,CharacterTypes,ApprovalType,persons,IsAndOr,IsEnd) values('")
                    .Append(Guid.NewGuid().ToString()).Append("','")
                    .Append(psp.BillClassId).Append("','")
                    .Append(psp.BillName).Append("','")
                    .Append(i.ToString()).Append("','")
                    .Append(psp.Data[i - 1].CharacterTypes).Append("','")
                    .Append(JsonConvert.SerializeObject(psp.Data[i - 1].ApprovalType[0])).Append("','")
                    //.Append(JsonConvert.SerializeObject(psp.Data[i - 1].Persons).Replace("[","").Replace("]", "")).Append("','")
                    .Append(JsonConvert.SerializeObject(psp.Data[i - 1].Persons)).Append("','")
                    .Append(psp.Data[i - 1].IsAndOr).Append("','")
                    .Append(psp.Data[i - 1].IsEnd).Append("')");
                    sqlss = sqlTou.ToString() + sqlss;
                    sqlList.Add(sqlTou.ToString());
                }
                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("保存流程信息日志", "\r\n保存流程入参:" + sqlss + "\r\n");
                }
                //执行SQL语句Insert
                da.ExecSql($"delete ApprovalNode where BilliClassid ='{psp.BillClassId}'");
                da.ExecSql($"update BillClass set ClassRuCan = '{CsJson}' where BillClassid ='{psp.BillClassId}'");
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存流程信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }

                #endregion 保存流程信息

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#18
0
        string ddUrl = "";  //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", "");
            //#微应用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("DDLog", "\r\nTravelReq=>入参:" + CsJson + "\r\n");
            }

            CCSQ ccsqClass = new CCSQ();

            ccsqClass = (CCSQ)JsonConvert.DeserializeObject(CsJson, typeof(CCSQ));
            //ccsqClass.Notes = Regex.Replace(ccsqClass.Notes, @"[\n\r]", "").Replace("\\", "");
            //ccsqClass.TravelReason = Regex.Replace(ccsqClass.TravelReason, @"[\n\r]", "").Replace("//", "");
            if (ccsqClass.Detail.Length <= 0)
            {
                context.Response.Write("{\"errmsg\":\"行程不允许为空,请添加行程(DD6001)\",\"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

                #region 获取用户详情
                url    = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + ccsqClass.DDOperatorId;
                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;
                }
                operatorName = userXqClass.name;
                #endregion

                #region 获取用户guid
                Sql = "select top 1 guid from  Employee where employeecode='" + userXqClass.jobnumber + "'";
                obj = da.GetValue(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"用户不存在(DD6000)\",\"errcode\":1}");
                    return;
                }
                operatorGuid = obj.ToString();
                #endregion

                #region 获取申请流水号
                Sql    = "select dbo.GetBillNo('DDTrvelReq','" + userXqClass.jobnumber + "',getdate())";
                obj    = da.GetValue(Sql);
                billno = obj.ToString();

                if (billno == "1")
                {
                    billno = "CL" + userXqClass.jobnumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                    Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq' and BillDate<>convert(varchar(20),GETDATE(),120)";
                }
                else
                {
                    Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='DDTrvelReq'";
                }
                obj = da.ExecSql(Sql);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新审批信息出错(DD6006)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 保存行程信息
                sqlList.Clear();
                sqlTou.Clear();
                sqlTou.Append("insert into TravelReq(BillNo,TravelReason,Notes,DDOperatorId,OperatorGuid,BillDate,SelAuditingGuid,CopyPerson,OperatorName,SelAuditingName,CopyPersonName,AppendixUrl,PictureUrl) Values('").Append(billno).Append("','")
                .Append(ccsqClass.TravelReason).Append("','")
                .Append(ccsqClass.Notes).Append("','")
                .Append(ccsqClass.DDOperatorId).Append("','")
                .Append(operatorGuid).Append("','")    //内部数据库用户GUID
                .Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Append("','")
                .Append(ccsqClass.SelAuditingGuid).Append("','")
                .Append(ccsqClass.CopyPerson).Append("','")
                .Append(operatorName).Append("','")
                .Append(ccsqClass.SelAuditingName).Append("','")
                .Append(ccsqClass.CopyPersonName).Append("','")
                .Append(ccsqClass.AppendixUrl).Append("','")
                .Append(ccsqClass.PictureUrl).Append("')");
                sqlList.Add(sqlTou.ToString());

                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("DDLog", "\r\nTravelReq=>insert:" + sqlTou.ToString() + "\r\n");
                }

                sqlTou.Clear();
                sqlTou.Append("insert into TravelReqDetail(BillNo,Guid,TranMode,OtherTranMode,IsReturn,DepaCity,DepaCity1,DepaCity2,DestCity,DestCity1,DestCity2,StartDate,EndDate,Hours,Days,BearOrga,CustCode,CustName,Peers,PeersName) Values('");
                for (int i = 0; i < ccsqClass.Detail.Length; i++)
                {
                    sqlTi.Clear();
                    sqlTi.Append(sqlTou.ToString()).Append(billno).Append("','")
                    .Append(Guid.NewGuid().ToString()).Append("','")
                    .Append(ccsqClass.Detail[i].TranMode).Append("','")
                    .Append(ccsqClass.Detail[i].OtherTranMode).Append("','")
                    .Append(ccsqClass.Detail[i].IsReturn).Append("','")
                    .Append(ccsqClass.Detail[i].DepaCity).Append("','")
                    .Append(ccsqClass.Detail[i].DepaCity1).Append("','")
                    .Append(ccsqClass.Detail[i].DepaCity2).Append("','")
                    .Append(ccsqClass.Detail[i].DestCity).Append("','")
                    .Append(ccsqClass.Detail[i].DestCity1).Append("','")
                    .Append(ccsqClass.Detail[i].DestCity2).Append("','")
                    .Append(ccsqClass.Detail[i].StartDate).Append(":01','")
                    .Append(ccsqClass.Detail[i].EndDate).Append(":01','")
                    .Append(ccsqClass.Detail[i].Hours).Append("','")
                    .Append(ccsqClass.Detail[i].Days).Append("','")
                    .Append(ccsqClass.Detail[i].BearOrga).Append("','")
                    .Append(ccsqClass.Detail[i].CustCode).Append("','")
                    .Append(ccsqClass.Detail[i].CustName).Append("','")
                    .Append(ccsqClass.Detail[i].Peers).Append("','")
                    .Append(ccsqClass.Detail[i].PeersName).Append("')");
                    sqlList.Add(sqlTi.ToString());
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("DDLog", "\r\nTravelReq=>insert:" + sqlTi.ToString() + "\r\n");
                    }
                }
                //执行SQL语句Insert
                obj = da.ExecSql(sqlList);
                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"保存出差申请信息出错(DD6002)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 发送工作通知消息
                url    = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=" + access_token;
                CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + ccsqClass.SelAuditingGuid + "," + ccsqClass.CopyPerson + "," + ccsqClass.DDOperatorId + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + ddUrl + "/shenpi/index.html?billno=" + billno + "\",\"picUrl\":\"@\",\"title\":\"" + operatorName + "的【出差】申请\",\"text\":\"出发日期: " + ccsqClass.Detail[0].StartDate.Substring(0, 10) + "\r\n返程日期: " + ccsqClass.Detail[0].EndDate.Substring(0, 10) + "\r\n事由: " + ccsqClass.TravelReason + "\"}}}";
                FhJson = ToolsClass.ApiFun("POST", url, CsJson);

                XXTZ xxtzClass = new XXTZ();
                xxtzClass = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode   = xxtzClass.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的出差申请消息通知失败(DD6004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 更新单据消息id与返回内容
                //Sql = "update TravelReq set task_id='" + xxtzClass.task_id + "',request_id='" + xxtzClass.request_id + "',returnMsg='" + FhJson.ToString() + "' where billno='" + billno + "'";

                //obj = da.ExecSql(Sql);

                //if (obj == null)
                //{
                //    if (isWrite == "1")
                //    {
                //        ToolsClass.TxtLog("DDLog", "\r\nTravelReq=>update:" + Sql.ToString() + "\r\n");
                //    }
                //    context.Response.Write("{\"errmsg\":\"保存消息通知信息出错(DD6005)\",\"errcode\":1}");
                //    return;
                //}
                #endregion

                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD0005)\",\"errcode\":1}");
                context.Response.End();
            }
        }
示例#19
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;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            string signUrl = ToolsClass.GetConfig("signUrl"); context.Response.ContentType = "text/plain";

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

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

            SL sl = new SL();

            sl = (SL)JsonConvert.DeserializeObject(CsJson, typeof(SL));
            string path = context.Request.Path.Replace("Common/ServiceLog.ashx", "servicelog");
            //验证请求sign
            string sign = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);

            ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + sl.Sign + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
            if (sign != sl.Sign)
            {
                context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                return;
            }
            try
            {
                //根据用户工号获取guid
                string userGuid = da.GetValue($"select guid from employee where employeecode ='{sl.JobNumber}'").ToString();

                //保存日志信息
                if (sl.Type == "Save")
                {
                    //获取单号
                    Sql    = "select dbo.GetBillNo('100525010010','" + sl.JobNumber + "',getdate())";
                    obj    = da.GetValue(Sql);
                    billno = obj.ToString();

                    if (billno == "1")
                    {
                        billno = "FW" + sl.JobNumber + DateTime.Now.ToString("yyyyMMdd") + "0001";

                        Sql = "update BillNumber set MaxNum=1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='100525010010' and BillDate<>convert(varchar(20),GETDATE(),120)";
                    }
                    else
                    {
                        Sql = "update BillNumber set MaxNum=MaxNum+1,BillDate=convert(varchar(20),GETDATE(),120) where BillGuid='100525010010'";
                    }
                    obj = da.ExecSql(Sql);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"更新单号信息出错(DD6006)\",\"errcode\":1}");
                        return;
                    }
                    //获取当前操作人的部门信息相对应的guid
                    string sqlss = ",";

                    #region 保存日志信息

                    sqlList.Clear();
                    sqlTou.Clear();
                    sqlTou.Append("insert into CUSTSERVLOG(GUID,BillDate,CustCode,BillNo,ProbType,HourMuch,ProbDesc,UnSolvCaus,OperatorGUID,ProcState,SolutionDesc,IMPLPERS,SERVDUEDATE,PicUrls) values('")
                    .Append(Guid.NewGuid().ToString()).Append("','")
                    .Append(sl.BillDate).Append("','")
                    .Append(sl.CustCode).Append("','")
                    .Append(billno).Append("','")
                    .Append(sl.ProbType).Append("','")
                    .Append(sl.HourMuch).Append("','")
                    .Append(sl.ProbDesc).Append("','")
                    .Append(sl.UnSolvCaus).Append("','")
                    .Append(userGuid).Append("','")
                    .Append(sl.ProState).Append("','")
                    .Append(sl.SolutionDesc).Append("','")
                    .Append(sl.SJobNumber).Append("','")
                    .Append(sl.ServDueDate).Append("','")
                    .Append(JsonConvert.SerializeObject(sl.Urls))
                    .Append("')");
                    sqlss = sqlTou.ToString() + sqlss;
                    sqlList.Add(sqlTou.ToString());
                    if (isWrite == "1")
                    {
                        ToolsClass.TxtLog("服务日志记录", "\r\n保存日志信息中执行的sql:" + sqlss + "\r\n");
                    }
                    //执行SQL语句Insert
                    obj = da.ExecSql(sqlList);
                    if (obj == null)
                    {
                        context.Response.Write("{\"errmsg\":\"保存服务日志记录出错(DD6002)\",\"errcode\":1}");
                        return;
                    }

                    #endregion 保存日志信息

                    context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                    return;
                }

                //确定客户的时候,查询相应的信息
                if (sl.Type == "SelectSSFW")
                {
                    DataTable ssfw = da.GetDataTable($"SELECT distinct A.CUSTCODE 客户编号,A.CUSTNAME 客户名称,L.NAME 省,M.NAME  市,N.NAME  县,'' 最后合同时间,convert(varchar(10),A.SERVDUEDATE,23) 服务到期日,DateDiff(dd,getdate(),A.SERVDUEDATE) 剩余服务天数,A.SERVPERS+'-'+H.EMPLOYEENAME 服务负责人,F.EMPLOYEENAME 实施负责人,A.IMPLPERS,A.SALEPERS+'-'+G.EMPLOYEENAME 销售负责人 FROM CUSTOMER A LEFT JOIN EMPLOYEE F ON A.IMPLPERS=F.EMPLOYEECODE LEFT JOIN EMPLOYEE G ON A.SALEPERS=G.EMPLOYEECODE LEFT JOIN EMPLOYEE H ON A.SERVPERS=H.EMPLOYEECODE LEFT JOIN PROVINCES L ON A.PROVINCE=L.CODE LEFT JOIN CITIES M ON A.CITY=M.CODE LEFT JOIN AREAS N ON A.AREA=N.CODE where A.CUSTCODE = '{sl.CustCode}'");
                    FhJson = "{\"errmsg\":\"ok\",\"errcode\":\"0\",\"SSRY\":\"" + ssfw.Rows[0]["实施负责人"].ToString() + "\",\"SJobNumber\":\"" + ssfw.Rows[0]["IMPLPERS"].ToString() + "\",\"ServdueDate\":\"" + ssfw.Rows[0]["服务到期日"].ToString() + "\"}";
                    context.Response.Write(FhJson);
                    ToolsClass.TxtLog("服务日志记录", "\r\n根据客户编码查询客户信息返回:" + FhJson + "\r\n");
                    return;
                }
                //查询当前人操作的实施日志
                if (sl.Type == "SelectDT")
                {
                    DataTable ssfw = da.GetDataTable($"SELECT a.BillNo,b.custname,a.ProbType,a.ProcState,a.IMPLPERS,convert(varchar(10),a.BillDate,20) BillDate from CUSTSERVLOG a left join Customer b on a.custcode = b.custcode  where a.OperatorGUID = '{userGuid}' order by a.BillDate desc");
                    if (ssfw.Rows.Count == 0)
                    {
                        context.Response.Write("{\"errmsg\":\"\",\"errcode\":\"0\"}");
                        return;
                    }
                    csjsjsjs.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"CustSers\":[");
                    for (int i = 0; i < ssfw.Rows.Count; i++)
                    {
                        if (i > 0)
                        {
                            csjsjsjs.Append(",");
                        }
                        csjsjsjs.Append("{\"BillNo\":\"" + ssfw.Rows[i]["BillNo"] + "\",\"CustName\":\"" + ssfw.Rows[i]["custname"] + "\",\"BillDate\":\"" + ssfw.Rows[i]["BillDate"] + "\",\"ProbType\":\"" + ssfw.Rows[i]["ProbType"] + "\",\"ProcState\":\"" + ssfw.Rows[i]["ProcState"] + "\",\"EmployeeName\":\"" + da.GetValue($"select employeename from employee where employeeCode = '{ssfw.Rows[i]["IMPLPERS"].ToString()}'").ToString() + "\",\"EmployeeCode\":\"" + ssfw.Rows[i]["IMPLPERS"] + "\"}");
                    }
                    csjsjsjs.Append("]}");
                    context.Response.Write(csjsjsjs.ToString());
                    ToolsClass.TxtLog("服务日志记录", "\r\n查询服务日志列表:" + csjsjsjs.ToString() + "\r\n");
                    return;
                }

                //查询服务日志详细信息
                if (sl.Type == "SelectDTDetail")
                {
                    DataTable ssfw = da.GetDataTable($"SELECT  convert(varchar(20),a.BillDate,20) BillDate, b.CustName, a.BillNo, a.ProbType, a.HourMuch, a.ProbDesc, a.UnSolvCaus, a.ProcState , a.SolutionDesc ,a.IMPLPERS, convert(varchar(10),a.SERVDUEDATE,20) SERVDUEDATE, a.PicUrls FROM CustServLog a left join Customer b on a.custcode = b.custcode   where a.OperatorGUID  = '{userGuid}' and a.billno = '{sl.BillNo}'");
                    if (ssfw.Rows.Count == 0)
                    {
                        context.Response.Write("{\"errmsg\":\"" + "没有相应的明细" + "\",\"errcode\":1}");
                        ToolsClass.TxtLog("服务日志记录", "\r\n查询服务日志明细:没有相应的明细\r\n");
                        return;
                    }
                    else
                    {
                        csjsjsjs.Append("{\"errmsg\":\"ok\",\"errcode\":\"0\",\"BillDate\":\"" + ssfw.Rows[0]["BillDate"] + "\",\"CustName\":\"" + ssfw.Rows[0]["CustName"] + "\",\"BillNo\":\"" + ssfw.Rows[0]["BillNo"] + "\",\"ProbType\":\"" + ssfw.Rows[0]["ProbType"] + "\",\"HourMuch\":\"" + ssfw.Rows[0]["HourMuch"] + "\",\"ProbDesc\":\"" + ssfw.Rows[0]["ProbDesc"] + "\",\"UnSolvCaus\":\"" + ssfw.Rows[0]["UnSolvCaus"] + "\",\"ProcState\":\"" + ssfw.Rows[0]["ProcState"] + "\",\"SolutionDesc\":\"" + ssfw.Rows[0]["SolutionDesc"] + "\",\"IMPLPERSName\":\"" + da.GetValue($"select employeename from employee where employeeCode = '{ssfw.Rows[0]["IMPLPERS"].ToString()}'").ToString() + "\",\"IMPLPERS\":\"" + ssfw.Rows[0]["IMPLPERS"] + "\",\"SERVDUEDATE\":\"" + ssfw.Rows[0]["SERVDUEDATE"] + "\",\"PicUrls\":" + ssfw.Rows[0]["PicUrls"] + "}");
                        context.Response.Write(csjsjsjs.ToString());
                        ToolsClass.TxtLog("服务日志记录", "\r\n查询服务日志明细:" + csjsjsjs.ToString() + "\r\n");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                ToolsClass.TxtLog("服务日志记录", "\r\n服务日志记录error:" + ex.Message + "\r\n");
                return;
            }
        }
示例#20
0
        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

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

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

                if (CsJson == "")
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }
                CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", ",").Replace("'", "‘").Replace("\t", ":").Replace("\r", ",").Replace("\n", ",");
                //json转Hashtable
                Object    jgobj      = ToolsClass.DeserializeObject(CsJson);
                Hashtable returnhash = jgobj as Hashtable;
                if (returnhash == null)
                {
                    context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                    return;
                }

                string path  = context.Request.Path.Replace("Approval/GetBillName.ashx", "billname");
                string path1 = context.Request.Path.Replace("Approval/GetBillName.ashx", "getbillclassnode");
                //验证请求sign
                string sign  = ToolsClass.md5(signUrl + path + "Romens1/DingDing2" + path, 32);
                string sign1 = ToolsClass.md5(signUrl + path1 + "Romens1/DingDing2" + path1, 32);
                ToolsClass.TxtLog("生成的sign", "生成的" + sign + "传入的sign" + returnhash["Sign"].ToString() + "\r\n 后台字符串:" + signUrl + path + "Romens1/DingDing2" + path);
                if (sign != returnhash["Sign"].ToString() && sign1 != returnhash["Sign"].ToString())
                {
                    context.Response.Write("{\"errmsg\":\"认证信息Sign不存在或者不正确!\",\"errcode\":1}");
                    return;
                }

                if (returnhash.Contains("SearchAall"))
                {
                    SearchAall = returnhash["SearchAall"].ToString();
                    if (SearchAall == "")
                    {
                        context.Response.Write("{\"errmsg\":\"SearchAall不允许为空(DD2001)\",\"errcode\":1}");
                        return;
                    }
                }

                //#微应用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.ToString() + "\r\n");
                }

                //获取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;
                }
                //获取流程类型
                if (SearchAall == "1")
                {
                    sql = "select BillClassid,BillName,BillLogoUrl,BillUrl,VisibleRange from BillClass";
                    obj = da.GetDataTable(sql);
                    dt  = obj as DataTable;
                    rJson.Append("{\"errmsg\":\"ok\",\"errcode\":0,\"count\":").Append(dt.Rows.Count).Append(",\"data\":[");
                    if (dt.Rows.Count > 0)
                    {
                        for (int x = 0; x < dt.Rows.Count; x++)
                        {
                            if (x > 0)
                            {
                                rJson.Append(",");
                            }
                            rJson.Append("{");
                            for (int y = 0; y < dt.Columns.Count; y++)
                            {
                                if (y > 0)
                                {
                                    rJson.Append(",");
                                }
                                rJson.Append("\"").Append(dt.Columns[y].ColumnName).Append("\":\"").Append(dt.Rows[x][dt.Columns[y].ColumnName].ToString()).Append("\"");
                            }
                            rJson.Append("}");
                        }
                    }
                    rJson.Append("]}");
                }

                //获取现在已保存的流程信息节点
                if (SearchAall == "2")
                {
                    ClassType = returnhash["ClassType"].ToString();
                    if (ClassType == "")
                    {
                        context.Response.Write("{\"errmsg\":\"ClassType不允许为空(DD2001)\",\"errcode\":1}");
                        return;
                    }
                    sql = "";
                    sql = $"select ClassRuCan from BillClass where BillClassid ='{ClassType}' ";
                    obj = da.GetValue(sql).ToString();
                    rJson.Append(obj);
                }
                context.Response.Write(rJson.Replace(" ", ""));
                if (isWrite == "1")
                {
                    ToolsClass.TxtLog("获取审批类型日志", "\r\n获取审批类型信息出参:" + rJson.ToString() + "\r\n");
                }
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"" + ex.Message + "\",\"errcode\":1}");
                return;
            }
        }
示例#21
0
        string ddUrl = "";                                            //钉钉前端地址

        public void ProcessRequest(HttpContext context)
        {
            //判断客户端请求是否为post方法
            if (context.Request.HttpMethod.ToUpper() != "POST")
            {
                context.Response.Write("{\"errmsg\":\"请求方式不允许,请使用POST方式(DD0001)\",\"errcode\":1}");
                return;
            }

            //数据库链接
            connectionString = ToolsClass.GetConfig("DataOnLine");
            //sqlServer
            da = new DbHelper.SqlHelper("SqlServer", connectionString);

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

            if (CsJson == "")
            {
                context.Response.Write("{\"errmsg\":\"报文格式错误(DD0003)\",\"errcode\":1}");
                return;
            }
            CsJson = Regex.Replace(CsJson, @"[\n\r]", "").Replace(@"\n", "");
            //#微应用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("DDLog", "\r\nSendMsg=>入参:" + CsJson + "\r\n");
            }

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

            traApprClass = (TravelApproval)JsonConvert.DeserializeObject(CsJson, typeof(TravelApproval));
            try
            {
                #region 设置消息跳转链接地址
                if (traApprClass.FeeType == "01")
                {
                    //市内交通费;
                    typeName = "交通费";
                    typeUrl  = ddUrl + "/jtfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "02")
                {
                    //通讯费
                    typeName = "通讯费";
                    typeUrl  = ddUrl + "/txfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "03")
                {
                    //车辆费
                    typeName = "车辆费";
                    typeUrl  = ddUrl + "/clui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "04")
                {
                    //房租费
                    typeName = "房租费";
                    typeUrl  = ddUrl + "/fzfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "05")
                {
                    //水费
                    typeName = "水费";
                    typeUrl  = ddUrl + "/sfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "06")
                {
                    //电费
                    typeName = "电费";
                    typeUrl  = ddUrl + "/dfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "11")
                {
                    //出差
                    typeName = "出差";
                    typeUrl  = ddUrl + "/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "12")
                {
                    //差旅费
                    typeName = "差旅费";
                    typeUrl  = ddUrl + "/clfui/shenpi/index.html?billno=";
                }
                else if (traApprClass.FeeType == "00")
                {
                    //招待费
                    typeName = "招待费";
                    typeUrl  = ddUrl + "/zdfui/shenpi/index.html?billno=";
                }
                else
                {
                    context.Response.Write("{\"errmsg\":\"提交的申请类型不存在(DD9001)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #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

                #region 获取通知信息字段
                //出差
                if (traApprClass.FeeType == "11")
                {
                    Sql = "select a.TravelReason,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,a.TravelReason";
                }
                //差旅费报销申请
                else if (traApprClass.FeeType == "12")
                {
                    Sql = "select top 1 A.DepaCity1 DepaCity,A.DestCity1 DestCity,b.TranAmount,convert(varchar(20),c.BillDate,23) BillDate from ExpeTravDetail A left join (select billno,sum(TotalAmount) TranAmount from  ExpeTravDetail group by billno) b on a.billno=b.billno left join ExpeTrav c on a.BillNo=c.BillNo where a.BillNo = '" + traApprClass.BillNo + "' order by a.depadate";
                }
                //招待费
                else if (traApprClass.FeeType == "00")
                {
                    Sql = "select FeeAmount,BillCount,convert(varchar(20),ReferDate,23) BillDate,Notes from  EXPEENTEMENT where billno='" + traApprClass.BillNo + "'";
                }
                //其他费用
                else
                {
                    Sql = "select FeeAmount,BillCount,convert(varchar(20),ReferDate,23) BillDate,Notes from  EXPEOTHER where billno='" + traApprClass.BillNo + "'";
                }

                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;
                }
                #endregion

                #region 发送工作通知消息
                //出差
                if (traApprClass.FeeType == "11")
                {
                    CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + traApprClass.CopyPerson + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + typeUrl + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"" + traApprClass.OperatorName + "的【" + typeName + "】申请\",\"text\":\"出发日期: " + dt.Rows[0]["StartDate"].ToString() + "\r\n返程日期: " + dt.Rows[0]["EndDate"].ToString() + "\r\n事由: " + dt.Rows[0]["TravelReason"].ToString() + "\"}}}";
                }
                //差旅费报销申请
                else if (traApprClass.FeeType == "12")
                {
                    CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + traApprClass.CopyPerson + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + typeUrl + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"" + traApprClass.OperatorName + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + dt.Rows[0]["TranAmount"].ToString() + " ¥\r\n行程: " + dt.Rows[0]["DepaCity"].ToString() + " - " + dt.Rows[0]["DestCity"].ToString() + "\r\n申请日期: " + dt.Rows[0]["BillDate"].ToString() + "\"}}}";
                }
                //其他费用
                else
                {
                    CsJson = "{\"agent_id\":\"" + agentId + "\",\"userid_list\":\"" + traApprClass.CopyPerson + "\",\"msg\":{\"msgtype\":\"link\",\"link\":{\"messageUrl\":\"" + typeUrl + traApprClass.BillNo + "\",\"picUrl\":\"@\",\"title\":\"" + traApprClass.OperatorName + "的【" + typeName + "】报销申请\",\"text\":\"金额: " + dt.Rows[0]["FeeAmount"].ToString() + "¥  发票: " + dt.Rows[0]["BillCount"].ToString() + " 张\r\n申请日期: " + dt.Rows[0]["BillDate"].ToString() + "\r\n备注: " + dt.Rows[0]["Notes"].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("DDLog", "\r\nSendMsg=>CsJson:" + CsJson + "FhJson\r\n:" + FhJson);
                }

                XXTZ xxtzClass2 = new XXTZ();
                xxtzClass2 = (XXTZ)JsonConvert.DeserializeObject(FhJson, typeof(XXTZ));
                errcode    = xxtzClass2.errcode;
                if (errcode != 0)
                {
                    context.Response.Write("{\"errmsg\":\"您的报销申请消息通知失败(DD9004)\",\"errcode\":1}");
                    return;
                }
                #endregion

                #region 更新 将转发人拼接在抄送人字段后面
                //出差
                if (traApprClass.FeeType == "11")
                {
                    Sql = "update TravelReq set CopyPerson=(case when isnull(CopyPerson,' ')=' '  then '" + traApprClass.CopyPerson + "' else CopyPerson+','+'" + traApprClass.CopyPerson + "' end) where billno='" + traApprClass.BillNo + "'";
                }
                //差旅费报销申请
                else if (traApprClass.FeeType == "12")
                {
                    Sql = "update ExpeTrav set CopyPerson=(case when isnull(CopyPerson,' ')=' '  then '" + traApprClass.CopyPerson + "' else CopyPerson+','+'" + traApprClass.CopyPerson + "' end) where billno='" + traApprClass.BillNo + "'";
                }
                //招待费
                else if (traApprClass.FeeType == "00")
                {
                    Sql = "update EXPEENTEMENT set CopyPersonID=(case when isnull(CopyPersonID,' ')=' '  then '" + traApprClass.CopyPerson + "' else CopyPersonID+','+'" + traApprClass.CopyPerson + "' end) where billno='" + traApprClass.BillNo + "'";
                }
                //其他费用
                else
                {
                    Sql = "update EXPEOTHER set CopyPersonID=(case when isnull(CopyPersonID,' ')=' '  then '" + traApprClass.CopyPerson + "' else CopyPersonID+','+'" + traApprClass.CopyPerson + "' end) where billno='" + traApprClass.BillNo + "'";
                }

                obj = da.ExecSql(Sql);

                if (obj == null)
                {
                    context.Response.Write("{\"errmsg\":\"更新抄送人信息出错(DD9005)\",\"errcode\":1}");
                    return;
                }
                #endregion
                context.Response.Write("{\"errmsg\":\"ok\",\"errcode\":0}");
                return;
            }
            catch (Exception ex)
            {
                context.Response.Write("{\"errmsg\":\"提交的信息有误(DD9006)\",\"errcode\":1}");
                context.Response.End();
            }
        }