Lius
2025-03-28 680a66f5aad3dc6fc41251db8ee2e8a263a34fb7
班组综合利用率图表接口
已重命名2个文件
已添加2个文件
已修改9个文件
258 ■■■■■ 文件已修改
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/EquipmentEfficiencyAnalyzeDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffDto.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/UtilizationRateAvg.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquEffVo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -131,4 +131,7 @@
    MdcEquipmentDetailedDto findById(@Param("id") String id);
    List<MdcEquipment> findByProductionIds(@Param("mdcProductionIds") List<String> mdcProductionIds);
    List<MdcEquipment> findByProIdsAndTeamCode(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("teamCodeList") List<String> teamCodeList);
}
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -308,4 +308,20 @@
        </foreach>
    </select>
    <select id="findByProIdsAndTeamCode" resultType="org.jeecg.modules.mdc.entity.MdcEquipment">
        SELECT
            t1.*
        FROM
            mdc_equipment t1
                LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id
        WHERE t2.production_id IN
        <foreach collection="mdcProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ",">
            #{productionId}
        </foreach>
        AND t1.team_code IN
        <foreach collection="teamCodeList" item = "teamCode" index = "index" open = "(" close= ")" separator = ",">
            #{teamCode}
        </foreach>
    </select>
</mapper>
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -223,4 +223,12 @@
     * @return
     */
    List<MdcEquipment> findByProductionIds(List<String> mdcProductionIds);
    /**
     * æ ¹æ®äº§çº¿id集合和配送小组查询设备列表
     * @param allProductionIds
     * @param teamCodelist
     * @return
     */
    List<MdcEquipment> findByProIdsAndTeamCode(List<String> allProductionIds, List<String> teamCodelist);
}
lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -1020,4 +1020,15 @@
        return this.baseMapper.findByProductionIds(mdcProductionIds);
    }
    /**
     * æ ¹æ®äº§çº¿id集合和配送小组查询设备列表
     * @param mdcProductionIds
     * @param teamCodeList
     * @return
     */
    @Override
    public List<MdcEquipment> findByProIdsAndTeamCode(List<String> mdcProductionIds, List<String> teamCodeList) {
        return this.baseMapper.findByProIdsAndTeamCode(mdcProductionIds, teamCodeList);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -5,7 +5,6 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.mdc.dto.ComparativeAnalysisDto;
import org.jeecg.modules.mdc.dto.DayUtilizationRateDto;
@@ -13,7 +12,6 @@
import org.jeecg.modules.mdc.vo.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@@ -131,17 +129,17 @@
//        return Result.OK(result);Equipment utilization distribution of each team
//    }
//    @ApiOperation(value = "设备效率报表-配送小组维度各班组月设备利用分布", notes = "设备效率报表-配送小组维度各班组月设备利用分布")
//    @GetMapping("/teamEquipmentEfficiencyAnalyze")
//    public Result teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
//        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo);
//        return Result.OK(result);
//    }
    @ApiOperation(value = "设备效率报表-配送小组维度各班组月设备利用分布", notes = "设备效率报表-配送小组维度各班组月设备利用分布")
    @GetMapping("/teamEquipmentEfficiencyAnalyze")
    public Result<?> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(equEffVo);
        return Result.OK(result);
    }
    @ApiOperation(value = "设备效率报表-设备维度各班组月设备利用分布", notes = "设备效率报表-设备维度各班组月设备利用分布")
    @GetMapping("/equipmentEfficiencyAnalyze")
    public Result<?> equipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo);
    public Result<?> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(equEffVo);
        return Result.OK(result);
    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/EquipmentEfficiencyAnalyzeDto.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java ÐÞ¸Ä
@@ -10,7 +10,7 @@
 * @Description:
 */
@Data
public class TeamEquipmentEfficiencyAnalyzeDto {
public class EquipmentEfficiencyAnalyzeDto {
    private String equipmentName;
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package org.jeecg.modules.mdc.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-28
 * @Description:
 */
@Data
public class TeamEquEffDto {
    private String teamCode;
    /**
     * åˆ©ç”¨çއ
     */
    private BigDecimal utilizationRate = BigDecimal.ZERO;
    /**
     * ç­æ¬¡åˆ©ç”¨çއ
     */
    private BigDecimal shiftUtilizationRate = BigDecimal.ZERO;
    /**
     * ä¿®æ­£åˆ©ç”¨çއ
     */
    private BigDecimal amendUtilizationRate = BigDecimal.ZERO;
    public TeamEquEffDto() {
    }
    public TeamEquEffDto(String teamCode, BigDecimal utilizationRate, BigDecimal shiftUtilizationRate, BigDecimal amendUtilizationRate) {
        this.teamCode = teamCode;
        this.utilizationRate = utilizationRate;
        this.shiftUtilizationRate = shiftUtilizationRate;
        this.amendUtilizationRate = amendUtilizationRate;
    }
    public TeamEquEffDto(BigDecimal utilizationRate, BigDecimal shiftUtilizationRate, BigDecimal amendUtilizationRate) {
        this.utilizationRate = utilizationRate;
        this.shiftUtilizationRate = shiftUtilizationRate;
        this.amendUtilizationRate = amendUtilizationRate;
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/UtilizationRateAvg.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package org.jeecg.modules.mdc.dto;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-28
 * @Description:
 */
public class UtilizationRateAvg {
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
@@ -3,11 +3,12 @@
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mdc.dto.MdcComAnaDto;
import org.jeecg.modules.mdc.dto.MdcEfficiencyDto;
import org.jeecg.modules.mdc.dto.TeamEquEffDto;
import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
import org.jeecg.modules.mdc.vo.ComparativeAnalysisQueryVo;
import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo;
import org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto;
import org.jeecg.modules.mdc.dto.EquipmentEfficiencyAnalyzeDto;
import java.math.BigDecimal;
import java.util.List;
@@ -52,5 +53,7 @@
    List<BigDecimal> getEfficiencyRate(@Param("equipmentId") String equipmentId, @Param("date") String date);
    List<TeamEquipmentEfficiencyAnalyzeDto> teamEquipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month);
    List<EquipmentEfficiencyAnalyzeDto> equipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month);
    List<TeamEquEffDto> teamEquipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
@@ -187,7 +187,7 @@
        ORDER BY the_date ASC
    </select>
    <select id="teamEquipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto">
    <select id="equipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.EquipmentEfficiencyAnalyzeDto">
        SELECT
            t3.equipment_name,
            t1.utilization_rate AS utilizationRate,
@@ -206,4 +206,22 @@
        ORDER BY
            t1.utilization_rate DESC
    </select>
    <select id="teamEquipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.TeamEquEffDto">
        SELECT
            t3.team_code AS teamCode,
            t1.utilization_rate AS utilizationRate,
            t2.utilization_rate AS shiftUtilizationRate
        FROM
            mdc_equipment_statistical_info_month t1
                LEFT JOIN mdc_equipment_statistical_shift_info_month t2 ON t1.the_month = t2.the_month
                AND t1.equipment_id = t2.equipment_id
                LEFT JOIN mdc_equipment t3 ON t3.equipment_id = t1.equipment_id
        WHERE
            t1.equipment_id IN
            <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=",">
                #{id}
            </foreach>
            AND t1.the_month = #{month}
    </select>
</mapper>
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -104,5 +104,7 @@
     */
    List<BigDecimal> getEfficiencyRate(String equipmentId, String date);
    Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo);
    Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo);
    Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -4,6 +4,7 @@
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.mdc.dto.*;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
@@ -15,6 +16,7 @@
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecg.modules.system.service.ISysDictService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -24,6 +26,7 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -53,6 +56,9 @@
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    @Resource
    private ISysDictService sysDictService;
    /**
     * åˆ©ç”¨çŽ‡æŠ¥è¡¨
@@ -1739,28 +1745,115 @@
    /**
     * ç­ç»„各设备综合利用率
     *
     * @param teamEquEffVo
     * @param equEffVo
     * @return
     */
    @Override
    public Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) {
    public Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = new HashMap<>();
        List<String> mdcProductionIds = new ArrayList<>();
        if (StringUtils.isEmpty(teamEquEffVo.getProductionIds())) {
            mdcProductionIds.add(teamEquEffVo.getProductionId());
        if (StringUtils.isBlank(equEffVo.getProductionIds())) {
            mdcProductionIds.add(equEffVo.getProductionId());
        } else {
            mdcProductionIds.addAll(Arrays.asList(teamEquEffVo.getProductionIds().split(",")));
            mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(",")));
        }
        List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
        List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
        if (equipmentList != null && !equipmentList.isEmpty()) {
            List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList());
            List<TeamEquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, teamEquEffVo.getMonth());
            List<EquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.equipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth());
            result.put("dataList", dataList);
            List<String> equipmentNameList = dataList.stream().map(TeamEquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList());
            List<String> equipmentNameList = dataList.stream().map(EquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList());
            result.put("equipmentNameList", equipmentNameList);
        }
        return result;
    }
    @Override
    public Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = new HashMap<>();
        // 1. å¤„理生产ID
        List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds())
                ? Collections.singletonList(equEffVo.getProductionId())
                : Arrays.asList(equEffVo.getProductionIds().split(","));
        List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
        if (allProductionIds.isEmpty()) {
            return result; // æå‰è¿”回空结果
        }
        // 2. èŽ·å–è®¾å¤‡åˆ—è¡¨
        List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes())
                ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(",")))
                : mdcEquipmentService.findByProductionIds(allProductionIds);
        if (equipmentList.isEmpty()) {
            return result;
        }
        // 3. æ•°æ®å¤„理
        List<String> equipmentIdList = equipmentList.stream()
                .map(MdcEquipment::getEquipmentId)
                .collect(Collectors.toList());
        List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper
                .teamEquipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth());
        if (dataList.isEmpty()) {
            return result;
        }
        // 4. åˆ†ç»„计算平均值
        Map<String, TeamEquEffDto> grouped = dataList.stream()
                .collect(Collectors.groupingBy(
                        TeamEquEffDto::getTeamCode,
                        Collectors.collectingAndThen(
                                Collectors.toList(),
                                this::calculateAverages // æå–计算方法
                        )));
        // 5. å­—典转换
        Map<String, String> dictMap = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM)
                .stream()
                .collect(Collectors.toMap(DictModel::getValue, DictModel::getText));
        List<TeamEquEffDto> resultList = grouped.entrySet().stream()
                .map(entry -> buildResultDto(entry, dictMap))// æå–构建方法
                .sorted(Comparator.comparing(TeamEquEffDto::getUtilizationRate).reversed())
                .collect(Collectors.toList());
        result.put("dataList", resultList);
        result.put("teamCodeList", resultList.stream()
                .map(TeamEquEffDto::getTeamCode)
                .collect(Collectors.toList()));
        return result;
    }
    // æå–的平均值计算方法
    private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) {
        BigDecimal size = new BigDecimal(items.size());
        return new TeamEquEffDto(
                calculateAverage(items, TeamEquEffDto::getUtilizationRate, size),
                calculateAverage(items, TeamEquEffDto::getShiftUtilizationRate, size),
                calculateAverage(items, TeamEquEffDto::getAmendUtilizationRate, size)
        );
    }
    // é€šç”¨çš„平均值计算
    private BigDecimal calculateAverage(List<TeamEquEffDto> items, Function<TeamEquEffDto, BigDecimal> mapper, BigDecimal size) {
        return items.stream()
                .map(mapper)
                .reduce(BigDecimal.ZERO, BigDecimal::add)
                .divide(size, 2, RoundingMode.HALF_UP);
    }
    // æž„建结果DTO
    private TeamEquEffDto buildResultDto(Map.Entry<String, TeamEquEffDto> entry, Map<String, String> dictMap) {
        TeamEquEffDto dto = entry.getValue();
        dto.setTeamCode(dictMap.getOrDefault(entry.getKey(), entry.getKey()));
        return dto;
    }
    private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
@@ -1787,7 +1880,7 @@
                }
            }
            BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime));
            BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
            BigDecimal utilizationRate = processLong.divide(totalLong, 6, RoundingMode.HALF_UP);
            dto.setUtilizationRate(utilizationRate);
        } else {
            dto.setUtilizationRate(new BigDecimal("0"));
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquEffVo.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java ÐÞ¸Ä
@@ -8,7 +8,7 @@
 * @Description:
 */
@Data
public class TeamEquEffVo {
public class EquEffVo {
    /**
     * ä¸­å¿ƒ
@@ -19,6 +19,10 @@
     */
    private String productionIds;
    /**
     * é…é€å°ç»„ID
     */
    private String teamCodes;
    /**
     * æœˆä»½
     */
    private String month;