4.2.2.2.5. 実装¶
集計処理を作成します。コラム
集計クラス名を「集計定義テーブル.集計処理+”Calc”」とすることで、集計基盤に集計処理クラスとして認識されます。
4.2.2.2.5.1. 日次集計クラス作成¶
日次集計を行う集計クラス名をDailyLateEarlyTimeCalcとします。標準で集計される日次遅刻時間と日次早退時間を足して、日次遅刻早退時間の値として保持します。package jp.co.slcs.kaiden.v2.tutorial2.foundation.sum.util.calc.daily; import static jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.SummaryUtil.nullToZero; import java.math.BigDecimal; import java.util.HashMap; 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.product_labormgr.foundation.sum.conf.KlsKey.D; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.process.model.dto.SumDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.process.model.dto.SumDto.DailySumDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.calc.SumCalcIF; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.calc.model.dto.GenericSumCalcDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.calc.model.dto.SumCalcDefDto; import jp.co.slcs.kaiden.v2.tutorial2.foundation.sum.util.calc.daily.DailyLateEarlyTimeCalc.DailyLateEarlyTimeCalcDto; /** * 遅刻早退合計時間算出クラス. */ @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class DailyLateEarlyTimeCalc implements SumCalcIF<DailySumDto, DailyLateEarlyTimeCalcDto> { /* ************************************************************************************** * 集計するのに必要な値をDTOクラスで宣言します。 * ************************************************************************************** */ public static class DailyLateEarlyTimeCalcDto extends GenericSumCalcDto { /** 遅刻時間(分). */ public BigDecimal lateMin; /** 早退時間(分). */ public BigDecimal earlyMin; } /* ************************************************************************************** * 集計処理基盤が、集計定義を元に対象の集計クラスのcalcForSumメソッドを呼び出します。 * calcForSumメソッドでは、引数から集計に必要な値を取り出してDtoにセットし、 * 実処理を行うcalcメソッドを呼び出します。 * 結果を集計基盤に返却します。 * ************************************************************************************** */ @Override public Map<String, BigDecimal> calcForSum(SumDto sumDto, Map<String, BigDecimal> dailySumData, SumCalcDefDto def, DailySumDto dailySumDto) { DailyLateEarlyTimeCalcDto calcDto = new DailyLateEarlyTimeCalcDto(); // 遅刻時間を算出済み日次集計データより取得 calcDto.lateMin = nullToZero(dailySumData.get(D.M_1001_M)); // 早退時間を算出済み日次集計データより取得 calcDto.earlyMin = nullToZero(dailySumData.get(D.M_1002_M)); return calc(calcDto); } /* ************************************************************************************** * 集計処理をcalcメソッドに実装します。 * 集計結果を集計キーに紐づけてセットし、返却します。 * ************************************************************************************** */ @Override public Map<String, BigDecimal> calc(DailyLateEarlyTimeCalcDto calcDto, String... sumKeys) { Map<String, BigDecimal> resultMap = new HashMap<String, BigDecimal>(); // 算出結果をセット resultMap.put("DA_late_early_time_M", calcDto.lateMin.add(calcDto.earlyMin)); return resultMap; } }
4.2.2.2.5.2. 締め期間集計クラス作成¶
締め期間集計を行う集計クラス名をPeriodLateEarlyTimeCalcとします。標準で集計される締め期間遅刻時間と締め期間早退時間を足して、締め期間遅刻早退時間の値として保持します。しきい値となる「30分」は、集計定義のパラメータとして登録し、当集計クラスはそこから受け取ることとします。コラム
集計定義パラメータについては後述します。package jp.co.slcs.kaiden.v2.tutorial2.foundation.sum.util.calc.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.toBigDecimal; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.manager.sum.SummaryManager; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.process.model.dto.SumDto; 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.calc.SumCalcIF; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.calc.model.dto.GenericSumCalcDto; import jp.co.slcs.kaiden.v2.product_labormgr.foundation.sum.util.calc.model.dto.SumCalcDefDto; import jp.co.slcs.kaiden.v2.tutorial2.foundation.sum.util.calc.multiperiod.period.PeriodLateEarlyTimeCalc.PeriodLateEarlyTimeCalcDto; /** * 締め期間遅刻早退時間算出クラス. */ @Component @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class PeriodLateEarlyTimeCalc implements SumCalcIF<MultiPeriodSumDto, PeriodLateEarlyTimeCalcDto> { /* ************************************************************************************** * 集計定義パラメータを取得するためのパラメータシーケンスを宣言しています。 * ************************************************************************************** */ private static final long PARAM_SEQ_1 = 1; public static class PeriodLateEarlyTimeCalcDto extends GenericSumCalcDto { /** 遅刻早退時間(分). */ public BigDecimal lateEaryMin; /** 下限時間. */ public BigDecimal lowerLimitMin; } /** SummaryManager. */ @Autowired protected SummaryManager summaryManager; @Override public Map<String, BigDecimal> calcForSum(SumDto sumDto, Map<String, BigDecimal> sumData, SumCalcDefDto def, MultiPeriodSumDto multiPeriodSumDto) { PeriodLateEarlyTimeCalcDto calcDto = new PeriodLateEarlyTimeCalcDto(); /* ************************************************************************************** * 締め期間中の日次遅刻早退時間の合計を取得します。 * ************************************************************************************** */ // 日次遅刻早退時間の合計を取得 calcDto.lateEaryMin = nullToZero(summaryManager.getWrecSumDailyByPeriod(sumDto.spInfo.getUserCd(), sumDto.spInfo.getPeriodStartDate(), sumDto.spInfo.getPeriodEndDate(), "DA_late_early_time_M").get( "DA_late_early_time_M")); /* ************************************************************************************** * 集計定義パラメータとして定義されている30分を取得します。 * ************************************************************************************** */ // 集計定義パラメータより、下限時間を取得 calcDto.lowerLimitMin = toBigDecimal(def.param.getSingleParam(PARAM_SEQ_1)); return calc(calcDto); } @Override public Map<String, BigDecimal> calc(PeriodLateEarlyTimeCalcDto calcDto, String... sumKeys) { Map<String, BigDecimal> resultMap = new HashMap<String, BigDecimal>(); // 算出結果をセット if (calcDto.lateEaryMin.compareTo(calcDto.lowerLimitMin) < 0) { // 下限時間より少ない resultMap.put("PA_late_early_time_M", BigDecimal.ZERO); } else { // 下限時間以上 resultMap.put("PA_late_early_time_M", calcDto.lateEaryMin); } return resultMap; } }コラム
日次集計値の単純な合計を締め期間集計値としてよい場合は、締め期間集計クラスを独自に作成する必要はありません。
4.2.2.2.5.3. applicationContext.xmlの設定¶
applicationContext.xmlの設定を追加します。「src/main/resources/META-INF/spring」に設定した「applicationContext-kaiden_tutorial.xml」を次のように編集します。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- DIコンポーネントの対象とする要素のトップレベルパッケージ --> <context:component-scan base-package="jp.co.slcs.kaiden.v2.tutorial" /> <context:component-scan base-package="jp.co.slcs.kaiden.v2.tutorial2" /> </beans>