package com.malk.controller; import com.malk.server.common.McR; import com.malk.server.workhours.ApprovalWriteBackResult; import com.malk.server.workhours.ReSubmitApprovalResult; import com.malk.server.workhours.TimeCardApprovalStartRequest; import com.malk.service.workhours.ApprovalWriteBackService; import com.malk.service.workhours.ReSubmitApprovalService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * 审批结果回写工时汇总表 — 接口 *

* 审批结束或撤销后调用,传流程实例ID + 审批结果(0=拒绝/撤销,1=同意)。 * 异常由全局 {@link com.malk.filter.CatchException} 统一包装为 McR。 */ @Slf4j @RestController @RequestMapping("/approval") public class ApprovalController { @Autowired private ApprovalWriteBackService approvalWriteBackService; @Autowired private ReSubmitApprovalService reSubmitApprovalService; /** * 审批结果回写工时汇总表 * GET /approval/writeback?instanceId=xxx&result=1 * * @param instanceId 流程实例ID * @param result 审批结果:0=拒绝/撤销,1=同意 */ @PostMapping("/writeback") public McR writeback(@RequestParam String instanceId, @RequestParam int result) { log.info("writeback, {}, {}", instanceId, result); approvalWriteBackService.writeBackAsync(instanceId, result); return McR.success(true); } /** * 同步执行单张历史审批回写,供受控数据修复使用。 * * @param instanceId 审批表单实例 ID * @param result 审批结果:0=拒绝/撤销,1=同意 * @return 实际命中和更新统计 */ @PostMapping("/writeback/sync") public McR writebackSync(@RequestParam String instanceId, @RequestParam int result) { log.info("writebackSync, {}, {}", instanceId, result); return McR.success(approvalWriteBackService.writeBack(instanceId, result)); } /** * 补发起工时审批(bug 1 手工触发) * POST /approval/resubmit?monthText=202606[&submitterUserId=xxx][&dryRun=true] *

* 用于:①第一次全量补齐历史数据 ②Scheduler 上线前手工回归验证 * 逻辑参考前端 submitApprovalProcess:按 PM 分组 → queryProcess(RUNNING) → update / create * * @param monthText yyyyMM * @param submitterUserId 可空; 指定则仅处理该员工, 空则该月全员 * @param dryRun true 时只返回候选统计,不创建或更新审批 */ @PostMapping("/resubmit") public McR resubmit(@RequestParam String monthText, @RequestParam(required = false) String submitterUserId, @RequestParam(defaultValue = "false") boolean dryRun) { log.info("resubmit, monthText={}, submitterUserId={}, dryRun={}", monthText, submitterUserId, dryRun); return McR.success(reSubmitApprovalService.resubmit(monthText, submitterUserId, dryRun)); } /** * 使用配置的真人 System 账号发起 TimeCard 审批。 * * @param request 审批表单、流程编码、部门和表单数据 * @return 发起结果 */ @PostMapping("/start") public McR start(@RequestBody TimeCardApprovalStartRequest request) { return McR.success(reSubmitApprovalService.startApproval(request)); } }