using Dlhis.Entity; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Dlhis.ScheduledTask.TaskAssignment.Request; using Dlhis.ScheduledTask.TaskAssignment.Response; using Dlhis.ScheduledTask.TaskAssignment.Services; using Dlhis.Sys.Api; using Dlhis.Sys.Api.Request; using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.UnifyResultAndValidation.Aop; using Kurisu.AspNetCore.Utils.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace Dlhis.ScheduledTask.TaskAssignment.Controllers; /// /// 任务分配 /// [Authorize] [Route("api/[controller]")] [ApiController] public class AssignmentsController : ControllerBase { private readonly IAssignmentService _assignmentService; private readonly IDbContext _dbContext; private readonly IUserApi _userApi; public AssignmentsController(IAssignmentService assignmentService, IDbContext dbContext, IUserApi userApi) { _assignmentService = assignmentService; _dbContext = dbContext; _userApi = userApi; } /// /// 获取设备任务(按设备) /// /// [DisableApiLog] [IgnoreTenant] [HttpGet("deviceTasks")] public async Task> DeviceGetTasksGetAsync([FromQuery] DeviceTaskGetRequest request) { return await _assignmentService.DeviceGetTasksAsync(request); } /// /// 获取设备任务关联人员 /// /// [DisableApiLog] [IgnoreTenant] [AllowAnonymous] [HttpGet("elevatorAcs/users")] public async Task> ElevatorAcsDeviceGetTasksGetAsync(string deviceUniqueNo) { return await _assignmentService.ElevatorAcsDeviceGetTasksGetAsync(deviceUniqueNo); } /// /// 获取设备任务 /// /// [DisableApiLog] [IgnoreTenant] [HttpGet("elevatorAcs/users/deviceTasks")] public async Task ElevatorAcsDeviceGetTasksGetAsync(string deviceUniqueNo, string userCode) { return await _assignmentService.GetElevatorAcsTaskAsync(deviceUniqueNo, userCode); } /// /// 获取设备任务(按设备) /// /// [DisableApiLog] [HttpPost("deviceTasks")] [IgnoreTenant] public async Task> DeviceGetTasksPostAsync(DeviceTaskGetRequest request) { return await _assignmentService.DeviceGetTasksAsync(request); } /// /// 更新任务状态 /// /// /// [DisableApiLog] [HttpPost("taskStatus")] [IgnoreTenant] [Transactional] public async Task UpdateDeviceTaskStatusAsync(List requests) { await _assignmentService.UpdateDeviceTaskStatusAsync(requests); } [Obsolete] [AllowAnonymous] [IgnoreTenant] [HttpPost("settlement/supplier/calc/{year:int}/{month:int}")] public async Task CalcSettlementSupplier([FromRoute] int year, [FromRoute] int month) { if (month is < 1 or > 12) { throw new UserFriendlyException("月份错误"); } //周期:上个月19号到本月18号 var s = new DateTime(year, month, 19).AddMonths(-1); var e = new DateTime(year, month, 19); var previousSettlementSupplierMonth = $"{s.Year}{s.Month:00}"; var currentSettlementSupplierMonth = $"{e.Year}{e.Month:00}"; var businessSettlements = await _dbContext.Queryable() .Where(x => x.CostDate >= s && x.CostDate < e) .Where(x => x.Type == BalanceRecordTypeEnumType.Out && x.Status == BalanceRecordStatusEnumType.Valid) .Where(x => x.TenantId == "2401" && x.BusinessPlaceCode.HasValue) .GroupBy(x => new { x.BusinessPlaceCode }) .Select(x => new { x.BusinessPlaceCode, Amount = SqlFunc.IsNull(SqlFunc.AggregateSum(x.Amount), 0) }) .ToListAsync(); var businessPlaceCodes = businessSettlements.Select(x => x.BusinessPlaceCode).ToList(); var businessPlaces = await _dbContext.Queryable() .Where(x => businessPlaceCodes.Contains(x.Code)) .Where(x => x.TenantId == "2401") .ToListAsync(); var previousData = await _dbContext.Queryable() .Where(x => x.SettleMonth == previousSettlementSupplierMonth) .Where(x => businessPlaceCodes.Contains(x.BusinessPlaceCode)) .Where(x => x.TenantId == "2401") .ToListAsync(); var settlementSupplierMonthlies = businessSettlements.Select(x => { var businessPlace = businessPlaces.First(p => p.Code == x.BusinessPlaceCode); var before = previousData.FirstOrDefault(p => p.BusinessPlaceCode == x.BusinessPlaceCode); return new SettlementSupplierMonthly { BusinessPlaceCode = x.BusinessPlaceCode!.Value, BusinessPlaceName = businessPlace.Name, SupplierName = businessPlace.Supplier, SettleMonth = currentSettlementSupplierMonth, OpeningBalance = before?.ClosingAmount ?? 0, CostAmount = x.Amount, PaidAmount = 0, RefundAmount = 0, ClosingAmount = (before?.ClosingAmount ?? 0) + x.Amount, Valid = true, TenantId = "2401" }; }).ToList(); await _dbContext.InsertAsync(settlementSupplierMonthlies); } /// /// 录入结算金额 /// /// /// //[AllowAnonymous] [Transactional] [IgnoreTenant] [HttpPost("settlement/supplier/pay")] public async Task ManuallySettlementSupplier1(ManuallySettlementSupplierRequest1 request) { var data = await _dbContext.Queryable() .Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401" && x.BusinessPlaceCode == request.BusinessPlaceCode) .Where(x => x.Valid) .FirstAsync(); data.ThrowIfNull("未找到结算数据"); //复制data然后修改 var newData = new SettlementSupplierMonthly { BusinessPlaceCode = data.BusinessPlaceCode, BusinessPlaceName = data.BusinessPlaceName, SupplierName = data.SupplierName, SettleMonth = data.SettleMonth, OpeningBalance = data.OpeningBalance, CostAmount = data.CostAmount, PaidAmount = request.Pay, RefundAmount = 0, ClosingAmount = data.ClosingAmount + request.Pay, Valid = true, TenantId = data.TenantId }; if (newData.ClosingAmount > 0) { throw new UserFriendlyException("结算金额过大"); } data.Valid = false; await _dbContext.UpdateAsync(data); await _dbContext.InsertAsync(newData); } /// /// 录入退款金额 /// /// /// //[AllowAnonymous] [IgnoreTenant] [HttpPost("settlement/supplier/refund")] public async Task ManuallySettlementSupplier1(ManuallySettlementSupplierRequest2 request) { var data = await _dbContext.Queryable() .Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401" && x.BusinessPlaceCode == request.BusinessPlaceCode) .Where(x => x.Valid) .FirstAsync(); data.ThrowIfNull("未找到结算数据"); //复制data然后修改 var newData = new SettlementSupplierMonthly { BusinessPlaceCode = data.BusinessPlaceCode, BusinessPlaceName = data.BusinessPlaceName, SupplierName = data.SupplierName, SettleMonth = data.SettleMonth, OpeningBalance = data.OpeningBalance, CostAmount = data.CostAmount, PaidAmount = 0, RefundAmount = request.Refund, ClosingAmount = data.ClosingAmount + request.Refund, Valid = true, TenantId = data.TenantId }; if (newData.ClosingAmount > 0) { throw new UserFriendlyException("退款金额过大"); } data.Valid = false; await _dbContext.UpdateAsync(data); await _dbContext.InsertAsync(newData); } /// /// 供应商结算报表 /// /// /// [IgnoreTenant] [HttpGet("settlement/supplier/page")] public async Task> GetSettlementSupplierPageAsync([FromQuery] SettlementSupplierPageRequest request) { var page = await _dbContext.Queryable() .Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401") .WhereIF(request.BusinessPlaceCodes.IsPresent(), x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode)) .Where(x => x.Valid) .OrderByDescending(x => x.CreateTime) .Select() .ToPageListAsync(request); try { var userIds = page.Data.Select(x => x.CreatedBy).Distinct().ToList(); var userInfos = await _userApi.GetUserByIdsAsync(new IdsRequest { Ids = userIds }); page.Data.ForEach(item => item.Creator = userInfos.FirstOrDefault(x => x.Id == item.CreatedBy)?.OperatorName ?? "系统自动"); } catch (Exception) { } page.Data.ForEach(x => { x.OpeningBalance = Math.Abs(x.OpeningBalance); x.CostAmount = Math.Abs(x.CostAmount); x.ClosingAmount = Math.Abs(x.ClosingAmount); }); return page; } /// /// 供应商结算管理 /// /// /// [IgnoreTenant] [HttpGet("settlement/supplier/originPage")] public async Task> GetSettlementSupplierOriginPageAsync([FromQuery] SettlementSupplierPageRequest request) { var page = await _dbContext.Queryable() .Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401") .WhereIF(request.BusinessPlaceCodes.IsPresent(), x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode)) .OrderByDescending(x => x.CreateTime) .Select() .ToPageListAsync(request); try { var userIds = page.Data.Select(x => x.CreatedBy).Distinct().ToList(); var userInfos = await _userApi.GetUserByIdsAsync(new IdsRequest { Ids = userIds }); page.Data.ForEach(item => item.Creator = userInfos.FirstOrDefault(x => x.Id == item.CreatedBy)?.OperatorName ?? "系统自动"); } catch (Exception) { } page.Data.ForEach(x => { x.OpeningBalance = Math.Abs(x.OpeningBalance); x.CostAmount = Math.Abs(x.CostAmount); x.ClosingAmount = Math.Abs(x.ClosingAmount); }); return page; } [IgnoreTenant] [HttpGet("settlement/supplier/least")] public async Task GetSettlementSupplierLeast(string settleMonth, Guid businessPlaceCode) { var data = await _dbContext.Queryable() .Where(x => x.SettleMonth == settleMonth && x.TenantId == "2401" && x.BusinessPlaceCode == businessPlaceCode) .Where(x => x.Valid) .FirstAsync(); data.ThrowIfNull("未找到结算数据"); return Math.Abs(data.ClosingAmount); } }