示例#1
0
        public static ParkOrder AddMonthlyRentOrderCS(string parkingId, string carTypeId, string grantId, DateTime originalStartDate, DateTime originalEndDate, DateTime newStartDate, DateTime newEndDate, int renewalMonth, int pkLotQuantit, string operatorId, decimal Amount, DbOperator dbOperator)
        {
            ParkOrder  order   = GenerateMonthCardOrderModelCS(parkingId, carTypeId, grantId, originalEndDate, originalEndDate, newStartDate, newEndDate, renewalMonth, pkLotQuantit, Amount, operatorId);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#2
0
        private static ParkOrder GenerateMonthCardOrderModelCS(string parkingId, string carTypeId, string grantId, DateTime originalStartDate, DateTime originalEndDate, DateTime newStartDate, DateTime newEndDate, int renewalMonth, int pkLotQuantit, decimal Amount, string operatorId)
        {
            ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(carTypeId);

            if (carType == null)
            {
                throw new MyException("获取卡类失败");
            }

            ParkOrder order = new ParkOrder();

            order.OrderNo       = IdGenerator.Instance.GetId().ToString();
            order.Status        = 1;
            order.Amount        = Amount;
            order.PayAmount     = order.Amount;
            order.Remark        = "月卡续费";
            order.OrderTime     = DateTime.Now;
            order.OrderType     = OrderType.MonthCardPayment;
            order.PKID          = parkingId;
            order.TagID         = grantId;
            order.PayWay        = OrderPayWay.Cash;
            order.OrderSource   = OrderSource.ManageOffice;
            order.UserID        = operatorId;
            order.OldUserBegin  = originalStartDate;
            order.OldUserulDate = originalEndDate;
            order.NewUserBegin  = newStartDate;
            order.NewUsefulDate = newEndDate;
            order.OldMoney      = 0;
            order.NewMoney      = 0;
            order.PayTime       = DateTime.Now;
            return(order);
        }
示例#3
0
 public ParkOrder Add(ParkOrder model)
 {
     using (DbOperator dbOperator = ConnectionManager.CreateConnection())
     {
         return(Add(model, dbOperator));
     }
 }
示例#4
0
        /// <summary>
        /// 构建中央缴费订单
        /// </summary>
        /// <param name="parkingId">车场编号</param>
        /// <param name="ioRecordId">记录编号</param>
        /// <param name="amount">订单金额</param>
        /// <param name="payAmount">已付金额</param>
        /// <param name="discountAmount">优惠金额</param>
        /// <param name="carderateIds">优免券编号</param>
        /// <param name="feeRuleId">收费规则编号</param>
        /// <param name="cashTime">结余时间</param>
        /// <param name="cashMoney">结余金额</param>
        /// <param name="operatorId">操作员编号</param>
        /// <returns></returns>
        private static ParkOrder GenerateCentralFeeOrderModel(string parkingId, string ioRecordId, decimal amount, decimal payAmount, decimal discountAmount,
                                                              List <string> carderateIds, string feeRuleId, DateTime cashTime, decimal cashMoney, string operatorId)
        {
            ParkOrder order = new ParkOrder();

            order.OrderNo        = IdGenerator.Instance.GetId().ToString();
            order.TagID          = ioRecordId;
            order.OrderType      = OrderType.TempCardPayment;
            order.PayWay         = OrderPayWay.Cash;
            order.Amount         = amount;
            order.UnPayAmount    = 0;
            order.PayAmount      = payAmount;
            order.DiscountAmount = discountAmount;
            if (carderateIds != null && carderateIds.Count > 0)
            {
                order.CarderateID = string.Join(",", carderateIds);
            }

            order.Status      = 1;
            order.OrderSource = OrderSource.CenterCharge;
            DateTime now = DateTime.Now;

            order.OrderTime = now;
            order.PayTime   = now;
            order.PKID      = parkingId;
            order.UserID    = operatorId;
            order.Remark    = "中央收费";
            order.CashMoney = cashMoney;
            order.CashTime  = cashTime;
            order.FeeRuleID = feeRuleId;
            return(order);
        }
示例#5
0
        /// <summary>
        /// 构建VIP卡续期订单
        /// </summary>
        /// <param name="grantId"></param>
        /// <param name="originalLimitEnd"></param>
        /// <param name="newLimitEnd"></param>
        /// <param name="renewalMonth"></param>
        /// <param name="operatorId"></param>
        /// <returns></returns>
        private static ParkOrder GenerateVipCardOrderModel(string parkingId, string grantId, DateTime originalStartDate, DateTime originalEndDate, DateTime newStartDate, DateTime newEndDate, int renewalMonth, string operatorId)
        {
            ParkOrder order = new ParkOrder();

            order.OrderNo       = IdGenerator.Instance.GetId().ToString();
            order.Status        = 1;
            order.Amount        = 0;
            order.PayAmount     = 0;
            order.PKID          = parkingId;
            order.Remark        = "VIP卡续期";
            order.OrderTime     = DateTime.Now;
            order.OrderType     = OrderType.VIPCardRenewal;
            order.TagID         = grantId;
            order.PayWay        = OrderPayWay.Cash;
            order.OrderSource   = OrderSource.ManageOffice;
            order.UserID        = operatorId;
            order.OldUserBegin  = originalStartDate;
            order.OldUserulDate = originalEndDate;
            order.NewUserBegin  = newStartDate;
            order.NewUsefulDate = newEndDate;
            order.OldMoney      = 0;
            order.NewMoney      = 0;
            order.PayTime       = DateTime.Now;
            return(order);
        }
示例#6
0
        /// <summary>
        /// 生存商家充值订单
        /// </summary>
        /// <param name="seller">商家信息</param>
        /// <param name="chargeBalance">充值金额</param>
        /// <param name="operatorId">操作者编号</param>
        /// <param name="dbOperator"></param>
        /// <returns></returns>
        public static ParkOrder MarkSellerChargeOrder(ParkSeller seller, decimal chargeBalance, string operatorId, OrderSource orderSource, OrderPayWay payWay, DbOperator dbOperator)
        {
            ParkOrder  order   = GetSellerChargeOrder(seller, chargeBalance, operatorId, orderSource, payWay);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#7
0
        /// <summary>
        /// 生存VIP卡续期订单
        /// </summary>
        /// <param name="grantId"></param>
        /// <param name="originalStartDate"></param>
        /// <param name="originalEndDate"></param>
        /// <param name="newStartDate"></param>
        /// <param name="newEndDate"></param>
        /// <param name="renewalMonth"></param>
        /// <param name="operatorId"></param>
        /// <param name="dbOperator"></param>
        /// <returns></returns>
        public static ParkOrder AddVipCardOrder(string parkingId, string grantId, DateTime originalStartDate, DateTime originalEndDate, DateTime newStartDate, DateTime newEndDate, int renewalMonth, string operatorId, DbOperator dbOperator)
        {
            ParkOrder  order   = GenerateVipCardOrderModel(parkingId, grantId, originalStartDate, originalEndDate, newEndDate, newEndDate, renewalMonth, operatorId);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#8
0
        /// <summary>
        /// 生存储值卡续费订单
        /// </summary>
        /// <param name="rechargeMoney"></param>
        /// <param name="card"></param>
        /// <param name="operatorId"></param>
        /// <param name="dbOperator"></param>
        /// <returns></returns>
        public static ParkOrder AddStoredValueCarOrder(string parkingId, decimal rechargeMoney, BaseCard card, string operatorId, DbOperator dbOperator)
        {
            ParkOrder  order   = GenerateStoredValueCarOrderModel(parkingId, rechargeMoney, card, operatorId);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#9
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);
                }
            }
        }
示例#10
0
        /// <summary>
        /// 生存返还卡片押金订单
        /// </summary>
        /// <param name="card"></param>
        /// <param name="operatorId"></param>
        /// <returns></returns>
        public static ParkOrder MarkUserCardDepositRefundOrder(BaseCard card, string operatorId, DbOperator dbOperator)
        {
            ParkOrder  order   = GetUserCardDepositRefundOrder(card, operatorId);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#11
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="grantlist"></param>
        /// <param name="Amout"></param>
        /// <param name="EndTime"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public static bool RefundCardAmout(ParkGrant grantmodel, DateTime EndTime, ParkOrder model)
        {
            if (grantmodel == null || model == null)
            {
                throw new ArgumentNullException("models");
            }
            model.RecordID = GuidGenerator.GetGuidString();
            IParkGrant       factory = ParkGrantFactory.GetFactory();
            List <ParkGrant> list    = new List <ParkGrant>();

            if (grantmodel.PKLot == null || grantmodel.PKLot.Trim() == "")
            {
                list.Add(grantmodel);
            }
            else
            {
                string mesg = "";
                list = factory.GetCardgrantsByLot(grantmodel.PKID, grantmodel.PKLot, out mesg);
            }

            bool result = factory.RefundCardAmout(list, EndTime, model);

            if (result)
            {
                foreach (var item in list)
                {
                    OperateLogServices.AddOperateLog <ParkGrant>(item, OperateType.Update);
                }
                OperateLogServices.AddOperateLog <ParkOrder>(model, OperateType.Add);
            }
            return(result);
        }
示例#12
0
        /// <summary>
        /// 生存中央缴费订单
        /// </summary>
        /// <param name="parkingId">车场编号</param>
        /// <param name="ioRecordId">记录编号</param>
        /// <param name="amount">订单金额</param>
        /// <param name="payAmount">已付金额</param>
        /// <param name="discountAmount">优惠金额</param>
        /// <param name="carderateIds">优免券编号</param>
        /// <param name="feeRuleId">收费规则编号</param>
        /// <param name="cashTime">结余时间</param>
        /// <param name="cashMoney">结余金额</param>
        /// <param name="operatorId">操作员编号</param>
        /// <returns></returns>
        public static ParkOrder AddCentralFeeOrder(string parkingId, string ioRecordId, decimal amount, decimal payAmount, decimal discountAmount,
                                                   List <string> carderateIds, string feeRuleId, DateTime cashTime, decimal cashMoney, string operatorId, DbOperator dbOperator)
        {
            ParkOrder  order   = GenerateCentralFeeOrderModel(parkingId, ioRecordId, amount, payAmount, discountAmount, carderateIds, feeRuleId, cashTime, cashMoney, operatorId);
            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.Add(order, dbOperator));
        }
示例#13
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;
                }
            }
        }
示例#14
0
        public static ParkOrder AddOrder(ParkOrder mode, out string errorMsg)
        {
            if (mode == null)
            {
                throw new ArgumentNullException("mode");
            }

            IParkOrder factory = ParkOrderFactory.GetFactory();

            return(factory.AddOrder(mode, out errorMsg));
        }
示例#15
0
        /// <summary>
        /// 过期转临停订单处理
        /// </summary>
        /// <param name="ioRecordIds"></param>
        /// <param name="operatorId"></param>
        /// <param name="dbOperator"></param>
        /// <returns></returns>
        public static bool AddExpiredToProStopOrder(List <string> ioRecordIds, string operatorId, DbOperator dbOperator)
        {
            if (ioRecordIds.Count == 0)
            {
                return(false);
            }

            IParkOrder       factory = ParkOrderFactory.GetFactory();
            List <ParkOrder> orders  = factory.QueryByIORecordIds(ioRecordIds);

            if (orders.Count == 0)
            {
                return(true);
            }

            bool result = factory.UpdateOrderStatusByIORecordIds(ioRecordIds, -1, dbOperator);

            if (!result)
            {
                return(false);
            }

            foreach (var item in orders)
            {
                item.OrderNo     = IdGenerator.Instance.GetId().ToString();
                item.TagID       = item.RecordID;
                item.Status      = 1;
                item.OrderSource = OrderSource.ManageOffice;
                item.OrderTime   = DateTime.Now;
                item.UserID      = operatorId;
                item.Amount      = item.Amount;
                item.PayAmount   = item.PayAmount;
                item.OldMoney    = item.OldMoney;
                item.NewMoney    = item.NewMoney;
                item.PayWay      = OrderPayWay.Cash;
                item.Remark      = "过期转临停关联订单记录:" + item.RecordID;
                item.PayTime     = DateTime.Now;
                item.CashTime    = item.PayTime;
                item.CashMoney   = item.CashMoney;
                item.PayTime     = DateTime.Now;
                ParkOrder order = factory.Add(item, dbOperator);
                if (order == null)
                {
                    return(false);
                }
            }
            return(true);
        }
示例#16
0
        public static bool AuditingDiffOrder(ParkOrder model, decimal Amount, decimal PayAmount, out string ErrorMessage)
        {
            if (model.RecordID.IsEmpty())
            {
                throw new ArgumentNullException("recordID");
            }

            IParkOrder factory = ParkOrderFactory.GetFactory();
            bool       result  = factory.AuditingDiffOrder(model.RecordID, Amount, PayAmount, out ErrorMessage);

            if (result)
            {
                OperateLogServices.AddOperateLog <ParkOrder>(model, OperateType.Update);
            }
            return(result);
        }
示例#17
0
 public ParkOrder AddOrder(ParkOrder model, out string ErrorMessage)
 {
     ErrorMessage = "";
     try
     {
         using (DbOperator dbOperator = ConnectionManager.CreateConnection())
         {
             return(Add(model, dbOperator));
         }
     }
     catch (Exception e)
     {
         ErrorMessage = e.Message;
     }
     return(null);
 }
示例#18
0
        /// <summary>
        /// 构建商家充值充值订单
        /// </summary>
        /// <param name="seller">商家信息</param>
        /// <param name="chargeBalance">充值金额</param>
        /// <param name="systemId">系统编号</param>
        /// <param name="loginUserRecordId">登录用户编号</param>
        /// <returns></returns>
        private static ParkOrder GetSellerChargeOrder(ParkSeller seller, decimal chargeBalance, string operatorId, OrderSource orderSource, OrderPayWay payWay)
        {
            ParkOrder order = new ParkOrder();

            order.OrderNo     = IdGenerator.Instance.GetId().ToString();
            order.Status      = 1;
            order.OrderSource = orderSource;
            order.Amount      = chargeBalance;
            order.PayAmount   = chargeBalance;
            order.Remark      = "商家充值";
            order.OrderTime   = DateTime.Now;
            order.OrderType   = OrderType.BusinessRecharge;
            order.TagID       = seller.SellerID;
            order.PayWay      = payWay;
            order.UserID      = operatorId;
            order.OldMoney    = seller.Balance;
            order.NewMoney    = chargeBalance + seller.Balance;
            order.PayTime     = DateTime.Now;
            return(order);
        }
示例#19
0
        /// <summary>
        /// 构建储值卡续费订单
        /// </summary>
        /// <param name="rechargeMoney">充值金额(分)</param>
        /// <param name="parkingId">车场编号</param>
        /// <param name="card">用户卡信息</param>
        /// <param name="operatorId">登录用户编号</param>
        /// <returns></returns>
        private static ParkOrder GenerateStoredValueCarOrderModel(string parkingId, decimal rechargeMoney, BaseCard card, string operatorId)
        {
            ParkOrder order = new ParkOrder();

            order.OrderNo     = IdGenerator.Instance.GetId().ToString();
            order.Status      = 1;
            order.PKID        = parkingId;
            order.OrderSource = OrderSource.ManageOffice;
            order.Amount      = rechargeMoney;
            order.PayAmount   = rechargeMoney;
            order.Remark      = "储值卡续费";
            order.OrderTime   = DateTime.Now;
            order.OrderType   = OrderType.ValueCardRecharge;
            order.TagID       = card.CardID;
            order.PayWay      = OrderPayWay.Cash;
            order.UserID      = operatorId;
            order.OldMoney    = card.Balance;
            order.NewMoney    = card.Balance + rechargeMoney;
            order.PayTime     = DateTime.Now;
            return(order);
        }
示例#20
0
        /// <summary>
        /// 构建返还卡片押金订单
        /// </summary>
        /// <param name="usercard"></param>
        /// <param name="systemId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private static ParkOrder GetUserCardDepositRefundOrder(BaseCard usercard, string operatorId)
        {
            ParkOrder order = new ParkOrder();

            order.OrderNo     = IdGenerator.Instance.GetId().ToString();
            order.Status      = 1;
            order.PayWay      = OrderPayWay.Cash;
            order.OrderSource = OrderSource.ManageOffice;
            order.Amount      = -usercard.Deposit;
            order.PayAmount   = -usercard.Deposit;
            order.Remark      = "卡片押金-退还";
            order.OrderTime   = DateTime.Now;
            order.OrderType   = OrderType.CardDeposit;
            order.TagID       = usercard.CardID;
            order.Amount      = order.Amount;
            order.UserID      = operatorId;
            order.OldMoney    = 0;
            order.NewMoney    = 0;
            order.PayTime     = DateTime.Now;
            return(order);
        }
示例#21
0
        /// <summary>
        /// 续期或续费
        /// </summary>
        /// <param name="grantId"></param>
        /// <param name="renewalMonth"></param>
        /// <param name="payTotalMoney"></param>
        /// <param name="operatorId"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public static bool RenewalsOrRecharge(string grantId, int renewalMonth, decimal payTotalMoney, string operatorId, DateTime startDate, DateTime endDate)
        {
            lock (parkGrant_lock)
            {
                ParkGrant grant = ParkGrantServices.QueryByGrantId(grantId);
                if (grant == null)
                {
                    throw new MyException("获取授权信息失败");
                }

                if (endDate != null && endDate != DateTime.MinValue)
                {
                    endDate = endDate.Date.AddDays(1).AddSeconds(-1);
                }
                string   errorMsg = string.Empty;
                BaseCard card     = BaseCardServices.GetBaseCard(grant.CardID, out errorMsg);
                if (card == null || !string.IsNullOrWhiteSpace(errorMsg))
                {
                    throw new MyException("获取卡失败");
                }

                ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(grant.CarTypeID);
                if (carType == null)
                {
                    throw new MyException("获取卡类失败");
                }

                List <ParkGrant> operateTargets = new List <ParkGrant>();
                List <string>    ioRecords      = new List <string>();

                using (DbOperator dbOperator = ConnectionManager.CreateConnection())
                {
                    try
                    {
                        bool renewalsResult = false;
                        dbOperator.BeginTransaction();
                        switch (carType.BaseTypeID)
                        {
                        case BaseCarType.StoredValueCar:
                        {
                            IBaseCard factory = BaseCardFactory.GetFactory();
                            if (payTotalMoney > 0)
                            {
                                ParkOrder order = ParkOrderServices.AddStoredValueCarOrder(grant.PKID, payTotalMoney, card, operatorId, dbOperator);
                                if (order == null)
                                {
                                    throw new MyException("创建充值订单失败");
                                }

                                decimal cardtotalmoney = card.Balance + payTotalMoney;
                                if (order.NewMoney != cardtotalmoney)
                                {
                                    throw new MyException("充值金额计算错误");
                                }
                                renewalsResult = factory.Recharge(card.CardID, payTotalMoney, dbOperator);
                                if (!renewalsResult)
                                {
                                    throw new MyException("卡充值失败【更改卡余额失败】");
                                }
                            }
                            renewalsResult = factory.SetEndDate(card.CardID, endDate, dbOperator);
                            if (!renewalsResult)
                            {
                                throw new MyException("卡充值失败【更改有效期失败】");
                            }
                            break;
                        }

                        case BaseCarType.VIPCar:
                        {
                            ParkOrder order = ParkOrderServices.AddVipCardOrder(grant.PKID, grantId, grant.BeginDate, grant.EndDate, startDate, endDate, renewalMonth, operatorId, dbOperator);
                            if (order == null)
                            {
                                throw new MyException("充值失败【创建充值订单失败】");
                            }

                            IParkGrant factory = ParkGrantFactory.GetFactory();
                            renewalsResult = factory.Renewals(grant.GID, startDate, endDate, dbOperator);
                            if (!renewalsResult)
                            {
                                throw new MyException("修改车辆有效期失败");
                            }
                            break;
                        }

                        case BaseCarType.MonthlyRent:
                        {
                            int pkLotQuantity = 1;
                            if (!string.IsNullOrWhiteSpace(grant.PKLot))
                            {
                                pkLotQuantity = grant.PKLot.TrimEnd(',').Split(',').Length;
                            }
                            decimal amount = ParkOrderServices.CalculateMonthlyRentExpiredWaitPayAmount(startDate, grantId);

                            //if (payTotalMoney != ((carType.Amount * renewalMonth * pkLotQuantity) + amount))
                            //    throw new MyException("凭证续期金额计算有误");



                            List <ParkGrant> shareCardGrants = new List <ParkGrant>();
                            if (!string.IsNullOrWhiteSpace(grant.PKLot))
                            {
                                shareCardGrants = ParkGrantServices.QueryByParkingAndLotAndCarType(grant.PKID, grant.PKLot, BaseCarType.MonthlyRent, grant.GID);
                            }
                            IParkGrant factory = ParkGrantFactory.GetFactory();
                            renewalsResult = factory.Renewals(grant.GID, startDate, endDate, dbOperator);
                            if (!renewalsResult)
                            {
                                throw new MyException("修改车辆有效期失败");
                            }


                            //修改多车多位的有效期
                            foreach (var item in shareCardGrants)
                            {
                                if (string.IsNullOrWhiteSpace(item.PKLot))
                                {
                                    continue;
                                }

                                int len1 = item.PKLot.TrimEnd(',').Split(',').Length;
                                int len2 = grant.PKLot.TrimEnd(',').Split(',').Length;
                                if (len1 != len2)
                                {
                                    continue;
                                }

                                item.BeginDate = startDate;
                                item.EndDate   = endDate;
                                factory.Update(item, dbOperator);
                                operateTargets.Add(item);
                            }
                            //过期转临停订单处理
                            if (grant.EndDate.Date < DateTime.Now.Date)
                            {
                                List <string> plateNos = new List <string>();
                                EmployeePlate plate    = EmployeePlateServices.Query(grant.PlateID);
                                if (plate == null)
                                {
                                    throw new MyException("授权车牌信息不存在");
                                }

                                plateNos.Add(plate.PlateNo);

                                foreach (var item in shareCardGrants)
                                {
                                    if (string.IsNullOrWhiteSpace(item.PKLot))
                                    {
                                        continue;
                                    }

                                    int len1 = item.PKLot.TrimEnd(',').Split(',').Length;
                                    int len2 = grant.PKLot.TrimEnd(',').Split(',').Length;
                                    if (len1 != len2)
                                    {
                                        continue;
                                    }

                                    EmployeePlate otherplate = EmployeePlateServices.Query(item.PlateID);
                                    if (otherplate == null)
                                    {
                                        throw new MyException("多车多位存在无效的车牌");
                                    }
                                    plateNos.Add(otherplate.PlateNo);
                                }

                                if (plateNos.Count > 0 && grant.EndDate != DateTime.MinValue)
                                {
                                    IParkIORecord ioRecord = ParkIORecordFactory.GetFactory();
                                    ioRecords = ioRecord.QueryMonthExpiredNotPayAmountIORecordIds(grant.EndDate.AddDays(1).Date, startDate, grant.PKID, plateNos);
                                    if (ioRecords.Count > 0)
                                    {
                                        bool result = ioRecord.UpdateIORecordEnterType(ioRecords, 0, dbOperator);
                                        if (!result)
                                        {
                                            throw new MyException("修改进出记录类型失败");
                                        }
                                        result = ParkOrderServices.AddExpiredToProStopOrder(ioRecords, operatorId, dbOperator);
                                        if (!result)
                                        {
                                            throw new MyException("创建月卡转临停订单失败");
                                        }
                                    }
                                }
                            }
                            ParkOrder order = ParkOrderServices.AddMonthlyRentOrderCS(grant.PKID, carType.CarTypeID, grant.GID, grant.BeginDate, grant.EndDate, startDate, endDate, renewalMonth, pkLotQuantity, operatorId, payTotalMoney, dbOperator);
                            if (order == null)
                            {
                                throw new MyException("续期失败【创建续期订单失败】");
                            }
                            break;
                        }

                        //case BaseCarType.WorkCar:
                        //    {
                        //        IParkGrant factory = ParkGrantFactory.GetFactory();
                        //        renewalsResult = factory.Renewals(grant.GID, startDate, endDate, dbOperator);
                        //        if (!renewalsResult) throw new MyException("修改卡结束时间错误");
                        //        break;
                        //    }
                        default: throw new MyException("选择的车辆不能续期和充值");
                        }
                        dbOperator.CommitTransaction();

                        string remark = string.Format("grantId:{0};renewalMonth:{1};payTotalMoney:{2};operatorId:{3};startDate:{4};endDate:{5}", grantId, renewalMonth, payTotalMoney, operatorId, startDate.ToString("yyyy-MM-dd"), endDate.ToString("yyyy-MM-dd"));
                        OperateLogServices.AddOperateLog(OperateType.Update, remark);
                        if (ioRecords.Count > 0)
                        {
                            string updateIORecord = string.Format("修改IORecord表,RecordIDs:{0},EnterType:0", string.Join(",", ioRecords));
                            OperateLogServices.AddOperateLog(OperateType.Update, updateIORecord);
                        }
                        return(renewalsResult);
                    }
                    catch (Exception ex)
                    {
                        dbOperator.RollbackTransaction();
                        throw ex;
                    }
                }
            }
        }
示例#22
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);
        }
示例#23
0
        private static TempParkingFeeResult BWYTransforTempParkingFeeResult(TempParkingFeeResult model, BWYOrderQueryResult bwyResult, string plateNumber)
        {
            if (bwyResult.Result != 0 || bwyResult.Reference == null || bwyResult.Reference.Count == 0)
            {
                return(model);
            }
            OrderQueryResultReference reference = bwyResult.Reference.First();
            TempParkingFeeResult      result    = new TempParkingFeeResult();

            result.OrderSource = PayOrderSource.BWY;
            result.PlateNumber = plateNumber;
            result.CardNo      = plateNumber;
            OrderResultReferenceParkingLot parking = reference.ParkingLot;

            if (parking == null)
            {
                TxtLogServices.WriteTxtLogEx("BWYInterfaceProcess", string.Format("TransforTempParkingFeeResult方法,OrderResultReferenceParkingLot is null"));
                return(model);
            }
            result.ParkingID    = BWPKID;
            result.ParkName     = parking.Name;
            result.ExternalPKID = parking.Index.ToString();
            OrderResultBill bill = reference.Bill;

            if (bill == null)
            {
                TxtLogServices.WriteTxtLogEx("BWYInterfaceProcess", string.Format("TransforTempParkingFeeResult方法,OrderResultBill is null"));
                return(model);
            }

            if (bill.PayState == 3)
            {
                result.Result = APPResult.NoNeedPay;
            }
            //if (bill.PayState == 10)
            //{
            //    result.Result = APPResult.NotFindIn;
            //}
            if (bill.PayState == 1 || bill.PayState == 2 || bill.PayState == 10)
            {
                result.Result = APPResult.Normal;
            }

            result.EntranceDate = bill.StartDate;
            result.OutTime      = 10;
            result.isAdd        = true;
            result.PayDate      = DateTime.Now;
            ParkOrder order = new ParkOrder();

            order.ID        = bill.Index;
            order.RecordID  = bill.Index.ToString();
            order.OrderNo   = bill.Index.ToString();
            order.TagID     = bill.Index.ToString();
            order.OrderType = OrderType.TempCardPayment;
            order.PayWay    = OrderPayWay.WeiXin;


            OrderResultCostDetail detail = reference.CostDetail;

            if (detail == null)
            {
                TxtLogServices.WriteTxtLogEx("BWYInterfaceProcess", string.Format("TransforTempParkingFeeResult方法,OrderResultCostDetail is null"));
                return(model);
            }
            if (detail != null && detail.Discount != null)
            {
                order.DiscountAmount = detail.Discount.Sums / 100;
            }
            if (detail.Sums == 0)
            {
                result.Result = APPResult.NoNeedPay;
            }

            order.Amount      = (detail.Sums - order.DiscountAmount) / 100;
            order.UnPayAmount = 0;
            order.PayAmount   = (detail.Sums - order.DiscountAmount) / 100;

            order.CarderateID = "";
            order.Status      = 0;
            order.OrderSource = OrderSource.WeiXin;
            order.OrderTime   = DateTime.Now;
            order.PayTime     = DateTime.Now;
            //order.OldUserulDate = DateTime.MinValue;
            //order.NewUsefulDate = DateTime.MinValue;
            //order.OldMoney = null;
            //order.NewMoney = null;
            order.PKID          = parking.Index.ToString();
            order.UserID        = "";
            order.OnlineUserID  = "";
            order.OnlineOrderNo = "";
            order.Remark        = "";
            //order.LastUpdateTime = "";
            //order.HaveUpdate = "";
            //order.DataStatus = "";
            result.Pkorder     = order;
            result.OrderSource = PayOrderSource.BWY;
            return(result);
        }
示例#24
0
        private static TempParkingFeeResult SFMTransforTempParkingFeeResult(TempParkingFeeResult model, OutCarInfoResult sfmResult)
        {
            if (!sfmResult.Success || sfmResult.Data == null)
            {
                return(model);
            }
            if (sfmResult.Code == "400")
            {
                model.Result = APPResult.AmountIsNot;
                return(model);
            }
            if (sfmResult.Code != "0000")
            {
                model.Result = APPResult.OtherException;
                return(model);
            }
            SMFOutCarInfo payInfo = sfmResult.Data;

            if (!payInfo.payAmount.HasValue || payInfo.payAmount <= 0)
            {
                model.Result = APPResult.NoNeedPay;
                return(model);
            }

            TempParkingFeeResult result = new TempParkingFeeResult();

            result.OrderSource = PayOrderSource.SFM;
            result.PlateNumber = payInfo.carNo;
            result.CardNo      = payInfo.carNo;

            result.ParkingID = SFMPKID;

            result.ExternalPKID = payInfo.Parking_Key;
            BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(SystemDefaultConfig.SFMPKID);

            if (parking != null)
            {
                result.ParkName = parking.PKName;
            }
            result.EntranceDate = DateTime.Parse(payInfo.enterTime);
            result.OutTime      = payInfo.freeTimeout.HasValue ? payInfo.freeTimeout.Value : 10;
            result.isAdd        = true;
            result.PayDate      = DateTime.Now;
            ParkOrder order = new ParkOrder();

            order.RecordID  = payInfo.ParkOrder_OrderNo;
            order.OrderNo   = payInfo.ParkOrder_OrderNo;
            order.TagID     = "1";
            order.OrderType = OrderType.TempCardPayment;
            order.PayWay    = OrderPayWay.WeiXin;

            order.DiscountAmount = payInfo.couponAmount.HasValue ? payInfo.couponAmount.Value : 0;
            order.Amount         = payInfo.totalAmount.HasValue ? payInfo.totalAmount.Value : 0;
            order.UnPayAmount    = 0;
            order.PayAmount      = payInfo.payAmount.HasValue ? payInfo.payAmount.Value : 0;

            order.CarderateID   = "";
            order.Status        = 0;
            order.OrderSource   = OrderSource.WeiXin;
            order.OrderTime     = DateTime.Now;
            order.PayTime       = DateTime.Now;
            order.PKID          = SFMPKID;
            order.UserID        = "";
            order.OnlineUserID  = "";
            order.OnlineOrderNo = "";
            order.Remark        = "";
            result.Pkorder      = order;
            result.OrderSource  = PayOrderSource.SFM;
            return(result);
        }
示例#25
0
        public ParkOrder Add(ParkOrder model, DbOperator dbOperator)
        {
            model.DataStatus     = DataStatus.Normal;
            model.LastUpdateTime = DateTime.Now;
            model.HaveUpdate     = SystemDefaultConfig.DataUpdateFlag;
            model.RecordID       = GuidGenerator.GetGuidString();
            StringBuilder strSql = new StringBuilder();

            strSql.Append(@"insert into ParkOrder(RecordID,Amount,CarderateID,CashMoney,CashTime,DataStatus,DiscountAmount,HaveUpdate,LastUpdateTime,NewMoney,NewUsefulDate,
                                    NewUserBegin,OldMoney,OldUserBegin,OldUserulDate,OnlineOrderNo,OnlineUserID,OrderNo,OrderSource,OrderTime,OrderType,PayAmount,
                                    PayTime,PayWay,PKID,Remark,Status,TagID,UnPayAmount,UserID,FeeRuleID) ");
            strSql.Append(@" values(@RecordID,@Amount,@CarderateID,@CashMoney,@CashTime,@DataStatus,@DiscountAmount,@HaveUpdate,@LastUpdateTime,@NewMoney,@NewUsefulDate,
                                    @NewUserBegin,@OldMoney,@OldUserBegin,@OldUserulDate,@OnlineOrderNo,@OnlineUserID,@OrderNo,@OrderSource,@OrderTime,@OrderType,@PayAmount,
                                    @PayTime,@PayWay,@PKID,@Remark,@Status,@TagID,@UnPayAmount,@UserID,@FeeRuleID);");
            strSql.Append(" select * from ParkOrder where RecordID=@RecordID ");
            dbOperator.ClearParameters();
            dbOperator.AddParameter("RecordID", model.RecordID);
            dbOperator.AddParameter("Amount", model.Amount);
            dbOperator.AddParameter("CarderateID", model.CarderateID);
            dbOperator.AddParameter("CashMoney", model.CashMoney);
            dbOperator.AddParameter("DataStatus", (int)model.DataStatus);
            dbOperator.AddParameter("DiscountAmount", model.DiscountAmount);
            dbOperator.AddParameter("HaveUpdate", model.HaveUpdate);
            dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime);
            dbOperator.AddParameter("NewMoney", model.NewMoney);
            if (model.CashTime == null)
            {
                dbOperator.AddParameter("CashTime", DBNull.Value);
            }
            else
            {
                dbOperator.AddParameter("CashTime", model.CashTime);
            }
            if (model.NewUsefulDate == null)
            {
                dbOperator.AddParameter("NewUsefulDate", DBNull.Value);
            }
            else
            {
                dbOperator.AddParameter("NewUsefulDate", model.NewUsefulDate);
            }
            if (model.OldUserulDate == null)
            {
                dbOperator.AddParameter("OldUserulDate", DBNull.Value);
            }
            else
            {
                dbOperator.AddParameter("OldUserulDate", model.OldUserulDate);
            }
            if (model.OldUserBegin == null)
            {
                dbOperator.AddParameter("OldUserBegin", DBNull.Value);
            }
            else
            {
                dbOperator.AddParameter("OldUserBegin", model.OldUserBegin);
            }
            if (model.NewUserBegin == null)
            {
                dbOperator.AddParameter("NewUserBegin", DBNull.Value);
            }
            else
            {
                dbOperator.AddParameter("NewUserBegin", model.NewUserBegin);
            }
            dbOperator.AddParameter("OldMoney", model.OldMoney);
            dbOperator.AddParameter("OnlineOrderNo", model.OnlineOrderNo);
            dbOperator.AddParameter("OnlineUserID", model.OnlineUserID);
            dbOperator.AddParameter("OrderNo", model.OrderNo);
            dbOperator.AddParameter("OrderSource", model.OrderSource);
            dbOperator.AddParameter("OrderTime", model.OrderTime);
            dbOperator.AddParameter("OrderType", model.OrderType);
            dbOperator.AddParameter("PayAmount", model.PayAmount);
            dbOperator.AddParameter("PayTime", model.PayTime);
            dbOperator.AddParameter("PayWay", model.PayWay);
            dbOperator.AddParameter("PKID", model.PKID);
            dbOperator.AddParameter("FeeRuleID", model.FeeRuleID);
            dbOperator.AddParameter("Remark", model.Remark);
            dbOperator.AddParameter("Status", model.Status);
            dbOperator.AddParameter("TagID", model.TagID);
            dbOperator.AddParameter("UnPayAmount", model.UnPayAmount);
            dbOperator.AddParameter("UserID", model.UserID);
            using (DbDataReader reader = dbOperator.ExecuteReader(strSql.ToString()))
            {
                if (reader.Read())
                {
                    return(DataReaderToModel <ParkOrder> .ToModel(reader));
                }
                return(null);
            }
        }
示例#26
0
        /// <summary>
        /// 退款操作
        /// </summary>
        /// <param name="GID"></param>
        /// <param name="Amout"></param>
        /// <param name="EndTime"></param>
        /// <returns></returns>
        public bool RefundCardAmout(List <ParkGrant> grantlist, DateTime EndTime, ParkOrder model)
        {
            try
            {
                using (DbOperator dbOperator = ConnectionManager.CreateReadConnection())
                {
                    dbOperator.BeginTransaction();
                    foreach (var obj in grantlist)
                    {
                        string strsql = "update ParkGrant set EndDate=@EndDate,LastUpdateTime=@LastUpdateTime,HaveUpdate=@HaveUpdate where GID=@GID";
                        dbOperator.ClearParameters();
                        dbOperator.AddParameter("EndDate", EndTime);
                        dbOperator.AddParameter("LastUpdateTime", DateTime.Now);
                        dbOperator.AddParameter("HaveUpdate", SystemDefaultConfig.DataUpdateFlag);
                        dbOperator.AddParameter("GID", obj.GID);
                        if (dbOperator.ExecuteNonQuery(strsql) < 0)
                        {
                            dbOperator.RollbackTransaction();
                            return(false);
                        }
                    }

                    StringBuilder strSql = new StringBuilder();
                    strSql.Append(@"insert into ParkOrder(RecordID,Amount,CarderateID,CashMoney,CashTime,DataStatus,DiscountAmount,HaveUpdate,LastUpdateTime,NewMoney,NewUsefulDate,
                                    NewUserBegin,OldMoney,OldUserBegin,OldUserulDate,OnlineOrderNo,OnlineUserID,OrderNo,OrderSource,OrderTime,OrderType,PayAmount,
                                    PayTime,PayWay,PKID,Remark,Status,TagID,UnPayAmount,UserID,FeeRuleID) ");
                    strSql.Append(@" values(@RecordID,@Amount,@CarderateID,@CashMoney,@CashTime,@DataStatus,@DiscountAmount,@HaveUpdate,@LastUpdateTime,@NewMoney,@NewUsefulDate,
                                    @NewUserBegin,@OldMoney,@OldUserBegin,@OldUserulDate,@OnlineOrderNo,@OnlineUserID,@OrderNo,@OrderSource,@OrderTime,@OrderType,@PayAmount,
                                    @PayTime,@PayWay,@PKID,@Remark,@Status,@TagID,@UnPayAmount,@UserID,@FeeRuleID);");
                    dbOperator.ClearParameters();
                    dbOperator.AddParameter("RecordID", model.RecordID);
                    dbOperator.AddParameter("Amount", model.Amount);
                    dbOperator.AddParameter("CarderateID", model.CarderateID);
                    dbOperator.AddParameter("CashMoney", model.CashMoney);
                    dbOperator.AddParameter("DataStatus", (int)model.DataStatus);
                    dbOperator.AddParameter("DiscountAmount", model.DiscountAmount);
                    dbOperator.AddParameter("HaveUpdate", model.HaveUpdate);
                    dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime);
                    dbOperator.AddParameter("NewMoney", model.NewMoney);
                    dbOperator.AddParameter("CashTime", DBNull.Value);
                    dbOperator.AddParameter("NewUsefulDate", model.NewUsefulDate);
                    dbOperator.AddParameter("OldUserulDate", model.OldUserulDate);
                    dbOperator.AddParameter("OldUserBegin", model.OldUserBegin);
                    dbOperator.AddParameter("NewUserBegin", model.NewUserBegin);
                    dbOperator.AddParameter("OldMoney", model.OldMoney);
                    dbOperator.AddParameter("OnlineOrderNo", model.OnlineOrderNo);
                    dbOperator.AddParameter("OnlineUserID", model.OnlineUserID);
                    dbOperator.AddParameter("OrderNo", model.OrderNo);
                    dbOperator.AddParameter("OrderSource", model.OrderSource);
                    dbOperator.AddParameter("OrderTime", model.OrderTime);
                    dbOperator.AddParameter("OrderType", model.OrderType);
                    dbOperator.AddParameter("PayAmount", model.PayAmount);
                    dbOperator.AddParameter("PayTime", model.PayTime);
                    dbOperator.AddParameter("PayWay", model.PayWay);
                    dbOperator.AddParameter("PKID", model.PKID);
                    dbOperator.AddParameter("FeeRuleID", model.FeeRuleID);
                    dbOperator.AddParameter("Remark", model.Remark);
                    dbOperator.AddParameter("Status", model.Status);
                    dbOperator.AddParameter("TagID", model.TagID);
                    dbOperator.AddParameter("UnPayAmount", model.UnPayAmount);
                    dbOperator.AddParameter("UserID", model.UserID);
                    if (dbOperator.ExecuteNonQuery(strSql.ToString()) < 0)
                    {
                        dbOperator.RollbackTransaction();
                        return(false);
                    }
                    dbOperator.CommitTransaction();
                    return(true);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }
        }