UserConversion.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package com.hosea.service.infra.user;
  2. import com.hosea.service.domain.user.User;
  3. import com.hosea.service.domain.user.UserStatus;
  4. import com.hosea.service.user.client.dto.data.UserDTO;
  5. import org.mapstruct.AfterMapping;
  6. import org.mapstruct.Mapper;
  7. import org.mapstruct.Mapping;
  8. import org.mapstruct.MappingTarget;
  9. import org.mapstruct.factory.Mappers;
  10. /**
  11. * 用户-PO与领域实体转换器
  12. *
  13. * @author hosea
  14. * @date 2025-07-19
  15. */
  16. @Mapper
  17. public interface UserConversion {
  18. /**
  19. * 自动实现类
  20. */
  21. UserConversion INSTANCE = Mappers.getMapper(UserConversion.class);
  22. /**
  23. * 领域转PO
  24. */
  25. @Mapping(target = "id", source = "unique.id")
  26. @Mapping(target = "username", source = "unique.name")
  27. @Mapping(target = "nickname", source = "nickName")
  28. @Mapping(target = "displayname", source = "displayName")
  29. @Mapping(target = "employeenumber", source = "employeeNumber")
  30. @Mapping(target = "status", ignore = true)
  31. UserInfoPO toPo(User user);
  32. /**
  33. * 领域转PO-映射后的自定义转换
  34. */
  35. @AfterMapping
  36. default void toPo(User user, @MappingTarget UserInfoPO po) {
  37. if (UserStatus.Normal.equals(user.getStatus())) {
  38. po.setStatus(1L);
  39. }
  40. }
  41. /**
  42. * PO转领域
  43. */
  44. @Mapping(target = "unique.id", source = "id")
  45. @Mapping(target = "unique.name", source = "username")
  46. @Mapping(target = "nickName", source = "nickname")
  47. @Mapping(target = "displayName", source = "displayname")
  48. @Mapping(target = "employeeNumber", source = "employeenumber")
  49. @Mapping(target = "status", ignore = true)
  50. User toDomain(UserInfoPO po);
  51. /**
  52. * PO转领域-映射后的自定义转换
  53. */
  54. @AfterMapping
  55. default void toDomain(UserInfoPO po, @MappingTarget User user) {
  56. user.setStatus(po.getStatus() == 1L ? UserStatus.Normal : UserStatus.Disable);
  57. }
  58. /**
  59. * PO转DTO
  60. */
  61. @Mapping(target = "name", source = "username")
  62. @Mapping(target = "nickName", source = "nickname")
  63. @Mapping(target = "displayName", source = "displayname")
  64. @Mapping(target = "employeeNumber", source = "employeenumber")
  65. UserDTO toDto(UserInfoPO po);
  66. }