fix:修改产能报表

main
HuangHuiKang 1 week ago
parent a7863b39b5
commit 1ea54b1f57

@ -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;
}

@ -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<PageResult<PlanProductCapacityRespVO>> getPlanProductCapacityPage(@Valid PlanProductCapacityPageReqVO reqVO) {
return success(planService.getPlanProductCapacityPage(reqVO));
}
}

@ -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;
}

@ -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;
}

@ -24,7 +24,7 @@ public interface DeviceLedgerMapper extends BaseMapperX<DeviceLedgerDO> {
LambdaQueryWrapperX<DeviceLedgerDO> 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())

@ -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<PlanDO> {
}
List<Map<String, Object>> getLastSevenDaysCompletedCount();
IPage<PlanProductCapacityRespVO> selectProductCapacityPage(Page<PlanProductCapacityRespVO> page,
@Param("reqVO") PlanProductCapacityPageReqVO reqVO,
@Param("beginTime") LocalDateTime beginTime,
@Param("endTime") LocalDateTime endTime,
@Param("statDays") Integer statDays);
}

@ -376,7 +376,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
public PageResult<DeviceCapacityReportRespVO> getDeviceCapacityReportPage(DeviceCapacityReportPageReqVO pageReqVO) {
DeviceLedgerPageReqVO queryReqVO = buildDeviceCapacityQuery(pageReqVO);
PageResult<DeviceLedgerDO> pageResult = deviceLedgerMapper.selectPage(queryReqVO);
List<DeviceCapacityReportRespVO> reportList = buildDeviceCapacityReportList(pageResult.getList());
List<DeviceCapacityReportRespVO> 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<DeviceCapacityReportRespVO> getDeviceCapacityReportList(DeviceCapacityReportPageReqVO pageReqVO) {
DeviceLedgerPageReqVO queryReqVO = buildDeviceCapacityQuery(pageReqVO);
List<DeviceLedgerDO> 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<DeviceCapacityReportRespVO> buildDeviceCapacityReportList(List<DeviceLedgerDO> deviceList) {
private List<DeviceCapacityReportRespVO> buildDeviceCapacityReportList(List<DeviceLedgerDO> 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<LocalDate> statDays = listStatDays(startDate, endDate);
Map<Long, Integer> actualCapacityMap = new HashMap<>();
if (CollUtil.isNotEmpty(statDays)) {

@ -111,5 +111,7 @@ public interface PlanService {
List<DevicePlanGanttRespVO> getDevicePlanGantt(DevicePlanGanttReqVO reqVO);
PageResult<PlanProductCapacityRespVO> getPlanProductCapacityPage(PlanProductCapacityPageReqVO reqVO);
}

@ -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<PlanProductCapacityRespVO> 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<PlanProductCapacityRespVO> page = planMapper.selectProductCapacityPage(
new Page<>(reqVO.getPageNo(), reqVO.getPageSize()),
reqVO, beginTime, endTime, statDays);
return new PageResult<>(page.getRecords(), page.getTotal());
}
}

@ -17,4 +17,33 @@
WHERE end_time >= CURDATE() - INTERVAL 6 DAY
GROUP BY DATE(end_time)
</select>
<select id="selectProductCapacityPage"
resultType="cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanProductCapacityRespVO">
SELECT
pr.bar_code AS productCode,
pr.name AS productName,
SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)) AS baogongTotal,
CAST(ROUND(SUM(IFNULL(r.num, 0) + IFNULL(r.no_pass_num, 0)) / #{statDays}, 0) AS SIGNED) AS avgCapacity
FROM mes_baogong_record r
INNER JOIN mes_plan p ON p.id = r.plan_id AND p.deleted = b'0'
LEFT JOIN erp_product pr ON pr.id = p.product_id AND pr.deleted = b'0'
WHERE r.deleted = b'0'
AND p.device_id = #{reqVO.deviceId}
<if test="beginTime != null">
AND r.baogong_time &gt;= #{beginTime}
</if>
<if test="endTime != null">
AND r.baogong_time &lt; #{endTime}
</if>
<if test="reqVO.productCode != null and reqVO.productCode != ''">
AND pr.bar_code LIKE CONCAT('%', #{reqVO.productCode}, '%')
</if>
<if test="reqVO.productName != null and reqVO.productName != ''">
AND pr.name LIKE CONCAT('%', #{reqVO.productName}, '%')
</if>
GROUP BY p.product_id, pr.bar_code, pr.name
ORDER BY baogongTotal DESC, pr.bar_code ASC
</select>
</mapper>
Loading…
Cancel
Save