feat: bug-1334 产品中心技术参数,导出并更正了英文及其他语种的翻译,再导入参数,英文及其他语种的参数还是按自动翻译的来的,没有按导入更正后的参数来展示

弃用原有导入方法importModelParamsItem,新增importModelParamsItemMultilingual(导入设备技术参数项(多语言))和importModelParamsItemMonolingual(导入设备技术参数项(中文语言))
This commit is contained in:
曹鹏飞 2026-03-09 15:59:32 +08:00
parent 896cfa3752
commit f317319940
4 changed files with 300 additions and 2 deletions

View File

@ -5,6 +5,9 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.admin.pojo.dto.ModelParamsImportDTO;
import com.nflg.mobilebroken.admin.pojo.dto.ModelParamsImportItemDTO;
import com.nflg.mobilebroken.admin.pojo.dto.ModelParamsImportLanguageItemDTO;
import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.PublishState; import com.nflg.mobilebroken.common.constant.PublishState;
import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.STATE;
@ -656,6 +659,224 @@ public class ProductModelController extends ControllerBase {
public ApiResult<Integer> importModelParamsItem(@Valid @RequestParam @NotNull int modelId public ApiResult<Integer> importModelParamsItem(@Valid @RequestParam @NotNull int modelId
, @RequestParam(required = false, defaultValue = "0") int modelParamsId , @RequestParam(required = false, defaultValue = "0") int modelParamsId
, @Valid @RequestParam(value = "file") @NotNull MultipartFile file) { , @Valid @RequestParam(value = "file") @NotNull MultipartFile file) {
VUtils.trueThrowBusinessError(true).throwMessage("方法已弃用改用importModelParamsItemMonolingual");
return ApiResult.success(0);
}
/**
* 导入设备技术参数项多语言
* @param modelParamsId 机型参数ID
* @param file 文件
* @return 机型参数id
*/
@Transactional
@PostMapping("/importModelParamsItemMultilingual")
public ApiResult<Integer> importModelParamsItemMultilingual(@Valid @RequestParam @NotNull int modelId
, @RequestParam(required = false, defaultValue = "0") int modelParamsId
, @Valid @RequestParam(value = "file") @NotNull MultipartFile file) {
ProductModel model = productModelService.getById(modelId);
VUtils.trueThrowBusinessError(Objects.isNull(model)).throwMessage("无效的" + modelId);
List<String> repeats = new ArrayList<>();
DataFormatter dataFormatter = new DataFormatter();
try (InputStream inputStream = file.getInputStream(); org.apache.poi.ss.usermodel.Workbook workbook = new XSSFWorkbook(inputStream)) {
Sheet sheet = workbook.getSheetAt(0);
String no = StrUtil.trim(sheet.getRow(1).getCell(1).getStringCellValue());
VUtils.trueThrowBusinessError(!StrUtil.equals(model.getNo(), no)).throwMessage("产品型号不一致");
List<ModelParamsImportDTO> datas = new ArrayList<>();
String indexName = null;
ModelParamsImportDTO lastDTO = null;
for (int index = 4, count = sheet.getLastRowNum(); index <= count; index++) {
log.info("处理第{}行", index);
Row row = sheet.getRow(index);
if (Objects.isNull(row) || StrUtil.isBlank(row.getCell(1).getStringCellValue())) {
break;
}
ModelParamsImportDTO dto;
String rowIndexName = row.getCell(0).getStringCellValue();
if (StrUtil.isBlank(rowIndexName) || StrUtil.equals(rowIndexName, indexName)) {
rowIndexName = indexName;
dto = lastDTO;
} else {
indexName = rowIndexName;
dto = new ModelParamsImportDTO().setIndexName(rowIndexName);
lastDTO = dto;
datas.add(dto);
}
ModelParamsImportItemDTO item = new ModelParamsImportItemDTO();
item.setName(row.getCell(1).getStringCellValue());
if (dto.getItems().stream().anyMatch(litem -> litem.getName().equals(item.getName()))) {
repeats.add(item.getName());
}
item.setMain(row.getCell(3).getStringCellValue().equals(""));
item.setCompare(row.getCell(4).getStringCellValue().equals(""));
dto.getItems().add(item);
//中文
ModelParamsImportLanguageItemDTO cn = new ModelParamsImportLanguageItemDTO().setLanguage("中文");
cn.setIndexName(rowIndexName);
cn.setName(row.getCell(1).getStringCellValue());
cn.setValue(dataFormatter.formatCellValue(row.getCell(2)));
item.getLanguages().add(cn);
int cc = 5;
while (row.getLastCellNum() > cc) {
int trindex = index;
ModelParamsImportLanguageItemDTO languageItem = new ModelParamsImportLanguageItemDTO();
languageItem.setIndexName(row.getCell(cc).getStringCellValue());
while (StrUtil.isBlank(languageItem.getIndexName())) {
languageItem.setIndexName(sheet.getRow(trindex).getCell(cc).getStringCellValue());
trindex--;
}
languageItem.setLanguage(sheet.getRow(2).getCell(cc).getStringCellValue());
languageItem.setName(row.getCell(cc + 1).getStringCellValue());
languageItem.setValue(dataFormatter.formatCellValue(row.getCell(cc + 2)));
item.getLanguages().add(languageItem);
cc += 3;
}
}
VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats))
.throwMessage("以下参数名称重复:" + StrUtil.join(",", repeats));
VUtils.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("数据不能为空");
List<Language> languages = languageService.getLanguages();
int resultId;
if (modelParamsId == 0) {
resultId = productModelParamsService.add(modelId, IdUtil.getSnowflakeNextIdStr());
List<ProductModelParamsItem> items = new ArrayList<>();
int finalResultId = resultId;
datas.forEach(dto -> {
dto.getItems().forEach(dit -> {
String batchNumber = IdUtil.getSnowflakeNextIdStr();
dit.getLanguages().forEach(languageItem -> {
Language language = languages.stream()
.filter(l -> StrUtil.equals(l.getName(), languageItem.getLanguage()))
.findFirst()
.orElse(null);
VUtils.trueThrowBusinessError(Objects.isNull(language)).throwMessage("语言不存在:" + languageItem.getLanguage());
ProductModelParamsItem item = new ProductModelParamsItem()
.setModelParamsId(finalResultId)
.setLanguageCode(language.getCode())
.setBatchNumber(batchNumber)
.setMain(dit.getMain())
.setCompare(dit.getCompare())
.setIndexName(languageItem.getIndexName())
.setName(languageItem.getName())
.setValue(languageItem.getValue())
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
items.add(item);
});
});
});
productModelParamsItemService.saveBatch(items);
} else {
ProductModelParams info = productModelParamsService.getById(modelParamsId);
VUtils.trueThrowBusinessError(Objects.isNull(info)).throwMessage("无效的" + modelParamsId);
resultId = modelParamsId;
if (Objects.equals(info.getState(), PublishState.Published.getState())) {
resultId = productModelParamsService.add(modelId, info.getBatchNumber());
productModelParamsService.copyItems(modelParamsId, resultId);
}
List<ProductModelParamsItem> oldItems = productModelParamsItemService.lambdaQuery().eq(ProductModelParamsItem::getModelParamsId, resultId).list();
int finalResultId1 = resultId;
List<ProductModelParamsItem> itemsForAdd = new ArrayList<>();
datas.forEach(dto -> {
dto.getItems().forEach(dit -> {
ProductModelParamsItem oitem = oldItems.stream()
.filter(it -> StrUtil.equals(it.getLanguageCode(), Constant.DEFAULT_LANGUAGE_CODE)
&& StrUtil.equals(it.getIndexName(), dto.getIndexName())
&& StrUtil.equals(it.getName(), dit.getName())
)
.findFirst()
.orElse(null);
if (Objects.isNull(oitem)) {
String batchNumber = IdUtil.getSnowflakeNextIdStr();
dit.getLanguages().forEach(languageItem -> {
Language language = languages.stream()
.filter(l -> StrUtil.equals(l.getName(), languageItem.getLanguage()))
.findFirst()
.orElse(null);
VUtils.trueThrowBusinessError(Objects.isNull(language)).throwMessage("语言不存在:" + languageItem.getLanguage());
ProductModelParamsItem item = new ProductModelParamsItem()
.setModelParamsId(finalResultId1)
.setLanguageCode(language.getCode())
.setBatchNumber(batchNumber)
.setMain(dit.getMain())
.setCompare(dit.getCompare())
.setIndexName(languageItem.getIndexName())
.setName(languageItem.getName())
.setValue(languageItem.getValue())
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
itemsForAdd.add(item);
});
} else {
ModelParamsImportLanguageItemDTO cn = dit.getLanguages().stream()
.filter(it -> StrUtil.equals(it.getLanguage(), "中文"))
.findFirst()
.get();
oitem.setValue(cn.getValue());
oitem.setUpdateBy(AdminUserUtil.getUserName());
oitem.setUpdateTime(LocalDateTime.now());
languages.removeIf(l -> StrUtil.equals(l.getCode(), Constant.DEFAULT_LANGUAGE_CODE));
dit.getLanguages().forEach(languageItem -> {
if (!StrUtil.equals(languageItem.getLanguage(), "中文")) {
Language language = languages.stream()
.filter(l -> StrUtil.equals(l.getName(), languageItem.getLanguage()))
.findFirst()
.orElse(null);
VUtils.trueThrowBusinessError(Objects.isNull(language)).throwMessage("语言不存在:" + languageItem.getLanguage());
ProductModelParamsItem olitem = oldItems.stream()
.filter(it -> StrUtil.equals(it.getBatchNumber(), oitem.getBatchNumber())
&& StrUtil.equals(it.getLanguageCode(), language.getCode()))
.findFirst()
.orElse(null);
if (Objects.isNull(olitem)) {
ProductModelParamsItem item = new ProductModelParamsItem()
.setModelParamsId(finalResultId1)
.setLanguageCode(language.getCode())
.setBatchNumber(oitem.getBatchNumber())
.setMain(dit.getMain())
.setCompare(dit.getCompare())
.setIndexName(languageItem.getIndexName())
.setName(languageItem.getName())
.setValue(languageItem.getValue())
.setCreateBy(AdminUserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
itemsForAdd.add(item);
} else {
olitem.setIndexName(languageItem.getIndexName());
olitem.setName(languageItem.getName());
olitem.setValue(languageItem.getValue());
olitem.setUpdateBy(AdminUserUtil.getUserName());
olitem.setUpdateTime(LocalDateTime.now());
}
}
});
}
});
});
if (CollectionUtil.isNotEmpty(oldItems)) {
productModelParamsItemService.updateBatchById(oldItems);
}
if (CollectionUtil.isNotEmpty(itemsForAdd)) {
productModelParamsItemService.saveBatch(itemsForAdd);
}
}
return ApiResult.success(resultId);
} catch (IOException e) {
throw new NflgException(STATE.BusinessError, "导入失败:" + e.getMessage());
}
}
/**
* 导入设备技术参数项中文语言
* @param modelParamsId 机型参数ID
* @param file 文件
* @return 机型参数id
*/
@Transactional
@PostMapping("/importModelParamsItemMonolingual")
public ApiResult<Integer> importModelParamsItemMonolingual(@Valid @RequestParam @NotNull int modelId
, @RequestParam(required = false, defaultValue = "0") int modelParamsId
, @Valid @RequestParam(value = "file") @NotNull MultipartFile file) {
ProductModel model = productModelService.getById(modelId); ProductModel model = productModelService.getById(modelId);
VUtils.trueThrowBusinessError(Objects.isNull(model)).throwMessage("无效的" + modelId); VUtils.trueThrowBusinessError(Objects.isNull(model)).throwMessage("无效的" + modelId);
List<String> repeats = new ArrayList<>(); List<String> repeats = new ArrayList<>();

View File

@ -0,0 +1,19 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.ArrayList;
import java.util.List;
@Data
@Accessors(chain = true)
public class ModelParamsImportDTO {
/**
* 指标名称
*/
private String IndexName;
private List<ModelParamsImportItemDTO> items=new ArrayList<>();
}

View File

@ -0,0 +1,29 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.ArrayList;
import java.util.List;
@Data
@Accessors(chain = true)
public class ModelParamsImportItemDTO {
/**
* 参数名称
*/
private String name;
/**
* 是否主要参数
*/
private Boolean main;
/**
* 是否参与比较
*/
private Boolean compare;
private List<ModelParamsImportLanguageItemDTO> languages=new ArrayList<>();
}

View File

@ -0,0 +1,29 @@
package com.nflg.mobilebroken.admin.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class ModelParamsImportLanguageItemDTO {
/**
* 语言
*/
private String language;
/**
* 指标名称
*/
private String IndexName;
/**
* 参数名称
*/
private String name;
/**
* 参数指标
*/
private String value;
}