diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java index ba38de98..e0b82c5c 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceComponentController.java @@ -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.DeviceComponentDetailDTO; 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.DeviceComponentVO; import com.nflg.mobilebroken.common.constant.STATE; @@ -161,15 +162,30 @@ public class DeviceComponentController extends ControllerBase { public void downTemplate(HttpServletResponse response) throws IOException { EecExcelUtil.setResponseExcelHeader(response,"机型部件导入模板"); - final ListSheet listSheet = new ListSheet() { + final ListSheet listSheet = new ListSheet() { @Override - protected List more() { + protected List more() { return null; } }; EecExcelUtil.eecExcel("机型部件导入模板", listSheet, response); } + + /** + * 检查重复行 + * @param list + */ + private List checkDuplicates(List list) { + List 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 @@ -181,6 +197,10 @@ public class DeviceComponentController extends ControllerBase { try { List data = EecExcelUtil.getExcelContext(file.getInputStream(), DevComponentExcel.class); VUtils.trueThrowBusinessError(CollUtil.isEmpty(data)).throwMessage("导入文件内容为空"); + //检查内容是否重复 + List checkResult = checkDuplicates(data); + VUtils.trueThrow(CollUtil.isNotEmpty(checkResult)).throwMessage(STATE.PageError,StrUtil.join(",",checkResult)+"内容重复,请检查导入的数据"); + Set modeNos = data.stream().map(u -> u.getModelNo()).collect(Collectors.toSet()); List extstsModes = deviceComponentService.lambdaQuery().in(DeviceComponent::getModelNo,modeNos).list(); Set extstsModesSet = extstsModes.stream().map(u -> u.getModelNo()).collect(Collectors.toSet()); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBasePartService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBasePartService.java index 9e1bb030..d59e5e8a 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBasePartService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminBasePartService.java @@ -3,18 +3,17 @@ package com.nflg.mobilebroken.admin.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.nflg.mobilebroken.admin.constant.Constant; 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.UniqueSequenceGenerator; -import com.nflg.mobilebroken.repository.entity.Language; -import com.nflg.mobilebroken.repository.entity.TBaseLanguageData; -import com.nflg.mobilebroken.repository.entity.TBasePart; -import com.nflg.mobilebroken.repository.service.ILanguageService; -import com.nflg.mobilebroken.repository.service.ITBaseLanguageDataService; -import com.nflg.mobilebroken.repository.service.ITBasePartService; +import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.*; +import com.nflg.mobilebroken.repository.service.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.ttzero.excel.entity.Column; @@ -25,6 +24,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; @Service @@ -39,6 +39,12 @@ public class AdminBasePartService { @Resource ITBasePartService partService; + @Resource + IDeviceComponentDetailService deviceComponentDetailService; + + @Resource + IDeviceComponentService deviceComponentService; + /** @@ -46,10 +52,14 @@ public class AdminBasePartService { * * @param basePartDTO */ + @Transactional(rollbackFor = Exception.class) public void save(BasePartDTO basePartDTO) { //保存 TBasePart partEnt = Convert.convert(TBasePart.class, basePartDTO); if (null == basePartDTO.getId() || basePartDTO.getId() <=0) { + //检查部件名称是否已存在 + List 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.setCreateBy(AdminUserUtil.getUserName()); @@ -58,8 +68,17 @@ public class AdminBasePartService { // partEnt.setUpdateTime(LocalDateTime.now()); } else { //修改 + + //检查部件名称是否已存在 + List 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.setUpdateTime(LocalDateTime.now()); + //更新设备机型下的部门名称 + updateDeviceComponentPartName(basePartDTO); } //删除语言 partService.saveOrUpdate(partEnt); @@ -79,6 +98,31 @@ public class AdminBasePartService { } + /** + * 更新设备机型下的部件名称 + */ + private void updateDeviceComponentPartName(BasePartDTO basePartDTO){ + //更新设备机型下的部件名称 + List deviceParts = deviceComponentDetailService.lambdaQuery().eq(DeviceComponentDetail::getModelPartId, basePartDTO.getId()).list(); + if(CollUtil.isNotEmpty(deviceParts)) { + List deviceComponents=new ArrayList<>(); + for (DeviceComponentDetail devComponentDetail : deviceParts) { + devComponentDetail.setModelPartName(basePartDTO.getPartName()); + } + Map> devicMap = deviceParts.stream().collect(Collectors.groupingBy(DeviceComponentDetail::getDeviceComponentId)); + for (Integer devId:devicMap.keySet()){ + Set 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 buildExcelHeader() { List allLanguage = languageService.lambdaQuery().eq(Language::getEnable, true).list(); List columnNames = new ArrayList<>(); diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/DevComponentImportExcel.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/DevComponentImportExcel.java new file mode 100644 index 00000000..e52dd943 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/DevComponentImportExcel.java @@ -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; + + + + + + +}