diff --git a/src/2.services/ATS.NonCustodial.Application/Base/AdminCommonService.cs b/src/2.services/ATS.NonCustodial.Application/Base/AdminCommonService.cs index 1628d65..921498b 100644 --- a/src/2.services/ATS.NonCustodial.Application/Base/AdminCommonService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Base/AdminCommonService.cs @@ -13,17 +13,16 @@ using ATS.NonCustodial.Domain.Shared.Enums; using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore; using ATS.NonCustodial.Shared.Common.Dtos; using ATS.NonCustodial.Shared.Common.Enums; +using ATS.NonCustodial.Shared.Configurations.Options; +using ATS.NonCustodial.Shared.Extensions; using Castle.Components.DictionaryAdapter; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; -using System.Net.Cache; using System.Net; +using System.Net.Cache; +using System.Security.Cryptography; using System.Text; using Yitter.IdGenerator; -using ATS.NonCustodial.Shared.Configurations.Options; -using ATS.NonCustodial.Shared.Extensions; -using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; -using System.Security.Cryptography; namespace ATS.NonCustodial.Application.Base @@ -161,8 +160,8 @@ namespace ATS.NonCustodial.Application.Base //获取当前被监管人的【监管人】列表 ChatPersonTypeEnum.SupervisedPerson => caseAgg - .WhereIf(!userRole.IsAdmin,w => w.AppCaseSupervisedPerson!.SupervisedPersonId == User.Id) - + .WhereIf(!userRole.IsAdmin, w => w.AppCaseSupervisedPerson!.SupervisedPersonId == User.Id) + .Select(w => new ChatListDto() { CaseId = w.AppCaseManagement!.Id, @@ -193,21 +192,21 @@ namespace ATS.NonCustodial.Application.Base { queryData.Add(dto); - if (User.ChatPersonType == ChatPersonTypeEnum.SupervisedPerson) - { - //管理员 - queryData.AddRange(allAdmins.Select(w => new ChatListDto() - { - CaseId = dto.CaseId, - CaseName = dto.CaseName, - SenderId = User.Id, - SenderName = User.Name, - SenderAvatar = User.Avatar, - ReceiverId = w.Id, - ReceiverName = w.UserName ?? w.NickName, - ChatPersonType = w.ChatPersonType - })); - } + //if (User.ChatPersonType == ChatPersonTypeEnum.SupervisedPerson) + //{ + // //管理员 + // queryData.AddRange(allAdmins.Select(w => new ChatListDto() + // { + // CaseId = dto.CaseId, + // CaseName = dto.CaseName, + // SenderId = User.Id, + // SenderName = User.Name, + // SenderAvatar = User.Avatar, + // ReceiverId = w.Id, + // ReceiverName = w.UserName ?? w.NickName, + // ChatPersonType = w.ChatPersonType + // })); + //} } queryData = queryData.Distinct((x, y) => x.CaseId == y.CaseId && x.ReceiverId == y.ReceiverId).ToList(); @@ -445,7 +444,7 @@ namespace ATS.NonCustodial.Application.Base /// post /// /// - protected string GetpostQuery(string sUrl, dynamic obj_model,string token) + protected string GetpostQuery(string sUrl, dynamic obj_model, string token) { var re = ""; try @@ -492,7 +491,7 @@ namespace ATS.NonCustodial.Application.Base catch (Exception ex) { } - + return re; } @@ -539,7 +538,7 @@ namespace ATS.NonCustodial.Application.Base System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));//当地时区 var time = startTime.AddMilliseconds($"{sData.expire_time}".ToDouble()); - Cache.Set("token", $"{$"{sData.token}"}", new TimeSpan(23, 0,0)); + Cache.Set("token", $"{$"{sData.token}"}", new TimeSpan(23, 0, 0)); } } } diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/AppDictionaryService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/AppDictionaryService.cs index 72fcc22..33ee73d 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/AppDictionaryService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/AppDictionaryService.cs @@ -90,6 +90,17 @@ namespace ATS.NonCustodial.Application.Impl.Admins public async Task GetListAsync(string? code) { var rtn = await GetListNoApiAsync(code); + foreach (var item in rtn) + { + if(item ==null) continue; + // 修复:添加 null 检查并转换为 List + if (item.Dictionaries != null) + { + item.Dictionaries = item.Dictionaries + .Where(wd => wd.DataStatus == 0) + .ToList(); // 添加 ToList() 转换 + } + } //返回 return ResultOutput.Ok(rtn); } diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UserService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UserService.cs index 17f4458..7483ad7 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UserService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Admins/UserService.cs @@ -844,7 +844,7 @@ namespace ATS.NonCustodial.Application.Impl.Admins var rtn = await _userRepository.AsQueryable(false, true) .Where(w => w.ChatPersonType != ChatPersonTypeEnum.SupervisedPerson && w.DataStatus != DataStatusEnum.Disable&&!w.UserName.Contains("_aks")) - .WhereIf(!userRoles.IsAdmin, w => w.Id == User.Id) + // .WhereIf(!userRoles.IsAdmin, w => w.Id == User.Id) 2025 -10-20 段肖确认修改 .Select(w => new KeyValueDto() { Id = w.Id, diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppBusinessApplicationService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppBusinessApplicationService.cs index 82bfde4..ca3f12f 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppBusinessApplicationService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppBusinessApplicationService.cs @@ -6,6 +6,7 @@ using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppBusinessAppl using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppBusinessApplications.Input; using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppBusinessApplications.Output; 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.Apps.Output; using ATS.NonCustodial.Application.Impl.Business.IM; using ATS.NonCustodial.Domain.Entities.Admins; @@ -45,6 +46,8 @@ namespace ATS.NonCustodial.Application.Impl.Business private readonly IHubContext _hubContext; private readonly IEfRepository _appUserRepository; private readonly ISMSService _smsService; + private readonly IEfRepository _appSupervisedPersonRepository; + /// /// /// @@ -83,6 +86,7 @@ namespace ATS.NonCustodial.Application.Impl.Business _hubContext = hubContext; _appUserRepository = appUserRepository; _smsService = smsService; + _appSupervisedPersonRepository = appCaseSupervisedPersonRepository; } #endregion Identity @@ -119,11 +123,16 @@ namespace ATS.NonCustodial.Application.Impl.Business //rtn.Data = rtn.Data.Where(w => caseIdList.Contains(w.CaseId)).ToList(); foreach (var item in rtn.Data) { - if (item.EndSupervisionDate.HasValue) + var dic= await _appDictionaryService.GetDicByDicId(item.ApplicationTypeId); + if (dic.Code == "end_supervision") { item.ActiveTimePeriodBegin = null; item.ActiveTimePeriodEnd = null; } + else + { + item.EndSupervisionDate = null; + } } return ResultOutput.Ok(rtn); } @@ -303,7 +312,30 @@ namespace ATS.NonCustodial.Application.Impl.Business }); await _appBusinessApplicationRepository.UpdateAsync(dataList); + foreach (var item in dataList) + { + var caseType = await _appDictionaryService.GetDicByDicId(item.ApplicationTypeId); + if (input.AuditStatus == AuditStatusEnum.Pass && caseType.Code == "end_supervision") + { + var caseId = await _appSupervisedPersonRepository.AsQueryable(false, true) + .Where(w => w.SupervisedPersonId == item.SupervisedPersonId) + .ToListAsync(); + if (caseId.Count > 0) + { + var caseList = await _appSupervisedPersonRepository.AsQueryable(false, true) + .Where(w => w.CaseId == caseId.FirstOrDefault().CaseId) + .ToListAsync(); + if (caseList.Count == 1) + { + BatchHandleCaseProgressInput ids = new BatchHandleCaseProgressInput(); + ids.CaseProgress = CaseProgressEnum.Closed; + ids.Ids = new List { caseId.FirstOrDefault().CaseId }; + await _appCaseManagementService.BatchHandleCaseProgress(ids); + } + } + } + } foreach (var item in dataList) { var user = await _appUserRepository.AsQueryable(false, true).Where(w => w.Id == item.SupervisedPersonId).ToListAsync(); @@ -311,9 +343,6 @@ namespace ATS.NonCustodial.Application.Impl.Business //[审批完成通知] {1}您好,您于{2}年{3}月{4}日提交的{5}申请已完成审批,请及时登录系统查看处理结果。 await _smsService.SendMessageSMS(MessageAlertTypeEnum.Approved, "", user.FirstOrDefault().Phone, item.CreatedTime, item.ApplicationTypeName, "", item.SupervisedPersonName); } - - - //返回结果 return ResultOutput.Ok(); } @@ -333,8 +362,6 @@ namespace ATS.NonCustodial.Application.Impl.Business var caseIdList = selectLimits.Select(w => w.CaseId).Distinct().ToList(); var caseIds = await (await base.GetCurrentUserCaseListAsync()).Where(w => w.AppCaseManagement != null && caseIdList.Contains(w.AppCaseManagement.Id)).Select(w => w.AppCaseManagement.Id).ToListAsync(); - - var dataList = await _appBusinessApplicationRepository.AsQueryable(false, true) .Where(w => caseIds.Contains(w.CaseId)) .OrderByDescending(w => w.CreatedTime) diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppManagementService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppManagementService.cs index 12da9b5..50f742c 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppManagementService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppManagementService.cs @@ -845,13 +845,15 @@ namespace ATS.NonCustodial.Application.Impl.Business .AsQueryable(false, true) .Where(w => w.CaseId == currentUserCase.CaseId) .ToListAsync(); - var applicationType = await base.GetDictionariesOutput("application_type", "df"); + var dic = await _appDictionaryService.GetDicByDicId(input.ApplicationTypeId); + + //var applicationType = await base.GetDictionariesOutput("application_type", "df"); foreach (var supervisor in supervisorList) { var user = await _appUserRepository.AsQueryable(false, true).Where(w => w.Id == supervisor.SupervisorId).ToListAsync(); //发短信给监管人,提醒处理审批 - await _smsService.SendMessageSMS(MessageAlertTypeEnum.ReviewNotification, user.FirstOrDefault().UserName, user.FirstOrDefault().Phone, DateTime.Now, applicationType.Name, "", currentUserCase.SupervisedPersonName); + await _smsService.SendMessageSMS(MessageAlertTypeEnum.ReviewNotification, user.FirstOrDefault().UserName, user.FirstOrDefault().Phone, DateTime.Now, dic.Name, "", currentUserCase.SupervisedPersonName); } return await _appBusinessApplicationService.CreateOrModify(input); } @@ -1150,7 +1152,7 @@ namespace ATS.NonCustodial.Application.Impl.Business var earlyList = await GetRemindListByCurrentUserPageAsync(new AppRemindPageInput() { PageIndex = 1, - PageSize = 999999, + PageSize = 100, CheckStatus = CheckStatusEnum.NotChecked }); @@ -1177,7 +1179,9 @@ namespace ATS.NonCustodial.Application.Impl.Business //预警信息 var earlyList = await (from e in _appEarlyWarningRepository.AsQueryable(false, true) join ev in _appEarlyWarningViewStatisticsRepository.AsQueryable(false, true) on e.Id equals ev.AppEarlyWarningId - where ev.SubscriberId == User.Id && caseIdList.Contains(e.CaseId) + join cm in _appCaseManagementRepository.AsQueryable(false, true) on e.CaseId equals + cm.Id + where ev.SubscriberId == User.Id && caseIdList.Contains(e.CaseId) && cm.CaseProgress!=CaseProgressEnum.Closed select new AppRemindListDto() { Id = e.Id, 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 975ce9a..1560407 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppPunchRecordService.cs @@ -651,6 +651,7 @@ namespace ATS.NonCustodial.Application.Impl.Business Title = dict == null ? "" : dict.Name, CaseId = w.CaseId.Value, Content = w.Content, + CaseName = w.CaseName, EarlyWarningTypeId = dict?.Id ?? default, SupervisedPersonId = w.SupervisedPersonId, SupervisedPersonName = w.SupervisedPersonName, diff --git a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs index 2c7cf1f..040cdde 100644 --- a/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs +++ b/src/2.services/ATS.NonCustodial.Application/Impl/Business/AppViolationStatisticsService.cs @@ -1,17 +1,21 @@ 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.Output; using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppEarlyWarnings.Output; 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; +using ATS.NonCustodial.Domain.Entities.Admins; using ATS.NonCustodial.Domain.Entities.Business; using ATS.NonCustodial.Domain.Entities.Business.CaseManagements; using ATS.NonCustodial.Domain.Entities.Business.EarlyWarning; using ATS.NonCustodial.Domain.Shared.AggRootEntities.Dtos; +using ATS.NonCustodial.Domain.Shared.Enums; using ATS.NonCustodial.Domain.Shared.OrmRepositories.Basic.EfCore; using ATS.NonCustodial.DynamicApi; using ATS.NonCustodial.DynamicApi.Attributes; +using ATS.NonCustodial.Shared.Common.Auth; using ATS.NonCustodial.Shared.Common.Dtos; using ATS.NonCustodial.Shared.Common.UnifiedResults; using ATS.NonCustodial.Shared.Extensions; @@ -40,6 +44,8 @@ namespace ATS.NonCustodial.Application.Impl.Business private readonly IEfRepository _appEarlyWarningRepository; private readonly IUserService _userService; private readonly IEfRepository _appSupervisedPersonRepository; + private readonly IEfRepository _appSupervisorRepository; + private readonly IEfRepository _userRepository; /// /// @@ -48,7 +54,7 @@ namespace ATS.NonCustodial.Application.Impl.Business /// /// /// - public AppViolationStatisticsService(IEfRepository appViolationStatisticsRepository, + public AppViolationStatisticsService(IEfRepository userRepository, IEfRepository appSupervisorRepository, IEfRepository appViolationStatisticsRepository, IAppDictionaryService appDictionaryService, IEfRepository appEarlyWarningRepository, IUserService userService, @@ -63,11 +69,13 @@ namespace ATS.NonCustodial.Application.Impl.Business appDictionaryService, asprl) { + _appSupervisorRepository = appSupervisorRepository; _appViolationStatisticsRepository = appViolationStatisticsRepository; _appDictionaryService = appDictionaryService; _appEarlyWarningRepository = appEarlyWarningRepository; _userService = userService; _appSupervisedPersonRepository = appCaseSupervisedPersonRepository; + _userRepository = userRepository; } #endregion Identity @@ -308,6 +316,7 @@ namespace ATS.NonCustodial.Application.Impl.Business .Where(w => caseIdList.Contains(w.Id)) .WhereIf(input.CaseId.HasValue, w => w.Id == input.CaseId) .ToListAsync(); + var applicationType = await base.GetDictionariesOutput("early_warning_type", "notClocked"); List notClockList = new List(); foreach (var item in caseList) @@ -320,7 +329,11 @@ namespace ATS.NonCustodial.Application.Impl.Business notClockListDto.CaseName = item.Name; notClockListDto.CreatedTime = item.CreatedTime; notClockListDto.CaseTypeName = caseType.Name; - notClockListDto.SupervisionUnit = ""; + var unitList = await (from c in _appSupervisorRepository.AsQueryable(false, true) + join u in _userRepository.AsQueryable(false, true) on c.SupervisorId equals u.Id + where c.CaseId == item.Id + select u.Unitname).FirstOrDefaultAsync(); + notClockListDto.SupervisionUnit = unitList; //根据案件找到被监管 var supervisedPerson = await _appSupervisedPersonRepository .AsQueryable(false, true) @@ -332,7 +345,7 @@ namespace ATS.NonCustodial.Application.Impl.Business notClockListDto.SupervisedPersonName = person.SupervisedPersonName; var earlyList = await _appEarlyWarningRepository .AsQueryable(false, true) - .Where(w => w.Title == "未打卡" && w.SupervisedPersonId == person.SupervisedPersonId + .Where(w => w.EarlyWarningTypeId == applicationType.Id && 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) @@ -342,8 +355,83 @@ namespace ATS.NonCustodial.Application.Impl.Business } } + var pageData = notClockList.Skip((input.PageIndex - 1) * input.PageSize) + .Take(input.PageSize).ToList(); + var pageResult = new PagedList() + { + TotalCount = notClockList.Count(), + Data = pageData + }; + return ResultOutput.Ok(pageResult); + } + + /// + /// 越界统计 + /// + /// + [HttpPost] + public async Task LeaveAreaStatisticsPageAsync(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(); + var applicationType = await base.GetDictionariesOutput("early_warning_type", "LeaveArea"); - return ResultOutput.Ok(notClockList); + List notClockList = new List(); + foreach (var item in caseList) + { + if (item == null) continue; + var caseType = await _appDictionaryService.GetDicByDicId(item.CaseTypeId); + ViolationListDto notClockListDto = new ViolationListDto(); + notClockListDto.Bmsah = item.Bmsah; + notClockListDto.CaseId = item.Id; + notClockListDto.CaseName = item.Name; + notClockListDto.CreatedTime = item.CreatedTime; + notClockListDto.CaseTypeName = caseType.Name; + + var unitList =await (from c in _appSupervisorRepository.AsQueryable(false, true) + join u in _userRepository.AsQueryable(false, true) on c.SupervisorId equals u.Id + where c.CaseId == item.Id + select u.Unitname).FirstOrDefaultAsync(); + notClockListDto.SupervisionUnit = unitList; + //根据案件找到被监管 + 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.EarlyWarningTypeId == applicationType.Id && 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.ViolationCount = earlyList.Count; + notClockList.Add(notClockListDto); + } + + } + var pageData = notClockList.Skip((input.PageIndex - 1) * input.PageSize) + .Take(input.PageSize).ToList(); + var pageResult = new PagedList() + { + TotalCount = notClockList.Count(), + Data = pageData + }; + return ResultOutput.Ok(pageResult); } /// @@ -365,6 +453,7 @@ namespace ATS.NonCustodial.Application.Impl.Business .Where(w => caseIdList.Contains(w.Id)) .WhereIf(input.CaseId.HasValue, w => w.Id == input.CaseId) .ToListAsync(); + var applicationType = await base.GetDictionariesOutput("early_warning_type", "notClocked"); List notClockList = new List(); foreach (var item in caseList) @@ -389,7 +478,7 @@ namespace ATS.NonCustodial.Application.Impl.Business notClockListDto.SupervisedPersonName = person.SupervisedPersonName; var earlyList = await _appEarlyWarningRepository .AsQueryable(false, true) - .Where(w => w.Title == "未打卡" && w.SupervisedPersonId == person.SupervisedPersonId + .Where(w => w.EarlyWarningTypeId== applicationType.Id && 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) diff --git a/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/AppEarlyWarnings/Input/AppEarlyWarningAddInput.cs b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/AppEarlyWarnings/Input/AppEarlyWarningAddInput.cs index 441a9a1..c7f9308 100644 --- a/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/AppEarlyWarnings/Input/AppEarlyWarningAddInput.cs +++ b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/AppEarlyWarnings/Input/AppEarlyWarningAddInput.cs @@ -32,6 +32,10 @@ namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppEarlyWar /// public long CaseId { get; set; } + /// + /// 案件名称 + /// + public string? CaseName { get; set; } /// /// 预警类型Id(来自数据字典) /// diff --git a/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs index 008c839..5c6ac4d 100644 --- a/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs +++ b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/IAppViolationStatisticsService.cs @@ -46,6 +46,11 @@ namespace ATS.NonCustodial.Application.Contracts.Interfaces.Business.ViolationSt /// Task NotClockedStatisticsPageAsync(NotClockedInput input); + /// + /// 越界统计 + /// + /// + Task LeaveAreaStatisticsPageAsync(NotClockedInput input); /// /// 未打卡统计导出 /// diff --git a/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationListDto.cs b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationListDto.cs new file mode 100644 index 0000000..304b0c0 --- /dev/null +++ b/src/3.contracts/ATS.NonCustodial.Application.Contracts/Interfaces/Business/ViolationStatistics/Output/ViolationListDto.cs @@ -0,0 +1,56 @@ +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 +{ + public class ViolationListDto + { + /// + /// 案件Id + /// + public long CaseId { get; set; } + + /// + /// 案件名称 + /// + public string? CaseName { get; set; } + + /// + /// 被监管人Id + /// + public long SupervisedPersonId { get; set; } + + /// + /// 被监管人员 + /// + public string? SupervisedPersonName { get; set; } + /// + /// 部门受案号 + /// + public string? Bmsah { get; set; } + + /// + /// 监督单位 + /// + public string? SupervisionUnit { get; set; } + + + /// + /// 案件类型 + /// + public string? CaseTypeName { get; set; } + + + /// + /// 违规越界次数 + /// + public int ViolationCount { get; set; } + /// + /// 案件创建日期 + /// + public DateTime? CreatedTime { get; set; } + } +}