112 lines
4.0 KiB
C#
112 lines
4.0 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 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();
|
|
|
|
foreach (var row in ls)
|
|
{
|
|
var data = await _dbContext.Queryable<BalanceRecordEntity>()
|
|
.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<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();
|
|
}
|
|
}
|
|
} |