package com.qianwen.smartman.modules.system.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
import java.lang.invoke.SerializedLambda;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
import javax.servlet.http.HttpServletResponse;
|
import com.qianwen.smartman.common.constant.ExcelConstant;
|
import com.qianwen.smartman.common.constant.I18nRedisKeyConstant;
|
import com.qianwen.smartman.common.utils.Lambda;
|
import com.qianwen.smartman.common.utils.MessageUtils;
|
import com.qianwen.core.excel.util.ExcelUtil;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.oss.model.BladeFile;
|
import com.qianwen.core.tool.jackson.JsonUtil;
|
import com.qianwen.core.tool.utils.DateUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder;
|
import com.qianwen.smartman.modules.system.convert.I18nDataConverter;
|
import com.qianwen.smartman.modules.system.dto.I18nDataDTO;
|
import com.qianwen.smartman.modules.system.dto.I18nDataQueryDTO;
|
import com.qianwen.smartman.modules.system.dto.I18nDataUnique;
|
import com.qianwen.smartman.modules.system.entity.I18nData;
|
import com.qianwen.smartman.modules.system.mapper.I18nDataMapper;
|
import com.qianwen.smartman.modules.system.service.I18nDataService;
|
import com.qianwen.smartman.modules.system.vo.I18nDataExcelVO;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
@Service
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/system/service/impl/I18nDataServiceImpl.class */
|
public class I18nDataServiceImpl extends ServiceImpl<I18nDataMapper, I18nData> implements I18nDataService {
|
private final StringRedisTemplate stringRedisTemplate;
|
private final OssBuilder ossBuilder;
|
|
public I18nDataServiceImpl(final StringRedisTemplate stringRedisTemplate, final OssBuilder ossBuilder) {
|
this.stringRedisTemplate = stringRedisTemplate;
|
this.ossBuilder = ossBuilder;
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public IPage<I18nData> selectPage(IPage<I18nData> page, I18nDataQueryDTO queryDTO) {
|
return page(page, wrapper(queryDTO));
|
}
|
|
public LambdaQueryWrapper<I18nData> wrapper(I18nDataQueryDTO i18nDataQO) {
|
return Wrappers.lambdaQuery(I18nData.class).like(Func.isNotEmpty(i18nDataQO.getCode()), (v0) -> {
|
return v0.getCode();
|
}, i18nDataQO.getCode()).eq(Func.isNotEmpty(i18nDataQO.getLanguageTag()), (v0) -> {
|
return v0.getLanguageTag();
|
}, i18nDataQO.getLanguageTag()).and(Func.isNotEmpty(i18nDataQO.getCondition()), w -> {
|
LambdaQueryWrapper lambdaQueryWrapper = w.like((v0) -> {
|
return v0.getMessage();
|
}, i18nDataQO.getCondition()).or().like((v0) -> {
|
return v0.getRemark();
|
}, i18nDataQO.getCondition());
|
});
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public List<I18nData> queryList(I18nDataQueryDTO i18nDataQO) {
|
return ((I18nDataMapper) this.baseMapper).selectList(wrapper(i18nDataQO));
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public List<I18nData> listByCode(String code) {
|
return this.baseMapper.selectList(Wrappers.lambdaQuery(I18nData.class).eq((v0) -> {
|
return v0.getCode();
|
}, code));
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public I18nData getByCodeAndLanguageTag(String code, String languageTag) {
|
return this.baseMapper.selectOne(Wrappers.lambdaQuery(I18nData.class).eq((v0) -> {
|
return v0.getCode();
|
}, code).eq((v0) -> {
|
return v0.getLanguageTag();
|
}, languageTag));
|
}
|
|
public boolean save(I18nData entity) {
|
return SqlHelper.retBool(Integer.valueOf(((I18nDataMapper) getBaseMapper()).insert(entity)));
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public I18nData updateById(I18nDataDTO i18nDataDTO) {
|
I18nData entity = I18nDataConverter.INSTANCE.convert(i18nDataDTO);
|
boolean updateSuccess = updateById(entity);
|
if (updateSuccess) {
|
pushUpdateMessage(i18nDataDTO.getCode(), i18nDataDTO.getLanguageTag());
|
return entity;
|
}
|
throw new ServiceException("修改国际化信息失败");
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
@Transactional(rollbackFor = {Exception.class})
|
public BladeFile importI18nData(List<I18nDataExcelVO> data) {
|
if (Func.isEmpty(data)) {
|
throw new ServiceException(MessageUtils.message("excel.import.data.can.not.be.null", new Object[0]));
|
}
|
if (data.size() > 1000) {
|
throw new ServiceException(MessageUtils.message("excel.import.size.failed", new Object[0]));
|
}
|
if (!checkImport(data)) {
|
MultipartFile multipartFile = ExcelUtil.exportFillTemplateToMultipartFile(ExcelConstant.DIRECTORY + "i18nDataFailTemplate" + ExcelConstant.SUFFIX, MessageUtils.message("excel.import.failed.report.name", new Object[0]) + ExcelConstant.SUFFIX, "国际化信息表", data, (Object) null, (AbstractMergeStrategy) null);
|
BladeFile bladeFile = this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
|
return bladeFile;
|
}
|
|
List<I18nData> list = data.stream().map(I18nDataConverter.INSTANCE::excelVoToPo).collect(Collectors.toList());
|
/*
|
Stream<I18nDataExcelVO> stream = data.stream();
|
I18nDataConverter i18nDataConverter = I18nDataConverter.INSTANCE;
|
i18nDataConverter.getClass();
|
List<I18nData> list = (List) stream.map(this::excelVoToPo).collect(Collectors.toList());
|
*/
|
if (CollectionUtil.isNotEmpty(list)) {
|
List<String> collectCode = list.stream().map((v0) -> {
|
return v0.getCode();
|
}).collect(Collectors.toList());
|
List<I18nData> existCodeList = list(Lambda.in((v0) -> {
|
return v0.getCode();
|
}, collectCode));
|
existCodeList.parallelStream().forEach(exist -> {
|
list.parallelStream().filter(item -> {
|
return item.getCode().equals(exist.getCode()) && item.getLanguageTag().equals(exist.getLanguageTag());
|
}).forEach(item2 -> {
|
item2.setId(exist.getId());
|
});
|
});
|
updateBatchById( list.stream().filter(item -> {
|
return item.getId() != null;
|
}).collect(Collectors.toList()));
|
saveBatch(list.stream().filter(item2 -> {
|
return item2.getId() == null;
|
}).collect(Collectors.toList()));
|
return null;
|
}
|
return null;
|
}
|
|
private boolean checkImport(List<I18nDataExcelVO> data) {
|
AtomicBoolean error = new AtomicBoolean(false);
|
data.forEach(item -> {
|
String message;
|
if (Func.isBlank(item.getLanguageTag())) {
|
message = MessageUtils.message("i18nMessage.languageTag.not.null", new Object[0]);
|
} else if (Func.isBlank(item.getCode())) {
|
message = MessageUtils.message("i18nMessage.code.not.null", new Object[0]);
|
} else {
|
message = Func.isBlank(item.getMessage()) ? MessageUtils.message("i18nMessage.message.not.null", new Object[0]) : null;
|
}
|
item.setFailReason(message);
|
error.set(error.get() || item.getFailReason() != null);
|
});
|
return !error.get();
|
}
|
|
private void pushUpdateMessage(String code, String languageTag) {
|
I18nDataUnique channelBody = new I18nDataUnique(code, languageTag);
|
String str = JsonUtil.toJson(channelBody);
|
this.stringRedisTemplate.convertAndSend(I18nRedisKeyConstant.CHANNEL_I18N_DATA_UPDATED, str);
|
}
|
|
private List<I18nData> exists(List<I18nDataExcelVO> list) {
|
//Wrapper<I18nData> lambdaQuery = Wrappers.lambdaQuery(I18nData.class);
|
LambdaQueryWrapper<I18nData> lambdaQuery = Wrappers.lambdaQuery(I18nData.class);
|
for (I18nDataExcelVO excelVO : list) {
|
lambdaQuery.or(w -> {
|
String code = excelVO.getCode();
|
String languageTag = excelVO.getLanguageTag();
|
w.eq(I18nData::getCode, code).eq(I18nData::getLanguageTag, languageTag);
|
/*
|
w.eq((v0) -> {
|
return v0.getCode();
|
}, code).eq((v0) -> {
|
return v0.getLanguageTag();
|
}, languageTag);*/
|
});
|
}
|
return this.baseMapper.selectList(lambdaQuery);
|
}
|
|
@Override // org.springblade.modules.system.service.I18nDataService
|
public BladeFile exportExcel(I18nDataQueryDTO i18nDataQO, HttpServletResponse response) {
|
List<I18nData> list = queryList(i18nDataQO);
|
List<I18nDataExcelVO> excelVOS = list.stream().map(I18nDataConverter.INSTANCE::poToExcelVo).collect(Collectors.toList());
|
/*
|
Stream<I18nData> stream = list.stream();
|
I18nDataConverter i18nDataConverter = I18nDataConverter.INSTANCE;
|
i18nDataConverter.getClass();
|
List<I18nDataExcelVO> excelVOS = (List) stream.map(this::poToExcelVo).collect(Collectors.toList());
|
*/
|
String fileName = String.format("%s-%s.xlsx", "多语言信息", DateUtil.time());
|
MultipartFile multipartFile = ExcelUtil.exportToMultipartFile(fileName, "多语言表", excelVOS, I18nDataExcelVO.class);
|
return this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
|
}
|
}
|