Files
jinko.yikatong/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/AssignmentsController.cs
2025-08-12 15:11:26 +08:00

109 lines
3.6 KiB
C#

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 Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.UnifyResultAndValidation.Aop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace Dlhis.ScheduledTask.TaskAssignment.Controllers;
/// <summary>
/// 任务分配
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class AssignmentsController : ControllerBase
{
private readonly IAssignmentService _assignmentService;
private readonly IDbContext _dbContext;
public AssignmentsController(IAssignmentService assignmentService, IDbContext dbContext)
{
_assignmentService = assignmentService;
_dbContext = dbContext;
}
/// <summary>
/// 获取设备任务(按设备)
/// </summary>
/// <returns></returns>
[DisableApiLog]
[IgnoreTenant]
[HttpGet("deviceTasks")]
public async Task<List<DeviceTaskToDeviceByDeviceResponse>> DeviceGetTasksGetAsync([FromQuery] DeviceTaskGetRequest request)
{
return await _assignmentService.DeviceGetTasksAsync(request);
}
/// <summary>
/// 获取设备任务(按设备)
/// </summary>
/// <returns></returns>
[DisableApiLog]
[HttpPost("deviceTasks")]
[IgnoreTenant]
public async Task<List<DeviceTaskToDeviceByDeviceResponse>> DeviceGetTasksPostAsync(DeviceTaskGetRequest request)
{
return await _assignmentService.DeviceGetTasksAsync(request);
}
/// <summary>
/// 更新任务状态
/// </summary>
/// <param name="requests"></param>
/// <returns></returns>
[DisableApiLog]
[HttpPost("taskStatus")]
[IgnoreTenant]
public async Task UpdateDeviceTaskStatusAsync(List<UpdateDeviceTaskStatusRequest> requests)
{
await _assignmentService.UpdateDeviceTaskStatusAsync(requests);
}
[AllowAnonymous]
[HttpPost("balance/calc")]
[IgnoreTenant]
public async Task Calc()
{
var userCodes = await _dbContext.Queryable<UserBalanceEntity>()
.Where(x => SqlFunc.Subqueryable<UserBalanceTmpEntity>().Where(p => p.UserCode == x.UserCode).NotAny())
.Select(x => x.UserCode)
.Distinct()
.Take(5000)
.ToListAsync();
var d = new DateTime(2025, 6, 30);
foreach (var userCode in userCodes)
{
if (!await _dbContext.Queryable<UserBalanceTmpEntity>().Where(x => x.UserCode == userCode).AnyAsync())
{
await _dbContext.InsertAsync(new UserBalanceTmpEntity
{
UserCode = userCode,
Balance = 0,
Version = 0
});
}
var balance = await _dbContext.Queryable<BalanceRecordEntity>()
.Where(x => x.UserCode == userCode)
.Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
.Where(x => !BalanceRecordSourceConstants.IgnoreSources.Contains(x.Source))
.Where(x => x.CostDate <= d)
.SumAsync(x => x.Amount);
await _dbContext.Updateable<UserBalanceTmpEntity>()
.SetColumns(x => x.Balance == balance)
.SetColumns(x => x.ModifiedTime == DateTime.Now)
.Where(x => x.UserCode == userCode)
.ExecuteCommandAsync();
}
}
}