Files
yanpeng200212 1f1b184411 新增工资/仓储/生产日报等模块,移除旧考勤模块
- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
2026-10-27 09:09:57 +08:00

107 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工作进度-26:参考老系统完成整个考勤模块(CQDJ 补齐 + CQTJ 新建 + 依赖配置)
> **协作规则(长期生效)**:**每次对话结尾都要生成工作进度**。
> 即在每轮对话结束前,把本轮完成的内容追加为 `工作进度/工作进度-N.md`,并在文档中保留本条规则,方便下一轮接续。
## 一、需求
用户要求:**完善整个考勤模块,不要删减**,并给出老系统参考目录
`D:\AntaiProject - 副本\trunk\WinClient\F9.Business.Prod\KQ`(CQDJ 考勤登记 + CQTJ 考勤统计)。
## 二、老系统源码研读结论(KQ 目录)
| 文件 | 大小 | 结论 |
| --- | --- | --- |
| `CQDJ\Page_Cqdj.cs` | 19KB | 查询口径:日期 + 部门 + 工种 + 班次;录入/删除整组、初始化为正常出勤;「从指定日期复制」 |
| `CQDJ\Page_Cqdj_Edit.cs` | 77KB | 工具栏 8 个按钮(标准/出勤/加班/流动/事假/公假/代班/夜班)+ 添加/删除职工 + 刷新;保存整组覆盖、倒挤「正常」 |
| `CQDJ\Page_Cqdj_addOtherChejian_select.cs` | — | 确认**无引用**,遗留功能,不移植 |
| `CQTJ\Page_Cqtj.cs` | 84KB | 统计是**月快照**;录入时库中有快照取库,否则 `CqtjViews` 实时汇总;含 `quanqin` 全勤奖、`jiaqiBuzhuJisuan` 假期补助、`jisuanJiabanMkHours` 加班免扣、`jisuanJianbanJine` 加班费、`liudongJineJisuan` 流动、`daibanJineJisuan` 代班、`jisuanCqTianci` 出勤天次、`Yijianshengcheng` 一键生成 |
| `CQTJ\Page_Cqtj_Edit.cs` | 7.5KB | 可编辑列:年假/公假/调休/法定假/全勤免扣/全勤计算/全勤奖/加班费/流动工资/代班工资/假期补助分项与合计/夜班补助/旷工考核 |
CQTJ 强依赖(老系统在 PayRoll 侧):
- **CONFZQ 薪资配置-账期**:`QsQuanqinDays` 前缫出勤天数(为 0 时直接抛错不让录入)
- **CONFEMPLOYEE 薪资配置-职工**:`Hours_FadingBz` / `Hours_FadingGz` / `IsXuegong`
- **岗位胜任考核**:考核结果决定加班费单价档位(无记录时回落 `JiabanJineBz`)
## 三、本轮新增 / 修改
### 后端(新增)
| 文件 | 说明 |
| --- | --- |
| `Domain/Entities/Prod/Cqtj.cs` | **考勤统计实体**(`biz_prod_kq_cqtj`),含天数/时长/请假分项/学工/法定假/全勤相关时长/全部金额字段 |
| `Domain/Entities/PayRoll/ConfEmployee.cs` | `ConfZq`(`ConfZqs`)、`ConfEmployee`(`ConfEmployees`)、`Gwsrkh`(`Gwsrkhs`) |
| `Dtos/Prod/KaoqinDtos.cs` | 追加 `CqtjRowDto / CqtjSaveDto / CqtjGenerateDto / CqtjViewDto` |
| `Dtos/PayRoll/ConfEmployeeDtos.cs` | `ConfZqDto / ConfEmployeeDto / GwsrkhDto` |
| `Services/Prod/KaoqinService.cs` | 追加 CQTJ:分页、录入(取库 or 实时汇总)、保存(整组覆盖)、删除、一键生成、全部删除;并新增 8 个口径函数 |
| `Services/PayRoll/ConfEmployeeService.cs` | `IConfZqService / IConfEmployeeService / IGwsrkhService` 接口 + 实现 |
| `Api/Controllers/Prod/KaoqinController.cs` | 追加 `GET/POST/DELETE /cqtj`、`GET /cqtj/edit`、`POST /cqtj/generate` |
| `Api/Controllers/PayRoll/ConfEmployeeController.cs` | `api/payroll/confzq`、`api/payroll/confemployee`、`api/payroll/gwsrkh` |
| `Application/DependencyInjection.cs` | 注册 `IConfZqService / IConfEmployeeService / IGwsrkhService` |
| `Infrastructure/Data/DbSeeder.cs` | 菜单:生产-考勤 增「考勤统计」;薪资 增「账期薪资配置 / 职工薪资配置 / 岗位胜任考核」 |
### 后端口径(严格对齐老系统)
- **正常倒挤**:`正常 = 标准 - 请假 - 旷工 - 流动 - 外派 - 代班 - 工伤`;`出勤 = 正常 + 流动 + 代班 + 外派 + 工伤`(不含加班)
- **出勤天数**:`标准 = 工种配置 QqDaysStandard`;`实际 = 本部门出勤时长 / HoursPerday`;`天次 = (出勤+加班)>0 的天数`
- **全勤奖** `quanqin()`(完整移植,含多部门 / 多工种分支):
1. 总旷工 ≥ 半天 → 0;2. 总出勤 ≤ 3 天 → 0;
3. 多部门:`∑出勤+带薪 ≥ 15 天` 按实际出勤折算,否则按标准出勤折算;离职 / 新入职分别处理;
4. 单部门:`∑出勤+带薪请假 ≥ 15 天` 取全额,否则 `全勤奖/标准出勤时长×总出勤`;
5. 设备办全职:出勤含加班达前缫天数且不低于标准 → 请假不扣;
6. 其余:`全勤奖 - (全勤奖 / QqHoursMaxQj) × 请假时长`
- **假期补助**:按明细「请假类型 × 出勤工种」分组,病假/轮休/婚假/丧假/法定假/年假/调休分别乘工种单价;`法定假 = 补助小时×JiaqiJineFadingBz + 工资小时×JiaqiJineFadingGz`
- **加班免扣请假**:`出勤+加班 ≥ 前缫出勤天数×HoursPerday 且 加班 ≥ QqHoursDkMinjiaban` → 免扣 `QqHoursDkQingjia`
- **加班费**:按加班明细工种取单价;有岗位胜任考核时按 欠合格/期望/合格/胜任/超胜任 取 `Jiaban_GwsrkhJine*`,无记录取 `JiabanJineBz`;学工加班 = `XgJineGangwei /(QqDaysStandard×HoursPerday) × 时长`
- **流动** = `LiudongJineGuding × 时长`;**代班** = `JineGangwei /(QqDaysStandard×HoursPerday) × 时长`;**夜班** = `JineYeban × 夜班次数`;**旷工考核** = `JiaqiJineKuangongKk × 旷工时长`
- **扎帐校验**:账期 `IsZhaZhang` 时禁止保存 / 删除 / 生成
### 前端
| 文件 | 说明 |
| --- | --- |
| `views/prod/kaoqin/index.vue`(改) | 补齐工具栏:刷新 / 复制指定日期 / 设标准时长 / 设出勤时长 / **加班 / 流动 / 事假 / 公假 / 代班 / 夜班** / 添加职工 / 删除职工 / 删除整组 / 保存;职工表加多选列;明细表加「出勤部门 / 出勤工种」(代班、流动跨车间);保存前「出勤超标准」二次确认;新增复制日期弹窗(可勾选初始化为正常出勤) |
| `views/prod/kaoqin/cqtj/index.vue`(新) | 考勤统计:年月 + 部门 + 工种 + 关键字;分组表头(出勤天数 / 时长 / 学工 / 请假分项 / 全勤与金额);录入(弹窗内可编辑带「*」字段)、删除、**一键生成**、全部删除;分页 |
| `views/payroll/confzq/index.vue`(新) | 账期薪资配置:年度/月份/前缫出勤天数 |
| `views/payroll/confemployee/index.vue`(新) | 职工薪资配置:职工/工种/法定补助h/法定工资h/学工 |
| `views/payroll/gwsrkh/index.vue`(新) | 岗位胜任考核:年度/月份/部门/职工/考核结果 |
| `router/index.js`(改) | 新增 5 条 componentMap |
## 四、验证
| 项 | 结果 |
| --- | --- |
| 解决方案编译 | **0 个错误** |
| `GET /auth/menus` | ✅ 生产-考勤 → 考勤登记 / 考勤统计;薪资 → …/账期薪资配置 / 职工薪资配置 / 岗位胜任考核 |
| 账期薪资配置 | ✅ POST 2026/10 QsQuanqinDays=26 成功 |
| 考勤登记 | ✅ 46 人保存成功(含 1 人加班 2h + 病假 1h + 夜班 1) |
| 实时汇总 | ✅ `曾红君 出勤=8 加班=2 请假=1 实际天=0.89 天次=1 加班费=30 病假补助=5 补助合计=5 夜班补助=20`(与手算一致:正常 9-1=8,加班费 2×15,病假 1×5,夜班 1×20) |
| 统计保存 / 列表 / 取库 | ✅ 保存 46 → 列表 total=46 → 再录入 `exists=True` |
| 删除 / 一键生成 | ✅ 删除 46;一键生成 1 个车间 |
| 前端 5 个页面 | ✅ vite 全部 200,无 lint |
测试数据(2026-10-26 的 46 条登记、统计快照、测试用工种薪资配置 3 条、账期配置 1 条)**已全部清理**。
## 五、待办 / 已知差异
1. **跨部门重复考勤提示**:老系统在加载时提示「X 职工已在 Y 部门录入」,本轮未移植(需额外接口),后续补
2. **岗位胜任考核**放在【薪资】下(老系统属 `CalXzMain` 薪资模块),仅按年月维护考核结果,未做考核流程
3. 统计页的**列宽 / 分组表头**在窄屏下需横向滚动,后续可加列配置
4. 报表设计器脚本 `F9ReportDesignerHandler.ps1` **改完必须确认 UTF-8 BOM 仍在**
5. `views/notification/type/index.vue` 里仍有 `/attendance/approve?leaveId=` 示例文本
## 六、下次接续提示
- 改后端先按端口 `Stop-Process` 再编译,否则 DLL 锁定;vite 卡死时同样按端口杀掉重启
(当前:后端 3000 PID 17000,前端 5173 PID 26328)
- 登录 admin / 123456
- 考勤相关文件:
- 后端 `Domain/Entities/Prod/Cqdj.cs`、`Cqtj.cs`、`Domain/Entities/PayRoll/ConfEmployee.cs`
- `Dtos/Prod/KaoqinDtos.cs`、`Dtos/PayRoll/ConfEmployeeDtos.cs`
- `Services/Prod/KaoqinService.cs`(CQDJ + CQTJ 全部口径)、`Services/PayRoll/ConfEmployeeService.cs`
- `Controllers/Prod/KaoqinController.cs`、`Controllers/PayRoll/ConfEmployeeController.cs`
- 前端 `views/prod/kaoqin/index.vue`、`views/prod/kaoqin/cqtj/index.vue`、
`views/payroll/confzq|confemployee|gwsrkh/index.vue`
- 老系统参考:`D:\AntaiProject - 副本\trunk\WinClient\F9.Business.Prod\KQ\`
- **每轮对话结尾记得生成本工作进度文档**