using DocumentFormat.OpenXml.EMMA; using Infrastructure; using Infrastructure.Extensions; using NPOI.SS.Formula.Functions; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.App.Response; using OpenAuth.App.ServiceApp.MiManager.Request; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using Org.BouncyCastle.Ocsp; using SqlSugar; namespace OpenAuth.App { public class MiVehiclePickupApp : SqlSugarBaseApp { public MiVehiclePickupApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth ) : base(unitWork, repository, auth) { } #region 查询 /// /// 电脑端分页查询 /// public async Task>>> LoadAllPage(MiVehiclePickUpreq req) { RefAsync totalCount = 0; var user = _auth.GetCurrentUser(); var users = user.User; //如果不是超级管理员 if (user != null && users.Id != -1) { //查询所有子部门 List orgidlist = new List(); var orgs = user.Orgs?.Select(r => r.Id).ToList(); using (var uow = base.UnitWork.CreateContext()) { foreach (var item in orgs) { orgidlist.Add(item.ToString()); var allchilds = uow.SysOrg.AsQueryable().ToChildList(r => r.ParentId, item); if (allchilds.Count > 0) { orgidlist = orgidlist.Concat(allchilds.Select(r => r.Id.ToString())).ToList(); } } var list = await uow.MiVehiclePickup.AsQueryable() .WhereIF(req.begindate != null && req.enddate != null, p => p.InitiateTime >= req.begindate && p.InitiateTime < req.enddate) .WhereIF(req.status != null, p => p.Status == req.status) .LeftJoin((p, r) => p.ViolationReportId == r.Id) .Where((p, r) => orgidlist.Contains(r.HandlingUnit)) .LeftJoin((p, r, m) => r.MinePointId == m.Id) .LeftJoin((p, r, m, u) => p.Initiator == u.Id.ToString()) .WhereIF(!string.IsNullOrEmpty(req.pointname), (p, r, m, u) => m.Name.Contains(req.pointname)) .WhereIF(!string.IsNullOrEmpty(req.key), (p, r, m, u) => u.Name.Contains(req.key)) .OrderByDescending((p, r, m, u) => p.InitiateTime) .Select((p, r, m, u) => new { Id = p.Id.SelectAll(), InitiatorName = u.Name, PointName = m.Name }) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } else { var list = await base.Repository.AsQueryable() .WhereIF(req.begindate != null && req.enddate != null, p => p.InitiateTime >= req.begindate && p.InitiateTime < req.enddate) .WhereIF(req.status != null, p => p.Status == req.status) .LeftJoin((p, r) => p.ViolationReportId == r.Id) .LeftJoin((p, r, m) => r.MinePointId == m.Id) .LeftJoin((p, r, m, u) => p.Initiator == u.Id.ToString()) .WhereIF(!string.IsNullOrEmpty(req.pointname), (p, r, m, u) => m.Name.Contains(req.pointname)) .WhereIF(!string.IsNullOrEmpty(req.key), (p, r, m, u) => u.Name.Contains(req.key)) .OrderByDescending((p, r, m, u) => p.InitiateTime) .Select((p, r, m, u) => new { Id = p.Id.SelectAll(), InitiatorName = u.Name, PointName = m.Name }) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } /// /// app扫码查询当前停车场提车信息 /// /// /// public async Task>> Loadpickupinfo(string parkingid) { var list = await base.Repository.AsQueryable() .Where(p => p.Status == 1) .LeftJoin((p, r) => p.ViolationReportId == r.Id) .Where((p, r) => r.ParkingId == parkingid) .LeftJoin((p, r, m) => r.MinePointId == m.Id) .LeftJoin((p, r, m, u) => p.Initiator == u.Id.ToString()) .OrderByDescending(p => p.InitiateTime) .Select((p, r, m, u) => new { Id = p.Id.SelectAll(), InitiatorName = u.Name, PointName = m.Name }).ToListAsync(); return new Response> { Result = list }; } #endregion public async Task Get(string id) { using (var uow = base.UnitWork.CreateContext()) { var result = await base.Repository.AsQueryable() .Where(p => p.Id == id) .LeftJoin((p, r) => p.ViolationReportId == r.Id) .LeftJoin((p, r, m) => r.MinePointId == m.Id) .LeftJoin((p, r, m, u) => p.Initiator == u.Id.ToString()) .LeftJoin((p, r, m, u, u2) => p.Reviewer == u2.Id.ToString()) .Select((p, r, m, u, u2) => new { // 提车信息 PickupId = p.Id, p.Status, p.Initiator, InitiatorName = u.Name, p.InitiateTime, p.Reviewer, ReviewerName = u2.Name, p.ReviewTime, p.Remark, // 违法上报信息 ReportId = r.Id, r.Title, ReportStatus = r.Status, r.PartyName, r.PartyPhone, r.ViolationType, r.ProblemDescription, r.HandlingOpinion, r.HandlingUnit, r.Handler, r.HandlingTime, r.ReportTime, r.Reporter, r.ReportUnit, r.Lng, r.Lat, // 盗采点信息 MinePointId = m.Id, MinePointName = m.Name, m.CountyName, MinePointLng = m.Lng, MinePointLat = m.Lat, }) .FirstAsync(); if (result == null) return null; // 查询车辆信息 var vehicles = await uow.MiVehicle.AsQueryable() .Where(v => v.ViolationReportId == result.ReportId) .ToListAsync(); // 查询车辆图片 List vehicleImages = new List(); if (vehicles.Any()) { var vehicleIds = vehicles.Select(v => v.Id).ToList(); vehicleImages = await uow.MiVehicleImage.AsQueryable() .Where(vi => vehicleIds.Contains(vi.VehicleId)) .ToListAsync(); } // 查询现场照片 var scenePhotos = await uow.MiScenePhoto.AsQueryable() .Where(sp => sp.ViolationReportId == result.ReportId) .ToListAsync(); return new { PickupInfo = new { result.PickupId, result.Status, result.Initiator, result.InitiatorName, result.InitiateTime, result.Reviewer, result.ReviewerName, result.ReviewTime, result.Remark }, ViolationReport = new { result.ReportId, result.Title, result.ReportStatus, result.PartyName, result.PartyPhone, result.ViolationType, result.ProblemDescription, result.HandlingOpinion, result.HandlingUnit, result.Handler, result.HandlingTime, result.ReportTime, result.Reporter, result.ReportUnit, result.Lng, result.Lat }, MinePoint = string.IsNullOrEmpty(result.MinePointId) ? null : new { result.MinePointId, result.MinePointName, result.CountyName, result.MinePointLng, result.MinePointLat }, Vehicles = vehicles.Select(v => new { v.Id, v.LicensePlate, v.Type, v.Name, v.IdCard, v.Phone, Images = vehicleImages .Where(img => img.VehicleId == v.Id) .Select(img => new { img.Id, img.Image, img.Lng, img.Lat, img.Angle, img.CreateTime }) .ToList() }).ToList(), ScenePhotos = scenePhotos.Select(sp => new { sp.Id, sp.Image, sp.Lng, sp.Lat, sp.Angle, sp.CreateTime }).ToList() }; } } //public async Task Get(string id) //{ // var list = await base.Repository.AsQueryable() // .Where(p => p.Id == id) // .LeftJoin((p, r) => p.ViolationReportId == r.Id) // .LeftJoin((p, r, m) => r.MinePointId == m.Id) // .LeftJoin((p, r, m, u) => p.Initiator == u.Id.ToString()) // .OrderByDescending(p => p.InitiateTime) // .Select((p, r, m, u) => new // { // Id = p.Id.SelectAll(), // InitiatorName = u.Name, // Vehicle = SqlFunc.Subqueryable().Where(a => a.ViolationReportId == r.Id).Select(a => new // { // VehicleInfo = a.Id.SelectAll(), // image = SqlFunc.Subqueryable().Where(b => b.VehicleId == a.Id).ToList() // }), // PointName = m.Name // }).ToListAsync(); // return await Repository.GetByIdAsync(id); //} /// /// 添加 /// public async Task> Add(MiVehiclePickup model) { if (string.IsNullOrEmpty(model.ViolationReportId)) { throw new Exception("请指定违法信息"); } var user = _auth.GetCurrentUser(); using (var uow = base.UnitWork.CreateContext()) { model.Id = Guid.NewGuid().ToString(); model.InitiateTime = DateTime.Now; model.Status = 0; model.Initiator = user.User.Id.ToString(); await uow.MiVehiclePickup.InsertAsync(model); var violat = await base.Repository.ChangeRepository>().AsQueryable().Where(R => R.Id == model.ViolationReportId).FirstAsync(); violat.Status = 2; violat.StatusName = "已开单提车"; await uow.MiViolationReport.UpdateAsync(violat); var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } /// /// 删除 /// /// public async Task> Delete(List ids) { var flag = await Repository.DeleteAsync(r => ids.Contains(r.Id)); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 更新 /// /// public async Task> Update(MiVehiclePickup model) { bool flag = await base.Repository.UpdateAsync(model); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 审核 /// /// public async Task> PickUpAudit(PickUpAuditReq model) { var user = _auth.GetCurrentUser().User; var info = await base.Repository.AsQueryable().Where(R => R.Id == model.Id).FirstAsync(); var violat = await base.Repository.ChangeRepository>().AsQueryable().Where(R => R.Id == info.ViolationReportId).FirstAsync(); if (info != null) { using (var uow = base.UnitWork.CreateContext()) { if (model.Isagree) { info.Status = 1; } else { info.Status = 2; } info.ReviewComments = model.ReviewComments; info.Reviewer = user.Id.ToString(); info.ReviewTime = DateTime.Now; await uow.MiVehiclePickup.UpdateAsync(info); violat.Status = 3; violat.StatusName = "已审核"; await uow.MiViolationReport.UpdateAsync(violat); var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } else { throw new Exception("数据丢失"); } } /// /// 提车 /// /// /// /// public async Task> PickUpCar(PickupCar model) { var user = _auth.GetCurrentUser().User; var info = await base.Repository.AsQueryable().Where(R => R.Id == model.Id).FirstAsync(); var violat = await base.Repository.ChangeRepository>().AsQueryable().Where(R => R.Id == info.ViolationReportId).FirstAsync(); if (info != null) { using (var uow = base.UnitWork.CreateContext()) { info.Status = 3; await uow.MiVehiclePickup.UpdateAsync(info); violat.Status = 4; violat.StatusName = "已提车"; await uow.MiViolationReport.UpdateAsync(violat); var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } else { throw new Exception("数据丢失"); } } /// /// 事务示例 /// /// /// public async Task> AssignModule() { using (var uwo = UnitWork.CreateContext()) { //await uwo.SysRoleElement.InsertRangeAsync(model.ElementIds.Select(a => new SysRoleElement { RoleId = model.RoleId, ElementId = a }).ToList()); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } } }