Exemple #1
0
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            if (string.IsNullOrEmpty(entity.PhoneNumber))
            {
                entity.PhoneNumber = "18611586620";
            }
            if (entity.Birthday.Date == DateTime.Today)
            {
                entity.Birthday = DateTime.Parse("1980-01-01");
            }
            //agent,sesscode,productno,productname 用户名,密码,产品代码,产品名称
            string[] config = entity.IOC_Class_Parameters.Split(',');
            string   rep    = string.Empty;

            try
            {
                rep = ws.IWebService(DESEncrypt(entity.ID), config[0], config[1], config[2], config[3],
                                     entity.EffectiveDate.ToString("yyyy-MM-dd"), entity.ExpiryDate.ToString("yyyy-MM-dd"),
                                     entity.FlightNo, entity.EffectiveDate.ToString("yyyy-MM-dd HH:mm"),
                                     "1", entity.Name, GetIdType(entity.IDType), entity.ID,
                                     entity.Gender == Gender.Female ? "0" : "1",
                                     entity.Birthday.ToString("yyyy-MM-dd"), entity.PhoneNumber, "1", "", "", false);

                if (string.IsNullOrEmpty(rep))
                {
                    string err = "接口未按约定返回:返回为空!";
                    Common.LogIt(err);
                    result.Trace.ErrorMsg = err;
                    return(result);
                }
            }
            catch
            {
                Common.LogIt(ws.Url);
                throw;
            }

            string[] array = rep.Split('|');
            if (array.Length > 1)
            {
                if (array[0] == "1")
                {
                    result.PolicyNo = array[1];
                }
                else
                {
                    Common.LogIt(rep);
                    result.Trace.ErrorMsg = rep;
                }
            }
            else
            {
                Common.LogIt(rep);
                result.Trace.ErrorMsg = rep;
            }

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();
            string url      = GetIssuingURLWithParam(entity);
            string response = GetResponse(url);

            result = ScanIssuingResult(response);
            return(result);
        }
Exemple #3
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            //if (entity.EffectiveDate.Date == DateTime.Today)
            //{//该产品不支持当日投保.留待手工处理
            //    result.PolicyNo = entity.CaseNo;
            //    return result;
            //}

            //if (!Regex.IsMatch(entity.PhoneNumber, "^1[3458][0-9]{9}$"))
            //{
            //    result.Trace.ErrorMsg = "请正确填写手机号码!";
            //    return result;
            //}

            if (true)
            {
                //提交订单
                string xmlString = GetIssuingXML(entity);
                string ret       = "";

                try
                {
                    ret = ws.SendOrder(xmlString);

                    if (string.IsNullOrEmpty(ret))
                    {
                        throw new Exception("简单保WebService返回为空!");
                    }
                }
                catch
                {
                    Common.LogIt(ws.Url);
                    throw;
                }

                ret = ret.ToUpper();
                if (ret.StartsWith("Z") || ret.Contains("RESEND"))
                {
                    result.PolicyNo        = result.Trace.Detail = ret;
                    result.Insurer         = "昆仑健康保险股份有限公司";
                    result.AmountInsured   = "";
                    result.Website         = "http://www.kunlunhealth.com";
                    result.CustomerService = "400-811-8899";
                }
                else
                {
                    Common.LogIt("投保参数" + xmlString + System.Environment.NewLine + "简单保返回:" + ret);
                    //result.Trace.ErrorMsg = ret;
                    result.PolicyNo     = entity.CaseNo;
                    result.Trace.Detail = ret;
                }

                return(result);
            }
        }
Exemple #4
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();
            policy po = new policy();

            po.userid     = "hgy02";
            po.password   = "******";
            po.PlanNo     = "";
            po.begdate    = entity.EffectiveDate.ToString("yyyy-MM-dd");
            po.App_name   = entity.Name;
            po.IDType     = GetIdType(entity.IDType);
            po.App_id     = entity.ID;
            po.App_cellno = entity.PhoneNumber;
            po.GoflightNo = entity.FlightNo;
            po.OPER_DATE  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            if (string.IsNullOrEmpty(po.App_cellno))
            {
                //模拟电话号码
                string   no    = DateTime.Now.Ticks.ToString();
                string[] type  = { "130", "131", "132", "155", "156", "186", "133", "153", "189", "180" };
                int      index = random.Next(0, type.Length);
                po.App_cellno = type[index] + no.Substring(no.Length - 8);
            }

            string ret = string.Empty;

            try
            {
                ret = webService.confirmpolicy(po);

                if (string.IsNullOrEmpty(ret))
                {
                    throw new Exception("Huayubaoxian WebService返回为空!");
                }
            }
            catch (Exception e)
            {
                Common.LogIt(webService.Url + e.ToString());
                result.Trace.Detail = e.Message;
                return(result);
            }

            //Common.LogIt("Huayubaoxian Issue:" + ret);
            if (StringHelper.MiscelHelper.IsNumeric(ret))
            {
                result.PolicyNo = ret;
            }
            else
            {
                string request = Common.XmlSerialize <policy>(po);
                Common.LogIt("投保参数" + request + System.Environment.NewLine + "Huayubaoxian投保:" + ret);
                result.Trace.ErrorMsg = ret;
            }
            return(result);
        }
Exemple #5
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            string birth  = entity.Birthday.ToString("yyyy-MM-dd");
            string idType = "5";// GetIdType(entity.IDType);
            string gender = entity.Gender == Gender.Female ? "0" : "1";

            if (string.IsNullOrEmpty(entity.PhoneNumber))
            {
                entity.PhoneNumber = "13888092959";
            }
            string[] config = entity.IOC_Class_Parameters.Split(',');

            string ret = string.Empty;

            try
            {
                ret = webService.alterableApproval_LB(config[0], config[1], birth, entity.ID, idType, entity.Name, gender,
                                                      "", entity.ID, idType, entity.Name, entity.FlightNo, "01", birth, entity.ID, idType, entity.Name, gender,
                                                      entity.PhoneNumber, entity.EffectiveDate.ToString("yyyy-MM-dd"), entity.ExpiryDate.ToString("yyyy-MM-dd"), config[2]);

                if (string.IsNullOrEmpty(ret))
                {
                    throw new Exception("西安奇易alterableApproval_LB返回为空!");
                }
            }
            catch
            {
                Common.LogIt(webService.Url);
                throw;
            }

            //正常返回是:

            /*
             * 投保成功!保单号:662206804374
             * */
            if (ret.Contains("投保成功"))
            {
                result.PolicyNo = result.Trace.Detail = StringHelper.MiscelHelper.InterceptNumber(ret);
            }
            else if (ret.Contains("份数超限"))
            {
                result.PolicyNo     = entity.CaseNo;
                result.Trace.Detail = ret;
            }
            else
            {
                Common.LogIt(entity.Title + "西安奇易alterableApproval_LB:" + ret);
                result.Trace.ErrorMsg = ret;
            }

            return(result);
        }
Exemple #6
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            string birth  = entity.Birthday.ToString("yyyy-MM-dd");
            string idType = GetIdType(entity.IDType);
            string gender = GetGender(entity.Gender);

            string[] config = entity.IOC_Class_Parameters.Split(',');

            string ret = string.Empty;

            try
            {
                ret = webService.alterableApproval(config[0], config[1], birth, entity.ID, idType, entity.Name, gender, "",
                                                   "", "", "",
                                                   entity.FlightNo, "302", birth, entity.ID, idType, entity.Name, gender,
                                                   entity.PhoneNumber, entity.EffectiveDate.ToString("yyyy-MM-dd HH:mm:ss"), config[2]);

                if (string.IsNullOrEmpty(ret))
                {
                    throw new Exception("西安奇易alterableApproval返回为空!");
                }
            }
            catch
            {
                Common.LogIt(webService.Url);
                throw;
            }

            //正常返回是:“投保成功!保单号:020471140216954”
            if (ret.Contains("投保成功"))
            {
                result.PolicyNo = result.Trace.Detail = StringHelper.MiscelHelper.InterceptNumber(ret);
            }
            else if (ret.Contains("份数超限"))
            {
                result.PolicyNo     = entity.CaseNo;
                result.Trace.Detail = ret;
            }
            else
            {
                //Common.LogIt(entity.Title + "西安奇易Issue:" + ret);
                result.Trace.ErrorMsg = ret;
            }

            return(result);
        }
Exemple #7
0
        //config: username, password, planCode

        public IssuingResultEntity Issue(IssueEntity entity)
        {
            string[]            config = entity.IOC_Class_Parameters.Split(',');
            IssuingResultEntity result = new IssuingResultEntity();
            StringBuilder       sbPost = new StringBuilder();

            sbPost.Append("username="******"&password="******"&planCode=").Append(config[2]);
            sbPost.Append("&method=1");
            sbPost.Append("&startTime=").Append(entity.EffectiveDate.ToString("yyyyMMddhhmmss"));
            sbPost.Append("&endTime=").Append(entity.ExpiryDate.ToString("yyyyMMddhhmmss"));
            //投标人信息
            sbPost.Append("&tName=").Append(System.Web.HttpUtility.UrlEncode(entity.Name));
            sbPost.Append("&tBirth=").Append(entity.Birthday.ToString("yyyyMMdd"));
            sbPost.Append("&tSex=").Append(entity.Gender == Gender.Female ? "F" : "M");
            sbPost.Append("&tType=").Append(System.Web.HttpUtility.UrlEncode(entity.IDType == IdentityType.身份证 ? "身份证" : "其他"));
            sbPost.Append("&tId=").Append(entity.ID);
            sbPost.Append("&tMobile=").Append(entity.PhoneNumber);
            //被保人信息
            sbPost.Append("&bName=").Append(System.Web.HttpUtility.UrlEncode(entity.Name));
            sbPost.Append("&bBirth=").Append(entity.Birthday.ToString("yyyyMMdd"));
            sbPost.Append("&bSex=").Append(entity.Gender == Gender.Female ? "F" : "M");
            sbPost.Append("&bType=").Append(System.Web.HttpUtility.UrlEncode(entity.IDType == IdentityType.身份证 ? "身份证" : "其他"));
            sbPost.Append("&bId=").Append(entity.ID);
            sbPost.Append("&bMobile=").Append(entity.PhoneNumber);

            //string post = System.Web.HttpUtility.UrlEncode(sbPost.ToString());
            byte[] data = Encoding.UTF8.GetBytes(sbPost.ToString());
            string ret  = Common.HttpPost("http://113.11.197.237/byOther/pingan.do", data);

            if (ret.Contains("success"))
            {
                string key = "保单号:";
                result.PolicyNo = result.Trace.Detail = ret.Substring(ret.IndexOf(key) + key.Length);
            }
            else
            {
                Common.LogIt(sbPost.ToString());
                Common.LogIt(ret);
                result.Trace.ErrorMsg = ret;
            }
            return(result);
        }
Exemple #8
0
        /// <summary>
        /// 解析投保接口返回值
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        private static IssuingResultEntity ScanIssuingResult(string xml)
        {
            xml = xml.Trim();
            IssuingResultEntity entity = new IssuingResultEntity();

            if (string.IsNullOrEmpty(xml))
            {
                entity.Trace.ErrorMsg = "投保接口返回内容为空!";
                return(entity);
            }

            XmlDocument xd = new XmlDocument();

            try
            {
                xd.LoadXml(xml);
                XmlNode xn   = xd.SelectSingleNode("PACKET/HEAD/RESPONSECOMPLETEMESSAGESTATUS/MESSAGESTATUSCODE");
                string  code = xn.InnerText;

                if (code == "1")//投保成功,返回正式保单号!
                {
                    xn = xd.SelectSingleNode("PACKET/INFORMATION/RESULT/C_PLY_NO");
                    entity.PolicyNo     = xn.InnerText;
                    entity.Trace.Detail = xd.OuterXml;
                }
                else
                {
                    xn = xd.SelectSingleNode("PACKET/HEAD/RESPONSECOMPLETEMESSAGESTATUS/MESSAGESTATUSDESCRIPTION");
                    entity.Trace.ErrorMsg = xn.InnerText;
                    entity.Trace.Detail   = xd.OuterXml;
                }
            }
            catch
            {
                entity.Trace.ErrorMsg = "解析投保接口返回xml字符串发生错误!";
                entity.Trace.Detail   = xml;
            }

            return(entity);
        }
Exemple #9
0
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity   result = new IssuingResultEntity();
            PurchaseRequestEntity req    = new PurchaseRequestEntity();

            req.customerBirth  = entity.Birthday;
            req.customerGender = (Gender)entity.Gender;
            req.customerID     = entity.ID;
            req.customerIDType = (IdentityType)entity.IDType;
            req.customerName   = entity.Name;
            req.customerPhone  = entity.PhoneNumber;
            req.flightDate     = entity.EffectiveDate;
            req.flightNo       = entity.FlightNo;

            string[] config = entity.IOC_Class_Parameters.Split(',');
            req.InsuranceCode = config[2];
            req.password      = config[1];
            req.username      = config[0];

            string xml = Common.XmlSerialize <PurchaseRequestEntity>(req);
            string ret = ws.Issue(xml);
            PurchaseResponseEntity resp = Common.XmlDeserialize <PurchaseResponseEntity>(ret);

            if (string.IsNullOrEmpty(resp.Trace.ErrorMsg))
            {
                result.PolicyNo        = result.Trace.Detail = resp.PolicyNo;
                result.Insurer         = resp.Insurer;
                result.AmountInsured   = resp.AmountInsured;
                result.Website         = resp.ValidationWebsite;
                result.CustomerService = resp.ValidationPhoneNumber;
            }
            else
            {
                result.Trace.Detail   = resp.Trace.Detail;
                result.Trace.ErrorMsg = resp.Trace.ErrorMsg;
            }

            return(result);
        }
Exemple #10
0
        /// <summary>
        /// 解析返回的字符串
        /// </summary>
        /// <param name="response"></param>
        /// <returns></returns>
        private static IssuingResultEntity ScanIssuingResult(string response)
        {
            /*返回格式:
             * 成功、或者重复投保,均返回:
             * S$ a历史总投保数|b本日总投保数|c姓名|d证件号码|e起保日期|f出生日期|g性别|投保易编号
             * 失败:
             * F$失败原因*/
            response = response.Trim();//滤掉换行回车等符号
            IssuingResultEntity result = new IssuingResultEntity();

            if (response.StartsWith("S$"))
            {
                result.PolicyNo = response.Substring(response.LastIndexOf('|') + 1);
            }
            else
            {
                result.Trace.ErrorMsg = response;
                Common.LogIt("广东国寿 投保:" + response);
            }

            return(result);
        }
Exemple #11
0
    /// <summary>
    /// 实时投保,需要实时返回保单号
    /// </summary>
    /// <param name="entity"></param>
    /// <returns></returns>
    public static IssuingResultEntity Issue(IssueEntity entity)
    {
        int                 interfaceId_bak = entity.InterfaceId;//暂存
        IssuingFacade       facade          = new IssuingFacade();
        IssuingResultEntity result          = facade.Issue(entity);

        if (string.IsNullOrEmpty(result.Trace.ErrorMsg))
        {
            if (string.IsNullOrEmpty(result.PolicyNo))    //没有保单号
            {
                result.Trace.ErrorMsg = "投保失败:没有返回保单号!";
            }
            else
            {
                //主键更新,不会阻塞  保存返回的正式保单号
                string strSql        = "update t_case set certNo = '{0}', [isIssued] = 1 {1} where caseNo = '{2}'";
                string interfacIdSql = string.Empty;

                if (entity.InterfaceId != interfaceId_bak)    //如果中途转投了别的接口
                {
                    interfacIdSql = ",[interface_Id] = " + entity.InterfaceId;
                }

                strSql = string.Format(strSql, result.PolicyNo, interfacIdSql, entity.CaseNo);

                entity.DbCommand.CommandText = strSql;
                entity.DbCommand.ExecuteNonQuery();
            }

            return(result);
        }
        else
        {
            return(result);
        }
    }
Exemple #12
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            if (string.IsNullOrEmpty(entity.CaseNo))
            {
                result.Trace.ErrorMsg = "请正确输入当前单证的印刷号,否则无法出单!";
                return(result);
            }

            string requestString  = GetIssuingXML(entity);
            string responseString = GetResponse(requestString);

            result = ScanIssuingResult(responseString);

            if (string.IsNullOrEmpty(result.Trace.ErrorMsg))
            {
                TraceEntity printResult = Print(result, entity);

                if (string.IsNullOrEmpty(printResult.ErrorMsg))
                {
                    result.Trace.Detail = "";
                    return(result);
                }
                else
                {
                    result.Trace.Detail = "已投保,但该单证未能成功核销!";
                    return(result);
                }
            }
            else
            {
                Common.LogIt("永城接口 投保:" + responseString);
                return(result);
            }
        }
Exemple #13
0
        /// <summary>
        /// 打印核销
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        public static TraceEntity Print(IssuingResultEntity issuingResult, IssueEntity entity)
        {
            TraceEntity result         = new TraceEntity();
            string      requestString  = GetPrintXML(issuingResult.PolicyNo, entity.CaseNo);
            string      responseString = GetResponse(requestString);

            result = ScanPrintResult(responseString);
            string strSql;

            if (string.IsNullOrEmpty(result.ErrorMsg))
            {
                strSql = "update t_case set printingNo = '{0}', [isPrinted] = 1 where caseNo = '{1}'";
                strSql = string.Format(strSql, entity.CaseNo, entity.CaseNo);
                entity.DbCommand.CommandText = strSql;
                entity.DbCommand.ExecuteNonQuery();
            }
            else
            {
                //strSql = "update t_case set printingNo = '{0}', [isPrinted] = 0 where caseNo = '{1}'";
                Common.LogIt("永城接口 核销:" + responseString);
            }

            return(result);
        }
Exemple #14
0
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            if (entity.EffectiveDate.Date == entity.ExpiryDate.Date)
            {
                entity.ExpiryDate = entity.ExpiryDate.AddDays(1);//"满期日期必须晚于生效日期"
            }
            PolicyCert[] cert = new PolicyCert[1];
            cert[0].birthDate = entity.Birthday.ToString("yyyyMMdd");
            cert[0].effDate   = entity.EffectiveDate.ToString("yyyyMMdd");
            cert[0].gender    = entity.Gender == Gender.Female ? "F" : "M";
            cert[0].idNo      = entity.ID;
            cert[0].idType    = GetIdType(entity.IDType);
            cert[0].matuDate  = entity.ExpiryDate.ToString("yyyyMMdd");
            cert[0].name      = GetChineseName(entity.Name);
            cert[0].units     = "1";
            cert[0].mobile    = entity.PhoneNumber;
            string xmlRet = "";

            try
            {
                xmlRet = Issue(cert);

                if (string.IsNullOrEmpty(xmlRet))
                {
                    throw new Exception("平安投保返回为空!");
                }

                XmlDocument xd = new XmlDocument();
                xd.LoadXml(xmlRet);
                XmlNodeList nodes = xd.SelectNodes("Values/value");

                if (GetValue(nodes, "processFlag") == "1")
                {
                    nodes = xd.SelectNodes("Values/array/record/value");
                    string billNo = GetValue(nodes, "certNo");
                    result.PolicyNo = result.Trace.Detail = billNo;
                    return(result);
                }
                else
                {
                    Common.LogIt("平安投保返回:" + xmlRet);
                    //平安接口315暂停
                    string error = GetValue(nodes, "processMessage");
                    if (string.IsNullOrEmpty(error))
                    {
                        result.Trace.ErrorMsg = "未知错误";
                    }
                    else
                    {
                        result.Trace.ErrorMsg = error;
                    }
                    return(result);
                }
            }
            catch
            {
                if (!string.IsNullOrEmpty(xmlRet))
                {
                    Common.LogIt("平安投保返回:" + xmlRet);
                }
                throw;
            }
        }
Exemple #15
0
        TraceEntity Issue(MessageEntity message)
        {
            IssuingResultEntity result = Case.IssueAsync(message);

            return(result.Trace);
        }
Exemple #16
0
        private void Scan()
        {
            DataSet ds;
            string  strsql = @"
select * from t_Case a 
 inner join t_interface b on a.interface_id = b.id
 where (CertNo is null or caseNo = CertNo)
 and (IssuingFailed is null or IssuingFailed not like '%份数超限%')
 and customerFlightDate > GETDATE()
 and enabled = 1
";

            ds = SqlHelper.ExecuteDataset(Common.ConnectionString, CommandType.Text, strsql);

            using (System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(Common.ConnectionString))
            {
                cnn.Open();
                System.Data.SqlClient.SqlCommand cmm = new System.Data.SqlClient.SqlCommand("", cnn);

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (stopScanning)
                    {
                        break;
                    }

                    Thread.Sleep(500);

                    IssueEntity entity = new IssueEntity();
                    entity.Name     = dr["customerName"].ToString();
                    entity.ID       = dr["customerID"].ToString();
                    entity.IDType   = IdentityType.其他证件;
                    entity.Gender   = dr["customerGender"].ToString() == "男" ? Gender.Male : Gender.Female;
                    entity.Birthday = DateTime.Parse(dr["customerBirth"].ToString());
                    //如果是今天之后的乘机日期,则时间部分置为0
                    DateTime dtf          = DateTime.Parse(dr["customerFlightDate"].ToString());
                    int      caseDuration = Convert.ToInt32(dr["caseDuration"]);
                    entity.EffectiveDate = dtf > DateTime.Today ? dtf.Date : dtf;
                    entity.ExpiryDate    = dtf.AddDays(caseDuration - 1);
                    entity.PhoneNumber   = dr["customerPhone"].ToString();
                    entity.FlightNo      = dr["customerFlightNo"].ToString();

                    entity.IsLazyIssue          = false;
                    entity.DbCommand            = cmm;
                    entity.IOC_Class_Alias      = dr["IOC_Class_Alias"].ToString();
                    entity.IOC_Class_Parameters = dr["IOC_Class_Parameters"].ToString();
                    entity.CaseNo      = dr["caseNo"].ToString();
                    entity.CaseId      = dr["caseId"].ToString();
                    entity.InterfaceId = Convert.ToInt32(dr["interface_Id"]);
                    //entity.Title = productName.ToString();

                    this.BeginInvoke(new MethodInvoker(delegate
                    {
                        txtLogInfo.AppendText(MessageToString(entity));
                    }));

                    IssuingResultEntity result = new IssuingResultEntity();
                    try
                    {
                        result = Case.Issue(entity);
                    }
                    catch (Exception ee)
                    {
                        StringBuilder sbLog = new StringBuilder();
                        sbLog.AppendLine(MessageToString(entity));
                        sbLog.Append(ee.ToString());
                        Common.LogIt(sbLog.ToString());
                        result.Trace.ErrorMsg = ee.Message;
                    }

                    if (string.IsNullOrEmpty(result.Trace.ErrorMsg))
                    {
                        //strsql = @"update t_Case set CertNo = '{0}' where caseNo = '{1}'";
                        //strsql = string.Format(strsql, result.PolicyNo, entity.CaseNo);
                        //SqlHelper.ExecuteNonQuery(Common.ConnectionString, CommandType.Text, strsql);
                        this.BeginInvoke(new MethodInvoker(delegate
                        {
                            txtLogInfo.AppendText(" " + result.PolicyNo + Environment.NewLine);
                        }));
                    }
                    else
                    {
                        this.BeginInvoke(new MethodInvoker(delegate
                        {
                            txtLogInfo.AppendText(" " + result.Trace.ErrorMsg + Environment.NewLine);
                        }));
                    }
                }

                cnn.Close();
            }

            //if (!stopScanning)
            //{
            //    this.BeginInvoke(new MethodInvoker(delegate
            //        {
            //            timerScan.Enabled = true;
            //        }));
            //}

            this.BeginInvoke(new MethodInvoker(delegate
            {
                txtLogInfo.AppendText("本次扫描结束!" + Environment.NewLine);
                btnScan.Text = "Scan";
                stopScanning = true;
            }));
        }
Exemple #17
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            //提交订单
            TransportAccidentForSaveRequsetDto dto = new TransportAccidentForSaveRequsetDto();

            dto.birthDate  = entity.Birthday.ToShortDateString();
            dto.effDate    = entity.EffectiveDate.ToString("yyyy-MM-dd HH:mm:ss");
            dto.functionId = "1";
            dto.gender     = entity.Gender == Gender.Female ? "女" : "男";
            dto.idNo       = entity.ID;
            dto.idType     = entity.IDType.ToString();
            //解决该接口不接受起保日期和终止日期是同一天的投保问题
            dto.matuDate         = entity.EffectiveDate.Date == entity.ExpiryDate.Date ? entity.ExpiryDate.Date.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss") : entity.ExpiryDate.ToString("yyyy-MM-dd HH:mm:ss");
            dto.name             = entity.Name;
            dto.units            = "1";
            dto.customerPhone    = "";// entity.PhoneNumber;
            dto.customerFlightNo = entity.FlightNo;

            string number = entity.CaseId;

            number        = number.Length > 6 ? number.Substring(number.Length - 6) : number.PadLeft(6, '0');
            dto.orderCode = "TB2727" + DateTime.Today.ToString("yyyyMMdd") + number;

            //try
            //{
            //    Common.LogIt(Common.Serialize<TransportAccidentForSaveRequsetDto>(dto));
            //}
            //catch (Exception ee) { Common.LogIt(ee.ToString()); }

            TransportAccidentResponseDto ret = null;

            try
            {
                ret = wsSave.savePolicy("zgrs", "zgrs", dto);

                if (ret == null)
                {
                    throw new Exception("北京国寿WebService返回为空!");
                }
            }
            catch
            {
                Common.LogIt(wsSave.Url);
                throw;
            }

            if (string.IsNullOrEmpty(ret.error))
            {
                if (string.IsNullOrEmpty(ret.policyNo))
                {
                    throw new Exception("北京国寿保单号为空!?");
                }
                else
                {
                    result.PolicyNo = ret.policyNo;
                }
            }
            else
            {
                string request = Common.XmlSerialize <TransportAccidentForSaveRequsetDto>(dto);
                Common.LogIt("投保参数" + request + System.Environment.NewLine + "北京国寿投保:" + ret.error);
                result.Trace.ErrorMsg = ret.error;
            }

            return(result);
        }
Exemple #18
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            bool retCheck;//默认为false

            try
            {
                retCheck = wsCheck.DataCheck(entity.ID, entity.PhoneNumber, "");
                //if (retCheck == null)
                //    throw new Exception("WebService返回为空!");

                if (retCheck)
                {
                    //提交订单
                    string xmlString = GetIssuingXML(entity);
                    Common.LogIt("简单保debug:" + xmlString);
                    string ret = "";

                    //try
                    {
                        ret = ws.InsertOrder(xmlString);

                        if (string.IsNullOrEmpty(ret))
                        {
                            throw new Exception("简单保WebService返回为空!");
                        }
                    }
                    //catch (Exception e)
                    {
                        //Common.LogIt(ws.Url + System.Environment.NewLine + e.ToString());
                        //result.Trace.Detail = "简单保InsertOrder访问失败!";
                        //return result;
                    }

                    ret = ret.ToUpper();
                    if (!ret.StartsWith("Z"))
                    {
                        Common.LogIt("投保参数" + xmlString + System.Environment.NewLine + "简单保投保:" + ret);
                        //result.Trace.Detail = ret;
                        throw new Exception(ret);
                    }
                    else
                    {
                        result.PolicyNo = ret;
                    }

                    return(result);
                }
                else
                {
                    string msg = "dataCheck未通过(id={0}, phone={1})";
                    msg = string.Format(msg, entity.ID, entity.PhoneNumber);
                    Common.LogIt(msg);
                    //result.Trace.ErrorMsg = msg;
                    result.PolicyNo = entity.CaseNo;
                    return(result);
                }
            }
            catch (Exception e)
            {
                Common.LogIt(e.ToString());
                //Common.LogIt("step1---------" + System.Environment.NewLine + e.ToString());
                ////result.Trace.Detail = "简单保DataCheck访问失败!";
                ////return result;
                //entity.IOC_Class_Alias = "JinHang";
                ////string msg = "简单保核保未通过:id={0}, phone={1}  转入其他接口:{2}";
                ////msg = string.Format(msg, entity.ID, entity.PhoneNumber, entity.IOC_Class_Alias);
                ////Common.LogIt(msg);

                //try
                //{
                //    result = new IAClass.Issuing.IssuingFacade().Issue(entity);
                //    if (!string.IsNullOrEmpty(result.Trace.ErrorMsg))
                //    {
                //        throw new Exception(result.Trace.ErrorMsg);
                //    }
                //}
                //catch(Exception ee)
                //{
                //    Common.LogIt("step2---------" + System.Environment.NewLine + ee.ToString());
                //    entity.IOC_Class_Alias = "chinalife_bj";
                //    result = new IAClass.Issuing.IssuingFacade().Issue(entity);
                //}
            }

            result.PolicyNo = "Z";
            return(result);
        }
Exemple #19
0
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            XmlDocument xmlDoc = IssuingXML.Issuing.Clone() as XmlDocument;

            xmlDoc.SelectSingleNode("Instony/PolicyInfo/StartTime").InnerText  = entity.EffectiveDate.ToString("yyyyMMddHHmmss");
            xmlDoc.SelectSingleNode("Instony/PolicyInfo/EndTime").InnerText    = entity.EffectiveDate.ToString("yyyyMMddHHmmss");
            xmlDoc.SelectSingleNode("Instony/PolicyInfo/CreateTime").InnerText = DateTime.Now.ToString("yyyyMMddHHmmss");
            xmlDoc.SelectSingleNode("Instony/PolicyInfo/NoCode").InnerText     = entity.FlightNo;
            int i = 0;
            //投保人
            XmlNode xn = xmlDoc.SelectSingleNode("Instony/Holder");

SetValue:
            i++;
            xn.SelectSingleNode("Name").InnerText     = entity.Name;
            xn.SelectSingleNode("Sex").InnerText      = entity.Gender == Gender.Female ? "F" : "M";
            xn.SelectSingleNode("Birthday").InnerText = entity.Birthday.ToString("yyyyMMdd");
            xn.SelectSingleNode("IDType").InnerText   = GetIdType(entity.IDType);
            xn.SelectSingleNode("IDNum").InnerText    = entity.ID;
            xn.SelectSingleNode("Mobile").InnerText   = string.IsNullOrEmpty(entity.PhoneNumber) ? "18387195818" : entity.PhoneNumber;

            //被保人 内容同投保人节点,故用goto重复一次
            xn = xmlDoc.SelectSingleNode("Instony/Insureds/Insured");
            if (i < 2)
            {
                goto SetValue;
            }

            string response = "";

            try
            {
                string[] config = entity.IOC_Class_Parameters.Split(',');
                response = ws.doSaleService(xmlDoc.OuterXml, config[0]);
                if (string.IsNullOrEmpty(response))
                {
                    throw new Exception("意时网投保WebService返回为空!");
                }
            }
            catch
            {
                Common.LogIt(ws.Url);
                throw;
            }

            try
            {
                XmlDocument xmlDocRet = new XmlDocument();
                xmlDocRet.LoadXml(response);
                if (xmlDocRet.SelectSingleNode("Instony/RetData/Flag").InnerText == "1")
                {
                    result.PolicyNo = xmlDocRet.SelectSingleNode("Instony/PolicyInfo/PolicyNum").InnerText;
                    return(result);
                }
                else
                {
                    Common.LogIt("投保参数" + xmlDoc.OuterXml + System.Environment.NewLine + "意时网投保返回:" + response);
                    result.Trace.ErrorMsg = xmlDocRet.SelectSingleNode("Instony/RetData/Message").InnerText;
                    return(result);
                }
            }
            catch
            {
                Common.LogIt("投保参数" + xmlDoc.OuterXml + System.Environment.NewLine + "意时网投保返回:" + response);
                throw;
            }
        }
Exemple #20
0
    /// <summary>
    /// 延迟投保(追溯?)
    /// </summary>
    /// <param name="entityObj"></param>
    public static IssuingResultEntity IssueAsync(object entityObj)
    {
        string strSql = "";
        IssuingResultEntity result = new IssuingResultEntity();

        try
        {
            IssueEntity entity          = (IssueEntity)entityObj;
            int         interfaceId_bak = entity.InterfaceId;//暂存
            t_Case      policy          = Case.Get(entity.CaseNo, entity.ConnectionString);

            if (!string.IsNullOrEmpty(policy.CertNo))
            {
                result.Trace.Detail = "已有保单号。";
            }
            else if (!policy.enabled)
            {
                result.Trace.Detail = "已撤销。";
            }
            else
            {
                entity.ID = entity.ID.ToUpper();    //有些第三方接口无法通过身份证中小写的x字母
                IssuingFacade facade = new IssuingFacade();
                result = facade.Issue(entity);

                if (string.IsNullOrEmpty(result.Trace.ErrorMsg))
                {
                    if (!string.IsNullOrEmpty(result.Trace.Detail))    //有特殊情况
                    {
                        strSql = "update t_case set IssuingFailed = @IssuingFailed where caseNo = @caseNo";
                        SqlHelper.ExecuteNonQuery(entity.ConnectionString, CommandType.Text, strSql,
                                                  new string[] { "@IssuingFailed", "@caseNo" },
                                                  new object[] { result.Trace.Detail, entity.CaseNo });
                    }

                    if (!string.IsNullOrEmpty(result.PolicyNo))
                    {
                        //主键更新,不会阻塞  保存返回的正式保单号
                        strSql = "update t_case set certNo = '{0}', [isIssued] = 1 {1} where caseNo = '{2}'";
                        string interfacIdSql = string.Empty;

                        if (entity.InterfaceId != interfaceId_bak)    //如果中途转投了别的接口
                        {
                            interfacIdSql = ",[interface_Id] = " + entity.InterfaceId;
                        }

                        strSql = string.Format(strSql, result.PolicyNo, interfacIdSql, entity.CaseNo);
                        int eff = SqlHelper.ExecuteNonQuery(entity.ConnectionString, CommandType.Text, strSql);
                        if (eff == 0)
                        {
                            Common.LogIt("ExecuteNonQuery影响行数为0 : " + strSql);
                        }
                    }
                }
                else
                {
                    int len = result.Trace.ErrorMsg.Length;
                    len    = len > 100 ? 100 : len;
                    strSql = "update t_case set IssuingFailed = @IssuingFailed where caseNo = @caseNo";
                    SqlHelper.ExecuteNonQuery(entity.ConnectionString, CommandType.Text, strSql,
                                              new string[] { "@IssuingFailed", "@caseNo" },
                                              new object[] { result.Trace.ErrorMsg.Substring(0, len), entity.CaseNo });
                }
            }

            return(result);
        }
        catch (Exception e)
        {
            //Common.LogIt(e.ToString());
            throw;
        }
    }
Exemple #21
0
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            XmlDocument policy = XMLString.Issuing.Clone() as XmlDocument;

            //基本信息
            policy.SelectSingleNode("message/batchNo").InnerText   = entity.CaseId + entity.RedeliveryCount;//最长8位数字(千万级)
            policy.SelectSingleNode("message/transDate").InnerText = DateTime.Now.ToString("yyyyMMdd");
            policy.SelectSingleNode("message/transTime").InnerText = DateTime.Now.ToString("yyyyMMddHHmmss");

            //姓名处理
            string fn = entity.Name.Substring(0, 1);
            string ln = entity.Name.Replace(fn, string.Empty);

            if (entity.Name.Length > 2)
            {
                if (IsLongFN(entity.Name))
                {
                    fn = fn.Substring(0, 2);
                    ln = entity.Name.Replace(fn, string.Empty);
                }
            }
            //保单信息
            XmlNode para    = policy.SelectSingleNode("message/dataSet/record");
            XmlNode paraNew = para.Clone();

            paraNew.SelectSingleNode("effDate").InnerText  = entity.EffectiveDate.ToString("yyyyMMdd");
            paraNew.SelectSingleNode("phFn").InnerText     = fn;
            paraNew.SelectSingleNode("phLn").InnerText     = ln;
            paraNew.SelectSingleNode("phGender").InnerText = entity.Gender == Gender.Female ? "F" : "M";
            paraNew.SelectSingleNode("phBirth").InnerText  = entity.Birthday.ToString("yyyyMMdd");
            paraNew.SelectSingleNode("phIdtype").InnerText = GetIdType(entity.IDType);
            paraNew.SelectSingleNode("phId").InnerText     = entity.ID;
            paraNew.SelectSingleNode("phMobile").InnerText = string.IsNullOrEmpty(entity.PhoneNumber) ? entity.CaseId : entity.PhoneNumber;
            //paraNew.SelectSingleNode("phAdd1").InnerText = null;
            //paraNew.SelectSingleNode("phAdd2").InnerText = null;
            //paraNew.SelectSingleNode("phEmail").InnerText = null;
            string sig = paraNew.SelectSingleNode("productId").InnerText
                         + paraNew.SelectSingleNode("effDate").InnerText
                         + paraNew.SelectSingleNode("phId").InnerText
                         + paraNew.SelectSingleNode("phId").InnerText;

            paraNew.SelectSingleNode("Signature").InnerText = EncryptStringByAES(sig, merchantPass);
            paraNew.SelectSingleNode("productId").InnerText = productId;
            para.ParentNode.AppendChild(paraNew);
            para.ParentNode.RemoveChild(para);
            policy.SelectSingleNode("message/merchantID").InnerText = merchantID;

            string ret = "";

            //try
            {
                ret = GetResponse(policy.OuterXml);
                if (string.IsNullOrEmpty(ret))
                {
                    throw new Exception("金航网投保接口返回为空!");
                }
            }
            //catch (Exception e)
            //{
            //    Common.LogIt(e.ToString());
            //    result.Trace.Detail = "金航网投保接口访问失败!";
            //    return result;
            //}

            try
            {
                XmlDocument xml = new XmlDocument();
                xml.LoadXml(ret);
                string errorCode = xml.SelectSingleNode("message/dataSet/record/retCode").InnerText;
                if (errorCode != "000000")
                {
                    Common.LogIt("金航网投保参数" + policy.OuterXml + System.Environment.NewLine + "返回错误码:" + errorCode);
                    string error = xml.SelectSingleNode("message/dataSet/record/errMsg").InnerText;

                    if (!string.IsNullOrEmpty(error))
                    {
                        result.Trace.ErrorMsg = error;
                    }
                    else
                    {
                        result.Trace.ErrorMsg = "错误码" + errorCode;
                    }
                    //throw new Exception(errorCode);
                }
                else
                {
                    result.PolicyNo = xml.SelectSingleNode("message/dataSet/record/policyRef").InnerText;
                }

                return(result);
            }
            catch
            {
                Common.LogIt("投保参数:" + policy.OuterXml + System.Environment.NewLine + "金航网返回:" + ret);
                throw;
            }
        }
Exemple #22
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();

            if (entity.EffectiveDate.Date == DateTime.Today)
            {//该产品不支持当日投保.留待手工处理
                result.PolicyNo = entity.CaseNo;
                return(result);
            }

            if (!Regex.IsMatch(entity.PhoneNumber, "^1[3458][0-9]{9}$"))
            {
                result.Trace.ErrorMsg = "请正确填写手机号码!";
                return(result);
            }

            bool retCheck;//默认为false

            try
            {
                retCheck = wsCheck.DataCheck(entity.ID, entity.PhoneNumber, "");
                //if (retCheck == null)
                //    throw new Exception("WebService返回为空!");
            }
            catch (Exception e)
            {
                Common.LogIt(wsCheck.Url + System.Environment.NewLine + e.ToString());
                result.Trace.ErrorMsg = e.Message;
                return(result);
            }

            if (retCheck)
            {
                //提交订单
                string xmlString = GetIssuingXML(entity);
                string ret       = "";

                try
                {
                    ret = ws.InsertOrder(xmlString);

                    if (string.IsNullOrEmpty(ret))
                    {
                        throw new Exception("简单保WebService返回为空!");
                    }
                }
                catch (Exception e)
                {
                    Common.LogIt(ws.Url + System.Environment.NewLine + e.ToString());
                    result.Trace.ErrorMsg = e.Message;
                    return(result);
                }

                ret = ret.ToUpper();
                if (!ret.StartsWith("Z"))
                {
                    Common.LogIt("投保参数" + xmlString + System.Environment.NewLine + "简单保投保:" + ret);
                    result.Trace.ErrorMsg = ret;
                }
                else
                {
                    result.PolicyNo        = ret;
                    result.Insurer         = "昆仑健康保险股份有限公司";
                    result.AmountInsured   = "";
                    result.Website         = "http://www.kunlunhealth.com";
                    result.CustomerService = "400-811-8899";
                }

                return(result);
            }
            else
            {
                string msg = "dataCheck未通过(id={0}, phone={1})";
                msg = string.Format(msg, entity.ID, entity.PhoneNumber);
                Common.LogIt(msg);
                //result.Trace.ErrorMsg = msg;
                result.PolicyNo        = entity.CaseNo;//留待手工投保平安团单
                result.Insurer         = "中国平安";
                result.AmountInsured   = "";
                result.Website         = "http://www.pingan.com/";
                result.CustomerService = "95511";
                return(result);
                //entity.IOC_Class_Alias = "chinalife_bj";
                //string msg = "jiandanbao_all核保未通过:id={0}, phone={1}  转入其他接口:{2}";
                //msg = string.Format(msg, entity.ID, entity.PhoneNumber, entity.IOC_Class_Alias);
                //Common.LogIt(msg);

                //result = new IAClass.Issuing.IssuingFacade().Issue(entity);
                //return result;
            }
        }
Exemple #23
0
        /// <summary>
        /// 出单
        /// </summary>
        /// <param name="request"></param>
        /// <param name="isExternal">是否外部(第三方机构)调用</param>
        /// <returns></returns>
        public static PurchaseResponseEntity Purchase(PurchaseRequestEntity request, bool isExternal, bool isSync)
        {
            PurchaseResponseEntity response = new PurchaseResponseEntity();

            if (Common.CheckIfSystemFailed(response))
            {
                return(response);
            }

            try
            {
                DateTime dtNow = Common.GetDatetime();//DateTime.Now;

                if (!isSync)
                {
                    #region  效性验证
                    if (request.flightDate < dtNow.AddMinutes(Common.IssuingDeadline)) //如果填写的起飞时间已过
                    {
                        if (request.flightDate.Date == dtNow.Date)                     //当日起飞,则进行时间部分的验证
                        {
                            if (request.flightDate.TimeOfDay.Ticks > 0)
                            {
                                response.Trace.ErrorMsg = "请输入准确的起飞时间!";
                            }
                            else//时间部分为零(PNR未能导入)
                            {
                                response.Trace.ErrorMsg = "请输入起飞时间!";
                            }
                            return(response);
                        }
                        else//日期是昨天、昨天以前
                        {
                            response.Trace.ErrorMsg = "请输入正确的乘机日期!";
                            return(response);
                        }
                    }
                    else if ((request.flightDate - dtNow) > new TimeSpan(180, 0, 0, 0, 0))
                    {
                        response.Trace.ErrorMsg = "乘机时间太过遥远(已超过180天)!";
                        return(response);
                    }

                    if (string.IsNullOrEmpty(request.flightNo))
                    {
                        response.Trace.ErrorMsg = "航班号不能为空!";
                        return(response);
                    }

                    if (string.IsNullOrEmpty(request.customerID))
                    {
                        response.Trace.ErrorMsg = "乘客证件号码不能为空!";
                        return(response);
                    }
                    else
                    {
                        request.customerID = request.customerID.ToUpper();
                        request.customerID = StringHelper.MiscelHelper.Full2Half(request.customerID);

                        if (request.customerIDType == IdentityType.身份证 && !Common.CheckIDCard(request.customerID))
                        {
                            response.Trace.ErrorMsg = "身份证号码填写有误,请核对!";
                            return(response);
                        }
                    }

                    if (string.IsNullOrEmpty(request.customerName))
                    {
                        response.Trace.ErrorMsg = "乘客姓名不能为空!";
                        return(response);
                    }
                    else
                    {
                        if (request.customerName.Contains("  "))
                        {
                            response.Trace.ErrorMsg = "客户名称不合法: 姓名不能有连续空格!";
                            return(response);
                        }
                    }

                    if (!string.IsNullOrEmpty(request.customerPhone))
                    {
                        if (!Regex.IsMatch(request.customerPhone, "^1[3458][0-9]{9}$"))
                        {
                            response.Trace.ErrorMsg = "手机号码格式不正确!";
                            return(response);
                        }
                    }
                    #endregion
                }

                UserLoginResponse userLogin = UserClass.AccessCheck(request.username, request.password);

                if (string.IsNullOrEmpty(userLogin.Trace.ErrorMsg))
                {
                    if (UserClass.IsParentDisabled(request.username))
                    {
                        response.Trace.ErrorMsg = "由于您的上级账号已被冻结,所以您无法出单,请联系您的上级用户!";
                        return(response);
                    }

                    if (Common.PaymOnline)
                    {
                        if (userLogin.Balance <= 0)
                        {
                            response.Trace.ErrorMsg = "账户余额不足,请充值或联系您的上级用户!";
                            return(response);
                        }
                    }

                    //if (Case.IsIssued(request.flightDate, request.customerName, request.customerID))
                    //{
                    //    response.Trace.ErrorMsg = "该旅客信息已经入库,请勿重复打印!";
                    //    return response;
                    //}

                    DataSet dsProduct = Product.GetProduct(request.InsuranceCode);

                    if (dsProduct.Tables[0].Rows.Count == 0)
                    {
                        response.Trace.ErrorMsg = "找不到您所指定的产品,或者该产品已停用,请重新选择!";
                        return(response);
                    }

                    DataRow drProduct            = dsProduct.Tables[0].Rows[0];
                    bool    isIssuingRequired    = Convert.ToBoolean(drProduct["IsIssuingRequired"]);
                    bool    isIssuingLazyEnabled = Convert.ToBoolean(drProduct["IsIssuingLazyEnabled"]);
                    bool    isMobileNoRequired   = Convert.ToBoolean(drProduct["IsMobileNoRequired"]);
                    if (isMobileNoRequired)
                    {
                        if (Regex.IsMatch(request.customerPhone, "^1[3458][0-9]{9}$"))
                        {
                            //处理销售点仅用一个手机号给所有乘客出保险的偷懒行为
                            if (Case.CountMobile(request.customerPhone, request.username) > 5)
                            {
                                response.Trace.ErrorMsg = "该手机号已重复使用多次,请如实填写以提供短信服务!";
                                return(response);
                            }
                        }
                        else
                        {
                            response.Trace.ErrorMsg = "该款产品必须提供手机号,请检查是否正确!";
                            return(response);
                        }
                    }
                    else if (!string.IsNullOrEmpty(request.customerPhone))
                    {
                        if (Regex.IsMatch(request.customerPhone, "^1[3458][0-9]{9}$"))
                        {
                            //处理销售点仅用一个手机号给所有乘客出保险的偷懒行为
                            if (Case.CountMobile(request.customerPhone, request.username) > 5)
                            {
                                response.Trace.ErrorMsg = "该手机号已重复使用多次,请如实填写,或者不填!";
                                return(response);
                            }
                        }
                        else
                        {
                            response.Trace.ErrorMsg = "请正确填写手机号,或者不填!";
                            return(response);
                        }
                    }

                    int    interface_Id = isIssuingRequired ? Convert.ToInt32(drProduct["interface_Id"]) : 0;//若非对接产品,接口ID置为0,以免影响接口出单统计
                    object caseSupplier = drProduct["productSupplier"];
                    int    caseDuration = Convert.ToInt32(drProduct["productDuration"]);
                    object productName  = drProduct["productName"];

                    //基于产品的 IP 过滤
                    string include           = drProduct["FilterInclude"].ToString().Trim();
                    string exclude           = drProduct["FilterExclude"].ToString().Trim();
                    string comment           = drProduct["FilterComment"].ToString();
                    string ip                = System.Web.HttpContext.Current.Request.UserHostAddress;
                    string ipLocation        = string.Empty;
                    bool   isValidIpLocation = true;
                    try
                    {
                        Ip2Location.Ip2Location ip2lo = new Ip2Location.Ip2Location();
                        ipLocation = ip2lo.GetLocation(ip);
                        if (!IsIpChecked(ipLocation, include, exclude))
                        {
                            string strLog = "ProductFilter User:{0} IP:{1} Location:{2} Include:{3} Exclude:{4}";
                            strLog = string.Format(strLog, request.username, ip, ipLocation, include, exclude);
                            Common.LogIt(strLog);
                            response.Trace.Detail   = comment;
                            response.Trace.ErrorMsg = "无法出单!(e001)";// "产品区域限制,禁止出单!";
                            return(response);
                        }
                    }
                    catch (Exception ee)
                    {
                        isValidIpLocation = false;
                        ipLocation        = ee.Message.Substring(0, 20);
                    }

                    response.AgentName = userLogin.DisplayName;
                    //response.ValidationPhoneNumber = UserClass.GetValidationPhoneNumber(request.username);

                    #region 数据库事务
                    //2008.4.19 改用全手工方式 因为 Nbear 的事务处理似乎不能及时释放掉connection,越来越的连接…满负荷…导致客户端访问webservice连接超时
                    using (SqlConnection cnn = new SqlConnection(Common.ConnectionString))
                    {
                        cnn.Open();
                        using (SqlTransaction tran = cnn.BeginTransaction())
                        {
                            string strSql = "";

                            try
                            {
                                //有限的行级排它锁with(rowlock,xlock,readpast),保证该行不会被其他进程读取,同时不会阻塞其他行的读取和主键更新
                                //2011.9.28 日志发现该语句依然可能导致死锁 原因:该语句除了对那一行上X锁之外,对top2、top3…(满足where条件的行)上IX锁
                                //而X和IX锁是互斥的,
                                //                                strSql = @"
                                //select top 1 * from t_serial with(rowlock,xlock,readpast)
                                //where caseOwner = '{0}' and caseSupplier = '{1}'
                                //order by caseNo asc";
                                strSql = @"
  delete top(1)
  from t_serial WITH (rowlock, READPAST)
  output deleted.caseNo, deleted.caseSupplier,
  deleted.locationInclude, deleted.locationExclude, deleted.locationComment
  where caseOwner = '{0}' and caseSupplier = '{1}'";
                                strSql = string.Format(strSql, request.username, caseSupplier);
                                DataSet    dsSerial = new DataSet();
                                SqlCommand cmm      = new SqlCommand("", cnn, tran);
                                cmm.CommandText = strSql;
                                SqlDataAdapter sda = new SqlDataAdapter(cmm);
                                sda.Fill(dsSerial);

                                if (dsSerial.Tables[0].Rows.Count == 0)
                                {
                                    tran.Rollback();
                                    response.Trace.ErrorMsg = "没有可用的单证号,请联系相关业务人员!";
                                    return(response);
                                }

                                DataRow drSerial = dsSerial.Tables[0].Rows[0];
                                string  caseNo   = drSerial["caseNo"].ToString();
                                response.CaseNo = caseNo;

                                if (isValidIpLocation)//上面验证若通过则此处继续审查
                                {
                                    //基于号段的 IP 过滤
                                    include = drSerial["locationInclude"].ToString();
                                    exclude = drSerial["locationExclude"].ToString();
                                    comment = drSerial["locationComment"].ToString();
                                    if (!IsIpChecked(ipLocation, include, exclude))
                                    {
                                        tran.Rollback();
                                        string strLog = "SerialFilter User:{0} IP:{1} Location:{2} Include:{3} Exclude:{4}";
                                        strLog = string.Format(strLog, request.username, ip, ipLocation, include, exclude);
                                        Common.LogIt(strLog);
                                        response.Trace.Detail   = comment;
                                        response.Trace.ErrorMsg = "无法出单!(e002)";//"号段区域限制,禁止出单!";
                                        return(response);
                                    }
                                }

                                //insert 语句本身不会阻塞,但是却引起其他线程的select阻塞
                                /*用MsSql2005的 output inserted.caseID 新语法代替原来的 SELECT CAST(scope_identity() AS int) 以返回自增列ID;*/
                                strSql = @"
insert into t_Case
(caseNo,caseOwner,caseSupplier,productID,customerFlightDate,customerFlightNo,customerID,customerName,customerPhone,
    parentPath,datetime,isPrinted,enabled,caseDuration, ip, IpLocation, reserved, customerGender, customerBirth, interface_Id)
output inserted.caseID
values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}', '{16}', '{17}', '{18}', '{19}');";

                                string parentPath = userLogin.ParentPath + request.username + "/";//用于判定单证的层级归属
                                string gender     = request.customerGender == Gender.Female ? "女" : "男";
                                //if (interface_Id == null)//无需判断,空值、空格使用单引号括起插入到int型字段的时候,数据库会自动转成0值
                                //    interface_Id = 0;

                                strSql = string.Format(strSql, caseNo, request.username, drSerial["caseSupplier"], request.InsuranceCode.Trim(),
                                                       request.flightDate, request.flightNo.Trim(), request.customerID.Trim(), request.customerName.Trim(), request.customerPhone.Trim(), parentPath, dtNow.ToString(),
                                                       0, 1, caseDuration, ip, ipLocation, request.PNR, gender, request.customerBirth, interface_Id);
                                cmm.CommandText = strSql;
                                int caseId = Convert.ToInt32(cmm.ExecuteScalar()); //返回自增列id
                                //cmm.ExecuteNonQuery();
                                strSql = string.Empty;                             //清空SQL语句,以防干扰下面的语句合并

                                if (isIssuingRequired)
                                {
                                    #region 投保数据对接
                                    string      IOC_Class_Alias      = drProduct["IOC_Class_Alias"].ToString();
                                    string      IOC_Class_Parameters = drProduct["IOC_Class_Parameters"].ToString();
                                    IssueEntity entity = new IssueEntity();
                                    entity.Name     = request.customerName;
                                    entity.ID       = request.customerID;
                                    entity.IDType   = request.customerIDType;
                                    entity.Gender   = request.customerGender;
                                    entity.Birthday = request.customerBirth;
                                    //如果是今天之后的乘机日期,则时间部分置为0
                                    entity.EffectiveDate = request.flightDate.Date > DateTime.Today ? request.flightDate.Date : request.flightDate;
                                    entity.ExpiryDate    = request.flightDate.AddDays(caseDuration - 1);
                                    entity.PhoneNumber   = request.customerPhone;
                                    entity.FlightNo      = request.flightNo;

                                    entity.IsLazyIssue          = isIssuingLazyEnabled;
                                    entity.DbCommand            = cmm;
                                    entity.IOC_Class_Alias      = IOC_Class_Alias;
                                    entity.IOC_Class_Parameters = IOC_Class_Parameters;
                                    entity.CaseNo      = caseNo;
                                    entity.CaseId      = caseId.ToString();
                                    entity.InterfaceId = interface_Id;
                                    entity.Title       = productName.ToString();

                                    TraceEntity validate = Case.Validate(entity);
                                    if (string.IsNullOrEmpty(validate.ErrorMsg))
                                    {
                                        if (entity.IsLazyIssue && !isExternal)
                                        {
                                            //Thread th = new Thread(Case.IssueAsync);
                                            //th.Start(entity);
                                            entity.ConnectionString = Common.ConnectionString;
                                            //entity.MaxRedelivery = 3;
                                            Common.AQ_Issuing.EnqueueObject(entity);
                                        }
                                        else
                                        {
                                            IssuingResultEntity result = Case.Issue(entity);
                                            if (string.IsNullOrEmpty(result.Trace.ErrorMsg))
                                            {
                                                response.SerialNo              = result.PolicyNo;//暂借用该SerialNo字段
                                                response.PolicyNo              = result.PolicyNo;
                                                response.Insurer               = result.Insurer;
                                                response.AmountInsured         = result.AmountInsured;
                                                response.ValidationWebsite     = result.Website;
                                                response.ValidationPhoneNumber = result.CustomerService;
                                                //如果中途转投了别的接口
                                                if (entity.InterfaceId != interface_Id)
                                                {
                                                    strSql = "UPDATE [t_Case] SET [interface_Id] = {0} WHERE caseNo = '{1}'; ";
                                                    strSql = string.Format(strSql, entity.InterfaceId, caseNo);
                                                }
                                            }
                                            else
                                            {
                                                tran.Rollback();

                                                StringBuilder sbLog = new StringBuilder();
                                                sbLog.AppendLine(Common.XmlSerialize <IssueEntity>(entity));
                                                sbLog.Append(result.Trace.ErrorMsg);
                                                Common.LogIt(sbLog.ToString());

                                                response.Trace = result.Trace;
                                                return(response);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        tran.Rollback();
                                        response.Trace = validate;
                                        return(response);
                                    }

                                    #endregion
                                    if (Common.Debug)
                                    {
                                        //Test.TestIt(entity);
                                    }
                                }

                                //修改出单量 主键更新 合并到下面的SQL语句一起执行
                                strSql += "update t_user set CountConsumed = CountConsumed + 1 where username = '******'; ";

                                #region 扣款
                                string[] parentArray = parentPath.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);//形如:/admin/tianzhi/bcaaa/bcaaa0150/
                                string   root        = parentArray[0];
                                string   distributor = "";
                                if (parentArray.Length > 1)
                                {
                                    distributor = parentArray[1];//第二级用户名既是一级分销商
                                    strSql     += "update t_User set balance = balance - price where username = '******'; update t_User set balance = balance - price where username = '******'";
                                    strSql      = string.Format(strSql, root, distributor);
                                }
                                else//管理员自己出单
                                {
                                    strSql += "update t_User set balance = balance - price where username = '******'";
                                    strSql  = string.Format(strSql, root);
                                }
                                cmm.CommandText = strSql;
                                cmm.ExecuteNonQuery();
                                #endregion

                                tran.Commit();//提交事务
                            }
                            catch
                            {
                                tran.Rollback();
                                Common.LogIt(strSql);
                                throw;
                            }
                        }
                    }
                    #endregion
                    return(response);
                }
                else
                {
                    response.Trace = userLogin.Trace;
                    return(response);
                }
            }
            catch (System.Exception ex)
            {
                StringBuilder sbLog = new StringBuilder();
                sbLog.AppendLine(Common.XmlSerialize <PurchaseRequestEntity>(request));
                sbLog.Append(ex.ToString());
                Common.LogIt(sbLog.ToString());

                response.Trace.ErrorMsg = "下单未成功,请稍后重试。";
                return(response);
            }
        }
Exemple #24
0
        /// <summary>
        /// 投保
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public IssuingResultEntity Issue(IssueEntity entity)
        {
            IssuingResultEntity result = new IssuingResultEntity();
            inMessage           msg    = new inMessage();

            try
            {
                BirthAndGender birthAndGender;
                birthAndGender        = Common.GetBirthAndSex(entity.ID);
                entity.Birthday       = birthAndGender.Birth;
                entity.Gender         = birthAndGender.Gender;
                msg.applicantCertType = "1";//身份证
            }
            catch
            {
                entity.Birthday       = DateTime.Parse("1901-1-1");
                entity.Gender         = Gender.Male;
                msg.applicantCertType = GetIdType(entity.IDType);//护照
            }

            msg.agencyID     = config[1];                                                           //用户名:"bjjingji";
            msg.outerOrderID = entity.CaseNo;
            msg.productCode  = entity.EffectiveDate.Date == DateTime.Today ? config[2] : config[3]; //可保当日的产品代码:"9971";次日:9982
            if (entity.EffectiveDate.Date == DateTime.Today)
            {
                //当日起保的产品不做了
                result.Trace.ErrorMsg = "下单失败!";
                result.Trace.Detail   = "该款产品不支持当日下单、当日起保。";
                return(result);
            }
            msg.policyBeginDate = entity.EffectiveDate;
            msg.unitCount       = 1;           //投保一份

            msg.applicantName   = entity.Name; //投保人
            msg.applicantMobile = entity.PhoneNumber;

            msg.applicantCercCode = entity.ID;
            msg.applicantSex      = entity.Gender == Gender.Male ? "1" : "0";
            msg.applicantBirth    = entity.Birthday;

            msg.insuredName     = msg.applicantName;
            msg.insuredMobile   = msg.applicantMobile;
            msg.insuredCertType = msg.applicantCertType;
            msg.insuredCercCode = msg.applicantCercCode;
            msg.insuredSex      = msg.applicantSex;
            msg.insuredBirth    = msg.applicantBirth;
            msg.insurantNexus   = "01";//投保人和被保人关系:本人

            try
            {
                rtnMessage ret = ws.standardApproval(msg);
                if (ret == null)
                {
                    throw new Exception("WebService返回为空!");
                }
                if (ret.returnCode != "S000")
                {
                    Common.LogIt("like8:" + ret.returnMessage);

                    if (ret.returnCode == "F011")//returnMessage.Contains("重复投保")
                    {
                        //result.PolicyNo = entity.CaseNo;
                        return(result);
                    }

                    result.Trace.ErrorMsg = ret.returnMessage;
                    result.Trace.Detail   = ret.returnCode;
                }
                else
                {
                    result.PolicyNo = ret.policyNumber;
                }
            }
            catch
            {
                Common.LogIt(ws.Url);
                throw;
            }

            return(result);
        }