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); if(clientId!=null){ wrapper.eq(Project::getClientId, clientId); 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) { queryWrapper.eq(Project::getClientId, clientId); } if(projectName!=null && !projectName.isEmpty()){ wrapper.like(Project::getName, projectName); if (projectName != null && !projectName.isEmpty()) { 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; }