Vhrno 추가

main
mjkhan21 5 months ago
parent 3a8a2f58f0
commit f1f8497b4b

@ -0,0 +1,204 @@
package cokr.xit.fims;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import cokr.xit.foundation.AbstractObject;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* @author mjkhan
*/
@Getter
@Setter
@Accessors(chain = true)
public class Vhrno extends AbstractObject {
public static final String PASSENGER = "passenger";
public static final String VAN = "van";
public static final String TRUCK = "truck";
public static final String SPECIALTY = "specialty";
public static final String EMERGENCY = "emergency";
public static final String UNKNOWN = "unknown";
private static final Pattern
newPrivate = Pattern.compile("^(\\d{2,3})([가-힣])(\\d{4})$"),
commercial = Pattern.compile("^([가-힣]{2,3})([가-힣])(\\d{4})$"),
etc = Pattern.compile("^([가-힣]{2,3})(\\d{2,3})([가-힣])(\\d{4})$");
private static final List<String> diplomatic = List.of("외교", "영사", "준외", "준영", "국기", "협정", "대표");
private String
region,
type,
usage,
number,
fullNumber;
/** , , , , .
* @param fullNumber
* @return Vhrno
*/
public Vhrno setFullNumber(String fullNumber) {
region = type = usage = number = null;
this.fullNumber = fullNumber;
Matcher matcher = newPrivate.matcher(fullNumber);
if (matcher.matches())
return setType(matcher.group(1)).setUsage(matcher.group(2)).setNumber(matcher.group(3));
matcher = commercial.matcher(fullNumber);
if (matcher.matches())
return setRegion(matcher.group(1)).setUsage(matcher.group(2)).setNumber(matcher.group(3));
matcher = etc.matcher(fullNumber);
if (matcher.matches())
return setRegion(matcher.group(1)).setType(matcher.group(2)).setUsage(matcher.group(3)).setNumber(matcher.group(4));
for (String str: diplomatic) {
if (fullNumber.contains(str)) {
setUsage(str);
setNumber(fullNumber.replace(str, "").trim());
return this;
}
}
return this;
}
/** .
* @return
* <ul><li>{@link #PASSENGER} - </li>
* <li>{@link #VAN} - </li>
* <li>{@link #TRUCK} - </li>
* <li>{@link #SPECIALTY} - </li>
* <li>{@link #EMERGENCY} - </li>
* <li>{@link #UNKNOWN} - </li>
* </ul>
*/
public String getVehicleType() {
int num = toInt(type);
if ((num >= 1 && num <= 69) || (num >= 100 && num <= 699))
return PASSENGER;
if ((num >= 70 && num <= 79) || (num >= 700 && num <= 799))
return VAN;
if ((num >= 80 && num <= 97) || (num >= 800 && num <= 979))
return TRUCK;
if ((num >= 98 && num <= 99) || (num >= 980 && num <= 997))
return SPECIALTY;
if (num >= 998 && num <= 999)
return EMERGENCY;
return UNKNOWN;
}
/** .
* @param vehicleType
* <ul><li>{@link #PASSENGER} - </li>
* <li>{@link #VAN} - </li>
* <li>{@link #TRUCK} - </li>
* <li>{@link #SPECIALTY} - </li>
* <li>{@link #EMERGENCY} - </li>
* <li>{@link #UNKNOWN} - </li>
* </ul>
* @return
*/
public boolean isRental(String vehicleType) {
if (!equals(getVehicleType(), vehicleType)) return false;
int num = toInt(type);
return switch (vehicleType) {
case PASSENGER -> num >= 100 && num <= 699;
case VAN -> num >= 700 && num <= 799;
case TRUCK -> num >= 800 && num <= 979;
case SPECIALTY -> num >= 980 && num <= 997;
default-> false;
};
}
/** .
* @param vehicleType
* <ul><li>{@link #PASSENGER} - </li>
* <li>{@link #VAN} - </li>
* <li>{@link #TRUCK} - </li>
* <li>{@link #SPECIALTY} - </li>
* <li>{@link #EMERGENCY} - </li>
* <li>{@link #UNKNOWN} - </li>
* </ul>
* @return
*/
public boolean isNonCommercial(String vehicleType) {
return isRental(vehicleType);
}
/** .
* @param vehicleType
* <ul><li>{@link #PASSENGER} - </li>
* <li>{@link #VAN} - </li>
* <li>{@link #TRUCK} - </li>
* <li>{@link #SPECIALTY} - </li>
* <li>{@link #EMERGENCY} - </li>
* <li>{@link #UNKNOWN} - </li>
* </ul>
* @return
*/
public boolean isCommercial(String vehicleType) {
if (!equals(getVehicleType(), vehicleType)) return false;
int num = toInt(type);
return switch (vehicleType) {
case PASSENGER -> num >= 1 && num <= 69;
case VAN -> num >= 70 && num <= 79;
case TRUCK -> num >= 80 && num <= 97;
case SPECIALTY -> num >= 98 && num <= 99;
default-> false;
};
}
/** .
* @return
*/
public boolean isNonCommercial() {
return !isRental()
&& !isCommercial()
&& !isDiplomatic();
}
/** .
* @return
*/
public boolean isRental() {
return "허하호".contains(usage);
}
/** ( ) .
* @return
*/
public boolean isCommercial() {
return "바사아자배".contains(usage);
}
/** .
* @return
*/
public boolean isDiplomatic() {
return diplomatic.contains(usage);
}
public String describe() {
return String.format("%s => region: %s, type: %s, usage: %s, number: %s", fullNumber, region, type, usage, number);
}
@Override
public String toString() {
return fullNumber;
}
public static void main(String[] args) {
Vhrno vhrno = new Vhrno();
String str = "25오1778";
System.out.println(vhrno.setFullNumber(str).describe());
System.out.println(vhrno.setFullNumber(str = "123가4567").describe());
System.out.println(vhrno.setFullNumber(str = "서울바9867").describe());
System.out.println(vhrno.setFullNumber(str = "경기32더5678").describe());
System.out.println(vhrno.setFullNumber(str = "외교001-001").describe());
}
}

@ -214,24 +214,25 @@ public class LevyExclBean extends AbstractBean {
// 삭제 대상 자료 검증
if (levyExclInfo == null)
return "[F] 부과제외 자료가 조회되지 않습니다.";
if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("1") && !levyExclInfo.string("CRDN_STTS_CD").equals("81")) { // 부과제외(서손)
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("2") && !("83").contains(levyExclInfo.string("CRDN_STTS_CD"))) { // 계고
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclInfo.string("LEVY_EXCL_SE_CD").equals("3") && !levyExclInfo.string("CRDN_STTS_CD").equals("80")) { // 부과취소
return "[F] 작업 중 오류가 발생하였습니다."
+ "<br>단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
String levyExclSeCd = levyExclInfo.string("LEVY_EXCL_SE_CD");
String crdnSttsCd = levyExclInfo.string("CRDN_STTS_CD");
if (levyExclSeCd.equals("1") && !crdnSttsCd.equals("81")) { // 부과제외(서손)
return "[F] 단속 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclSeCd.equals("2") && !("83").contains(crdnSttsCd)) { // 계고
return "[F] 단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
} else if (levyExclSeCd.equals("3") && !crdnSttsCd.equals("80")) { // 부과취소
return "[F] 단속 자료의 처리상태가 " + levyExclInfo.string("CRDN_STTS_NM") + " 입니다.";
}
int rtnNocs = -1; // 처리 결과 건수
// 부과제외 구분이 부과제외(서손)일 경우
if ("1".equals(levyExclInfo.get("LEVY_EXCL_SE_CD"))) {
String crdnId = levyExclInfo.string("CRDN_ID");
if ("1".equals(levyExclSeCd)) {
// 표지정보 확인여부가 조회미대상이면 -> 미확인 으로
if ("9".equals(levyExclInfo.get("PRK_PSBLTY_RSLT_CD"))) { // 주차 가능 결과 코드 - 9 조회 미대상
Crdn crdn = new Crdn();
crdn.setCrdnId(levyExclInfo.string("CRDN_ID")); // 단속 ID
crdn.setCrdnId(crdnId); // 단속 ID
crdn.setPrkPsbltyRsltCd("0"); // 주차 가능 결과 코드 - 0 미확인
rtnNocs = levyExclMapper.updatePrkPsbltyRsltCd(crdn);
@ -247,8 +248,8 @@ public class LevyExclBean extends AbstractBean {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장의 사용 여부를 "N"으로 처리하고, 단속(TB_CRDN) 대장의 단속 상태 코드를 수정한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(levyExclInfo.string("CRDN_ID")); // 단속 ID
crdnSttsHstry.setCrdnSttsCd(levyExclInfo.string("CRDN_STTS_CD")); // 단속 상태 코드
crdnSttsHstry.setCrdnId(crdnId); // 단속 ID
crdnSttsHstry.setCrdnSttsCd(crdnSttsCd); // 단속 상태 코드
crdnSttsHstry.setEtcCn(levyExcl.getDelRsn()); // 기타 내용 - 삭제 사유
crdnSttsHstry.setUseYn("N"); // 사용 여부

Loading…
Cancel
Save