From 087991c76f078defe5eb55d84223021b4199fb3d Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期一, 17 二月 2025 11:22:50 +0800 Subject: [PATCH] 设备模块修改bug --- cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java | 467 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 267 insertions(+), 200 deletions(-) diff --git a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java index 7083104..f1723fd 100644 --- a/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java +++ b/cnas-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java @@ -1,43 +1,47 @@ package com.yuanchu.mom.service.impl; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; import com.yuanchu.mom.common.GetLook; import com.yuanchu.mom.common.PrintChina; -import com.yuanchu.mom.dto.ADto; -import com.yuanchu.mom.dto.BDto; -import com.yuanchu.mom.dto.DeviceDto; +import com.yuanchu.mom.dto.*; import com.yuanchu.mom.exception.ErrorException; -import com.yuanchu.mom.mapper.DeviceMapper; -import com.yuanchu.mom.mapper.StructureItemParameterMapper; -import com.yuanchu.mom.mapper.UserMapper; -import com.yuanchu.mom.pojo.DataConfig; -import com.yuanchu.mom.pojo.Device; -import com.yuanchu.mom.pojo.StructureItemParameter; -import com.yuanchu.mom.pojo.User; +import com.yuanchu.mom.mapper.*; +import com.yuanchu.mom.pojo.*; import com.yuanchu.mom.service.DataConfigService; import com.yuanchu.mom.service.DeviceService; +import com.yuanchu.mom.service.DocumentService; import com.yuanchu.mom.utils.DataAcquisition; +import com.yuanchu.mom.utils.HackLoopTableRenderPolicy; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.vo.Result; import lombok.AllArgsConstructor; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; import javax.servlet.http.HttpServletRequest; -import java.math.BigDecimal; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -51,6 +55,8 @@ private DeviceMapper deviceMapper; + private EnumServiceImpl enumService; + private UserMapper userMapper; private StructureItemParameterMapper structureItemParameterMapper; @@ -58,13 +64,29 @@ @Autowired private DataConfigService dataConfigService; + private QrShowServiceImpl qrShowService; + + private InsSampleMapper insSampleMapper; + + private DocumentService documentService; + + private DeviceMetricRecordMapper deviceMetricRecordMapper; + + private DeviceMaintenanceMapper deviceMaintenanceMapper; + @Override - public Map<String, Object> selectDeviceParameter(Page page, DeviceDto itemParameter) { + public List<User> selectUserList() { + List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getDepartLimsId, "1")); + return users; + } + + @Override + public Map<String, Object> selectDeviceParameter(Page page, DeviceDto itemParameter,Boolean laboratoryNameIsNull) { Map<String, Object> map = new HashMap<>(); map.put("head", PrintChina.printChina(DeviceDto.class)); Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectDeviceParameter"); if (map1.get("look") == 1) itemParameter.setCreateUser(map1.get("userId")); - IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter)); + IPage<DeviceDto> iPage = deviceMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(itemParameter),laboratoryNameIsNull); map.put("body", iPage); return map; } @@ -109,17 +131,25 @@ @Override public List<Device> selectDeviceByCategory(String inspectionItem, String inspectionItemSubclass) { - Integer id; + List<Integer> id; try { if (ObjectUtils.isEmpty(inspectionItemSubclass)) { - id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +// id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +// .eq(StructureItemParameter::getInspectionItem, inspectionItem) +// .last("limit 1").select(StructureItemParameter::getId)).getId(); + id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery() .eq(StructureItemParameter::getInspectionItem, inspectionItem) - .last("limit 1").select(StructureItemParameter::getId)).getId(); + .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList()); + }else { - id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +// id = structureItemParameterMapper.selectOne(Wrappers.<StructureItemParameter>lambdaQuery() +// .eq(StructureItemParameter::getInspectionItem, inspectionItem) +// .eq(StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass) +// .last("limit 1").select(StructureItemParameter::getId)).getId(); + id = structureItemParameterMapper.selectList(Wrappers.<StructureItemParameter>lambdaQuery() .eq(StructureItemParameter::getInspectionItem, inspectionItem) .eq(StructureItemParameter::getInspectionItemSubclass, inspectionItemSubclass) - .last("limit 1").select(StructureItemParameter::getId)).getId(); + .select(StructureItemParameter::getId)).stream().map(StructureItemParameter::getId).collect(Collectors.toList()); } } catch (Exception e) { return null; @@ -131,9 +161,11 @@ for (Device device : devices) { String[] ids = device.getInsProductIds().split(","); for (String i : ids) { - if (i.equals(id + "")) { - devices2.add(device); - break; + if (ObjectUtils.isNotEmpty(i)) { + if (id.contains(Integer.parseInt(i))) { + devices2.add(device); + break; + } } } } @@ -141,8 +173,35 @@ } @Override - public Device selectDeviceByCode(String code) { - return deviceMapper.selectOne(Wrappers.<Device>lambdaQuery().eq(Device::getFactoryNo, code).last("limit 1")); + public Device selectDeviceByCode(Integer id) { + DeviceDto deviceDto = deviceMapper.selectDeviceByCode(id); + List<Integer> ids = new ArrayList<>(); + if (Strings.isNotEmpty(deviceDto.getAuthorizedPerson())) { + if (deviceDto.getAuthorizedPerson().equals("null")) { + deviceDto.setAuthorizedPerson("[]"); + } + ids = JSON.parseArray(deviceDto.getAuthorizedPerson(), Integer.class); + } + String name = ""; + if (!ids.isEmpty()) { + name = userMapper.selectBatchIds(ids).stream().map(User::getName).collect(Collectors.joining(",")); + } + deviceDto.setAuthorizedPersonName(name); + //鏌ヨ璁惧鏍″噯淇℃伅 + DeviceMetricRecord calibrate = qrShowService.getDeviceMetricRecord(id, "calibrate"); + //deviceDto.setCalibrationDate(qrShowService.formatDate(calibrate.getCalibrationDate(),"yyyy-MM-dd")); + deviceDto.setCalibrateNo(calibrate.getCertificateSerialNumber()); + + // 鍒颁簡鍋滅敤鏃ユ湡锛岃嚜鍔ㄥ皢鐘舵�佹敼涓哄仠鐢� + if (deviceDto.getNextCalibrationDate() != null) { + if (LocalDateTime.now().isAfter(deviceDto.getNextCalibrationDate())) { + List<Enums> enums = enumService.selectEnumByCategory("璁惧鐘舵��"); + List<Enums> status = enums.stream().filter(item -> item.getLabel().equals("鍋滅敤")).collect(Collectors.toList()); + deviceDto.setDeviceStatus(Integer.parseInt(status.get(0).getValue())); + deviceMapper.updateById(deviceDto); + } + } + return deviceDto; } @Override @@ -176,17 +235,13 @@ .orderBy(false, false, DataConfig::getId)); list1.addAll(list); }); - // 3銆侀噰闆嗭紝鍙栨暟鎹紝鍙備笌鍏紡璁$畻 - Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(list1, device.get(0), entrustCode, sampleCode, ip); - // 4銆侀�犲惊鐜鏁� + List<DataConfig> collect = list1.stream().distinct().collect(Collectors.toList()); + // 3銆侀噰闆嗭紝鍙栨暟鎹� + Map<String, Object> map = DataAcquisition.dataAcquisitionEntrance(collect, device.get(0), entrustCode, sampleCode, ip); + // 4銆侀�犲惊鐜鏁帮紝鍙備笌鍏紡璁$畻 if (ObjectUtils.isNotEmpty(map)) { - if (ObjectUtils.isEmpty(device.get(0).getEntrustCode()) && ObjectUtils.isEmpty(device.get(0).getSampleCode())) { - Map<String, Object> frequency = DataAcquisition.createFrequency(entrustCode, sampleCode, map); - Object o = formulaCalculation(frequency, true); - return Result.success(o); - } else { - return Result.success(DataAcquisition.createFrequency(entrustCode, sampleCode, map)); - } + Map<String, Object> frequency = DataAcquisition.createFrequency(entrustCode, sampleCode, map); + return Result.success(frequency); } else { return Result.success(null); } @@ -972,10 +1027,6 @@ @Override public List<Map<String, Object>> treeDevice(String deviceName) { List<Map<String, Object>> listMap = deviceMapper.treeDevice(deviceName); - /* Map<String, List<Device>> listMap = devices.stream() - .collect(Collectors.groupingBy(device -> - device.getLargeCategory() != null ? device.getLargeCategory() : "鍏朵粬" - ));*/ return listMap; } @@ -983,7 +1034,6 @@ public Result<?> determineWhetherToCollectData(String managementNumber, HttpServletRequest request) { String ip = DataAcquisition.getIp(request); Device device = baseMapper.selectOne(Wrappers.<Device>lambdaQuery() - .eq(Device::getManagementNumber, managementNumber) .eq(Device::getIp, ip)); if (ObjectUtils.isEmpty(device)) { return Result.success(false); @@ -996,172 +1046,189 @@ } @Override - public Object formulaCalculation(Map<String, Object> map, Boolean isAdopt) { - map.forEach((key, value) -> { - Map<String, Object> jsonObject = JSONObject.parseObject(JSON.toJSONString(map.get(key)), Map.class); - for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { - String sonKey = entry.getKey(); - Object sonValue = entry.getValue(); - if (!sonKey.equals("frequency")) { - Map<String, Object> formulaData = JSONObject.parseObject(JSON.toJSONString(sonValue), Map.class); - if (formulaData.containsKey("result") && formulaData.containsKey("isCalculation") && - formulaData.containsKey("formula")) { - String formula = formulaData.get("formula").toString(); - Boolean isCalculation = Boolean.valueOf(formulaData.get("isCalculation").toString()); - if (isCalculation) { - List<Object> resultList = new ArrayList<>(); - try { - resultList = JSONObject.parseArray(JSON.toJSONString(formulaData.get("result")), Object.class); - } catch (Exception e) { - Object result = formulaData.get("result").toString(); - resultList.add(result); - } - ArrayList<Object> list = new ArrayList<>(); - if (isAdopt) { - String result = calculationFormula(resultList, formula); - list.add(result); - } else { - resultList.forEach(i -> { - List<Object> strings = Arrays.asList(i.toString().split(",")); - String result = calculationFormula(strings, formula); - list.add(result); - }); - } + public void exportDeviceFile(Integer deviceId, HttpServletResponse response) { - formulaData.put("isCalculation", false); - formulaData.put("result", list); - } - } - jsonObject.put(sonKey, formulaData); - } - } - map.put(key, jsonObject); - }); - return map; + // 璁惧淇℃伅 + Device device = baseMapper.selectById(deviceId); + // 璁惧妗f + List<Document> documentList = documentService.list(Wrappers.<Document>lambdaQuery().eq(Document::getDeviceId, deviceId)); + // 璁惧鏍″噯琛� + List<DeviceMetricRecord> deviceMetricRecordList = deviceMetricRecordMapper.selectList(Wrappers.<DeviceMetricRecord>lambdaQuery().eq(DeviceMetricRecord::getDeviceId, deviceId)); + // 璁惧缁翠慨琛� + List<DeviceMaintenance> deviceMaintenanceList = deviceMaintenanceMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery().eq(DeviceMaintenance::getDeviceId, deviceId)); + + + // 杩斿洖缁檞ord鐨勬暟鎹垪琛� 鍒嗕负宸﹀彸涓ゅ垪鏁版嵁 + List<DocumentExportWordDto> documentExportWordDtoList = new ArrayList<>(); + // 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀� + extracted(documentList, documentExportWordDtoList); + + + // 灏嗘牎鍑嗚〃鍜岀淮淇〃鏀惧叆涓�涓璞′腑鏂逛究word琛ㄦ牸涓樉绀� + List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = getDeviceMetricRecordAndMaintenanceDtoList(deviceMetricRecordList, deviceMaintenanceList); + + + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-document.docx"); + Configure configure = Configure.builder() + .bind("document", new HackLoopTableRenderPolicy()) + .bind("deviceMetricRecordAndMaintenanceDtoList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("device", device); + put("document", documentExportWordDtoList); // 妗f + put("deviceMetricRecordAndMaintenanceDtoList", deviceMetricRecordAndMaintenanceDtoList); // 鏍″噯琛� 鍜� 缁翠慨琛� + }}); + + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + device.getDeviceName() + "妗f", "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } } - public String calculationFormula(List<Object> list, String formula) { - //棣栧厛灏唋ist杞崲涓篵igdecmic - List<BigDecimal> bigDecimalList = list.stream() - .map(obj -> { - return new BigDecimal((obj).toString()); - }).collect(Collectors.toList()); - System.out.println(bigDecimalList); + private List<DeviceMetricRecordAndMaintenanceDto> getDeviceMetricRecordAndMaintenanceDtoList(List<DeviceMetricRecord> deviceMetricRecordList, List<DeviceMaintenance> deviceMaintenanceList) { + // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闆嗗悎 + List<DeviceMetricRecordAndMaintenanceDto> deviceMetricRecordAndMaintenanceDtoList = new ArrayList<>(); + // 璁惧鏍″噯琛ㄥ拰璁惧缁翠慨琛ㄧ殑闀垮害鍙兘涓嶄竴鏍� 鍙栨渶澶у�� 涓嶅鐨勭敤绌烘暟鎹~鍏� + int metricRecordSize = deviceMetricRecordList.size(); + int maintenanceSize = deviceMaintenanceList.size(); + int size = Math.max(metricRecordSize, maintenanceSize); + // 缁� 鏍¢獙鍜岀淮淇璞� 璧嬪�� + for (int i = 0; i < size; i++) { + // 鏍¢獙鍜岀淮淇璞� + DeviceMetricRecordAndMaintenanceDto deviceMetricRecordAndMaintenanceDto = new DeviceMetricRecordAndMaintenanceDto(); + // 璁剧疆搴忓彿 + deviceMetricRecordAndMaintenanceDto.setIndex(i + 1); - //灏嗕腑鏂囩殑(杞崲鑻辨枃鐨�()) - formula = formula.replace("锛�", "(") - .replace("锛�", ")") - .replace("锛�", ","); - //鐒跺悗鎻愬彇鍏紡 - String strs = formula.substring(0, formula.indexOf("(")); - String upperStr = strs.toUpperCase(); - if (upperStr.matches(".*\\d.*")) { - upperStr = ""; - } - System.out.println(upperStr); - //鐒跺悗鑾峰彇鏈�澶栭潰鎷彿閲岄潰鐨勫��,鍐嶆牴鎹�","鍒嗗壊 - int start = formula.indexOf("("); - int end = -1; - int a = 0; - for (int i = start; i < formula.length(); i++) { - char c = formula.charAt(i); - if (c == '(') { - a++; - } else if (c == ')') { - a--; - if (a == 0) { - end = i; - } - } - } - if (start == -1 || end == -1) { - throw new ErrorException("鍏紡鎷彿涓嶅尮閰�: " + formula); + // 鏍″噯琛ㄦ暟鎹� + if (metricRecordSize > i) { + // 璁剧疆鏃ユ湡鏍煎紡 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 鑾峰彇璁惧鏍″噯琛ㄦ暟鎹� + DeviceMetricRecord deviceMetricRecord = deviceMetricRecordList.get(i); + // 璁剧疆鏍″噯鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setCalibrationDateString(sdf.format(deviceMetricRecord.getCalibrationDate())); + // 璁剧疆璇佷功缂栧彿 + deviceMetricRecordAndMaintenanceDto.setCertificateNumber(deviceMetricRecord.getCertificateSerialNumber()); + // 璁剧疆鏈夋晥鏈� + deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getNextCalibrationDate())); + // 璁剧疆鏍″噯鏈夋晥鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setValidityDateString(sdf.format(deviceMetricRecord.getConfirmDate())); + // 璁剧疆妫�楠岀粨鏋� + deviceMetricRecordAndMaintenanceDto.setJudgement(deviceMetricRecord.getStatus()); } - String argumentsStr = formula.substring(start + 1, end); - List<String> arguments = new ArrayList<>(); - int bracketCount = 0; - StringBuilder currentArgument = new StringBuilder(); - for (char c : argumentsStr.toCharArray()) { - if (c == ',' && bracketCount == 0) { - arguments.add(currentArgument.toString()); - currentArgument.setLength(0); - } else { - if (c == '(') bracketCount++; - if (c == ')') bracketCount--; - currentArgument.append(c); - } + // 缁翠慨琛ㄦ暟鎹� + if (maintenanceSize > i) { + // 鑾峰彇璁惧缁翠慨琛ㄦ暟鎹� + DeviceMaintenance deviceMaintenance = deviceMaintenanceList.get(i); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 缁翠慨鏃ユ湡 + deviceMetricRecordAndMaintenanceDto.setMaintenanceDateString(deviceMaintenance.getDate().format(dateTimeFormatter)); + // 澶勭悊鏂规硶 + deviceMetricRecordAndMaintenanceDto.setHandlingMethod(deviceMaintenance.getContent()); + // 澶囨敞 + deviceMetricRecordAndMaintenanceDto.setComments(deviceMaintenance.getComments()); } - arguments.add(currentArgument.toString()); - String[] bracketStrs = arguments.toArray(new String[0]); - List<BigDecimal> results = new ArrayList<>(); - for (String expr : bracketStrs) { - System.out.println("鏇挎崲鍓�" + expr); - Pattern pattern = Pattern.compile("([A-Z])(\\d+)"); - Matcher matcher = pattern.matcher(expr); - StringBuffer sb = new StringBuffer(); - while (matcher.find()) { - String letter = matcher.group(1); - int index = Integer.parseInt(matcher.group(2)) - 1; // 灏�1-based杞负0-based - if (index < bigDecimalList.size()) { - matcher.appendReplacement(sb, bigDecimalList.get(index).toString()); - } else { - throw new RuntimeException("鍏紡涓殑涓嬫爣 " + index + " 瓒呭嚭鑼冨洿"); - } - } - matcher.appendTail(sb); - System.out.println("鏇挎崲鍚�" + sb.toString()); - // 璁$畻琛ㄨ揪寮� - ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); - try { - Object result = engine.eval(sb.toString()); - results.add(new BigDecimal(result.toString())); - } catch (Exception e) { - throw new IllegalArgumentException("鏃犳硶璁$畻鍏紡: " + sb, e); - } - } - // 鏍规嵁鍑芥暟鍚嶇О杩涜鐩稿簲璁$畻 - BigDecimal finalResult; - if (upperStr.equals("") || upperStr == null) { - finalResult = results.get(0); + deviceMetricRecordAndMaintenanceDtoList.add(deviceMetricRecordAndMaintenanceDto); + } + return deviceMetricRecordAndMaintenanceDtoList; + } + + /** + * 缁欐。妗堝姞搴忓彿 骞跺乏鍙冲垎涓哄乏鍙充袱鍒楀湪word涓樉绀� + * + * @param documentList 妗f鍒楄〃 + * @param documentExportWordDtoList 杩斿洖缁檞ord鐨勬暟鎹垪琛� + */ + private static void extracted(List<Document> documentList, List<DocumentExportWordDto> documentExportWordDtoList) { + // 缁欐。妗堝姞搴忓彿 骞朵笖鍒嗕负宸﹀彸涓や釜鍒楄〃鍦╳ord涓樉绀� + for (int i = 0; i < documentList.size(); i++) { + // 鍒涘缓word琛ㄦ牸涓竴琛岀殑鏁版嵁瀵硅薄 + DocumentExportWordDto documentExportWordDto = new DocumentExportWordDto(); + // 鑾峰彇妗f淇℃伅 + Document document = documentList.get(i); + // 鏍煎紡鍖栨棩鏈� + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // 鏍规嵁搴忓彿 鍒嗗埆鍔犲叆涓や釜鍒楄〃 + if (i % 2 == 0) { + // 濂囨暟鍦ㄥ乏鍒� + documentExportWordDto.setIndex1(i + 1); + documentExportWordDto.setName1(document.getName()); + documentExportWordDto.setQuantity1(document.getQuantity()); + documentExportWordDto.setPageCount1(document.getPageCount()); + documentExportWordDto.setArchiveDateString1(document.getProvideDate().format(dateTimeFormatter)); } else { - switch (upperStr) { - case "MAX": - finalResult = results.stream().max(BigDecimal::compareTo) - .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MAX鍊�")); - break; - case "MIN": - finalResult = results.stream().min(BigDecimal::compareTo) - .orElseThrow(() -> new IllegalArgumentException("鏃犳硶璁$畻MIN鍊�")); - break; - case "SUM": - finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::add); - break; - case "ABS": - finalResult = results.stream().map(BigDecimal::abs).reduce(BigDecimal.ZERO, BigDecimal::add); - break; - case "AVERAGE": - finalResult = results.stream().reduce(BigDecimal.ZERO, BigDecimal::divide) - .divide(BigDecimal.valueOf(results.size()), 2, BigDecimal.ROUND_HALF_UP); - break; - case "MEDIAN": - int size = results.size(); - if (size % 2 == 1) { - finalResult = results.get(size / 2); - } else { - BigDecimal sum = results.get(size / 2 - 1).add(results.get(size / 2)); - finalResult = sum.divide(BigDecimal.valueOf(2), 2, BigDecimal.ROUND_HALF_UP); - } - break; - default: - throw new UnsupportedOperationException("鏆備笉鏀寔鍑芥暟: " + upperStr); + // 鍋舵暟鍦ㄥ彸鍒� + documentExportWordDto.setIndex2(i + 1); + documentExportWordDto.setName2(document.getName()); + documentExportWordDto.setQuantity2(document.getQuantity()); + documentExportWordDto.setPageCount2(document.getPageCount()); + documentExportWordDto.setArchiveDateString2(document.getProvideDate().format(dateTimeFormatter)); + } + // 鎶婁竴琛屾暟鎹璞″姞鍏ュ垪琛� + documentExportWordDtoList.add(documentExportWordDto); + } + } + + @Override + public void exportEquipmentDetails(HttpServletResponse response) { + List<Device> deviceList = baseMapper.selectList(null); + List<DeviceExport> deviceExportList = new ArrayList<>(); + + int index = 1; + for (Device device : deviceList) { + Integer equipmentManager = device.getEquipmentManager(); + String equipmentManagerName = null; + if (equipmentManager != null) { + User user = userMapper.selectById(equipmentManager); + if (user != null) { + equipmentManagerName = user.getName(); } } - System.out.println(results); - System.out.println("璁$畻缁撴灉: " + finalResult); + DeviceExport deviceExport = new DeviceExport(); + BeanUtils.copyProperties(device, deviceExport); + deviceExport.setIndex(index); + deviceExport.setEquipmentManagerName(equipmentManagerName); + deviceExportList.add(deviceExport); + index++; + } - return finalResult.toString(); - // 鍚﹀垯锛氭病鏈夊叕寮忎唬琛ㄤ笉闇�瑕佽绠楋紝鐩存帴鎻愬彇List閲岄潰鐨勬暟鎹� + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/word/quipment-details.docx"); + Configure configure = Configure.builder() + .bind("deviceList", new HackLoopTableRenderPolicy()) + .build(); + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("deviceList", deviceExportList); + }}); + + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + "浠櫒璁惧涓�瑙堣〃", "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } } } -- Gitblit v1.9.3