Merge remote-tracking branch '惠信/develop' into develop

This commit is contained in:
曹鹏飞 2025-03-04 16:10:06 +08:00
commit 9da6db4960
3 changed files with 101 additions and 8 deletions

View File

@ -11,6 +11,7 @@ import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.admin.pojo.dto.DeviceComponentDTO; import com.nflg.mobilebroken.admin.pojo.dto.DeviceComponentDTO;
import com.nflg.mobilebroken.admin.pojo.dto.DeviceComponentDetailDTO; import com.nflg.mobilebroken.admin.pojo.dto.DeviceComponentDetailDTO;
import com.nflg.mobilebroken.admin.pojo.query.DeviceComponentQuery; import com.nflg.mobilebroken.admin.pojo.query.DeviceComponentQuery;
import com.nflg.mobilebroken.common.pojo.dto.DevComponentImportExcel;
import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentDetailVO; import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentDetailVO;
import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentVO; import com.nflg.mobilebroken.common.pojo.vo.DeviceComponentVO;
import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.STATE;
@ -161,15 +162,30 @@ public class DeviceComponentController extends ControllerBase {
public void downTemplate(HttpServletResponse response) throws IOException { public void downTemplate(HttpServletResponse response) throws IOException {
EecExcelUtil.setResponseExcelHeader(response,"机型部件导入模板"); EecExcelUtil.setResponseExcelHeader(response,"机型部件导入模板");
final ListSheet<DevComponentExcel> listSheet = new ListSheet<DevComponentExcel>() { final ListSheet<DevComponentImportExcel> listSheet = new ListSheet<DevComponentImportExcel>() {
@Override @Override
protected List<DevComponentExcel> more() { protected List<DevComponentImportExcel> more() {
return null; return null;
} }
}; };
EecExcelUtil.eecExcel("机型部件导入模板", listSheet, response); EecExcelUtil.eecExcel("机型部件导入模板", listSheet, response);
} }
/**
* 检查重复行
* @param list
*/
private List<String> checkDuplicates(List<DevComponentExcel> list) {
List<String> checkResult=new ArrayList<>();
list.stream()
.collect(Collectors.groupingBy(d -> d.getModelNo() + "-" + d.getModelPartName()))
.entrySet().stream()
.filter(e -> e.getValue().size() > 1)
.forEach(e -> checkResult.add( e.getKey() + " -> " + e.getValue()));
return checkResult;
}
/** /**
* 导入部件 * 导入部件
* @param file * @param file
@ -181,6 +197,10 @@ public class DeviceComponentController extends ControllerBase {
try { try {
List<DevComponentExcel> data = EecExcelUtil.getExcelContext(file.getInputStream(), DevComponentExcel.class); List<DevComponentExcel> data = EecExcelUtil.getExcelContext(file.getInputStream(), DevComponentExcel.class);
VUtils.trueThrowBusinessError(CollUtil.isEmpty(data)).throwMessage("导入文件内容为空"); VUtils.trueThrowBusinessError(CollUtil.isEmpty(data)).throwMessage("导入文件内容为空");
//检查内容是否重复
List<String> checkResult = checkDuplicates(data);
VUtils.trueThrow(CollUtil.isNotEmpty(checkResult)).throwMessage(STATE.PageError,StrUtil.join(",",checkResult)+"内容重复,请检查导入的数据");
Set<String> modeNos = data.stream().map(u -> u.getModelNo()).collect(Collectors.toSet()); Set<String> modeNos = data.stream().map(u -> u.getModelNo()).collect(Collectors.toSet());
List<DeviceComponent> extstsModes = deviceComponentService.lambdaQuery().in(DeviceComponent::getModelNo,modeNos).list(); List<DeviceComponent> extstsModes = deviceComponentService.lambdaQuery().in(DeviceComponent::getModelNo,modeNos).list();
Set<String> extstsModesSet = extstsModes.stream().map(u -> u.getModelNo()).collect(Collectors.toSet()); Set<String> extstsModesSet = extstsModes.stream().map(u -> u.getModelNo()).collect(Collectors.toSet());

View File

@ -3,18 +3,17 @@ package com.nflg.mobilebroken.admin.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.nflg.mobilebroken.admin.constant.Constant; import com.nflg.mobilebroken.admin.constant.Constant;
import com.nflg.mobilebroken.admin.pojo.dto.BasePartDTO; import com.nflg.mobilebroken.admin.pojo.dto.BasePartDTO;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator; import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator;
import com.nflg.mobilebroken.repository.entity.Language; import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.TBaseLanguageData; import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.entity.TBasePart; import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.repository.service.ILanguageService;
import com.nflg.mobilebroken.repository.service.ITBaseLanguageDataService;
import com.nflg.mobilebroken.repository.service.ITBasePartService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.ttzero.excel.entity.Column; import org.ttzero.excel.entity.Column;
@ -25,6 +24,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -39,6 +39,12 @@ public class AdminBasePartService {
@Resource @Resource
ITBasePartService partService; ITBasePartService partService;
@Resource
IDeviceComponentDetailService deviceComponentDetailService;
@Resource
IDeviceComponentService deviceComponentService;
/** /**
@ -46,10 +52,14 @@ public class AdminBasePartService {
* *
* @param basePartDTO * @param basePartDTO
*/ */
@Transactional(rollbackFor = Exception.class)
public void save(BasePartDTO basePartDTO) { public void save(BasePartDTO basePartDTO) {
//保存 //保存
TBasePart partEnt = Convert.convert(TBasePart.class, basePartDTO); TBasePart partEnt = Convert.convert(TBasePart.class, basePartDTO);
if (null == basePartDTO.getId() || basePartDTO.getId() <=0) { if (null == basePartDTO.getId() || basePartDTO.getId() <=0) {
//检查部件名称是否已存在
List<TBasePart> checkPart = partService.lambdaQuery().eq(TBasePart::getPartName, basePartDTO.getPartName()).list();
VUtils.trueThrow(CollUtil.isNotEmpty(checkPart)).throwMessage(STATE.ParamErr, basePartDTO.getPartName()+"部件名称已存在");
partEnt.setPartNo(UniqueSequenceGenerator.generateCode(Constant.PartCodePrefix)); partEnt.setPartNo(UniqueSequenceGenerator.generateCode(Constant.PartCodePrefix));
partEnt.setCreateBy(AdminUserUtil.getUserName()); partEnt.setCreateBy(AdminUserUtil.getUserName());
@ -58,8 +68,17 @@ public class AdminBasePartService {
// partEnt.setUpdateTime(LocalDateTime.now()); // partEnt.setUpdateTime(LocalDateTime.now());
} else { //修改 } else { //修改
//检查部件名称是否已存在
List<TBasePart> checkPart = partService.lambdaQuery()
.eq(TBasePart::getPartName, basePartDTO.getPartName())
.ne(TBasePart::getId,basePartDTO.getId())
.list();
VUtils.trueThrow(CollUtil.isNotEmpty(checkPart)).throwMessage(STATE.ParamErr, basePartDTO.getPartName()+"部件名称已存在");
partEnt.setUpdateBy(AdminUserUtil.getUserName()); partEnt.setUpdateBy(AdminUserUtil.getUserName());
partEnt.setUpdateTime(LocalDateTime.now()); partEnt.setUpdateTime(LocalDateTime.now());
//更新设备机型下的部门名称
updateDeviceComponentPartName(basePartDTO);
} }
//删除语言 //删除语言
partService.saveOrUpdate(partEnt); partService.saveOrUpdate(partEnt);
@ -79,6 +98,31 @@ public class AdminBasePartService {
} }
/**
* 更新设备机型下的部件名称
*/
private void updateDeviceComponentPartName(BasePartDTO basePartDTO){
//更新设备机型下的部件名称
List<DeviceComponentDetail> deviceParts = deviceComponentDetailService.lambdaQuery().eq(DeviceComponentDetail::getModelPartId, basePartDTO.getId()).list();
if(CollUtil.isNotEmpty(deviceParts)) {
List<DeviceComponent> deviceComponents=new ArrayList<>();
for (DeviceComponentDetail devComponentDetail : deviceParts) {
devComponentDetail.setModelPartName(basePartDTO.getPartName());
}
Map<Integer, List<DeviceComponentDetail>> devicMap = deviceParts.stream().collect(Collectors.groupingBy(DeviceComponentDetail::getDeviceComponentId));
for (Integer devId:devicMap.keySet()){
Set<String> partNames = devicMap.get(devId).stream().map(u -> u.getModelPartName()).collect(Collectors.toSet());
DeviceComponent devEnt=new DeviceComponent();
devEnt.setId(devId);
devEnt.setComponent(StrUtil.join(",", partNames));
deviceComponents.add(devEnt);
}
deviceComponentDetailService.updateBatchById(deviceParts);
deviceComponentService.updateBatchById(deviceComponents);
}
}
public List<String> buildExcelHeader() { public List<String> buildExcelHeader() {
List<Language> allLanguage = languageService.lambdaQuery().eq(Language::getEnable, true).list(); List<Language> allLanguage = languageService.lambdaQuery().eq(Language::getEnable, true).list();
List<String> columnNames = new ArrayList<>(); List<String> columnNames = new ArrayList<>();

View File

@ -0,0 +1,29 @@
package com.nflg.mobilebroken.common.pojo.dto;
import lombok.Data;
import org.ttzero.excel.annotation.ExcelColumn;
import java.time.LocalDateTime;
@Data
public class DevComponentImportExcel {
/**
* 设备机型
*/
@ExcelColumn("设备机型")
private String modelNo;
/**
* 机型部件
*/
@ExcelColumn("部件名称")
private String modelPartName;
}