Browse Source

[MODIFY]优化导出逻辑

dev-zzj
zhaozhenjing 2 months ago
parent
commit
cdec9117c6
  1. 28
      src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs
  2. 6
      src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs
  3. 8
      src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs
  4. 32
      src/2.services/ATS.NonCustodial.Application/Impl/Business/CaseManagements/AppCaseManagementService.cs
  5. 7
      src/2.services/ATS.NonCustodial.Application/Impl/Business/MaterialManager/AppFileAccessRecordsService.cs
  6. 8
      src/5.shared/ATS.NonCustodial.Domain.Shared/Common/Dtos/SupervisedPersonDto.cs

28
src/2.services/ATS.NonCustodial.Application/Impl/Admins/SMSService.cs

@ -34,14 +34,17 @@ namespace ATS.NonCustodial.Application.Impl.Admins
{
private readonly IEfRepository<AppSMS?, long> _appSMSRepository;
private readonly IEfRepository<AppUser, long> _appUserRepository;
public SMSService(
protected readonly IEfRepository<AppCaseManagement, long> _appCaseManagementRepository;
protected readonly IEfRepository<AppCaseSupervisedPerson, long> _appSupervisedPersonRepository;
public SMSService(IEfRepository<AppCaseManagement, long> appCaseManagementRepository,
IEfRepository<AppCaseSupervisedPerson, long> appSupervisedPersonRepository,
IEfRepository<AppSMS?, long> appSMSRepository,
IEfRepository<AppUser, long> appUserRepository)
{
_appSMSRepository = appSMSRepository;
_appUserRepository = appUserRepository;
_appCaseManagementRepository = appCaseManagementRepository;
_appSupervisedPersonRepository = appSupervisedPersonRepository;
}
@ -142,6 +145,20 @@ namespace ATS.NonCustodial.Application.Impl.Admins
[AllowAnonymous]
public async Task<IResultOutput> 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
};
// 发送短信

6
src/2.services/ATS.NonCustodial.Application/Impl/Business/AppEarlyWarningService.cs

@ -463,10 +463,8 @@ namespace ATS.NonCustodial.Application.Impl.Business
private async Task<IQueryable<AppEarlyWarning>> GetExpression(AppEarlyWarningGetPageInput pageInput, IQueryable<AppEarlyWarning?> 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;
}

8
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<AppPunchRecordListDto>(Mapper.ConfigurationProvider)

32
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
/// </remarks>
public async Task<IResultOutput> 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<IActionResult> 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<AppSupervisedPersonListexportDto>(Mapper.ConfigurationProvider)

7
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();

8
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
{
/// <summary>
/// 被监管人公告Dto
@ -26,5 +28,9 @@
/// 身份证
/// </summary>
public string? IdCard { get; set; }
/// <summary>
/// 案件进度
/// </summary>
public CaseProgressEnum? CaseProgress { get; set; }
}
}
Loading…
Cancel
Save