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 @@