|
|
|
|
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<DataObject> 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<Crdn, LevyExcl> getExcluded(List<Crdn> crdns) {
|
|
|
|
|
Map<Crdn, LevyExcl> 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;
|
|
|
|
|
}
|
|
|
|
|
}
|