From e52beb9c0cfc6b79b8a87eac18401140e6f4db59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Mon, 3 Jun 2024 11:12:08 +0800 Subject: [PATCH 01/13] =?UTF-8?q?feat(REQ-2200):=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=A2=9E=E5=8A=A0=E6=9E=9A=E4=B8=BE=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/common/enums/RowPermissionEnum.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java index c8c09f5e..964c1ee3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java @@ -18,7 +18,7 @@ public enum RowPermissionEnum { DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"), - UNIT_ONLY(5, "仅本单位数据"), + UNIT_ONLY(5, "仅本单位数据(包含班组)"), UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"), @@ -26,6 +26,8 @@ public enum RowPermissionEnum { UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"), WORKSPACE(9, "本项目部数据"), + + UNIT_ONLY_EXCLUDE_TEAM(10, "仅本单位数据(不包含班组)"), ; From c3f7639dfbc8bc25c32a6d6ef5e4ba04ecbe07bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Mon, 3 Jun 2024 16:38:35 +0800 Subject: [PATCH 02/13] =?UTF-8?q?feat(REQ-2300):=20=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/feign/DataObjectApi.java | 15 +- .../client/model/req/QueryDataObjectReq.java | 32 ++++ .../data/object/DataObjectController.java | 11 +- .../tyr/server/service/DataObjectService.java | 3 + .../service/impl/DataObjectServiceImpl.java | 179 ++++++++++-------- 5 files changed, 149 insertions(+), 91 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryDataObjectReq.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/DataObjectApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/DataObjectApi.java index fcf9572f..f6f07c1e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/DataObjectApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/DataObjectApi.java @@ -2,11 +2,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.basics.common.page.PageResult; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.common.annotation.RepeatedSubmit; -import cn.axzo.tyr.client.model.req.CreateDataObjectReq; -import cn.axzo.tyr.client.model.req.DeleteDataObjectReq; -import cn.axzo.tyr.client.model.req.EditDataObjectReq; -import cn.axzo.tyr.client.model.req.PageDataObjectReq; +import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.res.DataObjectRes; import cn.axzo.tyr.client.model.res.EnumRes; import cn.axzo.tyr.client.model.res.SimpleDataObjectRes; @@ -28,7 +24,6 @@ public interface DataObjectApi { @PostMapping("/api/dataObject/create") ApiResult createDataObject(@RequestBody @Valid CreateDataObjectReq req); - /** * 修改数据对象 * @param req @@ -63,4 +58,12 @@ public interface DataObjectApi { */ @GetMapping("/api/dataObject/get") ApiResult getDataObject(@RequestParam Long dataObjectId); + + /** + * 根据租户范围、数据对象code查询数据对象 + * @param req + * @return + */ + @PostMapping("/api/dataObject/query") + ApiResult queryDataObject(@RequestBody @Valid QueryDataObjectReq req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryDataObjectReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryDataObjectReq.java new file mode 100644 index 00000000..152f8124 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryDataObjectReq.java @@ -0,0 +1,32 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/6/3 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryDataObjectReq implements Serializable { + + /** + * 数据对象code + */ + @NotBlank(message = "数据对象code不能为空") + private String dataObjectCode; + + /** + * 租户范围 1:单位租户 2:项目租户 3:政务监管平台 6:OMS + */ + private Integer tenantScope; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/data/object/DataObjectController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/data/object/DataObjectController.java index e8366555..e0fb5b4e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/data/object/DataObjectController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/data/object/DataObjectController.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.server.controller.data.object; -import cn.axzo.basics.auth.enums.WorkspaceTypeWithLegacyEnum; import cn.axzo.basics.common.page.PageResult; import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; @@ -10,12 +9,8 @@ import cn.axzo.tyr.client.common.enums.EnumTypeEnum; import cn.axzo.tyr.client.common.enums.ReturnCodeEnum; import cn.axzo.tyr.client.common.enums.RowPermissionEnum; import cn.axzo.tyr.client.common.enums.TenantScopeEnum; -import cn.axzo.tyr.client.common.enums.WorkspaceJoinType; import cn.axzo.tyr.client.feign.DataObjectApi; -import cn.axzo.tyr.client.model.req.CreateDataObjectReq; -import cn.axzo.tyr.client.model.req.DeleteDataObjectReq; -import cn.axzo.tyr.client.model.req.EditDataObjectReq; -import cn.axzo.tyr.client.model.req.PageDataObjectReq; +import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.res.DataObjectRes; import cn.axzo.tyr.client.model.res.EnumRes; import cn.axzo.tyr.client.model.res.SimpleDataObjectRes; @@ -91,4 +86,8 @@ public class DataObjectController implements DataObjectApi { return ApiResult.ok(dataObjectService.getDataObject(dataObjectId)); } + @Override + public ApiResult queryDataObject(QueryDataObjectReq req) { + return ApiResult.ok(dataObjectService.queryDataObject(req)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/DataObjectService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/DataObjectService.java index dd9de34d..75672788 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/DataObjectService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/DataObjectService.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.page.PageResult; import cn.axzo.tyr.client.model.req.CreateDataObjectReq; import cn.axzo.tyr.client.model.req.EditDataObjectReq; import cn.axzo.tyr.client.model.req.PageDataObjectReq; +import cn.axzo.tyr.client.model.req.QueryDataObjectReq; import cn.axzo.tyr.client.model.res.DataObjectRes; import cn.axzo.tyr.client.model.res.SimpleDataObjectRes; @@ -17,4 +18,6 @@ public interface DataObjectService { PageResult pageDataObject(PageDataObjectReq req); DataObjectRes getDataObject(Long dataObjectId); + + DataObjectRes queryDataObject(QueryDataObjectReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index a18ea7e2..11eaeba1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.basics.common.constant.enums.DeleteEnum; import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.basics.common.page.PageResult; import cn.axzo.tyr.client.common.enums.ReturnCodeEnum; @@ -16,6 +17,7 @@ import cn.axzo.tyr.client.model.data.object.RuleScopeQueryBO; import cn.axzo.tyr.client.model.req.CreateDataObjectReq; import cn.axzo.tyr.client.model.req.EditDataObjectReq; import cn.axzo.tyr.client.model.req.PageDataObjectReq; +import cn.axzo.tyr.client.model.req.QueryDataObjectReq; import cn.axzo.tyr.client.model.res.DataObjectRes; import cn.axzo.tyr.client.model.res.SimpleDataObjectRes; import cn.axzo.tyr.server.repository.dao.DataObjectAttrDao; @@ -36,6 +38,7 @@ import com.google.common.collect.Lists; import groovy.lang.Tuple2; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; @@ -274,87 +277,21 @@ public class DataObjectServiceImpl implements DataObjectService { if (Objects.isNull(dataObject)) { throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage()); } - DataObjectRes res = DataObjectMapper.INSTANCE.dataObject2DataObjectRes(dataObject); - // 获取数据对象字段 - DataObjectAttrQueryBO bo1 = DataObjectAttrQueryBO.builder().dataObjectId(dataObjectId).build(); - List objectAttrList = dataObjectAttrDao.listByBO(bo1); - Map attrMap; - if (CollUtil.isNotEmpty(objectAttrList)) { - List attributeBOS = DataObjectMapper.INSTANCE.dataObjectAttrs2AttributeBOs(objectAttrList); - List attributeBOList = attributeBOS.stream().sorted(Comparator.comparing(AttributeBO::getSort)).collect(Collectors.toList()); - res.setAttrs(attributeBOList); - attrMap = attributeBOList.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a)); - } else { - attrMap = null; + return buildDataObjectRes(dataObject); + } + + @Override + public DataObjectRes queryDataObject(QueryDataObjectReq req) { + List dataObjects = dataObjectDao.lambdaQuery() + .eq(DataObject::getIsDelete, DeleteEnum.NORMAL.getValue()) + .eq(StringUtils.isNotBlank(req.getDataObjectCode()), DataObject::getDataObjectCode, req.getDataObjectCode()) + .eq(Objects.nonNull(req.getTenantScope()), DataObject::getTenantScope, req.getTenantScope()) + .list(); + if (CollectionUtils.isEmpty(dataObjects)) { + throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage()); } - - // 获取数据对象规则 - DataObjectRuleQueryBO bo2 = DataObjectRuleQueryBO.builder().dataObjectId(dataObjectId).build(); - List dataObjectRules = dataObjectRuleDao.listByBO(bo2); - if (CollUtil.isNotEmpty(dataObjectRules)) { - res.setDataObjectRuleBOList(new ArrayList<>(dataObjectRules.size() - 1)); - dataObjectRules.forEach(e -> { - if (YesNoEnum.YES.getValue().equals(e.getIsDefault())) { - DefaultDataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2DefaultRuleBO(e); - res.setDefaultDataObjectRuleBO(ruleBO); - } else { - DataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2RuleBO(e); - res.getDataObjectRuleBOList().add(ruleBO); - } - }); - if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { - List sortedRuleList = res.getDataObjectRuleBOList().stream().sorted(Comparator.comparing(DataObjectRuleBO::getSort)).collect(Collectors.toList()); - res.setDataObjectRuleBOList(sortedRuleList); - } - } - - - // 获取数据对象规则字段 - RuleAttrQueryBO bo3 = RuleAttrQueryBO.builder().dataObjectId(dataObjectId).build(); - List ruleAttrList = dataObjectRuleAttrDao.listByBO(bo3); - if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(ruleAttrList)) { - Map> ruleAttrMap = ruleAttrList.stream().collect(Collectors.groupingBy(DataObjectRuleAttr::getDataObjectRuleId)); - // 默认 - List ruleAttrList1 = ruleAttrMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId()); - if (CollUtil.isNotEmpty(ruleAttrList1)) { - List permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList1); - permissionBOs.forEach(e -> e.setAttrName(attrMap.get(e.getAttrCode()))); - List permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList()); - res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOList); - } - - //自定义 - if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { - res.getDataObjectRuleBOList().forEach(e -> buildRuleAttr(attrMap, ruleAttrMap, e)); - } - } - - // 获取数据对象规则范围 - RuleScopeQueryBO bo4 = RuleScopeQueryBO.builder().dataObjectId(dataObjectId).build(); - List scopeList = dataObjectRuleScopeDao.listByBO(bo4); - if (CollUtil.isNotEmpty(scopeList)) { - Map> scopeMap = scopeList.stream().collect(Collectors.groupingBy(DataObjectRuleScope::getDataObjectRuleId)); - // 默认 - List defaultScopeList = scopeMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId()); - if (CollUtil.isNotEmpty(defaultScopeList)) { - List relationIdList = defaultScopeList.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList()); - res.getDefaultDataObjectRuleBO().setRelationId(relationIdList); - } - - //自定义 - if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { - res.getDataObjectRuleBOList().forEach(e -> { - List scopeList1 = scopeMap.get(e.getDataObjectRuleId()); - if (CollUtil.isNotEmpty(scopeList1)) { - List relationIdList = scopeList1.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList()); - e.setRelationId(relationIdList); - } - }); - } - } - - return res; + return buildDataObjectRes(dataObjects.get(0)); } private static void buildRuleAttr(Map attrMap, Map> ruleAttrMap, DataObjectRuleBO e) { @@ -428,4 +365,88 @@ public class DataObjectServiceImpl implements DataObjectService { } } } + + private DataObjectRes buildDataObjectRes(DataObject dataObject) { + DataObjectRes res = DataObjectMapper.INSTANCE.dataObject2DataObjectRes(dataObject); + + // 获取数据对象字段 + DataObjectAttrQueryBO bo1 = DataObjectAttrQueryBO.builder().dataObjectId(dataObject.getId()).build(); + List objectAttrList = dataObjectAttrDao.listByBO(bo1); + Map attrMap; + if (CollUtil.isNotEmpty(objectAttrList)) { + List attributeBOS = DataObjectMapper.INSTANCE.dataObjectAttrs2AttributeBOs(objectAttrList); + List attributeBOList = attributeBOS.stream().sorted(Comparator.comparing(AttributeBO::getSort)).collect(Collectors.toList()); + res.setAttrs(attributeBOList); + attrMap = attributeBOList.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a)); + } else { + attrMap = null; + } + + // 获取数据对象规则 + DataObjectRuleQueryBO bo2 = DataObjectRuleQueryBO.builder().dataObjectId(dataObject.getId()).build(); + List dataObjectRules = dataObjectRuleDao.listByBO(bo2); + if (CollUtil.isNotEmpty(dataObjectRules)) { + res.setDataObjectRuleBOList(new ArrayList<>(dataObjectRules.size() - 1)); + dataObjectRules.forEach(e -> { + if (YesNoEnum.YES.getValue().equals(e.getIsDefault())) { + DefaultDataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2DefaultRuleBO(e); + res.setDefaultDataObjectRuleBO(ruleBO); + } else { + DataObjectRuleBO ruleBO = DataObjectMapper.INSTANCE.rule2RuleBO(e); + res.getDataObjectRuleBOList().add(ruleBO); + } + }); + if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { + List sortedRuleList = res.getDataObjectRuleBOList().stream().sorted(Comparator.comparing(DataObjectRuleBO::getSort)).collect(Collectors.toList()); + res.setDataObjectRuleBOList(sortedRuleList); + } + } + + + // 获取数据对象规则字段 + RuleAttrQueryBO bo3 = RuleAttrQueryBO.builder().dataObjectId(dataObject.getId()).build(); + List ruleAttrList = dataObjectRuleAttrDao.listByBO(bo3); + if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(ruleAttrList)) { + Map> ruleAttrMap = ruleAttrList.stream().collect(Collectors.groupingBy(DataObjectRuleAttr::getDataObjectRuleId)); + // 默认 + List ruleAttrList1 = ruleAttrMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId()); + if (CollUtil.isNotEmpty(ruleAttrList1)) { + List permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList1); + permissionBOs.forEach(e -> e.setAttrName(attrMap.get(e.getAttrCode()))); + List permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList()); + res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOList); + } + + //自定义 + if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { + res.getDataObjectRuleBOList().forEach(e -> buildRuleAttr(attrMap, ruleAttrMap, e)); + } + } + + // 获取数据对象规则范围 + RuleScopeQueryBO bo4 = RuleScopeQueryBO.builder().dataObjectId(dataObject.getId()).build(); + List scopeList = dataObjectRuleScopeDao.listByBO(bo4); + if (CollUtil.isNotEmpty(scopeList)) { + Map> scopeMap = scopeList.stream().collect(Collectors.groupingBy(DataObjectRuleScope::getDataObjectRuleId)); + // 默认 + List defaultScopeList = scopeMap.get(res.getDefaultDataObjectRuleBO().getDataObjectRuleId()); + if (CollUtil.isNotEmpty(defaultScopeList)) { + List relationIdList = defaultScopeList.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList()); + res.getDefaultDataObjectRuleBO().setRelationId(relationIdList); + } + + //自定义 + if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) { + res.getDataObjectRuleBOList().forEach(e -> { + List scopeList1 = scopeMap.get(e.getDataObjectRuleId()); + if (CollUtil.isNotEmpty(scopeList1)) { + List relationIdList = scopeList1.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList()); + e.setRelationId(relationIdList); + } + }); + } + } + + return res; + } } From 030d848653a53b56fe8244faa3d2b7fabf4d65eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Mon, 3 Jun 2024 18:16:31 +0800 Subject: [PATCH 03/13] =?UTF-8?q?feat(REQ-2300):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E6=9E=9A=E4=B8=BE=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java index 7c9e53d2..31c63f6c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java @@ -15,7 +15,7 @@ public enum AttrPermissionEnum { DEPARTMENT_SUBORDINATE(4, "本部门及以下数据"), - UNIT_ONLY(5, "仅本单位数据"), + UNIT_ONLY(5, "仅本单位数据(包含班组)"), UNIT_DIRECT_SUBORDINATE(6, "本单位及下级直属单位数据"), @@ -24,6 +24,8 @@ public enum AttrPermissionEnum { UNIT_ALL_SUBORDINATE(8, "本单位及以下协同(直属+合作)单位数据"), WORKSPACE(9, "本项目部数据"), EQUAL_TO_ROW(10, "同行级数据权限"), + + UNIT_ONLY_EXCLUDE_TEAM(11, "仅本单位数据(不包含班组)"), ; private final Integer value; private final String desc; From 841660f4d1445b03885ebc3e041af1256b3c542f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Mon, 3 Jun 2024 18:24:32 +0800 Subject: [PATCH 04/13] =?UTF-8?q?feat(REQ-2300):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E6=9E=9A=E4=B8=BE=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java | 2 +- .../java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java index 31c63f6c..c4bd8666 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/AttrPermissionEnum.java @@ -36,6 +36,6 @@ public enum AttrPermissionEnum { public static List listAttrPermissionForNotWorkspace() { return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE, - DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, EQUAL_TO_ROW); + DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, UNIT_ONLY_EXCLUDE_TEAM, EQUAL_TO_ROW); } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java index 964c1ee3..729eb70f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RowPermissionEnum.java @@ -43,7 +43,7 @@ public enum RowPermissionEnum { public static List listRowPermissionForNotWorkspace() { return Lists.newArrayList(SELF_ONLY, SELF_SUBORDINATE, - DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY); + DEPARTMENT_ONLY, DEPARTMENT_SUBORDINATE, UNIT_ONLY, UNIT_ONLY_EXCLUDE_TEAM); } } From bd731682b4ed928b13563484d5703c5fc3ce5991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Tue, 4 Jun 2024 14:29:25 +0800 Subject: [PATCH 05/13] =?UTF-8?q?feat(REQ-2300):=20add=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/data/object/AttributePermissionBO.java | 2 +- .../cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/AttributePermissionBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/AttributePermissionBO.java index da93cc37..fe04cf30 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/AttributePermissionBO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/AttributePermissionBO.java @@ -15,7 +15,7 @@ public class AttributePermissionBO { private Integer sort; // 序号 private String attrName; //字段名 private String attrCode; // 字段code - private Integer visibilityScope; // 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目部数据 10:同行级数据权限 + private Integer visibilityScope; // 字段值查看范围 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 5:仅本单位数据(包含班组) 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目部数据 10:同行级数据权限 11:仅本单位数据(不包含班组) private Integer isUnmaskable; // 是否可脱敏 1-不可操作脱敏 2-可操作脱敏 private Integer isEditable; // 是否可编辑 1-不可编辑 2-可编辑 } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java index c3e9f94b..fc5e43ba 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java @@ -42,7 +42,8 @@ public class DataObjectRuleBO { /** * 行级数据权限(单选) 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 - * 5:仅本单位数据 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 9:本项目部数据 + * 5:仅本单位数据(包含班组) 6:本单位及下级直属单位数据 7:本单位及下级协同(直属+合作)单位数据 8:本单位及以下协同(直属+合作)单位数据 + * 9:本项目部数据 10:仅本单位数据(不包含班组) */ private Integer rowPermission; /** From 50d569df410a7c7b40b7a4518b18bd67e53eceda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Tue, 4 Jun 2024 15:05:28 +0800 Subject: [PATCH 06/13] =?UTF-8?q?feat(REQ-2300):=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=9F=A5=E8=AF=A2=E4=B8=8D=E6=8A=9B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/DataObjectServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index 11eaeba1..e60bcdea 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -33,6 +33,7 @@ import cn.axzo.tyr.server.repository.entity.DataObjectRuleScope; import cn.axzo.tyr.server.service.DataObjectService; import cn.axzo.tyr.server.utils.mapper.DataObjectMapper; import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; import groovy.lang.Tuple2; @@ -289,7 +290,8 @@ public class DataObjectServiceImpl implements DataObjectService { .eq(Objects.nonNull(req.getTenantScope()), DataObject::getTenantScope, req.getTenantScope()) .list(); if (CollectionUtils.isEmpty(dataObjects)) { - throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage()); + log.warn("数据权限记录不存在,param:{}", JSON.toJSONString(req)); + return null; } return buildDataObjectRes(dataObjects.get(0)); } From 0a00c2fb39c8bc0121724a197a1f2d559bb2c8cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Tue, 30 Jul 2024 14:15:56 +0800 Subject: [PATCH 07/13] =?UTF-8?q?fix(REQ-2300):=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=A7=92=E8=89=B2code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/data/object/DataObjectRuleBO.java | 12 ++++++++ .../entity/DataObjectRuleScope.java | 4 +++ .../service/impl/DataObjectServiceImpl.java | 28 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java index fc5e43ba..f09eddd7 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java @@ -39,6 +39,10 @@ public class DataObjectRuleBO { * 岗位/角色id */ private List relationId; + /** + * 岗位列表 + */ + private List jobs; /** * 行级数据权限(单选) 1:仅本人数据 2:本人及下属数据 3:仅本部门数据 4:本部门及以下数据 @@ -51,4 +55,12 @@ public class DataObjectRuleBO { */ private List attributePermissionBOList; + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class JobInfo{ + private Long id; + private String code; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObjectRuleScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObjectRuleScope.java index 03e4673b..5b35d9e4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObjectRuleScope.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/DataObjectRuleScope.java @@ -36,4 +36,8 @@ public class DataObjectRuleScope extends BaseOperatorEntity * 岗位id/角色id */ private Long relationId; + /** + * 岗位编码 + */ + private String relationCode; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index e60bcdea..dd52c28f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -36,6 +36,7 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import groovy.lang.Tuple2; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -92,6 +93,7 @@ public class DataObjectServiceImpl implements DataObjectService { } List dataObjectRules = DataObjectMapper.INSTANCE.ruleBOs2Rules(req.getDataObjectRuleBOList()); + handleJobs(dataObjectRules, req.getDataObjectRuleBOList()); int size = (CollUtil.isNotEmpty(defaultDataObjectRules) ? defaultDataObjectRules.size() : 0) + (CollUtil.isNotEmpty(dataObjectRules) ? dataObjectRules.size() : 0); @@ -200,6 +202,7 @@ public class DataObjectServiceImpl implements DataObjectService { } List dataObjectRules = DataObjectMapper.INSTANCE.ruleBOs2Rules(req.getDataObjectRuleBOList()); + handleJobs(dataObjectRules, req.getDataObjectRuleBOList()); int size = (CollUtil.isNotEmpty(defaultDataObjectRules) ? defaultDataObjectRules.size() : 0) + (CollUtil.isNotEmpty(dataObjectRules) ? dataObjectRules.size() : 0); List generalObjectRuleList = new ArrayList<>(size); @@ -451,4 +454,29 @@ public class DataObjectServiceImpl implements DataObjectService { return res; } + + private void handleJobs(List dataObjectRules, List dataObjectRuleBOList) { + if (CollectionUtils.isEmpty(dataObjectRules) || CollectionUtils.isEmpty(dataObjectRuleBOList)) { + return; + } + + Map jobInfoMap = Maps.newHashMap(); + for (DataObjectRuleBO ruleBO : dataObjectRuleBOList) { + if (1 == ruleBO.getRuleScopeType() && CollectionUtils.isNotEmpty(ruleBO.getJobs())) { + ruleBO.getJobs().forEach(e -> { + jobInfoMap.put(e.getId(), e); + }); + } + } + + for (DataObjectRule rule : dataObjectRules) { + if (1 == rule.getRuleScopeType() && CollectionUtils.isNotEmpty(rule.getDataObjectRuleScopeList())) { + rule.getDataObjectRuleScopeList().forEach(e -> { + if (Objects.nonNull(e.getRelationId()) && jobInfoMap.containsKey(e.getRelationId())) { + e.setRelationCode(jobInfoMap.get(e.getRelationId()).getCode()); + } + }); + } + } + } } From ef36265460fd5469724d2c8663317fa99fe4aa2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Tue, 30 Jul 2024 14:25:58 +0800 Subject: [PATCH 08/13] =?UTF-8?q?fix(REQ-2300):=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=A7=92=E8=89=B2code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/model/data/object/DataObjectRuleBO.java | 4 ++++ .../axzo/tyr/server/service/impl/DataObjectServiceImpl.java | 1 + 2 files changed, 5 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java index f09eddd7..1688ebc9 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/data/object/DataObjectRuleBO.java @@ -39,6 +39,10 @@ public class DataObjectRuleBO { * 岗位/角色id */ private List relationId; + /** + * 岗位code + */ + private List relationCodes; /** * 岗位列表 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index dd52c28f..8eee2943 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -447,6 +447,7 @@ public class DataObjectServiceImpl implements DataObjectService { if (CollUtil.isNotEmpty(scopeList1)) { List relationIdList = scopeList1.stream().map(DataObjectRuleScope::getRelationId).collect(Collectors.toList()); e.setRelationId(relationIdList); + e.setRelationCodes(scopeList1.stream().map(DataObjectRuleScope::getRelationCode).filter(StringUtils::isNotBlank).collect(Collectors.toList())); } }); } From 14d9d5a4ce56f56a1a52d5e92e75cb52d292e160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Wed, 7 Aug 2024 10:01:34 +0800 Subject: [PATCH 09/13] =?UTF-8?q?fix(20240807):=E6=9F=A5=E8=AF=A2=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=E7=82=B9=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=BF=94=E5=9B=9E=E8=A7=92=E8=89=B2=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/res/ListPermissionFromRoleGroupResp.java | 5 +++++ tyr-server/src/main/resources/mapper/TyrSaasAuthMapper.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/ListPermissionFromRoleGroupResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/ListPermissionFromRoleGroupResp.java index a97a7523..d2547c25 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/ListPermissionFromRoleGroupResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/ListPermissionFromRoleGroupResp.java @@ -57,6 +57,11 @@ public class ListPermissionFromRoleGroupResp { */ private String roleName; + /** + * 角色编码 + */ + private String roleCode; + /** * 权限集ID */ diff --git a/tyr-server/src/main/resources/mapper/TyrSaasAuthMapper.xml b/tyr-server/src/main/resources/mapper/TyrSaasAuthMapper.xml index 9bf4878f..c71deec3 100644 --- a/tyr-server/src/main/resources/mapper/TyrSaasAuthMapper.xml +++ b/tyr-server/src/main/resources/mapper/TyrSaasAuthMapper.xml @@ -118,6 +118,7 @@ t1.code roleGroupCode, t3.id roleId, t3.name roleName, + t3.role_code roleCode, t4.group_id permissionGroupId FROM From 0c3b11963183088e09c171beb8ec87e696d719b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Thu, 8 Aug 2024 10:33:10 +0800 Subject: [PATCH 10/13] =?UTF-8?q?feat(REQ-2300):=20=E5=86=99=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=A2=9E=E5=8A=A0=E4=BA=8B=E5=8A=A1=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/DataObjectServiceImpl.java | 4 ++++ .../tyr/server/service/impl/DataResourceServiceImpl.java | 5 +++++ .../server/service/impl/FeatureResourceSyncServiceImpl.java | 2 ++ .../tyr/server/service/impl/PermissionPointServiceImpl.java | 2 ++ .../cn/axzo/tyr/server/service/impl/ProductServiceImpl.java | 4 ++++ .../cn/axzo/tyr/server/service/impl/RoleUserService.java | 2 ++ .../tyr/server/service/impl/SaasBasicDictServiceImpl.java | 4 ++++ .../server/service/impl/SaasFeatureResourceServiceImpl.java | 1 + .../tyr/server/service/impl/SaasRoleGroupServiceImpl.java | 3 +++ 9 files changed, 27 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java index 8eee2943..c9d27339 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataObjectServiceImpl.java @@ -43,6 +43,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; import javax.annotation.Resource; @@ -69,6 +70,7 @@ public class DataObjectServiceImpl implements DataObjectService { private TransactionTemplate transactionTemplate; @Override + @Transactional(rollbackFor = Exception.class) public Long createDataObject(CreateDataObjectReq req) { // 校验 // objectName、objectCode不能重复 @@ -173,6 +175,7 @@ public class DataObjectServiceImpl implements DataObjectService { } @Override + @Transactional(rollbackFor = Exception.class) public void editDataObject(EditDataObjectReq req) { // 对象属性名和code不能重复 checkObjectAttrNameOrCodeUnique(req.getAttrs()); @@ -242,6 +245,7 @@ public class DataObjectServiceImpl implements DataObjectService { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteDataObject(Long dataObjectId, Long updateBy) { List idList = Collections.singletonList(dataObjectId); transactionTemplate.executeWithoutResult(status -> { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataResourceServiceImpl.java index 0273bd77..e7ceeb53 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/DataResourceServiceImpl.java @@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; @@ -48,6 +49,7 @@ public class DataResourceServiceImpl implements DataResourceService { private final SaasFeatureDao saasFeatureDao; private final SaasFeatureDataResourceDao saasFeatureDataResourceDao; @Override + @Transactional(rollbackFor = Exception.class) public void create(CreateDataResourceParam param) { DataResource existDataResource = dataResourceDao.lambdaQuery() .eq(DataResource::getResourceCode, param.getResourceCode()) @@ -72,6 +74,7 @@ public class DataResourceServiceImpl implements DataResourceService { } @Override + @Transactional(rollbackFor = Exception.class) public boolean delete(DeleteDataResourceParam param) { DataResource dataResource = dataResourceDao.getById(param.getId()); if (Objects.nonNull(dataResource)) { @@ -109,6 +112,7 @@ public class DataResourceServiceImpl implements DataResourceService { } @Override + @Transactional(rollbackFor = Exception.class) public boolean update(UpdateDataResourceParam param) { DataResource dataResource = new DataResource(); BeanUtils.copyProperties(param, dataResource); @@ -116,6 +120,7 @@ public class DataResourceServiceImpl implements DataResourceService { } @Override + @Transactional(rollbackFor = Exception.class) public void createDataResourceSaasFeature(DataResourceSaasFeatureParam param) { DataResource existDataResource = dataResourceDao.lambdaQuery() .eq(DataResource::getResourceCode, param.getResourceCode()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java index 41a24b09..a6da2b19 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; @@ -75,6 +76,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic } @Override + @Transactional(rollbackFor = Exception.class) public void syncFromBase(ResourceSyncReq req) { if (req.getIds().size() > 1) { //超过一个异步处理 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 51feb1b6..f51c9716 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -314,6 +314,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { } @Override + @Transactional(rollbackFor = Exception.class) public PermissionPointDTO save(PermissionPointDTO dto) { if (dto.getId() == null) { return doInsert(dto); @@ -431,6 +432,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override + @Transactional(rollbackFor = Exception.class) public void move(PermissionPointMoveRequest request) { SaasFeature feature = getAndCheck(request.getPermissionId()); changeParent(feature, request); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 5fb9196a..003d502c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.bouncycastle.util.Integers; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -92,6 +93,7 @@ public class ProductServiceImpl implements ProductService { } @Override + @Transactional(rollbackFor = Exception.class) public ApiResult add(ProductAddReq req) { Optional optProduct = productModuleDao.lambdaQuery() .eq(ProductModule::getProductName, req.getProductName()) @@ -108,6 +110,7 @@ public class ProductServiceImpl implements ProductService { } @Override + @Transactional(rollbackFor = Exception.class) public ApiResult update(ProductUpdateReq req) { Optional optProduct = productModuleDao.lambdaQuery() .eq(ProductModule::getProductName, req.getProductName()) @@ -125,6 +128,7 @@ public class ProductServiceImpl implements ProductService { } @Override + @Transactional(rollbackFor = Exception.class) public ApiResult delete(Long id) { ProductModule productModule = productModuleDao.getById(id); AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在"); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 3853fb91..4d2bec03 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -351,12 +351,14 @@ public class RoleUserService implements SaasRoleUserService { } @Override + @Transactional(rollbackFor = Exception.class) public void removeWorkspaceOuAllUserRole(Long workspaceId, Long ouId) { saasRoleDao.removeWorkspaceOuAllRole(workspaceId, ouId); roleUserRelationDao.removeWorkspaceOuAllUserRole(workspaceId, ouId); } @Override + @Transactional(rollbackFor = Exception.class) public void grantOrUngrantWorkerLeader(GantOrUnGantaWorkerLeaderRoleReq req) { Boolean grant = req.getGrant(); // 授权 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index d99c244b..192e223f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; @@ -103,6 +104,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { * @return */ @Override + @Transactional(rollbackFor = Exception.class) public Long create(BasicDictCreateReq req) { SaasBasicDict parent = saasBasicDictDao.getById(req.getParentId()); if (Objects.isNull(parent)) { @@ -145,6 +147,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { } @Override + @Transactional(rollbackFor = Exception.class) public Boolean update(BasicDictUpdateReq req) { BasicDictNodeResp currentNode = getById(req.getId()); if (Objects.isNull(currentNode)) { @@ -166,6 +169,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { } @Override + @Transactional(rollbackFor = Exception.class) public Boolean updateStauts(BasicDictUpdateStatusReq req) { return saasBasicDictDao.updateStatus(req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java index 0e0e7fb9..a52f3449 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java @@ -220,6 +220,7 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic } @Override + @Transactional(rollbackFor = Exception.class) @CacheEvict(value = SaasFeatureResourceCacheService.CACHE_FEATURE_RESOURCE_TREE,allEntries = true) public void updateFeatureAuthType(Long featureId, Integer authType) { if (featureId != null && authType != null) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 921b37f2..cffa57b4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; @@ -104,6 +105,7 @@ public class SaasRoleGroupServiceImpl extends ServiceImpl ids) { if (CollectionUtils.isEmpty(ids)) { return; From 34da59b8396869f08f2736f12e3d1c395de6b75b Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 8 Aug 2024 11:50:59 +0800 Subject: [PATCH 11/13] =?UTF-8?q?feat:(HOTFIX-20240807)=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E4=BB=A5=E5=89=8D=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=94=B1=E7=94=A8=E6=88=B7=E4=BC=A0=E5=85=A5categoryT?= =?UTF-8?q?ype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/req/ListPermissionFromRoleGroupReq.java | 6 ++++++ .../tyr/server/service/impl/TyrSaasAuthServiceImpl.java | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListPermissionFromRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListPermissionFromRoleGroupReq.java index dd07edee..f6245c80 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListPermissionFromRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/ListPermissionFromRoleGroupReq.java @@ -44,6 +44,12 @@ public class ListPermissionFromRoleGroupReq { /** 角色组ID **/ private List roleGroupIds; + /** + * 原接口使用方有的需要2,有的需要3,当时加这个出了问题,默认为3 + * 1-仅查当前code 2-对应code角色组及子级角色组 3-仅对应code角色组的子级 + */ + private Integer categoryType; + @Data @Builder @AllArgsConstructor diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java index 301eee4f..4c6f9522 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/TyrSaasAuthServiceImpl.java @@ -1047,7 +1047,9 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService { @Override public List listAuthByResourceAndRoleGroup(ListPermissionFromRoleGroupReq listPermissionFromRoleGroupReq) { //确定角色group_id: code对应角色组及其下级 - List groups = roleGroupService.listByCodes(Collections.singletonList(listPermissionFromRoleGroupReq.getCategoryCode()), 3); + Integer categoryType = Optional.ofNullable(listPermissionFromRoleGroupReq.getCategoryType()) + .orElse(3); + List groups = roleGroupService.listByCodes(Collections.singletonList(listPermissionFromRoleGroupReq.getCategoryCode()), categoryType); if (CollectionUtil.isEmpty(groups)) { log.warn("no role group found for code :{}", listPermissionFromRoleGroupReq.getCategoryCode()); return Collections.emptyList(); From 3e3f219818ad41f7c7fdd4cdd67793533a695b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Mon, 12 Aug 2024 17:47:05 +0800 Subject: [PATCH 12/13] feat(REQ-2300): merge master to 2300 --- .../cn/axzo/tyr/server/service/impl/ProductServiceImpl.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 9c3c5fe1..c4d76d41 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -55,8 +55,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.slf4j.MDC; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.util.ArrayList; From e7fb5dd8d808bc452d784578d3e48448b983a23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=8F?= Date: Tue, 13 Aug 2024 18:14:44 +0800 Subject: [PATCH 13/13] =?UTF-8?q?feat(REQ-2864):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E3=80=81=E9=83=A8=E9=97=A8=E3=80=81=E5=8D=8F?= =?UTF-8?q?=E5=90=8C=E5=85=B3=E7=B3=BB=E3=80=81=E9=83=A8=E9=97=A8=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=9A=84=E6=9E=9A=E4=B8=BE=EF=BC=8C=E6=89=A9=E5=B1=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=94=AF=E6=8C=81operatorId=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/req/PermissionOperateLogReq.java | 8 ++++++-- .../SaasPgroupPermissionRelationOperateLog.java | 8 +++++++- ...PermissionRelationOperateLogServiceImpl.java | 17 +++++++++++++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PermissionOperateLogReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PermissionOperateLogReq.java index dfa5c3a4..1d67e8a5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PermissionOperateLogReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PermissionOperateLogReq.java @@ -29,10 +29,12 @@ public class PermissionOperateLogReq implements Serializable { @NotBlank(message = "表名不能为空") private String tableName; - @NotNull(message = "操作人ID不能为空") - @Min(value = 1, message = "操作人ID有误") +// @NotNull(message = "操作人ID不能为空") +// @Min(value = 1, message = "操作人ID有误") private Long operatorId; + private String operatorName; + @NotBlank(message = "场景不能为空") private String scene; @@ -41,4 +43,6 @@ public class PermissionOperateLogReq implements Serializable { private Object requestData; private Object operateData; + + private JSONObject ext; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java index ddf61fbd..a8feb86e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelationOperateLog.java @@ -2,7 +2,10 @@ package cn.axzo.tyr.server.repository.entity; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import lombok.*; /** @@ -15,7 +18,7 @@ import lombok.*; @Builder @ToString @EqualsAndHashCode(callSuper = true) -@TableName("saas_pgroup_permission_relation_operate_log") +@TableName(value = "saas_pgroup_permission_relation_operate_log", autoResultMap = true) public class SaasPgroupPermissionRelationOperateLog extends BaseEntity { /** @@ -63,4 +66,7 @@ public class SaasPgroupPermissionRelationOperateLog extends BaseEntity personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperatorId())), "查询用户信息", req.getOperatorId()).getData(); - PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); + String realName = req.getOperatorId() == null ? "" : Optional.ofNullable(getPersonProfileDto(req)).map(PersonProfileDto::getRealName).orElse(""); SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder() .tableName(req.getTableName()) .scene(req.getScene()) .sceneId(req.getSceneId()) - .createBy(req.getOperatorId()) - .createByName(Objects.isNull(operator) ? "" : operator.getRealName()) + .createBy(ObjectUtils.firstNonNull(req.getOperatorId(), 0L)) + .createByName(StringUtils.firstNonBlank(realName, req.getOperatorName(), "")) .traceId(MDC.get(Constants.CTX_LOG_ID_MDC)) .requestData(Objects.nonNull(req.getRequestData()) ? JSONObject.toJSONString(req.getRequestData()) : null) .operateData(Objects.nonNull(req.getOperateData()) ? JSONObject.toJSONString(req.getOperateData()) : null) .createByRole(JSONObject.toJSONString(getPersonBasicRoles(req.getOperatorId()))) + .ext(req.getExt()) .build(); batchSave(Lists.newArrayList(operateLog)); } + + private PersonProfileDto getPersonProfileDto(PermissionOperateLogReq req) { + List personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperatorId())), "查询用户信息", req.getOperatorId()).getData(); + PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0); + return operator; + } }