package com.hosea.service.infra.user; import com.hosea.service.domain.user.User; import com.hosea.service.domain.user.UserStatus; import com.hosea.service.user.client.dto.data.UserDTO; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.mapstruct.factory.Mappers; /** * 用户-PO与领域实体转换器 * * @author hosea * @date 2025-07-19 */ @Mapper public interface UserConversion { /** * 自动实现类 */ UserConversion INSTANCE = Mappers.getMapper(UserConversion.class); /** * 领域转PO */ @Mapping(target = "id", source = "unique.id") @Mapping(target = "username", source = "unique.name") @Mapping(target = "nickname", source = "nickName") @Mapping(target = "displayname", source = "displayName") @Mapping(target = "employeenumber", source = "employeeNumber") @Mapping(target = "status", ignore = true) UserInfoPO toPo(User user); /** * 领域转PO-映射后的自定义转换 */ @AfterMapping default void toPo(User user, @MappingTarget UserInfoPO po) { if (UserStatus.Normal.equals(user.getStatus())) { po.setStatus(1L); } } /** * PO转领域 */ @Mapping(target = "unique.id", source = "id") @Mapping(target = "unique.name", source = "username") @Mapping(target = "nickName", source = "nickname") @Mapping(target = "displayName", source = "displayname") @Mapping(target = "employeeNumber", source = "employeenumber") @Mapping(target = "status", ignore = true) User toDomain(UserInfoPO po); /** * PO转领域-映射后的自定义转换 */ @AfterMapping default void toDomain(UserInfoPO po, @MappingTarget User user) { user.setStatus(po.getStatus() == 1L ? UserStatus.Normal : UserStatus.Disable); } /** * PO转DTO */ @Mapping(target = "name", source = "username") @Mapping(target = "nickName", source = "nickname") @Mapping(target = "displayName", source = "displayname") @Mapping(target = "employeeNumber", source = "employeenumber") UserDTO toDto(UserInfoPO po); }