diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java index 4be746de..4b1acb04 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java @@ -134,6 +134,47 @@ public class DeviceController extends ControllerBase { return ApiResult.success(resultData, query, result.getTotal()); } + /** + * 导出设备列表 + * @param query + */ + @PostMapping("exportSearch") + public void exportSearch(HttpServletResponse response,@RequestBody DeviceQuery query) throws IOException { + Page result = deviceService.getList(new Page<>(1, Integer.MAX_VALUE), query); + List states = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DEVICE_STATE); + List datas = result.getRecords().stream().map(d -> { + DeviceExportDTO dto = new DeviceExportDTO(); + dto.setId(String.valueOf(d.getId())); + dto.setDeviceNo(d.getDeviceNo()); + dto.setDeviceName(d.getCustomerName()+d.getDeviceNo()); + dto.setDeviceType(d.getDeviceType()); + dto.setDeviceTypeSub(d.getDeviceTypeSub()); + dto.setModelNo(d.getModelNo()); + dto.setDeviceStateDesc(states.stream().filter(s -> Objects.equals(s.getId(), d.getDeviceState())).findFirst().get().getName()); + dto.setCustomerName(d.getCustomerName()); + dto.setAgentName(d.getAgentName()); + dto.setAreaName(d.getAreaName()); + dto.setAddress(d.getAddress()); + dto.setShipmentDate(d.getShipmentDate()); + dto.setStartWarrantyDate(d.getStartWarrantyDate()); + if (Objects.nonNull(d.getWarrantyMonth())) { + dto.setWarrantyMonth(String.valueOf(d.getWarrantyMonth())); + } + dto.setServiceAgentName(d.getServiceAgentName()); + return dto; + }).collect(Collectors.toList()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("设备导出.xlsx", StandardCharsets.UTF_8)); +// ClassPathResource resource = new ClassPathResource("templates/deviceForUpdate.xlsx"); +// new Workbook() +// .addSheet(new TemplateSheet(resource.getInputStream()) +// .setData(datas) +// .setData("@list:deviceStateDesc", dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DEVICE_STATE) +// .stream().map(DictionaryItem::getName).collect(Collectors.toList()))) +// .writeTo(response.getOutputStream()); + new Workbook().addSheet(new ListSheet<>(datas)).writeTo(response.getOutputStream()); + } + /** * 获取设备详情 * @param id diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SolutionMeasuresSaveRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SolutionMeasuresSaveRequest.java index ff937fc3..753eb457 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SolutionMeasuresSaveRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/SolutionMeasuresSaveRequest.java @@ -41,6 +41,7 @@ public class SolutionMeasuresSaveRequest { /** * 问题部件id */ + @NotNull private Long componentId; /** diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DeviceController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DeviceController.java index 379df3a3..c739e3bd 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DeviceController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DeviceController.java @@ -137,6 +137,48 @@ public class DeviceController extends ControllerBase { return ApiResult.success(resultData, query, result.getTotal()); } + /** + * 导出设备列表 + * @param query + */ + @PostMapping("exportSearch") + public void exportSearch(HttpServletResponse response,@RequestBody DeviceQuery query) throws IOException { + Page result = deviceService.getList(new Page<>(1, Integer.MAX_VALUE), query); + List states = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DEVICE_STATE); + List datas = result.getRecords().stream().map(d -> { + DeviceExportDTO dto = new DeviceExportDTO(); + dto.setId(String.valueOf(d.getId())); + dto.setDeviceNo(d.getDeviceNo()); + dto.setDeviceName(d.getCustomerName()+d.getDeviceNo()); + dto.setDeviceType(d.getDeviceType()); + dto.setDeviceTypeSub(d.getDeviceTypeSub()); + dto.setModelNo(d.getModelNo()); + dto.setDeviceStateDesc(states.stream().filter(s -> Objects.equals(s.getId(), d.getDeviceState())).findFirst().get().getName()); + dto.setCustomerName(d.getCustomerName()); + dto.setAgentName(d.getAgentName()); + dto.setAreaName(d.getAreaName()); + dto.setAddress(d.getAddress()); + dto.setShipmentDate(d.getShipmentDate()); + dto.setStartWarrantyDate(d.getStartWarrantyDate()); + if (Objects.nonNull(d.getWarrantyMonth())) { + dto.setWarrantyMonth(String.valueOf(d.getWarrantyMonth())); + } + dto.setProductLine(d.getProductLine()); + dto.setServiceAgentName(d.getServiceAgentName()); + return dto; + }).collect(Collectors.toList()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("设备导出.xlsx", StandardCharsets.UTF_8)); +// ClassPathResource resource = new ClassPathResource("templates/deviceForUpdate.xlsx"); +// new Workbook() +// .addSheet(new TemplateSheet(resource.getInputStream()) +// .setData(datas) +// .setData("@list:deviceStateDesc", dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_DEVICE_STATE) +// .stream().map(DictionaryItem::getName).collect(Collectors.toList()))) +// .writeTo(response.getOutputStream()); + new Workbook().addSheet(new ListSheet<>(datas)).writeTo(response.getOutputStream()); + } + /** * 获取设备详情 * @param id diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TestController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TestController.java new file mode 100644 index 00000000..e7512c6c --- /dev/null +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TestController.java @@ -0,0 +1,139 @@ +package com.nflg.mobilebroken.gongfu.controller; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.util.AdminUserUtil; +import com.nflg.mobilebroken.repository.entity.GongfuDevice; +import com.nflg.mobilebroken.repository.entity.GongfuDeviceComponent; +import com.nflg.mobilebroken.repository.entity.GongfuDeviceComponentDetail; +import com.nflg.mobilebroken.repository.service.IGongfuDeviceComponentDetailService; +import com.nflg.mobilebroken.repository.service.IGongfuDeviceComponentService; +import com.nflg.mobilebroken.repository.service.IGongfuDeviceService; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 测试 + */ +@RestController +@RequestMapping("/test") +public class TestController extends ControllerBase { + + @Resource + private IGongfuDeviceService gongfuDeviceService; + + @Resource + private IGongfuDeviceComponentService gongfuDeviceComponentService; + + @Resource + private IGongfuDeviceComponentDetailService gongfuDeviceComponentDetailService; + + /** + * 初始化设备组件中的产品线数据 + */ + @Transactional + @GetMapping("initDeviceComponentProductLine") + public ApiResult initDeviceComponentProductLine() { + List deviceComponents = gongfuDeviceComponentService + .lambdaQuery() + .isNull(GongfuDeviceComponent::getProductLine) + .list(); + if (CollectionUtil.isEmpty(deviceComponents)) { + return ApiResult.success(); + } + List devices = gongfuDeviceService.lambdaQuery() + .select(GongfuDevice::getModelNo, GongfuDevice::getProductLine) + .eq(GongfuDevice::getDataValidState, 1) + .list(); + List forUpdate = new ArrayList<>(); + List forAdd = new ArrayList<>(); + List detailsForAdd = new ArrayList<>(); + deviceComponents.forEach(deviceComponent -> { + List ds = devices.stream() + .filter(d -> d.getModelNo().equals(deviceComponent.getModelNo())) + .collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(ds)) { + forUpdate.add(new GongfuDeviceComponent() + .setId(deviceComponent.getId()) + .setProductLine(ds.get(0).getProductLine()) + ); + if (ds.size() > 1) { + List details = gongfuDeviceComponentDetailService.lambdaQuery() + .eq(GongfuDeviceComponentDetail::getDeviceComponentId, deviceComponent.getId()) + .list(); + for (int i = 1; i < ds.size(); i++) { + String prodoctLine = ds.get(i).getProductLine(); + GongfuDeviceComponent component = deviceComponents.stream() + .filter(dc -> StrUtil.equals(dc.getProductLine(), prodoctLine)) + .findFirst() + .orElse(null); + if (Objects.isNull(component)) { + component = forAdd.stream() + .filter(dc -> StrUtil.equals(dc.getProductLine(), prodoctLine)) + .findFirst() + .orElse(null); + if (Objects.isNull(component)) { + component = new GongfuDeviceComponent() + .setId(IdUtil.getSnowflakeNextId()) + .setProductLine(ds.get(i).getProductLine()) + .setComponent(deviceComponent.getComponent()) + .setEnable(deviceComponent.getEnable()) + .setCreateBy(deviceComponent.getCreateBy()) + .setCreateTime(deviceComponent.getCreateTime()) + .setUpdateBy(deviceComponent.getUpdateBy()) + .setUpdateTime(deviceComponent.getUpdateTime()); + forAdd.add(component); + } + } + for (GongfuDeviceComponentDetail detail : details) { + detailsForAdd.add(new GongfuDeviceComponentDetail() + .setDeviceComponentId(component.getId()) + .setModelPartId(detail.getModelPartId()) + .setModelPartName(detail.getModelPartName()) + .setCreateBy(AdminUserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()) + ); + } + } + } + } + }); + if (CollectionUtil.isNotEmpty(forUpdate)) { + gongfuDeviceComponentService.updateBatchById(forUpdate); + } + if (CollectionUtil.isNotEmpty(forAdd)) { + gongfuDeviceComponentService.saveBatch(forAdd); + } + if (CollectionUtil.isNotEmpty(detailsForAdd)) { + gongfuDeviceComponentDetailService.saveBatch(detailsForAdd); + } + List allDetails = gongfuDeviceComponentDetailService + .lambdaQuery() + .select(GongfuDeviceComponentDetail::getDeviceComponentId, GongfuDeviceComponentDetail::getModelPartName) + .list(); + List allComponents = gongfuDeviceComponentService.lambdaQuery() + .select(GongfuDeviceComponent::getId) + .list(); + allComponents.forEach(component -> { + component.setComponent( + allDetails.stream() + .filter(detail -> detail.getDeviceComponentId().equals(component.getId())) + .map(GongfuDeviceComponentDetail::getModelPartName) + .collect(Collectors.joining(",")) + ); + }); + gongfuDeviceComponentService.updateBatchById(allComponents); + return ApiResult.success(); + } +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/GongfuDeviceComponent.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/GongfuDeviceComponent.java index 4e5c3cc0..c0ed6c5d 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/GongfuDeviceComponent.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/GongfuDeviceComponent.java @@ -28,10 +28,10 @@ public class GongfuDeviceComponent implements Serializable { @TableId(value = "id", type = IdType.ASSIGN_ID) private Long id; -// /** -// * 设备机型 -// */ -// private String modelNo; + /** + * 设备机型 + */ + private String modelNo; /** * 产品线