Files
jinko.yikatong/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/HangfireController.cs
2024-06-04 14:26:56 +08:00

108 lines
3.8 KiB
C#

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;
/// <summary>
/// 调度任务
/// </summary>
[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;
}
/// <summary>
/// 手动获取人员
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPost("sap/person/no")]
public async Task PersonManuallySync(SapNoRequest request)
{
await _hangfireService.CreateSapPersonSyncBackgroundJobAsync(request);
}
/// <summary>
/// 手动启动人事范围同步
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[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<object> 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<BalanceRecordEntity>().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();
var row = ls.First();
var code = row.UserCode;
var data = await _dbContext.Queryable<BalanceRecordEntity>().Where(x => x.UserCode == code).Where(x => x.Remark == row.Remark).ToListAsync();
if (data.Count > 1)
{
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<BalanceRecordEntity>().Where(x => x.UserCode == f.UserCode)
.Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
.SumAsync(x => x.Amount);
var mealInfo = await _dbContext.Queryable<GainfoMealEntity>().Where(x => x.UserCode == f.UserCode).SingleAsync();
await _dbContext.Updateable<GainfoMealEntity>()
.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();
}
return data;
}
}