优化组织创建
This commit is contained in:
@@ -5,7 +5,6 @@ import java.lang.annotation.Target;
|
||||
import java.time.Instant;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hibernate.annotations.IdGeneratorType;
|
||||
import org.hibernate.annotations.ValueGenerationType;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.id.IdentifierGenerator;
|
||||
|
||||
@@ -39,6 +38,14 @@ public class SnowflakeId {
|
||||
}
|
||||
}
|
||||
|
||||
public static long nextId() {
|
||||
return Snowflake.next();
|
||||
}
|
||||
|
||||
public static String nextStrId() {
|
||||
return String.valueOf(Snowflake.next());
|
||||
}
|
||||
|
||||
private static class Snowflake {
|
||||
/**
|
||||
* 起始的时间戳
|
||||
|
||||
@@ -48,4 +48,14 @@ public class Department {
|
||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
|
||||
@ToString.Exclude
|
||||
private Set<Department> children;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public static class SaveVO {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Long organizationId;
|
||||
private Long parentId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.lanyuanxiaoyao.server.entity;
|
||||
import com.lanyuanxiaoyao.server.configuration.Constants;
|
||||
import com.lanyuanxiaoyao.server.configuration.database.SnowflakeId;
|
||||
import com.yahoo.elide.annotation.Include;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.FetchType;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
@@ -32,7 +33,9 @@ public class Organization {
|
||||
@GeneratedValue(generator = "snowflakeId")
|
||||
@GenericGenerator(name = "snowflakeId", type = SnowflakeId.IdGenerator.class)
|
||||
private Long id;
|
||||
@Column(unique = true, nullable = false)
|
||||
private String code;
|
||||
@Column(nullable = false)
|
||||
private String name;
|
||||
|
||||
@OneToMany(fetch = FetchType.LAZY, mappedBy = "organization")
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.lanyuanxiaoyao.server.entity.mapper;
|
||||
|
||||
import com.lanyuanxiaoyao.server.entity.Department;
|
||||
import com.lanyuanxiaoyao.server.entity.vo.DepartmentSaveVO;
|
||||
import com.lanyuanxiaoyao.server.service.DepartmentService;
|
||||
import com.lanyuanxiaoyao.server.service.OrganizationService;
|
||||
import org.mapstruct.Mapper;
|
||||
@@ -19,9 +18,9 @@ import org.mapstruct.Mapping;
|
||||
DepartmentService.class,
|
||||
}
|
||||
)
|
||||
public interface DepartmentMapper extends EntityMapper<Department, DepartmentSaveVO> {
|
||||
public interface DepartmentMapper extends EntityMapper<Department, Department.SaveVO> {
|
||||
@Mapping(target = "organization", source = "organizationId")
|
||||
@Mapping(target = "parent", source = "parentId")
|
||||
@Override
|
||||
Department fromVO(DepartmentSaveVO saveVO);
|
||||
Department fromVO(Department.SaveVO saveVO);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.lanyuanxiaoyao.server.entity.mapper;
|
||||
|
||||
import com.lanyuanxiaoyao.server.configuration.database.SnowflakeId;
|
||||
import com.lanyuanxiaoyao.server.entity.Organization;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
@@ -10,9 +11,13 @@ import org.mapstruct.Mapping;
|
||||
* @author lanyuanxiaoyao
|
||||
* @version 20250327
|
||||
*/
|
||||
@Mapper
|
||||
@Mapper(
|
||||
imports = {
|
||||
SnowflakeId.class
|
||||
}
|
||||
)
|
||||
public interface OrganizationMapper extends EntityMapper<Organization, Organization.SaveVO> {
|
||||
@Mapping(target = "code", defaultExpression = "java(String.valueOf(creationVO.getId()))")
|
||||
@Mapping(target = "code", defaultExpression = "java(SnowflakeId.nextStrId())")
|
||||
@Override
|
||||
Organization fromVO(Organization.SaveVO creationVO);
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package com.lanyuanxiaoyao.server.entity.vo;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class DepartmentSaveVO {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Long organizationId;
|
||||
private Long parentId;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.lanyuanxiaoyao.server.service.base;
|
||||
|
||||
import com.blinkfox.fenix.jpa.FenixJpaRepository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public abstract class AbstractService<ENTITY, ID> {
|
||||
public abstract FenixJpaRepository<ENTITY, ID> getRepository();
|
||||
@@ -11,6 +12,7 @@ public abstract class AbstractService<ENTITY, ID> {
|
||||
return getRepository().getReferenceById(id);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ID save(ENTITY entity) {
|
||||
ENTITY saved = getRepository().saveOrUpdateByNotNullProperties(entity);
|
||||
return getId(saved);
|
||||
|
||||
Reference in New Issue
Block a user