You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
6.4 KiB
137 lines
6.4 KiB
|
3 months ago
|
using ATS.NonCustodial.Application.Base;
|
||
|
|
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppSupervisedPersons;
|
||
|
|
using ATS.NonCustodial.Application.Contracts.Interfaces.Business.AppCaseManagements.AppSupervisedPersons.Input;
|
||
|
|
using ATS.NonCustodial.Domain.Entities.Business.CaseManagements;
|
||
|
|
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.UnifiedResults;
|
||
|
|
using Microsoft.EntityFrameworkCore;
|
||
|
|
using Yitter.IdGenerator;
|
||
|
|
|
||
|
|
namespace ATS.NonCustodial.Application.Impl.Business.CaseManagements
|
||
|
|
{
|
||
|
|
/// <summary>
|
||
|
|
/// 被监管人员管理服务
|
||
|
|
/// </summary>
|
||
|
|
/// Author:mxg
|
||
|
|
/// CreatedTimed:2022-06-06 11:16 AM
|
||
|
|
/// <remarks>
|
||
|
|
/// 1、姓名可模糊搜索系统用户管理中用户类型为“被监管人”的数据,展示“姓名_手机号”,选择后可作为填写数据的默认值,用户还是可以在此基础上进行更改。
|
||
|
|
/// 2、预警类型等级根据案件类型来展示,在案件类型字典数据中取数据。
|
||
|
|
/// 3、打卡频次的数据可输入小数,保留一位小数。在被监管人在非休息时间内打卡时间间隔超过设置的间隔,则需要进行预警,提示XXX未打卡。
|
||
|
|
/// 4、隐私等级的时间是在监控大屏展示该人员的位置信息,是在设置的时间之前,如设置为120min,则大屏展示的该人员位置信息展示的是120分钟前的位置。
|
||
|
|
/// 5、被监管人对应的未结束的案件,只能是一个。提交案件创建时进行校验判定。
|
||
|
|
/// </remarks>
|
||
|
|
[DynamicApi(Area = "admin")]
|
||
|
|
public class AppSupervisedPersonService : AdminAppServiceBase, IAppSupervisedPersonService, IDynamicApi
|
||
|
|
{
|
||
|
|
#region Identity
|
||
|
|
|
||
|
|
private readonly IEfRepository<AppCaseSupervisedPerson, long> _appSupervisedPersonRepository;
|
||
|
|
private readonly IEfRepository<AppCaseManagement, long> _appCaseManagementEfRepository;
|
||
|
|
private readonly IEfRepository<appauditrecords, long> _appauditrecordsRepository;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
///
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="appSupervisedPersonRepository"></param>
|
||
|
|
/// <param name="appCaseManagementEfRepository"></param>
|
||
|
|
public AppSupervisedPersonService(IEfRepository<AppCaseSupervisedPerson, long> appSupervisedPersonRepository,
|
||
|
|
IEfRepository<AppCaseManagement, long> appCaseManagementEfRepository, IEfRepository<appauditrecords, long> appauditrecords)
|
||
|
|
{
|
||
|
|
_appSupervisedPersonRepository = appSupervisedPersonRepository;
|
||
|
|
_appCaseManagementEfRepository = appCaseManagementEfRepository;
|
||
|
|
_appauditrecordsRepository = appauditrecords;
|
||
|
|
}
|
||
|
|
|
||
|
|
#endregion Identity
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 批量审核 被监管人员账号绑定
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="input"></param>
|
||
|
|
/// <returns></returns>
|
||
|
|
public async Task<IResultOutput> BatchAuditSupervisedPersonBinding(BatchAuditSupervisedPersonBindingInput input)
|
||
|
|
{
|
||
|
|
if (!input.Ids.Any()) return ResultOutput.NotOk("参数不能为空!");
|
||
|
|
|
||
|
|
var allCaseIds = new List<long>();
|
||
|
|
|
||
|
|
var dataList = await _appSupervisedPersonRepository
|
||
|
|
.Where(w => input.Ids.Contains(w.SupervisedPersonId) && w.ApprovalStatus != ApprovalStatusEnum.PassReview)
|
||
|
|
.ToListAsync();
|
||
|
|
dataList.ForEach(item =>
|
||
|
|
{
|
||
|
|
item!.ApprovalStatus = input.ApprovalStatus;
|
||
|
|
item.IsBound = input.ApprovalStatus == ApprovalStatusEnum.PassReview;
|
||
|
|
|
||
|
|
allCaseIds.Add(item.CaseId);
|
||
|
|
});
|
||
|
|
|
||
|
|
await _appSupervisedPersonRepository.UpdateAsync(dataList, UpdatingProps<AppCaseSupervisedPerson>(w =>
|
||
|
|
w.ApprovalStatus,
|
||
|
|
w => w.IsBound));
|
||
|
|
#region 添加被监管人审核记录
|
||
|
|
var data = new List<appauditrecords>();
|
||
|
|
foreach (var item in dataList)
|
||
|
|
{
|
||
|
|
data.Add(new appauditrecords
|
||
|
|
{
|
||
|
|
Id = YitIdHelper.NextId(),
|
||
|
|
SupervisedPersonId = item.SupervisedPersonId,
|
||
|
|
recordstime = DateTime.Now,
|
||
|
|
CreatedTime = DateTime.Now,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
if(data.Count>0)
|
||
|
|
await _appauditrecordsRepository.InsertAsync(data);
|
||
|
|
#endregion
|
||
|
|
//更改案件的状态
|
||
|
|
allCaseIds = allCaseIds.Distinct().ToList();
|
||
|
|
|
||
|
|
var spCaseList = await _appSupervisedPersonRepository.AsQueryable(false, true)
|
||
|
|
.Where(w => allCaseIds.Contains(w.CaseId))
|
||
|
|
.ToListAsync();
|
||
|
|
|
||
|
|
var spCaseGroup = spCaseList.GroupBy(w => w.CaseId).ToList();
|
||
|
|
|
||
|
|
/*
|
||
|
|
1、当案例已在的被监管人 只要有审核通过的。案件变更位已经行
|
||
|
|
2、如果说 我把这个审核通过的删除了,其余被监管人里没有审核通过的 则变更位待进行
|
||
|
|
3、如果只存在1个被监管人则不能被删除,且创建案件和编辑案件的时候 被监管人必须存在
|
||
|
|
*/
|
||
|
|
var caseProgress = new Dictionary<long, CaseProgressEnum>();
|
||
|
|
foreach (var scg in spCaseGroup)
|
||
|
|
{
|
||
|
|
var existPass = await _appSupervisedPersonRepository.AnyAsync(w => w.CaseId == scg.Key && w.ApprovalStatus == ApprovalStatusEnum.PassReview);
|
||
|
|
|
||
|
|
switch (existPass)
|
||
|
|
{
|
||
|
|
//如果有任何审核通过的案件都将变为执行中
|
||
|
|
case true:
|
||
|
|
caseProgress.TryAdd(scg.Key, CaseProgressEnum.InExecution);
|
||
|
|
break;
|
||
|
|
|
||
|
|
case false:
|
||
|
|
caseProgress.TryAdd(scg.Key, CaseProgressEnum.Pending);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//修改状态
|
||
|
|
foreach (var (key, value) in caseProgress)
|
||
|
|
{
|
||
|
|
await _appCaseManagementEfRepository.UpdateAsync(w => w.Id == key,
|
||
|
|
w => new AppCaseManagement()
|
||
|
|
{
|
||
|
|
CaseProgress = value,
|
||
|
|
CaseBeginTime = value == CaseProgressEnum.InExecution ? DateTime.Now : null
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return ResultOutput.Ok();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|