feat: (REQ-3300) 列表页重新复制属性,待提报:TO_REPORT/REPORT_FROM_APPROVE,决策中:DECIDING/DECIDING_FROM_APPROVE

This commit is contained in:
xudawei 2025-02-11 17:41:25 +08:00
parent 5ed8b6775e
commit a791c7180c
2 changed files with 114 additions and 5 deletions

View File

@ -35,6 +35,7 @@ public enum VisaButtonTypeEnum {
APPROVAL_RECORD("approval_record", "查看审批记录"),
TO_HANDLE("to_handle", "去处理"),
PRINT("print", "打印"),
DETAIL("detail", "详情"),
;
@ -42,10 +43,11 @@ public enum VisaButtonTypeEnum {
private String desc;
//分页列表页Map,key:角色+单据状态value功能权限的按钮列表
private static Map<String, Set<VisaButtonTypeEnum>> bizTypeBtnMap = Maps.newHashMap();
static {
// 发起人不同状态按钮权限
// 发起人不同状态按钮权限-详情页
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newHashSet(UPDATE, DELETE));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newHashSet(UPDATE, FORBID));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(UPDATE, EXECUTE, TO_APPROVE, FORBID, CHAT_GROUP_RECORD,PRINT));
@ -55,7 +57,7 @@ public enum VisaButtonTypeEnum {
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newHashSet(UPLOAD_FILE, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(CHAT_GROUP_RECORD, APPROVAL_RECORD));
// 决策人不同状态按钮权限
// 决策人不同状态按钮权限-详情页
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(UPDATE, CHAT_GROUP_RECORD,PRINT));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newHashSet(UPDATE, CHAT_GROUP_RECORD,PRINT));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newHashSet(UPDATE, CHAT_GROUP_RECORD,PRINT));
@ -63,10 +65,10 @@ public enum VisaButtonTypeEnum {
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newHashSet(UPLOAD_FILE, CHAT_GROUP_RECORD, APPROVAL_RECORD,PRINT));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(CHAT_GROUP_RECORD, APPROVAL_RECORD));
//审核人不同状态按钮权限
//审核人不同状态按钮权限-详情页
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.APPROVE.name() + VisaStatusEnum.APPROVING.name(), Sets.newHashSet(TO_HANDLE, CHAT_GROUP_RECORD,PRINT));
//其他不同状态按钮权限
//其他不同状态按钮权限-详情页
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(PRINT, CHAT_GROUP_RECORD));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newHashSet(PRINT, CHAT_GROUP_RECORD));
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newHashSet(PRINT, CHAT_GROUP_RECORD));
@ -75,6 +77,44 @@ public enum VisaButtonTypeEnum {
bizTypeBtnMap.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(CHAT_GROUP_RECORD, APPROVAL_RECORD));
//[打印]按钮是通过OMS统一配置故此处不处理
}
//分页列表页Map,key:角色+单据状态value功能权限的按钮列表
private static Map<String, Set<VisaButtonTypeEnum>> bizTypeBtnMapWhenPage = Maps.newHashMap();
static {
// 发起人不同状态按钮权限-分页列表页
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.EXECUTING.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.APPROVING.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.COMPLETED.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CREATE.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(DETAIL));
// 确认人不同状态按钮权限-分页列表页
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.EXECUTING.name(), Sets.newHashSet(DETAIL, UPDATE));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.APPROVING.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.COMPLETED.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.CONFIRM.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(DETAIL));
// 其他人不同状态按钮权限-分页列表页
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.TO_REPORT.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.REPORT_FROM_APPROVE.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.DECIDING_FROM_APPROVE.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.EXECUTING.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.APPROVING.name(), Sets.newHashSet(DETAIL, APPROVAL_RECORD));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.COMPLETED.name(), Sets.newHashSet(DETAIL));
bizTypeBtnMapWhenPage.put(VisaConfirmBizTypeEnum.OTHER.name() + VisaStatusEnum.FORBIDED.name(), Sets.newHashSet(DETAIL));
}
/**
@ -117,6 +157,32 @@ public enum VisaButtonTypeEnum {
}
}
/**
* 根据角色与单据状态获取按钮权限
*/
public static Set<VisaButtonTypeEnum> fetchBtnsByBizTypeAndStatusWhenPage(Set<VisaConfirmBizTypeEnum> bizTypeSet, VisaStatusEnum status) {
if (Objects.isNull(bizTypeSet) || Objects.isNull(status)) {
return Sets.newHashSet();
}
Set<VisaButtonTypeEnum> returnBtnSet = Sets.newHashSet();
bizTypeSet.stream().filter(Objects::nonNull).forEach(item -> {
switch (item) {
case CREATE:
case CONFIRM:
case OTHER:
case APPROVE:
Set<VisaButtonTypeEnum> buttonTypeEnumSet = bizTypeBtnMapWhenPage.get(item.name() + status.name());
returnBtnSet.addAll(CollectionUtils.isNotEmpty(buttonTypeEnumSet) ? buttonTypeEnumSet : Sets.newHashSet());
break;
default:
throw new ServiceException("单据确认业务类型不匹配");
}
});
return returnBtnSet;
}
public static Set<VisaButtonTypeEnum> all() {
return Sets.newHashSet(VisaButtonTypeEnum.values());
}

View File

@ -1,9 +1,11 @@
package cn.axzo.nanopart.visa.server.service;
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
import cn.axzo.nanopart.visa.server.domain.ChangeRecordConfirm;
import cn.axzo.nanopart.visa.server.dto.VisaAddLogContext;
import cn.axzo.nanopart.visa.server.dto.VisaConfirmDto;
@ -13,6 +15,7 @@ import cn.axzo.nanopart.visa.server.rpc.DrawingMajorGateway;
import cn.axzo.nanopart.visa.server.utils.Constants;
import cn.axzo.thor.client.model.DrawingMajorResp;
import com.alibaba.fastjson.JSONArray;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@ -27,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -155,7 +159,17 @@ public class VisaHelper {
/**
* 查询单据与当前人的角色:[发起人确认人其他用户]
*/
public Map<Long,Set<VisaConfirmBizTypeEnum>> fetchConfirmBizTypes(Collection<Long> visaIds, Long personId, Long ouId, Long workspaceId) {
public Map<Long,Set<VisaConfirmBizTypeEnum>> fetchConfirmBizTypes(Collection<ChangeRecord> visaList, Long personId, Long ouId, Long workspaceId) {
if (CollectionUtils.isEmpty(visaList)) {
return Collections.emptyMap();
}
List<Long> visaIds = visaList.stream().filter(item -> Objects.nonNull(item.getId()))
.map(ChangeRecord::getId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(visaIds)) {
return Collections.emptyMap();
}
List<ChangeRecordConfirm> confirmList = changeRecordConfirmService.findByCondition(VisaConfirmDto.builder()
.visaIds(visaIds)
.personId(personId)
@ -172,4 +186,33 @@ public class VisaHelper {
return visaBizTypeMap;
}
/**
* 获取按钮集合
* 确认人与发起人的不同的单据状态按钮列表不相同
*/
public Map<Long, Set<VisaButtonTypeEnum>> fetchBtnsByCondition(Collection<ChangeRecord> visaList, Long personId, Long ouId, Long workspaceId) {
if (CollectionUtils.isEmpty(visaList)) {
return Collections.emptyMap();
}
Map<Long, ChangeRecord> visaIdMap = visaList.stream()
.filter(item -> Objects.nonNull(item.getId()))
.collect(Collectors.toMap(ChangeRecord::getId, Function.identity(), (x, y) -> x));
Map<Long, Set<VisaConfirmBizTypeEnum>> visaIdBizTypeMap = fetchConfirmBizTypes(visaList, personId, ouId, workspaceId);
if (Objects.isNull(visaIdBizTypeMap) || visaIdBizTypeMap.isEmpty()) {
return Collections.emptyMap();
}
Map<Long, Set<VisaButtonTypeEnum>> returnMap = Maps.newHashMap();
visaIdBizTypeMap.entrySet().stream().forEach(entry -> {
Long key = entry.getKey();
Set<VisaConfirmBizTypeEnum> value = entry.getValue();
ChangeRecord changeRecord = visaIdMap.get(key);
if (Objects.nonNull(changeRecord) && Objects.nonNull(changeRecord.getStatus())) {
returnMap.put(key, VisaButtonTypeEnum.fetchBtnsByBizTypeAndStatusWhenPage(value, changeRecord.getStatus()));
}
});
return returnMap;
}
}