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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
//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); }
/// <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); }
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); }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); }
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; } }
TraceEntity Issue(MessageEntity message) { IssuingResultEntity result = Case.IssueAsync(message); return(result.Trace); }
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; })); }
/// <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); }
/// <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); }
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; } }
/// <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; } }
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; } }
/// <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; } }
/// <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); } }
/// <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); }