diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java index f61e362..0be10c2 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/controller/HrmMyApplyController.java @@ -18,8 +18,10 @@ import com.ruoyi.hrm.domain.vo.HrmMyApplyVo; import com.ruoyi.hrm.domain.vo.HrmReimburseReqVo; import com.ruoyi.hrm.domain.vo.HrmSealReqVo; import com.ruoyi.hrm.domain.vo.HrmTravelReqVo; +import com.ruoyi.hrm.domain.HrmFlowInstance; import com.ruoyi.hrm.mapper.HrmAppropriationReqMapper; import com.ruoyi.hrm.mapper.HrmEmployeeMapper; +import com.ruoyi.hrm.mapper.HrmFlowInstanceMapper; import com.ruoyi.hrm.mapper.HrmLeaveReqMapper; import com.ruoyi.hrm.mapper.HrmReimburseReqMapper; import com.ruoyi.hrm.mapper.HrmSealReqMapper; @@ -32,7 +34,9 @@ import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -48,6 +52,7 @@ public class HrmMyApplyController extends BaseController { private final HrmSealReqMapper sealReqMapper; private final HrmReimburseReqMapper reimburseReqMapper; private final HrmAppropriationReqMapper appropriationReqMapper; + private final HrmFlowInstanceMapper flowInstanceMapper; @GetMapping("/list") public TableDataInfo list(String bizType, String status, String keyword, PageQuery pageQuery) { @@ -80,6 +85,9 @@ public class HrmMyApplyController extends BaseController { all.addAll(mapAppropriation(appropriationReqMapper.selectVoWithProjectList(buildAppropriationBo(emp.getEmpId(), status)), nickName)); } + // 用流程实例状态覆盖业务表状态,避免历史数据状态未同步 + overrideStatusByFlowInstance(all); + if (keyword != null && !keyword.isEmpty()) { String lower = keyword.toLowerCase(); all = all.stream().filter(v -> contains(v, lower)).collect(Collectors.toList()); @@ -93,6 +101,34 @@ public class HrmMyApplyController extends BaseController { return TableDataInfo.build(page); } + private void overrideStatusByFlowInstance(List all) { + if (all == null || all.isEmpty()) return; + Map> bizIdsByType = all.stream() + .filter(v -> v.getBizType() != null && v.getBizId() != null) + .collect(Collectors.groupingBy( + HrmMyApplyVo::getBizType, + Collectors.mapping(HrmMyApplyVo::getBizId, Collectors.toList()) + )); + Map statusByKey = new HashMap<>(); + bizIdsByType.forEach((bizType, bizIds) -> { + if (bizIds.isEmpty()) return; + List insts = flowInstanceMapper.selectList( + new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() + .eq(HrmFlowInstance::getBizType, bizType) + .in(HrmFlowInstance::getBizId, bizIds) + ); + for (HrmFlowInstance inst : insts) { + if (inst.getStatus() == null) continue; + statusByKey.merge(bizType + "_" + inst.getBizId(), inst.getStatus(), + (oldS, newS) -> oldS); + } + }); + for (HrmMyApplyVo v : all) { + String s = statusByKey.get(v.getBizType() + "_" + v.getBizId()); + if (s != null) v.setStatus(s); + } + } + private boolean contains(HrmMyApplyVo v, String lower) { return Objects.toString(v.getTitle(), "").toLowerCase().contains(lower) || Objects.toString(v.getRemark(), "").toLowerCase().contains(lower) @@ -109,7 +145,7 @@ public class HrmMyApplyController extends BaseController { private List mapLeave(List list, String nickName) { return list.stream().map(v -> toVo("leave", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } private List mapTravel(List list, String nickName) { return list.stream().map(v -> toVo("travel", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } - private List mapSeal(List list, String nickName) { return list.stream().map(v -> toVo("seal", v.getBizId(), v.getEmpId(), nickName, v.getRemark(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } + private List mapSeal(List list, String nickName) { return list.stream().map(v -> toVo("seal", v.getBizId(), v.getEmpId(), nickName, v.getPurpose() != null ? v.getPurpose() : v.getRemark(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } private List mapReimburse(List list, String nickName) { return list.stream().map(v -> toVo("reimburse", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } private List mapAppropriation(List list, String nickName) { return list.stream().map(v -> toVo("appropriation", v.getBizId(), v.getEmpId(), nickName, v.getReason(), v.getStatus(), v.getCreateTime())).collect(Collectors.toList()); } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java index 10825b2..249352b 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/domain/vo/HrmFlowInstanceVo.java @@ -6,6 +6,7 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; +import java.util.Map; @Data public class HrmFlowInstanceVo implements Serializable { @@ -41,4 +42,7 @@ public class HrmFlowInstanceVo implements Serializable { private Date createTime; private String updateBy; private Date updateTime; + + /** 业务表回填的数据,用于列表关键信息展示 */ + private Map bizData; } diff --git a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java index 3bf8f8b..28df45e 100644 --- a/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java +++ b/fad-hrm/src/main/java/com/ruoyi/hrm/service/impl/HrmFlowInstanceServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.UserService; @@ -27,7 +28,9 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @RequiredArgsConstructor @@ -42,6 +45,11 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { private final UserService userService; private final HrmFlowCcMapper ccMapper; private final HrmTravelReqMapper travelReqMapper; + private final HrmLeaveReqMapper leaveReqMapper; + private final HrmSealReqMapper sealReqMapper; + private final HrmReimburseReqMapper reimburseReqMapper; + private final HrmAppropriationReqMapper appropriationReqMapper; + private final ObjectMapper objectMapper; private final ApplicationEventPublisher eventPublisher; @Override @@ -188,9 +196,55 @@ public class HrmFlowInstanceServiceImpl implements IHrmFlowInstanceService { } } } + fillInstanceBizData(result.getRecords()); return TableDataInfo.build(result); } + @SuppressWarnings("unchecked") + private void fillInstanceBizData(List records) { + if (records == null || records.isEmpty()) return; + Map> bizIdsByType = records.stream() + .filter(v -> v.getBizType() != null && v.getBizId() != null) + .collect(Collectors.groupingBy( + HrmFlowInstanceVo::getBizType, + Collectors.mapping(HrmFlowInstanceVo::getBizId, Collectors.toList()) + )); + Map bizDataMap = new HashMap<>(); + bizIdsByType.forEach((bizType, bizIds) -> { + if (bizIds.isEmpty()) return; + switch (bizType) { + case "leave": + leaveReqMapper.selectBatchIds(bizIds).forEach(d -> + bizDataMap.put("leave_" + d.getBizId(), objectMapper.convertValue(d, Map.class))); + break; + case "travel": + travelReqMapper.selectBatchIds(bizIds).forEach(d -> + bizDataMap.put("travel_" + d.getBizId(), objectMapper.convertValue(d, Map.class))); + break; + case "seal": + sealReqMapper.selectBatchIds(bizIds).forEach(d -> + bizDataMap.put("seal_" + d.getBizId(), objectMapper.convertValue(d, Map.class))); + break; + case "reimburse": + reimburseReqMapper.selectBatchIds(bizIds).forEach(d -> + bizDataMap.put("reimburse_" + d.getBizId(), objectMapper.convertValue(d, Map.class))); + break; + case "appropriation": + appropriationReqMapper.selectBatchIds(bizIds).forEach(d -> + bizDataMap.put("appropriation_" + d.getBizId(), objectMapper.convertValue(d, Map.class))); + break; + default: + break; + } + }); + records.forEach(vo -> { + Object data = bizDataMap.get(vo.getBizType() + "_" + vo.getBizId()); + if (data != null) { + vo.setBizData((Map) data); + } + }); + } + @Override public List queryList(HrmFlowInstanceBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); diff --git a/ruoyi-ui/src/views/hrm/components/BizDetailContainer/index.vue b/ruoyi-ui/src/views/hrm/components/BizDetailContainer/index.vue index f2d1681..092de59 100644 --- a/ruoyi-ui/src/views/hrm/components/BizDetailContainer/index.vue +++ b/ruoyi-ui/src/views/hrm/components/BizDetailContainer/index.vue @@ -4,13 +4,13 @@
{{ bizTitle }}
- 返回 + 返回 刷新 - + 通过 - + 驳回
@@ -53,7 +53,7 @@ -
+
审批操作
@@ -75,7 +75,7 @@ 操作汇报
-
+
@@ -89,7 +89,7 @@
{{ item.createByName }} {{ item.createTime }} - 删除
@@ -160,6 +160,9 @@ export default { } }, computed: { + isPreview () { + return this.preview || !!this.$route?.query?.preview + }, currentBizId () { return this.bizId }, diff --git a/ruoyi-ui/src/views/hrm/minix/applyTypeMinix.js b/ruoyi-ui/src/views/hrm/minix/applyTypeMinix.js index d415a54..bfdbb0b 100644 --- a/ruoyi-ui/src/views/hrm/minix/applyTypeMinix.js +++ b/ruoyi-ui/src/views/hrm/minix/applyTypeMinix.js @@ -46,7 +46,7 @@ export default { if (routePath) { this.$router.push({ path: routePath, - query: { bizId: bizId } + query: { bizId: bizId, preview: 1 } }) } else { this.$message.warning('无法确定申请类型对应的详情页面') diff --git a/ruoyi-ui/src/views/hrm/requests/apply.vue b/ruoyi-ui/src/views/hrm/requests/apply.vue index 5b29286..3a24b1e 100644 --- a/ruoyi-ui/src/views/hrm/requests/apply.vue +++ b/ruoyi-ui/src/views/hrm/requests/apply.vue @@ -50,7 +50,6 @@ stripe border @row-dblclick="handleRowClick"> -