package cokr.xit.fims.chongno; import java.util.List; import java.util.Map; import javax.annotation.Resource; import cokr.xit.base.code.CommonCode; import cokr.xit.base.code.dao.CodeMapper; import cokr.xit.fims.Vhrno; import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.CrdnQuery; import cokr.xit.fims.excl.LevyExcl; import cokr.xit.fims.levy.LevyQuery; import cokr.xit.fims.levy.dao.LevyMapper; import cokr.xit.fims.mngt.service.bean.TaskProcessor; import cokr.xit.foundation.data.DataObject; public class ChongnoTaskProcessor extends TaskProcessor { private static final String TASK_SE_CD = "RVS"; public ChongnoTaskProcessor() { vltnCdGrps.set(TASK_SE_CD, "FIM090"); } @Resource(name = "levyMapper") private LevyMapper levyMapper; @Resource(name = "codeMapper") private CodeMapper codeMapper; @Override public String[] getExtraCdGrps(String taskSeCd) { if (TASK_SE_CD.equals(taskSeCd)) return new String[] {"FIM002"}; return super.getExtraCdGrps(taskSeCd); } @Override public boolean isPreImposable(String taskSeCd) { return TASK_SE_CD.equals(taskSeCd) || super.isPreImposable(taskSeCd); } @Override public int[] getBasicAmt(Crdn crdn) { String taskSeCd = crdn.getTaskSeCd(); if (TASK_SE_CD.equals(taskSeCd)) { String crdnYmd = crdn.getCrdnYmd(); String sggCd = crdn.getSggCd(); List levies = levyMapper.selectPrevLevyList( new LevyQuery() .setSchVhrno(crdn.getVhrno()) .setSchVltnCd(ifEmpty(crdn.getVltnId(), "0000002012")) .setRtpyrId(crdn.getRtpyrId()) .setDate(crdnYmd) .setSggCd(sggCd) .setTaskSeCd(taskSeCd) ); String vcount = "0" + Math.min(levies.size() + 1, 3); // 위반횟수 CrdnQuery query = new CrdnQuery() .setAplcnYmd(crdnYmd) .setAmtDcsnCdGroupId("FIM090") .setAmtDcsnCd("01") .setDtlAmtDcsnGroupId("FIM091") .setDtlAmtDcsnCd(vcount) .setTaskSeCd(taskSeCd) .setSggCd(sggCd); int amt = toInt(crdnStngMapper.selectBasicAmt(query)); DataObject taskInfo = getTaskInfo(sggCd, taskSeCd); return new int[] {amt, amt * (100 - toInt(taskInfo.get("ADVNTCE_RDCRT"))) / 100}; } return super.getBasicAmt(crdn); } @Override public String getSealCd3(String taskSeCd, String sndngSeCd) { if (TASK_SE_CD.equals(taskSeCd)) { if ("11".equals(sndngSeCd)) return "E"; } return super.getSealCd3(taskSeCd, sndngSeCd); } @Override public String getNtrisInterface(String taskSeCd) { return switch (taskSeCd) { case TASK_SE_CD -> "sntris"; default -> super.getNtrisInterface(taskSeCd); }; } @Override public String getNoticeDelivery(String taskSeCd) { if (TASK_SE_CD.equals(taskSeCd)) return "postplus"; else return super.getNoticeDelivery(taskSeCd); } private int capacity = -1; private int getCapacity() { if (capacity < 0) { CommonCode code = codeMapper.getCode("FIM022", "114"); capacity = toInt(notEmpty(code, "capacity").getEtc1()); } return capacity; } @Override public Map getExcluded(List crdns) { Map excluded = super.getExcluded(crdns); Crdn first = crdns.get(0); if (!TASK_SE_CD.equals(first.getTaskSeCd())) return excluded; int capacity = getCapacity(); if (capacity == 0) return excluded; Vhrno vhrno = new Vhrno(); for (Crdn crdn: crdns) { if (excluded.containsKey(crdn)) continue; LevyExcl levyExcl = getLevyExcl(capacity, vhrno, crdn); if (levyExcl != null) excluded.put(crdn, levyExcl); // 정원초과 -> 계도(시범운영) } return excluded; } private LevyExcl getLevyExcl(int capacity, Vhrno vhrno, Crdn crdn) { if (vhrno == null) vhrno = new Vhrno(); vhrno.setFullNumber(crdn.getVhrno()); // 일반 운수사업용 승합차면 단속대상 boolean target = Vhrno.VAN.equals(vhrno.getVehicleType()) && vhrno.isCommercial(); if (!target) return newLevyExcl(crdn, "1", "103"); // 부과제외(일반차량) int vhclCpct = crdn.getVhclCpct(); if (vhclCpct == 0) // 정원미확인 -> 초기상태 return null; //newLevyExcl(crdn, "1", "115"); if (vhclCpct < capacity) // 부과제외(정원미만) return newLevyExcl(crdn, "1", "114"); // 정원초과, 승합차, 운수사업 일반 -> 단속대상: 계도(시범운영) // 계도기간 종료 후 단속대상은 null return return newLevyExcl(crdn, "2", "206"); } @Override public LevyExcl getLevyExcl(Crdn crdn) { LevyExcl excl = super.getLevyExcl(crdn); if (!TASK_SE_CD.equals(crdn.getTaskSeCd())) return excl; if (excl != null) return excl; int capacity = getCapacity(); return capacity != 0 ? getLevyExcl(capacity, null, crdn) : null; } }