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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.TranslateDictTextUtils; import org.jeecg.modules.eam.constant.*; import org.jeecg.modules.eam.entity.*; import org.jeecg.modules.eam.request.EamInspectionOrderQuery; import org.jeecg.modules.eam.request.EamReportRepairQuery; import org.jeecg.modules.eam.request.EamWeekMaintenanceQuery; import org.jeecg.modules.eam.service.*; 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; @Autowired private IEamRepairOrderService repairOrderService; @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() { LocalDate today = LocalDate.now(); LocalDate end = today.plusDays(1); LocalDate start = today.minusDays(30); //只取前7名 List list = repairOrderService.repairmanRanking(start.toString(), end.toString()); if (CollectionUtil.isEmpty(list)) { return Result.ok(Collections.emptyList()); } if (list.size() > 7) { list = list.subList(0, 7); } List items = new ArrayList<>(); try { for (RepairmanRankingVO vo : list) { String json = objectMapper.writeValueAsString(vo); JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); translateDictTextUtils.translateField("repairer", vo.getRepairer(), item, "sys_user,realname,username"); items.add(item); } return Result.OK(items); } catch (Exception e) { return Result.error("数据转译失败!"); } } @ApiOperation(value = "维修看板-故障类型统计", notes = "维修看板-故障类型统计") @GetMapping(value = "/faultTypeStatistics") public Result faultTypeStatistics() { //统计今年来故障分类情况 LocalDate today = LocalDate.now(); LocalDate end = today.plusDays(1); //今年第一天 LocalDate start = today.withDayOfYear(1); // 统计个数 List list = reportRepairService.faultTypeStatistics(start.toString(), end.toString()); if (CollectionUtil.isEmpty(list)) { return Result.ok(Collections.emptyList()); } List items = new ArrayList<>(); try { for (FaultTypeStatisticsVO vo : list) { String json = objectMapper.writeValueAsString(vo); JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); translateDictTextUtils.translateField("faultType", vo.getFaultType(), item, "fault_reason_category"); if (item.get("faultType" + CommonConstant.DICT_TEXT_SUFFIX) != null) { items.add(item); } } return Result.OK(items); } catch (Exception e) { return Result.error("数据转译失败!"); } } @ApiOperation(value = "H5首页-待执行工单数量统计", notes = "H5首页-待执行工单数量统计") @GetMapping(value = "/pendingExecOrderCountBySelf") public Result pendingExecOrderCountBySelf() { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); Map countMap = CollectionUtil.newHashMap(); if (user == null) { return Result.ok(countMap); } String post = user.getPost(); if (BusinessCodeConst.PCR0001.equals(post)) { //是操作工,查询可领取的点检、周保工单 Page inspectionOrderPage = new Page<>(1, 99999999); EamInspectionOrderQuery inspectionOrderQuery = new EamInspectionOrderQuery(); inspectionOrderQuery.setInspectionStatus(InspectionStatus.WAIT_INSPECTION.name()); List unReceivedInspectionOrderList = inspectionOrderService.queryPageList(inspectionOrderPage, inspectionOrderQuery).getRecords(); Page maintenanceOrderPage = new Page<>(1, 99999999); EamWeekMaintenanceQuery weekMaintenanceQuery = new EamWeekMaintenanceQuery(); weekMaintenanceQuery.setMaintenanceStatus(WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name()); List unReceivedMaintenanceOrderList = weekMaintenanceOrderService.queryPageList(maintenanceOrderPage, weekMaintenanceQuery).getRecords(); countMap.put("unExecInspectionOrderCount", unReceivedInspectionOrderList.size()); countMap.put("unExecMaintenanceOrderCount", unReceivedMaintenanceOrderList.size()); countMap.put("unExecRepairOrderCount", 0); } else if (BusinessCodeConst.PCR0002.equals(post)) { //是维修工,查询可领取的报修单 Page maintenanceOrderPage = new Page<>(1, 99999999); EamReportRepairQuery reportRepairQuery = new EamReportRepairQuery(); reportRepairQuery.setReportStatus(EquipmentRepairStatus.WAIT_REPAIR.name()); List unReceivedOrderList = reportRepairService.pageList(maintenanceOrderPage, reportRepairQuery).getRecords(); countMap.put("unExecInspectionOrderCount", 0); countMap.put("unExecMaintenanceOrderCount", 0); countMap.put("unExecRepairOrderCount", unReceivedOrderList.size()); } else { countMap.put("unExecInspectionOrderCount", 0); countMap.put("unExecMaintenanceOrderCount", 0); countMap.put("unExecRepairOrderCount", 0); } return Result.OK(countMap); } }