feat: bug-1334 产品中心技术参数,导出并更正了英文及其他语种的翻译,再导入参数,英文及其他语种的参数还是按自动翻译的来的,没有按导入更正后的参数来展示
弃用原有导入方法importModelParamsItem,新增importModelParamsItemMultilingual(导入设备技术参数项(多语言))和importModelParamsItemMonolingual(导入设备技术参数项(中文语言))
This commit is contained in:
parent
896cfa3752
commit
f317319940
|
|
@ -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<>();
|
||||||
|
|
|
||||||
|
|
@ -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<>();
|
||||||
|
}
|
||||||
|
|
@ -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<>();
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue