[employee/external]

- Added only retrieve one data
This commit is contained in:
Hyojin Ahn 2025-12-02 12:08:34 -05:00
parent ba74a00a06
commit b915f93396
6 changed files with 204 additions and 0 deletions

View File

@ -0,0 +1,33 @@
package com.goi.erp.controller;
import com.goi.erp.dto.EmployeeExternalMapResponseDto;
import com.goi.erp.service.EmployeeExternalMapService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/employee")
@RequiredArgsConstructor
public class EmployeeExternalMapController {
private final EmployeeExternalMapService externalMapService;
/**
* 외부 시스템의 employeeId 내부 employee 매핑 조회
* 목적: customer_daily_order.driver_id 설정
*
* : GET /employee/external?solutionType=SAMSARA&externalId=28147...
*/
@GetMapping("/external")
public ResponseEntity<EmployeeExternalMapResponseDto> getEmployeeMapping(
@RequestParam String solutionType,
@RequestParam String externalId
) {
EmployeeExternalMapResponseDto dto =
externalMapService.findMapping(solutionType, externalId);
return ResponseEntity.ok(dto);
}
}

View File

@ -0,0 +1,11 @@
package com.goi.erp.dto;
import lombok.Data;
@Data
public class EmployeeExternalMapRequestDto {
private Long eexEmpId; // 매핑할 내부 employee ID
private String eexSolutionType; // 'SAMSARA', 'MIS', ...
private String eexExternalId; // 외부 ID
private String eexStatus; // A / I (옵션)
}

View File

@ -0,0 +1,20 @@
package com.goi.erp.dto;
import lombok.Data;
import java.util.UUID;
@Data
public class EmployeeExternalMapResponseDto {
private UUID eexUuid;
private Long eexEmpId;
private String eexSolutionType;
private String eexExternalId;
private String eexStatus;
private String eexCreatedBy;
private String eexUpdatedBy;
}

View File

@ -0,0 +1,77 @@
package com.goi.erp.entity;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.UUID;
@Entity
@Table(
name = "employee_external_map",
uniqueConstraints = {
@UniqueConstraint(
name = "uk_employee_external_map",
columnNames = {"eex_emp_id", "eex_solution_type", "eex_external_id"}
)
}
)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EntityListeners(AuditingEntityListener.class)
public class EmployeeExternalMap {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "eex_id")
private Long eexId;
@Column(name = "eex_uuid", nullable = false)
private UUID eexUuid;
@Column(name = "eex_emp_id", nullable = false)
private Long eexEmpId;
@Column(name = "eex_solution_type", nullable = false, length = 50)
private String eexSolutionType;
@Column(name = "eex_external_id", nullable = false, length = 100)
private String eexExternalId;
@Column(name = "eex_status", length = 1)
private String eexStatus; // A / I
@CreatedDate
@Column(name = "eex_created_at", updatable = false)
private LocalDateTime eexCreatedAt;
@CreatedBy
@Column(name = "eex_created_by")
private String eexCreatedBy;
@LastModifiedDate
@Column(name = "eex_updated_at")
private LocalDateTime eexUpdatedAt;
@LastModifiedBy
@Column(name = "eex_updated_by")
private String eexUpdatedBy;
}

View File

@ -0,0 +1,17 @@
package com.goi.erp.repository;
import com.goi.erp.entity.EmployeeExternalMap;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface EmployeeExternalMapRepository extends JpaRepository<EmployeeExternalMap, Long> {
Optional<EmployeeExternalMap> findByEexSolutionTypeAndEexExternalIdAndEexStatus(
String eexSolutionType,
String eexExternalId,
String eexStatus
);
}

View File

@ -0,0 +1,46 @@
package com.goi.erp.service;
import com.goi.erp.dto.EmployeeExternalMapResponseDto;
import com.goi.erp.entity.EmployeeExternalMap;
import com.goi.erp.repository.EmployeeExternalMapRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
public class EmployeeExternalMapService {
private final EmployeeExternalMapRepository externalMapRepository;
/**
* 외부 솔루션의 ID로 내부 employee 매핑 정보 조회
* 목적: customer_daily_order.driver_id 들어갈 내부 emp_id 조회
*/
@Transactional(readOnly = true)
public EmployeeExternalMapResponseDto findMapping(String solutionType, String externalId) {
EmployeeExternalMap map = externalMapRepository
.findByEexSolutionTypeAndEexExternalIdAndEexStatus(
solutionType,
externalId,
"A" // 활성 매핑만 사용
)
.orElseThrow(() ->
new RuntimeException("Employee external mapping not found for externalId: " + externalId)
);
// Entity ResponseDto 변환
EmployeeExternalMapResponseDto dto = new EmployeeExternalMapResponseDto();
dto.setEexUuid(map.getEexUuid());
dto.setEexEmpId(map.getEexEmpId());
dto.setEexSolutionType(map.getEexSolutionType());
dto.setEexExternalId(map.getEexExternalId());
dto.setEexStatus(map.getEexStatus());
dto.setEexCreatedBy(map.getEexCreatedBy());
dto.setEexUpdatedBy(map.getEexUpdatedBy());
return dto;
}
}