Lius
2025-03-31 943d055689b2df81fa5c60bed5f40dae6135f713
中心综合利用率趋势接口
已添加2个文件
已修改7个文件
208 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -120,26 +120,30 @@
//        return Result.OK(result);
//    }
//    @ApiOperation(value = "设备效率报表-班组综合利用率统计分析", notes = "设备效率报表-综合利用率统计分析")
//    @GetMapping("/teamComprehensiveRateAnalyze")
//    public Result teamComprehensiveRateAnalyze(DayUtilizationRateContrastQueryVo vo) {
//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//        String userId = user.getId();
//        MdcUtilizationRateDto result = mdcEfficiencyReportService.teamComprehensiveRateAnalyze(userId, vo);
//        return Result.OK(result);Equipment utilization distribution of each team
//    }
    @ApiOperation(value = "设备效率报表-班组综合利用率统计分析", notes = "设备效率报表-综合利用率统计分析")
    @GetMapping("/teamEfficiencyAnalyzeByMonth")
    public Result<?> teamEfficiencyAnalyzeByMonth(EquEffVo equEffVo) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Map<String, Object> result = mdcEfficiencyReportService.teamEfficiencyAnalyzeByMonth(userId, equEffVo);
        return Result.OK(result);
    }
    @ApiOperation(value = "设备效率报表-配送小组维度各班组月设备利用分布", notes = "设备效率报表-配送小组维度各班组月设备利用分布")
    @GetMapping("/teamEquipmentEfficiencyAnalyze")
    public Result<?> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(equEffVo);
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(userId, equEffVo);
        return Result.OK(result);
    }
    @ApiOperation(value = "设备效率报表-设备维度各班组月设备利用分布", notes = "设备效率报表-设备维度各班组月设备利用分布")
    @GetMapping("/equipmentEfficiencyAnalyze")
    public Result<?> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
        Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(equEffVo);
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(userId, equEffVo);
        return Result.OK(result);
    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package org.jeecg.modules.mdc.dto;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-28
 * @Description:
 */
@Data
public class TeamEquEffMonthChildDto {
    private String month;
    private BigDecimal utilizationRate = BigDecimal.ZERO;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package org.jeecg.modules.mdc.dto;
import lombok.Data;
import java.util.List;
/**
 * @Author: Lius
 * @CreateTime: 2025-03-28
 * @Description:
 */
@Data
public class TeamEquEffMonthDto {
    private String productionName;
    private List<TeamEquEffMonthChildDto> dataList;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -104,7 +104,9 @@
     */
    List<BigDecimal> getEfficiencyRate(String equipmentId, String date);
    Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo);
    Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo);
    Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo);
    Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo);
    Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -17,6 +17,7 @@
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.vo.MdcProOptionsVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -1749,7 +1750,7 @@
     * @return
     */
    @Override
    public Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo) {
    public Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) {
        Map<String, Object> result = new HashMap<>();
        List<String> mdcProductionIds = new ArrayList<>();
        if (StringUtils.isBlank(equEffVo.getProductionIds())) {
@@ -1758,6 +1759,8 @@
            mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(",")));
        }
        List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
        //数据权限过滤
        allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
        List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
        if (equipmentList != null && !equipmentList.isEmpty()) {
            List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList());
@@ -1770,7 +1773,7 @@
    }
    @Override
    public Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) {
    public Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) {
        Map<String, Object> result = new HashMap<>();
        // 1. å¤„理生产ID
        List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds())
@@ -1781,7 +1784,8 @@
        if (allProductionIds.isEmpty()) {
            return result; // æå‰è¿”回空结果
        }
        //数据权限过滤
        allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
        // 2. èŽ·å–è®¾å¤‡åˆ—è¡¨
        List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes())
                ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(",")))
@@ -1831,6 +1835,102 @@
    }
    @Override
    public Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo) {
        Map<String, Object> result = new HashMap<>();
        // 1. æ—¥æœŸå¤„理
        LocalDate now = LocalDate.now();
        Date start = DateUtils.toDate(now.plusMonths(-6).toString(), DateUtils.STR_DATE);
        Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE);
        List<String> monthBetween = DateUtils.getMonthBetween(start, end);
        List<String> dateList = monthBetween.stream()
                .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月")
                .collect(Collectors.toList());
        result.put("dateList", dateList);
        // 2. èŽ·å–äº§çº¿æ•°æ®
        List<MdcProduction> mdcProductions = mdcProductionService.findMdcPros(userId, equEffVo.getProductionId());
        // 3. åˆå§‹åŒ–结果集
        List<TeamEquEffMonthDto> utilizationRateList = new ArrayList<>();
        List<TeamEquEffMonthDto> shiftUtilizationRateList = new ArrayList<>();
        List<TeamEquEffMonthDto> amendUtilizationRateList = new ArrayList<>();
        // 4. å¤„理每个产线
        mdcProductions.forEach(mdcProduction -> {
            // 4.1 èŽ·å–ä¸‹çº§äº§çº¿å¹¶è¿‡æ»¤
            List<String> allProductionIds = mdcProductionService.recursionChildren(mdcProduction.getId());
            // æ•°æ®æƒé™è¿‡æ»¤
            allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
            // 4.2 èŽ·å–è®¾å¤‡åˆ—è¡¨
            List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds);
            if (equipmentList == null || equipmentList.isEmpty()) {
                return;
            }
            //提取id集合
            List<String> equipmentIdList = equipmentList.stream()
                    .map(MdcEquipment::getEquipmentId)
                    .collect(Collectors.toList());
            TeamEquEffMonthDto urDto = new TeamEquEffMonthDto();
            TeamEquEffMonthDto surDto = new TeamEquEffMonthDto();
            TeamEquEffMonthDto aurDto = new TeamEquEffMonthDto();
            urDto.setProductionName(mdcProduction.getProductionName());
            surDto.setProductionName(mdcProduction.getProductionName());
            aurDto.setProductionName(mdcProduction.getProductionName());
            List<TeamEquEffMonthChildDto> urDataList = new ArrayList<>();
            List<TeamEquEffMonthChildDto> surDataList = new ArrayList<>();
            List<TeamEquEffMonthChildDto> aurDataList = new ArrayList<>();
            monthBetween.forEach(date -> {
                TeamEquEffMonthChildDto urCDto = new TeamEquEffMonthChildDto();
                TeamEquEffMonthChildDto surCDto = new TeamEquEffMonthChildDto();
                TeamEquEffMonthChildDto aurCDto = new TeamEquEffMonthChildDto();
                String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月";
                urCDto.setMonth(month);
                surCDto.setMonth(month);
                aurCDto.setMonth(month);
                List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, date.replaceAll("-", ""));
                if (dataList != null && !dataList.isEmpty()) {
                    // è®¡ç®—平均值
                    BigDecimal ur = dataList.stream()
                            .map(TeamEquEffDto::getUtilizationRate)
                            .reduce(BigDecimal.ZERO, BigDecimal::add)
                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
                    //利用率
                    urCDto.setUtilizationRate(ur);
                    //班次利用率
                    BigDecimal sur = dataList.stream()
                            .map(TeamEquEffDto::getShiftUtilizationRate)
                            .reduce(BigDecimal.ZERO, BigDecimal::add)
                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
                    surCDto.setUtilizationRate(sur);
                    //去除故障24小时利用率
                    BigDecimal aur = dataList.stream()
                            .map(TeamEquEffDto::getAmendUtilizationRate)
                            .reduce(BigDecimal.ZERO, BigDecimal::add)
                            .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP);
                    aurCDto.setUtilizationRate(aur);
                }
                urDataList.add(urCDto);
                surDataList.add(surCDto);
                aurDataList.add(aurCDto);
            });
            urDto.setDataList(urDataList);
            surDto.setDataList(surDataList);
            aurDto.setDataList(aurDataList);
            utilizationRateList.add(urDto);
            shiftUtilizationRateList.add(surDto);
            amendUtilizationRateList.add(aurDto);
        });
        result.put("utilizationRateList", utilizationRateList);
        result.put("shiftUtilizationRateList", shiftUtilizationRateList);
        result.put("amendUtilizationRateList", amendUtilizationRateList);
        return result;
    }
    // æå–的平均值计算方法
    private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) {
        BigDecimal size = new BigDecimal(items.size());
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
@@ -59,4 +59,6 @@
    List<MdcProduction> loadProductionOptions(@Param("userId") String userId, @Param("productionId") String productionId);
    List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList);
    List<String> findProIdsByUId(@Param("userId") String userId, @Param("allProductionIds") List<String> allProductionIds);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
@@ -111,6 +111,7 @@
                AND t1.org_type = '2'
            </otherwise>
        </choose>
        ORDER BY t1.production_order
    </select>
    <select id="findTeamValue" resultType="java.lang.String">
@@ -124,4 +125,17 @@
            #{productionId}
        </foreach>
    </select>
    <select id="findProIdsByUId" resultType="java.lang.String">
        SELECT
            pro_id
        FROM
            mdc_user_production
        WHERE
            pro_id IN
            <foreach collection="allProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ",">
                #{productionId}
            </foreach>
          AND user_id = #{userId}
    </select>
</mapper>
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
@@ -158,6 +158,8 @@
     */
    List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId);
    List<MdcProduction> findMdcPros(String userId, String productionId);
    /**
     *
     * @param userId
@@ -165,4 +167,12 @@
     * @return
     */
    List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId);
    /**
     *
     * @param userId
     * @param allProductionIds
     * @return
     */
    List<String> findProIdsByUId(String userId, List<String> allProductionIds);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -567,6 +567,11 @@
    }
    @Override
    public List<MdcProduction> findMdcPros(String userId, String productionId) {
        return this.baseMapper.loadProductionOptions(userId, productionId);
    }
    @Override
    public List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId) {
        List<MdcProOptionsVo> result = new ArrayList<>();
        List<String> productionList = this.findChildren(Arrays.asList(productionId.split(",")));
@@ -590,6 +595,11 @@
        return result;
    }
    @Override
    public List<String> findProIdsByUId(String userId, List<String> allProductionIds) {
        return this.baseMapper.findProIdsByUId(userId, allProductionIds);
    }
    /**
     * æ‰“å¼€ çˆ¶èŠ‚ç‚¹ åŠ ä»¥ä¸Šçš„mdc标记
     * @param parentId