新增工资/仓储/生产日报等模块,移除旧考勤模块
- 新增 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:
@@ -0,0 +1,100 @@
|
||||
using F9WebAiTest.Application.Common;
|
||||
using F9WebAiTest.Application.Dtos.Prod;
|
||||
using F9WebAiTest.Application.Services.Prod;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace F9WebAiTest.Api.Controllers.Prod;
|
||||
|
||||
/// <summary>
|
||||
/// 生产-考勤:考勤登记(CQDJ)。
|
||||
/// 对应 F9 WinClient\F9.Business.Prod\KQ\CQDJ。
|
||||
/// </summary>
|
||||
[ApiController]
|
||||
[Route("api/prod/kaoqin")]
|
||||
[Authorize]
|
||||
public class KaoqinController : ControllerBase
|
||||
{
|
||||
private readonly IKaoqinService _svc;
|
||||
public KaoqinController(IKaoqinService svc) => _svc = svc;
|
||||
|
||||
private IActionResult Fail(ServiceException ex) => StatusCode(ex.Code, ApiResult<object>.Fail(ex.Message, ex.Code));
|
||||
|
||||
/// <summary>整组登记查询(日期 + 部门 + 工种 + 班次)</summary>
|
||||
[HttpGet("cqdj")]
|
||||
public async Task<IActionResult> GetRegister([FromQuery] DateTime date, [FromQuery] long depId,
|
||||
[FromQuery] long worktypeId = 0, [FromQuery] int banci = 1, [FromQuery] string keyword = "")
|
||||
{
|
||||
try { return Ok(ApiResult<CqdjViewDto>.Ok(await _svc.GetRegisterAsync(date, depId, worktypeId, banci, keyword ?? ""))); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>整组覆盖保存</summary>
|
||||
[HttpPost("cqdj")]
|
||||
public async Task<IActionResult> SaveRegister([FromBody] CqdjSaveDto dto)
|
||||
{
|
||||
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.SaveRegisterAsync(dto) }, "保存成功")); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>删除整组登记</summary>
|
||||
[HttpDelete("cqdj")]
|
||||
public async Task<IActionResult> DeleteRegister([FromQuery] DateTime date, [FromQuery] long depId,
|
||||
[FromQuery] long worktypeId = 0, [FromQuery] int banci = 1)
|
||||
{
|
||||
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.DeleteRegisterAsync(date, depId, worktypeId, banci) }, "删除成功")); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>「添加职工」可选职工</summary>
|
||||
[HttpGet("cqdj/employees")]
|
||||
public async Task<IActionResult> Employees([FromQuery] long depId, [FromQuery] long worktypeId = 0, [FromQuery] int banci = 1)
|
||||
=> Ok(ApiResult<List<CqdjEmpOptionDto>>.Ok(await _svc.GetEmployeesAsync(depId, worktypeId, banci)));
|
||||
|
||||
// ==================== 考勤统计(CQTJ) ====================
|
||||
|
||||
/// <summary>统计分页(库中的月快照)</summary>
|
||||
[HttpGet("cqtj")]
|
||||
public async Task<IActionResult> CqtjList([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId = 0,
|
||||
[FromQuery] long worktypeId = 0, [FromQuery] string like = "", [FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20)
|
||||
=> Ok(ApiResult<PageResult<CqtjRowDto>>.Ok(
|
||||
await _svc.GetCqtjPagedAsync(year, month, depId, worktypeId, like ?? "", pageIndex, pageSize)));
|
||||
|
||||
/// <summary>录入:已有快照取库,否则按账期实时汇总</summary>
|
||||
[HttpGet("cqtj/edit")]
|
||||
public async Task<IActionResult> CqtjEdit([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId)
|
||||
{
|
||||
try { return Ok(ApiResult<CqtjViewDto>.Ok(await _svc.GetCqtjForEditAsync(year, month, depId))); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>保存(整组覆盖)</summary>
|
||||
[HttpPost("cqtj")]
|
||||
public async Task<IActionResult> CqtjSave([FromBody] CqtjSaveDto dto)
|
||||
{
|
||||
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.SaveCqtjAsync(dto) }, "保存成功")); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>删除该年月的统计快照(depId=0 表示全部部门)</summary>
|
||||
[HttpDelete("cqtj")]
|
||||
public async Task<IActionResult> CqtjDelete([FromQuery] int year, [FromQuery] int month, [FromQuery] long depId = 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
var count = depId > 0
|
||||
? await _svc.DeleteCqtjAsync(year, month, depId)
|
||||
: await _svc.DeleteCqtjAllAsync(year, month);
|
||||
return Ok(ApiResult<object>.Ok(new { count }, "删除成功"));
|
||||
}
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
|
||||
/// <summary>一键生成:遍历全部车间,缺的才生成</summary>
|
||||
[HttpPost("cqtj/generate")]
|
||||
public async Task<IActionResult> CqtjGenerate([FromBody] CqtjGenerateDto dto)
|
||||
{
|
||||
try { return Ok(ApiResult<object>.Ok(new { count = await _svc.GenerateCqtjAllAsync(dto.Year, dto.Month) }, "生成完成")); }
|
||||
catch (ServiceException ex) { return Fail(ex); }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user