新增工资/仓储/生产日报等模块,移除旧考勤模块

- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
This commit is contained in:
yanpeng200212
2026-10-27 09:09:57 +08:00
parent 69c4052a64
commit 1f1b184411
119 changed files with 21576 additions and 1668 deletions
@@ -0,0 +1,66 @@
using F9WebAiTest.Application.Common;
using F9WebAiTest.Application.Dtos.PayRoll;
using F9WebAiTest.Application.Services.PayRoll;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace F9WebAiTest.Api.Controllers.PayRoll;
/// <summary>薪资计算-挡车/车头产量计算(对应 F9 薪资-挡车车头产量计算 CALCLDCCT)</summary>
[ApiController]
[Route("api/payroll/calcldcct")]
[Authorize]
public class CalcLdcctController : ControllerBase
{
private readonly ICalcLdcctService _svc;
public CalcLdcctController(ICalcLdcctService svc) => _svc = svc;
/// <summary>列表(账期起止 + 部门 + 工种 + 姓名/庄口关键字)</summary>
[HttpGet("list")]
public async Task<IActionResult> GetPaged([FromQuery] DateTime start, [FromQuery] DateTime end,
[FromQuery] long? depId = null, [FromQuery] long? worktypeId = null,
[FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 50)
=> Ok(ApiResult<PageResult<CalcLdcctListItemDto>>.Ok(
await _svc.GetPagedAsync(pageIndex, pageSize, start, end, depId, worktypeId, like ?? string.Empty)));
/// <summary>一键计算(挡车工):整账期 + 部门 + 工种全量覆盖</summary>
[HttpPost("calc-dcg")]
public async Task<IActionResult> CalcDcg([FromBody] CalcLdcctCalcDto dto)
{
try { return Ok(ApiResult<CalcLdcctResultDto>.Ok(await _svc.CalcDcgAsync(dto), "计算完成")); }
catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code)); }
}
/// <summary>一键计算(车头工):依赖已存的挡车工产量</summary>
[HttpPost("calc-ctg")]
public async Task<IActionResult> CalcCtg([FromBody] CalcLdcctCalcDto dto)
{
try { return Ok(ApiResult<CalcLdcctResultDto>.Ok(await _svc.CalcCtgAsync(dto), "计算完成")); }
catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code)); }
}
/// <summary>保存人工微调结果(整账期 + 部门 + 工种全量覆盖)</summary>
[HttpPost("save")]
public async Task<IActionResult> Save([FromBody] CalcLdcctSaveDto dto)
{
try
{
var count = await _svc.SaveAsync(dto);
return Ok(ApiResult<object>.Ok(new { count }, "保存成功"));
}
catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code)); }
}
/// <summary>删除整账期 + 部门 + 工种的计算结果</summary>
[HttpDelete]
public async Task<IActionResult> Delete([FromQuery] DateTime start, [FromQuery] DateTime end,
[FromQuery] long depId, [FromQuery] long worktypeId)
{
try
{
await _svc.DeleteAsync(start, end, depId, worktypeId);
return Ok(ApiResult<object>.Ok(null, "删除成功"));
}
catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code)); }
}
}