Browse Source

[MODIFY]增加导出功能

dev-zzj
zhaozhenjing 2 months ago
parent
commit
60f16c0469
  1. 196
      src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs
  2. 19
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs
  3. 37
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Input/NotClockedInput.cs
  4. 68
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/NotClockExportDto.cs
  5. 60
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/NotClockListDto.cs
  6. 64
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationStatisticsExportDto.cs
  7. 4
      src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationStatisticsListDto.cs

196
src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs

@ -1,12 +1,7 @@
using ATS.NonCustodial.Application.Base;
using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.AppDictionaries;
using ATS.NonCustodial.Application.Contracts.Interfaces.Admins.User;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppCaseManagement;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppCaseManagement.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppCaseManagement.Output;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppEarlyWarnings;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppEarlyWarnings.Output;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.IM.Notifies;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Input;
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Output;
@ -21,13 +16,12 @@ using ATS.NonCustodial.Shared.Common.Dtos;
using ATS.NonCustodial.Shared.Common.UnifiedResults;
using ATS.NonCustodial.Shared.Extensions;
using ATS.NonCustodial.Shared.Extensions.Collection;
using ATS.NonCustodial.Shared.Helpers;
using AutoMapper.QueryableExtensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NPOI.SS.Formula.Functions;
using StackExchange.Profiling.Internal;
using System.Collections.Generic;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace ATS.NonCustodial.Application.Impl.Business
{
@ -45,6 +39,7 @@ namespace ATS.NonCustodial.Application.Impl.Business
private readonly IAppDictionaryService _appDictionaryService;
private readonly IEfRepository<AppEarlyWarning, long> _appEarlyWarningRepository;
private readonly IUserService _userService;
private readonly IEfRepository<AppCaseSupervisedPerson, long> _appSupervisedPersonRepository;
/// <summary>
///
@ -72,6 +67,7 @@ namespace ATS.NonCustodial.Application.Impl.Business
_appDictionaryService = appDictionaryService;
_appEarlyWarningRepository = appEarlyWarningRepository;
_userService = userService;
_appSupervisedPersonRepository = appCaseSupervisedPersonRepository;
}
#endregion Identity
@ -157,8 +153,69 @@ namespace ATS.NonCustodial.Application.Impl.Business
return ResultOutput.Ok(pageResult);
}
/// <summary>
/// 违规记录统计导出
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> ViolationStatisticsExportAsync(ViolationStatisticsPageInput input)
{
//获取当前用户权限下的案件ids
var limits = User.limits;
var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true)
.Where(w => limits.Contains(w.UnitId.ToString()))
.ToListAsync();
var caseIdList = selectLimits.Select(w => w.CaseId).Distinct().ToList();
//根据当前登录人查看其手里的案件被监管人
var spList = await base.GetCurrentUserCaseListAsync();
//获取案件信息
var casebaselist = await spList.Where(q => q.AppCaseManagement != null && caseIdList.Contains(q.AppCaseManagement.Id)).Select(q => q.AppCaseManagement).ToListAsync();
//获取案件id
var casebase = await spList
.Where(q => q.AppCaseManagement != null && caseIdList.Contains(q.AppCaseManagement.Id))
.WhereIf(input.CaseProgress != null, a => a.AppCaseManagement.CaseProgress == input.CaseProgress).Select(q => q.AppCaseManagement.Id).ToListAsync();
var spIds = await spList.Where(q => q.AppCaseSupervisedPerson != null && casebase.Contains(q.AppCaseSupervisedPerson.CaseId)).Select(w => w.AppCaseSupervisedPerson!.SupervisedPersonId).ToListAsync();
//查询记录
var query = await _appEarlyWarningRepository
.AsQueryable(false, true).Where(q => spIds.Contains(q.SupervisedPersonId))
.WhereIf(input.CaseId != default, a => a.CaseId == input.CaseId)
.WhereIf(input.SupervisedPersonId != default, w => w.SupervisedPersonId == input.SupervisedPersonId)
.WhereIf(input.SupervisedPersonName.HasValue(), w => w.SupervisedPersonName.Contains(input.SupervisedPersonName))
.WhereIf(input.TimeSearch?.BeginTime != null && input.TimeSearch?.EndTime != null, q => q.CreatedTime >= input.TimeSearch.BeginTime && q.CreatedTime <= $"{input.TimeSearch.EndTime.Value.ToString("yyyy-MM-dd")} 23:59:59".ToDateTime())
.ToListAsync();
//分组
var dataGroup = query
.GroupBy(w => new { w.CaseId, w.SupervisedPersonId, w.CaseName, w.SupervisedPersonName });
var pageData = dataGroup.Skip((input.PageIndex - 1) * input.PageSize)
.Take(input.PageSize);
//处理身份证字段
var userList = await _userService.GetAllByConditionAsync(new BatchIdsInput()
{
Ids = pageData.Select(w => w.Key.SupervisedPersonId).ToList()
});
//(0:待执行 1:侦查阶段 2:已结束,3:审查起诉阶段,4:审理阶段)
var dataList = pageData.Select(data => new ViolationStatisticsExportDto()
{
CaseId = data.Key.CaseId,
SupervisedPersonId = data.Key.SupervisedPersonId,
CaseName = casebaselist.Where(q => q.Id == data.Key.CaseId).First()?.Name,
//data.Key.CaseName,
SupervisedPersonName = data.Key.SupervisedPersonName,
CaseProgress = casebaselist.Where(q => q.Id == data.Key.CaseId).First()?.CaseProgress.ToDescription(),
Violations = data.Count(),
IdCard = userList.FirstOrDefault(w => w.Id == data.Key.SupervisedPersonId)?.IdCard
}).ToList();
var memorySystem = ExcelHelper.ToExcel(dataList);
return new FileController().File(memorySystem.ToArray(), "application/ms-excel", DateTime.Now.ToString("f") + ".xlsx");
}
/// <summary>
/// 违规人数分页查询
/// </summary>
@ -232,6 +289,125 @@ namespace ATS.NonCustodial.Application.Impl.Business
var count = geruplist.Sum(q => q.value);
return ResultOutput.Ok(new { count = count, data = geruplist, list = list.Distinct((a, b) => a.SupervisedPersonId == b.SupervisedPersonId && a.Title == b.Title).ToList() });
}
/// <summary>
/// 未打卡统计
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IResultOutput> NotClockedStatisticsPageAsync(NotClockedInput input)
{
//获取当前用户权限下的案件ids
var limits = User.limits;
var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true)
.Where(w => limits.Contains(w.UnitId.ToString()))
.ToListAsync();
var caseIdList = selectLimits.Select(w => w.CaseId).Distinct().ToList();
var caseList = await _appCaseManagementRepository.AsQueryable(false, true)
.Where(w => caseIdList.Contains(w.Id))
.WhereIf(input.CaseId.HasValue, w => w.Id == input.CaseId)
.ToListAsync();
List<NotClockListDto> notClockList = new List<NotClockListDto>();
foreach (var item in caseList)
{
if (item == null) continue;
var caseType= await _appDictionaryService.GetDicByDicId(item.CaseTypeId);
NotClockListDto notClockListDto = new NotClockListDto();
notClockListDto.Bmsah = item.Bmsah;
notClockListDto.CaseId = item.Id;
notClockListDto.CaseName = item.Name;
notClockListDto.CreatedTime = item.CreatedTime;
notClockListDto.CaseTypeName = caseType.Name;
notClockListDto.SupervisionUnit = "";
//根据案件找到被监管
var supervisedPerson = await _appSupervisedPersonRepository
.AsQueryable(false, true)
.Where(w => w.CaseId == item.Id)
.ToListAsync();
foreach (var person in supervisedPerson)
{
notClockListDto.SupervisedPersonId = person.SupervisedPersonId;
notClockListDto.SupervisedPersonName = person.SupervisedPersonName;
var earlyList = await _appEarlyWarningRepository
.AsQueryable(false, true)
.Where(w => w.Title == "未打卡" && w.SupervisedPersonId == person.SupervisedPersonId
&& w.CaseId == item.Id)
.WhereIf(input.EndCreatedTime.HasValue, w => w.CreatedTime <= input.EndCreatedTime)
.WhereIf(input.StartCreatedTime.HasValue, w => w.CreatedTime >= input.StartCreatedTime)
.ToListAsync();
notClockListDto.NotClockedCount= earlyList.Count;
notClockList.Add(notClockListDto);
}
}
return ResultOutput.Ok(notClockList);
}
/// <summary>
/// 未打卡统计导出
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<IActionResult> NotClockedStatisticsExportAsync(NotClockedInput input)
{
//获取当前用户权限下的案件ids
var limits = User.limits;
var selectLimits = await _appCaseSupervisorRepository.AsQueryable(false, true)
.Where(w => limits.Contains(w.UnitId.ToString()))
.ToListAsync();
var caseIdList = selectLimits.Select(w => w.CaseId).Distinct().ToList();
var caseList = await _appCaseManagementRepository.AsQueryable(false, true)
.Where(w => caseIdList.Contains(w.Id))
.WhereIf(input.CaseId.HasValue, w => w.Id == input.CaseId)
.ToListAsync();
List<NotClockExportDto> notClockList = new List<NotClockExportDto>();
foreach (var item in caseList)
{
if (item == null) continue;
var caseType = await _appDictionaryService.GetDicByDicId(item.CaseTypeId);
NotClockExportDto notClockListDto = new NotClockExportDto();
notClockListDto.Bmsah = item.Bmsah;
notClockListDto.CaseId = item.Id;
notClockListDto.CaseName = item.Name;
notClockListDto.CreatedTime = item.CreatedTime;
notClockListDto.CaseTypeName = caseType.Name;
notClockListDto.SupervisionUnit = "";
//根据案件找到被监管
var supervisedPerson = await _appSupervisedPersonRepository
.AsQueryable(false, true)
.Where(w => w.CaseId == item.Id)
.ToListAsync();
foreach (var person in supervisedPerson)
{
notClockListDto.SupervisedPersonId = person.SupervisedPersonId;
notClockListDto.SupervisedPersonName = person.SupervisedPersonName;
var earlyList = await _appEarlyWarningRepository
.AsQueryable(false, true)
.Where(w => w.Title == "未打卡" && w.SupervisedPersonId == person.SupervisedPersonId
&& w.CaseId == item.Id)
.WhereIf(input.EndCreatedTime.HasValue, w => w.CreatedTime <= input.EndCreatedTime)
.WhereIf(input.StartCreatedTime.HasValue, w => w.CreatedTime >= input.StartCreatedTime)
.ToListAsync();
notClockListDto.NotClockedCount = earlyList.Count;
notClockList.Add(notClockListDto);
}
}
var memorySystem = ExcelHelper.ToExcel(notClockList);
return new FileController().File(memorySystem.ToArray(), "application/ms-excel", DateTime.Now.ToString("f") + ".xlsx");
}
/// <summary>
/// 添加违规记录
@ -240,4 +416,8 @@ namespace ATS.NonCustodial.Application.Impl.Business
/// <returns></returns>
public async Task<IResultOutput> AddAsync(AppViolationStatisticsAddInput input) => await base.AddAsync(input, _appViolationStatisticsRepository);
}
public class FileController : ControllerBase
{
}
}

19
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs

@ -1,5 +1,6 @@
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Input;
using ATS.NonCustodial.Shared.Common.UnifiedResults;
using Microsoft.AspNetCore.Mvc;
namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics
{
@ -23,6 +24,12 @@ namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationSt
/// <returns></returns>
Task<IResultOutput> ViolationStatisticsPageAsync(ViolationStatisticsPageInput input);
/// <summary>
/// 违规记录统计导出
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<IActionResult> ViolationStatisticsExportAsync(ViolationStatisticsPageInput input);
/// <summary>
/// 违规人数统计分页
/// </summary>
/// <returns></returns>
@ -33,6 +40,18 @@ namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationSt
/// </summary>
/// <returns></returns>
Task<IResultOutput> ViolationStatisticsAsync(ViolationStatisticsPageInput input);
/// <summary>
/// 未打卡统计
/// </summary>
/// <returns></returns>
Task<IResultOutput> NotClockedStatisticsPageAsync(NotClockedInput input);
/// <summary>
/// 未打卡统计导出
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<IActionResult> NotClockedStatisticsExportAsync(NotClockedInput input);
}
}

37
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Input/NotClockedInput.cs

@ -0,0 +1,37 @@
using ATS.NonCustodial.Shared.Common.Dtos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Input
{
public class NotClockedInput: PageRequestBaseInput
{
/// <summary>
/// 案件Id
/// </summary>
public long? CaseId { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndCreatedTime { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? StartCreatedTime { get; set; }
/// <summary>
/// 案件进度
/// </summary>
public int? CaseProgress { get; set; }
/// <summary>
/// 被监管人姓名
/// </summary>
public string? SupervisedPersonName { get; set; }
}
}

68
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/NotClockExportDto.cs

@ -0,0 +1,68 @@
using ATS.NonCustodial.Domain.Shared.AggRootEntities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Output
{
/// <summary>
/// 未打卡统计返回值
/// </summary>
public class NotClockExportDto
{
/// <summary>
/// 案件Id
/// </summary>
public long CaseId { get; set; }
/// <summary>
/// 案件名称
/// </summary>
[DisplayName("案件名称")]
public string? CaseName { get; set; }
/// <summary>
/// 被监管人Id
/// </summary>
public long SupervisedPersonId { get; set; }
/// <summary>
/// 被监管人员
/// </summary>
[DisplayName("被监管人")]
public string? SupervisedPersonName { get; set; }
/// <summary>
/// 部门受案号
/// </summary>
[DisplayName("部门受案号")]
public string? Bmsah { get; set; }
/// <summary>
/// 监督单位
/// </summary>
[DisplayName("监督单位")]
public string? SupervisionUnit { get; set; }
/// <summary>
/// 案件类型
/// </summary>
[DisplayName("案件类型")]
public string? CaseTypeName { get; set; }
/// <summary>
/// 未打卡次数
/// </summary>
[DisplayName("未打卡次数")]
public int NotClockedCount { get; set; }
/// <summary>
/// 案件创建日期
/// </summary>
[DisplayName("案件创建日期")]
public DateTime? CreatedTime { get; set; }
}
}

60
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/NotClockListDto.cs

@ -0,0 +1,60 @@
using ATS.NonCustodial.Domain.Shared.AggRootEntities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Output
{
/// <summary>
/// 未打卡统计返回值
/// </summary>
public class NotClockListDto
{
/// <summary>
/// 案件Id
/// </summary>
public long CaseId { get; set; }
/// <summary>
/// 案件名称
/// </summary>
public string? CaseName { get; set; }
/// <summary>
/// 被监管人Id
/// </summary>
public long SupervisedPersonId { get; set; }
/// <summary>
/// 被监管人员
/// </summary>
public string? SupervisedPersonName { get; set; }
/// <summary>
/// 部门受案号
/// </summary>
public string? Bmsah { get; set; }
/// <summary>
/// 监督单位
/// </summary>
public string? SupervisionUnit { get; set; }
/// <summary>
/// 案件类型
/// </summary>
public string? CaseTypeName { get; set; }
/// <summary>
/// 未打卡次数
/// </summary>
public int NotClockedCount { get; set; }
/// <summary>
/// 案件创建日期
/// </summary>
public DateTime? CreatedTime { get; set; }
}
}

64
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationStatisticsExportDto.cs

@ -0,0 +1,64 @@
using ATS.NonCustodial.Domain.Shared.AggRootEntities;
using ATS.NonCustodial.Domain.Shared.Enums;
using System.ComponentModel;
namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationStatistics.Output
{
/// <summary>
/// 违规统计列表Dto
/// </summary>
/// Author:mxg
/// CreatedTimed:2022-06-06 05:19 PM
public class ViolationStatisticsExportDto
{
/// <summary>
/// 案件Id
/// </summary>
public long CaseId { get; set; }
/// <summary>
/// 案件名称
/// </summary>
[DisplayName("案件名称")]
public string? CaseName { get; set; }
/// <summary>
/// 被监管人Id
/// </summary>
public long SupervisedPersonId { get; set; }
/// <summary>
/// 被监管人员
/// </summary>
[DisplayName("被监管人员")]
public string? SupervisedPersonName { get; set; }
/// <summary>
/// 身份证号
/// </summary>
[DisplayName("身份证号")]
public string? IdCard { get; set; }
/// <summary>
/// 违规次数
/// </summary>
[DisplayName("违规次数")]
public int Violations { get; set; }
/// <summary>
/// 违规时间
/// </summary>
public DateTime? Wgtime { get; set; }
/// <summary>
/// 违规类型
/// </summary>
public string Wglx { get; set; }
/// <summary>
/// 案件进度
/// </summary>
[DisplayName("案件进度")]
public string? CaseProgress { get; set; }
}
}

4
src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationStatisticsListDto.cs

@ -6,8 +6,8 @@ namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationSt
/// <summary>
/// 违规统计列表Dto
/// </summary>
/// Author:mxg
/// CreatedTimed:2022-06-06 05:19 PM
/// Author:zzj
/// CreatedTimed:2025-06-06 05:19 PM
public class ViolationStatisticsListDto : EntityAdd
{
/// <summary>

Loading…
Cancel
Save