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