From cdec9117c62cb0908afe5f0c269054ebfe464231 Mon Sep 17 00:00:00 2001 From: zhaozhenjing Date: Fri, 24 Oct 2025 17:03:29 +0800 Subject: [PATCH] =?UTF-8?q?[MODIFY]=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Impl/Admins/SMSService.cs | 28 +++++++++++++--- .../Impl/Business/AppEarlyWarningService.cs | 6 ++-- .../Impl/Business/AppPunchRecordService.cs | 8 ++++- .../AppCaseManagementService.cs | 32 +++++++++++++++---- .../AppFileAccessRecordsService.cs | 7 +++- .../Common/Dtos/SupervisedPersonDto.cs | 8 ++++- 6 files changed, 71 insertions(+), 18 deletions(-) diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs index 48b2131..8eebef0 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs @@ -34,14 +34,17 @@ namespace ATS.NonCustodial.Application.Impl.Admins { private readonly IEfRepository _appSMSRepository; private readonly IEfRepository _appUserRepository; - - public SMSService( + protected readonly IEfRepository _appCaseManagementRepository; + protected readonly IEfRepository _appSupervisedPersonRepository; + public SMSService(IEfRepository appCaseManagementRepository, + IEfRepository appSupervisedPersonRepository, IEfRepository appSMSRepository, IEfRepository appUserRepository) { _appSMSRepository = appSMSRepository; _appUserRepository = appUserRepository; - + _appCaseManagementRepository = appCaseManagementRepository; + _appSupervisedPersonRepository = appSupervisedPersonRepository; } @@ -142,6 +145,20 @@ namespace ATS.NonCustodial.Application.Impl.Admins [AllowAnonymous] public async Task SendCheckCodeSMS(string phone, string ipAddress = "", string type = "CheckCode") { + + var personList = await _appUserRepository.AsQueryable(false, true).Where(w => w.Phone == phone).ToListAsync(); + + + if (personList.Count == 0) return ResultOutput.NotOk("请检查手机号是否输入正确"); + + var datalist = await (from a in _appCaseManagementRepository.AsQueryable(false, true) + .Where(w=>w.CaseProgress !=CaseProgressEnum.Closed) + join b in _appSupervisedPersonRepository.AsQueryable(false, true) + .Where(w=> personList.Select(s=>s.Id).ToList().Contains(w.SupervisedPersonId)) + on a.Id equals b.CaseId + select new { b.SupervisedPersonId }).ToListAsync(); + if (datalist.Count == 0) return ResultOutput.NotOk("该手机号不存在运行中的案件"); + // 检查是否可以发送(一分钟内只能发送一次) if (!await CanSendCodeAsync(phone)) { @@ -151,7 +168,7 @@ namespace ATS.NonCustodial.Application.Impl.Admins // 生成随机验证码(6位数字) var random = new Random(); var code = random.Next(100000, 999999).ToString(); - + var name = personList.Where(w => datalist.Select(s => s.SupervisedPersonId).Contains(w.Id))?.FirstOrDefault().UserName??""; // 创建验证码记录 var addSMS = new AppSMS { @@ -160,7 +177,8 @@ namespace ATS.NonCustodial.Application.Impl.Admins sendTime = DateTime.Now, expiresTime = DateTime.Now.AddMinutes(5), // 5分钟有效期 ipAddress = ipAddress, - type = type + type = type, + receiver = name }; // 发送短信 diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs index 3ef498c..c42ec81 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs @@ -463,10 +463,8 @@ namespace ATS.NonCustodial.Application.Impl.Business private async Task> GetExpression(AppEarlyWarningGetPageInput pageInput, IQueryable query) { var limits = User.limits; - var IsAdmin = User.IsAdmin; var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true) - .WhereIf((!IsAdmin),w => limits.Contains(w.UnitId.ToString())) - .ToListAsync(); + .Where(w => limits.Contains(w.UnitId.ToString())).ToListAsync(); var caseIds = selectLimits.Select(w => w.CaseId).Distinct().ToList(); //var caseIds = await (await base.GetCurrentUserCaseListAsync()).Select(w => w.AppCaseManagement.Id).ToListAsync(); @@ -484,7 +482,7 @@ namespace ATS.NonCustodial.Application.Impl.Business { var supervisorCaseList = await _appCaseSupervisorRepository.AsQueryable(false, true) .Where(w => w.SupervisorId == User.Id).Select(s => s.CaseId).ToListAsync(); - express = express.Where(w => supervisorCaseList.Contains(w.Id)); + express = express.Where(w => supervisorCaseList.Contains(w.CaseId)); } return express; } diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs index 716229e..57d3a22 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs @@ -188,12 +188,18 @@ namespace ATS.NonCustodial.Application.Impl.Business .ToListAsync(); var caseIds = selectLimits.Select(w => w.CaseId).Distinct().ToList(); + var userRole = await _userService.IsAdmin(null); + var supervisorCaseList = await _appCaseSupervisorRepository.AsQueryable(false, true) + .Where(w => w.SupervisorId == User.Id).Select(s => s.CaseId).ToListAsync(); + + var intersection1 = supervisorCaseList.Intersect(supervisorCaseList).ToList(); + // var caseIds = await (await base.GetCurrentUserCaseListAsync()).Select(w => w.AppCaseManagement.Id).ToListAsync(); //var list= await base._appSupervisedPersonRepository.AsQueryable(false, true).Where(q=> caseIds.Contains(q.CaseId)).ToListAsync(); var data = await _appPunchRecordStatisticsRepository .AsQueryable(false, true) - .Where(w => caseIds.Contains(w.CaseId)) + .Where(w => intersection1.Contains(w.CaseId)) .WhereIf(!string.IsNullOrEmpty(input.name), q => q.SupervisedPersonName.Contains(input.name)) .OrderByDescending(r => r.CreatedTime) .ProjectTo(Mapper.ConfigurationProvider) diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/CaseManagements/AppCaseManagementService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/CaseManagements/AppCaseManagementService.cs index da1426d..3449dfb 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/CaseManagements/AppCaseManagementService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/CaseManagements/AppCaseManagementService.cs @@ -31,6 +31,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using SixLabors.ImageSharp; +using System.Linq; using Yitter.IdGenerator; @@ -1477,19 +1478,30 @@ namespace ATS.NonCustodial.Application.Impl.Business.CaseManagements /// public async Task GetSupervisedPersonList() { + var userRole = await _userService.IsAdmin(null); + var supervisorCaseList = await _appCaseSupervisorRepository.AsQueryable(false, true) + .Where(w => w.SupervisorId == User.Id).Select(s => s.CaseId).ToListAsync(); + var position = await _appDictionaryService.GetDicByDicId(User.PositionId); + var rtn = await (from c in _appCaseManagementRepository.AsQueryable(false, true) join spr in _appSupervisedPersonRepository.AsQueryable(false, true) on c.Id equals spr.CaseId //join device in _appDeviceManagementRepository.AsQueryable(false, true) on spr.SupervisedPersonId equals device.SupervisedPersonId into td //from d in td.DefaultIfEmpty() //where c.CaseProgress != CaseProgressEnum.Closed && spr.IdCard != null && d == null where c.CaseProgress != CaseProgressEnum.Closed && spr.IdCard != null + select new SupervisedPersonDto() { SupervisedPersonId = spr.SupervisedPersonId, SupervisedPersonName = spr.SupervisedPersonName, CaseId = c.Id, - IdCard = spr.IdCard - }).ToListAsync(); + IdCard = spr.IdCard, + CaseProgress = c.CaseProgress + }) + .WhereIf(!userRole.IsAdmin,w=> supervisorCaseList.Contains(w.CaseId)) + .WhereIf(position.Code== "police", w=>w.CaseProgress== CaseProgressEnum.Pending|| w.CaseProgress == CaseProgressEnum.InExecution) + .WhereIf(position.Code == "inquisitor", w => w.CaseProgress == CaseProgressEnum.Examination) + .WhereIf(position.Code == "judge", w => w.CaseProgress== CaseProgressEnum.Hear).ToListAsync(); //去重 rtn = rtn.Distinct((x, y) => x.SupervisedPersonId == y.SupervisedPersonId).ToList(); @@ -1591,6 +1603,7 @@ namespace ATS.NonCustodial.Application.Impl.Business.CaseManagements var caseIds = await (await base.GetCurrentUserCaseListAsync()).Select(w => w.AppCaseManagement.Id).ToListAsync(); query = query + .Where(w=> caseIds.Contains(w.Id)) .WhereIf(pageInput.CaseIds.IsNotNullOrEmpty(), w => pageInput.CaseIds.Contains(w.Id)) .WhereIf(pageInput.CaseName.NotNull(), a => a.Name.Contains(pageInput.CaseName)) .WhereIf(pageInput.CaseTypeId != null, a => a.CaseTypeId == pageInput.CaseTypeId) @@ -1979,8 +1992,11 @@ namespace ATS.NonCustodial.Application.Impl.Business.CaseManagements var limits = User.limits; var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true) .Where(w => limits.Contains(w.UnitId.ToString())) + .Select(s=>s.CaseId) .ToListAsync(); - input.CaseIds = selectLimits.Select(w => w.CaseId).Distinct().ToList(); + + + input.CaseIds = input.CaseIds?.Count>0 ? input.CaseIds.Intersect(selectLimits).ToList() : selectLimits.Distinct().ToList(); var express = await GetExpression(input, _appCaseManagementRepository.AsQueryable(false, true)); @@ -2014,17 +2030,21 @@ namespace ATS.NonCustodial.Application.Impl.Business.CaseManagements public async Task Getuserexport(GetSupervisedPersonPage input) { input.PageIndex = 1; - input.PageSize = 999999; + input.PageSize = 9999; var limits = User.limits; var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true) .Where(w => limits.Contains(w.UnitId.ToString())) .ToListAsync(); var caseIds = selectLimits.Select(w => w.CaseId).Distinct().ToList(); + var userRole = await _userService.IsAdmin(null); + var supervisorCaseList = await _appCaseSupervisorRepository.AsQueryable(false, true) + .Where(w => w.SupervisorId == User.Id).Select(s => s.CaseId).ToListAsync(); + var intersection1 = supervisorCaseList.Intersect(caseIds).ToList(); - //var caseIds = await (await base.GetCurrentUserCaseListAsync()).Select(w => w.AppCaseManagement.Id).ToListAsync(); + var caselist = await (await base.GetCurrentUserCaseListAsync()).Select(w => new { w.AppCaseManagement.Id, w.AppCaseManagement.Name }).ToListAsync(); var data = await _appSupervisedPersonRepository.AsQueryable(false, true) - .Where(q => caseIds.Contains(q.CaseId)) + .Where(q => intersection1.Contains(q.CaseId)) .WhereIf(input.name.NotNull(), q => q.SupervisedPersonName.Contains(input.name)) .OrderByDescending(r => r.CreatedTime) .ProjectTo(Mapper.ConfigurationProvider) diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/MaterialManager/AppFileAccessRecordsService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/MaterialManager/AppFileAccessRecordsService.cs index 32d2e02..fa1d920 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/MaterialManager/AppFileAccessRecordsService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/MaterialManager/AppFileAccessRecordsService.cs @@ -212,9 +212,14 @@ namespace ATS.NonCustodial.Application.Impl.Business.MaterialManager .Where(w => limits.Contains(w.UnitId.ToString())) .ToListAsync(); var caseIds = selectLimits.Select(w => w.CaseId).Distinct().ToList(); + var userRole = await _userService.IsAdmin(null); + var supervisorCaseList = await _appCaseSupervisorRepository.AsQueryable(false, true) + .Where(w => w.SupervisorId == User.Id).Select(s => s.CaseId).ToListAsync(); + + var intersection1 = supervisorCaseList.Intersect(caseIds).ToList(); //var caseIds = await (await base.GetCurrentUserCaseListAsync()).Select(w => w.AppCaseManagement.Id).ToListAsync(); - var SupervisedPersonIds = await base._appSupervisedPersonRepository.AsQueryable(false, true).Where(q => caseIds.Contains(q.CaseId)).Select(q => q.SupervisedPersonId).ToListAsync(); + var SupervisedPersonIds = await base._appSupervisedPersonRepository.AsQueryable(false, true).Where(q => intersection1.Contains(q.CaseId)).Select(q => q.SupervisedPersonId).ToListAsync(); //获取监管人查阅次数 var queryable = await GetExpression(input, _appFileAccessRecordsRepository.AsQueryable(false, true).Where(q => SupervisedPersonIds.Contains(q.SupervisedPersonId))) .ToListAsync(); diff --git a/src/5.shared/ATS.NonCustodial.Domain.Shared/Common/Dtos/SupervisedPersonDto.cs b/src/5.shared/ATS.NonCustodial.Domain.Shared/Common/Dtos/SupervisedPersonDto.cs index 1c76cc7..03e9633 100644 --- a/src/5.shared/ATS.NonCustodial.Domain.Shared/Common/Dtos/SupervisedPersonDto.cs +++ b/src/5.shared/ATS.NonCustodial.Domain.Shared/Common/Dtos/SupervisedPersonDto.cs @@ -1,4 +1,6 @@ -namespace ATS.NonCustodial.Domain.Shared.Common.Dtos +using ATS.NonCustodial.Domain.Shared.Enums; + +namespace ATS.NonCustodial.Domain.Shared.Common.Dtos { /// /// 被监管人公告Dto @@ -26,5 +28,9 @@ /// 身份证 /// public string? IdCard { get; set; } + /// + /// 案件进度 + /// + public CaseProgressEnum? CaseProgress { get; set; } } } \ No newline at end of file