增加自动填充创建人和修改人信息

This commit is contained in:
zhouhao
2022-04-01 17:27:55 +08:00
parent 2b656b5943
commit 85ccb75eff
2 changed files with 104 additions and 0 deletions

View File

@@ -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() {

View File

@@ -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);
}
}
}