Пример #1
0
        public SRM_SAP_JK_RESP SAP_SRM_JK_02(SRM_SAP_JK02_REQ rq)
        {
            SRM_SAP_JK_RESP resp = new SRM_SAP_JK_RESP();

            SRM_SAP_JK02_HEAD[] heads = rq.HEAD;

            List <DbParameter> paramList = new List <DbParameter>();
            string             sqlStr    = "";
            int    num    = 0;
            string xmlStr = "";

            foreach (SRM_SAP_JK02_HEAD h in heads)
            {
                sqlStr = "UPDATE SupplyInfor SET  Sup_Name=@Sup_Name,LinkMan=@LinkMan,address=@address,telcode=@telcode, lxdw=@lxdw,Sup_Type=@Sup_Type  WHERE Sup_Code=@Sup_Code";

                h.Sup_Type = "S";
                paramList.Clear();
                paramList.Add(sqlDB.MakeInParam("Sup_Name", h.NAME1));
                paramList.Add(sqlDB.MakeInParam("LinkMan", h.ZEMM_FZRE));
                paramList.Add(sqlDB.MakeInParam("address", h.STRAS));
                paramList.Add(sqlDB.MakeInParam("telcode", h.TELCODE));
                paramList.Add(sqlDB.MakeInParam("lxdw", h.lxdw));
                paramList.Add(sqlDB.MakeInParam("Sup_Type", h.Sup_Type));
                paramList.Add(sqlDB.MakeInParam("Sup_Code", h.LIFNR));
                ///执行sql
                num = sqlDB.ExecuteNonQuery(CommandType.Text, sqlStr, paramList.ToArray());

                if (num == 0)
                {
                    sqlStr  = "";
                    xmlStr += "执行插入操作:" + "\r\n" + XmlSerializeHelper.XmlSerialize <SRM_SAP_JK02_HEAD>(h) + "\r\n";

                    sqlStr = "INSERT INTO SupplyInfor(Sup_Code,Sup_Name,LinkMan,address,telcode,lxdw,Sup_Type) VALUE(@Sup_Code,@Sup_Name,@LinkMan,@address,@telcode,@lxdw,@Sup_Type)";

                    num = sqlDB.ExecuteNonQuery(CommandType.Text, sqlStr, paramList.ToArray());
                    if (num == 0)
                    {
                        resp.MSGCODE = "-1";
                        resp.MSGTXT  = "[执行失败]:" + xmlStr;
                    }
                    else
                    {
                        resp.MSGCODE = "1";
                        resp.MSGTXT  = "[执行成功]:" + xmlStr;
                    }
                }
                else
                {
                    xmlStr      += "执行更新操作:" + "\r\n" + XmlSerializeHelper.XmlSerialize <SRM_SAP_JK02_HEAD>(h) + "\r\n";
                    resp.MSGCODE = "1";
                    resp.MSGTXT  = "[执行成功]:" + xmlStr;
                }
                loginfo.loginfor("接口SAP_SRM_JK_02返回信息:" + resp.MSGTXT);
                ////
            }
            return(resp);
        }
Пример #2
0
        public SRM_SAP_JK_RESP SAP_SRM_JK_01(SRM_SAP_JK01_REQ rq)
        {
            SRM_SAP_JK_RESP resp = new SRM_SAP_JK_RESP();

            SRM_SAP_JK01_HEAD[] heads = rq.HEAD;

            List <DbParameter> paramList = new List <DbParameter>();
            string             sqlStr    = "";
            int    num    = 0;
            string xmlStr = "";

            foreach (SRM_SAP_JK01_HEAD h in heads)
            {
                sqlStr = "UPDATE Product SET GoodsName=@GoodsName, ComName=@ComName,Spec=@Spec,Manufactor=@Manufactor,LicenseNo=@LicenseNo, BarCode=@BarCode,Status=@Status  WHERE GoodsCode=@GoodsCode";

                paramList.Clear();
                paramList.Add(sqlDB.MakeInParam("GoodsName", h.MAKTX));
                paramList.Add(sqlDB.MakeInParam("ComName", h.ZTYMI));
                paramList.Add(sqlDB.MakeInParam("Spec", h.Spec));
                paramList.Add(sqlDB.MakeInParam("Manufactor", h.ZSCQY));
                paramList.Add(sqlDB.MakeInParam("LicenseNo", h.ZPZWH));
                paramList.Add(sqlDB.MakeInParam("BarCode", h.ZTXMA));
                paramList.Add(sqlDB.MakeInParam("Status", h.Status));
                paramList.Add(sqlDB.MakeInParam("GoodsCode", h.MATNR));

                ///执行sql
                num = sqlDB.ExecuteNonQuery(CommandType.Text, sqlStr, paramList.ToArray());

                if (num == 0)
                {
                    sqlStr  = "";
                    xmlStr += "执行插入操作:" + "\r\n" + XmlSerializeHelper.XmlSerialize <SRM_SAP_JK01_HEAD>(h) + "\r\n";
                    sqlStr  = "INSERT INTO Product(GoodsName,ComName,Spec,Manufactor,LicenseNo,BarCode,Status) VALUE(@GoodsName,@ComName,@Spec,@Manufactor,@LicenseNo,@BarCode,@Status)";

                    num = sqlDB.ExecuteNonQuery(CommandType.Text, sqlStr, paramList.ToArray());
                    if (num == 0)
                    {
                        resp.MSGCODE = "-1";
                        resp.MSGTXT  = "[执行失败]:" + xmlStr;
                    }
                    else
                    {
                        resp.MSGCODE = "1";
                        resp.MSGTXT  = "[执行成功]:" + xmlStr;
                    }
                }
                else
                {
                    xmlStr      += "执行更新操作:" + "\r\n" + XmlSerializeHelper.XmlSerialize <SRM_SAP_JK01_HEAD>(h) + "\r\n";
                    resp.MSGCODE = "1";
                    resp.MSGTXT  = "[执行成功]:" + xmlStr;
                }
                loginfo.loginfor("接口SAP_SRM_JK_01返回信息:" + resp.MSGTXT);
                ////
            }
            return(resp);
        }
Пример #3
0
        /// <summary>
        /// 获取取消结算参数
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public string GetCancelOutpatientDepartmentCostParam(CancelOutpatientDepartmentCostUiParam param)
        {
            string resultData = null;
            var    userBase   = _serviceBasicService.GetUserBaseInfo(param.UserId);

            userBase.TransKey = param.TransKey;
            //获取医保病人信息
            var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam()
            {
                BusinessId       = param.BusinessId,
                OrganizationCode = userBase.OrganizationCode
            };
            var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam);

            if (residentData == null)
            {
                throw new Exception("当前病人未结算,不能取消结算!!!");
            }
            if (residentData.MedicalInsuranceState != MedicalInsuranceState.HisSettlement)
            {
                throw new Exception("当前病人未结算,不能取消结算!!!");
            }
            if (residentData.IsBirthHospital == 1)
            {
                var inputParam = new OutpatientPlanBirthSettlementCancelParam()
                {
                    SettlementNo  = residentData.SettlementNo,
                    CancelRemarks = param.CancelSettlementRemarks
                };
                resultData = XmlSerializeHelper.XmlSerialize(inputParam);
            }
            else
            {
                var inputParam = new CancelOutpatientDepartmentCostParam()
                {
                    DocumentNo = residentData.SettlementNo
                };
                resultData = XmlSerializeHelper.XmlSerialize(inputParam);
            }

            return(resultData);
        }
Пример #4
0
        /// <summary>
        /// 集团组织架构推送
        /// </summary>
        /// <param name="ZRFC_HR_OA_001_REQ"></param>
        public void SaveOrUpdateDeptInfo(ZRFC_HR_OA_001_REQ req)
        {
            ZRFC_HR_OA_001_HEAD[] heads = req.HEAD;
            ZRFC_HR_OA_RESP       resp  = new ZRFC_HR_OA_RESP();

            for (int i = 0; i < heads.Count(); i++)
            {
                Logger.Log("总共部门数:" + heads.Count().ToString());
                ZRFC_HR_OA_001_HEAD entity = heads[i];
                //部门编号
                string sapdept_id = entity.BJID;
                string sappid     = entity.PUP;
                string dept_name  = entity.STEXT + "(sap)";
                string dept_no    = entity.NUM;
                string log        = "";
                string xmlStr     = XmlSerializeHelper.XmlSerialize <ZRFC_HR_OA_001_HEAD>(entity) + "\r\n";
                log += xmlStr;
                List <DbParameter> paramList = new List <DbParameter>();
                #region 排除特殊情况
                if (sapdept_id == "10000000")
                {
                    continue;
                }
                string[] stringdeptname = { "挂靠部门", "挂证部门", "虚拟组织" };
                if (Array.IndexOf(stringdeptname, entity.STEXT) > -1)
                {
                    log = log + "排除特殊情况_部门" + "\r\n";
                    //Logger.Log("排除特殊情况_部门");
                    continue;
                }
                // < BJID > 13000000 </ BJID >
                //< STEXT > 杭州九洲大药房连锁有限公司 </ STEXT >
                //< PUP > 10000000 </ PUP >
                //< NUM > 4 </ NUM >

                //< BJID > 50002303 </ BJID >
                //< STEXT > 商采中心 </ STEXT >
                //< PUP > 11000000 </ PUP >
                //< NUM > 23 </ NUM >
                #region 测试
                //List <DbParameter> paramList = new List<DbParameter>();
                //string sql = "SELECT DEPT_ID FROM department WHERE dept_name=@name";
                //paramList.Add(oaDB.MakeInParam("name", name+ "(新)"));
                //DataSet dataSet = oaDB.ExecuteDataset(CommandType.Text, sql, paramList.ToArray());
                //if (dataSet != null && dataSet.Tables.Count > 0)
                //{
                //    DataRowCollection rows = dataSet.Tables[0].Rows;
                //    if (rows.Count > 0)
                //    {
                //        DataRow row = rows[0];
                //        int DEPT_ID = Int32.Parse(row[0].ToString());
                //        //string SAP_DEPT_ID =row[1].ToString();
                //        string operate_sql = "UPDATE department SET SAP_DEPT_ID=@SAP_DEPT_ID WHERE DEPT_ID=@dept_id";
                //        paramList.Clear();
                //        paramList.Add(oaDB.MakeInParam("DEPT_ID", DEPT_ID));
                //        paramList.Add(oaDB.MakeInParam("SAP_DEPT_ID", bjid));
                //        num = oaDB.ExecuteNonQuery(CommandType.Text, operate_sql, paramList.ToArray());
                //    }
                //}
                #endregion
                //xmlStr = XmlSerializeHelper.XmlSerialize<ZRFC_HR_OA_001_HEAD>(entity) + "\r\n";
                #endregion
                //string ret_code;
                //string ret_msg;
                //生成用户账号
                //IN p_username varchar(30),IN p_sapid varchar(30),IN p_sapdeptid int,IN  p_sex varchar(30),IN  p_mobil_no varchar(30),IN  p_birthday varchar(30),IN  p_not_login varchar(30),OUT ret_code INT,OUT ret_msg VARCHAR(30)
                // string tsql = "call proc_sap_addUser(@username,@p_sapid,@p_sapdeptid,@p_sex,@p_mobil_no,@p_birthday,@p_not_login,@ret_code,@ret_msg)";
                string tsql = "call proc_sap_addDept(@p_sapdeptid,@p_sapparentdeptid,@p_deptname)";
                paramList.Clear();
                paramList.Add(oaDB.MakeInParam("p_sapdeptid", sapdept_id));   //
                paramList.Add(oaDB.MakeInParam("p_sapparentdeptid", sappid)); //
                paramList.Add(oaDB.MakeInParam("p_deptname", dept_name));     //
                //paramList.Add(oaDB.MakeParam("ret_msg", "", ParameterDirection.Output));
                //paramList.Add(oaDB.MakeParam("ret_code", 0, ParameterDirection.Output));
                DataSet pResult = oaDB.ExecuteDataset(CommandType.Text, tsql, paramList.ToArray());
                //ret_code = paramList[7].Value.ToString();
                //ret_msg = paramList[8].Value.ToString();
                if (pResult != null && pResult.Tables.Count > 0)
                {
                    DataRowCollection rows = pResult.Tables[0].Rows;
                    if (rows.Count > 0)
                    {
                        DataRow row = rows[0];
                        if (Convert.ToInt16(row[1]) > 0)
                        {
                            // select ret_msg,ret_code,v_uid,p_username,p_sapid,p_sapdeptid,p_sex,p_mobil_no,p_birthday,v_wx_dept_id;
                            CreateDept dept = new CreateDept();
                            //dept.id = Convert.ToInt16(row[4]);
                            dept.name     = dept_name;
                            dept.parentid = Convert.ToInt16(row[5]);
                            //更新数据
                            log = log + string.Format("{0}_{1}", dept.name, dept.parentid) + "\r\n";
                            //Logger.Log(string.Format("{0}_{1}", dept.name, dept.parentid));
                            if (Convert.ToInt16(row[1]) == 1)
                            {
                                //添加日志
                                dept.id = Convert.ToInt16(row[4]);
                                AccessTokenManage.UpdateDeptApi(dept, ref log);
                            }
                            //添加数据
                            if (Convert.ToInt16(row[1]) == 2)
                            {
                                int id = AccessTokenManage.CreateDeptApi(dept, ref log);
                                if (id > 0)
                                {
                                    string updatewxdeptid = "update department set WEIXIN_DEPT_ID=@weixindeptid where  dept_id=@dept_id";
                                    paramList.Clear();
                                    paramList.Add(oaDB.MakeInParam("weixindeptid", id));
                                    paramList.Add(oaDB.MakeInParam("dept_id", Convert.ToInt16(row[2])));
                                    int issuc = oaDB.ExecuteNonQuery(CommandType.Text, updatewxdeptid, paramList.ToArray());
                                    if (issuc == 1)
                                    {
                                        log = log + string.Format("更新成功WEIXIN_DEPT_ID成功,WEIXIN_DEPT_ID{0}", id) + "\r\n";
                                    }
                                    else
                                    {
                                        log = log + "更新WEIXIN_DEPT_ID失败" + "\r\n";
                                    }
                                }
                            }
                        }
                        else
                        {
                            log = log + (string.Format("存储过程返回错误,错误值{0},错误描述{1}", row[0].ToString(), row[1]) + "\r\n");
                            //Logger.Log(string.Format("存储过程返回错误,错误值{0},错误描述{1}", row[0].ToString(), row[1]));
                        }
                        //resp.MSGTXT += xmlStr + row[1].ToString() + "\r\n";
                    }
                }
                else
                {
                    log = log + "存储过程范围值为空" + "\r\n";
                    //Logger.Log("存储过程范围值为空");
                    //resp.MSGTXT += xmlStr + "操作失败没有table" + "\r\n";
                }
                Logger.Log(log);
            }
        }
Пример #5
0
        /// <summary>
        /// 员工信息推送
        /// </summary>
        /// <param name="req"></param>
        public void SaveOrUpdateStaffInfo(ZRFC_HR_OA_003_REQ req)
        {
            ZRFC_HR_OA_003_HEAD[] heads = req.HEAD;
            ZRFC_HR_OA_RESP       resp  = new ZRFC_HR_OA_RESP();

            // string xmlStr = "";
            for (int i = 0; i < heads.Count(); i++)
            {
                Logger.Log("总共员工数:" + heads.Count().ToString());
                resp.MSGTXT = "";
                ZRFC_HR_OA_003_HEAD entity = heads[i];
                //部门编号
                string NACHN = entity.NACHN;         //姓名
                string PERNR = entity.PERNR;         //员工编号
                string PERSG = entity.PERSG;         //员工组
                string PERSK = entity.PERSK;         //员工子组
                string GESCH = entity.GESCH;         //性别
                //string ULONG = entity.USRID_LONG; //电子邮件
                string USRID     = entity.USRID;     //手机
                string OBJID_DEP = entity.OBJID_DEP; //所属部门编码
                string ORGTX     = entity.ORGTX;     //所属部门名称
                //string OBJID_COM = entity.OBJID_COM;//所属GSP部门编码
                string OBJID_S = entity.OBJID_S;     //岗位编码
                string GBDAT   = entity.GBDAT;       //生日
                string BEGDA   = entity.BEGDA;       //入职日期
                string SYSTEM  = entity.SYSTEM;      //人员账号类别
                //string LOGID = entity.LOGID;//人员账号
                string STELL = entity.STELL;         //职务编码
                string STLTX = entity.STLTX;         //职务文本
                string STAT2 = entity.STAT2;         //在职状态1:离职  2:退休  3:在职
                string log   = "";
                #region 排除特殊情况
                List <DbParameter> paramList = new List <DbParameter>();
                string             xmlStr    = XmlSerializeHelper.XmlSerialize <ZRFC_HR_OA_003_HEAD>(entity) + "\r\n";
                //Logger.Log(xmlStr);
                log = xmlStr;
                string[] idarray = { "4317", "4320", "4322", "4321", "4319", "4323", "4325", "4309", "4310", "4312", "4318", "4311", "4327", "4313", "4314" };
                if (Array.IndexOf(idarray, PERNR.TrimStart('0')) > -1)
                {
                    log = log + "排除特殊情况_人员" + "\r\n";
                    continue;
                }

                string[] stringdeptname = { "挂靠部门", "挂证部门", "虚拟组织" };
                if (Array.IndexOf(stringdeptname, ORGTX) > -1)
                {
                    log = log + "排除特殊情况_部门" + "\r\n";
                    continue;
                }
                #endregion
                #region
                //List<DbParameter> paramList = new List<DbParameter>();
                //string xmlStr = XmlSerializeHelper.XmlSerialize<ZRFC_HR_OA_003_HEAD>(entity) + "\r\n";
                //判断该账号是否存在

                //if (string.IsNullOrEmpty(LOGID))
                //{
                //    LOGID = PERNR;
                //}
                // 获取deptid
                #endregion
                string username    = NACHN + "(sap)";
                string p_sapid     = PERNR.TrimStart('0');
                string p_sapdeptid = OBJID_DEP;
                string p_sex       = GESCH == "1" ? "0" : "1";
                string p_mobil_no  = string.IsNullOrEmpty(USRID) ? "" : USRID;
                string p_birthday  = string.IsNullOrEmpty(GBDAT) ? "" : GBDAT;
                string p_not_login = string.IsNullOrEmpty(STAT2) ? "0" : (STAT2 == "3" ? "0" : "1");
                //string ret_code;
                //string ret_msg;
                //生成用户账号
                //IN p_username varchar(30),IN p_sapid varchar(30),IN p_sapdeptid int,IN  p_sex varchar(30),IN  p_mobil_no varchar(30),IN  p_birthday varchar(30),IN  p_not_login varchar(30),OUT ret_code INT,OUT ret_msg VARCHAR(30)
                // string tsql = "call proc_sap_addUser(@username,@p_sapid,@p_sapdeptid,@p_sex,@p_mobil_no,@p_birthday,@p_not_login,@ret_code,@ret_msg)";
                string tsql = "call proc_sap_addUser(@username,@p_sapid,@p_sapdeptid,@p_sex,@p_mobil_no,@p_birthday,@p_not_login)";
                paramList.Clear();
                paramList.Add(oaDB.MakeInParam("username", username));       //姓名
                paramList.Add(oaDB.MakeInParam("p_sapid", p_sapid));         //sapid todo去除前导0
                paramList.Add(oaDB.MakeInParam("p_sapdeptid", p_sapdeptid)); //所属部门编码
                paramList.Add(oaDB.MakeInParam("p_sex", p_sex));             //性别
                paramList.Add(oaDB.MakeInParam("p_mobil_no", p_mobil_no));   //手机
                paramList.Add(oaDB.MakeInParam("p_birthday", p_birthday));   //生日//在职状态1:离职  2:退休  3:在职
                paramList.Add(oaDB.MakeInParam("p_not_login", p_not_login)); //
                                                                             //paramList.Add(oaDB.MakeParam("ret_msg", "", ParameterDirection.Output));
                                                                             //paramList.Add(oaDB.MakeParam("ret_code", 0, ParameterDirection.Output));
                log = log + (string.Format("{0}_{1}_{2}_{3}_{4}_{5}_{6}", username, p_sapid, p_sapdeptid, p_sex, p_mobil_no, p_birthday, p_not_login) + "\r\n");
                DataSet pResult = oaDB.ExecuteDataset(CommandType.Text, tsql, paramList.ToArray());
                //ret_code = paramList[7].Value.ToString();
                //ret_msg = paramList[8].Value.ToString();
                if (pResult != null && pResult.Tables.Count > 0)
                {
                    DataRowCollection rows = pResult.Tables[0].Rows;
                    if (rows.Count > 0)
                    {
                        DataRow row = rows[0];
                        if (Convert.ToInt16(row[1]) > 0)
                        {
                            // select ret_msg,ret_code,v_uid,p_username,p_sapid,p_sapdeptid,p_sex,p_mobil_no,p_birthday,v_wx_dept_id;
                            CreateUser user = new CreateUser();
                            user.userid     = row[2].ToString();
                            user.name       = row[3].ToString();
                            user.mobile     = row[7].ToString();
                            user.gender     = GESCH == "1" ? "1" : "2";
                            user.email      = "";
                            user.department = new List <int> {
                                Convert.ToInt32(row[9])
                            };
                            user.to_invite = false;
                            //更新数据
                            //log = log + (string.Format("{0}_{1}_{2}_{3}_{4}", user.userid, user.name, user.mobile, user.gender, Convert.ToInt32(row[9])));
                            if (Convert.ToInt16(row[1]) == 1)
                            {
                                //添加日志
                                if (user.mobile != "")
                                {
                                    AccessTokenManage.UpdateUserApi(user, ref log);
                                }
                                else
                                {
                                    log = log + "手机号为空不更新" + "\r\n";
                                }
                                //AccessTokenManage.CreateUserApi(user);
                            }
                            //添加数据
                            if (Convert.ToInt16(row[1]) == 2)
                            {
                                AccessTokenManage.CreateUserApi(user, ref log);
                            }
                        }
                        else
                        {
                            log = log + string.Format("存储过程值{0},描述{1}", row[0].ToString(), row[1]) + "\r\n";
                            //Logger.Log(string.Format("存储过程值{0},描述{1}", row[0].ToString(), row[1]));
                        }
                        //resp.MSGTXT += xmlStr + row[1].ToString() + "\r\n";
                    }
                }
                else
                {
                    log = log + "存储过程范围值为空" + "\r\n";
                    //Logger.Log("存储过程范围值为空");
                    //resp.MSGTXT += xmlStr + "操作失败没有table" + "\r\n";
                }
                Logger.Log(log);
                //loginfo.loginfor(resp.MSGTXT);
            }
            // }
        }
Пример #6
0
        private T DoExecute <T>(QimenRequest <T> request, string session) where T : QimenResponse
        {
            long start = DateTime.Now.Ticks;

            // 添加协议级请求参数
            TopDictionary parameters = new TopDictionary();

            if (request.GetQueryParameters() != null)
            {
                parameters.AddAll(request.GetQueryParameters());
            }

            if (ownApi)
            {
                request.AddHeaderParameter("accept", "application/xml");
                request.AddHeaderParameter("content-type", "application/xml");
            }
            else
            {
                parameters.Add(Constants.METHOD, request.GetApiName());
                parameters.Add(Constants.VERSION, request.Version);
                parameters.Add(Constants.APP_KEY, appKey);
                parameters.Add(Constants.TIMESTAMP, request.Timestamp);
                parameters.Add(Constants.FORMAT, format);
                parameters.Add(Constants.SIGN_METHOD, signMethod);
                parameters.Add(Constants.SESSION, session);
                parameters.Add(Constants.PARTNER_ID, Constants.SDK_VERSION);
                parameters.Add(Constants.QM_CUSTOMER_ID, request.CustomerId);
            }



            // 添加头部参数
            if (this.useGzipEncoding)
            {
                request.AddHeaderParameter(Constants.ACCEPT_ENCODING, Constants.CONTENT_ENCODING_GZIP);
            }

            try
            {
                string reqBody = request.Body;
                if (string.IsNullOrEmpty(reqBody))
                {
                    //XmlWriter writer = new XmlWriter(Constants.QM_ROOT_TAG_REQ, typeof(QimenRequest<T>));
                    //reqBody = writer.Write(request);
                    reqBody = XmlSerializeHelper.XmlSerialize(request);
                }

                // 添加签名参数
                if (!ownApi)
                {
                    parameters.Add(Constants.SIGN, TopUtils.SignTopRequest(parameters, reqBody, appSecret, signMethod));
                }

                string fullUrl = WebUtils.BuildRequestUrl(serverUrl, parameters);
                string rspBody = webUtils.DoPost(fullUrl, Encoding.UTF8.GetBytes(reqBody), Constants.QM_CONTENT_TYPE, request.GetHeaderParameters());

                // 解释响应结果
                T rsp = null;
                if (disableParser)
                {
                    rsp      = Activator.CreateInstance <T>();
                    rsp.Body = rspBody;
                }
                else
                {
                    if (Constants.FORMAT_XML.Equals(format))
                    {
                        ITopParser <T> tp = new QimenXmlParser <T>();
                        rsp = tp.Parse(rspBody);
                    }
                }

                // 追踪错误的请求
                if (rsp != null && rsp.IsError)
                {
                    TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start);
                    TraceApiError(appKey, request.GetApiName(), serverUrl, parameters, latency.TotalMilliseconds, rspBody);
                }
                return(rsp);
            }
            catch (Exception e)
            {
                TimeSpan latency = new TimeSpan(DateTime.Now.Ticks - start);
                TraceApiError(appKey, request.GetApiName(), serverUrl, parameters, latency.TotalMilliseconds, e.GetType() + ": " + e.Message);
                throw e;
            }
        }