private static bool SyncSellerRecharge(OnlineOrder order, OrderPayWay payWay) { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(order.InOutID); if (model == null) { throw new MyException("商家不存在"); } dbOperator.BeginTransaction(); try { ParkOrder pkOrder = ParkOrderServices.MarkSellerChargeOrder(model, order.Amount, model.SellerID, OrderSource.WeiXin, payWay, dbOperator); if (order == null) { throw new MyException("创建充值订单失败"); } bool result = factory.SellerRecharge(model.SellerID, order.Amount, dbOperator); if (!result) { throw new MyException("商家充值失败"); } dbOperator.CommitTransaction(); return(result); } catch (Exception ex) { dbOperator.RollbackTransaction(); ExceptionsServices.AddExceptions(ex, "商家微信充值通知失败,订单编号:" + order.OrderID); return(false); } } }
public static IParkSeller GetFactory() { if (factory == null) { Type type = Type.GetType("Common." + SystemDefaultConfig.DatabaseProvider + "Repository.ParkSellerDAL,Common." + SystemDefaultConfig.DatabaseProvider + "Repository", true); factory = (IParkSeller)Activator.CreateInstance(type); } return(factory); }
public static bool SellerCharge(string sellerId, decimal balance, string operatorId) { if (sellerId.IsEmpty()) { throw new ArgumentNullException("sellerId"); } if (operatorId.IsEmpty()) { throw new ArgumentNullException("operatorId"); } if (balance <= 0) { throw new ArgumentNullException("balance"); } IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(sellerId); if (model == null) { throw new MyException("商家不存在"); } using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); ParkOrder order = ParkOrderServices.MarkSellerChargeOrder(model, balance, operatorId, OrderSource.ManageOffice, OrderPayWay.Cash, dbOperator); if (order == null) { throw new MyException("创建充值订单失败"); } bool result = factory.SellerRecharge(sellerId, balance, dbOperator); if (!result) { throw new MyException("取消暂停计划失败"); } dbOperator.CommitTransaction(); ParkSeller newSeller = factory.QueryBySellerId(sellerId); if (newSeller != null) { OperateLogServices.AddOperateLog(OperateType.Update, string.Format("sellerId:{0},充值:{1},余额为:{2}", sellerId, balance, newSeller.Balance)); } return(result); } catch (Exception ex) { dbOperator.RollbackTransaction(); throw ex; } } }
public static List <ParkSeller> QueryByVillageId(string villageId) { if (villageId.IsEmpty()) { throw new ArgumentNullException("villageId"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.QueryByVillageId(villageId)); }
public static bool ModifyCarderate(ParkCarDerate mode, out string errorMsg) { if (mode == null) { throw new ArgumentNullException("mode"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.ModifyCarderate(mode, out errorMsg)); }
public static bool AddCarderate(ParkCarDerate mode) { if (mode == null) { throw new ArgumentNullException("mode"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.AddCarderate(mode)); }
public static ParkDerate GetDerate(string derateid, out string errorMsg) { if (derateid.IsEmpty()) { throw new ArgumentNullException("derateid"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.GetDerate(derateid, out errorMsg)); }
public static ParkSeller GetSeller(string sellerid, out string errorMsg) { if (sellerid.IsEmpty()) { throw new ArgumentNullException("sellerid"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.GetSeller(sellerid, out errorMsg)); }
public static ParkSeller QueryBySellerNo(string sellerNo) { if (sellerNo.IsEmpty()) { throw new ArgumentNullException("sellerNo"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.QueryBySellerNo(sellerNo)); }
public static List <ParkCarDerate> GetCanUseCarderatesByPlatenumber(string platenumber, out string errorMsg) { if (platenumber.IsEmpty()) { throw new ArgumentNullException("platenumber"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.GetCanUseCarderatesByPlatenumber(platenumber, out errorMsg)); }
public static List <ParkSeller> QueryByVillageIds(List <string> villageIds) { if (villageIds == null || villageIds.Count == 0) { throw new ArgumentNullException("villageIds"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.QueryByVillageIds(villageIds)); }
public static List <ParkSeller> QueryPage(string villageId, string sellerName, int pagesize, int pageindex, out int total) { if (villageId.IsEmpty()) { throw new ArgumentNullException("villageId"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.QueryPage(villageId, sellerName, pagesize, pageindex, out total)); }
public static List <ParkCarDerate> GetCanUseCarderatesByIORecordid(string Iorecordid, out string errorMsg) { if (Iorecordid.IsEmpty()) { throw new ArgumentNullException("Iorecordid"); } IParkSeller factory = ParkSellerFactory.GetFactory(); return(factory.GetCanUseCarderatesByIORecordid(Iorecordid, out errorMsg)); }
public static bool Delete(string sellerId) { if (sellerId.IsEmpty()) { throw new ArgumentNullException("sellerId"); } IParkSeller factory = ParkSellerFactory.GetFactory(); bool result = factory.Delete(sellerId); if (result) { OperateLogServices.AddOperateLog(OperateType.Update, string.Format("sellerId:{0}", sellerId)); } return(result); }
/// <summary> /// 发送同步支付模板信息 /// </summary> /// <param name="order"></param> /// <returns></returns> private static bool SendSyncResultMessage(OnlineOrder order) { try { if (order.PaymentChannel != PaymentChannel.WeiXinPay) { return(true); } switch (order.OrderType) { case OnlineOrderType.MonthCardRecharge: { return(TemplateMessageServices.SendMonthCardRechargeSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.ExitTime, order.PayAccount)); } case OnlineOrderType.ParkFee: { return(TemplateMessageServices.SendParkCarPaymentSuccess(order.CompanyID, order.PlateNo, order.PKName, order.Amount, order.EntranceTime, order.OrderTime, order.RealPayTime, order.ExitTime, order.PayAccount)); } case OnlineOrderType.PkBitBooking: { return(true); } case OnlineOrderType.SellerRecharge: { IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller model = factory.QueryBySellerId(order.InOutID); if (model == null) { throw new MyException("商家不存在"); } return(TemplateMessageServices.SendSellerRechargeSuccess(order.CompanyID, order.Amount, model.Balance, order.RealPayTime, order.PayAccount)); } default: throw new MyException("同步支付结果时找不到订单类型"); } } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("OnlineOrderServices", "发送模板信息失败:订单编号:" + order.OrderID + "", ex, LogFrom.WeiXin); return(false); } }
public static bool ModifySeller(ParkSeller mode, out string errorMsg) { if (mode == null) { throw new ArgumentNullException("mode"); } IParkSeller factory = ParkSellerFactory.GetFactory(); ParkSeller dbModel = factory.QueryBySellerNo(mode.SellerNo); if (dbModel != null && dbModel.SellerID != mode.SellerID) { throw new MyException("商家编号重复"); } return(factory.ModifySeller(mode, out errorMsg)); }
public static bool UpdatePassword(string sellerId, string password) { if (sellerId.IsEmpty()) { throw new ArgumentNullException("sellerId"); } if (password.IsEmpty()) { throw new ArgumentNullException("password"); } IParkSeller factory = ParkSellerFactory.GetFactory(); bool result = factory.UpdatePassword(sellerId, password); if (result) { OperateLogServices.AddOperateLog(OperateType.Update, string.Format("sellerId:{0},修改新密码为:{1}", sellerId, password)); } return(result); }
public static bool Add(ParkSeller model) { if (model == null) { throw new ArgumentNullException("model"); } IParkSeller factory = ParkSellerFactory.GetFactory(); model.SellerID = GuidGenerator.GetGuid().ToString(); ParkSeller dbModel = factory.QueryBySellerNo(model.SellerNo); if (dbModel != null) { throw new MyException("商家编号重复"); } bool result = factory.Add(model); if (result) { OperateLogServices.AddOperateLog <ParkSeller>(model, OperateType.Add); } return(result); }
public static bool Payment(string ioRecordId, string parkingId, ResultAgs billResult, string operatorId) { if (billResult == null) { throw new MyException("获取缴费信息失败"); } if (billResult.FeeRule == null) { throw new MyException("获取收费规则失败"); } if (billResult.Rate == null) { throw new MyException("获取缴费金额失败"); } using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); List <string> carderateIds = new List <string>(); Dictionary <string, decimal> sellers = new Dictionary <string, decimal>(); if (billResult.Carderates != null && billResult.Carderates.Count > 0) { carderateIds = billResult.Carderates.Select(p => p.CarDerateID).ToList(); foreach (var item in billResult.Carderates) { if (sellers.ContainsKey(item.Derate.SellerID)) { sellers[item.Derate.SellerID] = sellers[item.Derate.SellerID] + item.FreeMoney; continue; } sellers.Add(item.Derate.SellerID, item.FreeMoney); } } RateInfo rate = billResult.Rate; ParkOrder order = ParkOrderServices.AddCentralFeeOrder(parkingId, ioRecordId, rate.Amount, rate.UnPayAmount, rate.DiscountAmount, carderateIds, billResult.FeeRule.FeeRuleID, rate.CashTime, rate.CashMoney, operatorId, dbOperator); if (order == null) { throw new MyException("创建缴费订单失败"); } if (carderateIds.Count > 0) { IParkSeller factory = ParkSellerFactory.GetFactory(); factory.UpdateParkCarDerateStatus(carderateIds, 2, dbOperator); foreach (var item in sellers) { bool result = factory.SellerDebit(item.Key, item.Value, dbOperator); if (!result) { throw new MyException("商家扣款失败"); } } } dbOperator.CommitTransaction(); OperateLogServices.AddOperateLog(OperateType.Other, string.Format("中央收费,ioRecordId:{0},parkingId:{1},operatorId:{2},收费金额:{3},优惠金额:{4}", ioRecordId, parkingId, operatorId, rate.UnPayAmount, rate.DiscountAmount)); } catch { dbOperator.RollbackTransaction(); throw; } } return(true); }
/// <summary> /// 下发有免费券 /// </summary> /// <param name="carDerateIds"></param> /// <param name="qrCodeZipFilePath">压缩二维码的文件路径</param> /// <param name="qrCodeId"></param> /// <returns></returns> public static bool GrantCarDerate(List <string> carDerateIds, string qrCodeZipFilePath, string qrCodeId) { if (carDerateIds == null || carDerateIds.Count == 0) { throw new ArgumentNullException("carDerateIds"); } if (string.IsNullOrWhiteSpace(qrCodeZipFilePath)) { throw new ArgumentNullException("qrCodeFilePath"); } string absolutePath = System.Web.HttpContext.Current.Server.MapPath("~/"); string s = string.Format("{0}{1}", absolutePath, qrCodeZipFilePath); if (!File.Exists(s)) { throw new MyException("压缩二维码的文件不存在"); } IParkDerateQRcode factory = ParkDerateQRcodeFactory.GetFactory(); ParkDerateQRcode qrCode = factory.QueryByRecordId(qrCodeId); if (qrCode == null) { throw new MyException("优免券规则不存在"); } if (qrCode.EndTime < DateTime.Now) { throw new MyException("该优免券规则已过期"); } ParkDerate derate = ParkDerateServices.Query(qrCode.DerateID); if (derate == null) { throw new MyException("获取优免规则失败"); } decimal totalAmount = 0; if (derate.DerateType == DerateType.SpecialTimePeriodPayment) { string errorMsg = string.Empty; ParkSeller seller = ParkSellerServices.GetSeller(derate.SellerID, out errorMsg); if (derate == null) { throw new MyException("获取优免规则失败"); } totalAmount = qrCode.DerateValue * carDerateIds.Count; if ((seller.Creditline + seller.Balance) < totalAmount) { throw new MyException("商家余额不足"); } } List <ParkCarDerate> carDerates = new List <ParkCarDerate>(); foreach (var item in carDerateIds) { ParkCarDerate model = new ParkCarDerate(); model.CarDerateID = item; model.CarDerateNo = IdGenerator.Instance.GetId().ToString(); model.DerateID = qrCode.DerateID; model.PlateNumber = ""; model.AreaID = ""; model.PKID = qrCode.PKID; if (derate.DerateType != DerateType.ReliefTime && derate.DerateType != DerateType.VotePayment && derate.DerateType != DerateType.DayFree) { model.FreeMoney = qrCode.DerateValue; } else if (derate.DerateType == DerateType.DayFree) { model.FreeMoney = qrCode.DerateValue * derate.DerateMoney; } else { model.FreeTime = (int)qrCode.DerateValue; } model.Status = CarDerateStatus.Used; model.CreateTime = DateTime.Now; model.ExpiryTime = qrCode.EndTime; model.DerateQRCodeID = qrCode.RecordID; carDerates.Add(model); } IParkCarDerate factoryCarDerate = ParkCarDerateFactory.GetFactory(); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); //添加券 foreach (var item in carDerates) { bool result = factoryCarDerate.Add(item, dbOperator); if (!result) { throw new MyException("发券失败"); } } //修改发放总张数据,修改最后压缩包路径 int totalNumbers = qrCode.CanUseTimes + carDerateIds.Count; bool updateResult = factory.Update(qrCodeId, qrCodeZipFilePath, totalNumbers, dbOperator); if (!updateResult) { throw new MyException("修改券总数失败"); } //商家扣款 if (totalAmount > 0) { IParkSeller factorySeller = ParkSellerFactory.GetFactory(); updateResult = factorySeller.SellerDebit(derate.SellerID, totalAmount, dbOperator); if (!updateResult) { throw new MyException("商家扣款失败"); } } dbOperator.CommitTransaction(); return(true); } catch { dbOperator.RollbackTransaction(); throw; } } }