Пример #1
0
        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);
                }
            }
        }
Пример #2
0
 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);
 }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        public static List <ParkSeller> QueryByVillageId(string villageId)
        {
            if (villageId.IsEmpty())
            {
                throw new ArgumentNullException("villageId");
            }

            IParkSeller factory = ParkSellerFactory.GetFactory();

            return(factory.QueryByVillageId(villageId));
        }
Пример #5
0
        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));
        }
Пример #6
0
        public static bool AddCarderate(ParkCarDerate mode)
        {
            if (mode == null)
            {
                throw new ArgumentNullException("mode");
            }

            IParkSeller factory = ParkSellerFactory.GetFactory();

            return(factory.AddCarderate(mode));
        }
Пример #7
0
        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));
        }
Пример #8
0
        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));
        }
Пример #9
0
        public static ParkSeller QueryBySellerNo(string sellerNo)
        {
            if (sellerNo.IsEmpty())
            {
                throw new ArgumentNullException("sellerNo");
            }

            IParkSeller factory = ParkSellerFactory.GetFactory();

            return(factory.QueryBySellerNo(sellerNo));
        }
Пример #10
0
        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));
        }
Пример #11
0
        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));
        }
Пример #12
0
        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));
        }
Пример #13
0
        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));
        }
Пример #14
0
        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);
        }
Пример #15
0
        /// <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);
            }
        }
Пример #16
0
        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));
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        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);
        }
Пример #20
0
        /// <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;
                }
            }
        }