diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java index 668fe3e..1dc4302 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java @@ -199,6 +199,10 @@ public class NodeProfile { PROJECT_TEAM_ID("项目班组id", Long.class, Arrays.asList("projectTeamId", "belongProjectTeamId")), PLAT_TEAM_ID("平台班组id", Long.class, Arrays.asList("platTeamId", "belongPlatTeamId")), PROJECT_GROUP_ID("项目小组id", Long.class, Arrays.asList("projectGroupId")), + PROJECT_GROUP_OWNER_PROJECT_WORKER_ID("项目小组owner项目工人id", Long.class, Arrays.asList("ownerProjectWorkerId")), + PROJECT_GROUP_TYPE("项目小组类型", Integer.class, Arrays.asList("type")), + PROJECT_GROUP_CREATE_AT("项目小组创建时间", Integer.class, Arrays.asList("createAt")), + PROJECT_GROUP_UPDATE_AT("项目小组修改时间", Integer.class, Arrays.asList("updateAt")), ; @@ -206,7 +210,7 @@ public class NodeProfile { /** * 解析类型 */ - private Class aClass; + private Class resolveClass; /** * 解析字段名 */ @@ -219,7 +223,7 @@ public class NodeProfile { .map(profile -> { List resolveFieldNames = resolveType.getResolveFieldName(); for (String field : resolveFieldNames) { - Object object = profile.getObject(field, resolveType.aClass); + Object object = profile.getObject(field, resolveType.resolveClass); if (object != null) { return object; } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/enums/OrgUserChangedScenarioEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/enums/OrgUserChangedScenarioEnum.java new file mode 100644 index 0000000..45fe3a2 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/enums/OrgUserChangedScenarioEnum.java @@ -0,0 +1,40 @@ +package cn.axzo.orgmanax.dto.orguser.enums; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; + +/** + * @description + * 人员异动场景 + * @author luofu + * @version 1.0 + * @date 2024/10/24 + */ +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public enum OrgUserChangedScenarioEnum { + + JOINED("JOINED", "加入"), + WITHDRAW("WITHDRAW", "离开<单位:离职,项目:退场>"), + LEAVED("LEAVED", "离场"), + CHANGED("CHANGED", "部门岗位变更"); + + private final String code; + private final String desc; + + public static Optional codeOf(String code) { + return Arrays.stream(values()) + .filter(e -> Objects.equals(code, e.code)) + .findFirst(); + } + + public static OrgUserChangedScenarioEnum codeOfThrowException(String code) { + return codeOf(code) + .orElseThrow(() -> new RuntimeException(String.format("invalid code.[%s]", code))); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserChangedEvent.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserChangedEvent.java new file mode 100644 index 0000000..0def19e --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserChangedEvent.java @@ -0,0 +1,122 @@ +package cn.axzo.orgmanax.dto.orguser.event; + +import cn.axzo.orgmanax.dto.orguser.enums.OrgUserChangedScenarioEnum; +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * @description 用户组织架构信息变更事件 (部门-岗位-角色等) + * @author luofu + * @version 1.0 + * @date 2024/10/30 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgUserChangedEvent implements Serializable { + + private static final long serialVersionUID = 6513111764022461738L; + + /** + * 自然人id + */ + private Long personId; + + /** + * 单位id + */ + private Long ouId; + + /** + * 租户id + */ + private Long workspaceId; + + /** + * 用户状态 + * 1) 在职: 5 + * 2) 离职: 6 + * 3) 入场中: 0 + * 4) 在场: 1 + * 5) 离场: 3 + * 6) 已删除: 4 + */ + private Integer statusCode; + + /** + * 异动时间戳 + */ + private Long transferTimestamp; + + /** + * 人员异动场景 + * @see OrgUserChangedScenarioEnum + */ + private String scenarioCode; + + /** + * 备注:二维码加入 - APP端、手机号添加 - CMS端 + */ + private String remark; + + /** + * 补充信息信息 + */ + private SupplementaryInfo supplementaryInfo; + + /** + * 操作人的自然人id + */ + private Long operatorId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class SupplementaryInfo implements Serializable{ + + private static final long serialVersionUID = -8577751204851100329L; + + /** + * 部门id列表 + */ + private List orgNodeIds; + + /** + * 部门主管标识所在的部门id + */ + private Long majorOrgNodeId; + + /** + * 岗位id列表 + */ + private List jobIds; + + /** + * 角色id列表 + */ + private List roleIds; + + /** + * 直属主管id + */ + private Long directManagerPersonId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserStatusChangedEvent.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserStatusChangedEvent.java new file mode 100644 index 0000000..def42b0 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/orguser/event/OrgUserStatusChangedEvent.java @@ -0,0 +1,69 @@ +package cn.axzo.orgmanax.dto.orguser.event; + +import com.alibaba.fastjson.JSON; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @author luofu + * @version 1.0 + * @date 2024/11/5 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgUserStatusChangedEvent implements Serializable { + + private static final long serialVersionUID = 1534318491778930088L; + + /** + * 自然人id + */ + private Long personId; + + /** + * 单位id + */ + private Long ouId; + + /** + * 租户id + */ + private Long workspaceId; + + /** + * 顶级部门id + */ + private Long topNodeId; + + /** + * 用户状态 + * 1) 在职: 5 + * 2) 离职: 6 + * 3) 入场中: 0 + * 4) 在场: 1 + * 5) 离场: 3 + * 6) 已删除: 4 + */ + private Integer statusCode; + + /** + * 异动时间戳 + */ + private Long transferTimestamp; + + /** + * 操作人的id + */ + private Long operatorId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/utils/WorkTeamFormat.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/utils/WorkTeamFormat.java new file mode 100644 index 0000000..83609c7 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/utils/WorkTeamFormat.java @@ -0,0 +1,27 @@ +package cn.axzo.orgmanax.dto.project.team.utils; + +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +@Slf4j +public class WorkTeamFormat { + + public static String concatTeamName(String platTeamLeaderName, String categoryStr) { + if(ObjectUtil.isEmpty(platTeamLeaderName)){ + return ""; + } + String teamLearName = String.format("班组长:%s", platTeamLeaderName); + + if(ObjectUtil.isNotEmpty(categoryStr)){ + return String.format("%s;经营范围:%s", teamLearName, categoryStr); + } + + return teamLearName; + } + + public static String concatTeamName(String platTeamLeaderName, List categoryList) { + return concatTeamName(platTeamLeaderName, String.join("、", categoryList)); + } +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/worker/enums/ProjectWorkerStatusEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectWorkerStatusEnum.java similarity index 95% rename from orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/worker/enums/ProjectWorkerStatusEnum.java rename to orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectWorkerStatusEnum.java index d0e1ccf..66b002a 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/worker/enums/ProjectWorkerStatusEnum.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectWorkerStatusEnum.java @@ -1,4 +1,4 @@ -package cn.axzo.orgmanax.api.project.worker.enums; +package cn.axzo.orgmanax.dto.project.worker.enums; import lombok.Getter; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/entity/SaasCooperateShip.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/entity/SaasCooperateShip.java index fd1973c..7a27042 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/entity/SaasCooperateShip.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/entity/SaasCooperateShip.java @@ -152,6 +152,9 @@ public class SaasCooperateShip implements Serializable { * @param parent */ public void calcPath(SaasCooperateShip parent) { + if (this.getParentId() == null) { + this.parentId = 0L; + } if (Objects.equals(this.getParentId(), 0L)) { this.path = id + ","; } @@ -159,6 +162,20 @@ public class SaasCooperateShip implements Serializable { this.path = parent.path + id + ","; } + /** + * 计算节点路径, 需要先将父级path设置好 + */ + public void calcPath() { + if (this.getParentId() == null) { + this.parentId = 0L; + } + if (Objects.equals(this.getParentId(), 0L)) { + this.path = id + ","; + } + this.path = this.path + id + ","; + } + + @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter public enum ParterShipEnum { diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipQueryRepository.java index c366dc6..174709a 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipQueryRepository.java @@ -19,6 +19,15 @@ public interface CooperateShipQueryRepository { return oneOpt(req).orElse(null); } + /** + * 根据id查询 + * @param id + * @return + */ + default SaasCooperateShip getById(Long id) { + return oneOpt(OneReq.builder().id(id).build()).orElse(null); + } + default Optional oneOpt(OneReq req) { req.check(); ListReq listReq = BeanUtil.toBean(req, ListReq.class); diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipUpsertRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipUpsertRepository.java index 0f85660..70c57eb 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipUpsertRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/CooperateShipUpsertRepository.java @@ -28,7 +28,7 @@ public interface CooperateShipUpsertRepository { * @param node * @return */ - SaasCooperateShip update(UpdateReq node); + boolean update(UpdateReq node); @EqualsAndHashCode(callSuper = true) @NoArgsConstructor diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/impl/CooperateShipUpsertRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/impl/CooperateShipUpsertRepositoryImpl.java index eb9f99e..b3409f2 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/impl/CooperateShipUpsertRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/cooperateship/repository/impl/CooperateShipUpsertRepositoryImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWra import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; @Service @RequiredArgsConstructor @@ -16,21 +17,34 @@ import org.springframework.stereotype.Service; public class CooperateShipUpsertRepositoryImpl implements CooperateShipUpsertRepository { private final SaasCooperateShipDao cooperateShipDao; + private final TransactionTemplate transactionTemplate; @Override public SaasCooperateShip create(SaasCooperateShip cooperateShip) { - cooperateShipDao.save(cooperateShip); - return cooperateShipDao.getById(cooperateShip.getId()); + + transactionTemplate.executeWithoutResult(r -> { + // 保存协同关系 + cooperateShipDao.save(cooperateShip); + // 计算path的值, 需要先保存,才能获取到id + cooperateShip.calcPath(); + + // 更新path + update(CooperateShipUpsertRepository.UpdateReq.builder() + .id(cooperateShip.getId()) + .path(cooperateShip.getPath()) + .build()); + }); + + return cooperateShip; } @Override - public SaasCooperateShip update(UpdateReq req) { + public boolean update(UpdateReq req) { Axssert.checkNonNull(req.getId(), "更新协同部门,协同id不能为空"); LambdaUpdateChainWrapper wrapper = cooperateShipDao.lambdaUpdate().eq(SaasCooperateShip::getId, req.getId()); if (CollUtil.isNotEmpty(req.getSetNullFields())) { req.getSetNullFields().forEach(e -> wrapper.set(e, null)); } - wrapper.update(req); - return cooperateShipDao.getById(req.getId()); + return wrapper.update(req); } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java index 92f72c6..3a4ceec 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java @@ -42,6 +42,15 @@ public interface NodeQueryRepository { return page(page).getData().stream().findFirst(); } + /** + * 根据id获取 + * @param id + * @return + */ + default OrganizationalNode getById(Long id) { + return oneOpt(OneReq.builder().id(id).build()).orElse(null); + } + @NoArgsConstructor @AllArgsConstructor @Data diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/unit/repository/UnitQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/unit/repository/UnitQueryRepository.java index 495c924..9adadca 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/unit/repository/UnitQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/unit/repository/UnitQueryRepository.java @@ -38,6 +38,15 @@ public interface UnitQueryRepository { return page(page).getData().stream().findFirst(); } + /** + * 根据id获取 + * @param id + * @return + */ + default UnitResp getById(Long id) { + return oneOpt(OneReq.builder().id(id).build()).orElse(null); + } + @NoArgsConstructor @AllArgsConstructor @Data diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/foundation/impl/CooperateShipFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/foundation/impl/CooperateShipFoundationServiceImpl.java index 1339d4b..37cc446 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/foundation/impl/CooperateShipFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/foundation/impl/CooperateShipFoundationServiceImpl.java @@ -33,6 +33,7 @@ import java.util.stream.Collectors; import com.google.common.collect.ImmutableSet; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; @RequiredArgsConstructor @Service @@ -43,7 +44,7 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati private final CooperateShipQueryRepository cooperateShipQueryRepository; private final CooperateShipUpsertRepository cooperateShipUpsertRepository; private final EventProducer eventProducer; - private final WorkspaceGateway workspaceGateway; + private final TransactionTemplate transactionTemplate; /** * 顶级协同关系类型 @@ -142,16 +143,15 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati @Override public SaasCooperateShip create(CooperateShipCreator creator) { - // 如果parentId不为空, 查询父级协同节点 + // 如果parentId不为空, 初始化父级协同节点 SaasCooperateShip parentCooperateShip = null; if (Objects.nonNull(creator.getParentId()) && creator.getParentId() > 0) { - parentCooperateShip = cooperateShipQueryRepository - .oneOpt(CooperateShipQueryRepository.OneReq.builder().id(creator.getParentId()).build()) - .orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级协同部门不存在{}", creator.getOrganizationalNodeId())); + parentCooperateShip = cooperateShipQueryRepository.getById(creator.getParentId()); + Axssert.check(parentCooperateShip != null, BizResultCode.ENTITY_NOT_FOUND, "父级协同部门不存在{}", creator.getOrganizationalNodeId()); Axssert.check(Objects.equals(parentCooperateShip.getWorkspaceId(), creator.getWorkspaceId()), BizResultCode.INVALID_PARAM, "父级协同部门和要加入部门不是同一个工作台"); } - // 创建协同关系 + // 构建新的协同关系 SaasCooperateShip cooperateShip = SaasCooperateShip.builder() .parentId(creator.getParentId()) .workspaceId(creator.getWorkspaceId()) @@ -165,17 +165,12 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati .organizationalNodeId(creator.getOrganizationalNodeId()) .partnerShip(creator.getPartnerShip()) .createBy(creator.getOperatorId()) + .path(Optional.ofNullable(parentCooperateShip).map(SaasCooperateShip::getPath).orElse("")) .build(); + + // 保存协同关系 SaasCooperateShip savedCooperateShip = cooperateShipUpsertRepository.create(cooperateShip); - - // 更新协同关系路径 - savedCooperateShip.calcPath(parentCooperateShip); - SaasCooperateShip saved = cooperateShipUpsertRepository.update(CooperateShipUpsertRepository.UpdateReq.builder() - .id(savedCooperateShip.getId()) - .path(savedCooperateShip.getPath()) - .build()); - // 发送领域事件 eventProducer.send(Event.builder() .eventCode(CooperateShipEventType.COOPERATE_SHIP_UPSERTED.getEventCode()) @@ -183,14 +178,14 @@ public class CooperateShipFoundationServiceImpl implements CooperateShipFoundati .operatorType(getClass().getSimpleName()) .targetType("cooperate_ship_id") .targetId(cooperateShip.getId() + "") - .shardingKey(saved.getOrganizationalNodeId() + "") + .shardingKey(savedCooperateShip.getOrganizationalNodeId() + "") .data(CoopeateShipUpsertedPayload.builder() - .newValue(BeanUtil.copyProperties(saved, OrgCooperateShipDTO.class)) + .newValue(BeanUtil.copyProperties(savedCooperateShip, OrgCooperateShipDTO.class)) .oldValue(null) .build()) .build()); // 返回结果 - return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(saved.getId()).build()); + return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(savedCooperateShip.getId()).build()); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/service/impl/CooperateShipServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/service/impl/CooperateShipServiceImpl.java index f0e6dd4..8e15b26 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/service/impl/CooperateShipServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/cooperateship/service/impl/CooperateShipServiceImpl.java @@ -41,23 +41,10 @@ import java.util.*; @RequiredArgsConstructor public class CooperateShipServiceImpl implements CooperateShipService { - private static final Set ALLOWED_TOP_COOPERATE_TYPES = ImmutableSet.of( - CooperateShipTypeEnum.PROJ_PRIMARY_CONTRACTING_UNIT.getCode(), - CooperateShipTypeEnum.PROJ_CONSTRUCTION_UNIT.getCode(), - CooperateShipTypeEnum.PROJ_SUPERVISION_UNIT.getCode(), - CooperateShipTypeEnum.OMS.getCode(), - CooperateShipTypeEnum.ENT_COMMON.getCode(), - CooperateShipTypeEnum.SURVEY_UNIT.getCode(), - CooperateShipTypeEnum.DESIGN_UNIT.getCode(), - CooperateShipTypeEnum.OTHER.getCode() - ); - private final CooperateShipQueryRepository cooperateShipQueryRepository; - private final CooperateShipUpsertRepository cooperateShipUpsertRepository; private final NodeQueryRepository nodeQueryRepository; private final UnitQueryRepository unitQueryRepository; private final WorkspaceGateway workspaceGateway; - private final EventProducer eventProducer; private final CooperateShipFoundationService cooperateShipFoundationService; @Transactional @@ -65,8 +52,8 @@ public class CooperateShipServiceImpl implements CooperateShipService { public SaasCooperateShip create(CreateOrgCooperateShipReq req) { // 获取组织节点 - OrganizationalNode node = nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(req.getOrganizationalNodeId()).build()) - .orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门不存在{}", req.getOrganizationalNodeId())); + OrganizationalNode node = nodeQueryRepository.getById(req.getOrganizationalNodeId()); + Axssert.check(node != null, BizResultCode.ENTITY_NOT_FOUND, "部门不存在", req.getOrganizationalNodeId()); Axssert.check(node.isTopNode(), BizResultCode.INVALID_PARAM, "只有顶级节点才能添加协同关系"); // 获取工作台信息 @@ -74,9 +61,8 @@ public class CooperateShipServiceImpl implements CooperateShipService { Axssert.checkNonNull(workspace, "工作台不存在{}", req.getWorkspaceId()); // 获取组织单位 - UnitQueryRepository.UnitResp unit = unitQueryRepository.oneOpt(UnitQueryRepository.OneReq.builder() - .id(node.getId()) - .build()).orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("单位不存在{}", node.getOrganizationalUnitId())); + UnitQueryRepository.UnitResp unit = unitQueryRepository.getById(node.getOrganizationalUnitId()); + Axssert.check(unit != null, BizResultCode.ENTITY_NOT_FOUND, "单位不存在", node.getOrganizationalUnitId()); // 创建协同关系 return cooperateShipFoundationService.create(CooperateShipCreator.builder() diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/controller/OrgProjectGroupController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/controller/OrgProjectGroupController.java index f5ee443..b169449 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/controller/OrgProjectGroupController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/controller/OrgProjectGroupController.java @@ -56,10 +56,7 @@ public class OrgProjectGroupController implements OrgProjectGroupApi { @Override public ApiResult getNoLeaderGroupList(Long workspaceId, Long platTeamId, Boolean isReturnWorker) { - - - orgProjectGroupService.getNoLeaderGroupList(workspaceId, platTeamId, isReturnWorker); - return null; + return ApiResult.success(orgProjectGroupService.getNoLeaderGroupList(workspaceId, platTeamId, isReturnWorker)); } @Override diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java index 58f4731..0440758 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java @@ -1,23 +1,36 @@ package cn.axzo.orgmanax.server.project.group.service.impl; import cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum; +import cn.axzo.orgmanax.dto.project.worker.enums.ProjectWorkerStatusEnum; +import cn.axzo.orgmanax.dto.common.IdentityType; +import cn.axzo.orgmanax.dto.common.PersonProfileBriefDTO; import cn.axzo.orgmanax.dto.node.dto.NodeProfile; import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; import cn.axzo.orgmanax.dto.node.req.ListNodeReq; +import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; +import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserProfile; +import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum; +import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum; +import cn.axzo.orgmanax.dto.project.group.resp.NoleaderProjectGroupWorkerRes; import cn.axzo.orgmanax.dto.project.group.resp.ProjectGroupListResp; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerSkillTagRes; +import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository; import cn.axzo.orgmanax.server.node.service.NodeService; +import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.project.group.service.OrgProjectGroupService; +import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService; +import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionSkillService; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; import com.google.common.collect.Sets; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -30,15 +43,15 @@ import java.util.stream.Collectors; public class OrgProjectGroupServiceImpl implements OrgProjectGroupService { private NodeService nodeService; + private NodeUserService nodeUserService; + private OrgProjectWorkerProfessionSkillService orgProjectWorkerProfessionSkillService; + private OrgProjectWorkerProfessionService orgProjectWorkerProfessionService; @Override public ProjectGroupListResp getNoLeaderGroupList(Long workspaceId, Long platTeamId, Boolean isReturnWorker) { log.info("getNoLeaderGroupList : workspaceId={}, platTeamId={}, isReturnWorker={}", workspaceId, platTeamId, isReturnWorker); - //1.默认不返回工人列表 - if (isReturnWorker == null) { - isReturnWorker = false; - } + List orgNodeDTOS = nodeService.list(ListNodeReq.builder() .workspaceIds(Sets.newHashSet(workspaceId)) .platTeamIds(Sets.newHashSet(platTeamId)) @@ -49,37 +62,91 @@ public class OrgProjectGroupServiceImpl implements OrgProjectGroupService { .ownerProjectWorkerIds(Arrays.asList(0L)) .build()); + ProjectGroupListResp res = new ProjectGroupListResp(); if (ObjectUtil.isEmpty(orgNodeDTOS)) { - Collections.emptyList(); + res.setProjectGroupList(new ArrayList<>()); + return res; } - convert(orgNodeDTOS, workspaceId); + List projectGroupInfos = convert(orgNodeDTOS, workspaceId); + res.setProjectGroupList(projectGroupInfos); + //1.默认不返回工人列表 + if (isReturnWorker == null) { + isReturnWorker = false; + } + if (isReturnWorker) { + for (ProjectGroupListResp.ProjectGroupInfo projectGroupInfo : projectGroupInfos) { + List nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() + .projectGroupWorkerStatus(ProjectGroupWorkerStatusEnum.VALID.getValue()) + .projectWorkerStatuses(Arrays.asList(ProjectWorkerStatusEnum.ACTIVE.value)) + .projectGroupId(projectGroupInfo.getId()) + .identityType(IdentityType.WORKER.getCode()) + .filterIncludeNodeTypes(Arrays.asList(NodeTypeEnum.PROJECT_GROUP.getValue())) + .needs(ListNodeUserReq.Needs.builder().personProfile(true).build()) + .build()); + if (ObjectUtil.isEmpty(nodeUserDTOS)) { + continue; + } + //TODO +// List projectWorkerIdList = nodeUserDTOS.stream().map(nodeUserDTO -> NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)).collect(Collectors.toList()); +// //获取工种 +// orgProjectWorkerProfessionService.listValid() +// +// //获取技能标签 +// List skillTagResps = orgProjectWorkerProfessionSkillService.list(WorkerProfessionSkillTagRepository.PageReq.builder() +// .workspaceId(projectGroupInfo.getWorkspaceId()) +// .projectWorkerIds(projectWorkerIdList) +// .build()); +// Map> workerSkillTagMap = +// skillTagResps.stream().collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getProjectWorkerId)); +// List groupWorkerlist = new ArrayList<>(); +// for (NodeUserDTO nodeUserDTO : nodeUserDTOS) { +// NoleaderProjectGroupWorkerRes workerRes = new NoleaderProjectGroupWorkerRes(); +// +// PersonProfileBriefDTO personProfile = nodeUserDTO.getPersonProfile(); +// workerRes.setFaceUrl(personProfile.getAvatarUrl()); +// workerRes.setPhone(personProfile.getPhone()); +// workerRes.setName(personProfile.getRealName()); +// workerRes.setIdentityId(nodeUserDTO.getIdentityId()); +// workerRes.setProjectWorkerId(NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)); +// workerRes.setProfessionList(BeanConvertUtils.copyList(oneWideByParam.getProfessionList(), +// NoleaderProjectGroupWorkerRes.ProjectGroupWorkerProfession.class)); +// workerRes.setProfessionCategory(oneWideByParam.getWorkerProfessionCategory()); +// List skillTagList = workerSkillTagMap +// .getOrDefault(worker.getProjectWorkerId(), null); +// log.info("工人{}技能标签:{}", oneWideByParam.getWorkerName(), JSON.toJSONString(skillTagList)); +// if (CollectionUtil.isNotEmpty(skillTagList)) { +// workerRes.setSkillTagList(BeanConvertUtils.copyList(skillTagList, +// ProjectWorkerSkillTagRes.class, (s, t) -> { +// t.setId(s.getSkillTagId()); +// t.setName(s.getSkillTagName()); +// })); +// } +// groupWorkerlist.add(workerRes); +// } + + } + } return null; } private List convert(List orgNodeDTOS, Long workspaceId) { - //todo -// return orgNodeDTOS.stream().map(orgNodeDTO -> { -// ProjectGroupListResp.ProjectGroupInfo projectGroupInfo = new ProjectGroupListResp.ProjectGroupInfo(); -// projectGroupInfo.setId(NodeProfile.resolveProjectGroupId(orgNodeDTO)); -// projectGroupInfo.setName(orgNodeDTO.getNodeName()); -// projectGroupInfo.setWorkspaceId(workspaceId); -// projectGroupInfo.setBelongProjectTeamId(NodeProfile.resolveProjectTeamId(orgNodeDTO)); -// projectGroupInfo.setBelongPlatTeamId(NodeProfile.resolvePlatTeamId(orgNodeDTO)); -// projectGroupInfo.setOwnerProjectWorkerId(orgNodeDTO.get); -// projectGroupInfo.setOwnerWorkerName(); -// projectGroupInfo.setOwnerWorkerPhone(); -// projectGroupInfo.setOwnerWorkerFaceUrl(); -// projectGroupInfo.setGroupType(); -// projectGroupInfo.setCreateAt(); -// projectGroupInfo.setUpdateAt(); -// projectGroupInfo.setProjectGroupWorkerList(); -// }).collect(Collectors.toList()); - return null; - + return orgNodeDTOS.stream().map(orgNodeDTO -> { + ProjectGroupListResp.ProjectGroupInfo projectGroupInfo = new ProjectGroupListResp.ProjectGroupInfo(); + projectGroupInfo.setId(NodeProfile.resolveProjectGroupId(orgNodeDTO)); + projectGroupInfo.setName(orgNodeDTO.getNodeName()); + projectGroupInfo.setWorkspaceId(workspaceId); + projectGroupInfo.setBelongProjectTeamId(NodeProfile.resolveProjectTeamId(orgNodeDTO)); + projectGroupInfo.setBelongPlatTeamId(NodeProfile.resolvePlatTeamId(orgNodeDTO)); + projectGroupInfo.setOwnerProjectWorkerId(NodeProfile.resolve(orgNodeDTO, NodeProfile.NodeProfileResolveTypeEnum.PROJECT_GROUP_OWNER_PROJECT_WORKER_ID)); + projectGroupInfo.setGroupType(NodeProfile.resolve(orgNodeDTO, NodeProfile.NodeProfileResolveTypeEnum.PROJECT_GROUP_TYPE)); + projectGroupInfo.setCreateAt(NodeProfile.resolve(orgNodeDTO, NodeProfile.NodeProfileResolveTypeEnum.PROJECT_GROUP_CREATE_AT)); + projectGroupInfo.setUpdateAt(NodeProfile.resolve(orgNodeDTO, NodeProfile.NodeProfileResolveTypeEnum.PROJECT_GROUP_UPDATE_AT)); + return projectGroupInfo; + }).collect(Collectors.toList()); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java index 675aac9..9dddd4e 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.orgmanax.server.project.worker.service.impl; import cn.axzo.orgmanax.api.invite.enums.WorkerInviteStatusEnum; import cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum; -import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; +import cn.axzo.orgmanax.dto.project.worker.enums.ProjectWorkerStatusEnum; import cn.axzo.orgmanax.dto.common.IdentityType; import cn.axzo.orgmanax.dto.node.dto.NodeProfile; import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java index 8fb3d82..19d5d20 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java @@ -1,7 +1,7 @@ package cn.axzo.orgmanax.server.workerprofession.service.impl; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; +import cn.axzo.orgmanax.dto.project.worker.enums.ProjectWorkerStatusEnum; import cn.axzo.orgmanax.dto.common.IdentityType; import cn.axzo.orgmanax.dto.common.util.NumberUtil; import cn.axzo.orgmanax.dto.common.util.TreeUtil;