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 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 selectPage(IPage page, I18nDataQueryDTO queryDTO) { return page(page, wrapper(queryDTO)); } public LambdaQueryWrapper 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 queryList(I18nDataQueryDTO i18nDataQO) { return ((I18nDataMapper) this.baseMapper).selectList(wrapper(i18nDataQO)); } @Override // org.springblade.modules.system.service.I18nDataService public List 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 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 list = data.stream().map(I18nDataConverter.INSTANCE::excelVoToPo).collect(Collectors.toList()); /* Stream stream = data.stream(); I18nDataConverter i18nDataConverter = I18nDataConverter.INSTANCE; i18nDataConverter.getClass(); List list = (List) stream.map(this::excelVoToPo).collect(Collectors.toList()); */ if (CollectionUtil.isNotEmpty(list)) { List collectCode = list.stream().map((v0) -> { return v0.getCode(); }).collect(Collectors.toList()); List 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 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 exists(List list) { //Wrapper lambdaQuery = Wrappers.lambdaQuery(I18nData.class); LambdaQueryWrapper 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 list = queryList(i18nDataQO); List excelVOS = list.stream().map(I18nDataConverter.INSTANCE::poToExcelVo).collect(Collectors.toList()); /* Stream stream = list.stream(); I18nDataConverter i18nDataConverter = I18nDataConverter.INSTANCE; i18nDataConverter.getClass(); List 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); } }