지대한
1 year ago
51 changed files with 561 additions and 1579 deletions
@ -1,22 +0,0 @@
|
||||
package com.palnet.biz.config; |
||||
|
||||
import com.palnet.comn.utils.DateUtils; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.core.convert.converter.Converter; |
||||
|
||||
import java.time.Instant; |
||||
|
||||
@Slf4j |
||||
public class StringToInstantBinding implements Converter<String, Instant> { |
||||
|
||||
|
||||
@Override |
||||
public Instant convert(String date) { |
||||
log.error("StringToInstantBinding - convert()"); |
||||
log.error("date -> {}", date); |
||||
|
||||
return DateUtils.stringToInstant(date); |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,44 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.fasterxml.jackson.core.JsonParser; |
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.DeserializationContext; |
||||
import com.fasterxml.jackson.databind.JsonDeserializer; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.config.convert |
||||
* fileName : InstantDatetimeStrSerializer |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
public class InstantDateStrDeserializer extends JsonDeserializer<Instant> { |
||||
private static final String ZONE = "Asia/Seoul"; |
||||
private static final String FORMAT = "yyyy-MM-dd"; |
||||
|
||||
@Override |
||||
public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { |
||||
try { |
||||
String dateString = p.getValueAsString(); |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT); |
||||
LocalDate localDate = LocalDate.parse(dateString, formatter); |
||||
return localDate.atStartOfDay(ZoneId.of(ZONE)).toInstant(); |
||||
} catch (Exception e) { |
||||
log.error("ERROR : ", e); |
||||
return null; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator; |
||||
import com.fasterxml.jackson.databind.JsonSerializer; |
||||
import com.fasterxml.jackson.databind.SerializerProvider; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.config.convert |
||||
* fileName : InstantDatetimeStrSerializer |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
public class InstantDateStrSerializer extends JsonSerializer<Instant> { |
||||
private static final String ZONE = "Asia/Seoul"; |
||||
private static final String FORMAT = "yyyy-MM-dd"; |
||||
@Override |
||||
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException { |
||||
try { |
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT) |
||||
.withZone(ZoneId.of(ZONE)); |
||||
String str = formatter.format(value); |
||||
gen.writeString(str); |
||||
} catch (Exception e) { |
||||
log.error("ERROR : ", e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,47 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator; |
||||
import com.fasterxml.jackson.core.JsonParser; |
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.DeserializationContext; |
||||
import com.fasterxml.jackson.databind.JsonDeserializer; |
||||
import com.fasterxml.jackson.databind.JsonSerializer; |
||||
import com.fasterxml.jackson.databind.SerializerProvider; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.time.LocalDateTime; |
||||
import java.time.ZoneId; |
||||
import java.time.ZoneOffset; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.config.convert |
||||
* fileName : InstantDatetimeStrSerializer |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
public class InstantDatetimeStrDeserializer extends JsonDeserializer<Instant> { |
||||
private static final String ZONE = "Asia/Seoul"; |
||||
private static final String FORMAT = "yyyy-MM-dd HH:mm:ss"; |
||||
|
||||
@Override |
||||
public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { |
||||
try { |
||||
String dateString = p.getValueAsString(); |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT); |
||||
LocalDateTime localDateTime = LocalDateTime.parse(dateString, formatter); |
||||
return localDateTime.atZone(ZoneId.of(ZONE)).toInstant(); |
||||
} catch (Exception e) { |
||||
log.error("ERROR : ", e); |
||||
return null; |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator; |
||||
import com.fasterxml.jackson.databind.JsonSerializer; |
||||
import com.fasterxml.jackson.databind.SerializerProvider; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.config.convert |
||||
* fileName : InstantDatetimeStrSerializer |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
public class InstantDatetimeStrSerializer extends JsonSerializer<Instant> { |
||||
private static final String ZONE = "Asia/Seoul"; |
||||
private static final String FORMAT = "yyyy-MM-dd HH:mm:ss"; |
||||
|
||||
@Override |
||||
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException { |
||||
try { |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT) |
||||
.withZone(ZoneId.of(ZONE)); |
||||
String str = formatter.format(value); |
||||
gen.writeString(str); |
||||
} catch (Exception e) { |
||||
log.error("ERROR : ", e); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,70 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.fasterxml.jackson.core.JsonParser; |
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.databind.DeserializationContext; |
||||
import com.fasterxml.jackson.databind.JsonDeserializer; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.time.Instant; |
||||
import java.time.LocalDate; |
||||
import java.time.LocalDateTime; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.biz.config.convert |
||||
* fileName : InstantDatetimeStrSerializer |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
@Slf4j |
||||
public class InstantStringDeserializer extends JsonDeserializer<Instant> { |
||||
private static final String ZONE = "Asia/Seoul"; |
||||
private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
||||
private static final String DATE_FORMAT = "yyyy-MM-dd"; |
||||
|
||||
@Override |
||||
public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { |
||||
try { |
||||
String dateString = p.getValueAsString(); |
||||
if(isValidFormat(dateString, DATETIME_FORMAT)){ |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATETIME_FORMAT); |
||||
LocalDateTime localDateTime = LocalDateTime.parse(dateString, formatter); |
||||
return localDateTime.atZone(ZoneId.of(ZONE)).toInstant(); |
||||
} else if (isValidFormat(dateString, DATE_FORMAT)) { |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT); |
||||
LocalDate localDate = LocalDate.parse(dateString, formatter); |
||||
return localDate.atStartOfDay(ZoneId.of(ZONE)).toInstant(); |
||||
} else { |
||||
return Instant.parse(dateString); |
||||
} |
||||
} catch (Exception e) { |
||||
log.error("ERROR : ", e); |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
// string validate format
|
||||
public boolean isValidFormat(String dateString, String format) { |
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(format); |
||||
dateFormat.setLenient(false); // 엄격한 날짜 파싱을 위해 lenient 모드를 비활성화합니다.
|
||||
|
||||
try { |
||||
dateFormat.parse(dateString); |
||||
return true; // 파싱에 성공하면 유효한 형식입니다.
|
||||
} catch (ParseException e) { |
||||
return false; // 파싱에 실패하면 유효하지 않은 형식입니다.
|
||||
} |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.palnet.biz.config.convert; |
||||
|
||||
import com.palnet.comn.utils.InstantUtils; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.core.convert.converter.Converter; |
||||
|
||||
import java.time.Instant; |
||||
import java.time.format.DateTimeParseException; |
||||
|
||||
@Slf4j |
||||
public class StringToInstantBinding implements Converter<String, Instant> { |
||||
|
||||
private final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
||||
private final String DATE_FORMAT = "yyyy-MM-dd"; |
||||
|
||||
// 현재 서울기준으로 설정 TODO 프론트에서 ISO 형식으로 보낼경우 제거
|
||||
private final String ZONE = "Asia/Seoul"; |
||||
|
||||
@Override |
||||
public Instant convert(String date) { |
||||
log.error("StringToInstantBinding - convert()"); |
||||
log.error("date -> {}", date); |
||||
|
||||
if(InstantUtils.isValidFormat(date, DATETIME_FORMAT)) { |
||||
return InstantUtils.fromDatetimeString(date); |
||||
} else if(InstantUtils.isValidFormat(date, DATE_FORMAT)){ |
||||
return InstantUtils.fromDateString(date); |
||||
} else { |
||||
try { |
||||
return Instant.parse(date); |
||||
} catch (DateTimeParseException e) { |
||||
log.error("ERROR : ", e); |
||||
} |
||||
} |
||||
|
||||
return null; |
||||
} |
||||
|
||||
} |
@ -1,98 +1,44 @@
|
||||
package com.palnet.biz.jpa.entity; |
||||
|
||||
import java.io.Serializable; |
||||
import lombok.Data; |
||||
|
||||
import javax.persistence.*; |
||||
import java.io.Serializable; |
||||
import java.time.Instant; |
||||
import java.util.Date; |
||||
|
||||
|
||||
/** |
||||
* The persistent class for the PTY_GROUP_BAS database table. |
||||
* |
||||
*/ |
||||
@Data |
||||
@Entity |
||||
@Table(name="PTY_GROUP_BAS") |
||||
@NamedQuery(name="PtyGroupBas.findAll", query="SELECT p FROM PtyGroupBas p") |
||||
public class PtyGroupBas implements Serializable { |
||||
private static final long serialVersionUID = 1L; |
||||
private String groupId; |
||||
private Instant createDt; |
||||
private String groupNm; |
||||
private String groupTypeCd; |
||||
private Instant updateDt; |
||||
private String useYn; |
||||
private String trmnlId; |
||||
|
||||
public PtyGroupBas() { |
||||
} |
||||
|
||||
|
||||
@Id |
||||
@Column(name="GROUP_ID") |
||||
public String getGroupId() { |
||||
return this.groupId; |
||||
} |
||||
|
||||
public void setGroupId(String groupId) { |
||||
this.groupId = groupId; |
||||
} |
||||
|
||||
private String groupId; |
||||
|
||||
// @Temporal(TemporalType.TIMESTAMP)
|
||||
@Column(name="CREATE_DT", columnDefinition = "TIMESTAMP") |
||||
public Instant getCreateDt() { |
||||
return this.createDt; |
||||
} |
||||
|
||||
public void setCreateDt(Instant createDt) { |
||||
this.createDt = createDt; |
||||
} |
||||
|
||||
private Instant createDt; |
||||
|
||||
@Column(name="GROUP_NM") |
||||
public String getGroupNm() { |
||||
return this.groupNm; |
||||
} |
||||
|
||||
public void setGroupNm(String groupNm) { |
||||
this.groupNm = groupNm; |
||||
} |
||||
|
||||
private String groupNm; |
||||
|
||||
@Column(name="GROUP_TYPE_CD") |
||||
public String getGroupTypeCd() { |
||||
return this.groupTypeCd; |
||||
} |
||||
|
||||
public void setGroupTypeCd(String groupTypeCd) { |
||||
this.groupTypeCd = groupTypeCd; |
||||
} |
||||
|
||||
private String groupTypeCd; |
||||
|
||||
// @Temporal(TemporalType.TIMESTAMP)
|
||||
@Column(name="UPDATE_DT", columnDefinition = "TIMESTAMP") |
||||
public Instant getUpdateDt() { |
||||
return this.updateDt; |
||||
} |
||||
|
||||
public void setUpdateDt(Instant updateDt) { |
||||
this.updateDt = updateDt; |
||||
} |
||||
|
||||
private Instant updateDt; |
||||
|
||||
@Column(name="USE_YN") |
||||
public String getUseYn() { |
||||
return this.useYn; |
||||
} |
||||
|
||||
public void setUseYn(String useYn) { |
||||
this.useYn = useYn; |
||||
} |
||||
|
||||
private String useYn; |
||||
|
||||
@Column(name="TRMNL_ID") |
||||
public String getTrmnlId() { return this.trmnlId;} |
||||
|
||||
public void setTrmnlId(String trmnlId) { this.trmnlId = trmnlId; } |
||||
private String trmnlId; |
||||
|
||||
} |
@ -0,0 +1,109 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
import java.time.*; |
||||
import java.time.format.DateTimeFormatter; |
||||
|
||||
/** |
||||
* packageName : com.palnet.comn.utils |
||||
* fileName : InstantUtils |
||||
* author : dhji |
||||
* date : 2023-09-14(014) |
||||
* description : |
||||
* =========================================================== |
||||
* DATE AUTHOR NOTE |
||||
* ----------------------------------------------------------- |
||||
* 2023-09-14(014) dhji 최초 생성 |
||||
*/ |
||||
public class InstantUtils { |
||||
private static final String DEFAULT_ZONE = "Asia/Seoul"; |
||||
private static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; |
||||
private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; |
||||
|
||||
// instant to string (datetime)
|
||||
public static String toDatetimeString(Instant instant) { |
||||
return toDatetimeStringByZoneAndFormat(instant, DEFAULT_ZONE, DEFAULT_DATETIME_FORMAT); |
||||
} |
||||
|
||||
public static String toDatetimeStringByZone(Instant instant, String zone) { |
||||
return toDatetimeStringByZoneAndFormat(instant, zone, DEFAULT_DATETIME_FORMAT); |
||||
} |
||||
|
||||
public static String toDatetimeStringByFormat(Instant instant, String format) { |
||||
return toDatetimeStringByZoneAndFormat(instant, DEFAULT_ZONE, format); |
||||
} |
||||
|
||||
public static String toDatetimeStringByZoneAndFormat(Instant instant, String zone, String format) { |
||||
// Instant 객체를 원하는 형식의 문자열로 포맷팅
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format) |
||||
.withZone(ZoneId.of(zone)); |
||||
return formatter.format(instant); |
||||
} |
||||
|
||||
// string to instant(datetime)
|
||||
public static Instant fromDatetimeString(String dateString) { |
||||
return fromDatetimeStringByZoneAndFormat(dateString, DEFAULT_ZONE, DEFAULT_DATETIME_FORMAT); |
||||
} |
||||
public static Instant fromDatetimeStringByZone(String dateString, String zone) { |
||||
return fromDatetimeStringByZoneAndFormat(dateString, zone, DEFAULT_DATETIME_FORMAT); |
||||
} |
||||
public static Instant fromDatetimeStringByFormat(String dateString, String format) { |
||||
return fromDatetimeStringByZoneAndFormat(dateString, DEFAULT_ZONE, format); |
||||
} |
||||
public static Instant fromDatetimeStringByZoneAndFormat(String dateString, String zone, String format) { |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); |
||||
LocalDateTime localDateTime = LocalDateTime.parse(dateString, formatter); |
||||
return localDateTime.atZone(ZoneId.of(zone)).toInstant(); |
||||
} |
||||
|
||||
// instant to string (date)
|
||||
public static String toDateString(Instant instant) { |
||||
return toDateStringByZoneAndFormat(instant, DEFAULT_ZONE, DEFAULT_DATE_FORMAT); |
||||
} |
||||
|
||||
public static String toDateStringByZone(Instant instant, String zone) { |
||||
return toDateStringByZoneAndFormat(instant, zone, DEFAULT_DATE_FORMAT); |
||||
} |
||||
|
||||
public static String toDateStringByFormat(Instant instant, String format) { |
||||
return toDateStringByZoneAndFormat(instant, DEFAULT_ZONE, format); |
||||
} |
||||
|
||||
public static String toDateStringByZoneAndFormat(Instant instant, String zone, String format) { |
||||
// Instant 객체를 원하는 형식의 문자열로 포맷팅
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format) |
||||
.withZone(ZoneId.of(zone)); |
||||
return formatter.format(instant); |
||||
} |
||||
|
||||
|
||||
// string to instant(date)
|
||||
public static Instant fromDateString(String dateString) { |
||||
return fromDateStringByZoneAndFormat(dateString, DEFAULT_ZONE, DEFAULT_DATE_FORMAT); |
||||
} |
||||
public static Instant fromDateStringByZone(String dateString, String zone) { |
||||
return fromDateStringByZoneAndFormat(dateString, zone, DEFAULT_DATE_FORMAT); |
||||
} |
||||
public static Instant fromDateStringByFormat(String dateString, String format) { |
||||
return fromDateStringByZoneAndFormat(dateString, DEFAULT_ZONE, format); |
||||
} |
||||
public static Instant fromDateStringByZoneAndFormat(String dateString, String zone, String format) { |
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); |
||||
LocalDate localDate = LocalDate.parse(dateString, formatter); |
||||
return localDate.atStartOfDay(ZoneId.of(zone)).toInstant(); |
||||
} |
||||
|
||||
// string validate format
|
||||
public static boolean isValidFormat(String dateString, String format) { |
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(format); |
||||
dateFormat.setLenient(false); // 엄격한 날짜 파싱을 위해 lenient 모드를 비활성화합니다.
|
||||
|
||||
try { |
||||
dateFormat.parse(dateString); |
||||
return true; // 파싱에 성공하면 유효한 형식입니다.
|
||||
} catch (ParseException e) { |
||||
return false; // 파싱에 실패하면 유효하지 않은 형식입니다.
|
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue