parent
ba74a00a06
commit
b915f93396
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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 (옵션)
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue