/**
* @(#)ErrorNotificationServiceImpl.java
*
* Copyright (c) 2018 Fast Retailing Corporation.
*/
package com.fastretailing.dcp.sales.errornotification.service;
import java.text.MessageFormat;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fastretailing.dcp.sales.common.dto.PayOffData;
import com.fastretailing.dcp.sales.common.dto.SalesTransactionErrorDetail;
import com.fastretailing.dcp.sales.common.repository.PayOffDataMapper;
import com.fastretailing.dcp.sales.common.repository.SalesTransactionErrorDetailMapper;
import com.fastretailing.dcp.sales.common.type.ErrorNotificationFlag;
import com.fastretailing.dcp.sales.common.type.ErrorNotificationPattern;
import com.fastretailing.dcp.sales.common.type.ErrorType;
import com.fastretailing.dcp.sales.common.type.IntegrityCheckFlag;
import com.fastretailing.dcp.sales.errornotification.dto.ErrorNotificationMessageMaster;
import com.fastretailing.dcp.sales.errornotification.dto.ErrorNotificationPatternMaster;
import com.fastretailing.dcp.sales.errornotification.dto.TransactionErrorWithPattern;
import com.fastretailing.dcp.sales.errornotification.repository.ErrorNotificationMessageMasterMapper;
import com.fastretailing.dcp.sales.errornotification.repository.ErrorNotificationPatternMasterMapper;
import lombok.extern.slf4j.Slf4j;
/**
* Error notification service class.
*/
@Service
@Slf4j
public class ErrorNotificationServiceImpl implements ErrorNotificationService {
/** DB access parts(master error notification message). */
@Autowired
private ErrorNotificationMessageMasterMapper errorNotificationMessageMasterMapper;
/** DB access parts(payOff data). */
@Autowired
private PayOffDataMapper payOffDataMapper;
/** DB access parts(sales transaction error detail). */
@Autowired
private SalesTransactionErrorDetailMapper salesTransactionErrorDetailMapper;
/**
* DB access parts(master error notification pattern left join sales transaction error detail).
*/
@Autowired
private ErrorNotificationPatternMasterMapper errorNotificationPatternMasterMapper;
/** Model mapped. */
@Autowired
private ModelMapper mapper;
/**
* {@inheritDoc}
*/
@Override
public void processErrorNotification() {
// Get sales transaction error detail records.
TransactionErrorWithPattern transactionErrorWithPattern = new TransactionErrorWithPattern();
transactionErrorWithPattern.setErrorNotificationFlag(
String.valueOf(ErrorNotificationFlag.UNSENT.getErrorNotificationFlag()));
List<TransactionErrorWithPattern> transactionErrorWithPatternList =
errorNotificationPatternMasterMapper
.selectByErrorNotificationFlag(transactionErrorWithPattern);
// Sales transaction error detail no data.
if (CollectionUtils.isEmpty(transactionErrorWithPatternList)) {
// Output the empty sales information error log.
outputEmptyLog();
} else {
transactionErrorWithPatternList = transactionErrorWithPatternList.stream()
.filter(entity -> ErrorNotificationPattern.COUNTRY_UNIT
.getErrorNotificationPattern()
.equals(entity.getErrorNotificationPattern()))
.collect(Collectors.toList());
transactionErrorWithPatternList.stream()
.collect(Collectors.groupingBy(entity -> entity.getSystemCountryCode(),
Collectors.toList()))
.forEach((countryCode, list) ->
// Output log.
outputSalesTransactionErrorDetailLog(list));
}
// Get pay off data records.
PayOffData payOffData = new PayOffData();
payOffData.setIntegrityCheckFlag(
String.valueOf(IntegrityCheckFlag.MISMATCH.getIntegrityCheckFlag()));
payOffData.setPayoffIntegrityErrorNotificationFlag(
String.valueOf(ErrorNotificationFlag.UNSENT.getErrorNotificationFlag()));
List<PayOffData> payOffDataList = payOffDataMapper.selectErrorNotification(payOffData);
// Pay off data no data.
if (CollectionUtils.isEmpty(payOffDataList)) {
// Output the empty sales information error log is output.
outputEmptyLog();
} else {
payOffDataList.stream()
.collect(Collectors.groupingBy(entity -> entity.getSystemCountryCode(),
Collectors.toList()))
.forEach((countryCode, list) ->
// Output log.
outputPayOffDataLog(list));
}
}
/**
* Output empty log.
*/
private void outputEmptyLog() {
// Get error output message.
ErrorNotificationMessageMaster errorNotificationMessageMaster =
getErrorOutputMessage(ErrorType.NO_ERROR.getErrorType());
// Output log.
log.error(errorNotificationMessageMaster.getErrorOutputMessage());
}
/**
* Get error output message.
*
* @param errorType Error type.
* @return Master error notification message entity.
*/
private ErrorNotificationMessageMaster getErrorOutputMessage(String errorType) {
ErrorNotificationPatternMaster errorNotificationPatternMaster =
new ErrorNotificationPatternMaster();
errorNotificationPatternMaster.setErrorType(errorType);
ErrorNotificationMessageMaster errorNotificationMessageMaster =
errorNotificationMessageMasterMapper
.selectByErrorType(errorNotificationPatternMaster);
return errorNotificationMessageMaster;
}
/**
* Output sales transaction error detail log.
*
* @param transactionErrorWithPatternList Transaction error with pattern list.
*/
private void outputSalesTransactionErrorDetailLog(
List<TransactionErrorWithPattern> transactionErrorWithPatternList) {
// Error type validation records log output.
outputSameErrorTypeSalesTransactionErrorDetailLog(transactionErrorWithPatternList,
ErrorType.VALIDATION_ERROR.getErrorType());
// Error type relation records log output.
outputSameErrorTypeSalesTransactionErrorDetailLog(transactionErrorWithPatternList,
ErrorType.RELATION_ERROR.getErrorType());
// Error type business records log output.
outputSameErrorTypeSalesTransactionErrorDetailLog(transactionErrorWithPatternList,
ErrorType.BUSINESS_ERROR.getErrorType());
// Error type unique constraints records log output.
outputSameErrorTypeSalesTransactionErrorDetailLog(transactionErrorWithPatternList,
ErrorType.UNIQUE_CONSTRAINTS_ERROR.getErrorType());
// Update error notification flag.
transactionErrorWithPatternList.forEach(transactionError -> {
SalesTransactionErrorDetail salesTransactionErrorDetail =
new SalesTransactionErrorDetail();
mapper.map(transactionError, salesTransactionErrorDetail);
salesTransactionErrorDetailMapper.updateErrorNotificationFlag(
salesTransactionErrorDetail,
ErrorNotificationFlag.SENT.getErrorNotificationFlag());
});
}
/**
* Output same error type sales transaction error detail log.
*
* @param transactionErrorList Transaction error list.
* @param errorType Error type.
*/
private void outputSameErrorTypeSalesTransactionErrorDetailLog(
List<TransactionErrorWithPattern> transactionErrorList, String errorType) {
// Get same error type data from transaction error list.
List<TransactionErrorWithPattern> sameErrorTypeList = transactionErrorList.stream()
.filter(detail -> detail.getErrorType().equals(errorType))
.collect(Collectors.toList());
int count = sameErrorTypeList.size();
// Data is exist.
if (count != 0) {
TransactionErrorWithPattern transactionErrorWithPattern = sameErrorTypeList.get(0);
// Get output massage.
String errorOutputMessage = getOutputMassage(transactionErrorWithPattern.getErrorType(),
transactionErrorWithPattern.getSystemCountryCode(), count);
// Output log.
log.error(errorOutputMessage);
}
}
/**
* Output payoff data log.
*
* @param payOffDataList Payoff data list.
*/
private void outputPayOffDataLog(List<PayOffData> payOffDataList) {
PayOffData payOffData = payOffDataList.stream().findFirst().get();
// Get output massage.
String errorOutputMessage =
getOutputMassage(ErrorType.PAYOFF_CONFORMITY_CHECK.getErrorType(),
payOffData.getSystemCountryCode(), payOffDataList.size());
// Output log.
log.error(errorOutputMessage);
// Update error notification flag.
payOffDataList.forEach(entity -> {
payOffDataMapper.updateErrorNotificationFlag(entity,
ErrorNotificationFlag.SENT.getErrorNotificationFlag());
});
}
/**
* Get output massage.
*
* @param errorType Error type.
* @param countryCode Country code.
* @param count Message count.
* @return Output massage.
*/
private String getOutputMassage(String errorType, String countryCode, int count) {
ErrorNotificationMessageMaster errorNotificationMessage = getErrorOutputMessage(errorType);
MessageFormat messageFormat =
new MessageFormat(errorNotificationMessage.getErrorOutputMessage());
return messageFormat.format(new String[] {countryCode, String.valueOf(count)});
}
}
group by
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
- 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 今天在鏈接遠(yuǎn)程數(shù)據(jù)庫(kù)(我的遠(yuǎn)程數(shù)據(jù)庫(kù)是mysql5.7的)時(shí)報(bào)了一個(gè)“[Err] 1055 - Expressio...
- 下面的SQL語(yǔ)句執(zhí)行時(shí),MySQL提示問(wèn)題:“Expression #1 of SELECT list is no...
- 解決方法: 參考: #1055 - Expression of SELECT list is not in GRO...
- group by是關(guān)系型數(shù)據(jù)庫(kù)中較為常用的方法,rails也提供了類似的group_by方法,但兩者還是有不小區(qū)別...
- 不斷的生長(zhǎng)發(fā)育同時(shí)就在不斷吸收吸納,不斷的新陳代謝,才能有旺盛的生命力。溶蓄的五真形,修煉到小到無(wú)內(nèi),不可分割,使...