using Dlhis.Basic.Api.Request; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Dlhis.ScheduledTask.Common.Request; using Dlhis.ScheduledTask.Common.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace Dlhis.ScheduledTask.TaskAssignment.Controllers; /// /// 调度任务 /// [Authorize(Roles = "admin")] [Route("api/[controller]")] [ApiController] public class HangfireController : ControllerBase { private readonly IHangfireService _hangfireService; private readonly IDbContext _dbContext; public HangfireController(IHangfireService hangfireService, IDbContext dbContext) { _hangfireService = hangfireService; _dbContext = dbContext; } /// /// 手动获取人员 /// /// /// [AllowAnonymous] [HttpPost("sap/person/no")] public async Task PersonManuallySync(SapNoRequest request) { await _hangfireService.CreateSapPersonSyncBackgroundJobAsync(request); } /// /// 手动启动人事范围同步 /// /// /// [HttpPost("sap/werk/no")] public async Task WerkManuallySync(SapNoRequest request) { await _hangfireService.CreateSapWerkSyncBackgroundJobAsync(request); } [HttpPost("assignment-generate")] public void GeneratePermissionsAsync(GeneratePermissionIdRequest request) { _hangfireService.GeneratePermissions(request); } [IgnoreTenant] [HttpPost("recalc")] public async Task ReCalc() { // select UserCode,Remark, count(1) count from balancerecord // where Status = 'Valid' // and TenantId !='1201' // and IsDeleted = false // group by UserCode,Remark // having ifnull(Remark,'')!='' and count > 1 and Remark !='用户取消' and Remark !='正常发放'; var ls = await _dbContext.Queryable().Where(x => x.Status == BalanceRecordStatusEnumType.Valid) .Select(x => new { x.UserCode, x.Remark, count = SqlFunc.AggregateCount(x.Id) }) .GroupBy(x => new { x.UserCode, x.Remark }) .Having(x => SqlFunc.IsNull(x.Remark, "") != "" && SqlFunc.AggregateCount(1) > 1 && x.Remark != "用户取消" && x.Remark != "正常发放") .ToListAsync(); foreach (var row in ls) { var data = await _dbContext.Queryable() .Where(x => x.UserCode == row.UserCode) .Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.MealSupplement) .Where(x => x.Remark == row.Remark) .ToListAsync(); if (data.Count <= 1) { continue; } var f = data.First(); var others = data.Where(x => x.Id != f.Id).ToList(); others.ForEach(x => x.Status = BalanceRecordStatusEnumType.Obsolute); await _dbContext.UpdateAsync(others); var sum = await _dbContext.Queryable().Where(x => x.UserCode == f.UserCode) .Where(x => x.Status == BalanceRecordStatusEnumType.Valid) .SumAsync(x => x.Amount); var mealInfo = await _dbContext.Queryable().Where(x => x.UserCode == f.UserCode).SingleAsync(); await _dbContext.Updateable() .SetColumns(x => x.Balance == sum) .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.ModifiedTime == DateTime.Now) .Where(x => x.UserCode == f.UserCode && x.Version == mealInfo.Version) .ExecuteCommandAsync(); } } }