From 1ea54b1f576edafdd6091859047b3622119826c4 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Mon, 11 May 2026 16:04:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E4=BA=A7=E8=83=BD?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/DeviceCapacityReportPageReqVO.java | 13 +++++++ .../controller/admin/plan/PlanController.java | 7 ++++ .../plan/vo/PlanProductCapacityPageReqVO.java | 37 +++++++++++++++++++ .../plan/vo/PlanProductCapacityRespVO.java | 24 ++++++++++++ .../deviceledger/DeviceLedgerMapper.java | 2 +- .../module/mes/dal/mysql/plan/PlanMapper.java | 12 +++++- .../deviceledger/DeviceLedgerServiceImpl.java | 16 +++++--- .../module/mes/service/plan/PlanService.java | 2 + .../mes/service/plan/PlanServiceImpl.java | 30 +++++++++++++++ .../main/resources/mapper/plan/PlanMapper.xml | 31 +++++++++++++++- 10 files changed, 166 insertions(+), 8 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityRespVO.java diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceCapacityReportPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceCapacityReportPageReqVO.java index c36befa0c..995067def 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceCapacityReportPageReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceCapacityReportPageReqVO.java @@ -5,6 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +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 @@ -29,4 +34,12 @@ public class DeviceCapacityReportPageReqVO extends PageParam { @Schema(description = "导出 ids,逗号分隔") private String ids; + + @Schema(description = "开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime beginTime; + + @Schema(description = "结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java index 8e22df7d1..92b9a02d7 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/PlanController.java @@ -684,6 +684,13 @@ public class PlanController { return success(planService.getDevicePlanGantt(reqVO)); } + @GetMapping("/product-capacity-page") + @Operation(summary = "按产品分组查询近半年日报工均值产能分页") + @PreAuthorize("@ss.hasPermission('mes:plan:query')") + public CommonResult> getPlanProductCapacityPage(@Valid PlanProductCapacityPageReqVO reqVO) { + return success(planService.getPlanProductCapacityPage(reqVO)); + } + } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityPageReqVO.java new file mode 100644 index 000000000..ed5c45a82 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.mes.controller.admin.plan.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 PlanProductCapacityPageReqVO extends PageParam { + + @Schema(description = "设备台账 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Long deviceId; + + @Schema(description = "产品编码") + private String productCode; + + @Schema(description = "产品名称") + private String productName; + + @Schema(description = "任务编码") + private String taskCode; + + @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/plan/vo/PlanProductCapacityRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityRespVO.java new file mode 100644 index 000000000..17bd31f12 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/plan/vo/PlanProductCapacityRespVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.mes.controller.admin.plan.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 生产计划按产品分组产能分页 Response VO") +@Data +public class PlanProductCapacityRespVO { + + @Schema(description = "产品编码") + private String productCode; + + @Schema(description = "产品名称") + private String productName; + +// @Schema(description = "任务编码") +// private String taskCode; + + @Schema(description = "报工总数") + private Long baogongTotal; + + @Schema(description = "报工均值产能,按近半年到昨天的统计天数计算,四舍五入") + private Integer avgCapacity; +} diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java index e8fdeb50e..8dde8bdb3 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java @@ -24,7 +24,7 @@ public interface DeviceLedgerMapper extends BaseMapperX { LambdaQueryWrapperX deviceLedgerDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); deviceLedgerDOLambdaQueryWrapperX - .eqIfPresent(DeviceLedgerDO::getDeviceCode, reqVO.getDeviceCode()) + .likeIfPresent(DeviceLedgerDO::getDeviceCode, reqVO.getDeviceCode()) .likeIfPresent(DeviceLedgerDO::getDeviceName, reqVO.getDeviceName()) .eqIfPresent(DeviceLedgerDO::getDeviceStatus, reqVO.getDeviceStatus()) .eqIfPresent(DeviceLedgerDO::getDeviceBrand, reqVO.getDeviceBrand()) diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java index f71bc714c..e0e98f715 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/plan/PlanMapper.java @@ -6,9 +6,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanProductCapacityPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanProductCapacityRespVO; import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusEnum; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Update; @@ -143,4 +147,10 @@ public interface PlanMapper extends BaseMapperX { } List> getLastSevenDaysCompletedCount(); -} \ No newline at end of file + + IPage selectProductCapacityPage(Page page, + @Param("reqVO") PlanProductCapacityPageReqVO reqVO, + @Param("beginTime") LocalDateTime beginTime, + @Param("endTime") LocalDateTime endTime, + @Param("statDays") Integer statDays); +} 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 8a3f38a46..bcb8b8595 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 @@ -376,7 +376,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { public PageResult getDeviceCapacityReportPage(DeviceCapacityReportPageReqVO pageReqVO) { DeviceLedgerPageReqVO queryReqVO = buildDeviceCapacityQuery(pageReqVO); PageResult pageResult = deviceLedgerMapper.selectPage(queryReqVO); - List reportList = buildDeviceCapacityReportList(pageResult.getList()); + List reportList = buildDeviceCapacityReportList(pageResult.getList(),pageReqVO.getBeginTime(), pageReqVO.getEndTime()); return new PageResult<>(reportList, pageResult.getTotal()); } @@ -384,7 +384,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { public List getDeviceCapacityReportList(DeviceCapacityReportPageReqVO pageReqVO) { DeviceLedgerPageReqVO queryReqVO = buildDeviceCapacityQuery(pageReqVO); List list = deviceLedgerMapper.selectPage(queryReqVO).getList(); - return buildDeviceCapacityReportList(list); + return buildDeviceCapacityReportList(list,pageReqVO.getBeginTime(), pageReqVO.getEndTime()); } private DeviceLedgerPageReqVO buildDeviceCapacityQuery(DeviceCapacityReportPageReqVO pageReqVO) { @@ -401,7 +401,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { return queryReqVO; } - private List buildDeviceCapacityReportList(List deviceList) { + private List buildDeviceCapacityReportList(List deviceList, LocalDateTime beginTimeParam, LocalDateTime endTimeParam) { if (CollUtil.isEmpty(deviceList)) { return Collections.emptyList(); } @@ -447,8 +447,14 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { (a, b) -> a )); - LocalDate endDate = LocalDate.now().minusDays(1); - LocalDate startDate = endDate.minusMonths(6); + LocalDate endDate = endTimeParam != null + ? endTimeParam.toLocalDate() + : LocalDate.now().minusDays(1); + + LocalDate startDate = beginTimeParam != null + ? beginTimeParam.toLocalDate() + : endDate.minusMonths(6); + List statDays = listStatDays(startDate, endDate); Map actualCapacityMap = new HashMap<>(); if (CollUtil.isNotEmpty(statDays)) { diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java index 1438134ce..110b5307b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/plan/PlanService.java @@ -111,5 +111,7 @@ public interface PlanService { List getDevicePlanGantt(DevicePlanGanttReqVO reqVO); + PageResult getPlanProductCapacityPage(PlanProductCapacityPageReqVO reqVO); + } 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 77ef56ceb..a8d076c33 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 @@ -50,6 +50,7 @@ import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import io.swagger.v3.oas.annotations.media.Schema; @@ -67,6 +68,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -766,5 +768,33 @@ public class PlanServiceImpl implements PlanService { } + @Override + public PageResult getPlanProductCapacityPage(PlanProductCapacityPageReqVO reqVO) { + LocalDateTime beginTime = reqVO.getBeginBaogongTime(); + LocalDateTime endTime = reqVO.getEndBaogongTime(); + + if (beginTime == null || endTime == null) { + LocalDate yesterday = LocalDate.now().minusDays(1); + LocalDate beginDate = yesterday.minusMonths(6); + if (beginTime == null) { + beginTime = beginDate.atStartOfDay(); + } + if (endTime == null) { + endTime = yesterday.atStartOfDay(); + } + } + + int statDays = (int) ChronoUnit.DAYS.between(beginTime.toLocalDate(), endTime.toLocalDate()); + if (statDays <= 0) { + statDays = 1; + } + + IPage page = planMapper.selectProductCapacityPage( + new Page<>(reqVO.getPageNo(), reqVO.getPageSize()), + reqVO, beginTime, endTime, statDays); + return new PageResult<>(page.getRecords(), page.getTotal()); + } + + } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/plan/PlanMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/plan/PlanMapper.xml index 12749ef1e..aa26618c8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/plan/PlanMapper.xml +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/plan/PlanMapper.xml @@ -17,4 +17,33 @@ WHERE end_time >= CURDATE() - INTERVAL 6 DAY GROUP BY DATE(end_time) - \ No newline at end of file + + + +