From 665ffec07abac9fa14e7613fe1c73922a537ff77 Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期二, 06 五月 2025 16:00:19 +0800 Subject: [PATCH] art: 设备管理-看板接口-维修统计接口 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentRepairStatistics.java | 29 +++++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java | 10 ++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml | 19 +++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java | 63 +++++++++--- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java | 12 ++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java | 29 +++++ lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentStatusStatistics.java | 6 lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java | 94 ++++++++++++++++++ 8 files changed, 238 insertions(+), 24 deletions(-) diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java index 92f023e..fa4d9a8 100644 --- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java +++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java @@ -6,11 +6,10 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.YearMonth; import java.time.ZoneId; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.TimeZone; +import java.time.format.DateTimeFormatter; +import java.util.*; import org.jeecg.common.constant.SymbolConstant; import org.springframework.util.StringUtils; @@ -783,4 +782,91 @@ public static Date localDateToDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } + + /** + * 鑾峰彇鏈湀绗竴澶� + * + * @return + */ + public static LocalDate getFirstOfMonth() { + LocalDate localDate = LocalDate.now(); + return localDate.withDayOfMonth(1); + } + + /** + * 鑾峰彇鏈湀绗竴澶� + * + * @return + */ + public static LocalDate getFirstOfMonth(LocalDate localDate) { + return localDate.withDayOfMonth(1); + } + + /** + * 鑾峰彇涓や釜鏈堜唤涓棿鐨勬墍鏈夋湀浠斤紝鍖呭惈寮�濮嬪拰缁撴潫鏈堜唤 + * + * @param startMonth + * @param endMonth + * @return + */ + public static List<String> getMonthsBetween(String startMonth, String endMonth) { + List<String> months = new ArrayList<>(); + + // 瀹氫箟鏃ユ湡鏍煎紡 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + + // 瑙f瀽璧峰鍜岀粨鏉熸湀浠� + YearMonth start = YearMonth.parse(startMonth, formatter); + YearMonth end = YearMonth.parse(endMonth, formatter); + + // 纭繚start <= end 濡傛灉涓嶆槸 鍒欒繘琛屼氦鎹� + if (start.isAfter(end)) { + YearMonth temp = start; + start = end; + end = temp; + } + + // 寰幆娣诲姞鏈堜唤 + YearMonth current = start; + while (!current.isAfter(end)) { + months.add(current.format(formatter)); + current = current.plusMonths(1); + } + + return months; + } + + /** + * 鑾峰彇涓や釜鏈堜唤涓棿鐨勬墍鏈夋湀浠斤紝鍖呭惈寮�濮嬪拰缁撴潫鏈堜唤 + * + * @param startMonth + * @param endMonth + * @return + */ + public static List<String> getMonthsBetween(LocalDate startMonth, LocalDate endMonth) { + List<String> months = new ArrayList<>(); + + // 瀹氫箟鏃ユ湡鏍煎紡 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + + // 瑙f瀽璧峰鍜岀粨鏉熸湀浠� + YearMonth start = YearMonth.of(startMonth.getYear(), startMonth.getMonth()); + YearMonth end = YearMonth.of(endMonth.getYear(), endMonth.getMonth()); + + // 纭繚start <= end 濡傛灉涓嶆槸 鍒欒繘琛屼氦鎹� + if (start.isAfter(end)) { + YearMonth temp = start; + start = end; + end = temp; + } + + // 寰幆娣诲姞鏈堜唤 + YearMonth current = start; + while (!current.isAfter(end)) { + months.add(current.format(formatter)); + current = current.plusMonths(1); + } + + return months; + } } \ No newline at end of file diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java index 70b8ebd..109ffa9 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java @@ -4,56 +4,87 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.util.DateUtils; import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus; import org.jeecg.modules.eam.constant.EquipmentRepairStatus; import org.jeecg.modules.eam.entity.EamEquipment; import org.jeecg.modules.eam.service.IEamEquipmentService; -import org.jeecg.modules.eam.vo.EquipmentMaintenanceStatistics; +import org.jeecg.modules.eam.service.IEamReportRepairService; +import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; +import org.jeecg.modules.eam.vo.EquipmentStatusStatistics; import org.springframework.beans.factory.annotation.Autowired; 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 java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.LocalDate; +import java.util.*; @Slf4j -@Api(tags="璁惧绠$悊-棣栭〉鐪嬫澘鎺ュ彛") +@Api(tags = "璁惧绠$悊-棣栭〉鐪嬫澘鎺ュ彛") @RestController @RequestMapping("/eam/dashboard") public class EamDashboardController { @Autowired private IEamEquipmentService eamEquipmentService; + @Autowired + private IEamReportRepairService reportRepairService; - @ApiOperation(value="鐪嬫澘鎺ュ彛-缁翠繚鐘舵�佺粺璁�", notes="鐪嬫澘鎺ュ彛-缁翠繚鐘舵�佺粺璁�") + @ApiOperation(value = "鐪嬫澘鎺ュ彛-缁翠繚鐘舵�佺粺璁�", notes = "鐪嬫澘鎺ュ彛-缁翠繚鐘舵�佺粺璁�") @GetMapping(value = "/equipmentStatusStatistics") public Result<?> equipmentStatusStatistics(@RequestParam(required = false, value = "productionId") String productionId) { List<EamEquipment> list = eamEquipmentService.queryByProductionId(productionId); //鍒濆鍖栬繑鍥� - Map<String, EquipmentMaintenanceStatistics> statisticsMap = new HashMap<>(); - statisticsMap.put(EquipmentMaintenanceStatus.NORMAL.name(), new EquipmentMaintenanceStatistics(EquipmentMaintenanceStatus.NORMAL.name(), "姝e父")); - statisticsMap.put(EquipmentMaintenanceStatus.UNDER_INSPECTION.name(), new EquipmentMaintenanceStatistics(EquipmentMaintenanceStatus.UNDER_INSPECTION.name(), "鐐规")); - statisticsMap.put(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name(), new EquipmentMaintenanceStatistics(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name(), "淇濆吇")); - statisticsMap.put(EquipmentRepairStatus.UNDER_REPAIR.name(), new EquipmentMaintenanceStatistics(EquipmentRepairStatus.UNDER_REPAIR.name(), "缁翠慨")); + Map<String, EquipmentStatusStatistics> statisticsMap = new HashMap<>(); + statisticsMap.put(EquipmentMaintenanceStatus.NORMAL.name(), new EquipmentStatusStatistics(EquipmentMaintenanceStatus.NORMAL.name(), "姝e父")); + statisticsMap.put(EquipmentMaintenanceStatus.UNDER_INSPECTION.name(), new EquipmentStatusStatistics(EquipmentMaintenanceStatus.UNDER_INSPECTION.name(), "鐐规")); + statisticsMap.put(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name(), new EquipmentStatusStatistics(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name(), "淇濆吇")); + statisticsMap.put(EquipmentRepairStatus.UNDER_REPAIR.name(), new EquipmentStatusStatistics(EquipmentRepairStatus.UNDER_REPAIR.name(), "缁翠慨")); for (EamEquipment entity : list) { - if(EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getMaintenanceStatus()) && EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getRepairStatus())) { + if (EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getMaintenanceStatus()) && EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getRepairStatus())) { //姝e父鐘舵�� statisticsMap.get(EquipmentMaintenanceStatus.NORMAL.name()).increase(); - }else if(!EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getRepairStatus())) { + } else if (!EquipmentMaintenanceStatus.NORMAL.name().equals(entity.getRepairStatus())) { //缁翠慨鐘舵�� statisticsMap.get(EquipmentRepairStatus.UNDER_REPAIR.name()).increase(); - } else if(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name().equals(entity.getMaintenanceStatus()) || EquipmentMaintenanceStatus.WAIT_CONFIRM.name().equals(entity.getMaintenanceStatus())) { + } else if (EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name().equals(entity.getMaintenanceStatus()) || EquipmentMaintenanceStatus.WAIT_CONFIRM.name().equals(entity.getMaintenanceStatus())) { //淇濆吇鐘舵�� statisticsMap.get(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name()).increase(); } else { statisticsMap.get(EquipmentMaintenanceStatus.UNDER_INSPECTION.name()).increase(); } } - List<EquipmentMaintenanceStatistics> resultList = new ArrayList<>(statisticsMap.values()); + List<EquipmentStatusStatistics> resultList = new ArrayList<>(statisticsMap.values()); + return Result.ok(resultList); + } + + @ApiOperation(value = "鐪嬫澘鎺ュ彛-缁翠慨缁熻", notes = "鐪嬫澘鎺ュ彛-缁翠慨缁熻") + @GetMapping(value = "/equipmentRepairStatistics") + public Result<?> equipmentRepairStatistics(@RequestParam(required = false, value = "productionId") String productionId) { + //缁熻缁撴潫鏃ユ湡 + LocalDate today = LocalDate.now(); + LocalDate localDate = today.minusMonths(5); + //缁熻寮�濮嬫棩鏈� + LocalDate firstOfMonth = DateUtils.getFirstOfMonth(localDate); + + //鍒濆鍖栬繑鍥炲�� + Map<String, EquipmentRepairStatistics> statisticsMap = new HashMap<>(); + List<String> monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today); + monthsBetween.forEach(month -> { + statisticsMap.put(month, new EquipmentRepairStatistics(month)); + }); + + List<EquipmentRepairStatistics> list = reportRepairService.equipmentRepairStatistics(productionId, firstOfMonth, today); + for (EquipmentRepairStatistics statistics : list) { + if (statisticsMap.containsKey(statistics.getMonthStr())) { + statisticsMap.put(statistics.getMonthStr(), statistics); + } + } + List<EquipmentRepairStatistics> resultList = new ArrayList<>(statisticsMap.values()); + //鎺掑簭 + resultList.sort(Comparator.comparing(EquipmentRepairStatistics::getMonthStr)); return Result.ok(resultList); } } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java index a86d58c..b507bcc 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java @@ -1,11 +1,12 @@ package org.jeecg.modules.eam.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.eam.entity.EamReportRepair; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.eam.request.EamReportRepairQuery; +import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; import java.util.List; @@ -25,4 +26,13 @@ * @return */ IPage<EamReportRepair> pageList(Page<EamReportRepair> page, @Param("eamReportRepair") EamReportRepairQuery eamReportRepairQuery, @Param("userId") String userId, @Param("equipmentIds") List<String> equipmentIds); + + /** + * 缁熻缁翠慨 + * @param productionIds 浣跨敤杞﹂棿 ids + * @param start 缁熻寮�濮嬫棩鏈� + * @param end 缁熻缁撴潫鏃ユ湡 + * @return + */ + List<EquipmentRepairStatistics> equipmentRepairStatistics(@Param("productionIds") List<String> productionIds, @Param("start") String start, @Param("end") String end); } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml index e95236a..cf05e8a 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml @@ -48,4 +48,23 @@ </where> ORDER BY t1.create_time DESC </select> + + <select id="equipmentRepairStatistics" resultType="org.jeecg.modules.eam.vo.EquipmentRepairStatistics"> + select FORMAT(err.create_time, 'yyyy-MM') as monthStr, + COUNT(1) as reportNumber, + SUM(CASE WHEN err.report_status = 'COMPLETE' THEN 1 ELSE 0 END) as repairedNumber + from eam_report_repair err + inner join eam_equipment e + on err.equipment_id = e.id + where err.report_status != 'ABOLISH' and err.del_flag = 0 and e.del_flag = 0 + <if test="productionIds != null"> + AND e.org_id IN + <foreach collection="productionIds" item="productionId" index="index" open="(" close=")" separator=","> + #{productionId} + </foreach> + </if> + and err.create_time >= #{start} + and err.create_time < #{end} + group by FORMAT(err.create_time, 'yyyy-MM') + </select> </mapper> \ No newline at end of file diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java index 059a9f6..d7e4ae9 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java @@ -7,7 +7,9 @@ import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrderDetail; import org.jeecg.modules.eam.request.EamReportRepairQuery; +import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; +import java.time.LocalDate; import java.util.List; /** @@ -54,4 +56,12 @@ */ boolean edit(EamReportRepair eamReportRepair); + /** + * 鏌ヨ鎶ヤ慨鍒楄〃 + * @param productionId + * @param firstOfMonth + * @param today + * @return + */ + List<EquipmentRepairStatistics> equipmentRepairStatistics(String productionId, LocalDate firstOfMonth, LocalDate today); } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java index faf446f..3f89858 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java @@ -1,5 +1,7 @@ package org.jeecg.modules.eam.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.core.JsonProcessingException; @@ -16,11 +18,15 @@ import org.jeecg.modules.eam.request.EamReportRepairQuery; import org.jeecg.modules.eam.service.IEamEquipmentExtendService; import org.jeecg.modules.eam.service.IEamReportRepairService; +import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; +import org.jeecg.modules.system.service.IMdcProductionService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.time.LocalDate; import java.util.*; /** @@ -33,6 +39,8 @@ @Resource private IEamEquipmentExtendService eamEquipmentExtendService; + @Autowired + private IMdcProductionService mdcProductionService; /** * 鍒嗛〉鍒楄〃 @@ -148,4 +156,25 @@ this.baseMapper.updateById(eamReportRepair); return true; } + + @Override + public List<EquipmentRepairStatistics> equipmentRepairStatistics(String productionId, LocalDate firstOfMonth, LocalDate today) { + if (StringUtils.isNotBlank(productionId)) { + //杞﹂棿缂栫爜涓嶄负绌� + List<String> productIds = mdcProductionService.recursionChildren(productionId); + if (CollectionUtil.isEmpty(productIds)) { + return Collections.emptyList(); + } + List<EquipmentRepairStatistics> list = this.baseMapper.equipmentRepairStatistics(productIds, firstOfMonth.toString(), today.plusDays(1).toString()); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); + } + return list; + } + List<EquipmentRepairStatistics> list = this.baseMapper.equipmentRepairStatistics(null, firstOfMonth.toString(), today.plusDays(1).toString()); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); + } + return list; + } } diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentRepairStatistics.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentRepairStatistics.java new file mode 100644 index 0000000..dd41b55 --- /dev/null +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentRepairStatistics.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.eam.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class EquipmentRepairStatistics implements Serializable { + /** + * 鏈堜唤 + */ + private String monthStr; + /** + * 鎶ヤ慨鏁� + */ + private Integer reportNumber; + /** + * 缁翠慨鏁� + */ + private Integer repairedNumber; + + public EquipmentRepairStatistics(){} + + public EquipmentRepairStatistics(String monthStr){ + this.monthStr = monthStr; + this.reportNumber = 0; + this.repairedNumber = 0; + } +} diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentMaintenanceStatistics.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentStatusStatistics.java similarity index 69% rename from lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentMaintenanceStatistics.java rename to lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentStatusStatistics.java index 0bd09a2..8e82086 100644 --- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentMaintenanceStatistics.java +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/vo/EquipmentStatusStatistics.java @@ -8,7 +8,7 @@ * 璁惧缁翠繚鐘舵�佺粺璁� */ @Data -public class EquipmentMaintenanceStatistics implements Serializable { +public class EquipmentStatusStatistics implements Serializable { /** * 鐘舵�� */ @@ -23,9 +23,9 @@ */ private String statusText; - public EquipmentMaintenanceStatistics() {} + public EquipmentStatusStatistics() {} - public EquipmentMaintenanceStatistics(String status, String statusText) { + public EquipmentStatusStatistics(String status, String statusText) { this.status = status; this.statusText = statusText; } -- Gitblit v1.9.3