From 5c3e8ae3546ac99a434b923b1acab21a7876a522 Mon Sep 17 00:00:00 2001 From: liwen Date: Thu, 22 Aug 2024 19:07:12 +0800 Subject: [PATCH 1/9] =?UTF-8?q?update:=20=E5=8D=AB=E7=94=9F=E8=80=83?= =?UTF-8?q?=E6=A0=B8=E8=A1=A8=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/HygieneEvaluationExportDTO.java | 59 ----------- .../safeproduct/vo/HygieneEvaluationExportVO.java | 55 +++++++++++ .../vo/HygieneEvaluationPeopleExportVO.java | 41 ++++++++ .../service/impl/HygieneRecordServiceImpl.java | 108 +++++++++++---------- .../com/hnac/hzims/safeproduct/utils/BaseUtil.java | 78 ++++++++------- .../template/卫生考核表(五周).docx | Bin 0 -> 12280 bytes .../template/卫生考核表(四周).docx | Bin 0 -> 12116 bytes .../main/resources/template/卫生考核表.xlsx | Bin 10754 -> 0 bytes 8 files changed, 192 insertions(+), 149 deletions(-) delete mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/HygieneEvaluationExportDTO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationExportVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationPeopleExportVO.java create mode 100644 hzims-service/safeproduct/src/main/resources/template/卫生考核表(五周).docx create mode 100644 hzims-service/safeproduct/src/main/resources/template/卫生考核表(四周).docx delete mode 100644 hzims-service/safeproduct/src/main/resources/template/卫生考核表.xlsx diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/HygieneEvaluationExportDTO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/HygieneEvaluationExportDTO.java deleted file mode 100644 index 2987b84..0000000 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/dto/HygieneEvaluationExportDTO.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.hnac.hzims.safeproduct.dto; - -import com.hnac.hzims.safeproduct.vo.HygieneEvaluationPeopleVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -/** - * @author liwen - * @date 2024-08-20 - */ -@Data -@ApiModel(value = "卫生考核导出DTO类") -public class HygieneEvaluationExportDTO { - - @ApiModelProperty(value = "年份") - private String year; - - @ApiModelProperty(value = "月份") - private String month; - - @ApiModelProperty(value = "第一周开始日") - private String firstWeekStart; - - @ApiModelProperty(value = "第一周结束日") - private String firstWeekEnd; - - @ApiModelProperty(value = "第二周开始日") - private String secondWeekStart; - - @ApiModelProperty(value = "第二周结束日") - private String secondWeekEnd; - - @ApiModelProperty(value = "第三周开始日") - private String thirdWeekStart; - - @ApiModelProperty(value = "第三周结束日") - private String thirdWeekEnd; - - @ApiModelProperty(value = "第四周开始日") - private String fourthWeekStart; - - @ApiModelProperty(value = "第四周结束日") - private String fourthWeekEnd; - - @ApiModelProperty(value = "第五周开始日") - private String fifthWeekStart; - - @ApiModelProperty(value = "第五周结束日") - private String fifthWeekEnd; - - @ApiModelProperty(value = "备注") - private String remark; - - @ApiModelProperty(value = "考核人员列表") - private List evaluationList; -} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationExportVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationExportVO.java new file mode 100644 index 0000000..5ec081f --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationExportVO.java @@ -0,0 +1,55 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-20 + */ +@Data +@ApiModel(value = "卫生考核导出VO类") +public class HygieneEvaluationExportVO { + + @ApiModelProperty(value = "年份") + private String year; + + @ApiModelProperty(value = "月份") + private String month; + + @ApiModelProperty(value = "第一周开始日") + private String firstWeekStart; + + @ApiModelProperty(value = "第一周结束日") + private String firstWeekEnd; + + @ApiModelProperty(value = "第二周开始日") + private String secondWeekStart; + + @ApiModelProperty(value = "第二周结束日") + private String secondWeekEnd; + + @ApiModelProperty(value = "第三周开始日") + private String thirdWeekStart; + + @ApiModelProperty(value = "第三周结束日") + private String thirdWeekEnd; + + @ApiModelProperty(value = "第四周开始日") + private String fourthWeekStart; + + @ApiModelProperty(value = "第四周结束日") + private String fourthWeekEnd; + + @ApiModelProperty(value = "第五周开始日") + private String fifthWeekStart; + + @ApiModelProperty(value = "第五周结束日") + private String fifthWeekEnd; + + @ApiModelProperty(value = "考核人员列表") + private List evaluationList; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationPeopleExportVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationPeopleExportVO.java new file mode 100644 index 0000000..33ab247 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/HygieneEvaluationPeopleExportVO.java @@ -0,0 +1,41 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liwen + * @date 2024-08-22 + */ +@Data +@ApiModel(value = "卫生考核人员导出VO类") +public class HygieneEvaluationPeopleExportVO { + + @ApiModelProperty(value = "单位") + private String unit; + + @ApiModelProperty(value = "负责人") + private String principal; + + @ApiModelProperty(value = "合计分") + private Long sumScore; + + @ApiModelProperty(value = "第一周考核分") + private Long firstWeekScore; + + @ApiModelProperty(value = "第二周考核分") + private Long secondWeekScore; + + @ApiModelProperty(value = "第三周考核分") + private Long thirdWeekScore; + + @ApiModelProperty(value = "第四周考核分") + private Long fourthWeekScore; + + @ApiModelProperty(value = "第五周考核分") + private Long fifthWeekScore; + + @ApiModelProperty(value = "备注") + private String remark; +} diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java index 30db487..823ae61 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java @@ -1,24 +1,19 @@ package com.hnac.hzims.safeproduct.service.impl; -import cn.afterturn.easypoi.excel.ExcelExportUtil; -import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.hutool.core.date.DatePattern; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hnac.hzims.common.utils.DateUtil; import com.hnac.hzims.safeproduct.constants.SafeProductConstant; -import com.hnac.hzims.safeproduct.dto.HygieneEvaluationExportDTO; +import com.hnac.hzims.safeproduct.vo.HygieneEvaluationExportVO; import com.hnac.hzims.safeproduct.dto.HygieneRecordDTO; import com.hnac.hzims.safeproduct.entity.HygienePlanEntity; import com.hnac.hzims.safeproduct.entity.HygieneRecordEntity; import com.hnac.hzims.safeproduct.entity.HygieneZoneEntity; import com.hnac.hzims.safeproduct.enums.RehearsalStatusEnum; -import com.hnac.hzims.safeproduct.hazard.util.ExcelConvertPdf; import com.hnac.hzims.safeproduct.mapper.HygienePlanMapper; import com.hnac.hzims.safeproduct.mapper.HygieneRecordMapper; import com.hnac.hzims.safeproduct.service.IHygieneRecordService; @@ -26,9 +21,6 @@ import com.hnac.hzims.safeproduct.service.IHygieneZoneService; import com.hnac.hzims.safeproduct.utils.BaseUtil; import com.hnac.hzims.safeproduct.vo.*; import com.hnac.hzinfo.exception.HzServiceException; -import com.itextpdf.text.DocumentException; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; @@ -42,14 +34,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.nio.file.Paths; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; @@ -339,12 +324,11 @@ public class HygieneRecordServiceImpl extends ServiceImpl weekList = page.getWeekList(); weekList.forEach(week -> { @@ -354,52 +338,70 @@ public class HygieneRecordServiceImpl extends ServiceImpl params = BaseUtil.obj2Map(exportDTO); - TemplateExportParams templateParams = new TemplateExportParams("template/卫生考核表.xlsx", true); - // 导出 - try { - String fileName = URLEncoder.encode("卫生考核表.xlsx", "UTF-8"); - response.setHeader("Content-Disposition", "attachment; filename=" + fileName); - response.setContentType("application/vnd.ms-excel;charset=utf-8"); - Workbook workbook = ExcelExportUtil.exportExcel(templateParams, params); - Sheet sheet = workbook.getSheetAt(0); - BaseUtil.mergeCell(0, 0, JSONArray.parseArray(JSON.toJSONString(exportDTO)), "unit").forEach(sheet::addMergedRegion); - BaseUtil.mergeCell(0, 7, JSONArray.parseArray(JSON.toJSONString(exportDTO)), "remark").forEach(sheet::addMergedRegion); - String pdfPath = "D://" + "/卫生考核表" + SafeProductConstant.PDF_SUFFIX; - OutputStream outputStream = Files.newOutputStream(Paths.get(pdfPath)); - ExcelConvertPdf.excelConvertPdf(workbook, outputStream); - BaseUtil.readPdf(response, pdfPath); - } catch (UnsupportedEncodingException e) { - log.error("卫生考核表导出异常-UnsupportedEncodingException:" + e.getMessage()); - } catch (DocumentException e) { - log.error("卫生考核表导出异常-DocumentException:" + e.getMessage()); - } catch (IOException e) { - log.error("卫生考核表导出异常-IOException:" + e.getMessage()); + List evaluationExportList = new ArrayList<>(); + List evaluationList = page.getEvaluationList(); + evaluationList.forEach(x -> { + HygieneEvaluationPeopleExportVO peopleExportVO = new HygieneEvaluationPeopleExportVO(); + peopleExportVO.setUnit(x.getUnit()); + peopleExportVO.setPrincipal(x.getPrincipal()); + peopleExportVO.setSumScore(x.getSumScore()); + peopleExportVO.setRemark(page.getRemark()); + List scoreList = x.getScoreList(); + scoreList.forEach(score -> { + Long weekScore = score.getScore(); + switch (score.getWeekNum()) { + case 1: + peopleExportVO.setFirstWeekScore(weekScore); + break; + case 2: + peopleExportVO.setSecondWeekScore(weekScore); + break; + case 3: + peopleExportVO.setThirdWeekScore(weekScore); + break; + case 4: + peopleExportVO.setFourthWeekScore(weekScore); + break; + case 5: + peopleExportVO.setFifthWeekScore(weekScore); + break; + } + }); + evaluationExportList.add(peopleExportVO); + }); + exportVO.setEvaluationList(evaluationExportList); + Map params = BaseUtil.obj2Map(exportVO); + String templateFile; + if (weekList.size() == 4) { + templateFile = "template/卫生考核表(四周)" + SafeProductConstant.DOCX_SUFFIX; + } else { + templateFile = "template/卫生考核表(五周)" + SafeProductConstant.DOCX_SUFFIX; } + String wordPath = "D:/" + "/卫生考核表" + SafeProductConstant.DOCX_SUFFIX; + String pdfPath = "D:/" + "/卫生考核表" + SafeProductConstant.PDF_SUFFIX; + BaseUtil.exportDocument(templateFile, params, wordPath, pdfPath, "",response); } /** diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java index 914c81f..41fe56d 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java @@ -153,6 +153,9 @@ public class BaseUtil { if ("template/车辆检查表.docx".equals(templatePath)) { formatCarCheckRecordTable(xwpfDocument); } + if ("template/卫生考核表(四周).docx".equals(templatePath) || "template/卫生考核表(五周).docx".equals(templatePath)) { + formatHygieneEvaluationTable(xwpfDocument, params); + } } catch (Exception e) { e.printStackTrace(); } @@ -160,6 +163,44 @@ public class BaseUtil { } /** + * 卫生考核表格式处理 + * @param xwpfDocument word文件类 + * @param params 数据参数 + */ + private static void formatHygieneEvaluationTable(XWPFDocument xwpfDocument, Map params) { + // 获取文档中所有的表格 + List tableList = xwpfDocument.getTables(); + if (!tableList.isEmpty()) { + // 循环表格 + for (XWPFTable table : tableList) { + // 获取表格所有行数 + List rows = table.getRows(); + // 第三行到倒数第三行为需合并区域 + for (int row = 3; row < rows.size();) { + XWPFTableCell startCell = rows.get(row).getCell(0); + String startText = startCell.getText(); + int index = row + 1; + for (; index < rows.size(); index++) { + XWPFTableCell endCell = rows.get(index).getCell(0); + String endText = endCell.getText(); + if (!startText.equals(endText)) { + break; + } + } + mergeCellsVertically(table, 0, row, index - 1); + // 判断周数:为五周时,备注在第9列;为四周时,备注在第8列 + if (ObjectUtil.isNotEmpty(params.get("fifthWeekStart"))) { + mergeCellsVertically(table, 8, row, index - 1); + } else { + mergeCellsVertically(table, 7, row, index - 1); + } + row = index; + } + } + } + } + + /** * 车辆检查表格式处理 * @param xwpfDocument word文件类 */ @@ -424,41 +465,4 @@ public class BaseUtil { throw new ServiceException("标准总分值未全部分配"); } } - - /** - * - * @param initRow 起始行数 - * @param initColumn 起始列数 - * @param data 数据 - * @param attribute 合并属性 - * @return 单元格列表 - */ - public static List mergeCell(int initRow, int initColumn, com.alibaba.fastjson.JSONArray data, String attribute) { - List result = Lists.newArrayList(); - String initAttribute = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(data.get(0))).getString(attribute); - int mergeCount = 1; - for (int index = 0; index < data.size(); index++) { - if (index == 0) { - continue; - } - com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(data.get(index))); - if (object.getString(attribute).equals(initAttribute)) { - mergeCount++; - } - else { - if (mergeCount > 1) { - result.add(new CellRangeAddress(initRow, initRow+mergeCount-1, initColumn, initColumn)); - } - initRow = initRow+mergeCount; - initAttribute = object.getString(attribute); - mergeCount = 1; - } - if (index == data.size() -1) { - if (mergeCount > 1) { - result.add(new CellRangeAddress(initRow, initRow + mergeCount-1, initColumn, initColumn)); - } - } - } - return result; - } } diff --git a/hzims-service/safeproduct/src/main/resources/template/卫生考核表(五周).docx b/hzims-service/safeproduct/src/main/resources/template/卫生考核表(五周).docx new file mode 100644 index 0000000000000000000000000000000000000000..812968828b622a3764d4ad135c21a0b23a3b51c6 GIT binary patch literal 12280 zcma)C1yo!~mu}qMT>`<~gL{A=jYDvEcXxO9U;%1IZ4Q#%wCYo?OxCSZ_YPg0s8M;k)Z7!xUf z-Dpez>8o3;9H-;ClpgT+vx9KjtXe{ZmZg#nD0HxZ;xUU+Y8B`~^5z7s0jT#cT z5vt63c)WcA8i4rG7-kT*WGD3HSyM_P^i|dRoZoA&hJ@2Ycu+>;OL~Ouv}k=S6y79I z4#utb<T;Nq6nM-h4Pi^@o919KH(W`fP)OuT&` ziMm4S@Eu9giPf#q1_I4aI*wIwEEWXT)t+TsHcx`eI5X@&lyHI4iG_LL>FX<@Ovjq! zT#sbWK~p0FqXy4Vn@;Rw5)Uf(i^CF3?ny{g?$c*TLuT>FwbXdqfj+Eq3G}*vgE#(F zE`dLcf?69N_C-1tJ-e<5{vDIy4Yh!`FEP=2i3!?2V`6CQVEi*E(FwA0J`M zW0jZH4*^-pslodiN|e(J9(MS0@(0|DAj=v82(7#FH0(VR>_wX!?JOI>j_B-wq%@Mv zgOiJ%qAV_6ND0kAyAsmM`s9(&0)`s>AL+?{N+M%5kmHb-h)tdIh+@;Pph)6&`(}xR z><~HLDy(i8C9T_5!O*RIfXa5*PD)P?4SG5~qD2(i~-{loX``^vx;OKgfT?m+=tG)X6BkY z`DK>!r=4f&Q#OjUB}cP#gGMW8QB#);ZtlK3xDB7%8V|hoym{^pHZl#8>zCX>_RF`t zycERL{kPj^W5d+wUfhoM;&zOGx!u{($=3R(<3GmB%Jc}KhMWaFlO224k&H?n~^-6Ac#Vk0emj(l|oClRUPkr)+ z&uO&ehRLZ(wkXx1iw{U-)=OVmrN{)L7}RGo=ZI1#1_UEVBl8lc%4(*lSdEhxa_hkqs)RwDA4o6R1l+^Hby9^!2D*6tZ`H zq>mem%Lp|x4aKx8*Oe4sv3V#*R{DsN^udG#eQ$QqsdPoD*`|ea(B$jjNFAa>IUH$D4Q15u+D}7 zgF!||x+Baj%d+2oNVFs{sxJ6#Ej&YazAy$3)<9VWS`|=TyJf?AFq8ECw z@y@H)oA@TrW)LNu%Z#`-TAaS+xw*GbIZsu<*hl{N(a{Sk2NA3YT)6Msv^_woBZ?_0 zHX#7BY2HD`2>R4X%3+P@CM`zSRH??JuSJVURVO4d8^tPl@i=$If;ooiwHmNp&C7!L z-k}4Cg}#G(<*=9Uh>B1?@vuwYk2geJj=ayQ9l_Z|6Tt?MgQ;_w+P{`K9~OC>x<@e8 z@JWH2{Q(-vQlfmMw*}-x3Pts=bwoR>ly*eZQaVEom(3oc*uw*P8K#grjnVcJC%ag- zY3q~6pB*cdtXNCs`1%mg&INJ!e1_Zr=GKf^7jKutNY`m+Mw^RCP(H=cP;44qU6=8= z(>>x4zjGv2Eg90$$JT1U;{(z_)IV2nbI8?5l+Y=LVbu!6bL?M-r_mIwl`V!22_?}Z zj3t%0KP;hE%(a!9LD^4`Y*q{Q0)4}n9?4=JM6<3!ZyN-A=TyUV{24a=I-DVw0i7rM z+yFaIJ7mBzaV-R(3FhME(gy#_r3nHEBEASICvyRsj+k?$qIOF2*w=Q@adK09Q5xE}Pd zetrpLJ3NSlh-*P_%oPRpXb_{%H+b;VMF-F$(md_aMyU<>^~aso`H<^v(C~}%bL0Ep zOsU5+P1iN%4m5^!=`Ea3rpxRuh?S>`EJsAGs}?G>Uy>v8VBPWqi4QU`uCzHAh4)mp zh>=K~@KbXiO6`XSa^1wtx|KARrgMh&p>u}58*j!ftad8>`D$A7si>Pb?Y#zWlL-s% zk|!M!^_^QVV~w)}K52VqvxLyVIE|vV-E=B`&#E=r_>>CXGxw|oeYW~)P)Q9*_WOJZ z#|ii``DXqKSi2`c2THyOfded=bsAE6Q30dAOq7XaxvMVyuyf5xP~R}2e9L>hK5d5` zoZVO-h%Aiwq31jyf%IPOz>`67zg{u=vHnt_aH$<%U(sL8fl9q0FgLLcoJt`a%k97r ze#zEOq5f5nYmXRLUFJ>VUoM1C1jnlZY^cR9nVhmUwA&pYx04`0t4o88-5ugCQ0seEEfCO-8W zI3veD;?q2do!s8NqCBg?Xi1%BUqv$NJ7zk?;LABI4b-9C zQ*4WU_LHBmeRz4>p#d?8Kr1mzy{7k~AgxoF0e8Sa<2*eCX{A11W9=jnc-4Pq6!Z<&%TUWs`$mFE7HfN%MAT=8jS{ zHpr=R{C&u}3TY>P#1#SeRyCM1e>v>4mQy28<>cU|c0poas{~b~YxK)S{A~JF6efOw z52C&w&IMN2Nh2SjVKksiTwn1?>)|QfuiiUx`H5%+|40Y65z<5LlO;Pg^vd)T$>>9y z1$cl&?t|1e6NAwanI$rmaQ`7u4^- z6Umh_pwU(%Hntf}>40rZA7AJ8Dtx(@K*m5RSaWZ-mtfduX$lW$r~79@dg zEocW^xrvike;=cFWn9B!rqotr{r{RX0L_*@RhGa));i*4+1Dr>K&7^LvD3|HFPS6i zRdwvlK+ZmbVS`J#R5!zB=FRAxKQ%H8&*~$P*`|L{!t_Of=5VeQ$XBcCjG3I%89(ic zmnF8yFZ!u?9{~?sKd`Nao)hNh8hyLjj4xK|znHP}3*C?YPm?JeFl_1JBwn1sXB<7b^-&)-EjFnqVr-E56XzUIDM_!%qk*Ag!AD2;R@7FZYUtB-lHDj> zU=;#8S1?x{?se_LOwq+mvgb}O_q?dCKD{_;s)c|ZZBGN;(?uBu8ytxxfV-rX2Koc6 z!pEuSXGyS>VkSNn-oqo4%sJSF@%x~3w3Np-1rj=Hrcz>e++$PQF_7Dyc`3b?cZMG8 zee-xW1$EV8kdv@bVLXXvZvFk51+z`%o4Ztb22F zh2(JJ8i#UgA?13fEYE!k33$apr$k&TZKL1*25%T8n?2FqJK(z}X9mkDLza3ZxuQ(w zYr)Xi{?4z#Nxez0=fI0x!ULUe^@Md9LO9YPLKnsdOOAO&EJP*nthtbdlPj`=X|P#Rb^3pdYyYIaHQXN?UPogm zCvzLqKlZZ?s_z{axiNj#(jQTx*5KxM6WpYE{qm$hpa4bQsW;8WQ8tMQIQ4~7x8c#JQ^?&HJm4~v#G(QYv%>u%d8 z)fWP7&zG^TDuvavokg0t0cByvuWSpP(VXAVF6o6#CsQ-S*ill5;tTAw^u#Tvi1T8U z3uP1rp|>AFuAFvSPKU*-NfUF>E=CzCQrCQwpg=Ff8nnCIqu8#RZ%C*akPd0CWN@J< zS`S>e5QX2VuUVUcCbP*(m}?4fGoA*i_}nmzyRvJ6oC$K8!eo6n)~_9s|ZK zW1n-J)NjT3S(Sq&m{cFq07UJiC`}`svt|IvJ^_j#RbG?UHONB98^^sYniP-%uuU1| z!a1e|A!b4oxUD`~}H(txuqG(xp8>~Q$Pk2EUSjcHu z7iv*mC=>oR8%3t1*>nwIUUe{}{0gUBKY6;1+Sgyglaz4Hpmuei7a6ZOnmBl`4yGRC zW2O6vjr6fgAb`hULL+6-syuk021bEqFwc7B+rt4a9@x^m_NnC`OL2ah!p-(4dik!H z3H{C@-`z$oJ;MSzk?ZlEyiryi0FH?nRP!st+WvdE!r1yp&w~Aj8KX2b*pRz&t02On ztq%Mn<#>kF176&|s<)+EXy80aNpPPR*xw{UpPlwK#X5Q3kPkGaT34(4EC_sg#~BOS zdsJ$h7yLrs68SiHvgNSk9nsX@k$SYgG#phf5G(PzSnsZvc)8TwdYNEr)fFvoU87Q@`GNbLM~X_ zkf+=Q+Gn9nX2j6;Oh?{F<{YG|Ed-Z)t{!*h?3;08=$_9cA$17x$eVg^(qfo;+1iLl z0tT<=%>tDP_DDPESzXVl4&+R9G)Kl3F>933r!~`-@CwzFhE9U)LW^--SOvrrSe^A+ zt-<A=-M zK2tdY_~vO8v>2B;JqXH}-#4Y^o(2j`V(%s1^{64AwcNkbhC#xf#`VH0e-cWE!~UEZ zs9!C)ZhlJjeU(K4w<%8*~ix*%0kwCvjrZIRm|=EBjS)uCg+BhjVYd zt3<6-$=o#2xLLZP8ETrn^H&U{D$T@=t@pQ&DF1tP|B~;1RrgM2#@5Ea)%Yt7_!scd z06;4)0D$#x!9T=VepdP?8l$loT$mkdhtJFzyvG#Vh8pqWnX$$Qt<~gUy_197Y$p6$ z11>Iu6#<4HrB%#lMB_b<@+=}D6`8K87E($-qCbm#I2r7f%c{&R5edsO;p@2hA>ea% z_bQcfZQRT*s+pADHaPhbh`a99Ymh)yaXzbevuuJ38-9TcOxaT9?jdh$djv_QPNclE z4}pjq@58nT{*;th5skzWpiePY2RF8{lmTMUb{5yZgLE)AJN?+ z0I4kI2p{o{&ZDuss&tN~J&|<+6{Rl4k$H4PFcPn=wd~XOI-+!y>^R|5L!acHyV(tmQPSF<(a^im~~}iN2e3DXc3Cy zP9IQpa}LNw#n#m2e+JE57Iz&4niiw@@Oa;zUv-U3#J_3?z35HxxO>F$6?|g9Jvwk@ zBJtk&ia_xEApha<`%$V7sq#d37LKmq-PS@P&YIWL9!f0VIZ;dqr*Iq!(BuJQ5*0xb=>0-AW7P)W{*u5t|R1b39A z`0%SfrbF=QMK$8xNNi+e48vdQWl%j0-c9$fi0#jFxx(zo`FKvjUCC}LElAZE?vjZ& zi@}Z6AWn0+1l4?PZ4KhK=O=wN21ziy&Iq>{<|fKYDjF(_kjI}OtYaboLAEAmg=_<3 zE#a->3aW_=DixYG`~gs+ic*_U&L1gu@ME=r@gf>$PWSSnioj`c!bo#2_$|#k{Susi0YhGYbiQple8$2R^Jx+?`hhH;R z{wf&?wQlC=5+v_|Kr6v=z^Zv>J!#lI>rRfAPS?nWt*^va*dtX4@0Ejjyuop+HItC0 zxzBkjUv9tGd_8q-Fg~-}tVnPFDAA7Gw4B2m^>usYY)qSd6omz|_YnO$kH^<+Y{PRc zYi{Op$#yW35fMq#8hTXc{aG8^bHC?1>XTu-z6X)Bb|`v25F;WjnfFld4vkepcLA;8 z#OXSEjC8sfW(GRiyEMN#{m-h&_d>-B(V+P(2D(uX%u%X|Jz$!GeCod8p_XwUA=lg? z$7@==>UwtA?*Oo4LQVY!^X&~YKkAs|@Zg}6(8nJc0w0yM?wu+%Lmh8#G!GtSo*Q=uACt#tlv~oK&yc-B zzw}Ee$Fj*FOz)l0Qrc-}J?+4Z7Ol?Moy+Pm9(_V_Rsv0r66|2R9bBNses!a;Hqm?) zfw0?P#$g3te^3mPVlGtj!2naC1AffoCd2?UefEHKQe?7IQ>nt5=^%CJOm7o4T9luJ zJS7<0R}Yg@G%7(*D*tr+jUpR*SkrFiDB`BuT`Hnlrj>l0D9WolO>QumuXgd~d;iuQB30)bbxX-N zt2g;V7k+&vpY!J`@^^=t8w|$~FUM+=79(ObnhD2nrr73fG&oRL%AXolLK1}taOHtf z2qel7Tmqfw9p_|+tt^EWQng?D~dXnxmdXa;KQ%QZ7LYhSk653O{$ly53=PgCq z4Ug&(VuqD2G&av)7ytxA%E`Q`wXPLw&3? z!3O~R`d?3(zqi!uO^qgfFRiQy^?z)sU)oyE*2XqYe>^y}bZwUg(0rLD&h%it8^jfp zsNtzdsDVRJ15jN&b9~rz4wRsG_HYiy3oM9)cCt*Ns~;fSL&0h6kS4%GIc0%Y#14ZW zA6bFNd@E}E$Ba@^jmDV{iW=y;Vh#1?Hx;wb1rtMZ+gpiw~=U?Lii)+ zW9B~X3Vd17V%nP(iQpq>?(LabCPsEVvwgb2IYXl5thwhup5!R$MxcXOE8T5Lx=;2J zsBifk+8v!^2t`3*-J&0_lT*JG6MPAQKJPA`K>4%_)7z~NdomN>6xgk$tbJx=-TRfe ze&)3>%A{Q&WVROy)RMO^k;M&~vu4cE1b@kU+P;}Mi%Jr=%aO)_TWTQWp=KEZgfWz4rE2A+L}6 zS!mMLJ29Z*nI7{z?(Ig%j(C7k)Wfz2@e@AQP{nom&~=O?__Tw*6@-R1!9X8JKWVdU zoHm2OSq+tS^W>H)YP;1WKTZ`AE$=|Z?zEPG^cM&zh`6{?MaJFr?9)4in)b*9!a4r; z+hBMei_aVY3|LJa5)c`Jt-q82PKZE>dM_oZm%<11?|7@mqjfkW8WTwr_zw1&W15ZP z)C$hC-~6Wz#+K{1f@7iu(;BRSKj!MN#xLE8seFgq{lCBc5G^rcxU|sc!kXxO+(JSQ z1}mV%3@VnjV8=nkM&BR&TnmW_*It|yOY`O<_~cn3+a_DrK|^N^Udo&Eats_z(;2e_ z`Vf}%@}Wg6so7yPd08ig_$$_YMP3S$8^Ndgk64!w;}**pe|=HHpqKZl-!G7x6d{1}M*J5{yTZP+KOi7r01eX?gxeFrfwk>Fg@JgrC+c%$$ks5cf6;(a*d zx8YcG{N$V?cnY!OkZY%67-QG$Oqj55U}Q-V3QSVR$t1`)L||&9B=dGU9jtG!ZmM*i z{3)G~CPKI1>`y`L2-qq>G?s`~`@N*F?Tr-=R&RTJ)b~!DW6L6BF8cXUM%ujxom9x4 zMY+R++*TH%LZz&agr5xWC`O>>zr)>Dq`S3AxEZ>~M!ZlSFyC->o~l zxw-N4M?nq|e5&qP3rs&ICTx3}dQ@Z5c|kpFG_4VN-!B{q3i5h^Rwk#uO2&5VWkej& zy_gz5p-rli2ESGKrl{Sh{Zna!Vs@QLQF{W^iOPFC#@g=&WrBKphMtMpDE1RlknVn6 zIT#9LNQ!i6A{w+w4IzU-Lb#Br;N3pTK3b_hC_=h*^UKjK5)=~tY{o0n@p>q%W4=`e z3akb_Y$J^!Ql89w9fh~VK9{jQI31%M9#3Ak=dreE>E@}+4pVW6pK?vl-!t6uyI&kG z6!(OhmP0Bb^wm$$;YQ>SdAz%aA>5@!CO{Nz{ZPa+PZI%1y@K`AJl*eAveA^m-4zJ)o8n4=3JvDii|j=6XMC78c^?3$910{ zqL40>)xuSoIUuYS;#~zDuMjM~cWHU9bCCjp!?Hg(U+&To%+@P$ElTXqFSQqmyPVR4 zbfJfKB4$CevLZ^!@SNxQc5M_t#+s=`|z^;`xM z>8ORg$`N318WcID#68%F9C=B0;V6Mf#wzu!1(f{--(q)h&BNm7=zGR?#VZo!CtFEj zoaynQS>OpqZd9U4|F$?{cj_`cjd)KSJNM=Yb|c$5hd{FDM*smrl-ojI&fXaxlhH~W zMRR0B!emL=aJy^Zj+nFAN z@DJ1{KGUXZylCxRg(^q#1xgE%UbsIsO#cyV@ zpkJ;6u{LmM)x|K$L$08biPVs11gpgX8S`%Xy<NSe>36V|8K{H{1A9oqeQ}nxg-mmx$g2ST>!9_4w*qDOIRd*G zwg`RAW!><~=}NGHL=EMb7dS%1T~BIum=}c<&5EK{`6k_`C>xVMB>PmnZz8K$&s|8q zU}6nYGP9fL^bfP<>rV*v&?|l(NG?s*Y+IDSJ zpLn$^K%I=h*RO-Kx-rIvQX~!zV_=}-xIWk@8W|k7t?&N>S?ny(0M#3jHI;G|iP#E7 zKn3kis&|**an#^0`su^~vIf7b*&!ZA*&L&LOYESfTPr_XVCREfb)GDx7e2c2jU-he6HaFo?Q^;KGff22SxY>W{ayuMEMb{K2sX}ukB zJd2mZhP(SI1WF+*YTRlXg>1^uxF|S0yw~z$r8mO{sH03xdtQ9cH!oKiEVcqc58eo$sd|+xPzjrGso&6k4TSh z=E#uMGbjozIqIPkwr2|W#_7@)^bf-uehZuF0I{#H)}V@(nYi$V6RP;rpg-)iMrG{- zB4KbNYIFP3{obx81S+nd5CBkFsY#lU_=a?#Jc;p(e@|GnR5rt(66w{RfE$jC>fr zQA;2!kmMFs!yh+3NVdDvnR=gRYEkxBGHebYe7gw3O9E#`Bt@q>dBP@>b4BZ}2D9EL z57rMb;gW6n{BUjE#3%6bq z1+*de-^+Dfp6c5pkh6INik=s)i{WvO?)2SfhIzyi4XS9b4O~q@WW*QG<3pKSRtg`>)mS|(@zz(&IFVd+#qWh<_vgb%%+Thi(JgV=o>&u8}>lu?`nLhq4Xr2of3=6`bM04B7;-isScUffCe z^7%)5=a=9=E7CvxJ8sd#jM#q`*d93PZT~HrMIu|LKX)#k-*1oFH_ebhhG2L}9&)ik zp+$x1Wt_Q@~=+O!WwE=YO_&eOfsXjgp>~zoU@`rl-6HqCg_VV z-hi1Asf6d77;UaMUg4*f-JLk(PB;);-+Kzu7MEWUaHqhNL3!hC`pCkjY-9oG6`5?E zqxI`vLy*;#r#)S$DRy4kmrDMUpiWmBI5He&dNY! zA>5a)G!O3% zuUg}#e}+Oym{T=eC)p551BzdcEZ-<^(`^WBRAEj6!gPd4O+lz`2fmcgfr5gy+F4*| zmaOaUyt2ULdZCv`(Qc2;m9u;)O}D#4q%`BpoVNC&b7DV-rO@`)iB*lP%h2s<31Mmb zb;%vG+;r%p=ov53aky21yfi6l4WG^rlJA5q+f(rMwdW+@)~8Z@AR>rb@9#`DdC>=P zwe3?OYYH-8;Fy5FpQgVDvX+T>4z|8r1&ruJXs zCxnCMUzzE5Wq(g%KY_nIrSos#|43=S&-DAz+}|^O!~au-f6nnc{P$hn-|&8lKjHt{ z^Zkzhz1jXZ-uHz``afFlzr%lLp8gH5`OD{j^H6_*|3BWhdb#obSo^O|*uQ_LzxTra gUN!mOz`r|V3NlbXpYJb3eN@22%kK%D{^x)H1^Gk!!TUO=Zu211TI0P)n&lV=PE%@{PSA%)|Vq$Ns;AHRM%&71xhW`2h`VX;) zsst-zP!JGTFc1*re~KA8I54=|+TbC>}Fo#`m=+DTnD-)A-@b=a54o+e3&Y zq?(D*(7xQs>ha*pmO=`d?bAgJ+?*Y^*ONXi4#r8hg95pG&{yLf(_262W zU~TYqsvkZAl0n;K6gbA2&VCeH9|AsU zy*U>cIQdNXU4Te#D9Hw>{ejVg!$wN`%s%f~em?|pFB#}&$`wa^KY~uv? zeg@j@jF2nXw{g+;kn`UTfplUPlX!KA&Z|RE{^<~7dnePM9*IemmFr_d4!MhZB2|aU6X{m;n*E(C5U;jjsau<3?}xOe?38jg&-_H$!S!jm;WZV zl|p{dkY(bwy*)_jk37f@r)?FM6C0jcSvD!wL*u4<Gt5xU6+jEot!l3?E5y93-Kp3MML z9nB0ajvQ0q;esM7Ve0AL0&4$m&8lDLxxl*94{e;r@}8$I2i*o3^4TN@3BfNd_xFUO zzbykm;jJ|7tJP6nt&a9DtGhS@>}`MAy(B@_I!F*X^gQJG&6iJSVa$#}xP>(eo)-C* zHDUl+2sd@t#ioMmE;o_P)VH3NaeX|zSK~4bo)|%HJImM7A3)wfyX$aNobK{N%CC&Z z1(@5=uXrjXmTvYVXqdKej)+$#Sg$yLOJM7Ny&Ice6|DuLHbL?8Q@`K>ipC6 z9lF}eU%4=SH!7Zx7z8Hx1zXu=lyh>o+X3`-ClF@27}~^dZN`q_0-kTY0QJU+8lpq| zj}Wd^=Sh>hjdbt7wQQ^>E_v;GphN&p&d<;8-^zodh#y`p`FR4@@8@qL6HADr#72jn zc^H3ebiO>+-M_u+1@~{_k`1gEU>rLEu+ao^%WKrrvgG#0u_jPf1^4~%NUr-) zGU^JJU{V$RK@mUYyeO!n!+4`Ryk39zusmQ%s*ngPBt4~JxIBHL&_7GSCBhp|PxqS= zglg}s5_7E6TM+_Lt?{C&vKdr5TsB9&AmB3YWoG}4OO)*}CJ9ob4g`>@n^LNZHm{D# z*5G^Gf2_IW!G+ZP820eZN5J=E-HcR8`i56lqzMlZuJhzU56 zn~75z7-_E&o6yPGB6cp%Iw3Wrh09b7Su75@0VH13-^Dox%GDl)v; z56H4_GLlcF?Z2;xeP49GAzndqv!RyK@FDP_BIQ9OTX;?m&<@&K_Sxx#5MQK5So{7& zV3B5E(AQ_1I!A)|#d&hJG%zfFVXqfPzA%dlzD>r(`Rs5=8Y_Lk#s7zxzZf) z$u?Zgx`tLu1phjW>jcShj&S?EU-;K&WXdOE-&3SZ7gEvM?%2=qT`mx-Al+Gg4j`Ko zJ=`D{d+`Jy?#@I=AV6;58<2JUYj6;Ixe!o)7}R2PP%%$QjliAwI*4*&Ll{(%Uew}{ zU~)-VnD_ChsHsH6WOPFB4r1eP!R_!YxqqBmP>5zkCVG+kk@}lc`&UxZkbr%8+UAbY zrE<7A-2mWns(F>5b+j$wFwO6;Lr=e7cz-{=6Oq9gm0O9Qd(3&$?Ztd?oicP`a8S<# z0VW-qoyO$AgEysF_Ov|OZnNB`7AzB;XujWK>7*z0B7D0S5}o-J_t;*pHv*G)%#_&O8DAo=Is3E;Ql#_% zLpOt>)(x}Ako(IUcNX%pV|iwit9nQktLY|##<$l;ZfiZW=_d^v00CvBGR`C`tC80oeRuTg_xb*Nn5b??wx^*;vXYXc!D518qCn&YT# zx(0=2VzJku(ALK7)>(7=hWp1Z4!!8NHR#+eO0ku8M|A+#zECD@(hc0Sg+}f{x|xT} z>jYz=5`N)^M{g9-bx*s2iA#8eSxYnK%pzA^KSoMlu-7>_W!LxU}oh3jpi+au8JUzT~V>_ig@^PVMA zLQM5V0{I0pI#dZ>k~UC4ryeig#4S0LlTL zTckS(zUJ4D9Q+tR6xMVzDHiH2QqYW$Bh2`$@XhkYbjf~_JXL1hWW70ffL`DK(fh9yOQ~nxc4x6==_0v|Nbao}%QwVTjzG-s`3PdTE5n9jgX%t5l~Gr%TTZ zQ>H7H%*?kQ?ZGT}i1TP4m|WHz$zh(u=FqKUywe2I0vg=ae?FWZ*?zkC{IwD1`WEK= zD?MVvlD%WRslPW~ZxVd!!_GNh?*6;CJx#(o13xkpfrxV#NNwpOraC028fPs2!z1eS z#q#dBd34DJ{xLN}q&-sBa>!5n@S*jFBdYsjJD@|UF6pD|NUEXbkj`8V9jn!(e)dKC z9*44fe0stJl_@rA-X5HSYR`f-RgHmPCw#pvK)b#gs*pEZ*0s5KH}OHT^u>00%N5uS z4I^$d)3KZZ0_qcchZbIToV{-h0;&b7`k$+wVF|VUn(rD(MPq!>`IUC$Y^((t4Gmkv zkKs zPDhNKM=Kh>H)lolf8Sl!vVKIhrEm9%_^7tgDXKl@pkG*h(@Htx+Pj+8{{c1zh!b)) zW;z=hY7K(&u6{&Bge@46JBsront}6dySuTb4Wbs7JzdlUkM4HNZf`he>X;_5UUYIh zhTI9$o-U!$-8dq908eU%VqF6@i-zr83(2|$Lly^{j_u_j>X)4YVyh_5M2p9OsE5ul z@7`r6h$6+WYawLQw4K(*7LL`yIM<4HEO$LA=f;aaa~uPlkOt==7zjU}o;)>!5AEO(Qq| z95}=JuoP45c8qB~w}mdSo{r-j5W$%WNBTOAKhdef|ClmaLYBL+6w|9Q8Z1SM%Ktgb zVO?N?Gd#fn-k6c|^dGicKSZ^s!x9J9>-=u8pTm~o#fF=geu!R{sV`^la0CM|X>ty=txh%sDBg0hb16*(5|m-)tk5AdB-7v~@7KkQMT z08|z~XFE9_!0mtG6QnvH3({VyY*3I88w6{!6=+gma1GVq;ZUHU-Dq#KD)S@C&35WSN*hTtkATISBhPks$r z-SMJH zSxwu1n+x4n-|_`~l!qLKxMYTjv}RVV#d9>?#y^82X!dKlkxi?oTCc*aNlP&XwJb-u7q`Aa2TyMF(sbGgfi9y|Lo6XqBF0`dv#cOyFq7LIpVR3f z7Ar_7kjbLEWq4r;u#_SL&0DZR5dc6^==sLaY1ml82dsltc1`9m23DEyY=($Q@kX=$ zq@~{}`>a(II)tUF#MaZ{en6#`1*7_=l6mzgC85u7Nl?e*s@WrJZLkzNMSgD)P6QVX zJ*Y~_=?gx`ix6+#wV!(qUujvMrB9>^5wyNiW+H~P1!Q`pPTNgE%DX7as?w_?w2uJ6 zx-Nx>?U6Y4!%1?tv4soV8y4LuV5thYpTt-?s?%AN6W&CxUqY1dh$Sq?PQ0z?4y+*~ zQRSyA*v|EvGSnW>ZdlN-4^>sVEIdKLJq>X1jv6tmJm)gWUhqWM8z-FBLvP=1{zUz8 z1p#a)T*zG0s-r%Yqz_Rrgly=eZR$GG&@l9p8LXW1mAwd<73A(Kf}vLx;zGxsL* z)EO}>7|*oX-7Vi;26%eb9B8Ms2iB zo6JTJRVPvTGAV=;9W|Omqa}b2VSOWNaSGseOEG-BGO1tFdG>aLVrA${THmaVhr73S z`&i%DnPanap4q3(^Z7wPpRA;tw3*=@bh^ByAZ_+a_^dwlB{bPLtv6GtJ^A!bXzq*8 z7xedLT{C=&A4>gF@5zxsDoV2=jzFU1v?H4 ztLX-`E#qb?!GNjbaB3gx1foxhD?Jzsh)7|G4Yhcq$8$rJ4&Tw^;@%U~1K>aeZb4>D zyV*bVN@fNfCY5tozJ)U&8t^qR}CMC}* zXq}BPTek;`V#9~B=m|VzM#bEfF`6&#q+ywB$2iOg`Zz$y$~cp+i|P7?7p8Sb;3X6q zn>9$GJ#Pal`J0-2MUGq8+z&N6^GgtLm-94a&51ZPPV_GIqZg)3o)fYiW6cDytThAD@9am^ct;kHp2pA@RW8 zp#pDqLwwx&u45h-xUB=r&Qu7jW!ok<@K#aG8;}7|A;qHDhUD{@QG$Exhk}X;_lBuq zAL_T(`&fe8VhF3$BsA~1-qgm^LTndRRn@8eVttKU!jB+W zgwkqh;|Q?hu+DJ}XcpX?Df-l+S$+1-{ryV_MwVOUX-?VECj0O~ZS`i>jcd!^Hv91A zG3_0kBBj+L{u8drMGS^_t={pR7ouK}lJvJC3;?<+UWaD@1F^CAE%3suw&Bw({U#iG zT|sebrqQ_5A-PuQ8FMF`K1L*o)HlIN3ioJn!4z*m`1k&cPZ~dvB_fJ@U0?%xB z$A@l=gg(1NaCk3|@_A3+kJEgKRHl2gvGfJ*zkW%=+VFnfM~dUUAczg+@D^mD3p~Cf zYaL;6kdYW@#z(q8mV#FjwTZ~#MWK?g!i;;)l_9vk!6_ULvNq-nY~cnV6JCs7=NdZ* z>?%v~;?|aAfb$wef5f>J-^$D!gS|4yqop5=ExWD!MXKI- zk65ft6lSs>evZ>MxPIu6@qidKR}czqt&NX3dc*G{8_BtcoUAynVa|xN^sOrl9{~gNrvpe zhTBSN>*>*_JzUHWxSRDAG|!0INyNVgoRJRNn4}T7C?(5!FY%8k<2^=jfkhT>#!C_Y z@NdH?Tqj1N($6|uf#5mh|Ae<1xNe!%L=^tOvYV@;*E7Cl?)I-{dRyaTaiHJ2xPXlLzwQkQK4i5b2B2=%6b+s|Th z%WEThasFz>ek6(k9zn|%YC=!@9LV}I=p{pSI)*dwD16=lNymH108c~gGuppPZIjqr zL}NUCwuu@mogs>ziHahV?%!zGs+RH~So$UAaw(ghcES^Vf^vFaFZ60NkV3oHBH7m zF)8Yme_|DeT_%1;|Fn+sZU@U*7kZ3HUFP0mcAx3QGm?w)<=h0`E~fk8H{`e>cQRWu zEz(H1y=Dt`8`!49(n~3(Vr5@6P*qyRk^(M#G*I&wPY8e#ql3C?EyjEokyCdDP{d?e zeg@(UZ}LDRTu#ZP3{JVK{NyuP4%C>I!~AjNcb5Uy*dcT<(8W*(fz~2?MYP^sLwH84 z$RUw=vu1T?zsk`OQ@?>Kj9gkRbHxD>u0Z-nJDRf?dIkdhox=61xiJ+L2JyXJ7bU}u zm2zl*XBrh(3L@lIafxjb|y%W=nOhKD^qJ9^h$upQ+l* zKHI!26#V8tVAfi=SY5a`+SY7534b-&kh~ljtJ#J>i8af*WT(lF#9a0KQ8hG45D!~k zF&d6g1)P(=8@20#SZQtaIOx+LUbWVtH>H7u2em=e2>xvHz?GoZ2YPYc**!!stksM5 z4>`?G8j+&LHLlclFP-!tc%v#QJZTMX)f;X8t1Q-r7Q7qJmLCsZ&`%!yIDl_-Kfv8q zE7OD=g5WkiA^m%I9VuYGK=NA2id6W=?)tT=%dI|xud4v z50#vFS&)Q$(cc(bx0D}>)QXI`kgGpl>(sMe(0?u_h$ALu54jsu37j6eNgGSd*#YSI zXi9hfkX$>>$x23kYPCpPO`wU&NWz`z!FsiK`+PBR(Q*51H?_9Z!{!jKo|+s@XKOG; zAvUnez`&Tk_4# zm`n6$K1XtOdyOld^kRo&0r36UVm!)w(0MN7T^Ta_<)&he5xm6&X7yQi$EpIvWDSa+n9sQEi5#A;hn_2>=WK+qj2B*kj!^;qGMgx1Mv zVRu>1Y5U{~?6%z2pIT|LcwV{BG{1ir*VwhSF6dP}Wk$MCzk9N6){scyx`q@F0-;Z> zac3EYTMZc$!i#_o(=}yD=zNV2X0$qD&~F?#YdvSlLf5=yg^Kl|cNn{Yl+)-B6PTGoz;_^~B?lX<~rNSgg}>Q9c9#Dp|a; zpPJwy=|=VK9y|amBK18~%R?>!Y@d|-B5+gXc6<`F)YfL+eSYRj_IcGIbMla4BCdz= z4xv%Rz{aDxTjbfc_d47iBG5pgKsQLff-Zo<&|89jv&?-PL*S$FGO1Z#Cg|;*^u=wa zMNga1UQF30Yc;qwHYbla0yAu{^d`}|tO3tv8baQWt${0n#y~kp_zia<9WUTG)H$^k ziJ2qk+icu=-d1ahF|0Ju#sPz`qX_5*SeROZqhi@e-dlAo_gfrzlV!J`a%8W}Aei|X zr-xBuTem*_(0O^>*}3o1<7>Y?I@r34mdA+me4G0aHsuS9zRD-|o!DfPFp9w6m$XqT z6bjSsV|)gD`?4Ybe7kvf@VM2{x0NQp^}N%wq383k_Wb-7`l6@jBJBM3)~hZtCnzXw zW7W^`+WT%mAhzq_`%aR){`2nP;ll#$s+(5ur57C{*Z(Q5I{fr^b>k)#7m zx|Vu+%2i2fI=yXRxgYiTp11C1lCDzT&T$VFcs|CfxJ-OT7n39A&MVMUl6>oTKlQa} z!&INwi^Kcw22XUailIfRb{Io5%b`seyHcdckqXbeHe`Vi4pz|~D!>~OjJl&+{h z4HRTiQ~2yr$v2y!H&=Z8Ob02*%F`%n*rx%d$>iYIwL47&403eKvaKP&w~57=2k!Os z;PVp;G~Ymh6ytHP(d?JUB*AXi3Wzb|`H=;ufSx>n#sD~C6kG{5C$`DncrOv_=PJ`*xojDDD@)J?6 zo*N5mj6R{dL9gAC^}KJh>QrLAnRk`SFi!xg^z_Xs`(&z?TU2O%^`z%Z%Jq&*6qj1} zOg34#l~f(U$+Rh_H4S`Il6NY2m6(gUwDF<}m&SyDcXoBIV9zDgiemPVi^gz~qrw5l zvdIkj)iZ|>nw8&$cjYqSli}9*^<>Rph*j3bL8_Mo)4}Z?M(h68v%_SX zZ2UkmshlYN%!j9wZY=@g!uX;XSH^es$dG+s#K@#GWrPzrzqNU*qPTVlNv6$w-6t{7 z?hO!S;Jpb9^NjC2D6%e&JgEUu(!p}gOw7E<5zq$v(B18Z7{Y(GvOkYf8hxr>s0_TEWfV0SDl1?@N%GPL)EBSewk`){TVywIJgg__w7ZA_RXBW=x2Q{# zA#bLOAeu;BS(9ex&TWBS*!>~gNYRvs;na7S@T(~9>7k}2?{NB1MWc+IH+0fQU!1v< zr|djg0`k<}MdqlZTEXI?>5sRBJSO=@niPeGM>JC!+c#d_SUnn&_d`myObg$x)#+9s zirc{rgR->cEc&)BVD}T&gpx~d!(CzXYuz=s)OI!kv$!HQ7k;Jfe^Y;YZ5R4)Uil7R zUJLK2e`Vul_I3ajLnE6%s3sk1Gj_{N=stN(e&OHN2N4UT6fGfb623QtRnO+iG8xc+ zB;`rI1oc{;Z5nzKxdm0eWv^^{9;mSeD zPSGa>Q$BI#Ih<(37&v?WYxok+_o!U<>nOn@7m1D)9W8*fj-+hpECpm@_JMe3v2QhT z!mV-&aLtMkUC3u70!%3l)QXv@m7+Vn#=V-IWrd>)&G(SBjg}Z)B#{|0ZS0w{21Xyk z%8vVJg&Y|pe6V_S1p>lx#w4M$oWKtZ)tl8&vXZ{M(cnDmZlxGI^UGoUX#c7%?x#jq|5vT2biSSm5|0297@GlxmE z4w?|EPa?l4p`b>r(3Z31QauU+mJlK0rtQ2-((R0$n8wBm#xYO)5v}kI?}W7?v?Adh zvSt8wLa=Oaw+qz)_w2IliA4A!h|t~gB~CIJ6Fd@mfv78%9Zyl)Z0ZE8qpc$uZ zd+XzkZ3}}OXw?36h)|m3hJDL z&A*3(j(kz5hY~OTXshK1V#n4lYWv8$N-nsLqyvU)g+1`5J@~LUi@^}g?8GTzWn)LwZcBetpIuNI*~2HGKRd`(b5p@#S1@q>U#Oq|8=(Y zdU6G#?__H8JBJRGgoNz53}Ps!@UHED2WwPg#EFbK9AsfSqjMwS zo^b>ts=6D)*R$Z638hQ8ke1dpLML+dHqR?OP1W-N!t0)d{Rj-FDyqr!cSex4#5k7x zZz==foifc__$SWOq$Q%Ea7qv(Fqu=bQCAXAI28;%=%(&KE!jkdgLNaU?t-FjPD`*KTZk%lR1acp%nIC%~#F=$(Hx>y13!L+NUs3wWc3Kh9hK4&2@&Qocs7WHt0xHq}qEnzqPm(0)yV z^;J9^Or3Rq=EBX%f6z9?Zc`qR5?WM^4hk!1z@qq5>ERwgYgj=meMeXo?jGg93_;PQ z6*&`7S8nk)G~Pz1PMX0&0})d$XO)2Rdf&Vfh^h6d@pzMsAgRRrjw^di zFhE)LPV3QG3-5@?k8rp`#KJc{iV;Vsw-?z`6c6RuAw5=(*Q5w|14^?q;hFJyg{t>b z8}`Zl^s>n6s2YZD`a@M=F^br=P_jltYF(-BLlrJYT@fc``tcT!zY!JS+~d?~-VV-_ zDGPC^Md+m%BWObM$q^Tt6l}YXf=(zbii4Yv6R0Z)Htxb!@H&x^vDCTnk1i1R++Wlb zncaNp=T>sqXLaMKT1nUM?GmoY>|E5+N&e0j{we%R->bU6VSjRme;@7d)YiYzt*>wMe=Gfq z==wYScaG-Ya0c*y!vCAG`F~CNClT>i`#I^z*Q)KGw8Wni{?AVN8QOofpO6Hqe?_L> z2m5;v`w9GIsrG*Z|3^ssy{F&Lz5ecL2KUb){IieW;lJL-${0rhmVuzZaVR)|&ip;NN8@ Wh4+wutUBaZ8vOL@`(#J^6ZBv1Cc~Qm literal 0 HcmV?d00001 diff --git a/hzims-service/safeproduct/src/main/resources/template/卫生考核表.xlsx b/hzims-service/safeproduct/src/main/resources/template/卫生考核表.xlsx deleted file mode 100644 index 93b2b21c51b27f4dbe290920c42962a950f66238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10754 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 R;CKq2CKAD822ek0|6fNza%KPk From b61c438e72246296910ad7783cf96111b102b518 Mon Sep 17 00:00:00 2001 From: liwen Date: Fri, 23 Aug 2024 11:03:28 +0800 Subject: [PATCH 2/9] =?UTF-8?q?update:=20=E5=8D=AB=E7=94=9F=E8=80=83?= =?UTF-8?q?=E6=A0=B8=E8=A1=A8=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hnac/hzims/safeproduct/controller/HygieneController.java | 3 +-- .../hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java | 8 ++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/HygieneController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/HygieneController.java index 7ac7509..5b37542 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/HygieneController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/HygieneController.java @@ -20,7 +20,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; @@ -41,7 +40,7 @@ import java.util.Map; @RequestMapping("/hygiene") @Business(module = Constants.APP_NAME, value = "卫生自查") @Api(value = "卫生自查", tags = "卫生自查接口") -public class HygieneController extends BladeController { +public class HygieneController { private final IHygienePlanService hygienePlanService; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java index 823ae61..22babe3 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/HygieneRecordServiceImpl.java @@ -235,6 +235,9 @@ public class HygieneRecordServiceImpl extends ServiceImpl params = BaseUtil.obj2Map(exportVO); String templateFile; + // 根据周数匹配不同模板文件 if (weekList.size() == 4) { templateFile = "template/卫生考核表(四周)" + SafeProductConstant.DOCX_SUFFIX; } else { templateFile = "template/卫生考核表(五周)" + SafeProductConstant.DOCX_SUFFIX; } - String wordPath = "D:/" + "/卫生考核表" + SafeProductConstant.DOCX_SUFFIX; - String pdfPath = "D:/" + "/卫生考核表" + SafeProductConstant.PDF_SUFFIX; + String wordPath = savePath + "/卫生考核表" + SafeProductConstant.DOCX_SUFFIX; + String pdfPath = savePath + "/卫生考核表" + SafeProductConstant.PDF_SUFFIX; BaseUtil.exportDocument(templateFile, params, wordPath, pdfPath, "",response); } From 7069843ced21a3644fae850a1dd56a1240464356 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Fri, 23 Aug 2024 11:47:12 +0800 Subject: [PATCH 3/9] =?UTF-8?q?#=E7=BB=BC=E5=90=88=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/electric/vo/ComprehensiveElectricVo.java | 65 ++++++++++++ .../hnac/hzims/electric/vo/DeviceElectricVo.java | 2 +- .../com/hnac/hzims/electric/vo/TableHeadVo.java | 2 +- .../controller/ElectricReportController.java | 10 ++ .../electric/service/IElectricReportService.java | 5 + .../service/impl/ElectricReportServiceImpl.java | 114 ++++++++++++++++----- 6 files changed, 168 insertions(+), 30 deletions(-) create mode 100644 hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java new file mode 100644 index 0000000..6d4da72 --- /dev/null +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java @@ -0,0 +1,65 @@ +package com.hnac.hzims.electric.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** + * @author ysj + */ +@Data +public class ComprehensiveElectricVo { + + @ApiModelProperty(value = "月份") + private String month; + + @ApiModelProperty(value = "本月电量") + private Double monthGenerate; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthGenerate; + + @ApiModelProperty(value = "月同比") + private Double lastMonthGenerateRate; + + @ApiModelProperty(value = "年发电量") + private Double yearGenerate; + + @ApiModelProperty(value = "去年同期") + private Double lastYearGenerate; + + @ApiModelProperty(value = "年同比") + private Double lastYearGenerateRate; + + + @ApiModelProperty(value = "本月降雨") + private Double monthRain; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthRain; + + @ApiModelProperty(value = "月同比") + private Double lastMonthRainRate; + + @ApiModelProperty(value = "年降雨量") + private Double yearRain; + + @ApiModelProperty(value = "去年同期") + private Double lastYearRain; + + @ApiModelProperty(value = "年同比") + private Double lastYearRainRate; + + + @ApiModelProperty(value = "本月等效小时") + private Double monthEquivalent; + + @ApiModelProperty(value = "去年同月") + private Double lastMonthEquivalent; + + @ApiModelProperty(value = "年等效小时") + private Double yearEquivalent; + + @ApiModelProperty(value = "去年同期") + private Double lastYearEquivalent; +} \ No newline at end of file diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java index 9c1f934..a709db1 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/DeviceElectricVo.java @@ -5,7 +5,7 @@ import lombok.Data; /** - * @author 表头 + * @author ysj */ @Data public class DeviceElectricVo { diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java index 2cfcb83..cddb9fa 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/TableHeadVo.java @@ -7,7 +7,7 @@ import java.util.List; /** - * @author 表头 + * @author ysj */ @Data public class TableHeadVo { diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java index 361658b..8dde5c1 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/controller/ElectricReportController.java @@ -2,6 +2,7 @@ package com.hnac.hzims.electric.controller; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.hnac.hzims.electric.service.IElectricReportService; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; import com.hnac.hzims.equipment.entity.EmAssociationEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; import java.util.Map; /** @@ -35,4 +37,12 @@ public class ElectricReportController extends BladeController { @RequestParam(value = "time") String time) { return R.data(service.basics(deptId,type,time)); } + + @GetMapping("/comprehensive") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "综合报表", notes = "传入 deptId") + public R> comprehensive(@RequestParam(value = "deptId") Long deptId, + @RequestParam(value = "year") String year) { + return R.data(service.comprehensive(deptId,year)); + } } \ No newline at end of file diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java index a579675..24bc9a2 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/IElectricReportService.java @@ -1,5 +1,8 @@ package com.hnac.hzims.electric.service; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; + +import java.util.List; import java.util.Map; /** @@ -9,4 +12,6 @@ public interface IElectricReportService { Map basics(Long deptId, Long type,String time); + + List comprehensive(Long deptId,String year); } diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java index 2c7e061..59276ea 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java @@ -1,6 +1,9 @@ package com.hnac.hzims.electric.service.impl; +import cn.hutool.core.io.unit.DataUnit; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.common.logs.utils.StringUtils; import com.hnac.hzims.electric.entity.ThirtyEntity; @@ -8,17 +11,15 @@ import com.hnac.hzims.electric.entity.ThreeEntity; import com.hnac.hzims.electric.service.IElectricReportService; import com.hnac.hzims.electric.service.ThirtyService; import com.hnac.hzims.electric.service.ThreeService; +import com.hnac.hzims.electric.vo.ComprehensiveElectricVo; import com.hnac.hzims.electric.vo.DeviceElectricVo; import com.hnac.hzims.electric.vo.TableHeadVo; -import com.hnac.hzims.equipment.entity.EmInfoEntity; -import com.hnac.hzims.equipment.service.IEmInfoService; +import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.feign.IStationClient; -import com.hnac.hzims.operational.station.vo.StationsByDeptIdsParamVo; import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; import com.hnac.hzinfo.datasearch.analyse.po.AnalyseCodeByAnalyseDataPO; import com.hnac.hzinfo.datasearch.analyse.po.AnalyzeDataConditionPO; -import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeDataConditionVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,9 +27,9 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.ObjectUtil; -import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.time.LocalDateTime; @@ -48,14 +49,16 @@ public class ElectricReportServiceImpl implements IElectricReportService { private final ThirtyService thirtyService; - private final IEmInfoService deviceService; - private final ISysClient sysClient; private final IStationClient stationClient; private final IAnalyseDataSearchClient analyseDataSearchClient; + private final RedisTemplate redisTemplate; + + public final static String DEVICE_CACHE_COFIG_FINAL = "hzims:equipment:emInfo:deviceCode.emInfoList"; + /** * 基础报表 * @param deptId @@ -92,6 +95,57 @@ public class ElectricReportServiceImpl implements IElectricReportService { } /** + * 综合报表 + * @param deptId + * @return + */ + @Override + public List comprehensive(Long deptId,String year) { + // 查询站点 + StationEntity param = new StationEntity(); + param.setRefDept(deptId); + R station = stationClient.getStationByCodeOrRedDept(param); + if(!station.isSuccess() || ObjectUtil.isEmpty(station.getData())){ + return new ArrayList<>(); + } + // 查询设备 + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(DEVICE_CACHE_COFIG_FINAL).toString(), new TypeReference>() {}); + if(CollectionUtil.isEmpty(devices)){ + return new ArrayList<>(); + } + // 设备装机容量 + double installedCapacity = devices.stream().filter(device->device.getCreateDept().equals(deptId)).mapToDouble(EminfoAndEmParamVo::getInstalledCapacity).sum(); + // 查询两年发电量 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(DateUtil.parse(year,"yyyy")); + calendar.add(Calendar.YEAR,1); + Date end = calendar.getTime(); + calendar.add(Calendar.YEAR,-2); + Date start = calendar.getTime(); + List threes = threeService.list(Wrappers.lambdaQuery() + .eq(ThreeEntity::getStationId,station.getData().getCode()) + .ge(ThreeEntity::getStrMonth, DateUtil.format(start,DateUtil.PATTERN_DATE)) + .le(ThreeEntity::getStrMonth, DateUtil.format(end,DateUtil.PATTERN_DATE)) + ); + + + calendar.setTime(DateUtil.parse(year,"yyyy")); + calendar.add(Calendar.YEAR,1); + Date finish = calendar.getTime(); + calendar.add(Calendar.YEAR,-1); + Date current = calendar.getTime(); + while (current.compareTo(finish) < 0){ + + + calendar.add(Calendar.MONTH,1); + current = calendar.getTime(); + } + + return null; + } + + + /** * 确认机构级别 * @param deptId * @return @@ -450,17 +504,17 @@ public class ElectricReportServiceImpl implements IElectricReportService { // 日 if (type == 0) { // 站点设备集合 - List devices = deviceService.list(Wrappers.lambdaQuery() - .eq(EmInfoEntity::getCreateDept,station.getData().getRefDept()) - .eq(EmInfoEntity::getEmType,2) - .eq(EmInfoEntity::getHomePageDisplay,1) - ); + List devices = JSONObject.parseObject(redisTemplate.opsForValue().get(DEVICE_CACHE_COFIG_FINAL).toString(), new TypeReference>() {}); if(CollectionUtil.isEmpty(devices)){ return new HashMap<>(); } + List stationDevices = devices.stream().filter(device->device.getCreateDept().equals(station.getData().getRefDept())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(stationDevices)){ + return new HashMap<>(); + } Date date = DateUtil.parse(time,DateUtil.PATTERN_DATE); // 根据设备查询当日有功/无功电量 - List electrics = this.deviceElectrics(devices,date); + List electrics = this.deviceElectrics(stationDevices,date); // 表头 List tableHeads = new ArrayList<>(); @@ -475,7 +529,7 @@ public class ElectricReportServiceImpl implements IElectricReportService { tableHeads.add(secondHead); // 根据设备分组 - devices.forEach(device->{ + stationDevices.forEach(device->{ TableHeadVo tableHead = new TableHeadVo(); tableHead.setTableName(device.getName() + "发电量(kWh)"); tableHead.setIsChildren(true); @@ -486,24 +540,25 @@ public class ElectricReportServiceImpl implements IElectricReportService { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH,1); Date end = calendar.getTime(); - calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.DAY_OF_MONTH,-1); Date start = calendar.getTime(); List> tableDate = new ArrayList<>(); while (start.compareTo(end) < 0){ List item = new ArrayList<>(); String hours = DateUtil.format(start,"yyyy-MM-dd HH"); - item.add(start.getMonth() + 1 + "月"); + item.add(start.getHours() + "时"); // 总计:有功、无功 item.add(electrics.stream().filter(electric -> electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); item.add(electrics.stream().filter(electric -> electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); // 遍历机组 - devices.stream().sorted(Comparator.comparing(EmInfoEntity::getEmIndex)).forEach(device->{ - item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getNumber()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); - item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getNumber()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); + stationDevices.stream().sorted(Comparator.comparing(EminfoAndEmParamVo::getOrd)).forEach(device->{ + item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getEmCode()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getGenerate).sum()); + item.add(electrics.stream().filter(electric -> electric.getDeviceCode().equals(device.getEmCode()) && electric.getStrTime().contains(hours)).mapToDouble(DeviceElectricVo::getReactiveGenerate).sum()); }); - calendar.add(Calendar.DAY_OF_MONTH,1); + calendar.add(Calendar.HOUR_OF_DAY,1); start = calendar.getTime(); tableDate.add(item); } @@ -641,18 +696,19 @@ public class ElectricReportServiceImpl implements IElectricReportService { * @param devices * @return */ - private List deviceElectrics(List devices,Date date) { + private List deviceElectrics(List devices,Date date) { List electrics = new ArrayList<>(); devices.forEach(device->{ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH,1); Date endTime = calendar.getTime(); LocalDateTime end = LocalDateTime.parse(DateUtil.format(new Date(), DateUtil.format(endTime,DateUtil.PATTERN_DATETIME)), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); - calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.DAY_OF_MONTH,-1); Date startTime = calendar.getTime(); LocalDateTime start = LocalDateTime.parse(DateUtil.format(new Date(), DateUtil.format(startTime,DateUtil.PATTERN_DATETIME)), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); AnalyseCodeByAnalyseDataPO param = new AnalyseCodeByAnalyseDataPO(); - param.setDeviceCode(device.getNumber()); + param.setDeviceCode(device.getEmCode()); List conditions = new ArrayList<>(); // 有功电量 AnalyzeDataConditionPO generate = new AnalyzeDataConditionPO(); @@ -674,7 +730,8 @@ public class ElectricReportServiceImpl implements IElectricReportService { reactive.setSignages("reactive_generation"); reactive.setTimeInterval(1); reactive.setBeginTime(start); - reactive.setEndTime(end);conditions.add(reactive); + reactive.setEndTime(end); + conditions.add(reactive); param.setSignboardConditions(conditions); R> result = analyseDataSearchClient.getAnalyzeDataByAnalyzeCodeAndSignages(param); if(!result.isSuccess() || ObjectUtil.isEmpty(result.getData())){ @@ -682,24 +739,25 @@ public class ElectricReportServiceImpl implements IElectricReportService { } while (startTime.compareTo(endTime) < 0){ DeviceElectricVo electric = new DeviceElectricVo(); + electric.setDeviceCode(device.getEmCode()); electric.setStrTime(DateUtil.format(startTime,"yyyy-MM-dd HH")); electric.setTime(startTime.getHours()); - if(ObjectUtil.isEmpty(result.getData().get(0)) || CollectionUtil.isEmpty(result.getData().get(0).getList())){ + if(CollectionUtil.isNotEmpty(result.getData()) && ObjectUtil.isNotEmpty(result.getData().get(0)) && CollectionUtil.isNotEmpty(result.getData().get(0).getList())){ electric.setGenerate(result.getData().get(0).getList().stream().filter(o->o.getTs().contains(electric.getStrTime())).mapToDouble(val->{ if(StringUtils.isEmpty(val.getVal())){ return 0.0; } - return Double.parseDouble(val.getVal()); + return Double.parseDouble(val.getVal()) * device.getRideCount(); }).sum()); }else{ electric.setGenerate(0.0); } - if(ObjectUtil.isEmpty(result.getData().get(1)) || CollectionUtil.isEmpty(result.getData().get(1).getList())){ + if(CollectionUtil.isNotEmpty(result.getData()) && result.getData().size() > 1 && ObjectUtil.isNotEmpty(result.getData().get(1)) && CollectionUtil.isNotEmpty(result.getData().get(1).getList())){ electric.setReactiveGenerate(result.getData().get(1).getList().stream().filter(o->o.getTs().contains(electric.getStrTime())).mapToDouble(val->{ if(StringUtils.isEmpty(val.getVal())){ return 0.0; } - return Double.parseDouble(val.getVal()); + return Double.parseDouble(val.getVal()) * device.getRideCount(); }).sum()); }else{ electric.setReactiveGenerate(0.0); From ebcd55bbbeeabdcf775cb6f3a37e8255fcb2870a Mon Sep 17 00:00:00 2001 From: luyie Date: Fri, 23 Aug 2024 17:08:23 +0800 Subject: [PATCH 4/9] =?UTF-8?q?add:=E5=A4=A7=E6=A8=A1=E5=9E=8B=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=EF=BC=8C=E5=BC=82=E5=B8=B8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bigmodel/zhipuai/constants/ErrorCode.java | 57 ++++++++++++++++++++++ .../zhipuai/handler/ResultBooleanStrategy.java | 16 ++++-- .../zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java | 8 +-- .../service/impl/ZhipuAnalysisServiceImpl.java | 55 +++++++++++---------- 4 files changed, 100 insertions(+), 36 deletions(-) create mode 100644 hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java new file mode 100644 index 0000000..c6f5d74 --- /dev/null +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/constants/ErrorCode.java @@ -0,0 +1,57 @@ +package com.hnac.hzims.bigmodel.zhipuai.constants; + +import com.hnac.hzinfo.exception.HzServiceException; +import lombok.Getter; +import org.springblade.core.tool.api.IResultCode; +import org.springblade.core.tool.api.ResultCode; + +/** + * @Author: ypj + * @Date: 2024/8/22 11:17 + */ +@Getter +public enum ErrorCode implements IResultCode { + + GET_DATA_FAILURE(1888000001, "获取数据失败"), + ANALYSIS_FAILURE(1888000002, "分析失败"), + STRATEGY_NOT_FOUND(1888000003, "策略未找到"), + GET_FILE_CONTENT_FAILURE(1888000004, "获取文件内容失败"), + REQUEST_TEXT_IS_EMPTY(1888000005, "交互文字内容不能为空"), + EMPTY_ANALYSIS_TYPE(1888000006, "识别类型为空"), + UNKNOWN_ANALYSIS_TYPE(1888000007, "未知的识别类型"), + NO_COMPARATOR(1888000008, "未获取到对比对象"), + NO_COMPARISON_TYPE(1888000009, "未获取到对比类型"), + GET_RESULT_FAIL(1888000010, "获取结果失败"),; + + private final int code; + private final String msg; + + ErrorCode(int code, String msg) { + this.code = code; + this.msg = msg; + } + + + @Override + public String getMessage() { + return this.msg; + } + + public HzServiceException throwException() { + return new HzServiceException(this); + } + + public static HzServiceException throwCommonException(String msg) { + return new HzServiceException(new IResultCode() { + @Override + public String getMessage() { + return msg; + } + + @Override + public int getCode() { + return ResultCode.FAILURE.getCode(); + } + }); + } +} diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java index e2a85bd..477c3a8 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ResultBooleanStrategy.java @@ -2,9 +2,9 @@ package com.hnac.hzims.bigmodel.zhipuai.handler; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; import com.hnac.hzims.bigmodel.zhipuai.constants.ComparisonType; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; -import com.hnac.hzinfo.exception.HzServiceException; import org.springframework.util.Assert; import java.util.Objects; @@ -23,18 +23,24 @@ public class ResultBooleanStrategy implements ResultStrategy { public Boolean getResult(ZhipuAnalysisInfoEntity info, Object resultData) { Object comparator = convertOriginalData(info.getResultCondition(), info.getResultType()); Assert.isTrue(Objects.nonNull(comparator), () -> { - throw new HzServiceException("没有获取到对比对象"); + throw ErrorCode.NO_COMPARATOR.throwException(); }); ComparisonType comparisonType = BaseEnum.getInstance(info.getResultJudgeModel(), ComparisonType.class); - switch (comparisonType) { + Assert.isTrue(Objects.nonNull(comparisonType), () -> { + throw ErrorCode.NO_COMPARISON_TYPE.throwException(); + }); + switch (Objects.requireNonNull(comparisonType)) { case EQUAL: return comparator.equals(resultData); case GREATER: - return ((Comparable) comparator).compareTo(resultData) < 0; + if (comparator instanceof Comparable && resultData instanceof Comparable) { + return ((Comparable) comparator).compareTo((Comparable)resultData) < 0; + } + break; case LESS: return ((Comparable) comparator).compareTo(resultData) > 0; } - return null; + throw ErrorCode.GET_RESULT_FAIL.throwException(); } } diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java index 0f0925a..6e98f7b 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/handler/ZhipuAnalysisHandlerGlm4v.java @@ -1,6 +1,7 @@ package com.hnac.hzims.bigmodel.zhipuai.handler; import cn.hutool.core.lang.Assert; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzinfo.exception.HzServiceException; import com.zhipu.oapi.Constants; import com.zhipu.oapi.service.v4.model.ChatCompletionRequest; @@ -58,14 +59,13 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { messages.add(chatMessage); String requestId = String.format(requestIdTemplate, System.currentTimeMillis()); - ChatCompletionRequest request = ChatCompletionRequest.builder() + return ChatCompletionRequest.builder() .model(getAnalysisModel()) .stream(Boolean.FALSE) .invokeMethod(Constants.invokeMethod) .messages(messages) .requestId(requestId) .build(); - return request; } @Override @@ -73,7 +73,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { ModelApiResponse response = sendRequest(text, url); log.info("get zhi pu ai response : {}", Optional.ofNullable(response).map(JsonUtil::toJson).orElse("null")); Assert.isTrue(Objects.nonNull(response) && response.isSuccess(), () -> { - throw new HzServiceException(response.getMsg()); + throw ErrorCode.throwCommonException(Optional.ofNullable(response).map(ModelApiResponse::getMsg).orElse("没有收到大模型平台响应")); }); try { String resultJson = response.getData().getChoices().get(0).getMessage().getContent().toString(); @@ -81,7 +81,7 @@ public class ZhipuAnalysisHandlerGlm4v extends AbstractZhipuAnalysisHandler { return resultJson; } catch (Exception e) { log.info("get data from response error", e); - throw new HzServiceException("获取数据失败"); + throw ErrorCode.GET_DATA_FAILURE.throwException(); } } diff --git a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java index d3b9a78..0afde6f 100644 --- a/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java +++ b/hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/zhipuai/service/impl/ZhipuAnalysisServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisRequestDTO; import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisResponseDTO; import com.hnac.hzims.bigmodel.zhipuai.constants.BaseEnum; +import com.hnac.hzims.bigmodel.zhipuai.constants.ErrorCode; import com.hnac.hzims.bigmodel.zhipuai.constants.ResultStrategyType; import com.hnac.hzims.bigmodel.zhipuai.entity.ZhipuAnalysisInfoEntity; import com.hnac.hzims.bigmodel.zhipuai.handler.ResultStrategy; @@ -41,29 +42,29 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { private final ZhipuAnalysisInfoService infoService; - private final String multiQuestionBrief = "从给出的图片回答以下{}个问题\n"; + private static final String MULTI_QUESTION_BRIEF = "从给出的图片回答以下{}个问题\n"; - private final String multiQuestionPrefix = "第{}个问题,"; + private static final String MULTI_QUESTION_PREFIX = "第{}个问题,"; - private final String multiQuestionConstrains = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n"; + private static final String MULTI_QUESTION_CONSTRAINS = "- 不要在输出中添加任何注释和思考过程和其他多余的内容,以JSON格式输出简单结果,{}结果只包含'是'或者'否'\n"; - private final String multiQuestionConstrainsList = "'{}'代表第{}个问题,"; + private static final String MULTI_QUESTION_CONSTRAINS_LIST = "'{}'代表第{}个问题,"; @Override public ZhipuAnalysisFileResponse analysis(ZhipuAnalysisFileRequest request) { Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()) || StringUtil.isNotBlank(request.getUrl()), () -> { - throw new HzServiceException("文件为空"); + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); }); ZhipuAnalysisFileResponse response = new ZhipuAnalysisFileResponse(); ZhipuAnalysisInfoEntity info = getAnalysisInfo(request); Assert.isTrue(Objects.nonNull(info), () -> { - throw new HzServiceException("没有找到对应的策略信息"); + throw ErrorCode.STRATEGY_NOT_FOUND.throwException(); }); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(info.getModel()); Assert.isTrue(StringUtil.isNotBlank(info.getRequestContent()), () -> { - throw new HzServiceException("智谱平台交互内容为空"); + throw ErrorCode.REQUEST_TEXT_IS_EMPTY.throwException(); }); //拼接文字内容 StringBuilder textBuilder = new StringBuilder(); @@ -78,13 +79,13 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { Object resultObject = analyser.getResultValue(analyser.getText(), info.getResultKey(), getSendUrl(request)); Assert.isTrue(Objects.nonNull(resultObject), () -> { - throw new HzServiceException("智谱平台分析失败"); + throw ErrorCode.ANALYSIS_FAILURE.throwException(); }); String resultStr = resultObject.toString(); ResultStrategyType strategyType = BaseEnum.getInstance(info.getResultStrategy(), ResultStrategyType.class); Assert.isTrue(Objects.nonNull(strategyType), () -> { - throw new HzServiceException("没有找到对应的结果数据解析策略"); + throw ErrorCode.STRATEGY_NOT_FOUND.throwException(); }); ResultStrategy strategy = strategyType.getStrategy(); @@ -100,14 +101,14 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { if (StringUtil.isNotBlank(request.getUrl())) { return request.getUrl(); } - if (StringUtil.isNotBlank(request.getFilePath())) { - try { - return FileUtil.getBase64(request.getFilePath()); - } catch (IOException e) { - throw new HzServiceException("获取文件内容失败"); - } + Assert.isTrue(StringUtil.isNotBlank(request.getFilePath()), () -> { + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); + }); + try { + return FileUtil.getBase64(request.getFilePath()); + } catch (IOException e) { + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); } - return null; } @Override @@ -121,7 +122,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { .eq(StringUtil.isNotBlank(request.getCheckTypeSon()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSon()) .last("limit 1;")); } - log.info("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null")); + log.debug("the analysis information is {}", Optional.ofNullable(result).map(r -> JsonUtil.toJson(r)).orElse("null")); return result; } @@ -131,15 +132,15 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { BigModelAnalysisResponseDTO response = new BigModelAnalysisResponseDTO(); try { Assert.isTrue(StringUtil.isNotBlank(request.getUrl()), () -> { - throw new HzServiceException("文件为空"); + throw ErrorCode.GET_FILE_CONTENT_FAILURE.throwException(); }); Assert.isTrue(CollectionUtil.isNotEmpty(request.getCodeList()) || CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), () -> { - throw new HzServiceException("识别类型为空"); + throw ErrorCode.EMPTY_ANALYSIS_TYPE.throwException(); }); List infoList = infoService.list(Wrappers.lambdaQuery().in(CollectionUtil.isNotEmpty(request.getCodeList()), ZhipuAnalysisInfoEntity::getCode, request.getCodeList()) .in(CollectionUtil.isNotEmpty(request.getCheckTypeSonList()), ZhipuAnalysisInfoEntity::getCheckTypeSon, request.getCheckTypeSonList())); Assert.isTrue(CollectionUtil.isNotEmpty(infoList), () -> { - throw new HzServiceException("未知的识别类型"); + throw ErrorCode.UNKNOWN_ANALYSIS_TYPE.throwException(); }); ZhipuAnalyser analyser = analysisFactory.getAnalysisStrategy(infoList.get(0).getModel()); @@ -148,7 +149,7 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { if (null == resultMap) { response.setCode(ResultCode.FAILURE.getCode()); - response.setMsg("智谱大模型分析失败"); + response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg()); return response; } @@ -184,9 +185,9 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { response.setMsg(e.getMessage()); } else { response.setCode(ResultCode.FAILURE.getCode()); - response.setMsg("智谱大模型分析失败"); + response.setMsg(ErrorCode.ANALYSIS_FAILURE.getMsg()); } - log.error("智谱大模型分析失败", e); + log.error(ErrorCode.ANALYSIS_FAILURE.getMessage(), e); } return response; } @@ -196,18 +197,18 @@ public class ZhipuAnalysisServiceImpl implements ZhipuAnalysisService { StringBuilder titleBuilder = new StringBuilder(); StringBuilder formatBuilder = new StringBuilder(); stringBuilder.append(ZhipuAnalyser.QUESTION_PROFILE) - .append(StringUtil.format(multiQuestionBrief, infoList.size())); + .append(StringUtil.format(MULTI_QUESTION_BRIEF, infoList.size())); formatBuilder.append("{"); for (int index = 1; index <= infoList.size(); index++) { ZhipuAnalysisInfoEntity infoEntity = infoList.get(index - 1); - stringBuilder.append(StringUtil.format(multiQuestionPrefix, index)); - titleBuilder.append(StringUtil.format(multiQuestionConstrainsList, infoEntity.getResultKey(), index)); + stringBuilder.append(StringUtil.format(MULTI_QUESTION_PREFIX, index)); + titleBuilder.append(StringUtil.format(MULTI_QUESTION_CONSTRAINS_LIST, infoEntity.getResultKey(), index)); formatBuilder.append(infoEntity.getRequestOutputFormat()).append(","); } formatBuilder.deleteCharAt(formatBuilder.length() - 1); formatBuilder.append("}"); stringBuilder.append(ZhipuAnalyser.QUESTION_CONSTRAINS) - .append(StringUtil.format(multiQuestionConstrains, titleBuilder.toString())) + .append(StringUtil.format(MULTI_QUESTION_CONSTRAINS, titleBuilder.toString())) .append(ZhipuAnalyser.QUESTION_OUTPUT_FORMAT).append(formatBuilder); return stringBuilder.toString(); } From 3b55e5954a872f26f996c3c2f6debfbb9f72801c Mon Sep 17 00:00:00 2001 From: liwen Date: Mon, 26 Aug 2024 09:20:47 +0800 Subject: [PATCH 5/9] =?UTF-8?q?update:=20=E5=AE=89=E5=85=A8=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../safeproduct/vo/CarMaintenanceDetailImgVO.java | 22 ++++++++++++ .../safeproduct/vo/CarMaintenanceDetailStrVO.java | 21 +++++++++++ .../safeproduct/vo/CarMaintenanceDetailVO.java | 5 --- .../safeproduct/vo/CarUsedRecordDetailImgVO.java | 22 ++++++++++++ .../safeproduct/vo/CarUsedRecordDetailStrVO.java | 21 +++++++++++ .../safeproduct/vo/CarUsedRecordDetailVO.java | 5 --- .../vo/ConferenceRecordDetailImgVO.java | 22 ++++++++++++ .../vo/ConferenceRecordDetailStrVO.java | 21 +++++++++++ .../safeproduct/vo/ConferenceRecordDetailVO.java | 7 ---- .../safeproduct/vo/RehearsalRecordDetailImgVO.java | 6 ++-- .../safeproduct/vo/RehearsalRecordDetailStrVO.java | 6 ++-- .../safeproduct/vo/TrainRecordDetailImgVO.java | 22 ++++++++++++ .../safeproduct/vo/TrainRecordDetailStrVO.java | 21 +++++++++++ .../hzims/safeproduct/vo/TrainRecordDetailVO.java | 7 ---- .../safeproduct/controller/CarController.java | 3 +- .../controller/ConferenceController.java | 3 +- .../controller/RehearsalController.java | 3 +- .../safeproduct/controller/TrainController.java | 3 +- .../service/ICarMaintenanceService.java | 1 - .../service/impl/CarMaintenanceServiceImpl.java | 40 +++++++++++++-------- .../service/impl/CarUsedRecordServiceImpl.java | 28 ++++++++++----- .../service/impl/ConferenceRecordServiceImpl.java | 22 ++++++++---- .../service/impl/TrainRecordServiceImpl.java | 35 ++++++++++++------ .../template/卫生考核表(五周).docx | Bin 12280 -> 12350 bytes .../template/卫生考核表(四周).docx | Bin 12116 -> 12196 bytes 25 files changed, 268 insertions(+), 78 deletions(-) create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailImgVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailStrVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailImgVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailStrVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailImgVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailStrVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailImgVO.java create mode 100644 hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailStrVO.java diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailImgVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailImgVO.java new file mode 100644 index 0000000..c75df94 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailImgVO.java @@ -0,0 +1,22 @@ +package com.hnac.hzims.safeproduct.vo; + +import cn.afterturn.easypoi.entity.ImageEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "车辆维保记录VO类-图片实体类") +public class CarMaintenanceDetailImgVO extends CarMaintenanceDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailStrVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailStrVO.java new file mode 100644 index 0000000..c8f8e75 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailStrVO.java @@ -0,0 +1,21 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "车辆维保记录VO类-图片字符串类") +public class CarMaintenanceDetailStrVO extends CarMaintenanceDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailVO.java index 554bd7b..8d18ae4 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarMaintenanceDetailVO.java @@ -1,12 +1,10 @@ package com.hnac.hzims.safeproduct.vo; -import cn.afterturn.easypoi.entity.ImageEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; -import java.util.List; /** * @author liwen @@ -64,9 +62,6 @@ public class CarMaintenanceDetailVO { @ApiModelProperty("维保类型") private String maintenanceType; - @ApiModelProperty("图片列表") - private List images; - @ApiModelProperty("年份") private String year; diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailImgVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailImgVO.java new file mode 100644 index 0000000..6310c23 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailImgVO.java @@ -0,0 +1,22 @@ +package com.hnac.hzims.safeproduct.vo; + +import cn.afterturn.easypoi.entity.ImageEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "车辆用车记录VO类-图片实体类") +public class CarUsedRecordDetailImgVO extends CarUsedRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailStrVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailStrVO.java new file mode 100644 index 0000000..2d5f620 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailStrVO.java @@ -0,0 +1,21 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "车辆用车记录VO类-图片字符串类") +public class CarUsedRecordDetailStrVO extends CarUsedRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailVO.java index 50564f4..5f496bd 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/CarUsedRecordDetailVO.java @@ -1,13 +1,11 @@ package com.hnac.hzims.safeproduct.vo; -import cn.afterturn.easypoi.entity.ImageEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; -import java.util.List; /** * @author liwen @@ -65,9 +63,6 @@ public class CarUsedRecordDetailVO { @ApiModelProperty("确认时间") private Date confirmationTime; - @ApiModelProperty("图片列表") - private List images; - @ApiModelProperty("年份") private String year; diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailImgVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailImgVO.java new file mode 100644 index 0000000..839ac6a --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailImgVO.java @@ -0,0 +1,22 @@ +package com.hnac.hzims.safeproduct.vo; + +import cn.afterturn.easypoi.entity.ImageEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "会议记录VO类-图片实体类") +public class ConferenceRecordDetailImgVO extends ConferenceRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailStrVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailStrVO.java new file mode 100644 index 0000000..2650b11 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailStrVO.java @@ -0,0 +1,21 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "会议记录VO类-图片实体类") +public class ConferenceRecordDetailStrVO extends ConferenceRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailVO.java index 6bfaadb..7abdf86 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/ConferenceRecordDetailVO.java @@ -1,13 +1,9 @@ package com.hnac.hzims.safeproduct.vo; -import cn.afterturn.easypoi.entity.ImageEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Date; -import java.util.List; - /** * @author liwen * @date 2024-01-15 @@ -55,9 +51,6 @@ public class ConferenceRecordDetailVO { @ApiModelProperty("会议附件") private String filePath; - @ApiModelProperty("图片列表") - private List images; - @ApiModelProperty("年份") private String year; diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailImgVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailImgVO.java index abb312d..bbd34fa 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailImgVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailImgVO.java @@ -4,12 +4,14 @@ import cn.afterturn.easypoi.entity.ImageEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.List; @Data -@ApiModel(value = "演练记录表VO类") -public class RehearsalRecordDetailImgVO extends RehearsalRecordDetailVO{ +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "演练记录表VO类-图片实体类") +public class RehearsalRecordDetailImgVO extends RehearsalRecordDetailVO { @ApiModelProperty("图片列表") private List images; diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailStrVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailStrVO.java index 2a7c8bf..953a997 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailStrVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/RehearsalRecordDetailStrVO.java @@ -3,12 +3,14 @@ package com.hnac.hzims.safeproduct.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import java.util.List; @Data -@ApiModel(value = "演练记录表VO类") -public class RehearsalRecordDetailStrVO extends RehearsalRecordDetailVO{ +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "演练记录表VO类-图片字符串类") +public class RehearsalRecordDetailStrVO extends RehearsalRecordDetailVO { @ApiModelProperty("图片列表") private List images; diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailImgVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailImgVO.java new file mode 100644 index 0000000..6d5724a --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailImgVO.java @@ -0,0 +1,22 @@ +package com.hnac.hzims.safeproduct.vo; + +import cn.afterturn.easypoi.entity.ImageEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "培训记录表VO类-图片实体类") +public class TrainRecordDetailImgVO extends TrainRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailStrVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailStrVO.java new file mode 100644 index 0000000..a5a23f9 --- /dev/null +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailStrVO.java @@ -0,0 +1,21 @@ +package com.hnac.hzims.safeproduct.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * @author liwen + * @date 2024-08-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "培训记录表VO类-图片字符串类") +public class TrainRecordDetailStrVO extends TrainRecordDetailVO { + + @ApiModelProperty("图片列表") + private List images; +} diff --git a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailVO.java b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailVO.java index e8850de..2eb2148 100644 --- a/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailVO.java +++ b/hzims-service-api/safeproduct-api/src/main/java/com/hnac/hzims/safeproduct/vo/TrainRecordDetailVO.java @@ -1,13 +1,9 @@ package com.hnac.hzims.safeproduct.vo; -import cn.afterturn.easypoi.entity.ImageEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.util.Date; -import java.util.List; - /** * @author liwen * @date 2024-01-15 @@ -55,9 +51,6 @@ public class TrainRecordDetailVO { @ApiModelProperty("培训附件") private String filePath; - @ApiModelProperty("图片列表") - private List images; - @ApiModelProperty("年份") private String year; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/CarController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/CarController.java index d88ca90..33d77e2 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/CarController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/CarController.java @@ -19,7 +19,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; @@ -41,7 +40,7 @@ import java.util.Map; @AllArgsConstructor @Business(module = Constants.APP_NAME, value = "车辆管理", ignore = false) @Api(value = "车辆管理", tags = "车辆管理接口") -public class CarController extends BladeController { +public class CarController { private final ICarService carService; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java index 119188f..fcd7aac 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/ConferenceController.java @@ -17,7 +17,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; @@ -38,7 +37,7 @@ import java.util.Map; @RequestMapping("/conference") @Business(module = Constants.APP_NAME, value = "会议管理", ignore = false) @Api(value = "会议管理", tags = "会议管理接口") -public class ConferenceController extends BladeController { +public class ConferenceController { private final IConferencePlanService conferencePlanService; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/RehearsalController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/RehearsalController.java index 08d28ce..af81138 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/RehearsalController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/RehearsalController.java @@ -19,7 +19,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,7 @@ import java.util.Map; @RequestMapping("/rehearsal") @Business(module = Constants.APP_NAME, value = "演练管理", ignore = false) @Api(value = "演练管理", tags = "演练管理接口") -public class RehearsalController extends BladeController { +public class RehearsalController { private final IRehearsalRecordService rehearsalRecordService; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/TrainController.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/TrainController.java index ef252f9..3c39c65 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/TrainController.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/controller/TrainController.java @@ -23,7 +23,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; @@ -45,7 +44,7 @@ import java.util.Map; @RequestMapping("/train") @Business(module = Constants.APP_NAME, value = "培训管理", ignore = false) @Api(value = "培训管理", tags = "培训管理接口") -public class TrainController extends BladeController { +public class TrainController { private final ITrainPlanService trainPlanService; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/ICarMaintenanceService.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/ICarMaintenanceService.java index 7f6531a..1e48db1 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/ICarMaintenanceService.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/ICarMaintenanceService.java @@ -10,7 +10,6 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import javax.servlet.http.HttpServletResponse; -import java.util.List; import java.util.Map; /** diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarMaintenanceServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarMaintenanceServiceImpl.java index dec42a9..8da1751 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarMaintenanceServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarMaintenanceServiceImpl.java @@ -17,11 +17,14 @@ import com.hnac.hzims.safeproduct.mapper.CarMaintenanceMapper; import com.hnac.hzims.safeproduct.mapper.CarMapper; import com.hnac.hzims.safeproduct.service.ICarMaintenanceService; import com.hnac.hzims.safeproduct.utils.BaseUtil; +import com.hnac.hzims.safeproduct.vo.CarMaintenanceDetailImgVO; +import com.hnac.hzims.safeproduct.vo.CarMaintenanceDetailStrVO; import com.hnac.hzims.safeproduct.vo.CarMaintenanceDetailVO; import com.hnac.hzims.safeproduct.vo.CarMaintenancePageVO; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -123,20 +126,6 @@ public class CarMaintenanceServiceImpl extends ServiceImpl list = new ArrayList<>(); - if (StringUtils.isNotEmpty(carMaintenanceDetailVO.getImgPath())) { - String[] imgArr = carMaintenanceDetailVO.getImgPath().split(","); - for (String img : imgArr) { - ImageEntity imageEntity = new ImageEntity(BaseUtil.imgToByte(savePath + - BaseUtil.downloadFileByUrl(img, savePath)), 180, 150); - list.add(imageEntity); - } - } else { - // 添加空的ImageEntity,防止数据填入时显示"{{" - list.add(new ImageEntity()); - } - carMaintenanceDetailVO.setImages(list); // 表头年月 String code = carMaintenanceDetailVO.getCode(); carMaintenanceDetailVO.setYear(code.substring(4, 8)); @@ -148,7 +137,28 @@ public class CarMaintenanceServiceImpl extends ServiceImpl params = BaseUtil.obj2Map(carMaintenanceDetailVO); + // 图片 + Map params; + if (StringUtils.isNotEmpty(carMaintenanceDetailVO.getImgPath())) { + List list = new ArrayList<>(); + CarMaintenanceDetailImgVO imgVO = new CarMaintenanceDetailImgVO(); + BeanUtils.copyProperties(carMaintenanceDetailVO, imgVO); + String[] imgArr = carMaintenanceDetailVO.getImgPath().split(","); + for (String img : imgArr) { + ImageEntity imageEntity = new ImageEntity(BaseUtil.imgToByte(savePath + + BaseUtil.downloadFileByUrl(img, savePath)), 180, 150); + list.add(imageEntity); + } + imgVO.setImages(list); + params = BaseUtil.obj2Map(imgVO); + } else { + List list = new ArrayList<>(); + list.add(""); + CarMaintenanceDetailStrVO strVO = new CarMaintenanceDetailStrVO(); + BeanUtils.copyProperties(carMaintenanceDetailVO, strVO); + strVO.setImages(list); + params = BaseUtil.obj2Map(strVO); + } String templateFile = "template/车辆维保记录单" + SafeProductConstant.DOCX_SUFFIX; String wordPath = savePath + "/车辆维保记录单" + SafeProductConstant.DOCX_SUFFIX; String pdfPath = savePath + "/车辆维保记录单" + SafeProductConstant.PDF_SUFFIX; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarUsedRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarUsedRecordServiceImpl.java index 386e7c5..9c8de83 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarUsedRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/CarUsedRecordServiceImpl.java @@ -14,11 +14,14 @@ import com.hnac.hzims.safeproduct.enums.CarUsedRecordEnum; import com.hnac.hzims.safeproduct.mapper.CarUsedRecordMapper; import com.hnac.hzims.safeproduct.service.ICarUsedRecordService; import com.hnac.hzims.safeproduct.utils.BaseUtil; +import com.hnac.hzims.safeproduct.vo.CarUsedRecordDetailImgVO; +import com.hnac.hzims.safeproduct.vo.CarUsedRecordDetailStrVO; import com.hnac.hzims.safeproduct.vo.CarUsedRecordDetailVO; import com.hnac.hzims.safeproduct.vo.CarUsedRecordPageVO; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -117,25 +120,32 @@ public class CarUsedRecordServiceImpl extends ServiceImpl list = new ArrayList<>(); + Map params; if (StringUtils.isNotEmpty(carUsedRecordDetailVO.getImgPath())) { + List list = new ArrayList<>(); + CarUsedRecordDetailImgVO imgVO = new CarUsedRecordDetailImgVO(); + BeanUtils.copyProperties(carUsedRecordDetailVO, imgVO); String[] imgArr = carUsedRecordDetailVO.getImgPath().split(","); for (String img : imgArr) { ImageEntity imageEntity = new ImageEntity(BaseUtil.imgToByte(savePath + BaseUtil.downloadFileByUrl(img, savePath)), 180, 150); list.add(imageEntity); } + imgVO.setImages(list); + params = BaseUtil.obj2Map(imgVO); } else { - // 添加空的ImageEntity,防止数据填入时显示"{{" - list.add(new ImageEntity()); + List list = new ArrayList<>(); + list.add(""); + CarUsedRecordDetailStrVO strVO = new CarUsedRecordDetailStrVO(); + BeanUtils.copyProperties(carUsedRecordDetailVO, strVO); + strVO.setImages(list); + params = BaseUtil.obj2Map(strVO); } - carUsedRecordDetailVO.setImages(list); - // 表头年月 - String code = carUsedRecordDetailVO.getCode(); - carUsedRecordDetailVO.setYear(code.substring(4, 8)); - carUsedRecordDetailVO.setMonth(code.substring(8, 10)); - Map params = BaseUtil.obj2Map(carUsedRecordDetailVO); String templateFile = "template/用车记录单" + SafeProductConstant.DOCX_SUFFIX; String wordPath = savePath + "/用车记录单" + SafeProductConstant.DOCX_SUFFIX; String pdfPath = savePath + "/用车记录单" + SafeProductConstant.PDF_SUFFIX; diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java index b8b4ed6..205a5f5 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/ConferenceRecordServiceImpl.java @@ -17,9 +17,12 @@ import com.hnac.hzims.safeproduct.mapper.ConferenceRecordMapper; import com.hnac.hzims.safeproduct.service.IConferenceRecordService; import com.hnac.hzims.safeproduct.utils.BaseUtil; import com.hnac.hzims.safeproduct.utils.TimeUtils; +import com.hnac.hzims.safeproduct.vo.ConferenceRecordDetailImgVO; +import com.hnac.hzims.safeproduct.vo.ConferenceRecordDetailStrVO; import com.hnac.hzims.safeproduct.vo.ConferenceRecordDetailVO; import com.hnac.hzims.safeproduct.vo.ConferenceRecordVO; import org.springblade.core.mp.support.Query; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -120,28 +123,33 @@ public class ConferenceRecordServiceImpl extends ServiceImpl list = new ArrayList<>(); + Map params; if (StringUtils.isNotEmpty(conferenceRecordDetailVO.getImgPath())) { + List list = new ArrayList<>(); + ConferenceRecordDetailImgVO imgVO = new ConferenceRecordDetailImgVO(); + BeanUtils.copyProperties(conferenceRecordDetailVO, imgVO); String[] imgArr = conferenceRecordDetailVO.getImgPath().split(","); for (String img : imgArr) { ImageEntity imageEntity = new ImageEntity(BaseUtil.imgToByte(savePath + BaseUtil.downloadFileByUrl(img, savePath)), 180, 150); list.add(imageEntity); } + imgVO.setImages(list); + params = BaseUtil.obj2Map(imgVO); } else { - // 添加空的ImageEntity,防止数据填入时显示"{{" - list.add(new ImageEntity()); + List list = new ArrayList<>(); + list.add(""); + ConferenceRecordDetailStrVO strVO = new ConferenceRecordDetailStrVO(); + BeanUtils.copyProperties(conferenceRecordDetailVO, strVO); + strVO.setImages(list); + params = BaseUtil.obj2Map(strVO); } - conferenceRecordDetailVO.setImages(list); - Map params = BaseUtil.obj2Map(conferenceRecordDetailVO); String templateFile = "template/会议记录表" + SafeProductConstant.DOCX_SUFFIX; String wordPath = savePath + "/会议记录表" + SafeProductConstant.DOCX_SUFFIX; String pdfPath = savePath + "/会议记录表" + SafeProductConstant.PDF_SUFFIX; BaseUtil.exportDocument(templateFile, params, wordPath, pdfPath,"filePath", response); } - - /** * 查询会议记录表详情 */ diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/TrainRecordServiceImpl.java b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/TrainRecordServiceImpl.java index 4d96ddd..5551eec 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/TrainRecordServiceImpl.java +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/service/impl/TrainRecordServiceImpl.java @@ -19,10 +19,13 @@ import com.hnac.hzims.safeproduct.service.ITestService; import com.hnac.hzims.safeproduct.service.ITrainRecordService; import com.hnac.hzims.safeproduct.utils.BaseUtil; import com.hnac.hzims.safeproduct.utils.TimeUtils; +import com.hnac.hzims.safeproduct.vo.TrainRecordDetailImgVO; +import com.hnac.hzims.safeproduct.vo.TrainRecordDetailStrVO; import com.hnac.hzims.safeproduct.vo.TrainRecordDetailVO; import com.hnac.hzims.safeproduct.vo.TrainRecordVO; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.utils.CollectionUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -163,20 +166,32 @@ public class TrainRecordServiceImpl extends ServiceImpl - new ImageEntity(BaseUtil.imgToByte(savePath + BaseUtil.downloadFileByUrl(img, savePath)), 180, 150) - ).collect(Collectors.toList())); - } else { - // 添加空的ImageEntity,防止数据填入时显示"{{" - trainRecordDetailVO.setImages(Collections.singletonList(new ImageEntity())); - } // 表头年月 String code = trainRecordDetailVO.getCode(); trainRecordDetailVO.setYear(code.substring(4, 8)); trainRecordDetailVO.setMonth(code.substring(8, 10)); - Map params = BaseUtil.obj2Map(trainRecordDetailVO); + // 图片 + Map params; + if (StringUtils.isNotEmpty(trainRecordDetailVO.getImgPath())) { + List list = new ArrayList<>(); + TrainRecordDetailImgVO imgVO = new TrainRecordDetailImgVO(); + BeanUtils.copyProperties(trainRecordDetailVO, imgVO); + String[] imgArr = trainRecordDetailVO.getImgPath().split(","); + for (String img : imgArr) { + ImageEntity imageEntity = new ImageEntity(BaseUtil.imgToByte(savePath + + BaseUtil.downloadFileByUrl(img, savePath)), 180, 150); + list.add(imageEntity); + } + imgVO.setImages(list); + params = BaseUtil.obj2Map(imgVO); + } else { + List list = new ArrayList<>(); + list.add(""); + TrainRecordDetailStrVO strVO = new TrainRecordDetailStrVO(); + BeanUtils.copyProperties(trainRecordDetailVO, strVO); + strVO.setImages(list); + params = BaseUtil.obj2Map(strVO); + } String templateFile = "template/培训记录表" + SafeProductConstant.DOCX_SUFFIX; String wordPath = savePath + "/培训记录表" + SafeProductConstant.DOCX_SUFFIX; String pdfPath = savePath + "/培训记录表" + SafeProductConstant.PDF_SUFFIX; diff --git a/hzims-service/safeproduct/src/main/resources/template/卫生考核表(五周).docx b/hzims-service/safeproduct/src/main/resources/template/卫生考核表(五周).docx index 812968828b622a3764d4ad135c21a0b23a3b51c6..e217f447f9309c7afd602d95f59eaa4e0aa7288d 100644 GIT binary patch delta 4877 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 S{u4&^XH5}+K$Zgk-2M+;C?Pxm delta 4732 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 K1`;d)00020&HK0j diff --git a/hzims-service/safeproduct/src/main/resources/template/卫生考核表(四周).docx b/hzims-service/safeproduct/src/main/resources/template/卫生考核表(四周).docx index a91c9f02db9d96bf047eef72ba2cfde21051ed0b..0043a37dbad27dd689defcc2b322ff2b4cd35ed3 100644 GIT binary patch delta 4660 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 delta 4574 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 From 4ff5b9567741ac0761148a0277bbfc1cb6ce0531 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 26 Aug 2024 10:43:46 +0800 Subject: [PATCH 6/9] =?UTF-8?q?#=E9=80=9A=E8=AE=AF=E4=B8=AD=E6=96=AD?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=A2=9E=E5=8A=A0=E7=AB=99=E7=82=B9=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/electric/vo/ComprehensiveElectricVo.java | 22 ++++-- .../service/impl/ElectricReportServiceImpl.java | 79 ++++++++++++++++++++-- .../interruption/mapper/InterruptionMapper.java | 4 +- 3 files changed, 92 insertions(+), 13 deletions(-) diff --git a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java index 6d4da72..06d4c44 100644 --- a/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java +++ b/hzims-service-api/equipment-api/src/main/java/com/hnac/hzims/electric/vo/ComprehensiveElectricVo.java @@ -1,5 +1,7 @@ package com.hnac.hzims.electric.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -14,52 +16,60 @@ public class ComprehensiveElectricVo { private String month; @ApiModelProperty(value = "本月电量") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double monthGenerate; @ApiModelProperty(value = "去年同月") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastMonthGenerate; @ApiModelProperty(value = "月同比") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastMonthGenerateRate; @ApiModelProperty(value = "年发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double yearGenerate; @ApiModelProperty(value = "去年同期") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastYearGenerate; @ApiModelProperty(value = "年同比") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastYearGenerateRate; @ApiModelProperty(value = "本月降雨") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double monthRain; @ApiModelProperty(value = "去年同月") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastMonthRain; - @ApiModelProperty(value = "月同比") - private Double lastMonthRainRate; - @ApiModelProperty(value = "年降雨量") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double yearRain; @ApiModelProperty(value = "去年同期") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastYearRain; - @ApiModelProperty(value = "年同比") - private Double lastYearRainRate; - @ApiModelProperty(value = "本月等效小时") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double monthEquivalent; @ApiModelProperty(value = "去年同月") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastMonthEquivalent; @ApiModelProperty(value = "年等效小时") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double yearEquivalent; @ApiModelProperty(value = "去年同期") + @JsonSerialize(nullsUsing = NullSerializer.class) private Double lastYearEquivalent; } \ No newline at end of file diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java index 59276ea..4c53620 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/electric/service/impl/ElectricReportServiceImpl.java @@ -1,7 +1,6 @@ package com.hnac.hzims.electric.service.impl; -import cn.hutool.core.io.unit.DataUnit; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -32,6 +31,8 @@ import org.springblade.system.feign.ISysClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -134,14 +135,82 @@ public class ElectricReportServiceImpl implements IElectricReportService { Date finish = calendar.getTime(); calendar.add(Calendar.YEAR,-1); Date current = calendar.getTime(); + // fixme 随机器模拟数据 + Random random = new Random(); + List electrics = new ArrayList<>(); while (current.compareTo(finish) < 0){ - - + ComprehensiveElectricVo comprehensive = new ComprehensiveElectricVo(); + comprehensive.setMonth(current.getMonth() + 1 + "月"); + String currentMon = DateUtil.format(calendar.getTime(),"yyyy-MM"); + String currentYear = DateUtil.format(calendar.getTime(),"yyyy"); + calendar.add(Calendar.YEAR,-1); + String lastMon = DateUtil.format(calendar.getTime(),"yyyy-MM"); + String lastYear = DateUtil.format(calendar.getTime(),"yyyy"); + calendar.add(Calendar.YEAR,1); + // 电量 + if(CollectionUtil.isNotEmpty(threes)){ + comprehensive.setMonthGenerate(threes.stream().filter(o->o.getStrMonth().contains(currentMon)).mapToDouble(o->o.getGenerate().doubleValue()).sum()); + comprehensive.setLastMonthGenerate(threes.stream().filter(o->o.getStrMonth().contains(lastMon)).mapToDouble(o->o.getGenerate().doubleValue()).sum()); + if(comprehensive.getMonthGenerate() > 0 && comprehensive.getLastMonthGenerate() > 0){ + comprehensive.setLastMonthGenerateRate(BigDecimal.valueOf(comprehensive.getMonthGenerate() / comprehensive.getLastMonthGenerate() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); + }else{ + comprehensive.setLastMonthGenerateRate(0.0); + } + // 本月等效小时 + if(comprehensive.getMonthGenerate() > 0){ + comprehensive.setMonthEquivalent(BigDecimal.valueOf(comprehensive.getMonthGenerate() / installedCapacity).setScale(2, RoundingMode.HALF_UP).doubleValue()); + }else{ + comprehensive.setMonthEquivalent(0.0); + } + // 去年同月等效小时 + if(comprehensive.getLastMonthGenerate() > 0){ + comprehensive.setLastMonthEquivalent(BigDecimal.valueOf(comprehensive.getLastMonthGenerate() / installedCapacity).setScale(2, RoundingMode.HALF_UP).doubleValue()); + }else{ + comprehensive.setLastMonthEquivalent(0.0); + } + comprehensive.setYearGenerate(threes.stream().filter(o->o.getStrMonth().contains(currentYear)).mapToDouble(o->o.getGenerate().doubleValue()).sum()); + comprehensive.setLastYearGenerate(threes.stream().filter(o->o.getStrMonth().contains(lastYear)).mapToDouble(o->o.getGenerate().doubleValue()).sum()); + if(comprehensive.getYearGenerate() > 0 && comprehensive.getLastYearGenerate() > 0){ + comprehensive.setLastYearGenerateRate(BigDecimal.valueOf(comprehensive.getYearGenerate() / comprehensive.getLastYearGenerate() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); + } + if(CollectionUtil.isEmpty(electrics)){ + // 本年等效小时 + comprehensive.setYearEquivalent(comprehensive.getMonthEquivalent()); + // 去年同期等效小时 + comprehensive.setLastYearEquivalent(comprehensive.getLastMonthEquivalent()); + }else{ + // 累计等效小时 + comprehensive.setYearEquivalent(electrics.stream().mapToDouble(ComprehensiveElectricVo::getMonthEquivalent).sum() + comprehensive.getMonthEquivalent()); + comprehensive.setLastYearEquivalent(electrics.stream().mapToDouble(ComprehensiveElectricVo::getLastMonthEquivalent).sum() + comprehensive.getLastMonthEquivalent()); + } + }else{ + comprehensive.setMonthGenerate(0.0); + comprehensive.setLastMonthGenerate(0.0); + comprehensive.setYearGenerate(0.0); + comprehensive.setLastYearGenerate(0.0); + comprehensive.setLastMonthGenerateRate(0.0); + comprehensive.setLastYearGenerateRate(0.0); + comprehensive.setMonthEquivalent(0.0); + comprehensive.setLastMonthEquivalent(0.0); + comprehensive.setYearEquivalent(0.0); + comprehensive.setLastYearEquivalent(0.0); + } + // 降雨 : fixme 模拟降雨 + comprehensive.setMonthRain(BigDecimal.valueOf(random.nextDouble() * 10 * 8).setScale(2, RoundingMode.HALF_UP).doubleValue()); + comprehensive.setLastMonthRain(BigDecimal.valueOf(random.nextDouble() * 10 * 8).setScale(2, RoundingMode.HALF_UP).doubleValue()); + if(CollectionUtil.isEmpty(electrics)){ + comprehensive.setYearRain(comprehensive.getMonthRain()); + comprehensive.setLastYearRain(comprehensive.getLastMonthRain()); + }else{ + // 累计降雨 + comprehensive.setYearRain(electrics.stream().mapToDouble(ComprehensiveElectricVo::getMonthRain).sum() + comprehensive.getMonthRain()); + comprehensive.setLastYearRain(electrics.stream().mapToDouble(ComprehensiveElectricVo::getLastMonthRain).sum() + comprehensive.getLastMonthRain()); + } + electrics.add(comprehensive); calendar.add(Calendar.MONTH,1); current = calendar.getTime(); } - - return null; + return electrics; } diff --git a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/business/interruption/mapper/InterruptionMapper.java b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/business/interruption/mapper/InterruptionMapper.java index e804cd3..ce1d4a6 100644 --- a/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/business/interruption/mapper/InterruptionMapper.java +++ b/hzims-service/hzims-alarm/src/main/java/com/hnac/hzims/business/interruption/mapper/InterruptionMapper.java @@ -1,15 +1,15 @@ package com.hnac.hzims.business.interruption.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.hnac.hzims.business.interruption.entity.InterruptionEntity; import com.hnac.hzims.business.interruption.vo.InterruptionStationVo; +import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; import java.util.List; /** * @author ysj */ -public interface InterruptionMapper extends BaseMapper { +public interface InterruptionMapper extends UserDataScopeBaseMapper { List interruptionStations(); } From b278cbf07bd67092fc0de162374924e6417d9151 Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Mon, 26 Aug 2024 15:29:44 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9A=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=E8=AE=B0=E5=BD=95=E5=A2=9E=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/operational/duty/mapper/ImsDutyRecQRRecordMapper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/mapper/ImsDutyRecQRRecordMapper.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/mapper/ImsDutyRecQRRecordMapper.java index d07d731..1699cc7 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/mapper/ImsDutyRecQRRecordMapper.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/duty/mapper/ImsDutyRecQRRecordMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.hnac.hzims.operational.duty.entity.ImsDutyRecQRRecordEntity; import com.hnac.hzims.operational.main.vo.ImsDutyRecQRRecordVo; import org.apache.ibatis.annotations.Param; +import org.springblade.core.datascope.annotation.UserDataAuth; import org.springblade.core.datascope.mapper.UserDataScopeBaseMapper; import org.springframework.web.bind.annotation.RequestParam; @@ -24,6 +25,7 @@ public interface ImsDutyRecQRRecordMapper extends UserDataScopeBaseMapper selectPageList(IPage page,@Param(value = "vo") ImsDutyRecQRRecordVo vo); } From a4cb2ce790a7e118f57b9d5a247b0a1bc8fd91da Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Mon, 26 Aug 2024 19:25:21 +0800 Subject: [PATCH 8/9] =?UTF-8?q?#=E7=AB=99=E7=82=B9=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduled/RealTargetScheduledTask.java | 14 ++++---- .../operation/home/impl/RealTargetServiceImpl.java | 42 ++++++++++++++-------- .../service/impl/HydroelectricServiceImpl.java | 12 +++++-- 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 9591c87..9986873 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -46,9 +46,10 @@ public class RealTargetScheduledTask { /** * 水电站-机组实时加载 */ - @XxlJob(LOAD_HYDROPOWER_UNIT_REAL) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT loadHydropowerReal(String param) { + //@XxlJob(LOAD_HYDROPOWER_UNIT_REAL) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadHydropowerReal() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } @@ -59,9 +60,10 @@ public class RealTargetScheduledTask { /** * 水电站-机组指标加载 */ - @XxlJob(LOAD_HYDROPOWER_UNIT_TARGET) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT loadHydropowerTarget(String param) { + //@XxlJob(LOAD_HYDROPOWER_UNIT_TARGET) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadHydropowerTarget() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 53e1ecc..af7b0a1 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -1485,24 +1485,36 @@ public class RealTargetServiceImpl implements RealTargetService { private List getLoadsByDay(EminfoAndEmParamVo device) { Calendar calendar = Calendar.getInstance(); // 结束日期 - String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); + Date end = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH,-1); // 开始日期 - String start = DateUtil.format(calendar.getTime(),"yyyy-MM-dd HH") + ":00:00"; - List records = dataService.periodTargetData(start, end, 3, 2, device.getEmCode(), HomePageConstant.PV_LOAD); - if (CollectionUtil.isEmpty(records)) { - return new ArrayList<>(); - } - return records.stream().map(record -> { - ActivePowerVo load = new ActivePowerVo(); - Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss"); - load.setStrHour(DateUtil.format(time,"yyyy-MM-dd HH")); - load.setHour(time.getHours()); - if(StringUtil.isNotBlank(record.getVal())){ - load.setActivePower(record.getVal()); + Date start = calendar.getTime(); + List records = dataService.periodTargetData(DateUtil.format(start,"yyyy-MM-dd HH") + ":00:00", DateUtil.format(end,DateUtil.PATTERN_DATETIME), 3, 2, device.getEmCode(), HomePageConstant.PV_LOAD); + List activePowers = new ArrayList<>(); + while (start.compareTo(end) < 0){ + String time = DateUtil.format(start,"yyyy-MM-dd HH"); + ActivePowerVo active = new ActivePowerVo(); + active.setStrHour(time); + active.setHour(start.getHours()); + if(CollectionUtil.isNotEmpty(records)){ + Optional analyseData = records.stream().filter(o->o.getTs().contains(time)).findFirst(); + if(analyseData.isPresent()){ + if(StringUtil.isNotBlank(analyseData.get().getVal())){ + active.setActivePower(analyseData.get().getVal()); + }else{ + active.setActivePower("0.0"); + } + }else{ + active.setActivePower("0.0"); + } + }else{ + active.setActivePower("0.0"); } - return load; - }).sorted(Comparator.comparing(ActivePowerVo::getStrHour)).collect(Collectors.toList()); + activePowers.add(active); + calendar.add(Calendar.HOUR_OF_DAY,1); + start = calendar.getTime(); + } + return activePowers.stream().sorted(Comparator.comparing(ActivePowerVo::getStrHour)).collect(Collectors.toList()); } /** diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/homePage/service/impl/HydroelectricServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/homePage/service/impl/HydroelectricServiceImpl.java index 5450ff6..4de937d 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/homePage/service/impl/HydroelectricServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/homePage/service/impl/HydroelectricServiceImpl.java @@ -105,9 +105,10 @@ public class HydroelectricServiceImpl implements HydroelectricService { result.setWeather(week.getDaily()); } } + List statonDevices = devices.stream().filter(device-> station.getRefDept().equals(device.getCreateDept())).collect(Collectors.toList()); // 设备 - if(CollectionUtil.isNotEmpty(devices)){ - result.setDevices(devices.stream().filter(device-> station.getRefDept().equals(device.getCreateDept())).map(iter->{ + if(CollectionUtil.isNotEmpty(statonDevices)){ + result.setDevices(statonDevices.stream().map(iter->{ HydroelectricDeviceVo device = new HydroelectricDeviceVo(); device.setDeivceCode(iter.getEmCode()); device.setDeivceName(iter.getName()); @@ -124,6 +125,13 @@ public class HydroelectricServiceImpl implements HydroelectricService { }else{ device.setCapacityRate(0.0); } + }else{ + device.setState(false); + device.setInstalledCapacity(0.0); + device.setActivePower(0.0); + device.setReactivePower(0.0); + device.setGuideOpen(0.0); + device.setCapacityRate(0.0); } // 指标数据 Optional target = targets.stream().filter(o-> iter.getEmCode().equals(o.getDeviceCode())).findFirst(); From 1fbcc2ecf1c296e295467bc2f0dfeecdfbcbfb9d Mon Sep 17 00:00:00 2001 From: ty <1577900710@qq.com> Date: Mon, 26 Aug 2024 20:20:46 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9A=E5=A4=A7?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=BE=B7=E4=BA=91=E7=89=A9=E8=81=94=E5=87=8F?= =?UTF-8?q?=E5=B0=91=E6=9F=A5=E8=AF=A2=E7=AD=96=E7=95=A5=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delian/service/impl/DeLianServiceImpl.java | 42 +++++++++++++++------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/hzims-service/equipment/src/main/java/com/hnac/hzims/delian/service/impl/DeLianServiceImpl.java b/hzims-service/equipment/src/main/java/com/hnac/hzims/delian/service/impl/DeLianServiceImpl.java index 8b7d3ce..6b8b2ba 100644 --- a/hzims-service/equipment/src/main/java/com/hnac/hzims/delian/service/impl/DeLianServiceImpl.java +++ b/hzims-service/equipment/src/main/java/com/hnac/hzims/delian/service/impl/DeLianServiceImpl.java @@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.api.R; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; @@ -30,6 +31,9 @@ public class DeLianServiceImpl implements IDeLianService { private String hostId; @Value("${deLian.passWord}") private String passWord; + private final RedisTemplate redisTemplate; + + private final static String load_strategys_key = "hzims:equipment:delian:strategys:key"; @Override public List getStrategys() { @@ -37,29 +41,42 @@ public class DeLianServiceImpl implements IDeLianService { HashMap requestData = new HashMap() {{ put("Strategy_Type", 0); }}; - param.put("request_data",requestData); - param.put("request_cmd",DeLianConstants.STRATEGYS.getCode()); + param.put("request_data", requestData); + param.put("request_cmd", DeLianConstants.STRATEGYS.getCode()); String jsonString = JSON.toJSONString(param); HttpResponse response = HttpRequest.post(deLianUrl).body(jsonString).execute(); - if(response.getStatus() == HttpServletResponse.SC_OK ) { + if (response.getStatus() == HttpServletResponse.SC_OK) { List responseData = JSONObject.parseArray(JSONObject.parseObject(response.body()).getString("response_data"), StrategyDataVO.class); + redisTemplate.opsForValue().set(load_strategys_key, responseData); return responseData; } - return new ArrayList<>(); + return new ArrayList<>(); } @Override public R executeScene(String key) { + long start = System.currentTimeMillis(); + log.info("executeScene接口请求开始------"); HashMap param = getOauthToken(); - param.put("request_cmd",DeLianConstants.EXECUTESCENE.getCode()); - List strategys = getStrategys(); + param.put("request_cmd", DeLianConstants.EXECUTESCENE.getCode()); + List strategys = new ArrayList<>(); + if (redisTemplate.hasKey(load_strategys_key)) { + strategys = (List) redisTemplate.opsForValue().get(load_strategys_key); + } else { + strategys = getStrategys(); + } for (StrategyDataVO strategy : strategys) { - if (key.equals(strategy.getSn())){ - param.put("request_data",strategy.getSID()); + if (key.equals(strategy.getSn())) { + param.put("request_data", strategy.getSID()); } } + long start1 = System.currentTimeMillis(); + log.info("deLian策略查询耗时:{}", start1 - start); + log.info("deLian一键执行接口请求开始------"); HttpResponse response = HttpRequest.post(deLianUrl).body(JSON.toJSONString(param)).execute(); - if(response.getStatus() == HttpServletResponse.SC_OK ) { + if (response.getStatus() == HttpServletResponse.SC_OK) { + long end = System.currentTimeMillis(); + log.info("deLian一键执行接口耗时:{}", end - start1); return R.success("执行成功"); } return R.fail("执行成功"); @@ -78,15 +95,14 @@ public class DeLianServiceImpl implements IDeLianService { String jsonString = JSON.toJSONString(param); HttpResponse response = HttpRequest.post(deLianUrl).body(jsonString).execute(); String token = JSONObject.parseObject(response.body()).getString("request_token"); - if(response.getStatus() == HttpServletResponse.SC_OK && + if (response.getStatus() == HttpServletResponse.SC_OK && StringUtils.isNotBlank(token)) { param.remove("request_data"); param.remove("request_cmd"); - param.put("request_token",token); + param.put("request_token", token); return param; - }else { + } else { throw new ServiceException("获取权限失败,请稍后重试!"); } } - }