CostCalculationItem/IRaCIS.Core.API/Controllers/Trial/WorkloadController.cs

128 lines
5.1 KiB
C#

using IRaCIS.Api.Filter;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.ViewModels;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
namespace IRaCIS.Core.API.Controllers
{
/// <summary>
/// 入组之后 工作量维护
/// </summary>
[Route("workload")]
[ApiController, Authorize, ApiExplorerSettings(GroupName = "Workload")]
public class WorkloadController : ControllerBase
{
private readonly ITrialWorkloadService _trialWorkloadService;
private readonly ICalculateService _calculateService;
public WorkloadController(ITrialWorkloadService trialWorkloadService, ICalculateService calculateService)
{
_trialWorkloadService = trialWorkloadService;
_calculateService = calculateService;
}
/// <summary>
/// 查询某个医生是否在某天有某个项目的工作量数据,处理添加来自医生自己的工作量数据
/// </summary>
[HttpPost, Route("existWorkLoad")]
public IResponseOutput<ExistWorkloadViewModel> WorkLoadExist(WorkloadExistQueryDTO param)
{
return _trialWorkloadService.WorkloadExist(param);
}
/// <summary> 查询项目入组医生的工作量统计信息 </summary>
[HttpPost, Route("getTrialEnrollmentWorkloadStats")]
public IResponseOutput<PageOutput<WorkLoadAndAgreementDTO>> GetTrialEnrollmentWorkloadStats(WorkLoadDoctorQueryDTO doctorSearchModel)
{
return ResponseOutput.Ok(_trialWorkloadService.GetTrialEnrollmentWorkloadStats(doctorSearchModel));
}
/// <summary>
/// 获取医生工作量(带有填充数据)
/// </summary>
/// <param name="workLoadSearch"></param>
/// <returns></returns>
[HttpPost, Route("getDoctorWorkLoadList")]
public IResponseOutput<PageOutput<WorkLoadDetailDTO>> GetDoctorWorkLoadList(
WorkLoadStatsQueryDTO workLoadSearch)
{
return ResponseOutput.Ok(_trialWorkloadService.GetEnrollmentWorkloadStatsDetail(workLoadSearch)) ;
}
/// <summary>
/// 获取来自医生端的工作量列表 详情
/// </summary>
/// <param name="workLoadSearch"></param>
/// <returns></returns>
[HttpPost, Route("getReviewerWorkLoadListDetail")]
public IResponseOutput<List<WorkLoadDetailViewModel>> GetReviewerWorkLoadListDetail(
WorkLoadDetailQueryDTO workLoadSearch)
{
return ResponseOutput.Ok(_trialWorkloadService.GetReviewerWorkLoadListDetail(workLoadSearch)) ;
}
/// <summary>
/// 添加或更新工作量[AUTH]
/// </summary>
/// <param name="workLoadAddOrUpdateModel"></param>
/// <returns></returns>
[LogFilter]
[HttpPost, Route("workLoadAddOrUpdate")]
public IResponseOutput WorkLoadAddOrUpdate(WorkloadCommand workLoadAddOrUpdateModel)
{
var userId = Guid.Parse(User.FindFirst("id").Value);
//var yearMonth = workLoadAddOrUpdateModel.WorkTime.ToString("yyyy-MM");
var result = _trialWorkloadService.AddOrUpdateWorkload(workLoadAddOrUpdateModel, userId);
//_calculateTaskService.AddCalculateTask(workLoadAddOrUpdateModel.DoctorId, yearMonth);
if (result.IsSuccess && workLoadAddOrUpdateModel.DataFrom == 2)
{
_calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
workLoadAddOrUpdateModel.DoctorId
},
CalculateMonth = workLoadAddOrUpdateModel.WorkTime
}, User.FindFirst("id").Value);
}
return result;
}
[LogFilter]
[HttpDelete, Route("deleteWorkLoad/{id:guid}")]
public IResponseOutput DeleteWorkLoad(Guid id)
{
//先判断该工作量的费用是否被锁定,如果被锁定,则不能删除
var workload = _trialWorkloadService.GetWorkloadDetailById(id);
var yearMonth = workload.WorkTime.ToString("yyyy-MM");
var isLock = _calculateService.IsLock(workload.DoctorId, yearMonth);
if (isLock)
{
return ResponseOutput.NotOk("Expenses have been settled and workload cannot be reset.");
}
var deleteResult = _trialWorkloadService.DeleteWorkload(id);
if (workload.DataFrom == (int)Domain.Share.WorkLoadFromStatus.FinalConfirm)
{
_calculateService.CalculateMonthlyPayment(new CalculateDoctorAndMonthDTO()
{
NeedCalculateReviewers = new List<Guid>()
{
workload.DoctorId
},
CalculateMonth = workload.WorkTime
}, User.FindFirst("id").Value);
}
return deleteResult;
}
}
}