You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.3 KiB

  1. package com.example.demo.Node;
  2. import lombok.Data;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5. @Data
  6. public class RefundApprovalNode {
  7. private String nodeName;
  8. private Integer level;
  9. private Set<String> roles; // 审批所需的角色集合
  10. private Set<Integer> allowedMarketIds; // 允许审批的地区ID集合
  11. private Set<String> allowedMarketNames; // 允许审批的地区名称集合(向后兼容)
  12. private boolean required;
  13. public RefundApprovalNode() {
  14. this.roles = new HashSet<>();
  15. this.allowedMarketIds = new HashSet<>();
  16. this.allowedMarketNames = new HashSet<>();
  17. }
  18. public RefundApprovalNode(String nodeName, Integer level, String role, boolean required) {
  19. this();
  20. this.nodeName = nodeName;
  21. this.level = level;
  22. if (role != null) {
  23. this.roles.add(role);
  24. }
  25. this.required = required;
  26. }
  27. public RefundApprovalNode(String nodeName, Integer level, Set<String> roles, Set<Integer> allowedMarketIds, boolean required) {
  28. this.nodeName = nodeName;
  29. this.level = level;
  30. this.roles = roles != null ? roles : new HashSet<>();
  31. this.allowedMarketIds = allowedMarketIds != null ? allowedMarketIds : new HashSet<>();
  32. this.allowedMarketNames = new HashSet<>();
  33. this.required = required;
  34. }
  35. // 构造函数:接受多个角色(数组形式)和地区ID集合
  36. public RefundApprovalNode(String nodeName, Integer level, String[] roles, Set<Integer> allowedMarketIds, boolean required) {
  37. this();
  38. this.nodeName = nodeName;
  39. this.level = level;
  40. if (roles != null) {
  41. for (String role : roles) {
  42. this.roles.add(role);
  43. }
  44. }
  45. this.allowedMarketIds = allowedMarketIds != null ? allowedMarketIds : new HashSet<>();
  46. this.required = required;
  47. }
  48. public void addRole(String role) {
  49. if (this.roles == null) {
  50. this.roles = new HashSet<>();
  51. }
  52. this.roles.add(role);
  53. }
  54. public void addMarketId(Integer marketId) {
  55. if (this.allowedMarketIds == null) {
  56. this.allowedMarketIds = new HashSet<>();
  57. }
  58. this.allowedMarketIds.add(marketId);
  59. }
  60. public void addMarketName(String marketName) {
  61. if (this.allowedMarketNames == null) {
  62. this.allowedMarketNames = new HashSet<>();
  63. }
  64. this.allowedMarketNames.add(marketName);
  65. }
  66. // 检查节点是否对指定地区ID可见
  67. public boolean isMarketAllowed(Integer marketId) {
  68. if (allowedMarketIds == null || allowedMarketIds.isEmpty()) {
  69. return true; // 没有地区限制,所有地区都可见
  70. }
  71. return allowedMarketIds.contains(marketId);
  72. }
  73. // 检查节点是否对指定地区名称可见(向后兼容)
  74. public boolean isMarketAllowedByName(String marketName) {
  75. if ((allowedMarketNames == null || allowedMarketNames.isEmpty()) &&
  76. (allowedMarketIds == null || allowedMarketIds.isEmpty())) {
  77. return true; // 没有地区限制,所有地区都可见
  78. }
  79. if (allowedMarketNames != null && !allowedMarketNames.isEmpty()) {
  80. return allowedMarketNames.contains(marketName);
  81. }
  82. return false;
  83. }
  84. }