using DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Office.CustomUI; using Infrastructure; using Infrastructure.Helpers; using Microsoft.AspNetCore.Hosting; using NPOI.SS.Util; using OpenAuth.App.BaseApp.Base; using OpenAuth.App.Common; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.App.Response; using OpenAuth.App.ServiceApp.MiManager.Request; using OpenAuth.App.ServiceApp.Request; using OpenAuth.App.ServiceApp.Response; using OpenAuth.Repository; using OpenAuth.Repository.Domain; using SqlSugar; using static NPOI.HSSF.Util.HSSFColor; namespace OpenAuth.App { public class MiViolationReportApp : SqlSugarBaseApp { private readonly IWebHostEnvironment _env; private MiWordHelper _helper; public MiViolationReportApp( ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth, IWebHostEnvironment env, MiWordHelper helper ) : base(unitWork, repository, auth) { _env = env; _helper = helper; } #region 查询 /// /// 分页 /// public async Task>>> LoadAllPage(MiviolationReq req) { RefAsync totalCount = 0; var user = _auth.GetCurrentUser(); var users = user.User; var level = user.Orgs?.Min(x => x.Level); //如果不是超级管理员 if (user != null && (users.Id == -1 || level == 0)) { var list = await base.Repository.AsQueryable() .Where(p => p.IsDelete == false) .WhereIF(req.begindate != null && req.enddate != null, p => p.ReportTime >= req.begindate && p.ReportTime < req.enddate) .WhereIF(req.status != null, p => p.Status == req.status) .WhereIF(!string.IsNullOrEmpty(req.key), p => p.Title.Contains(req.key)) .WhereIF(req.viotype != null, p => p.ViolationType == req.viotype) .LeftJoin((p, m) => p.MinePointId == m.Id) .LeftJoin((p, m, u) => p.Reporter == u.Id.ToString()) .LeftJoin((p, m, u, s) => p.Handler == s.Id.ToString()) .LeftJoin((p, m, u, s, o) => p.ReportUnit == o.Id.ToString()) .LeftJoin((p, m, u, s, o, d) => p.HandlingUnit == d.Id.ToString()) .WhereIF(!string.IsNullOrEmpty(req.pointname), (p, m, u, s, o, d) => m.Name.Contains(req.pointname)) .OrderBy((p, m, u, s, o, d) => p.Status) .OrderByDescending((p, m, u, s, o, d) => p.ReportTime) .Select((p, m, u, s, o, d) => new { Id = p.Id.SelectAll(), ReportUserName = u.Name, PointName = m.Name, OrgName = o.Name, HandelUserName = s.Name, HandelUnit = d.Name }) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } else { if (user.Orgs.Count == 0 || level == null) { throw new Exception("无权限查看数据"); } else { //查询所有子部门 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.MiViolationReport.AsQueryable() .Where(p => p.IsDelete == false) .WhereIF(req.begindate != null && req.enddate != null, p => p.ReportTime >= req.begindate && p.ReportTime < req.enddate) .WhereIF(req.status != null, p => p.Status == req.status) .WhereIF(!string.IsNullOrEmpty(req.key), p => p.Title.Contains(req.key)) .WhereIF(req.viotype != null, p => p.ViolationType == req.viotype) .Where(p => orgidlist.Contains(p.ReportUnit) || orgidlist.Contains(p.HandlingUnit) || p.Reporter == user.User.Id.ToString() || p.Handler == user.User.Id.ToString()) .LeftJoin((p, m) => p.MinePointId == m.Id) .LeftJoin((p, m, u) => p.Reporter == u.Id.ToString()) .LeftJoin((p, m, u, s) => p.Handler == s.Id.ToString()) .LeftJoin((p, m, u, s, o) => p.ReportUnit == o.Id.ToString()) .LeftJoin((p, m, u, s, o, d) => p.HandlingUnit == d.Id.ToString()) .WhereIF(!string.IsNullOrEmpty(req.pointname), (p, m, u, s, o, d) => m.Name.Contains(req.pointname)) .OrderBy((p, m, u, s, o, d) => p.Status) .OrderByDescending((p, m, u, s, o, d) => p.ReportTime) .Select((p, m, u, s, o, d) => new { Id = p.Id.SelectAll(), ReportUserName = u.Name, PointName = m.Name, OrgName = o.Name, HandelUserName = s.Name, HandelUnit = d.Name }) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = list, Total = totalCount } }; } } } } #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.ReportUnit == r.Id.ToString()) .LeftJoin((p, r, m) => p.MinePointId == m.Id) .LeftJoin((p, r, m, pk) => p.ParkingId == pk.Id) .LeftJoin((p, r, m, pk, u) => p.Reporter == u.Id.ToString()) .LeftJoin((p, r, m, pk, u, u2) => p.Handler == u2.Id.ToString()) .LeftJoin((p, r, m, pk, u, u2, o) => p.HandlingUnit == o.Id.ToString()) .Select((p, r, m, pk, u, u2, o) => new { // 提车信息 ReporterName = u.Name, HandlerName = u2.Name, ReportUnitName = r.Name, HandUnitName = o.Name, // 违法上报信息 p.Id, p.Title, ReportStatus = p.Status, p.PartyName, p.PartyPhone, p.ViolationType, p.ProblemDescription, p.HandlingOpinion, p.HandlingUnit, p.Handler, p.HandlingTime, p.ReportTime, p.Reporter, p.ReportUnit, p.Lng, p.Lat, p.StatusName, p.ViolationTypeName, p.MineralTypes, p.ReviewTime, p.ReviewerName, p.ReviewComments, p.ReviewerSignature, p.SeReviewTime, p.SeReviewerName, p.SeReviewComments, p.SeReviewerSignature, // 盗采点信息 MinePointId = m.Id, MinePointName = m.Name, m.CountyName, MinePointLng = m.Lng, MinePointLat = m.Lat, // 停车场信息 ParkingId = pk.Id, ParkingCode = pk.Num, ParkingName = pk.Name, pk.Phone, pk.Address }) .FirstAsync(); if (result == null) return null; // 查询车辆信息 var vehicles = await uow.MiVehicle.AsQueryable() .Where(v => v.ViolationReportId == result.Id) .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.Id) .ToListAsync(); //查询其他人员 var otherPersons = await uow.MiViolationUsers.AsQueryable() .Where(r => r.ViolationReportId == result.Id) .ToListAsync(); // 查询其他人员图片 List personImages = new List(); if (otherPersons.Any()) { var personIds = otherPersons.Select(v => v.Id).ToList(); personImages = await uow.MiOtherpersonImage.AsQueryable() .Where(vi => personIds.Contains(vi.PersonId)) .ToListAsync(); } return new { ViolationReport = new { result.Id, result.Title, Status = result.ReportStatus, result.PartyName, result.PartyPhone, result.ViolationType, result.ProblemDescription, result.HandlingOpinion, result.HandlingUnit, result.Handler, result.HandlingTime, result.ReportTime, result.Reporter, result.ReporterName, result.HandlerName, result.ReportUnit, result.ReportUnitName, result.Lng, result.Lat, result.StatusName, result.ViolationTypeName, result.HandUnitName, result.MineralTypes, result.ReviewTime, result.ReviewerName, result.ReviewComments, result.ReviewerSignature, result.SeReviewTime, result.SeReviewerName, result.SeReviewComments, result.SeReviewerSignature, }, MinePoint = string.IsNullOrEmpty(result.MinePointId) ? null : new { result.MinePointId, result.MinePointName, result.CountyName, result.MinePointLng, result.MinePointLat }, Parking = string.IsNullOrEmpty(result.ParkingId) ? null : new { result.ParkingId, result.ParkingCode, result.ParkingName, result.Phone, result.Address }, Vehicles = vehicles.Select(v => new { v.Id, v.LicensePlate, v.Type, v.Name, v.IdCard, v.Phone, v.TypeName, v.Remark, v.State, VehicleImages = 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(), OtherPersons = otherPersons.Select(v => new { v.Id, v.Name, v.Phone, v.RelationShip, PersonImages = personImages .Where(img => img.PersonId == v.Id) .Select(img => new { img.Id, img.Image, img.Lng, img.Lat, img.Angle, img.CreateTime }) .ToList() }).ToList() }; } } /// /// 添加 /// public async Task> Add(MiViolationReport model) { var flag = await Repository.InsertAsync(model); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } /// /// 删除 /// /// public async Task> Delete(List ids) { using (var uow = base.UnitWork.CreateContext()) { await uow.MiViolationReport.UpdateSetColumnsTrueAsync(a => new MiViolationReport { IsDelete = true }, a => ids.Contains(a.Id)); var flag = uow.Commit(); return new Response { Result = flag, Message = flag ? "success" : "error" }; } } /// /// 更新 /// /// public async Task> Update(MiViolationReportRequest request) { using (var uwo = UnitWork.CreateContext()) { var user = _auth.GetCurrentUser(); var org = user.Orgs.FirstOrDefault(); if (org == null) { throw new Exception("请先分配部门"); } if (string.IsNullOrEmpty(request.Id)) { throw new Exception("数据id错误,请重新数据"); } await uwo.MiScenePhoto.DeleteAsync(r => r.ViolationReportId == request.Id); //删除现场照片 await uwo.MiViolationUsers.DeleteAsync(r => r.ViolationReportId == request.Id); //删除其他人员 await uwo.MiOtherpersonImage.DeleteAsync(r => r.ViolationReportId == request.Id); //删除其他人员 await uwo.MiSeizureDocument.DeleteAsync(r => r.ViolationReportId == request.Id); //删除扣押财务信息 await uwo.MiVehicleImage.DeleteAsync(r => r.ViolationReportId == request.Id); //删除车辆图片 await uwo.MiVehicle.DeleteAsync(r => r.ViolationReportId == request.Id); //删除车辆信息 //上报信息 var model = request.MapTo(); model.Status = 0; model.StatusName = "待处理"; //现场照片 var photos = request.SencePhotos.MapToList(); photos.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.CreateTime = DateTime.Now; }); //其他人员 var personList = new List(); var personImageList = new List(); foreach (var item in request.OtherPersons) { var person = item.MapTo(); person.Id = Guid.NewGuid().ToString(); person.ViolationReportId = model.Id; //人员图片 var images = item.Images.MapToList(); images.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.PersonId = person.Id; a.CreateTime = DateTime.Now; personImageList.Add(a); }); personList.Add(person); } //var others = request.OtherPersons.MapToList(); //others.ForEach(a => //{ // a.Id = Guid.NewGuid().ToString(); // a.ViolationReportId = model.Id; //}); //车辆信息 var vehicleList = new List(); var vehicleImageList = new List(); foreach (var item in request.Vehicles) { var vehicle = item.MapTo(); vehicle.Id = Guid.NewGuid().ToString(); vehicle.ViolationReportId = model.Id; vehicle.CreateTime = DateTime.Now; vehicle.State = 0; //初始默认未提车 //车辆图片 var images = item.VehicleImages.MapToList(); images.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.ParkingId = model.ParkingId; a.VehicleId = vehicle.Id; a.CreateTime = DateTime.Now; vehicleImageList.Add(a); }); vehicleList.Add(vehicle); } //扣押财务单信息 MiSeizureDocument mr = new MiSeizureDocument(); mr.Id = Guid.NewGuid().ToString(); mr.CreatedAt = DateTime.Now; mr.CreatedBy = user.User.Id.ToString(); mr.Year = DateTime.Now.Year.ToString(); mr.SeizureDate = DateTime.Now; var mrinfo = base.Repository.ChangeRepository>().AsQueryable().ToList(); if (mrinfo.Count == 0) { mr.SerialNumber = 1; } else { mr.SerialNumber = (int)mrinfo.Max(r => r.SerialNumber) + 1; } mr.ViolationReportId = model.Id; mr.ViolationType = model.ViolationTypeName; mr.Party = model.PartyName; //查询巡查点信息 var point = await uwo.MiMinePoint.AsQueryable().Where(r => r.Id == model.MinePointId).FirstAsync(); if (point != null) { mr.ClueLocation = point.CountyName + point.StreetName + point.CommunityName + point.Name; } var type = vehicleList .GroupBy(r => r.TypeName) .Select(g => new { name = g.Key, count = g.Count() }).ToList(); string items = ""; foreach (var item in type) { items += item.name + "*" + item.count + ";"; } mr.Items = items; //此处创建word并上传,调用新方法 string wordPath = _helper.GenerateSeizureDocumentWord(mr, _env); mr.FilePath = wordPath; // 设置文件路径 await uwo.MiViolationReport.UpdateAsync(model); await uwo.MiScenePhoto.InsertRangeAsync(photos); await uwo.MiViolationUsers.InsertRangeAsync(personList); //其他人员 await uwo.MiOtherpersonImage.InsertRangeAsync(personImageList); //其他人员图片 await uwo.MiVehicle.InsertRangeAsync(vehicleList); await uwo.MiVehicleImage.InsertRangeAsync(vehicleImageList); await uwo.MiSeizureDocument.InsertAsync(mr); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } /// /// 事务示例 /// /// /// 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" }; } } /// /// 上报违法 /// /// /// public async Task> Report(MiViolationReportRequest request) { using (var uwo = UnitWork.CreateContext()) { var user = _auth.GetCurrentUser(); var org = user.Orgs.FirstOrDefault(); if (org == null) { throw new Exception("请先分配部门"); } //上报信息 var model = request.MapTo(); model.Id = Guid.NewGuid().ToString(); model.Status = 0; model.StatusName = "待处理"; model.ReportTime = DateTime.Now; model.Reporter = user.User.Id.ToString(); model.IsDelete = false; model.ReportUnit = org.Id.ToString(); //现场照片 var photos = request.SencePhotos.MapToList(); photos.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.CreateTime = DateTime.Now; }); //其他人员 var personList = new List(); var personImageList = new List(); foreach (var item in request.OtherPersons) { var person = item.MapTo(); person.Id = Guid.NewGuid().ToString(); person.ViolationReportId = model.Id; //人员图片 var images = item.Images.MapToList(); images.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.PersonId = person.Id; a.CreateTime = DateTime.Now; personImageList.Add(a); }); personList.Add(person); } //其他人员 //var others = request.OtherPersons.MapToList(); //others.ForEach(a => //{ // a.Id = Guid.NewGuid().ToString(); // a.ViolationReportId = model.Id; //}); //车辆信息 var vehicleList = new List(); var vehicleImageList = new List(); foreach (var item in request.Vehicles) { var vehicle = item.MapTo(); vehicle.Id = Guid.NewGuid().ToString(); vehicle.ViolationReportId = model.Id; vehicle.CreateTime = DateTime.Now; vehicle.State = 0; //初始默认未提车 //车辆图片 var images = item.VehicleImages.MapToList(); images.ForEach(a => { a.Id = Guid.NewGuid().ToString(); a.ViolationReportId = model.Id; a.ParkingId = model.ParkingId; a.VehicleId = vehicle.Id; a.CreateTime = DateTime.Now; vehicleImageList.Add(a); }); vehicleList.Add(vehicle); } //扣押财务单信息 MiSeizureDocument mr = new MiSeizureDocument(); mr.Id = Guid.NewGuid().ToString(); mr.CreatedAt = DateTime.Now; mr.CreatedBy = user.User.Id.ToString(); mr.Year = DateTime.Now.Year.ToString(); mr.SeizureDate = DateTime.Now; var mrinfo = base.Repository.ChangeRepository>().AsQueryable().ToList(); if (mrinfo.Count == 0) { mr.SerialNumber = 1; } else { mr.SerialNumber = (int)mrinfo.Max(r => r.SerialNumber) + 1; } mr.ViolationReportId = model.Id; mr.ViolationType = model.ViolationTypeName; mr.Party = model.PartyName; //查询巡查点信息 var point = await uwo.MiMinePoint.AsQueryable().Where(r => r.Id == model.MinePointId).FirstAsync(); if (point != null) { mr.ClueLocation = point.CountyName + point.StreetName + point.CommunityName + point.Name; } var type = vehicleList .GroupBy(r => r.TypeName) .Select(g => new { name = g.Key, count = g.Count() }).ToList(); string items = ""; foreach (var item in type) { items += item.name + "*" + item.count + ";"; } mr.Items = items; //此处创建word并上传,调用新方法 string wordPath = _helper.GenerateSeizureDocumentWord(mr, _env); mr.FilePath = wordPath; // 设置文件路径 await uwo.MiViolationReport.InsertAsync(model); await uwo.MiScenePhoto.InsertRangeAsync(photos); await uwo.MiViolationUsers.InsertRangeAsync(personList); //其他人员 await uwo.MiOtherpersonImage.InsertRangeAsync(personImageList); //其他人员图片 await uwo.MiVehicle.InsertRangeAsync(vehicleList); await uwo.MiVehicleImage.InsertRangeAsync(vehicleImageList); await uwo.MiSeizureDocument.InsertAsync(mr); var flag = uwo.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } public async Task> ReportHandle(HandleInfo info) { var user = _auth.GetCurrentUser().User; var level = _auth.GetCurrentUser().Orgs.Min(a => a.Level); //路径 var org = _auth.GetCurrentUser().Orgs.FirstOrDefault(); if (org == null) { throw new Exception("请先分配部门"); } int count = await base.Repository.AsUpdateable().SetColumns( a => new MiViolationReport { HandlingOpinion = info.HandlingOpinion, HandlingTime = DateTime.Now, HandlingUnit = org.Id.ToString(), Handler = user.Id.ToString(), Status = 5, StatusName = "已处理" }).Where(a => a.Id == info.Id).ExecuteCommandAsync(); return new Response { Result = count > 0, Message = count > 0 ? "success" : "error" }; } #region 扣押单信息 /// /// 扣押设备审核 (已根据权限修改) /// /// public async Task> ReportAudit(ReportAuditReq model) { var user = _auth.GetCurrentUser(); var level = user.Orgs.ToList(); if (level.Count == 0) { throw new Exception("暂无权限"); } else { //查询违法上报信息 var info = await base.Repository.AsQueryable().Where(R => R.Id == model.Id).FirstAsync(); if (info != null) { using (var uow = base.UnitWork.CreateContext()) { var userlevel = level.Min(x => x.Level); if (userlevel == 1) //初审 { if (info.Status != 0) { throw new Exception("不符合初审条件"); } if (model.Isagree) { info.Status = 1; } else { info.Status = 2; } info.ReviewComments = model.ReviewComments; info.Reviewer = user.User.Id.ToString(); info.ReviewTime = DateTime.Now; info.ReviewerSignature = user.User.Signature; info.ReviewerName = user.User.Name; await uow.MiViolationReport.UpdateAsync(info); } else { if (userlevel == 0) { if (info.Status != 1) { throw new Exception("不符合复审条件"); } if (model.Isagree) { info.Status = 3; } else { info.Status = 4; } info.SeReviewComments = model.ReviewComments; info.SeReviewer = user.User.Id.ToString(); info.SeReviewTime = DateTime.Now; info.SeReviewerSignature = user.User.Signature; info.SeReviewerName = user.User.Name; await uow.MiViolationReport.UpdateAsync(info); } else { throw new Exception("暂无权限"); } } var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } else { throw new Exception("数据丢失"); } } } /// /// 根据id查询解除扣押单信息 /// /// 违法上报id /// public async Task GetSeizureDocument(string reportid) { using (var uow = UnitWork.CreateContext()) { var item = await uow.MiSeizureDocument.AsQueryable() .Where(p => p.ViolationReportId == reportid) .OrderByDescending(p => p.CreatedAt) .Select((p) => new { Id = p.Id.SelectAll() }).FirstAsync(); var result = new { item.Id, item.Year, Number = item.SerialNumber.ToString("D3"), // 格式化为 "002" item.Party, item.ClueLocation, item.ViolationType, item.SeizureDate, item.Items, item.CreatedAt, item.CreatedBy, item.ViolationReportId }; return result; } } #endregion } }