public void MapSetsDataRecorderMetaDataToReturnedObjectOfMetaDataFactoryCall() { const int organizationRoleUserCreatorId = 3; var dateCreated = new DateTime(2003, 1, 1); var refundEntity = new RefundEntity { OrganizationRoleUserCreatorId = organizationRoleUserCreatorId, DateCreated = dateCreated }; var expectedDataRecorderMetaData = new DataRecorderMetaData { DataRecorderCreator = new OrganizationRoleUser(organizationRoleUserCreatorId), DateCreated = dateCreated }; Expect.Call(_dataRecorderMetaDataFactory.CreateDataRecorderMetaData (organizationRoleUserCreatorId, dateCreated)).Return(expectedDataRecorderMetaData); _mocks.ReplayAll(); Refund refund = _refundFactory.Map(refundEntity); _mocks.VerifyAll(); Assert.AreEqual(expectedDataRecorderMetaData, refund.DataRecorderMetaData, "Refund DataRecorderMetaData mapped incorrectly."); }
public RefundResult Refund(RefundEntity refundEntity) { RefundResult result = new RefundResult(); result.IsSync = true; NetPayInfo netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetValidBySOSysNo(refundEntity.SOSysNo); string partner = AppSettingManager.GetSetting("Invoice", "IPSPartner"); string IPSSecurityKey = AppSettingManager.GetSetting("Invoice", "IPSSecurityKey"); string sign = Sign(string.Format("{0}{1}{2}{3}{4}", partner, refundEntity.SOSysNo.ToString(), refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.RefundAmt.ToString("f2"), IPSSecurityKey)); RefundMsg msg = new IPSPay.ServiceSoapClient().Refund(partner, sign, refundEntity.OrderDate.ToString("yyyyMMdd"), refundEntity.SOSysNo.ToString(), (double)refundEntity.RefundAmt, ""); if (msg.ErrCode == "0000") { if (msg.Sign == Sign(string.Format("{0}{1}{2}{3}{4}{5}{6}", partner, msg.TradeBillNo, msg.TradeTime, msg.RealRefundAmount.ToString("f2"), msg.CanRefundAmount.ToString("f2"), msg.RefundBillNo, IPSSecurityKey))) { result.Result = true; } else { result.Result = false; result.Message = "验签失败"; } } else { result.Result = false; result.Message = GetMessage(msg.ErrCode); //result.Message += refundEntity.SOSysNo.ToString() + " " + refundEntity.OrderDate.ToString("YYYYMMDD"); } return(result); }
public void MapSetsIsNewToTrueWhenGivenIdIs0() { Refund newRefund = GetValidRefund(0); RefundEntity refundEntity = _refundFactory.Map(newRefund); Assert.IsTrue(refundEntity.IsNew, "RefundEntity IsNew set to false when ID of 0 given."); }
public void MapSetsIsNewToFalseWhenGivenIdIsNot0() { Refund oldRefund = GetValidRefund(12); RefundEntity refundEntity = _refundFactory.Map(oldRefund); Assert.IsFalse(refundEntity.IsNew, "RefundEntity IsNew set to true when ID that was not 0 given."); }
public void MapMapsRefundIdToEntityRefundId() { const int expectedRefundId = 43; RefundEntity refundEntity = _refundFactory.Map(GetValidRefund(expectedRefundId)); Assert.AreEqual(expectedRefundId, refundEntity.RefundId, "RefundEntity RefundID mapped incorrectly."); }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "TenPayRefundUrl"); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["input_charset"] = "UTF-8"; reqParams["sign_key_index"] = "1"; reqParams["service_version"] = "1.1"; reqParams["partner"] = AppSettingManager.GetSetting("Invoice", "TenPayParnter"); reqParams["out_trade_no"] = entity.SOSysNo.ToString(); reqParams["out_refund_no"] = entity.RefundSysNo.ToString(); reqParams["total_fee"] = (entity.SOAmt * 100).ToString(); reqParams["refund_fee"] = (entity.RefundAmt * 100).ToString(); reqParams["op_user_id"] = AppSettingManager.GetSetting("Invoice", "TenPayParnter"); reqParams["op_user_passwd"] = GetMD5(AppSettingManager.GetSetting("Invoice", "TenPayParnterPwd")); reqParams["sign_type"] = "MD5"; //reqParams["notify_url"] = GetMD5(AppSettingManager.GetSetting("Invoice", "TenPayRefundNotifyUrl")); string reqData = ""; string[] allKeys = reqParams.Keys.ToArray(); Array.Sort(allKeys); foreach (var item in allKeys) { reqData += string.Format("{0}={1}&", item, reqParams[item]); } string sign = GetMD5(reqData + string.Format("key={0}", AppSettingManager.GetSetting("Invoice", "TenPaySecretKey"))); reqData += string.Format("sign={0}", sign); var resultXml = HttpRequestReturnXml(string.Format("{0}?{1}", refundUrl, reqData), "GET", ""); var result = new RefundResult(); var code = resultXml.SelectSingleNode("root/retcode").InnerText;//请求结果 if (code == "0") { result.Result = true; var soSysNo = entity.SOSysNo.ToString(); //商户订单号 result.ExternalKey = resultXml.SelectSingleNode("root/transaction_id").InnerText; //退款流水,支付宝国际无 var refundAmout = entity.RefundAmt.ToString("F2"); //退款总金额 } else { result.Message = resultXml.SelectSingleNode("root/retmsg").InnerText;//拒绝原因 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", ServiceContext.Current.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ExternalDomainBroker.CreateOperationLog(resultNote, BizLogType.RMA_Refund_Refund, entity.RefundSysNo, entity.CompanyCode); return(result); }
public void MapMapsNotesToEntitynotes() { const string expectedNotes = "Some Notes"; Refund refund = GetValidRefund(); refund.Notes = expectedNotes; RefundEntity refundEntity = _refundFactory.Map(refund); Assert.AreEqual(expectedNotes, refundEntity.Notes, "RefundEntity Notes mapped incorrectly."); }
public void MapSetsDateCreatedToMetaDataDateCreated() { var expectedDateCreated = new DateTime(2001, 1, 1); Refund refund = GetValidRefund(); refund.DataRecorderMetaData.DateCreated = expectedDateCreated; RefundEntity refundEntity = _refundFactory.Map(refund); Assert.AreEqual(expectedDateCreated, refundEntity.DateCreated, "RefundEntity DateCreated mapped incorrectly."); }
public void MapMapsRefundReasonToEntityRefundReasonId() { const RefundReason expectedRefundReason = RefundReason.Other; Refund refund = GetValidRefund(); refund.RefundReason = expectedRefundReason; RefundEntity refundEntity = _refundFactory.Map(refund); Assert.AreEqual((short)expectedRefundReason, refundEntity.ReasonId, "RefundEntity ReasonID mapped incorrectly."); }
public void MapSetsOrganizationRoleUserCreatorIdToDataRecorderCreatorId() { const int expectedOrganizationRoleUserCreatorId = 32882; Refund refund = GetValidRefund(); refund.DataRecorderMetaData.DataRecorderCreator.Id = expectedOrganizationRoleUserCreatorId; RefundEntity refundEntity = _refundFactory.Map(refund); Assert.AreEqual(expectedOrganizationRoleUserCreatorId, refundEntity. OrganizationRoleUserCreatorId, "RevenueEntity OrganizationRoleUserCreatorId mapped incorrectly."); }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "RefundUrl"); string bgUrl = AppSettingManager.GetSetting("Invoice", "BGURL"); VendorCustomsInfo customsInfo = ObjectFactory <ISOBizInteract> .Instance.LoadVendorCustomsInfo(entity.SOSysNo); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["SRC_NCODE"] = customsInfo.CBTSRC_NCode; reqParams["BILL_NO"] = entity.SOSysNo.ToString(); reqParams["REFUND_AMOUNT"] = entity.RefundAmt.ToString("F2"); reqParams["CARGO_AMOUNT"] = entity.ProductAmount.GetValueOrDefault().ToString("F2"); reqParams["TRANSPORT_AMOUNT"] = entity.ShippingFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["TAX_AMOUNT"] = entity.TaxFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["RDO_TIME"] = string.Empty; reqParams["BGURL"] = bgUrl; StringBuilder reqXml = new StringBuilder(); reqXml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><EasipayB2CRequest><ReqData>"); foreach (KeyValuePair <string, string> kvp in reqParams) { reqXml.AppendFormat("<{0}><![CDATA[{1}]]></{0}>", kvp.Key, kvp.Value); } reqXml.Append("</ReqData></EasipayB2CRequest>"); var resultXml = HttpPostRequestReturnXml(refundUrl, BuildPostReqData(reqXml.ToString(), customsInfo)); var result = new RefundResult(); var code = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_CODE").InnerText; //请求结果 result.Message = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_INFO").InnerText; //拒绝原因 if (code == "000000") { result.Result = true; var soSysNo = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/BILL_NO").InnerText; //商户订单号 result.ExternalKey = string.Format("R" + resultXml.SelectSingleNode("/EasipayB2CResponse/ResData/REFTRX_SERNO").InnerText); //退款流水 var refundAmout = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/REFUND_AMOUNT").InnerText; //退款总金额 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", ServiceContext.Current.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ExternalDomainBroker.CreateOperationLog(resultNote, BizLogType.RMA_Refund_Refund, entity.RefundSysNo, entity.CompanyCode); return(result); }
/// <summary> /// 退款 /// 保证流水号唯一退款前缀添加R /// </summary> /// <param name="entity">退款实体信息</param> /// <returns>退款结果</returns> public RefundResult Refund(RefundEntity entity) { string refundUrl = AppSettingManager.GetSetting("Invoice", "RefundUrl"); string bgUrl = AppSettingManager.GetSetting("Invoice", "BGURL"); Dictionary <string, string> reqParams = new Dictionary <string, string>(); reqParams["SRC_NCODE"] = AppSettingManager.GetSetting("Invoice", "SRC_NCODE"); reqParams["BILL_NO"] = entity.SOSysNo.ToString(); reqParams["REFUND_AMOUNT"] = entity.RefundAmt.ToString("F2"); reqParams["CARGO_AMOUNT"] = entity.ProductAmount.GetValueOrDefault().ToString("F2"); reqParams["TRANSPORT_AMOUNT"] = entity.ShippingFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["TAX_AMOUNT"] = entity.TaxFeeAmount.GetValueOrDefault().ToString("F2"); reqParams["RDO_TIME"] = string.Empty; reqParams["BGURL"] = bgUrl; StringBuilder reqXml = new StringBuilder(); reqXml.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?><EasipayB2CRequest><ReqData>"); foreach (KeyValuePair <string, string> kvp in reqParams) { reqXml.AppendFormat("<{0}><![CDATA[{1}]]></{0}>", kvp.Key, kvp.Value); } reqXml.Append("</ReqData></EasipayB2CRequest>"); var resultXml = HttpPostRequestReturnXml(refundUrl, BuildPostReqData(reqXml.ToString())); var result = new RefundResult(); var code = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_CODE").InnerText; //请求结果 result.Message = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/RTN_INFO").InnerText; //拒绝原因 if (code == "000000") { result.Result = true; var soSysNo = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/BILL_NO").InnerText; //商户订单号 result.ExternalKey = string.Format("R" + resultXml.SelectSingleNode("/EasipayB2CResponse/ResData/REFTRX_SERNO").InnerText); //退款流水 var refundAmout = resultXml.SelectSingleNode("EasipayB2CResponse/ResData/REFUND_AMOUNT").InnerText; //退款总金额 } //记录日志 string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3},{4} PostUrl:{5} ", entity.UserSysNo, entity.SOSysNo, code, result.Message, resultXml.ToXmlString(), refundUrl); ECommerce.Utility.Logger.WriteLog(resultNote, "EasiPayUtils.Refund"); return(result); }
private static RefundResult ProcessNetWorkRefund(SOIncomeInfo entity, SOInfo soInfo) { var result = new RefundResult(); List <string> payTypeList = CodeNamePairManager.GetList("Inventory", "ChinaPayPayTypeList").Select(p => p.Code).ToList(); if (payTypeList.Contains(soInfo.Payment.PayTypeID.ToString())) { var biz = new IPSPayUtils(); var refundEntity = new RefundEntity { SOSysNo = soInfo.SOSysNo, RefundSysNo = entity.OrderSysNo.Value, RefundAmt = Math.Abs(entity.IncomeAmt.Value), CompanyCode = entity.CompanyCode, OrderDate = soInfo.OrderDate.Value }; refundEntity.ProductAmount = Math.Abs(entity.IncomeAmt.Value) - soInfo.Amount.ShipPrice - soInfo.TariffAmt; refundEntity.TaxFeeAmount = soInfo.TariffAmt; refundEntity.ShippingFeeAmount = soInfo.Amount.ShipPrice; if (soInfo.Payment.PayTypeID >= 200 && soInfo.Payment.PayTypeID < 300) { result = biz.Refund(refundEntity); } else { throw new BusinessException("未实现此支付方式"); } } else { result.Result = false; result.Message = ("支付方式" + soInfo.Payment.PayTypeName + "不支持网关直退。"); } return(result); }
public void InputDate(DataTable dt) { if (dt != null || dt.Rows.Count > 0) { List <RefundEntity> listRefund = new List <RefundEntity>(); foreach (DataRow item in dt.Rows) { var refundInfo = new RefundEntity(); refundInfo.IGrowID = Guid.NewGuid().ToString(); refundInfo.OnRefund00 = item[0].ToString(); refundInfo.OnRefund01 = item[1].ToString(); refundInfo.OnRefund02 = item[2].ToString(); refundInfo.OnRefund03 = DataConvert.DateTimeConvert(item[3].ToString()); refundInfo.OnRefund04 = item[4].ToString(); refundInfo.OnRefund05 = DataConvert.DateTimeConvert(item[5].ToString()); refundInfo.OnRefund06 = item[6].ToString(); refundInfo.OnRefund07 = Convert.ToDouble(item[7].ToString()); refundInfo.OnRefund08 = item[8].ToString(); refundInfo.OnRefund09 = Convert.ToDouble(item[9].ToString()); refundInfo.OnRefund10 = item[10].ToString(); refundInfo.OnRefund11 = item[11].ToString(); refundInfo.OnRefund12 = DataConvert.DateTimeConvert(item[12].ToString()); refundInfo.OnRefund13 = DataConvert.DateTimeConvert(item[13].ToString()); refundInfo.OnRefund14 = item[14].ToString(); refundInfo.OnRefund15 = item[15].ToString(); refundInfo.OnRefund16 = item[16].ToString(); refundInfo.OnRefund17 = item[17].ToString(); refundInfo.OnRefund18 = item[18].ToString(); refundInfo.OnRefund19 = item[19].ToString(); refundInfo.OnRefund20 = item[20].ToString(); refundInfo.OnRefund21 = item[21].ToString(); refundInfo.OnRefund22 = item[22].ToString(); refundInfo.OnRefund23 = item[23].ToString(); refundInfo.OnRefund24 = item[24].ToString(); refundInfo.OnRefund25 = item[25].ToString(); refundInfo.OnRefund26 = item[26].ToString(); refundInfo.OnRefund27 = item[27].ToString(); refundInfo.OnRefund28 = item[28].ToString(); refundInfo.OnRefund29 = item[29].ToString(); refundInfo.OnRefund30 = item[30].ToString(); refundInfo.OnRefund31 = item[31].ToString(); refundInfo.OnRefund32 = item[32].ToString(); refundInfo.OnRefund33 = item[33].ToString(); refundInfo.OnRefund34 = item[34].ToString(); refundInfo.OnRefund35 = item[35].ToString(); refundInfo.OnRefund36 = item[36].ToString(); refundInfo.OnRefund37 = item[37].ToString(); refundInfo.OnRefund38 = item[38].ToString(); //refundInfo.Description = item[].ToString(); refundInfo.CreateDate = DateTime.Now; refundInfo.CreatorUserId = ""; refundInfo.ModifyDate = null; refundInfo.ModifyUserId = ""; refundInfo.DeleteMark = true; refundInfo.DeleteTime = null; refundInfo.DeleteUserId = ""; listRefund.Add(refundInfo); } service.Insert(listRefund); } }
public RefundResult Refund(RefundEntity entity) { BizLogType RefoundLogType = BizLogType.RMA_Refund_Refund; if (entity.OrderType.GetValueOrDefault() == SOIncomeOrderType.AO) { RefoundLogType = BizLogType.AO_Refund_Refund; } BizLogType RefountType = BizLogType.AO_Refund_Refund; ExternalDomainBroker.CreateOperationLog("支付宝退款开始构建请求参数", RefoundLogType, entity.RefundSysNo, entity.CompanyCode); RefundResult responseResult = null; #region 无密退款 ////////////////////////////////////////////请求参数//////////////////////////////////////////// //服务器异步通知页面路径 string notify_url = string.Empty; //需http://格式的完整路径,不允许加?id=123这类自定义参数 //退款批次号 string batch_no = DateTime.Now.ToString("yyyyMMddHHmmssfff"); //必填,每进行一次即时到账批量退款,都需要提供一个批次号,必须保证唯一性 //退款请求时间 string refund_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //必填,格式为:yyyy-MM-dd hh:mm:ss //退款总笔数 string batch_num = "1"; //必填,即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量999个) //单笔数据集 string detail_data = ""; NetPayInfo netpayInfo = ObjectFactory <NetPayProcessor> .Instance.GetValidBySOSysNo(entity.SOSysNo); if (netpayInfo != null && !string.IsNullOrWhiteSpace(netpayInfo.ExternalKey)) { //退款详细数据 detail_data += BuildDetailDataString(netpayInfo.ExternalKey.TrimEnd(), entity.RefundAmt.ToString("f2"), "支付宝无线支付退款"); } //必填,格式详见“4.3 单笔数据集参数说明” //////////////////////////////////////////////////////////////////////////////////////////////// #endregion #region 请求参数 : //////////////////////////////////////////////请求参数//////////////////////////////////////////// ////服务器异步通知页面路径 //string notify_url = string.Empty; ////需http://格式的完整路径,不允许加?id=123这类自定义参数 ////卖家支付宝帐户 //string seller_email = "*****@*****.**"; ////卖家UserID: //string seller_user_id = Config.Partner; ////退款当天日期 //string refund_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ////必填,格式:年[4位]-月[2位]-日[2位] 小时[2位 24小时制]:分[2位]:秒[2位],如:2007-10-01 13:13:13 ////批次号 //string batch_no = DateTime.Now.ToString("yyyyMMddHHmmssfff"); ////必填,格式:当天日期[8位]+序列号[3至24位],如:201008010000001 ////退款笔数 //string batch_num = entity.Count.ToString() ; ////必填,参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的数量999个) //string detail_data = ""; //foreach (var item in entity) //{ // NetPayInfo netpayInfo = ObjectFactory<NetPayProcessor>.Instance.GetValidBySOSysNo(item.SOSysNo); // if (netpayInfo!=null&&!string.IsNullOrWhiteSpace(netpayInfo.ExternalKey)) // { // //退款详细数据 // detail_data += BuildDetailDataString(netpayInfo.ExternalKey.TrimEnd(), item.RefundAmt.ToString("f2"), "支付宝无线支付退款"); // } //} ////必填,具体格式请参见接口技术文档 //if (string.IsNullOrWhiteSpace(detail_data)) //{ // return responseResult = new RefundResult() // { // Result = false, // Message = "报错:无有效退款订单" // }; //} //else //{ // detail_data=detail_data.Remove(detail_data.Length - 1); //} ////////////////////////////////////////////////////////////////////////////////////////////////// #endregion //把请求参数打包成数组 SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>(); sParaTemp.Add("partner", Config.Partner); sParaTemp.Add("_input_charset", Config.Input_charset.ToLower()); sParaTemp.Add("service", "refund_fastpay_by_platform_nopwd"); sParaTemp.Add("notify_url", notify_url); sParaTemp.Add("batch_no", batch_no); sParaTemp.Add("refund_date", refund_date); sParaTemp.Add("batch_num", batch_num); sParaTemp.Add("detail_data", detail_data); ExternalDomainBroker.CreateOperationLog("开支请求支付宝退款。", RefoundLogType, entity.RefundSysNo, entity.CompanyCode); //建立请求 string sHtmlText = Submit.BuildRequest(sParaTemp); ExternalDomainBroker.CreateOperationLog(sHtmlText, RefoundLogType, entity.RefundSysNo, entity.CompanyCode); //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.LoadXml(sHtmlText); string strXmlResponse = xmlDoc.SelectSingleNode("/alipay").InnerText; string result = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText; if (result == "F") { string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3} PostUrl:{4} 退款金额:{5}", ServiceContext.Current.UserSysNo, entity.SOSysNo, "False", strXmlResponse, Submit.GATEWAY_NEW, entity.RefundAmt.ToString()); ExternalDomainBroker.CreateOperationLog(resultNote, RefoundLogType, entity.RefundSysNo, entity.CompanyCode); Exception refundException = new Exception(strXmlResponse); return(responseResult = new RefundResult() { Result = false, Message = strXmlResponse }); } else { string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3} PostUrl:{4} 退款金额:{5}", ServiceContext.Current.UserSysNo, entity.SOSysNo, "True", strXmlResponse, Submit.GATEWAY_NEW, entity.RefundAmt.ToString()); ExternalDomainBroker.CreateOperationLog(resultNote, RefoundLogType, entity.RefundSysNo, entity.CompanyCode); return(responseResult = new RefundResult() { Result = true, ExternalKey = strXmlResponse }); } } catch (Exception exp) { string resultNote = string.Format("用户[{0}]对订单号:{1} 调用了退款接口.调用结果;{2} 调用返回信息:{3} PostUrl:{4} 退款金额:{5}", ServiceContext.Current.UserSysNo, entity.SOSysNo, "False", exp.Message, Submit.GATEWAY_NEW, entity.RefundAmt.ToString()); ExternalDomainBroker.CreateOperationLog(resultNote, RefoundLogType, entity.RefundSysNo, entity.CompanyCode); return(responseResult = new RefundResult() { Result = false, Message = exp.Message }); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— }
/// <summary> /// 退款 /// </summary> /// <param name="refund"></param> /// <returns></returns> public OptResult Refound(RefundEntity refund) { OptResult rst = null; var operation = CardOperation.Refund; var optDesc = operation.GetDescription(); if (refund == null) { rst = OptResult.Build(ResultCode.ParamError, optDesc + "——参数不能为空!"); return(rst); } string msg = string.Empty; if (!refund.Check(out msg)) { rst = OptResult.Build(ResultCode.ParamError, string.Format("{0}——{1}!", optDesc, msg)); return(rst); } //1、账户是否存在(获取账户信息) var card = GetByIdcard(refund.idcard); if (card == null) { rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的账户不存在!", optDesc, refund.idcard)); return(rst); } //2、账户状态 if (card.State != CardState.Normal) { rst = OptResult.Build(ResultCode.Fail, string.Format("{0}——一卡通状态异常[{1}]!", optDesc, card.State.GetDescription())); return(rst); } //3、指定订单是否已付款并且未退款(获取付款流水信息) PredicateGroup pg = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List <IPredicate>() }; pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_idcard, Operator.Eq, card.card_idcard)); pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_order, Operator.Eq, refund.order)); var payTypeWhere = Predicates.Field <CardBill>(b => b.bill_type, Operator.Eq, CardOperation.Pay.ToString()); pg.Predicates.Add(payTypeWhere); var payBill = _cardBillRep.GetList(pg).FirstOrDefault(); if (payBill == null) { rst = OptResult.Build(ResultCode.DataNotFound, string.Format("{0}——指定身份证号{1}的订单{2}尚未支付!", optDesc, card.card_idcard, refund.order)); return(rst); } pg.Predicates.Remove(payTypeWhere); pg.Predicates.Add(Predicates.Field <CardBill>(b => b.bill_type, Operator.Eq, "退款")); var count = _cardBillRep.Count(pg); if (count > 0) { rst = OptResult.Build(ResultCode.OptRepeat, string.Format("{0}——指定身份证号{1}的订单{2}已退款!", optDesc, card.card_idcard, refund.order)); return(rst); } //4、数据库操作 /* * 退款流程 * 1)更新一卡通基本信息 * gov_new=gov_now+bill.gov_change,my_new=my_now+bill.my_change * 2)新增操作记录,type:退款 * 3)新增流水记录,type:退款 */ decimal govchanged = -payBill.bill_changegov; //求反 decimal mychanged = -payBill.bill_changemy; //求反 decimal govnew = card.card_govmoney + govchanged; decimal mynew = card.card_mymoney + mychanged; var rec_id = GuidExtension.GetOne(); var optTime = DateTime.Now; var cardRecord = new CardRecord { rec_id = rec_id, rec_number = card.card_number, rec_idcard = card.card_idcard, rec_type = operation.ToString(), rec_time = optTime, rec_username = card.card_username, rec_remark = string.Format("退款金额:{0}", govchanged + mychanged), rec_operator = refund.opt }; var cardBill = new CardBill { bill_id = GuidExtension.GetOne(), bill_number = card.card_number, bill_idcard = card.card_idcard, bill_agoall = card.card_govmoney + card.card_mymoney, bill_agogov = card.card_govmoney, bill_agomy = card.card_mymoney, bill_changegov = govchanged, bill_changemy = mychanged, bill_nowall = govnew + mynew, bill_nowgov = govnew, bill_nowmy = mynew, bill_type = operation.ToString(), bill_time = optTime, bill_order = refund.order, bill_src = refund.src, bill_record = rec_id, bill_remark = refund.remark }; // var tran = base.Begin(); try { // count = _cardInfoRep.UpdateBySqlName(SqlName_Update, new { card_govmoney = govnew, card_mymoney = mynew, card_modifier = refund.opt, card_modifytime = optTime, card_idcard = refund.idcard }, new string[] { "card_govmoney", "card_mymoney", "card_modifier", "card_modifytime" }, tran); if (count < 1) { tran.Rollback(); rst = OptResult.Build(ResultCode.Fail, optDesc + "——未知错误!"); return(rst); } // _cardRecordRep.Insert(cardRecord); // _cardBillRep.Insert(cardBill); tran.Commit(); rst = OptResult.Build(ResultCode.Success, string.Format("{0}——身份证号{1},订单号{2}", optDesc, refund.idcard, refund.order)); } catch (Exception ex) { LogHelper.LogError(optDesc, ex); rst = OptResult.Build(ResultCode.DbError, optDesc); } return(rst); }