tmp 供应商结算
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
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 Microsoft.AspNetCore.Authorization;
|
||||
@@ -25,11 +29,13 @@ public class AssignmentsController : ControllerBase
|
||||
{
|
||||
private readonly IAssignmentService _assignmentService;
|
||||
private readonly IDbContext _dbContext;
|
||||
private readonly IUserApi _userApi;
|
||||
|
||||
public AssignmentsController(IAssignmentService assignmentService, IDbContext dbContext)
|
||||
public AssignmentsController(IAssignmentService assignmentService, IDbContext dbContext, IUserApi userApi)
|
||||
{
|
||||
_assignmentService = assignmentService;
|
||||
_dbContext = dbContext;
|
||||
_userApi = userApi;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -115,7 +121,6 @@ public class AssignmentsController : ControllerBase
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// var userCodes = await _dbContext.Queryable<GainfoLeaveEntity>().Where(x => x.ResignationDate.HasValue && x.ResignationDate >= s && x.ResignationDate <= e)
|
||||
// .Where(x => x.Type != GainfoUserTypeEnumType.External && x.Type != GainfoUserTypeEnumType.Outsource)
|
||||
@@ -150,4 +155,193 @@ public class AssignmentsController : ControllerBase
|
||||
// .ExecuteCommandAsync();
|
||||
// }
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[IgnoreTenant]
|
||||
[HttpPost("settlement/supplier/calc/{year:int}/{month:int}")]
|
||||
public async Task CalcSettlementSupplier(int year, [FromQuery] 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<BalanceRecordEntity>()
|
||||
.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<BusinessPlaceEntity>()
|
||||
.Where(x => businessPlaceCodes.Contains(x.Code))
|
||||
.Where(x => x.TenantId == "2401")
|
||||
.ToListAsync();
|
||||
|
||||
var previousData = await _dbContext.Queryable<SettlementSupplierMonthly>()
|
||||
.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<SettlementSupplierMonthly>()
|
||||
.Where(x => x.SettleMonth == request.SettleMonth)
|
||||
.Where(x => x.Valid)
|
||||
.FirstAsync();
|
||||
|
||||
//复制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("结算金额过大,导致期末金额小于0");
|
||||
}
|
||||
|
||||
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<SettlementSupplierMonthly>()
|
||||
.Where(x => x.SettleMonth == request.SettleMonth)
|
||||
.Where(x => x.Valid)
|
||||
.FirstAsync();
|
||||
|
||||
//复制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("退款金额过大,导致期末金额小于0");
|
||||
}
|
||||
|
||||
data.Valid = false;
|
||||
await _dbContext.UpdateAsync(data);
|
||||
await _dbContext.InsertAsync(newData);
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[IgnoreTenant]
|
||||
[HttpPost("settlement/supplier/page")]
|
||||
public async Task<Pagination<SettlementSupplierPageResponse>> GetSettlementSupplierPageAsync([FromQuery] SettlementSupplierPageRequest request)
|
||||
{
|
||||
var page = await _dbContext.Queryable<SettlementSupplierMonthly>()
|
||||
.Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401")
|
||||
.Where(x => x.Valid)
|
||||
.OrderByDescending(x => x.CreateTime)
|
||||
.Select<SettlementSupplierPageResponse>()
|
||||
.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)
|
||||
{
|
||||
}
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[IgnoreTenant]
|
||||
[HttpPost("settlement/supplier/originPage")]
|
||||
public async Task<Pagination<SettlementSupplierPageResponse>> GetSettlementSupplierOriginPageAsync([FromQuery] SettlementSupplierPageRequest request)
|
||||
{
|
||||
var page = await _dbContext.Queryable<SettlementSupplierMonthly>()
|
||||
.Where(x => x.SettleMonth == request.SettleMonth && x.TenantId == "2401")
|
||||
.OrderByDescending(x => x.CreateTime)
|
||||
.Select<SettlementSupplierPageResponse>()
|
||||
.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)
|
||||
{
|
||||
}
|
||||
|
||||
return page;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user