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; } } }