public static bool Update(ParkFeeRule model) { if (model == null) { throw new ArgumentNullException("model"); } ParkArea parkArea = ParkAreaServices.QueryByRecordId(model.AreaID); if (parkArea == null) { throw new MyException("获取区域信息失败"); } IParkFeeRule factory = ParkFeeRuleFactory.GetFactory(); if (model.IsOffline) { List <ParkFeeRule> models = factory.QueryParkFeeRuleByParkingId(parkArea.PKID); if (models.Exists(p => p.IsOffline == true && p.FeeRuleID != model.FeeRuleID)) { throw new MyException("该车场已存在脱机收费规则了"); } } model.ParkFeeRuleDetails.ForEach(p => { p.RuleDetailID = GuidGenerator.GetGuid().ToString(); p.RuleID = model.FeeRuleID; }); bool result = factory.Update(model); if (result) { OperateLogServices.AddOperateLog <ParkFeeRule>(model, OperateType.Update); } return(result); }
/// <summary> /// 获取停车区地图 /// </summary> /// <param name="db"></param> /// <param name="parkArea"></param> /// <returns></returns> public static Bitmap GetMap(ParkContext db, ParkArea parkArea) { double scale = 10;//设置倍率为10,即每0.5米用10个像素来表示 Bitmap bitmap = new Bitmap((int)(parkArea.Length * scale), (int)(parkArea.Width * scale)); using Graphics g = Graphics.FromImage(bitmap); //画板 using Pen aislePan = new Pen(Brushes.Gray, (float)(2 * scale)); //通道笔 using Pen wallPan = new Pen(Brushes.Red, (float)(2 * scale)); //墙的笔 foreach (var ps in parkArea.ParkingSpaces) { //对停车位应用旋转变换 using Matrix m = new Matrix(); Rectangle r = new Rectangle((int)(scale * ps.X), (int)(scale * ps.Y), (int)(scale * ps.Width), (int)(scale * ps.Height)); m.RotateAt((float)ps.RotateAngle, new PointF(r.Left + (r.Width / 2), r.Top + (r.Height / 2))); g.Transform = m; //根据停车位是否有车的状态设置不同的颜色 g.FillRectangle(ps.HasCar ? Brushes.Orange : Brushes.Green, r); g.ResetTransform(); } //画通道 foreach (var a in parkArea.Aisles) { g.DrawLine(aislePan, (float)(scale * a.X1), (float)(scale * a.Y1), (float)(scale * a.X2), (float)(scale * a.Y2)); } //画墙 foreach (var w in parkArea.Walls) { g.DrawLine(wallPan, (float)(scale * w.X1), (float)(scale * w.Y1), (float)(scale * w.X2), (float)(scale * w.Y2)); } return(bitmap); }
public JsonResult DownloadQRCode(string gateId, int size) { try { List <int> dics = new List <int>(); dics.Add(258); dics.Add(344); dics.Add(430); dics.Add(860); dics.Add(1280); List <string> imgs = new List <string>(); ParkGate gate = ParkGateServices.QueryByRecordId(gateId); if (gate == null) { throw new MyException("获取通道信息失败"); } BaseCompany company = CompanyServices.QueryByBoxID(gate.BoxID); if (company == null) { throw new MyException("获取单位信息失败"); } ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID); if (box == null) { throw new MyException("获取岗亭信息失败"); } ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID); if (area == null) { throw new MyException("获取区域信息失败"); } BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(area.PKID); if (parking == null) { throw new MyException("获取车场信息失败"); } string content = string.Format("{0}/qrl/scio_ix_pid={1}^io={2}", SystemDefaultConfig.SystemDomain, parking.PKID, gate.GateID); foreach (var item in dics) { string parkingName = string.Format("{0}_{1}_{2}_{3}_{4}", parking.PKName, area.AreaName, box.BoxName, gate.GateName, item); string result = QRCodeServices.GenerateQRCode(company.CPID, content, item, parkingName); imgs.Add(item.ToString() + "|" + result); } return(Json(MyResult.Success("", imgs))); } 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 bool Update(ParkArea model) { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { model.DataStatus = DataStatus.Normal; model.LastUpdateTime = DateTime.Now; model.HaveUpdate = SystemDefaultConfig.DataUpdateFlag; StringBuilder strSql = new StringBuilder(); strSql.Append("update ParkArea set AreaName=@AreaName,MasterID=@MasterID,CarbitNum=@CarbitNum,NeedToll=@NeedToll,CameraWaitTime=@CameraWaitTime,TwoCameraWait=@TwoCameraWait"); strSql.Append(",Remark=@Remark,LastUpdateTime=@LastUpdateTime,HaveUpdate=@HaveUpdate where AreaID=@AreaID"); dbOperator.ClearParameters(); dbOperator.AddParameter("AreaID", model.AreaID); dbOperator.AddParameter("AreaName", model.AreaName); dbOperator.AddParameter("MasterID", model.MasterID); dbOperator.AddParameter("CarbitNum", model.CarbitNum); dbOperator.AddParameter("NeedToll", (int)model.NeedToll); dbOperator.AddParameter("CameraWaitTime", (int)model.CameraWaitTime); dbOperator.AddParameter("TwoCameraWait", (int)model.TwoCameraWait); dbOperator.AddParameter("Remark", model.Remark); dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime); dbOperator.AddParameter("HaveUpdate", model.HaveUpdate); return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0); } }
public bool Add(ParkArea model) { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { model.DataStatus = DataStatus.Normal; model.LastUpdateTime = DateTime.Now; model.HaveUpdate = SystemDefaultConfig.DataUpdateFlag; StringBuilder strSql = new StringBuilder(); strSql.Append("insert into ParkArea(AreaID,AreaName,MasterID,PKID,CarbitNum,NeedToll,CameraWaitTime,TwoCameraWait,Remark,LastUpdateTime,HaveUpdate,DataStatus)"); strSql.Append(" values(@AreaID,@AreaName,@MasterID,@PKID,@CarbitNum,@NeedToll,@CameraWaitTime,@TwoCameraWait,@Remark,@LastUpdateTime,@HaveUpdate,@DataStatus)"); dbOperator.ClearParameters(); dbOperator.AddParameter("AreaID", model.AreaID); dbOperator.AddParameter("AreaName", model.AreaName); dbOperator.AddParameter("MasterID", model.MasterID); dbOperator.AddParameter("PKID", model.PKID); dbOperator.AddParameter("CarbitNum", model.CarbitNum); dbOperator.AddParameter("NeedToll", (int)model.NeedToll); dbOperator.AddParameter("CameraWaitTime", (int)model.CameraWaitTime); dbOperator.AddParameter("TwoCameraWait", (int)model.TwoCameraWait); dbOperator.AddParameter("Remark", model.Remark); dbOperator.AddParameter("LastUpdateTime", model.LastUpdateTime); dbOperator.AddParameter("HaveUpdate", model.HaveUpdate); dbOperator.AddParameter("DataStatus", (int)model.DataStatus); return(dbOperator.ExecuteNonQuery(strSql.ToString()) > 0); } }
public JsonResult Edit(ParkArea model) { try { bool result = false; if (string.IsNullOrWhiteSpace(model.AreaID)) { result = ParkAreaServices.Add(model); } else { result = ParkAreaServices.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 static bool AddDefualt(ParkArea model) { if (model == null) { throw new ArgumentNullException("model"); } IParkArea factory = ParkAreaFactory.GetFactory(); bool result = factory.Add(model); if (result) { OperateLogServices.AddOperateLog <ParkArea>(model, OperateType.Add); } return(result); }
public ActionResult SaveBooking(string plateNo, string parkingId, string areaId, DateTime startTime, DateTime endTime) { try { WXReserveBitResult result = PkBitBookingServices.WXReservePKBit(WeiXinUser.AccountID, string.Empty, parkingId, areaId, plateNo, startTime, endTime); if (result.code == 0) { if (parkingId != result.Order.PKID) { throw new MyException("车场编号不一致"); } BaseParkinfo parking = ParkingServices.QueryParkingByParkingID(parkingId); if (parking == null) { throw new MyException("获取车场信息失败"); } ViewBag.ParkingName = parking.PKName; ParkArea area = ParkAreaServices.QueryByRecordId(areaId); if (area == null) { throw new MyException("获取区域信息失败"); } ViewBag.AreaName = area.AreaName; ViewBag.PlateNo = plateNo; ViewBag.StartTime = startTime.ToString("yyyy-MM-dd HH:mm:ss"); ViewBag.EndTime = endTime.ToString("yyyy-MM-dd HH:mm:ss"); ViewBag.AreaId = areaId; return(View(result)); } if (result.code == 1) { throw new MyException("您已经预约过了,请勿重复预约"); } throw new MyException("预约失败[" + result.message + "]"); } catch (MyException ex) { return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = ex.Message })); } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("WeiXinWeb", "预约失败", ex, LogFrom.WeiXin); return(PageAlert("Index", "ParkBitBooking", new { RemindUserContent = "预约失败!" })); } }
/// <summary> /// 增加停车区域 /// </summary> /// <param name="PKID"></param> /// <returns></returns> public static ParkArea GetParkArea(string PKID) { ParkArea model = new ParkArea(); model.AreaID = GuidGenerator.GetGuidString(); model.AreaName = "停车区域"; model.CameraWaitTime = 1; model.CarbitNum = 1000; model.DataStatus = DataStatus.Normal; model.HaveUpdate = 3; model.LastUpdateTime = DateTime.Now; model.MasterID = String.Empty; model.NeedToll = YesOrNo.Yes; model.PKID = PKID; model.TwoCameraWait = YesOrNo.Yes; return(model); }
public static bool Add(ParkArea model) { if (model == null) { throw new ArgumentNullException("model"); } model.AreaID = GuidGenerator.GetGuid().ToString(); IParkArea factory = ParkAreaFactory.GetFactory(); bool result = factory.Add(model); if (result) { OperateLogServices.AddOperateLog <ParkArea>(model, OperateType.Add); } return(result); }
private string GetParkingId(string pid, string bid, string gid) { try { if (!string.IsNullOrWhiteSpace(pid)) { return(pid); } if (!string.IsNullOrWhiteSpace(bid)) { ParkBox box = ParkBoxServices.QueryByRecordId(bid); if (box != null) { ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID); if (area != null) { return(area.PKID); } } } if (!string.IsNullOrWhiteSpace(gid)) { ParkGate gate = ParkGateServices.QueryByRecordId(gid); if (gate != null) { ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID); if (box != null) { ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID); if (area != null) { return(area.PKID); } } } } } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("QRCodeParkPayment", "GetParkingId方法处理异常", ex, LogFrom.WeiXin); } return(string.Empty); }
public async Task <IActionResult> ParkImageAsync(int id) { ParkArea park = await db.ParkAreas.Where(p => p.ID == id) .Include(p => p.ParkingSpaces) .Include(p => p.Walls) .Include(p => p.Aisles) .FirstOrDefaultAsync(); if (park == null) { return(NotFound()); } var image = ParkingSpaceService.GetMap(db, park); using MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); ActionResult result = Ok(); return(File(ms.ToArray(), "image/png")); }
public int UpdateCarBit(string PKID) { try { using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { int CarBit = 0; StringBuilder strSql = new StringBuilder(); strSql.Append("select * from ParkArea where PKID=@PKID and DataStatus!=2"); dbOperator.ClearParameters(); dbOperator.AddParameter("PKID", PKID); using (DbDataReader reader = dbOperator.ExecuteReader(strSql.ToString())) { while (reader.Read()) { ParkArea model = DataReaderToModel <ParkArea> .ToModel(reader); CarBit += model.CarbitNum; } } strSql = new StringBuilder(); strSql.Append("update BaseParkinfo set CarBitNum=@CarBitNum,LastUpdateTime=getdate(),HaveUpdate=3 where PKID=@PKID"); dbOperator.ClearParameters(); dbOperator.AddParameter("PKID", PKID); dbOperator.AddParameter("CarBitNum", CarBit); if (dbOperator.ExecuteNonQuery(strSql.ToString()) > 0) { return(CarBit); } else { return(-1); } } } catch { return(-1); } }
private static bool AddDefaultParkDeviceParam(string gateId, string deviceId, string deviceNo, DbOperator dbOperator) { ParkGate gate = ParkGateServices.QueryByRecordId(gateId); ParkBox box = ParkBoxServices.QueryByRecordId(gate.BoxID); ParkArea area = ParkAreaServices.QueryByRecordId(box.AreaID); ParkDeviceParam param = CreateDefualtParam(deviceId, int.Parse(deviceNo), area.CarbitNum, (int)gate.IoState); IParkDevice factory = ParkDeviceFactory.GetFactory(); ParkDeviceParam deviceParam = factory.QueryParkDeviceParamByDevID(param.DevID); if (deviceParam != null) { throw new MyException("设备编号不能重复"); } bool result = factory.AddParam(param, dbOperator); if (!result) { throw new MyException("添加设备默认参数失败"); } return(result); }
/// <summary> /// 系统初始化默认单位CS /// </summary> public static bool InitSystemDefaultCompanyCS(string VName, string CPName, string userno, string pwd, string systemmodelpath) { try { ICompany factory = CompanyFactory.GetFactory(); using (DbOperator dbOperator = ConnectionManager.CreateConnection()) { try { dbOperator.BeginTransaction(); BaseCompany compamy = GetCompanyModel(); compamy.CPName = CPName; compamy.UserAccount = userno; compamy.UserPassword = pwd; bool result = factory.Add(compamy, dbOperator); if (!result) { throw new MyException("添加默认单位失败"); } BaseVillage village = GetVillage(compamy.CPID); village.VName = VName; result = VillageServices.AddVillageDefaultUser(village, dbOperator); if (!result) { throw new MyException("添加默认小区失败"); } result = SysUserServices.AddCompanyDefaultUserCS(compamy, village, dbOperator, systemmodelpath); if (!result) { throw new MyException("添加默认用户失败"); } BaseParkinfo parkinfo = GetParkinfo(village.VID); result = ParkingServices.AddParkinfoDefault(parkinfo, dbOperator); if (!result) { throw new MyException("添加默认车场失败"); } dbOperator.CommitTransaction(); ParkArea area = GetParkArea(parkinfo.PKID); result = ParkAreaServices.AddDefualt(area); if (result) { ParkBox box = GetParkBox(area.AreaID); result = ParkBoxServices.AddDefault(box); if (result) { result = ParkGateServices.AddDefault(GetParkGate(box.BoxID, 1)); result = ParkGateServices.AddDefault(GetParkGate(box.BoxID, 2)); } } } catch (Exception ex) { dbOperator.RollbackTransaction(); throw; } } } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "添加系统默认单用户失败"); return(false); } return(true); }
internal async static Task <LeaveResult> LeaveAsync(ParkContext db, string licensePlate, ParkArea parkArea, DateTime time) { ParkRecord parkRecord = null; try { LeaveResult leave = new LeaveResult() { CanLeave = true }; Car car = await GetCarAsync(db, licensePlate, false); if (car == null) { //找不到车,就直接放行,省得麻烦 return(leave); } //获取停车记录 parkRecord = await db.ParkRecords .OrderByDescending(p => p.EnterTime) .FirstOrDefaultAsync(p => p.Car == car); if (parkRecord == null) { //找不到记录,就直接放行,省得麻烦 return(leave); } leave.ParkRecord = parkRecord; //补全进出记录 parkRecord.LeaveTime = time; db.Entry(parkRecord).State = EntityState.Modified; CarOwner owner = car.CarOwner; //获取价格策略 var priceStrategy = parkArea.PriceStrategy; if (priceStrategy == null) { //免费停车场 return(leave); } switch (owner) { case CarOwner _ when owner.IsFree: //免费用户 break; case CarOwner _: if (await IsMonthlyCardValidAsync(db, owner.ID)) { //月租用户,放行 break; } else { goto needPay; } case null: //没有注册 needPay: //非会员或普通用户 double price = GetPrice(priceStrategy, parkRecord.EnterTime, time); double balance = owner == null ? 0 : await GetBalanceAsync(db, owner.ID); //计算价格 if (balance - price < 0) { //拒绝驶离,要求付费 leave.CanLeave = false; leave.NeedToPay = balance - price; return(leave); } //新增扣费记录 TransactionRecord transaction = new TransactionRecord() { Time = time, Type = TransactionType.Park, Balance = balance - price, Value = -price, CarOwner = owner, }; db.TransactionRecords.Add(transaction); parkRecord.TransactionRecord = transaction; //停车记录绑定交易记录 break; } return(leave); } finally { await db.SaveChangesAsync(); } }
/// <summary> /// 离开停车场 /// </summary> /// <param name="db">数据库上下文</param> /// <param name="licensePlate">识别到的车牌号</param> /// <param name="parkArea">停车区</param> /// <returns>离开结果</returns> public static Task <LeaveResult> LeaveAsync(ParkContext db, string licensePlate, ParkArea parkArea) { return(LeaveAsync(db, licensePlate, parkArea, DateTime.Now)); }
internal async static Task <EnterResult> EnterAsync(ParkContext db, string licensePlate, ParkArea parkArea, DateTime time) { //检查是否有空位 bool hasEmpty = await db.ParkingSpaces.AnyAsync(p => p.ParkArea == parkArea && !p.HasCar); //select from parkingspace join parkarea on parkingspace.parkareaid=parkarea.id and not parkingspace.hascar if (!hasEmpty) { return(new EnterResult(false, "停车场已满")); } //获取汽车 Car car = await GetCarAsync(db, licensePlate, true); if (car != null && !car.Enabled)//是否被禁止进入 { return(new EnterResult(false, "该车辆禁止进入")); } //新增进出记录 ParkRecord parkRecord = new ParkRecord() { Car = car, EnterTime = time, ParkArea = parkArea }; db.ParkRecords.Add(parkRecord); await db.SaveChangesAsync(); return(new EnterResult(true));; }
/// <summary> /// 进入停车场 /// </summary> /// <param name="db">数据库上下文</param> /// <param name="licensePlate">识别到的车牌号</param> /// <param name="parkArea">停车区</param> /// <returns>是否允许进入</returns> public static Task <EnterResult> EnterAsync(ParkContext db, string licensePlate, ParkArea parkArea) { return(EnterAsync(db, licensePlate, parkArea, DateTime.Now)); }