mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-07-01 05:24:36 +08:00
增加自动填充创建人和修改人信息
This commit is contained in:
@@ -125,6 +125,11 @@ public class EasyormConfiguration {
|
||||
return new ValidateEventListener();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CreatorEventListener creatorEventListener() {
|
||||
return new CreatorEventListener();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConfigurationProperties(prefix = "easyorm.default-value-generator")
|
||||
public DefaultIdGenerator defaultIdGenerator() {
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package org.hswebframework.web.crud.events;
|
||||
|
||||
import org.hswebframework.ezorm.rdb.events.EventContext;
|
||||
import org.hswebframework.ezorm.rdb.events.EventListener;
|
||||
import org.hswebframework.ezorm.rdb.events.EventType;
|
||||
import org.hswebframework.ezorm.rdb.mapping.events.MappingContextKeys;
|
||||
import org.hswebframework.ezorm.rdb.mapping.events.MappingEventTypes;
|
||||
import org.hswebframework.ezorm.rdb.mapping.events.ReactiveResultHolder;
|
||||
import org.hswebframework.web.api.crud.entity.Entity;
|
||||
import org.hswebframework.web.api.crud.entity.RecordCreationEntity;
|
||||
import org.hswebframework.web.api.crud.entity.RecordModifierEntity;
|
||||
import org.hswebframework.web.authorization.Authentication;
|
||||
import org.hswebframework.web.validator.CreateGroup;
|
||||
import org.hswebframework.web.validator.UpdateGroup;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* 自动填充创建人和修改人信息
|
||||
*/
|
||||
public class CreatorEventListener implements EventListener {
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "creator-listener";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "创建者监听器";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEvent(EventType type, EventContext context) {
|
||||
Optional<ReactiveResultHolder> resultHolder = context.get(MappingContextKeys.reactiveResultHolder);
|
||||
if (type == MappingEventTypes.insert_before
|
||||
|| type == MappingEventTypes.save_before
|
||||
|| type == MappingEventTypes.update_before) {
|
||||
if (resultHolder.isPresent()) {
|
||||
resultHolder
|
||||
.ifPresent(holder -> holder
|
||||
.before(
|
||||
Authentication
|
||||
.currentReactive()
|
||||
.doOnNext(auth -> doApplyCreator(type, context, auth))
|
||||
.then()
|
||||
));
|
||||
} else {
|
||||
Authentication
|
||||
.current()
|
||||
.ifPresent(auth -> doApplyCreator(type, context, auth));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void doApplyCreator(EventType type, EventContext context, Authentication auth) {
|
||||
context.get(MappingContextKeys.instance)
|
||||
.ifPresent(obj -> {
|
||||
if (obj instanceof Collection) {
|
||||
applyCreator(auth, ((Collection<?>) obj), type != MappingEventTypes.update_before);
|
||||
} else {
|
||||
applyCreator(auth, obj, type != MappingEventTypes.update_before);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void applyCreator(Authentication auth, Object entity, boolean updateCreator) {
|
||||
if (updateCreator && entity instanceof RecordCreationEntity) {
|
||||
RecordCreationEntity e = (RecordCreationEntity) entity;
|
||||
if (ObjectUtils.isEmpty(e.getCreatorId())) {
|
||||
e.setCreatorId(auth.getUser().getId());
|
||||
e.setCreatorName(auth.getUser().getName());
|
||||
e.setCreateTimeNow();
|
||||
}
|
||||
|
||||
}
|
||||
if (entity instanceof RecordModifierEntity) {
|
||||
RecordModifierEntity e = (RecordModifierEntity) entity;
|
||||
if (ObjectUtils.isEmpty(e.getModifierId())) {
|
||||
e.setModifierId(auth.getUser().getId());
|
||||
e.setModifierName(auth.getUser().getName());
|
||||
e.setModifyTimeNow();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void applyCreator(Authentication auth, Collection<?> entities, boolean updateCreator) {
|
||||
for (Object entity : entities) {
|
||||
applyCreator(auth, entity, updateCreator);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user