From 943d055689b2df81fa5c60bed5f40dae6135f713 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期一, 31 三月 2025 10:28:01 +0800 Subject: [PATCH] 中心综合利用率趋势接口 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml | 14 +++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java | 10 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java | 18 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java | 18 ++++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 106 +++++++++++++++++++++++++ lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java | 10 ++ lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java | 24 +++-- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java | 2 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java | 6 + 9 files changed, 193 insertions(+), 15 deletions(-) diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java index 5b0b596..ab8fb5e 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java new file mode 100644 index 0000000..94f996b --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java new file mode 100644 index 0000000..5c1f322 --- /dev/null +++ b/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; +} diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java index 30b2f0c..cf688c3 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java +++ b/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); } diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java index 0d7ebe1..8733675 100644 --- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java +++ b/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()); diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java index 95c60bc..f53d482 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java +++ b/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); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml index f84308c..7d0b8f2 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml +++ b/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> diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java index 9b94f22..104a9db 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java +++ b/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); } diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java index bc363c2..c502486 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java +++ b/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); + } + /** * 鎵撳紑 鐖惰妭鐐� 鍙� 浠ヤ笂鐨刴dc鏍囪 * @param parentId -- Gitblit v1.9.3