From 0f4126a59c3ca6801911cd29eabc16df5d005f8b Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Tue, 20 Jan 2026 16:44:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=201=E3=80=81=E7=82=B9?= =?UTF-8?q?=E6=A3=80=E5=88=97=E8=A1=A8=E3=80=81=E5=AF=BC=E5=87=BA=E3=80=82?= =?UTF-8?q?2=E3=80=81=E4=BF=9D=E5=85=BB=E5=88=97=E8=A1=A8=E3=80=81?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E3=80=823=E3=80=81=E7=BB=B4=E4=BF=AE?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E3=80=81=E5=AF=BC=E5=87=BA=E3=80=824?= =?UTF-8?q?=E3=80=81=E5=85=B3=E9=94=AE=E4=BB=B6=E5=AF=BC=E5=87=BA=205?= =?UTF-8?q?=E3=80=81=E5=A4=87=E4=BB=B6=E5=AF=BC=E5=87=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/DeviceModelAttributeRespVO.java | 4 + .../CriticalComponentController.java | 22 +++ .../vo/CriticalComponentExcelVO.java | 44 ++++++ .../deviceledger/DeviceLedgerController.java | 21 +++ .../admin/deviceledger/vo/ErpProductVO.java | 47 +++++++ .../admin/dvrepair/DvRepairController.java | 42 ++++++ .../dvrepair/enums/RepairResultEnum.java | 38 ++++++ .../admin/dvrepair/vo/DvRepairLineRespVO.java | 59 ++++++++ .../TicketManagementController.java | 4 +- .../dataobject/dvrepair/DvRepairLineDO.java | 2 +- .../CriticalComponentService.java | 3 + .../CriticalComponentServiceImpl.java | 29 ++++ .../deviceledger/DeviceLedgerService.java | 2 + .../deviceledger/DeviceLedgerServiceImpl.java | 40 ++++++ .../mes/service/dvrepair/DvRepairService.java | 7 +- .../service/dvrepair/DvRepairServiceImpl.java | 127 ++++++++++++++++-- 16 files changed, 476 insertions(+), 15 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/vo/CriticalComponentExcelVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/ErpProductVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/enums/RepairResultEnum.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/vo/DvRepairLineRespVO.java diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/devicemodelattribute/vo/DeviceModelAttributeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/devicemodelattribute/vo/DeviceModelAttributeRespVO.java index 75eca2e631..06b4f99ab6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/devicemodelattribute/vo/DeviceModelAttributeRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/devicemodelattribute/vo/DeviceModelAttributeRespVO.java @@ -29,6 +29,10 @@ public class DeviceModelAttributeRespVO { @ExcelProperty("点位类型") private String attributeType; + @Schema(description = "类型名称", example = "1") + @ExcelProperty("类型名称") + private String typeName; + @Schema(description = "数据类型", example = "2") @ExcelProperty("数据类型") private String dataType; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/CriticalComponentController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/CriticalComponentController.java index 38135a510e..b84d86a756 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/CriticalComponentController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/CriticalComponentController.java @@ -11,6 +11,9 @@ import io.swagger.v3.oas.annotations.Operation; import javax.validation.constraints.*; import javax.validation.*; import javax.servlet.http.*; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.io.IOException; import java.util.stream.Collectors; @@ -106,4 +109,23 @@ public class CriticalComponentController { BeanUtils.toBean(list, CriticalComponentRespVO.class)); } + @GetMapping("/export-device-component") + @Operation(summary = "根据设备Id导出设备关键件 Excel") + @PreAuthorize("@ss.hasPermission('mes:critical-component:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDeviceComponent(@RequestParam(name = "id") Long id, + HttpServletResponse response) throws IOException { + + List list = criticalComponentService.exportDeviceComponent(id); + + // 设置响应头 + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode("设备关键件.xls", "UTF-8")); + response.setHeader("Content-Encoding", "identity"); + String fileName = String.format("设备关键件_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + // 导出 Excel + ExcelUtils.write(response, fileName, "数据", CriticalComponentExcelVO.class,list); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/vo/CriticalComponentExcelVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/vo/CriticalComponentExcelVO.java new file mode 100644 index 0000000000..43137989c7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/criticalcomponent/vo/CriticalComponentExcelVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.mes.controller.admin.criticalcomponent.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备关键件导出实体类 Resp VO") +@Data +@ExcelIgnoreUnannotated +public class CriticalComponentExcelVO { + + @Schema(description = "主键ID") + private Long id; + + + @Schema(description = "编码") + @ExcelProperty("编码") + private String code; + + + @Schema(description = "名称") + @ExcelProperty("名称") + private String name; + + @Schema(description = "描述") + @ExcelProperty("描述") + private String description; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + @ColumnWidth(20) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java index 0b42ac7976..02486eab53 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.controller.admin.deviceledger; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.utils.ResumeNameUtils; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; @@ -14,6 +15,9 @@ import io.swagger.v3.oas.annotations.Operation; import javax.validation.*; import javax.servlet.http.*; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.io.IOException; import java.util.stream.Collectors; @@ -139,4 +143,21 @@ public class DeviceLedgerController { } + @GetMapping("/export-spare-based") + @Operation(summary = "根据设备Id导出备件") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSpareBased(@RequestParam(name = "id") Long id, + HttpServletResponse response) throws IOException { + List list = deviceLedgerService.exportSpareBased(id); + // 设置响应头 + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode("备件.xls", "UTF-8")); + response.setHeader("Content-Encoding", "identity"); + String fileName = String.format("备件_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + // 导出 Excel + ExcelUtils.write(response, fileName, "数据", ErpProductVO.class,list); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/ErpProductVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/ErpProductVO.java new file mode 100644 index 0000000000..b103136ca5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/ErpProductVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备备件导出 Resp VO") +@Data +@ExcelIgnoreUnannotated +public class ErpProductVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24467") + private Long id; + + @Schema(description = "编码") + @ExcelProperty("编码") + private String barCode; + + @Schema(description = "名称") + @ExcelProperty("名称") + private String name; + + @Schema(description = "描述") + @ExcelProperty("描述") + private String subCategoryName; + + @Schema(description = "单位编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8869") + private Long unitId; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String unitName; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + @ColumnWidth(20) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/DvRepairController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/DvRepairController.java index 2dca11db76..3d4ac4e89b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/DvRepairController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/DvRepairController.java @@ -7,9 +7,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*; +import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketInspectionExportVO; import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO; import cn.iocoder.yudao.module.mes.service.dvrepair.DvRepairService; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; @@ -24,6 +26,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.net.URLEncoder; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -160,6 +165,43 @@ public class DvRepairController { return success(true); } + + @GetMapping("/getRepairListByDeviceId") + @Operation(summary = "根据设备Id获得维修历史记录") + @Parameter(name = "deviceId", description = "设备Id", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:ticket-management:query')") + public CommonResult> getRepairListByDeviceId(@RequestParam("deviceId") Long deviceId, + @RequestParam(name = "startTime",required = false) String startTime, + @RequestParam(name = "endTime",required = false) String endTime) { + List dvRepairDOList = dvRepairService.getRepairListByDeviceId(deviceId,startTime,endTime,null); + return success(dvRepairDOList); + } + + + + @GetMapping("/export-repair-excel") + @Operation(summary = "导出维修历史记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:ticket-results:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportRepairExcel(@RequestParam("deviceId") Long deviceId, + @RequestParam(name = "ids",required = false) String ids, + @RequestParam(name = "startTime",required = false) String startTime, + @RequestParam(name = "endTime",required = false) String endTime, + HttpServletResponse response) throws IOException { + + // 查询数据 + List dvRepairDOList = dvRepairService.getRepairListByDeviceId(deviceId,startTime,endTime,ids); + + // 设置响应头 + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + URLEncoder.encode("维修记录.xls", "UTF-8")); + response.setHeader("Content-Encoding", "identity"); + // 导出Excel + String fileName = String.format("维修记录_%s.xls", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + ExcelUtils.write(response, fileName, "维修记录", DvRepairLineRespVO.class, dvRepairDOList); + } + private PageResult buildCreatorName(PageResult dvSubjectRespVOPageResult) { for (DvRepairRespVO dvSubjectRespVO : dvSubjectRespVOPageResult.getList()) { if (dvSubjectRespVO.getAcceptedBy() !=null) { diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/enums/RepairResultEnum.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/enums/RepairResultEnum.java new file mode 100644 index 0000000000..2a03da8fbd --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/enums/RepairResultEnum.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 维修结果状态枚举 + */ +@Getter +@AllArgsConstructor +public enum RepairResultEnum { + PENDING(0, "待维修"), + PASS(1, "OK"), + FAIL(2, "NG"); + + private final Integer code; + private final String desc; + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static String getDescByCode(Integer code) { + if (code == null) { + return ""; + } + for (RepairResultEnum value : values()) { + if (value.code.equals(code)) { + return value.desc; + } + } + return "未知"; + } +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/vo/DvRepairLineRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/vo/DvRepairLineRespVO.java new file mode 100644 index 0000000000..049383b412 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvrepair/vo/DvRepairLineRespVO.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备维修记录 Resp VO") +@Data +@ExcelIgnoreUnannotated +public class DvRepairLineRespVO { + + @Schema(description = "项目行Id") + private Long id; + + @Schema(description = "维修单编号") + @ExcelProperty("维修单编号") + private String repairCode; + + @Schema(description = "维修单名称") + @ExcelProperty("维修单名称") + private String repairName; + + @Schema(description = "维修完成日期") + @ExcelProperty("维修完成日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime finishDate; + + @Schema(description = "项目编码") + @ExcelProperty("项目编码") + private String subjectCode; + + @Schema(description = "项目名称") + @ExcelProperty("项目名称") + private String subjectName; + + @Schema(description = "项目内容") + @ExcelProperty("项目内容") + private String subjectContent; + + @Schema(description = "备注") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "维修结果 0-待维修 1-通过 2-不通过") + private Integer result; + + @Schema(description = "维修结果") + @ExcelProperty("维修结果") + private String repairResult; + + + +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/ticketmanagement/TicketManagementController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/ticketmanagement/TicketManagementController.java index 2bddf02aa5..acbb7ac435 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/ticketmanagement/TicketManagementController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/ticketmanagement/TicketManagementController.java @@ -156,7 +156,7 @@ public class TicketManagementController { return success(ticketResultsDOList); } - @GetMapping("/exportExcelInspection") + @GetMapping("/export-excel-inspection") @Operation(summary = "导出点检历史记录 Excel") @PreAuthorize("@ss.hasPermission('mes:ticket-results:export')") @ApiAccessLog(operateType = EXPORT) @@ -199,7 +199,7 @@ public class TicketManagementController { } - @GetMapping("/exportExcelMaintenance") + @GetMapping("/export-excel-maintenance") @Operation(summary = "导出保养历史记录 Excel") @PreAuthorize("@ss.hasPermission('mes:ticket-results:export')") @ApiAccessLog(operateType = EXPORT) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvrepair/DvRepairLineDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvrepair/DvRepairLineDO.java index e9fb1679d1..6175b2b001 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvrepair/DvRepairLineDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvrepair/DvRepairLineDO.java @@ -73,7 +73,7 @@ public class DvRepairLineDO extends BaseDO { private String remark; /** - * + * 维修结果 0-待维修 1-通过 2-不通过 */ private Integer result; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentService.java index 6b0fb88d4a..efc59d9042 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentService.java @@ -53,4 +53,7 @@ public interface CriticalComponentService { PageResult getCriticalComponentPage(CriticalComponentPageReqVO pageReqVO); List getCriticalComponentList(); + + List exportDeviceComponent(Long id); + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java index bf10454be2..30eb1358fd 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/criticalcomponent/CriticalComponentServiceImpl.java @@ -161,4 +161,33 @@ public class CriticalComponentServiceImpl implements CriticalComponentService { return criticalComponentMapper.selectList(); } + @Override + public List exportDeviceComponent(Long id) { + DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(id); + if (deviceLedgerDO == null){ + throw exception(DEVICE_LEDGER_EXISTS); + } + if (StringUtils.isBlank(deviceLedgerDO.getComponentId())){ + return new ArrayList<>(); + } + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(deviceLedgerDO.getComponentId().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + + if (idList.isEmpty()) { + return new ArrayList<>(); + } + + // 查询关键组件信息 + List componentList = criticalComponentMapper.selectList( + Wrappers.lambdaQuery() + .in(CriticalComponentDO::getId, idList) + .orderByDesc(CriticalComponentDO::getCreateTime) + ); + + return BeanUtils.toBean(componentList,CriticalComponentExcelVO.class); + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java index ce486190db..64767d31bf 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java @@ -5,6 +5,7 @@ import javax.validation.*; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -76,4 +77,5 @@ public interface DeviceLedgerService { } + List exportSpareBased(Long id); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java index 6ab14050c0..db1e3b3c43 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java @@ -3,12 +3,14 @@ package cn.iocoder.yudao.module.mes.service.deviceledger; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.module.erp.controller.admin.mold.vo.MoldRespVO; +import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldBrandDO; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldMapper; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; import cn.iocoder.yudao.module.mes.controller.admin.ticketmanagement.enums.PlanTypeEnum; import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO; @@ -38,6 +40,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** @@ -71,6 +74,9 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { @Resource private MoldMapper moldMapper; + @Resource + private ErpProductUnitService productUnitService; + @Override public Long createDeviceLedger(DeviceLedgerSaveReqVO createReqVO) { @@ -241,5 +247,39 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { return BeanUtils.toBean(list, DeviceLedgerRespVO.class); } + @Override + public List exportSpareBased(Long id) { + DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(id); + if (deviceLedgerDO == null){ + throw exception(DEVICE_LEDGER_EXISTS); + } + + List beijianList = new ArrayList<>(); + if (StringUtils.isNotBlank(deviceLedgerDO.getBeijianId())) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(deviceLedgerDO.getBeijianId().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + for (Long beijianId : idList) { + ErpProductDO beijianDO = productMapper.selectById(beijianId); + if(beijianDO!=null){ + beijianList.add(beijianDO); + } + } + } + + Map unitMap = productUnitService.getProductUnitMap( + convertSet(beijianList, ErpProductDO::getUnitId)); + + List erpProductVOList = BeanUtils.toBean(beijianList, ErpProductVO.class, product -> { + MapUtils.findAndThen(unitMap, product.getUnitId(), + unit -> product.setUnitName(unit.getName())); + }); + + + return erpProductVOList; + } + } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairService.java index d1e34871d1..7c82e18a24 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairService.java @@ -1,10 +1,7 @@ package cn.iocoder.yudao.module.mes.service.dvrepair; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairLineSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepirUpdateReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO; @@ -71,4 +68,6 @@ public interface DvRepairService { void batchUpdateTicketResults(@Valid List updateReqVOList); void updateDvRepairStatus(@Valid DvRepirUpdateReqVO updateReqVO); + + List getRepairListByDeviceId(Long deviceId, String startTime, String endTime,String ids); } \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java index 571436fa4e..166820b2f8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java @@ -5,10 +5,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairLineSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairPageReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepairSaveReqVO; -import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.DvRepirUpdateReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums.RepairResultEnum; +import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.vo.*; import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.enums.JobResultEnum; import cn.iocoder.yudao.module.mes.controller.admin.ticketresults.vo.TicketResultsSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; @@ -18,18 +16,21 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.ticketmanagement.TicketManagem import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO; import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairLineMapper; import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairMapper; +import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS; @@ -42,6 +43,7 @@ import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; */ @Service @Validated +@Slf4j public class DvRepairServiceImpl implements DvRepairService { @Resource @@ -191,6 +193,115 @@ public class DvRepairServiceImpl implements DvRepairService { } + @Override + public List getRepairListByDeviceId(Long deviceId, String startTime, String endTime,String ids) { + + List dvRepairLineRespVOS = new ArrayList<>(); + + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .eq(DvRepairDO::getDeviceId, deviceId); + + + + // 处理开始时间 + if (StringUtils.isNotBlank(startTime)) { + try { + LocalDateTime parseToLocalDateTime = parseToLocalDateTime(startTime); + wrapper.ge(DvRepairDO::getFinishDate, parseToLocalDateTime); + } catch (Exception e) { + log.error("开始时间格式错误: {}, 异常: {}", startTime, e.getMessage(), e); + } + } + + // 处理结束时间 + if (StringUtils.isNotBlank(endTime)) { + try { + LocalDateTime parseToLocalDateTime = parseToLocalDateTime(endTime); + wrapper.le(DvRepairDO::getFinishDate, parseToLocalDateTime); + } catch (Exception e) { + log.error("结束时间格式错误: {}, 异常: {}", startTime, e.getMessage(), e); + } + } + + List dvRepairDOS = dvRepairMapper.selectList(wrapper); + + for (DvRepairDO dvRepairDO : dvRepairDOS) { + + LambdaQueryWrapper dvRepairLineDOLambdaQueryWrapper = Wrappers.lambdaQuery() + .eq(DvRepairLineDO::getRepairId, dvRepairDO.getId()) + .orderByDesc(DvRepairLineDO::getCreateTime); + + List dvRepairLineDOS = dvRepairLineMapper.selectList(dvRepairLineDOLambdaQueryWrapper); + + if (!dvRepairLineDOS.isEmpty()) { + List dvRepairLineRespVOList = dvRepairLineDOS.stream() + .map(doItem -> { + DvRepairLineRespVO vo = new DvRepairLineRespVO(); + BeanUtils.copyProperties(doItem, vo); + vo.setRepairCode(dvRepairDO.getRepairCode()); + vo.setRepairName(dvRepairDO.getRepairName()); + vo.setFinishDate(dvRepairDO.getFinishDate()); + // 设置维修结果描述 + vo.setRepairResult(RepairResultEnum.getDescByCode(doItem.getResult())); + return vo; + }) + .collect(Collectors.toList()); + dvRepairLineRespVOS.addAll(dvRepairLineRespVOList); + } + } + + // 在最终结果上过滤ids + if (StringUtils.isNotBlank(ids)) { + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .collect(Collectors.toList()); + if (!idList.isEmpty()) { + dvRepairLineRespVOS = dvRepairLineRespVOS.stream() + .filter(vo -> idList.contains(vo.getId())) // 假设vo有getId()方法 + .collect(Collectors.toList()); + } + } + + + return dvRepairLineRespVOS; + } + + + private LocalDateTime parseToLocalDateTime(String timeStr) { + if (StringUtils.isBlank(timeStr)) { + return null; + } + + timeStr = timeStr.trim(); + + try { + // 尝试解析 yyyy-MM-dd HH:mm:ss + if (timeStr.length() == 19) { + return LocalDateTime.parse(timeStr, + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + // 尝试解析 yyyy-MM-dd + else if (timeStr.length() == 10) { + return LocalDate.parse(timeStr, + DateTimeFormatter.ofPattern("yyyy-MM-dd")) + .atStartOfDay(); + } + // 尝试解析 yyyy/MM/dd HH:mm:ss + else if (timeStr.contains("/")) { + return LocalDateTime.parse(timeStr.replace("/", "-"), + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } + // 尝试ISO格式 + else { + return LocalDateTime.parse(timeStr, + DateTimeFormatter.ISO_LOCAL_DATE_TIME); + } + } catch (Exception e) { + throw new IllegalArgumentException("时间格式不支持: " + timeStr, e); + } + } private void handleInspectionResult(List updateReqVOList) { if (CollectionUtils.isEmpty(updateReqVOList)) {