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); }
public JsonResult SaveUpdate(ParkCarType model) { try { UpdateParkCarTypeDefault(model); bool result = false; if (string.IsNullOrWhiteSpace(model.CarTypeID)) { result = ParkCarTypeServices.Add(model); if (!result) { throw new MyException("添加失败"); } return(Json(MyResult.Success())); } else { result = ParkCarTypeServices.Update(model); if (!result) { throw new MyException("修改失败"); } return(Json(MyResult.Success())); } } catch (MyException ex) { return(Json(MyResult.Error(ex.Message))); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "保存车类型信息失败"); return(Json(MyResult.Error("保存车类型信息失败"))); } }
public ParkFeeRuleView ToParkFeeRuleView(ParkFeeRule rule, List <ParkArea> areas, List <ParkCarType> carTyeps, List <ParkCarModel> carModels) { this.AreaID = rule.AreaID; ParkArea area = areas.FirstOrDefault(p => p.AreaID == rule.AreaID); if (area != null) { this.AreaName = area.AreaName; } this.CarTypeID = rule.CarTypeID; ParkCarType card = carTyeps.FirstOrDefault(p => p.CarTypeID == rule.CarTypeID); if (card != null) { this.CarTypeName = card.CarTypeName; } this.CarModelID = rule.CarModelID; ParkCarModel carModel = carModels.FirstOrDefault(p => p.CarModelID == rule.CarModelID); if (carModel != null) { this.CarModelName = carModel.CarModelName; } this.RuleName = rule.RuleName; this.FeeRuleID = rule.FeeRuleID; this.FeeType = rule.FeeType; this.RuleText = rule.RuleText; this.FeeTypeName = ((FeeType)rule.FeeType).GetDescription(); this.LastUpdateTime = rule.LastUpdateTime; this.IsOffline = rule.IsOffline; FillParkFeeRuleDetail(rule.ParkFeeRuleDetails); return(this); }
public static bool Update(ParkCarType model) { if (model == null) { throw new ArgumentNullException("model"); } model.CarTypeName = model.CarTypeName.Trim(); IParkCarType factory = ParkCarTypeFactory.GetFactory(); ParkCarType carType = factory.QueryCarTypesByCarTypeName(model.PKID, model.CarTypeName); if (carType != null && model.CarTypeID != carType.CarTypeID) { throw new MyException("车类名称不能重复"); } if (model.BaseTypeID == BaseCarType.TempCar) { List <ParkCarType> carTypes = ParkCarTypeServices.QueryParkCarTypeByParkingId(model.PKID); if (carTypes.FirstOrDefault(p => p.BaseTypeID == BaseCarType.TempCar && p.CarTypeID != model.CarTypeID) != null) { throw new MyException("基础类型为临时车的已经存在,不能重复添加"); } } bool result = factory.Update(model); if (result) { OperateLogServices.AddOperateLog <ParkCarType>(model, OperateType.Update); } return(result); }
/// <summary> /// 月租车恢复使用 /// </summary> /// <param name="cardGrantId"></param> /// <returns></returns> public static bool CarRestoreUse(string grantId) { IParkGrant factory = ParkGrantFactory.GetFactory(); ParkGrant grant = factory.QueryByGrantId(grantId); if (grant == null) { throw new MyException("获取授权信息失败"); } if (grant.State == ParkGrantState.Normal) { return(true); } ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(grant.CarTypeID); if (carType == null) { throw new MyException("获取车型类型失败"); } IParkCardSuspendPlan planFactory = ParkCardSuspendPlanFactory.GetFactory(); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); ParkCardSuspendPlan plan = planFactory.QueryByGrantId(grantId); DateTime newEndDate = ComputeParkGrantNewEndDate(grant, plan); grant.BeginDate = grant.BeginDate == null ? DateTime.Now.Date : grant.BeginDate; bool result = factory.RestoreUse(grantId, grant.BeginDate, newEndDate, dbOperator); if (!result) { throw new MyException("恢复暂停失败"); } result = planFactory.Delete(grantId, dbOperator); if (!result) { throw new MyException("取消暂停计划失败"); } dbOperator.CommitTransaction(); ParkGrant dbGrant = factory.QueryByGrantId(grantId); if (dbGrant != null) { OperateLogServices.AddOperateLog <ParkGrant>(dbGrant, OperateType.Update); } OperateLogServices.AddOperateLog(OperateType.Update, string.Format("CarRestore.GrantID:{0}", grantId)); return(result); } catch (Exception ex) { dbOperator.RollbackTransaction(); throw ex; } } }
private void UpdateParkCarTypeDefault(ParkCarType model) { if (model.BaseTypeID == BaseCarType.VIPCar) { model.MaxValue = 0; model.Amount = 0; model.MaxMonth = 0; model.MaxUseMoney = 0; } if (model.BaseTypeID == BaseCarType.StoredValueCar) { model.Amount = 0; model.MaxMonth = 0; model.OverdueToTemp = 0; model.LotOccupy = 0; } if (model.BaseTypeID == BaseCarType.MonthlyRent) { model.MaxValue = 0; model.MaxUseMoney = 0; } if (model.BaseTypeID == BaseCarType.TempCar) { model.MaxValue = 0; model.Amount = 0; model.MaxMonth = 0; model.OverdueToTemp = 0; model.LotOccupy = 0; } //if (model.BaseTypeID == BaseCarType.WorkCar) //{ // model.MaxValue = 0; // model.Amount = 0; // model.MaxMonth = 0; // model.OverdueToTemp = 0; // model.LotOccupy = 0; // model.MaxUseMoney = 0; //} if (model.BaseTypeID == BaseCarType.SeasonRent) { model.MaxValue = 0; model.MaxUseMoney = 0; } if (model.BaseTypeID == BaseCarType.YearRent) { model.MaxValue = 0; model.MaxUseMoney = 0; } if (model.BaseTypeID == BaseCarType.CustomRent) { model.MaxValue = 0; model.MaxUseMoney = 0; } if (model.BaseTypeID != BaseCarType.MonthlyRent || model.OverdueToTemp != OverdueToTemp.ExpiredToTemp) { model.MonthCardExpiredEnterDay = 0; } }
private void ProcessListShowData(ParkCarType carType) { if (carType.BaseTypeID == BaseCarType.VIPCar) { carType.MaxValue = -1; carType.Amount = -1; carType.MaxMonth = -1; carType.MaxUseMoney = -1; } if (carType.BaseTypeID == BaseCarType.StoredValueCar) { carType.Amount = -1; carType.MaxMonth = -1; carType.OverdueToTemp = OverdueToTemp.ExpiredToTemp; carType.LotOccupy = LotOccupy.ChangeToTemp; } if (carType.BaseTypeID == BaseCarType.MonthlyRent) { carType.MaxValue = -1; carType.MaxUseMoney = -1; } if (carType.BaseTypeID == BaseCarType.TempCar) { carType.MaxValue = -1; carType.Amount = -1; carType.MaxMonth = -1; carType.OverdueToTemp = OverdueToTemp.ExpiredToTemp; carType.LotOccupy = LotOccupy.ChangeToTemp; } if (carType.BaseTypeID == BaseCarType.SeasonRent) { carType.MaxValue = -1; carType.MaxUseMoney = -1; } if (carType.BaseTypeID == BaseCarType.YearRent) { carType.MaxValue = -1; carType.MaxUseMoney = -1; } if (carType.BaseTypeID == BaseCarType.CustomRent) { carType.MaxValue = -1; carType.MaxUseMoney = -1; } //if (carType.BaseTypeID == BaseCarType.WorkCar) //{ // carType.MaxValue = -1; // carType.Amount = -1; // carType.MaxMonth = -1; // carType.OverdueToTemp = OverdueToTemp.ExpiredToTemp; // carType.LotOccupy = LotOccupy.ChangeToTemp; // carType.MaxUseMoney = -1; //} }
public bool Update(ParkCarType model) { model.LastUpdateTime = DateTime.Now; model.HaveUpdate = SystemDefaultConfig.DataUpdateFlag; StringBuilder strSql = new StringBuilder(); strSql.Append("update ParkCarType set CarTypeName=@CarTypeName,PKID=@PKID,BaseTypeID=@BaseTypeID,RepeatIn=@RepeatIn,RepeatOut"); strSql.Append("=@RepeatOut,AffirmIn=@AffirmIn,AffirmOut=@AffirmOut,InBeginTime=@InBeginTime,InEdnTime=@InEdnTime,MaxUseMoney=@MaxUseMoney,AllowLose=@AllowLose,LpDistinguish=@LpDistinguish,InOutEditCar"); strSql.Append("=@InOutEditCar,InOutTime=@InOutTime,CarNoLike=@CarNoLike,LastUpdateTime=@LastUpdateTime,HaveUpdate=@HaveUpdate,IsAllowOnlIne=@IsAllowOnlIne,Amount=@Amount,MaxMonth=@MaxMonth,MaxValue=@MaxValue"); strSql.Append(",OverdueToTemp=@OverdueToTemp,LotOccupy=@LotOccupy,Deposit=@Deposit,MonthCardExpiredEnterDay=@MonthCardExpiredEnterDay,AffirmBegin=@AffirmBegin,AffirmEnd=@AffirmEnd,IsNeedCapturePaper=@IsNeedCapturePaper,IsNeedAuthentication=@IsNeedAuthentication,IsDispatch=@IsDispatch,OnlineUnit=@OnlineUnit"); strSql.Append(",IsIgnoreHZ=@IsIgnoreHZ where CarTypeID=@CarTypeID"); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { dbOperator.ClearParameters(); dbOperator.AddParameter("CarTypeID", model.CarTypeID); dbOperator.AddParameter("CarTypeName", model.CarTypeName); dbOperator.AddParameter("PKID", model.PKID); dbOperator.AddParameter("BaseTypeID", (int)model.BaseTypeID); dbOperator.AddParameter("RepeatIn", (int)model.RepeatIn); dbOperator.AddParameter("RepeatOut", (int)model.RepeatOut); dbOperator.AddParameter("AffirmIn", (int)model.AffirmIn); dbOperator.AddParameter("AffirmOut", (int)model.AffirmOut); dbOperator.AddParameter("InBeginTime", model.InBeginTime); dbOperator.AddParameter("InEdnTime", model.InEdnTime); dbOperator.AddParameter("MaxUseMoney", model.MaxUseMoney); dbOperator.AddParameter("AllowLose", (int)model.AllowLose); dbOperator.AddParameter("LpDistinguish", (int)model.LpDistinguish); dbOperator.AddParameter("InOutEditCar", (int)model.InOutEditCar); dbOperator.AddParameter("InOutTime", model.InOutTime); dbOperator.AddParameter("CarNoLike", (int)model.CarNoLike); dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime); dbOperator.AddParameter("HaveUpdate", model.HaveUpdate); dbOperator.AddParameter("IsAllowOnlIne", (int)model.IsAllowOnlIne); dbOperator.AddParameter("Amount", model.Amount); dbOperator.AddParameter("MaxMonth", model.MaxMonth); dbOperator.AddParameter("MaxValue", model.MaxValue); dbOperator.AddParameter("OverdueToTemp", (int)model.OverdueToTemp); dbOperator.AddParameter("LotOccupy", (int)model.LotOccupy); dbOperator.AddParameter("Deposit", model.Deposit); dbOperator.AddParameter("MonthCardExpiredEnterDay", model.MonthCardExpiredEnterDay); dbOperator.AddParameter("AffirmBegin", model.AffirmBegin); dbOperator.AddParameter("AffirmEnd", model.AffirmEnd); dbOperator.AddParameter("IsNeedCapturePaper", model.IsNeedCapturePaper); dbOperator.AddParameter("IsNeedAuthentication", model.IsNeedAuthentication); dbOperator.AddParameter("IsDispatch", model.IsDispatch); dbOperator.AddParameter("OnlineUnit", model.OnlineUnit); dbOperator.AddParameter("IsIgnoreHZ", model.IsIgnoreHZ); return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0); } }
public bool Add(ParkCarType model) { if (model == null) { return(false); } using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { return(Add(new List <ParkCarType>() { model }, dbOperator)); } }
public static List <CarParkingResult> GetParkGrantByPlateNo(string plateNo) { if (plateNo.IsEmpty()) { throw new ArgumentNullException("plateNo"); } List <CarParkingResult> models = new List <CarParkingResult>(); IParkGrant factory = ParkGrantFactory.GetFactory(); List <ParkGrant> grants = factory.GetParkGrantByPlateNo(plateNo); if (grants.Count > 0) { List <ParkCarType> carTypes = ParkCarTypeServices.QueryParkCarTypeByRecordIds(grants.Select(p => p.CarTypeID).ToList()); List <BaseParkinfo> parkings = ParkingServices.QueryParkingByRecordIds(grants.Select(p => p.PKID).ToList()); List <BaseVillage> villages = new List <BaseVillage>(); if (parkings.Count > 0) { IVillage factoryVillage = VillageFactory.GetFactory(); villages = factoryVillage.QueryVillageByRecordIds(parkings.Select(p => p.VID).ToList()); } foreach (var item in grants) { CarParkingResult model = new CarParkingResult(); model.PlateNo = plateNo; BaseParkinfo parking = parkings.FirstOrDefault(p => p.PKID == item.PKID); if (parking != null) { model.ParkingName = parkings != null ? parking.PKName : string.Empty; BaseVillage village = villages.FirstOrDefault(p => p.VID == parking.VID); model.VillageName = village != null ? village.VName : string.Empty; } ParkCarType carType = carTypes.FirstOrDefault(p => p.CarTypeID == item.CarTypeID); if (carType != null) { model.CarTypeName = carType.CarTypeName; } model.StartTime = item.BeginDate; model.EndTime = item.EndDate; models.Add(model); } } return(models); }
public static ParkGrant GenerateParkGrantModel(string PKID, EmployeePlate plate, BaseCard card, string pkLot, string carModelId, string carTypeId, string AreaIDS, string GateID) { ParkGrant model = new ParkGrant(); model.PKID = PKID; model.CardID = card.CardID; model.PlateID = plate.PlateID; model.PlateNo = plate.PlateNo; model.PKLot = pkLot; model.PKLotNum = 0; ParkCarModel carModel = ParkCarModelServices.QueryByRecordId(carModelId); if (carModel == null) { throw new MyException("选择的车型不存在"); } model.CarModelID = carModel.CarModelID; ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(carTypeId); if (carType == null) { throw new MyException("选择的车类不存在"); } model.CarTypeID = carType.CarTypeID; if (string.IsNullOrWhiteSpace(AreaIDS)) { throw new MyException("获取选择的车场区域失败"); } model.AreaIDS = AreaIDS == "-1" ? string.Empty : AreaIDS; if (string.IsNullOrWhiteSpace(GateID)) { throw new MyException("获取选择的车场通道失败"); } model.GateID = GateID == "-1" ? string.Empty : GateID; return(model); }
public static decimal CalculateMonthlyRentExpiredWaitPayAmount(DateTime start, string grantId) { ParkGrant grant = ParkGrantServices.QueryByGrantId(grantId); if (grant == null) { throw new MyException("获取授权失败"); } if (grant.BeginDate == DateTime.MinValue || grant.EndDate == DateTime.MinValue || (grant.EndDate != DateTime.MinValue && grant.EndDate.Date >= DateTime.Now.Date)) { return(0); } ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(grant.CarTypeID); if (carType == null) { throw new MyException("获取车类失败"); } if (carType.BaseTypeID != BaseCarType.MonthlyRent) { return(0); } DateTime startDate = grant.EndDate.AddDays(1).Date; DateTime endDate = start.Date; List <string> plateNos = new List <string>(); EmployeePlate plate = EmployeePlateServices.Query(grant.PlateID); if (plate == null) { throw new MyException("获取车牌号失败"); } plateNos.Add(plate.PlateNo); if (!string.IsNullOrWhiteSpace(grant.PKLot)) { List <ParkGrant> sameGrants = ParkGrantServices.QueryByParkingAndLotAndCarType(grant.PKID, grant.PKLot, BaseCarType.MonthlyRent, grant.GID); foreach (var item in sameGrants) { int lot1 = grant.PKLot.Split(',').Length; int lot2 = item.PKLot.Split(',').Length; if (lot1 != lot2) { continue; } EmployeePlate plate1 = EmployeePlateServices.Query(item.PlateID); if (plate1 == null) { throw new MyException("获取车牌号失败"); } plateNos.Add(plate1.PlateNo); } } IParkOrder factory = ParkOrderFactory.GetFactory(); return(factory.QueryMonthExpiredNotPayAmount(startDate, endDate, grant.PKID, plateNos)); }
/// <summary> /// 月租车暂停使用 /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <param name="grantId"></param> /// <returns></returns> public static bool CarSuspendUse(DateTime start, DateTime end, string grantId) { IParkGrant factory = ParkGrantFactory.GetFactory(); ParkGrant grant = factory.QueryByGrantId(grantId); if (grant == null) { throw new MyException("获取授权信息失败"); } if (grant.State == ParkGrantState.Stop) { throw new MyException("停止状态不能设置,如需设置请先启用"); } if (grant.State == ParkGrantState.Pause) { throw new MyException("暂停状态不能设置,请先恢复使用后重新设置"); } ParkCarType carType = ParkCarTypeServices.QueryParkCarTypeByRecordId(grant.CarTypeID); if (carType == null) { throw new MyException("获取车型类型失败"); } //if (carType.BaseTypeID != BaseCarType.MonthlyRent && carType.BaseTypeID != BaseCarType.WorkCar // && carType.BaseTypeID != BaseCarType.VIPCar) throw new MyException("该车辆不能使用此功能"); IParkCardSuspendPlan planFactory = ParkCardSuspendPlanFactory.GetFactory(); ParkCardSuspendPlan plan = planFactory.QueryByGrantId(grantId); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); if (plan != null) { if (start.Date < DateTime.Now.Date) { throw new MyException("开始时间不能小于系统当前时间"); } bool result = planFactory.Update(start, end, grantId, dbOperator); if (!result) { throw new MyException("保存暂停计划失败"); } if (start.Date == DateTime.Now.Date) { result = factory.Update(grantId, ParkGrantState.Pause, dbOperator); if (!result) { throw new MyException("修改使用状态失败"); } } } else { if (start.Date < DateTime.Now.Date) { throw new MyException("开始时间不能小于系统当前时间"); } ParkCardSuspendPlan model = new ParkCardSuspendPlan(); model.RecordId = GuidGenerator.GetGuidString(); model.StartDate = start; model.EndDate = end; model.GrantID = grantId; bool result = planFactory.Add(model, dbOperator); if (!result) { throw new MyException("保存暂停计划失败"); } if (start.Date == DateTime.Now.Date) { result = factory.Update(grantId, ParkGrantState.Pause, dbOperator); if (!result) { throw new MyException("修改使用状态失败"); } } } dbOperator.CommitTransaction(); string endDate = end == DateTime.MinValue ? end.ToString("yyyy-MM-dd") : string.Empty; OperateLogServices.AddOperateLog(OperateType.Update, string.Format("grantId:{0},startDate:{1},endDate:{2}", grantId, start.ToString("yyyy-MM-dd"), endDate)); return(true); } catch (Exception ex) { dbOperator.RollbackTransaction(); throw ex; } } }
/// <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; } } } }
private static bool AddOrderUpdateParkGrant(ParkGrant parkGrant, DbOperator dbOperator) { IParkGrant grantFactory = ParkGrantFactory.GetFactory(); ParkGrant oldGrant = grantFactory.QueryByCardIdAndParkingId(parkGrant.CardID, parkGrant.PKID); if (oldGrant != null) { parkGrant.GID = oldGrant.GID; parkGrant.BeginDate = oldGrant.BeginDate; parkGrant.EndDate = oldGrant.EndDate; } else { parkGrant.GID = GuidGenerator.GetGuidString(); } //检查车位号是否有效 if (!string.IsNullOrWhiteSpace(parkGrant.PKLot)) { List <ParkGrant> oldGrants = grantFactory.QueryByParkingAndLotAndCarType(parkGrant.PKID, parkGrant.PKLot, BaseCarType.MonthlyRent, parkGrant.GID); foreach (var item in oldGrants) { int oldLotLen = item.PKLot.Split(',').Length; int newLotLen = parkGrant.PKLot.Split(',').Length; if (oldLotLen != newLotLen) { throw new MyException(string.Format("车位号无效:车位号[{0}]与已存在的车位号[{1}]不完全一致", parkGrant.PKLot, item.PKLot)); } parkGrant.BeginDate = item.BeginDate; parkGrant.EndDate = item.EndDate; } } //临停转月卡 并且车位号存在完全一致的情况 给开始日期和结束日期赋值 if (oldGrant != null && !string.IsNullOrWhiteSpace(parkGrant.PKLot)) { ParkCarType newCarType = ParkCarTypeServices.QueryParkCarTypeByRecordId(parkGrant.CarTypeID); ParkCarType oldCarType = ParkCarTypeServices.QueryParkCarTypeByRecordId(oldGrant.CarTypeID); if (newCarType == null || oldCarType == null) { throw new MyException("车类不存在"); } if (newCarType.BaseTypeID == BaseCarType.MonthlyRent && oldCarType.BaseTypeID == BaseCarType.TempCar) { List <ParkGrant> oldGrants = grantFactory.QueryByParkingAndLotAndCarType(parkGrant.PKID, parkGrant.PKLot, BaseCarType.MonthlyRent, parkGrant.GID); foreach (var item in oldGrants) { int oldLotLen = item.PKLot.Split(',').Length; int newLotLen = parkGrant.PKLot.Split(',').Length; if (oldLotLen == newLotLen) { parkGrant.BeginDate = item.BeginDate; parkGrant.EndDate = item.EndDate; break; } } } } if (oldGrant != null) { return(grantFactory.Update(parkGrant, dbOperator)); } else { return(grantFactory.Add(parkGrant, dbOperator)); } }