cuilei
2025-07-11 3f84a974b485e5eed67313435036a274dc54352a
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamDashboardController.java
@@ -1,59 +1,288 @@
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.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus;
import org.jeecg.modules.eam.constant.EquipmentRepairStatus;
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.EamEquipment;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.vo.EquipmentMaintenanceStatistics;
import org.jeecg.modules.eam.entity.EamInspectionOrder;
import org.jeecg.modules.eam.entity.EamRepairOrder;
import org.jeecg.modules.eam.entity.EamWeekMaintenanceOrder;
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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
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;
    @Autowired
    private IEamInspectionOrderService inspectionOrderService;
    @Autowired
    private IEamWeekMaintenanceOrderService weekMaintenanceOrderService;
    @Resource
    private ObjectMapper objectMapper;
    @Resource
    private TranslateDictTextUtils translateDictTextUtils;
    @Autowired
    private IEamRepairOrderService repairOrderService;
    @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(), "正常"));
        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(), "正常"));
        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())) {
                //正常状态
                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);
    }
    @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<String, EquipmentInspectionStatistics> statisticsMap = new HashMap<>();
        List<String> monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today);
        monthsBetween.forEach(month -> {
            statisticsMap.put(month, new EquipmentInspectionStatistics(month));
        });
        List<EquipmentInspectionStatistics> list = inspectionOrderService.equipmentInspectionStatistics(productionId, firstOfMonth, today);
        for (EquipmentInspectionStatistics statistics : list) {
            if (statisticsMap.containsKey(statistics.getMonthStr())) {
                statisticsMap.put(statistics.getMonthStr(), statistics);
            }
        }
        List<EquipmentInspectionStatistics> 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<String, EquipmentMaintenanceStatistics> statisticsMap = new HashMap<>();
        List<String> monthsBetween = DateUtils.getMonthsBetween(firstOfMonth, today);
        monthsBetween.forEach(month -> {
            statisticsMap.put(month, new EquipmentMaintenanceStatistics(month));
        });
        List<EquipmentMaintenanceStatistics> list = weekMaintenanceOrderService.equipmentMaintenanceStatistics(productionId, firstOfMonth, today);
        for (EquipmentMaintenanceStatistics statistics : list) {
            if (statisticsMap.containsKey(statistics.getMonthStr())) {
                statisticsMap.put(statistics.getMonthStr(), statistics);
            }
        }
        List<EquipmentMaintenanceStatistics> 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<EquipmentRepairListVO> list = reportRepairService.repairList();
        if (CollectionUtil.isEmpty(list)) {
            return Result.ok(Collections.emptyList());
        }
        List<JSONObject> 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<RepairmanRankingVO> 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<JSONObject> 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<FaultTypeStatisticsVO> list = reportRepairService.faultTypeStatistics(start.toString(), end.toString());
        if (CollectionUtil.isEmpty(list)) {
            return Result.ok(Collections.emptyList());
        }
        List<JSONObject> 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();
        String post = user.getPost();
        Map<String, Integer> countMap = CollectionUtil.newHashMap();
        if (BusinessCodeConst.PCR0001.equals(post)) {
            //是操作工,查询待点检工单、待周保工单
            List<EamInspectionOrder> unExecInspectionOrderList = inspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>()
                    .eq(EamInspectionOrder::getOperator, user.getUsername())
                    .eq(EamInspectionOrder::getInspectionStatus, InspectionStatus.UNDER_INSPECTION.name())
                    .eq(EamInspectionOrder::getDelFlag, CommonConstant.DEL_FLAG_0));
            List<EamWeekMaintenanceOrder> unExecMaintenanceOrderList = weekMaintenanceOrderService.list(new LambdaQueryWrapper<EamWeekMaintenanceOrder>()
                    .eq(EamWeekMaintenanceOrder::getOperator, user.getUsername())
                    .eq(EamWeekMaintenanceOrder::getMaintenanceStatus, WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name())
                    .eq(EamWeekMaintenanceOrder::getDelFlag, CommonConstant.DEL_FLAG_0));
            countMap.put("unExecInspectionOrderCount", unExecInspectionOrderList.size());
            countMap.put("unExecMaintenanceOrderCount", unExecMaintenanceOrderList.size());
            countMap.put("unExecRepairOrderCount", 0);
        }
        if (BusinessCodeConst.PCR0002.equals(post)) {
            //是维修工,查询待维修工单
            List<EamRepairOrder> unExecRepairOrderList = repairOrderService.list(new LambdaQueryWrapper<EamRepairOrder>()
                    .eq(EamRepairOrder::getRepairer, user.getUsername())
                    .eq(EamRepairOrder::getRepairStatus, EquipmentRepairStatus.UNDER_REPAIR.name())
                    .eq(EamRepairOrder::getDelFlag, CommonConstant.DEL_FLAG_0));
            countMap.put("unExecInspectionOrderCount", 0);
            countMap.put("unExecMaintenanceOrderCount", 0);
            countMap.put("unExecRepairOrderCount", unExecRepairOrderList.size());
        }
        return Result.OK(countMap);
    }
}