Merge branch 'feature/bug-1334' into prod/20260317
This commit is contained in:
commit
960f0f79cb
|
|
@ -5,6 +5,9 @@ import cn.hutool.core.convert.Convert;
|
|||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.PublishState;
|
||||
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
|
||||
, @RequestParam(required = false, defaultValue = "0") int modelParamsId
|
||||
, @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);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(model)).throwMessage("无效的" + modelId);
|
||||
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