intra-mart Accel Kaiden! プログラミングガイド 第21版 2024-04-01

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を使用します。