package org.jeecg.modules.eam.controller; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.parser.Feature; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; 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.common.util.TranslateDictTextUtils; 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.service.IEamInspectionOrderService; import org.jeecg.modules.eam.service.IEamReportRepairService; import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService; import org.jeecg.modules.eam.vo.*; 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 javax.annotation.Resource; import java.time.LocalDate; import java.util.*; @Slf4j @Api(tags = "设备管理-首页看板接口") @RestController @RequestMapping("/eam/dashboard") public class EamDashboardController { @Autowired private IEamEquipmentService eamEquipmentService; @Autowired private IEamReportRepairService reportRepairService; @Autowired private IEamInspectionOrderService inspectionOrderService; @Autowired private IEamWeekMaintenanceOrderService weekMaintenanceOrderService; @Resource private ObjectMapper objectMapper; @Resource private TranslateDictTextUtils translateDictTextUtils; @ApiOperation(value = "看板接口-维保状态统计", notes = "看板接口-维保状态统计") @GetMapping(value = "/equipmentStatusStatistics") public Result equipmentStatusStatistics(@RequestParam(required = false, value = "productionId") String productionId) { List list = eamEquipmentService.queryByProductionId(productionId); //初始化返回 Map statisticsMap = new HashMap<>(); statisticsMap.put(EquipmentMaintenanceStatus.NORMAL.name(), new EquipmentStatusStatistics(EquipmentMaintenanceStatus.NORMAL.name(), "正常")); 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())) { //正常状态 statisticsMap.get(EquipmentMaintenanceStatus.NORMAL.name()).increase(); } 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())) { //保养状态 statisticsMap.get(EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name()).increase(); } else { statisticsMap.get(EquipmentMaintenanceStatus.UNDER_INSPECTION.name()).increase(); } } List 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 statisticsMap = new HashMap<>(); List monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today); monthsBetween.forEach(month -> { statisticsMap.put(month, new EquipmentRepairStatistics(month)); }); List list = reportRepairService.equipmentRepairStatistics(productionId, firstOfMonth, today); for (EquipmentRepairStatistics statistics : list) { if (statisticsMap.containsKey(statistics.getMonthStr())) { statisticsMap.put(statistics.getMonthStr(), statistics); } } List resultList = new ArrayList<>(statisticsMap.values()); //排序 resultList.sort(Comparator.comparing(EquipmentRepairStatistics::getMonthStr)); return Result.ok(resultList); } @ApiOperation(value = "看板接口-点检统计", notes = "看板接口-点检统计") @GetMapping(value = "/equipmentInspectionStatistics") public Result equipmentInspectionStatistics(@RequestParam(required = false, value = "productionId") String productionId) { //统计结束日期 LocalDate today = LocalDate.now(); LocalDate localDate = today.minusMonths(5); //统计开始日期 LocalDate firstOfMonth = DateUtils.getFirstOfMonth(localDate); //初始化返回值 Map statisticsMap = new HashMap<>(); List monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today); monthsBetween.forEach(month -> { statisticsMap.put(month, new EquipmentInspectionStatistics(month)); }); List list = inspectionOrderService.equipmentInspectionStatistics(productionId, firstOfMonth, today); for (EquipmentInspectionStatistics statistics : list) { if (statisticsMap.containsKey(statistics.getMonthStr())) { statisticsMap.put(statistics.getMonthStr(), statistics); } } List resultList = new ArrayList<>(statisticsMap.values()); //排序 resultList.sort(Comparator.comparing(EquipmentInspectionStatistics::getMonthStr)); return Result.ok(resultList); } @ApiOperation(value = "看板接口-周保统计", notes = "看板接口-周保统计") @GetMapping(value = "/equipmentMaintenanceStatistics") public Result equipmentMaintenanceStatistics(@RequestParam(required = false, value = "productionId") String productionId) { //统计结束日期 LocalDate today = LocalDate.now(); LocalDate localDate = today.minusMonths(5); //统计开始日期 LocalDate firstOfMonth = DateUtils.getFirstOfMonth(localDate); //初始化返回值 Map statisticsMap = new HashMap<>(); List monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today); monthsBetween.forEach(month -> { statisticsMap.put(month, new EquipmentMaintenanceStatistics(month)); }); List list = weekMaintenanceOrderService.equipmentMaintenanceStatistics(productionId, firstOfMonth, today); for (EquipmentMaintenanceStatistics statistics : list) { if (statisticsMap.containsKey(statistics.getMonthStr())) { statisticsMap.put(statistics.getMonthStr(), statistics); } } List resultList = new ArrayList<>(statisticsMap.values()); //排序 resultList.sort(Comparator.comparing(EquipmentMaintenanceStatistics::getMonthStr)); return Result.ok(resultList); } @ApiOperation(value = "维修看板-维修状态统计", notes = "维修看板-维修状态统计") @GetMapping(value = "/repairStatusStatistics") public Result repairStatusStatistics() { EquipmentRepairStatusStatistics statistics = reportRepairService.repairStatusStatistics(); return Result.OK(statistics); } @ApiOperation(value = "维修看板-维修列表", notes = "维修看板-维修列表") @GetMapping(value = "/repairList") public Result repairList() { List list = reportRepairService.repairList(); if(CollectionUtil.isEmpty(list)) { return Result.ok(Collections.emptyList()); } List items = new ArrayList<>(); try { for(EquipmentRepairListVO vo : list) { String json = objectMapper.writeValueAsString(vo); JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); translateDictTextUtils.translateField("reportOperator", vo.getReportOperator(), item, "sys_user,realname,username"); translateDictTextUtils.translateField("repairOperator", vo.getRepairOperator(), item, "sys_user,realname,username"); translateDictTextUtils.translateField("reportStatus", vo.getReportStatus(), item, "report_repair_status"); translateDictTextUtils.translateField("orgId", vo.getOrgId(), item, "mdc_production,production_name,id"); items.add(item); } return Result.OK(items); }catch (Exception e) { return Result.error("数据转译失败!"); } } @ApiOperation(value = "维修看板-维修工排名", notes = "维修看板-维修工排名") @GetMapping(value = "/repairmanRanking") public Result repairmanRanking() { return null; } }