4.2.2.5.4.1. 集計チェック処理¶
4.2.2.5.4.1.1. 集計チェッククラス作成¶
クラス名をLateEarlyPeriodTimeCheckerとします。package jp.co.slcs.kaiden.v2.tutorial2.foundation.sum.util.check.multiperiod.period; import static jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.SummaryUtil.nullToZero; import static jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.SummaryUtil.toMsgHHMM; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import jp.co.slcs.kaiden.v2.base.foundation.util.BeanUtil; import jp.co.slcs.kaiden.v2.base.foundation.util.StringUtil; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.conf.SevereLevel; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.process.model.dto.SumDto.MultiPeriodSumDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.SummaryUtil; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.AbstractSummaryChecker; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.model.dto.GenericBorderCheckDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.model.dto.SumCheckDefDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.model.dto.SumCheckDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.model.dto.SumCheckResult; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.check.model.dto.SumCheckerGenericDto; @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class LateEarlyPeriodTimeChecker extends AbstractSummaryChecker<MultiPeriodSumDto, GenericBorderCheckDto> { /* ************************************************************************************** * パラメータキーを宣言しています。 * ************************************************************************************** */ protected static final String CRITERIA_VALUE = "criteriaValue"; @Override public List<SumCheckResult> checkForSum(Map<String, BigDecimal> sumData, SumCheckDefDto sumCheckDef, MultiPeriodSumDto multiPeriodSumDto) { GenericBorderCheckDto gbcDto = new GenericBorderCheckDto(sumData, sumCheckDef); /* ************************************************************************************** * チェック対象期間の開始日と終了日を取得しています。 * エラーメッセージに出力します。 * ************************************************************************************** */ gbcDto.checkTargetStartDate = BeanUtil.toCast(MultiPeriodSumDto.class, multiPeriodSumDto).getAssignStartDate(); gbcDto.checkTargetEndDate = BeanUtil.toCast(MultiPeriodSumDto.class, multiPeriodSumDto).getAssignStartDate(); return check(gbcDto); } @Override public List<SumCheckResult> check(GenericBorderCheckDto btcDto) { SumCheckDefDto scDef = btcDto.sumCheckDef; List<SumCheckResult> resultList = new ArrayList<SumCheckResult>(); /* ************************************************************************************** * 締め期間集計データから、遅刻早退時間の値を取得します。 * ************************************************************************************** */ BigDecimal targetValue = nullToZero(btcDto.sumData.get("PA_late_early_time_M")); SumCheckResult scResult = null; /* ************************************************************************************** * レベルごとのしきい値と比較します。 * レベル1から順に比較し、結果を上書きしています。 * ************************************************************************************** */ for (SevereLevel level : SevereLevel.values()) { SumCheckDto def = scDef.param.getBorderDefs(level).get(CRITERIA_VALUE); if (null == def || StringUtil.isEmpty(def.paramValue)) { continue; } BigDecimal criteriaValue = toAnyType(BigDecimal.class, def.paramValue); if (null == criteriaValue) { continue; } // 基準値 [%演算子%] 対象値 の場合 if (targetValue.compareTo(criteriaValue) > 0) { /* ************************************************************************************** * チェック結果メッセージIDの引数を設定しています。 * ************************************************************************************** */ scResult = makeSumCheckResult(scDef); scResult.judgeStatus = true; scResult.severeLevel = level.getCode(); scResult.addMsgArg(btcDto.checkTargetStartDate); scResult.addMsgArg(btcDto.checkTargetEndDate); scResult.addMsgArg("TTRL.summaryItem.V.PA_late_early_time_M"); scResult.addMsgArg(toMsgHHMM(targetValue)); scResult.addMsgArg(toMsgHHMM(criteriaValue)); } } if (null != scResult) { resultList.add(scResult); } return resultList; } @Override protected String getMessageId() { /* ************************************************************************************** * チェック結果メッセージIDを返します。 * ************************************************************************************** */ return "I.TTRL.summaryCheck.0001"; } @Override protected Object[] getMsgArgs(SumCheckerGenericDto scgDto, Object... args) { return SummaryUtil.makeArgs(scgDto, args); } }コラム
クラス名を「ガジェットマスタ.Javaパス+”Checker”」とすることで、集計チェック基盤に集計チェッククラスとして認識されます。
4.2.2.5.4.1.2. メッセージ定義ファイル作成¶
ファイル名をtutorial2_messages.xmlとします。<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment/> <entry key="I.TTRL.summaryCheck.0001">[{0}]~[{1}]の期間で{2}({3})が{4}を超過しています</entry> </properties>
4.2.2.5.4.1.3. サーフィス定義ファイル作成¶
照会画面等に新たな集計項目を表示するの定義で使用したサーフィス定義ファイルを使用します。
4.2.2.5.4.1.4. applicationContext.xmlの設定¶
照会画面等に新たな集計項目を表示するの実装で使用したapplicationContext.xmlを使用します。