liujie
2026-01-24 2a4eb33951f74da6f5e086af60a5b7141bf6a6e3
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/smart_screen
1个文件已添加
3个文件已修改
170 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemDetailVo.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java
@@ -156,6 +156,21 @@
        page.setRecords(list);
        return R.ok(page);
    }
    @ApiOperation(value = "委托方端隐患详情")
    @GetMapping("/errorDetail")
    public R<?> errorDetail(Integer id) {
        Record record = recordService.getById(id);
        Integer problemId = record.getProblemId();
        var res = recordService.getHiddenDangerDetail(problemId);
        return R.ok(res);
    }
    @ApiOperation(value = "获取隐患详情")
    @GetMapping("/getHiddenDangerDetail/{problemId}")
    public R<?> getHiddenDangerDetail(@PathVariable Integer problemId) {
        var record = recordService.getHiddenDangerDetail(problemId);
        return R.ok(record);
    }
    @ApiOperation(value = "设置负责人")
    @GetMapping("/setResponsiblePerson")
    public R setResponsiblePerson(Integer id , String responsiblePerson) {
@@ -164,20 +179,9 @@
        recordService.updateById(record);
        return R.ok();
    }
//    @ApiOperation(value = "隐患详情")
//    @GetMapping("/errorDetail")
//    public R errorDetail(Integer id) {
//        Record record = recordService.getById(id);
//
//        return R.ok();
//    }
    @ApiOperation(value = "获取隐患详情")
    @GetMapping("/getHiddenDangerDetail/{id}")
    public R<?> getHiddenDangerDetail(@PathVariable Integer id) {
        var record = recordService.getHiddenDangerDetail(id);
        return R.ok(record);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
@@ -1,8 +1,12 @@
package com.ruoyi.web.controller.api;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.icbc.hsm.utils.StringUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.dto.EditHiddenDangerResponsiblePersonDto;
import com.ruoyi.system.enums.DeviceType;
@@ -11,13 +15,12 @@
import com.ruoyi.system.query.*;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.parsing.Problem;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -365,17 +368,40 @@
    @GetMapping("/list")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "clientId", value = "委托方ID", dataType = "int", paramType = "query"),
            @ApiImplicitParam(name = "projectName", value = "项目名称", dataType = "string", paramType = "query")
            @ApiImplicitParam(name = "projectName", value = "项目名称", dataType = "string", paramType = "query"),
            @ApiImplicitParam(name = "startDate", value = "开始日期", dataType = "date", paramType = "query"),
            @ApiImplicitParam(name = "endDate", value = "结束日期", dataType = "date", paramType = "query"),
            @ApiImplicitParam(name = "projectCategory", value = "项目类型 ongoing-在建工程,fixed-固定资产 ", dataType = "string", paramType = "query")
    })
    public R<List<Project>> getList(Integer clientId, String projectName) {
        LambdaQueryWrapper<Project> wrapper = new LambdaQueryWrapper<Project>().eq(Project::getDeleted, false);
    public R<List<Project>> getList(@RequestParam("clientId") Integer clientId, String projectName,
                                    @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
                                    @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate,
                                    @RequestParam("projectCategory") String projectCategory) {
        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<Project>().eq(Project::getDeleted, false);
        if(clientId!=null){
            wrapper.eq(Project::getClientId, clientId);
            queryWrapper.eq(Project::getClientId, clientId);
        }
        if(projectName!=null && !projectName.isEmpty()){
            wrapper.like(Project::getName, projectName);
            queryWrapper.like(Project::getName, projectName);
        }
        List<Project> list = projectService.list(wrapper);
        if (Objects.isNull(startDate)) {
            // 获取本月日期
            Date date = new Date();
            startDate = DateUtil.beginOfMonth(date);
        }
        Date finalStartDate = startDate;
        queryWrapper.and(wrapper -> wrapper
                .eq(Project::getStatus, 1)  // 在建项目
                .or(w -> w
                        .eq(Project::getStatus, 2)  // 已完成项目
                        .ge(Project::getSuccessTime, finalStartDate)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                ));
        if ("ongoing".equals(projectCategory)) {
            queryWrapper.ne(Project::getType, 2);
        } else if ("fixed".equals(projectCategory)) {
            queryWrapper.eq(Project::getType, 2);
        }
        List<Project> list = projectService.list(queryWrapper);
        return R.ok(list);
    }
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
@@ -88,8 +88,7 @@
                    .eq(Project::getStatus, 1)  // 在建项目
                    .or(w -> w
                        .eq(Project::getStatus, 2)  // 已完成项目
                        .ge(Project::getSuccessTime, monthStart)  // 完成时间 >= 开始日期
                        .le(Project::getSuccessTime, monthEnd)    // 完成时间 <= 结束日期
                        .ge(Project::getSuccessTime, monthStart)  // 完成时间 >= 开始日期// 完成时间 <= 结束日期
                    )
                );
        if (clientId != null) {
@@ -225,16 +224,15 @@
    private FixedAssetDashboardVO calculateFixedAssetStatistics(Long clientId, Date monthStart, Date monthEnd) {
        FixedAssetDashboardVO vo = new FixedAssetDashboardVO();
        // 查询固定资产项目(usage_type 表示项目用途类型,假设 1 表示固定资产)
        // 查询固定资产项目
        LambdaQueryWrapper<Project> projectWrapper = new LambdaQueryWrapper<>();
        projectWrapper.eq(Project::getDeleted, false)
                .eq(Project::getUsageType, 1) // 固定资产
                .eq(Project::getType, 2) // 固定资产
                .and(wrapper -> wrapper
                    .eq(Project::getStatus, 1)  // 在建项目
                    .or(w -> w
                        .eq(Project::getStatus, 2)  // 已完成项目
                        .ge(Project::getSuccessTime, monthStart)  // 完成时间 >= 开始日期
                        .le(Project::getSuccessTime, monthEnd)    // 完成时间 <= 结束日期
                    )
                );
        if (clientId != null) {
@@ -443,24 +441,37 @@
        log.debug("设备按类型分组完成,共 {} 种类型", deviceGroupMap.size());
        // 查询设备检查记录
        List<Integer> deviceUsageIds = devices.stream()
                .map(DeviceUsage::getId)
                .collect(Collectors.toList());
        // 建立 device.id 到 device_usage.id 的映射
        Map<Integer, List<Integer>> deviceToUsageMap = devices.stream()
                .filter(d -> d.getDeviceId() != null)
                .collect(Collectors.groupingBy(
                        DeviceUsage::getDeviceId,
                        Collectors.mapping(DeviceUsage::getId, Collectors.toList())
                ));
        Map<Integer, Boolean> deviceInspectionMap = new HashMap<>();
        if (!deviceUsageIds.isEmpty()) {
        if (!deviceIds.isEmpty()) {
            LambdaQueryWrapper<Record> recordWrapper = new LambdaQueryWrapper<>();
            recordWrapper.eq(Record::getRecordType, "error")
                    .isNotNull(Record::getDeviceId)
                    .in(Record::getDeviceId, deviceUsageIds)
                    .in(Record::getDeviceId, deviceIds)
                    .eq(Record::getDeleted, false);
            List<Record> records = recordMapper.selectList(recordWrapper);
            // 获取已检查的 device.id 集合
            Set<Integer> inspectedDeviceIds = records.stream()
                    .map(Record::getDeviceId)
                    .collect(Collectors.toSet());
            for (Integer deviceUsageId : deviceUsageIds) {
                deviceInspectionMap.put(deviceUsageId, inspectedDeviceIds.contains(deviceUsageId));
            // 通过映射关系,将 device.id 的检查状态映射到 device_usage.id
            for (Map.Entry<Integer, List<Integer>> entry : deviceToUsageMap.entrySet()) {
                Integer deviceId = entry.getKey();
                boolean isInspected = inspectedDeviceIds.contains(deviceId);
                // 将该设备的检查状态应用到所有使用该设备的 device_usage 记录
                for (Integer usageId : entry.getValue()) {
                    deviceInspectionMap.put(usageId, isInspected);
                }
            }
        }
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemDetailVo.java
New file
@@ -0,0 +1,59 @@
package com.ruoyi.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.factory.parsing.Problem;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * DTO for {@link Problem}
 */
@ApiModel(value = "隐患详情VO")
@Data
public class ProblemDetailVo {
    @ApiModelProperty(value = "id")
    Integer id;
    @ApiModelProperty(value = "责任人")
    String responsiblePerson;
    @ApiModelProperty(value = "计划名称")
    String planName;
    @ApiModelProperty(value = "项目名称")
    String hierarchyPath;
    @ApiModelProperty(value = "检查内容")
    String hierarchyName;
    @ApiModelProperty(value = "问题部位")
    String problemPart;
    @ApiModelProperty(value = "规范与条款")
    private List<String> specificTerms;
    @ApiModelProperty(value = "建议措施")
    private List<String> suggestActions;
    @ApiModelProperty(value = "问题数量集合")
    List<String> numberFactors;
    @ApiModelProperty(value = "数值")
    Float numValue;
    @ApiModelProperty(value = "点评范式")
    String reviewParadigm;
    @ApiModelProperty(value = "责任部门")
    String responsibleDepartment;
    @ApiModelProperty(value = "正确做法")
    String correctPractice;
    String numberFactorsStr;
}