ApprovalController.java 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.malk.controller;
  2. import com.malk.server.common.McR;
  3. import com.malk.server.workhours.ApprovalWriteBackResult;
  4. import com.malk.server.workhours.ReSubmitApprovalResult;
  5. import com.malk.server.workhours.TimeCardApprovalStartRequest;
  6. import com.malk.service.workhours.ApprovalWriteBackService;
  7. import com.malk.service.workhours.ReSubmitApprovalService;
  8. import lombok.extern.slf4j.Slf4j;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.*;
  11. /**
  12. * 审批结果回写工时汇总表 — 接口
  13. * <p>
  14. * 审批结束或撤销后调用,传流程实例ID + 审批结果(0=拒绝/撤销,1=同意)。
  15. * 异常由全局 {@link com.malk.filter.CatchException} 统一包装为 McR。
  16. */
  17. @Slf4j
  18. @RestController
  19. @RequestMapping("/approval")
  20. public class ApprovalController {
  21. @Autowired
  22. private ApprovalWriteBackService approvalWriteBackService;
  23. @Autowired
  24. private ReSubmitApprovalService reSubmitApprovalService;
  25. /**
  26. * 审批结果回写工时汇总表
  27. * GET /approval/writeback?instanceId=xxx&result=1
  28. *
  29. * @param instanceId 流程实例ID
  30. * @param result 审批结果:0=拒绝/撤销,1=同意
  31. */
  32. @PostMapping("/writeback")
  33. public McR<Boolean> writeback(@RequestParam String instanceId,
  34. @RequestParam int result) {
  35. log.info("writeback, {}, {}", instanceId, result);
  36. approvalWriteBackService.writeBackAsync(instanceId, result);
  37. return McR.success(true);
  38. }
  39. /**
  40. * 同步执行单张历史审批回写,供受控数据修复使用。
  41. *
  42. * @param instanceId 审批表单实例 ID
  43. * @param result 审批结果:0=拒绝/撤销,1=同意
  44. * @return 实际命中和更新统计
  45. */
  46. @PostMapping("/writeback/sync")
  47. public McR<ApprovalWriteBackResult> writebackSync(@RequestParam String instanceId,
  48. @RequestParam int result) {
  49. log.info("writebackSync, {}, {}", instanceId, result);
  50. return McR.success(approvalWriteBackService.writeBack(instanceId, result));
  51. }
  52. /**
  53. * 补发起工时审批(bug 1 手工触发)
  54. * POST /approval/resubmit?monthText=202606[&submitterUserId=xxx][&dryRun=true]
  55. * <p>
  56. * 用于:①第一次全量补齐历史数据 ②Scheduler 上线前手工回归验证
  57. * 逻辑参考前端 submitApprovalProcess:按 PM 分组 → queryProcess(RUNNING) → update / create
  58. *
  59. * @param monthText yyyyMM
  60. * @param submitterUserId 可空; 指定则仅处理该员工, 空则该月全员
  61. * @param dryRun true 时只返回候选统计,不创建或更新审批
  62. */
  63. @PostMapping("/resubmit")
  64. public McR<ReSubmitApprovalResult> resubmit(@RequestParam String monthText,
  65. @RequestParam(required = false) String submitterUserId,
  66. @RequestParam(defaultValue = "false") boolean dryRun) {
  67. log.info("resubmit, monthText={}, submitterUserId={}, dryRun={}",
  68. monthText, submitterUserId, dryRun);
  69. return McR.success(reSubmitApprovalService.resubmit(monthText, submitterUserId, dryRun));
  70. }
  71. /**
  72. * 使用配置的真人 System 账号发起 TimeCard 审批。
  73. *
  74. * @param request 审批表单、流程编码、部门和表单数据
  75. * @return 发起结果
  76. */
  77. @PostMapping("/start")
  78. public McR<Boolean> start(@RequestBody TimeCardApprovalStartRequest request) {
  79. return McR.success(reSubmitApprovalService.startApproval(request));
  80. }
  81. }