From 56f7a6abb959e599e4dd270846dfa17d563848c6 Mon Sep 17 00:00:00 2001 From: zuqijia <2924963185@qq.com> Date: Wed, 15 Apr 2026 18:32:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E5=87=BA=E5=B7=AE?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E6=8F=90=E5=89=8D=E7=BB=93=E6=9D=9F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HrmTravelReqController.java | 6 ++ .../com/ruoyi/hrm/domain/HrmTravelReq.java | 1 + .../hrm/service/IHrmTravelReqService.java | 2 + .../service/impl/HrmTravelReqServiceImpl.java | 33 ++++++++ ruoyi-ui/src/api/hrm/travel.js | 6 ++ .../src/views/hrm/requests/travelDetail.vue | 78 ++++++++++++++++++- 6 files changed, 125 insertions(+), 1 deletion(-) diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java index 90abdfa..0dce55d 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmTravelReqController.java @@ -1,6 +1,7 @@ package com.ruoyi.hrm.controller; import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.AjaxResult; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; @@ -28,6 +29,7 @@ import java.util.List; public class HrmTravelReqController extends BaseController { private final IHrmTravelReqService service; + private final IHrmTravelReqService hrmTravelReqService; @GetMapping("/list") public TableDataInfo list(HrmTravelReqBo bo, PageQuery pageQuery) { @@ -56,6 +58,10 @@ public class HrmTravelReqController extends BaseController { public R remove(@PathVariable @NotEmpty Long[] bizIds) { return toAjax(service.deleteWithValidByIds(Arrays.asList(bizIds), true)); } + @PutMapping("/earlyEnd/{bizId}") + public R earlyEnd(@PathVariable Long bizId) { + return toAjax(hrmTravelReqService.earlyEnd(bizId)); + } @GetMapping("/all") public R> all(HrmTravelReqBo bo) { diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java index 5253b2b..4e9fadc 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/HrmTravelReq.java @@ -32,6 +32,7 @@ public class HrmTravelReq extends BaseEntity { private String bankName; private String bankAccount; private String remark; + private Date actualEndTime; @TableLogic private Integer delFlag; } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java index ea97340..a3dcb70 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/IHrmTravelReqService.java @@ -22,5 +22,7 @@ public interface IHrmTravelReqService { Boolean updateByBo(HrmTravelReqBo bo); + int earlyEnd(Long bizId); + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java index 696aa70..91cd5d7 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmTravelReqServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; +import java.util.Date; @RequiredArgsConstructor @Service @@ -128,4 +129,36 @@ public class HrmTravelReqServiceImpl implements IHrmTravelReqService { private String defaultStatus(String status) { return status == null ? "draft" : status; } + + @Override + @Transactional(rollbackFor = Exception.class) + public int earlyEnd(Long bizId) { + HrmTravelReq travelReq = baseMapper.selectById(bizId); + if (travelReq == null) { + throw new RuntimeException("出差申请不存在"); + } + + String status = travelReq.getStatus(); + if (!"approved".equals(status) && !"in_progress".equals(status)) { + throw new RuntimeException("当前状态不能提前结束,只有已通过或进行中的出差才能提前结束"); + } + + // 3. 检查是否已经提前结束过 + if (travelReq.getActualEndTime() != null) { + throw new RuntimeException("该出差已经提前结束过了"); + } + + // 4. 更新实际结束时间为当前时间 + travelReq.setActualEndTime(new Date()); + // 5. 可选:更新状态为已完成 + travelReq.setStatus("completed"); + + // 6. 执行更新 + int result = baseMapper.updateById(travelReq); + if (result <= 0) { + throw new RuntimeException("提前结束失败"); + } + + return result; + } } diff --git a/ruoyi-ui/src/api/hrm/travel.js b/ruoyi-ui/src/api/hrm/travel.js index 6454837..fc49024 100644 --- a/ruoyi-ui/src/api/hrm/travel.js +++ b/ruoyi-ui/src/api/hrm/travel.js @@ -46,3 +46,9 @@ export function allTravelReq(query) { params: query }) } +export function earlyEndTravel(bizId) { + return request({ + url: `/hrm/travel/earlyEnd/${bizId}`, + method: 'put' + }) +} diff --git a/ruoyi-ui/src/views/hrm/requests/travelDetail.vue b/ruoyi-ui/src/views/hrm/requests/travelDetail.vue index da5f797..a263d59 100644 --- a/ruoyi-ui/src/views/hrm/requests/travelDetail.vue +++ b/ruoyi-ui/src/views/hrm/requests/travelDetail.vue @@ -2,6 +2,30 @@