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
{
///
/// 入组之后 工作量维护
///
[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;
}
///
/// 查询某个医生是否在某天有某个项目的工作量数据,处理添加来自医生自己的工作量数据
///
[HttpPost, Route("existWorkLoad")]
public IResponseOutput WorkLoadExist(WorkloadExistQueryDTO param)
{
return _trialWorkloadService.WorkloadExist(param);
}
/// 查询项目入组医生的工作量统计信息
[HttpPost, Route("getTrialEnrollmentWorkloadStats")]
public IResponseOutput> GetTrialEnrollmentWorkloadStats(WorkLoadDoctorQueryDTO doctorSearchModel)
{
return ResponseOutput.Ok(_trialWorkloadService.GetTrialEnrollmentWorkloadStats(doctorSearchModel));
}
///
/// 获取医生工作量(带有填充数据)
///
///
///
[HttpPost, Route("getDoctorWorkLoadList")]
public IResponseOutput> GetDoctorWorkLoadList(
WorkLoadStatsQueryDTO workLoadSearch)
{
return ResponseOutput.Ok(_trialWorkloadService.GetEnrollmentWorkloadStatsDetail(workLoadSearch)) ;
}
///
/// 获取来自医生端的工作量列表 详情
///
///
///
[HttpPost, Route("getReviewerWorkLoadListDetail")]
public IResponseOutput> GetReviewerWorkLoadListDetail(
WorkLoadDetailQueryDTO workLoadSearch)
{
return ResponseOutput.Ok(_trialWorkloadService.GetReviewerWorkLoadListDetail(workLoadSearch)) ;
}
///
/// 添加或更新工作量[AUTH]
///
///
///
[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()
{
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()
{
workload.DoctorId
},
CalculateMonth = workload.WorkTime
}, User.FindFirst("id").Value);
}
return deleteResult;
}
}
}