From 5dd2d7fa59c739bf69b5d43100d0ca8af88d27ce Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Wed, 15 Apr 2026 14:55:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E9=A1=B5=E9=9D=A2=E5=8F=8A=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=94=98=E7=89=B9=E5=9B=BE=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaogongRecordController.java | 24 ++++++- .../vo/BaogongRecordStatPageReqVO.java | 26 ++++++++ .../vo/BaogongRecordStatRespVO.java | 63 +++++++++++++++++++ .../admin/plan/vo/DevicePlanGanttRespVO.java | 9 +++ .../baogongrecord/BaogongRecordMapper.java | 8 +++ .../baogongrecord/BaogongRecordService.java | 9 +++ .../BaogongRecordServiceImpl.java | 10 +++ .../mes/service/plan/PlanServiceImpl.java | 12 ++-- .../baogongrecord/BaogongRecordMapper.xml | 35 +++++++++++ 9 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatRespVO.java diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/BaogongRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/BaogongRecordController.java index 52a24e170..bee76b806 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/BaogongRecordController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/BaogongRecordController.java @@ -115,7 +115,7 @@ public class BaogongRecordController { @GetMapping("/page") @Operation(summary = "获得报工分页") @PreAuthorize("@ss.hasPermission('mes:baogong-record:query')") - public CommonResult> getBaogongRecordPage(@Valid BaogongRecordPageReqVO pageReqVO) { + public CommonResult> getBaogongRecordPage(@Valid BaogongRecordPageReqVO pageReqVO) { PageResult pageResult = baogongRecordService.getBaogongRecordPage(pageReqVO); return success(new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal())); } @@ -145,4 +145,26 @@ public class BaogongRecordController { BeanUtils.toBean(list, BaogongRecordRespVO.class)); } + @GetMapping("/stat-page") + @Operation(summary = "报工统计分页") + @PreAuthorize("@ss.hasPermission('mes:baogong-record:query')") + public CommonResult> getBaogongRecordStatPage(@Valid BaogongRecordStatPageReqVO reqVO) { + return success(baogongRecordService.getBaogongRecordStatPage(reqVO)); + } + + + @GetMapping("/stat-export-excel") + @Operation(summary = "导出报工统计 Excel") + @PreAuthorize("@ss.hasPermission('mes:baogong-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBaogongRecordStatExcel(@Valid BaogongRecordStatPageReqVO reqVO, + HttpServletResponse response) throws IOException { + reqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = baogongRecordService.getBaogongRecordStatPage(reqVO).getList(); + ExcelUtils.write(response, "报工统计.xls", "数据", BaogongRecordStatRespVO.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/baogongrecord/vo/BaogongRecordStatPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatPageReqVO.java new file mode 100644 index 000000000..2acbb6285 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatPageReqVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo; + + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 报工统计分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +public class BaogongRecordStatPageReqVO extends PageParam { + + @Schema(description = "开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime beginBaogongTime; + + @Schema(description = "结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endBaogongTime; +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatRespVO.java new file mode 100644 index 000000000..59ebdb35c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/baogongrecord/vo/BaogongRecordStatRespVO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 报工统计 Response VO") +@Data +public class BaogongRecordStatRespVO { + + @Schema(description = "任务单编码") + @ExcelProperty("任务单编码") + private String taskCode; + + @Schema(description = "计划单编码") + @ExcelProperty("计划单编码") + private String planCode; + + @Schema(description = "员工ID") + @ExcelProperty("员工ID") + private String employeeId; + + @Schema(description = "员工姓名") + @ExcelProperty("员工姓名") + private String employeeName; + + @Schema(description = "产品名称") + @ExcelProperty("产品名称") + private String productName; + + @Schema(description = "产品编码") + @ExcelProperty("产品编码") + private String productCode; + + @Schema(description = "报工数量") + @ExcelProperty("报工数量") + private Long baogongNum; + + @Schema(description = "合格数量") + @ExcelProperty("合格数量") + private Long passNum; + + @Schema(description = "不合格数量") + @ExcelProperty("不合格数量") + private Long noPassNum; + + @Schema(description = "合格率(%)") + @ExcelProperty("合格率(%)") + private BigDecimal passRate; + + @Schema(description = "原因") + @ExcelProperty("原因") + private String reason; + + @Schema(description = "报工时间") + @ExcelProperty("报工时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime baogongTime; +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/DevicePlanGanttRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/DevicePlanGanttRespVO.java index 49192aa23..5c1ec0984 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/DevicePlanGanttRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/DevicePlanGanttRespVO.java @@ -22,6 +22,15 @@ public class DevicePlanGanttRespVO { @Schema(description = "该设备计划列表") private List plans; + @Schema(description = "额定产能") + private Integer ratedCapacity; + + @Schema(description = "每日报工平均值(根据工单报工计算)") + private Integer dailyAverageValue; + + @Schema(description = "数据采集产能") + private Integer dataCollectionCapacity; + @Data public static class PlanItem { @Schema(description = "计划ID") diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/baogongrecord/BaogongRecordMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/baogongrecord/BaogongRecordMapper.java index 2ca75c6a5..fdd077a6d 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/baogongrecord/BaogongRecordMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/baogongrecord/BaogongRecordMapper.java @@ -6,8 +6,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.mes.dal.dataobject.baogongrecord.BaogongRecordDO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.mes.controller.admin.baogongrecord.vo.*; +import org.apache.ibatis.annotations.Param; /** * 报工 Mapper @@ -26,4 +29,9 @@ public interface BaogongRecordMapper extends BaseMapperX { .orderByDesc(BaogongRecordDO::getId)); } + + IPage selectStatPage(Page page, + @Param("reqVO") BaogongRecordStatPageReqVO reqVO); + + } \ 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/baogongrecord/BaogongRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordService.java index 6ff51e2fb..9bec8b49a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordService.java @@ -52,4 +52,13 @@ public interface BaogongRecordService { */ PageResult getBaogongRecordPage(BaogongRecordPageReqVO pageReqVO); + /** + * 获得报工统计分页 + * + * @param reqVO 分页查询 + * @return 报工分页 + */ + PageResult getBaogongRecordStatPage(BaogongRecordStatPageReqVO reqVO); + + } \ 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/baogongrecord/BaogongRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordServiceImpl.java index 6ffa88a0a..4f1d3c9e3 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/baogongrecord/BaogongRecordServiceImpl.java @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.mes.service.baogongrecord; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -71,4 +73,12 @@ public class BaogongRecordServiceImpl implements BaogongRecordService { return baogongRecordMapper.selectPage(pageReqVO); } + + @Override + public PageResult getBaogongRecordStatPage(BaogongRecordStatPageReqVO reqVO) { + Page page = new Page<>(reqVO.getPageNo(), reqVO.getPageSize()); + IPage result = baogongRecordMapper.selectStatPage(page, reqVO); + return new PageResult<>(result.getRecords(), result.getTotal()); + } + } \ 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/plan/PlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java index 0ba71b2e1..10750cf11 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanServiceImpl.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.mes.service.plan; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; @@ -615,9 +616,11 @@ public class PlanServiceImpl implements PlanService { vo.setDeviceId(deviceId); vo.setDeviceName(device == null ? null : device.getDeviceName()); vo.setDeviceCode(device == null ? null : device.getDeviceCode()); + vo.setRatedCapacity(device == null ? null : device.getRatedCapacity()); + vo.setDailyAverageValue(device == null ? null : device.getDailyAverageValue()); + vo.setDataCollectionCapacity(device == null ? null : device.getDataCollectionCapacity()); List plans = new ArrayList<>(); - DateTimeFormatter DATETIME_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); for (PlanDO plan : entry.getValue()) { DevicePlanGanttRespVO.PlanItem item = new DevicePlanGanttRespVO.PlanItem(); @@ -634,9 +637,10 @@ public class PlanServiceImpl implements PlanService { item.setProductCode(product == null ? null : product.getBarCode()); item.setDeviceCode(device == null ? null : device.getDeviceCode()); item.setSourceType("HISTORY"); - item.setPlanStartTimeStr(plan.getPlanStartTime().format(DATETIME_FMT)); - item.setPlanEndTimeStr(plan.getPlanEndTime().format(DATETIME_FMT)); - item.setLatestStartTimeStr(plan.getLatestStartTime().format(DATETIME_FMT)); + item.setDeliveryDateStr(plan.getDeliveryDate() == null ? null : plan.getDeliveryDate().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY))); + item.setPlanStartTimeStr(plan.getPlanStartTime().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND))); + item.setPlanEndTimeStr(plan.getPlanEndTime().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND))); + item.setLatestStartTimeStr(plan.getLatestStartTime().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND))); plans.add(item); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/baogongrecord/BaogongRecordMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/baogongrecord/BaogongRecordMapper.xml index 46a667934..30efea6ba 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/baogongrecord/BaogongRecordMapper.xml +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/baogongrecord/BaogongRecordMapper.xml @@ -9,4 +9,39 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + + \ No newline at end of file