From 5ea0d97a1bf9030945fab70cd8e21aa6e98c7950 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期六, 24 一月 2026 09:35:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java | 2
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordServiceImpl.java | 21 +
ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemVo.java | 7
ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java | 3
ruoyi-system/src/main/java/com/ruoyi/system/model/AccidentBrief.java | 4
ruoyi-system/src/main/java/com/ruoyi/system/model/Device.java | 95 +++++++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java | 14 +
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java | 142 ++++++----
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceMapper.java | 19 +
ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml | 24 +
ruoyi-system/src/main/java/com/ruoyi/system/vo/FixedAssetDashboardVO.java | 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java | 32 ++
/dev/null | 264 --------------------
ruoyi-system/src/main/java/com/ruoyi/system/vo/MachineryStatisticsVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java | 55 +++
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkPresentationController.java | 1
ruoyi-system/src/main/java/com/ruoyi/system/model/ErrorReview.java | 62 ++++
ruoyi-system/src/main/java/com/ruoyi/system/query/EntrustDeviceListQuery.java | 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordMapper.java | 9
ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java | 4
ruoyi-system/src/main/java/com/ruoyi/system/model/ClientParam.java | 10
21 files changed, 421 insertions(+), 353 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java
index bf4ca17..1fb19a1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DashboardStatisticsController.java
@@ -23,6 +23,7 @@
import java.util.HashMap;
import java.util.List;
+import java.util.Optional;
/**
* 数据统计面板 前端控制器
@@ -32,12 +33,10 @@
*/
@RestController
@RequestMapping("/dashboard-statistics")
-@Api(tags = "数据统计面板")
+@Api(tags = "首页")
@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class DashboardStatisticsController {
- @Autowired
- private ScreenAccountService screenAccountService;
@Autowired
private TokenService tokenService;
@@ -54,6 +53,8 @@
@Autowired
private AccidentBriefService accidentBriefService;
+ @Autowired
+ private AccidentClassificationService accidentClassificationService;
@ApiOperation("获取当前登录信息")
@@ -99,10 +100,10 @@
@ApiOperation(value = "获取故事简讯列表",response = AccidentBrief.class)
- @PostMapping("/getStoryList")
- public R<Page<AccidentBrief>> getStoryList(@RequestBody StoryListQuery query) {
+ @PostMapping("/getStoryPage")
+ public R<Page<AccidentBrief>> getStoryPage(@RequestBody StoryListQuery query) {
Page<AccidentBrief> page = new Page<>(query.getPageNum(), query.getPageSize());
-
+ List<AccidentClassification> list = accidentClassificationService.list(new LambdaQueryWrapper<AccidentClassification>().eq(AccidentClassification::getDeleted, false));
LambdaQueryWrapper<AccidentBrief> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AccidentBrief::getState,1);
if(query.getCity()!=null && !query.getCity().isEmpty()){
@@ -121,6 +122,39 @@
}
wrapper.orderByDesc(AccidentBrief::getTime);
Page<AccidentBrief> accidentBriefPage = accidentBriefService.page(page, wrapper);
+ accidentBriefPage.getRecords().forEach(item->{
+ item.setClassifyName(list.stream().filter(classify->classify.getId().equals(item.getClassifyId())).findFirst().get().getName());
+ });
+ return R.ok(accidentBriefPage);
+ }
+
+
+
+ @ApiOperation(value = "获取故事简讯列表-不分页",response = AccidentBrief.class)
+ @PostMapping("/getStoryList")
+ public R<List<AccidentBrief>> getStoryList(@RequestBody StoryListQuery query) {
+ List<AccidentClassification> list = accidentClassificationService.list(new LambdaQueryWrapper<AccidentClassification>().eq(AccidentClassification::getDeleted, false));
+ LambdaQueryWrapper<AccidentBrief> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(AccidentBrief::getState,1);
+ if(query.getCity()!=null && !query.getCity().isEmpty()){
+ wrapper.eq(AccidentBrief::getCity, query.getCity());
+ }
+ if(query.getClassifyId()!=null){
+ wrapper.eq(AccidentBrief::getClassifyId, query.getClassifyId());
+ }
+ if(query.getTime()!=null && !query.getTime().isEmpty()){
+ String sTime = query.getTime().split(" - ")[0]+" 00:00:00";
+ String eTime = query.getTime().split(" - ")[1]+" 23:59:59";
+ wrapper.between(AccidentBrief::getTime,sTime,eTime);
+ }
+ if(query.getContent()!=null && !query.getContent().isEmpty()){
+ wrapper.like(AccidentBrief::getContent, query.getContent());
+ }
+ wrapper.orderByDesc(AccidentBrief::getTime);
+ List<AccidentBrief> accidentBriefPage = accidentBriefService.list( wrapper);
+ accidentBriefPage.forEach(item->{
+ item.setClassifyName(list.stream().filter(classify -> classify.getId().equals(item.getClassifyId())).findFirst().orElse(new AccidentClassification()).getName());
+ });
return R.ok(accidentBriefPage);
}
@@ -132,6 +166,13 @@
return R.ok(accidentBrief);
}
+ @ApiOperation(value = "获取故事简讯详情分类",response = AccidentClassification.class)
+ @GetMapping("/getStoryClassify")
+ public R<List<AccidentClassification>> getStoryClassify() {
+ List<AccidentClassification> list = accidentClassificationService.list(new LambdaQueryWrapper<AccidentClassification>().eq(AccidentClassification::getDeleted, false));
+ return R.ok(list);
+ }
+
/**
* 获取委托方大屏首页统计数据
*
@@ -139,7 +180,7 @@
* @return 统计数据
*/
@PostMapping("/index")
- @ApiOperation("获取委托方大屏首页统计数据")
+ @ApiOperation(value = "获取委托方大屏首页统计数据",tags = {"委托方端"})
public R<ClientDashboardVO> index(@RequestBody ClientDashboardQuery query) {
ClientDashboardVO dashboard = clientService.getClientDashboard(query);
return R.ok(dashboard);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java
index 1982458..1d72e09 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/EntrustProjectController.java
@@ -179,8 +179,20 @@
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/{problemId}")
+ public R<?> getHiddenDangerDetail(@PathVariable Integer problemId) {
+ var record = recordService.getHiddenDangerDetail(problemId);
+ return R.ok(record);
+ }
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
index 2e78fd5..3c070fa 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ProjectController.java
@@ -12,6 +12,8 @@
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 org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -103,6 +105,10 @@
projectVo.setCheckTime(task.getUpdateTime());
}
List<DeviceCountVo> list = deviceUsageService.getProjectDeviceCount(id);
+ list.forEach(item->{
+ DeviceType value = DeviceType.values()[item.getType()];
+ item.setName(value.getDesc());
+ });
projectVo.setDeviceCountVos(list);
return R.ok(projectVo);
}
@@ -163,10 +169,10 @@
}
- @ApiOperation(value = "获取隐患详情")
- @GetMapping("/getHiddenDangerDetail/{problemId}")
- public R<?> getHiddenDangerDetail(@PathVariable Integer problemId) {
- var record = recordService.getHiddenDangerDetail(problemId);
+ @ApiOperation(value = "获取隐患详情",response = ProblemVo.class)
+ @GetMapping("/getHiddenDangerDetail/{id}")
+ public R<ProblemVo> getHiddenDangerDetail(@PathVariable Integer id) {
+ ProblemVo record = recordService.getHiddenDangerDetail(id);
return R.ok(record);
}
@@ -355,4 +361,22 @@
return R.ok(list);
}
+ @ApiOperation(value = "获取项目列表")
+ @GetMapping("/list")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "clientId", value = "委托方ID", dataType = "int", paramType = "query"),
+ @ApiImplicitParam(name = "projectName", value = "项目名称", 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);
+ }
+ if(projectName!=null && !projectName.isEmpty()){
+ wrapper.like(Project::getName, projectName);
+ }
+ List<Project> list = projectService.list(wrapper);
+ return R.ok(list);
+
+ }
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkPresentationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkPresentationController.java
index cf271fb..ceaad79 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkPresentationController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkPresentationController.java
@@ -42,6 +42,7 @@
LambdaQueryWrapper<WorkPresentation> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(WorkPresentation::getClientId,query.getClientId());
+ wrapper.eq(WorkPresentation::getState, 1);
if(query.getType()!=null){
wrapper.eq(WorkPresentation::getType, query.getType());
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
index fe43adc..ed61520 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/FileController.java
@@ -40,7 +40,7 @@
}
String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date());
// String realPath = fileUploadConfig.getLocation() + TimeDir;
- String realPath = "/mnt/file/" + TimeDir;
+ String realPath = "F:\\file\\estate\\files";
File file = new File(realPath);
// 没有目录就创建
if (!file.exists()) {
@@ -61,7 +61,7 @@
mf.transferTo(targetFile);
//拼接数据
// String imgstr = fileUploadConfig.getAccessPath() + TimeDir +"\\"+ filename;
- String imgstr = TimeDir +"/"+ filename;
+ String imgstr = filename;
return R.ok(imgstr);
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/enums/BizResultCode.java b/ruoyi-system/src/main/java/com/ruoyi/system/enums/BizResultCode.java
deleted file mode 100644
index f4831cb..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/enums/BizResultCode.java
+++ /dev/null
@@ -1,227 +0,0 @@
-package com.ruoyi.system.enums;
-
-
-import lombok.Getter;
-
-/**
- * @description: 弹窗消息的定义
- * @author: code
- **/
-@Getter
-public enum BizResultCode implements ApiResultCode {
-
- INVALID_OPERATION("无效操作"),
- MOBILE_ALREADY_EXIST("手机号已存在"),
- USERNAME_ALREADY_EXIST("用户名已存在"),
- ACCOUNT_NOT_FOUND("帐号不存在"),
- SYS_VALIDATION_FAILED_ERROR("验证失败,无效请求"),
- APP_CLIENT_NOT_EXIST("登录客户端不存在"),
- SESSION_EXPIRED("会话已过期"),
- SESSION_INVALID("会话无效"),
- NO_LOGIN_ERROR("未登录"),
- ACCOUNT_FORBIDDEN("帐号被禁用"),
-
- H_CAPTCHA_CODE_NULL_ERROR("图形验证码不能为空"),
- CAPTCHA_CODE_NOT_NULL(""),
- H_CAPTCHA_CODE_VALIDATE_ERROR("图形验证失败"),
- VERIFICATION_CODE_INVALID("图形验证码验证失败"),
- BIZ_PASSWORD_INVALID("密码错误"),
-
-// BIZ_CLIENT_NOT_FOUND("委托方不存在"),
-// BIZ_CLIENT_NAME_ALREADY_EXISTS("委托方名称已存在"),
-// BIZ_CONTRACT_NOT_EXIST("合同不存在"),
-
- BIZ_CAR_NOT_EXIST("车辆不存在"),
-
- BIZ_DATE_FORMAT_ERROR("日期格式错误"),
-
- BIZ_PROJECT_NOT_EXIST("项目不存在"),
-
- BIZ_DEVICE_NOT_EXIST("设备不存在"),
-
- BIZ_SCORE_WEIGHT_CAN_NOT_NULL("分数和权重不能为空"),
-
- BIZ_HIERARCHY_SYSTEM_NOT_EXIST("体系不存在"),
-
- BIZ_PARENT_HIERARCHY_SYSTEM_NOT_EXIST("父ID体系不存在"),
-
- BIZ_PLAN_NOT_EXIST("计划不存在"),
-
- BIZ_PROBLEM_NUM_CANNOT_NULL("问题数量集合不能为空"),
-
- BIZ_PROBLEM_SCALE_CANNOT_NULL("对应规模集合不能为空"),
-
- BIZ_REAL_RULE_NOT_EXIST("实测实量规则不存在"),
-
- BIZ_EXPERT_NOT_EXIST("专家不存在"),
-
- EXPERT_FUNCTIONS_MUST_ENABLE("专家功能必须启用"),
-
- BIZ_MODEL_NOT_EXIST("模型不存在"),
-
- BIZ_PROJECT_STATUS_NOT_MATCH("项目状态不匹配"),
-
- BIZ_EXPERT_SCORE_SYS_NOT_EXIST("专家评分体系不存在"),
-
- BIZ_MEMBERSHIP_DEGREE_NOT_EXIST("隐患等级不存在"),
-
- BIZ_PROJECT_SUPERVISOR_HIS_NOT_EXIST("项目监督历史不存在"),
-
- BIZ_PROJECT_DEVICE_NOT_EXIST("项目设备不存在"),
-
- BIZ_REPORT_TEMPLATE_NOT_EXIST("报告模板不存在"),
-
- BIZ_REPORT_TEMPLATE_TYPE_NOT_EXIST("报告模板类型不存在"),
-
- BIZ_ARCHIVE_NOT_EXIST("档案不存在"),
-
- BIZ_PROJECT_NOT_CLOSED("项目未关闭"),
-
- BIZ_PROJECT_ALREADY_CLOSED("项目已关闭"),
-
- BIZ_PLAN_CLIENT_EXIST("该委托方对应的计划已存在"),
-
- BIZ_PLAN_PROJECT_RELATION_NOT_EXIST("计划项目关系不存在"),
-
- BIZ_PROJECT_NAME_EXIST("同一个委托方下已存在相同名称的项目"),
- HIERARCHY_PARENT_NOT_FOUND("父级体系不存在"),
- HIERARCHY_NODE_NOT_FOUND("节点不存在"),
- HIERARCHY_NODE_NAME_ALREADY_EXISTS("节点名称已存在"),
- BIZ_MODEL_NOT_FOUND("模型不存在"),
- DRIVER_CAR_NOT_MATCH("司机和车辆数量不匹配"),
- PARAM_ERROR("参数错误"),
- CAR_NOT_EXIST("车辆不存在"),
- PROBLEM_NOT_EXIST("问题不存在"),
- ID_CANNOT_NULL("ID不能为空"),
- MODEL_NOT_FOUND("模型不存在"),
- PROJECT_INFO_NOT_EXIST("项目信息不存在"),
- DEVICE_NOT_FOUND("设备不存在"),
- DEVICE_IS_BUSY("设备正在使用中"),
- PLAN_NOT_EXIST("计划不存在"),
- ARCHIVE_NOT_EXIST("档案不存在"),
- ENTITY_NOT_FOUND("实体不存在"),
- ENTITY_NAME_ALREADY_EXISTS("实体名称已存在"),
- ENTITY_CANNOT_NULL("实体不能为空"),
- MODEL_PUBLISHED_CANNOT_MODIFY("已发布的模型不可修改"),
- ACCOUNT_ALREADY_EXISTS("登录账号已存在"),
- //无权修改他人信息
- NO_PERMISSION_MODIFY_OTHERS_INFO("无权修改他人信息"),
- DEVICE_USAGE_NOT_FOUND("设备使用记录不存在"),
- MEMBERSHIP_MATRIX_LOAD_ERROR("隶属度矩阵加载失败"),
- TASK_NOT_FOUND("任务不存在"),
- TASK_ALREADY_EXIST("任务已存在"),
- TASK_STATUS_ERROR("任务状态错误"),
- NUMBER_FACTOR_NOT_EXIST("问题数量集合不存在"),
- NUMBER_FACTOR_INDEX_ERROR("问题数量索引错误"),
- SCALE_FACTOR_NOT_EXIST("对应规模集合不存在"),
- SCALE_FACTOR_INDEX_ERROR("对应规模索引错误"),
- INDEX_COLS_EMPTY("索引列为空"),
- COMPARE_MATRIX_EMPTY("比较矩阵为空"),
- MATRIX_SIZE_ERROR("矩阵大小错误"),
- MATRIX_ERROR("所有的数字都应该是正数,且沿着主对角线对称的元素应该是彼此的相反数"),
- NUMBER_NON_NEGATIVE("所有的数字都应该是非负数"),
- INDEX_RANGE_ERROR("索引范围错误"),
- MEMBERSHIP_MATRIX_ERROR("隶属度矩阵每一行的和应该等于1"),
- SIGN_RECORD_EXIST("重复签到"),
- PLAN_NAME_EXIST("计划名称已存在"),
- CAR_LICENSE_NO_EXIST("车牌号已存在"),
- HIERARCHY_NOT_FOUND("体系数据不存在"),
- PLAN_NOT_FOUND("计划不存在"),
- RECORD_NOT_FOUND("问题记录不存在"),
- RECORD_REVIEW_EXISTED("问题已经复核"),
- REVIEW_ALREADY_REFORMED("问题已经整改,无须复查"),
- UPLOAD_FILE_FAILED("上传文件失败"),
- UPLOAD_FILE_CONTAINS_ILLEGAL_CHARACTERS("上传文件名包含非法字符"),
- FILE_NOT_FOUND("文件不存在"),
- EVAL_FUZZY_RESULT_NOT_EXIST("模糊评价结果不存在"),
- EVAL_SCORE_RESULT_NOT_EXIST("评分评价结果不存在"),
- USER_IS_DISABLE("用户已被禁用"),
- EXPERT_MODEL_NOT_EXIST("专家对应的模型不存在"),
- MEMBERSHIP_MATRIX_NOT_EXIST("隶属度矩阵不存在"),
- EXPERT_NOT_FOUND("专家不存在"),
- MOBILE_FORMAT_ERROR("手机号格式错误"),
- HIERARCHY_NOT_EXIST("体系不存在"),
- PlAN_MODEL_EXPERT_SHOULD_PAIRED("计划模型和专家模型不匹配"),
- PLAN_SYSTEM_MODEL_NOT_EXIST("综合体系模型不存在"),
- PLAN_DEVICE_MODEL_NOT_EXIST("设备体系模型不存在"),
- REVIEW_TASK_NOT_EXIST("复核任务不存在"),
- ERROR_RECORD_ALL_REVIEWD("问题已全部复核"),
- PROJECT_INFO_EXISTS("检查任务对应的项目信息已存在"),
- IMPORT_DATA_EMPTY("导入数据为空"),
- IMPORT_DATA_COLUMN_COUNT("导入数据列数不正确"),
- CLIENT_NOT_FOUND("委托方不存在"),
- DEVICE_ALREADY_EXISTS("设备名称已存在"),
- ROLE_NOT_FOUND("角色不存在"),
- CHECK_TASK_NOT_EXIST("检查任务不存在"),
- DEVICE_USAGE_NOT_EXISTED("设备使用记录不存在"),
- PASSWORD_ERROR("密码输入错误"),
- PASSWORD_FORMAT_ERROR("密码需要6到16位长度"),
-
- // License相关错误码
- LICENSE_NOT_CONFIGURED("License密钥未配置"),
- LICENSE_INVALID_FORMAT("License格式错误"),
- LICENSE_SIGNATURE_INVALID("License签名验证失败"),
- LICENSE_EXPIRED("License已过期"),
- LICENSE_VALIDATION_FAILED("License验证失败"),
-
- // 报告生成相关错误码
- BIZ_REPORT_GENERATE_FAILED("报告生成失败");
-
- private final String errorMsg;
-
- BizResultCode(String errorMsg) {
- this.errorMsg = errorMsg;
- }
-
- /**
- * 得到 message 的值.
- *
- * @return 属性 message 的值.
- */
- @Override
- public String getErrorMsg() {
- return errorMsg + "(" + getAppId() + ")";
- }
-
- /**
- * @return 当前服务的AppId
- */
- @Override
- public String getAppId() {
- return "1001";
- }
-
- /**
- * 校验方法
- *
- * @param expect
- */
- public void check(boolean expect) {
- if (expect) {
- throw new BizException(this.errorMsg);
- }
- }
-
- /**
- * 校验方法
- * @param expect
- * @param code
- */
- public void check(boolean expect, String code) {
- if (expect) {
- throw new BizException(code);
- }
- }
-
- /**
- * 校验方法
- * @param expect
- * @param code
- * @param message
- */
- public void check(boolean expect, String code, String message) {
- if (expect) {
- throw new BizException(message);
- }
- }
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceMapper.java
new file mode 100644
index 0000000..e6c617c
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.model.Device;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 设备 Mapper 接口
+ * </p>
+ *
+ * @author administrator
+ * @since 2026-01-22
+ */
+@Mapper
+public interface DeviceMapper extends BaseMapper<Device> {
+ // 继承 BaseMapper 提供基础 CRUD 方法
+ // 批量查询使用 selectBatchIds 方法
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordMapper.java
index 5a44497..ba83d7e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.system.model.ErrorReview;
import com.ruoyi.system.model.Record;
import com.ruoyi.system.query.HiddenDangerListQuery;
import com.ruoyi.system.vo.HiddenDangerListVo;
@@ -25,7 +26,13 @@
List<HiddenDangerListVo> getHiddenDangerList(@Param("page") Page<HiddenDangerListVo> page, @Param("query") HiddenDangerListQuery query, @Param("taskIds") List<Integer> taskIds);
ProblemVo getHiddenDangerDetail(@Param("problemId") Integer problemId);
-
+ ErrorReview getErrorReview(@Param("errorReviewId") Integer errorReviewId);
+
+ List<String> findReviewImg(@Param("errorReviewId") Integer errorReviewId);
+
+
+ String getProjectName(@Param("checkTaskId") Integer checkTaskId);
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/AccidentBrief.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/AccidentBrief.java
index b95006b..c99a8b2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/AccidentBrief.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/AccidentBrief.java
@@ -85,5 +85,9 @@
@TableField("create_time")
private LocalDateTime createTime;
+ @TableField(exist = false)
+ @ApiModelProperty(value = "类别名称")
+ private String classifyName;
+
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/ClientParam.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/ClientParam.java
index efde24e..8f06b80 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/ClientParam.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/ClientParam.java
@@ -59,9 +59,13 @@
@TableField("device_template_id")
private Integer deviceTemplateId;
- @ApiModelProperty(value = "项目总数")
- @TableField("project_num")
- private Integer projectNum;
+ @ApiModelProperty(value = "房建项目总数")
+ @TableField("housing_project_num")
+ private Integer housingProjectNum;
+
+ @ApiModelProperty(value = "市政项目总数")
+ @TableField("municipal_project_num")
+ private Integer municipalProjectNum;
@ApiModelProperty(value = "在建项目json")
@TableField("under_construction_project")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/Device.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/Device.java
new file mode 100644
index 0000000..d6c65d2
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/Device.java
@@ -0,0 +1,95 @@
+package com.ruoyi.system.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.ruoyi.system.enums.DeviceType;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 设备实体类
+ * </p>
+ *
+ * @author administrator
+ * @since 2026-01-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("device")
+@Slf4j
+public class Device extends Model<Device> {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @TableField("create_time")
+ private Date createTime;
+
+ private Boolean deleted;
+
+ /**
+ * 设备编号
+ */
+ private String name;
+
+ @TableField("update_time")
+ private Date updateTime;
+
+ /**
+ * 设备是否正在使用中
+ */
+ private Boolean busy;
+
+ /**
+ * 出厂编号
+ */
+ @TableField("manufacturer_number")
+ private String manufacturerNumber;
+
+ /**
+ * 设备详细信息(JSON格式)
+ */
+ private String properties;
+
+ /**
+ * 设备类型(数据库存储值:1-10)
+ * 1-塔式起重机 2-施工升降机 3-物料提升机 4-桥式起重机
+ * 5-附着式升降脚手架 6-流动式起重机 7-高处作业吊篮
+ * 8-门式起重机 9-架桥机 10-其他
+ *
+ * 需要通过 getDeviceType() 方法转换为 DeviceType 枚举
+ */
+ private Integer type;
+
+ @TableField("creator_id")
+ private Integer creatorId;
+
+ /**
+ * 获取设备类型枚举
+ * <p>
+ * 数据库 type 值范围:1-10
+ * DeviceType 枚举序号:0-9
+ * 转换公式:DeviceType.values()[type - 1]
+ * </p>
+ *
+ * @return DeviceType 枚举,如果 type 无效则返回 OTHER
+ */
+ public DeviceType getDeviceType() {
+ // 数据库值减1得到枚举序号
+ DeviceType value = DeviceType.values()[type ];
+ return value;
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/ErrorReview.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/ErrorReview.java
new file mode 100644
index 0000000..b6d71e1
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/ErrorReview.java
@@ -0,0 +1,62 @@
+package com.ruoyi.system.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author administrator
+ * @since 2026-01-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("error_review")
+public class ErrorReview extends Model<ErrorReview> {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+ @TableField("create_time")
+ @ApiModelProperty(value = "创建时间")
+ private Date createTime;
+ private Boolean deleted;
+ @ApiModelProperty(value = "名称")
+ private String name;
+ @TableField("update_time")
+ @ApiModelProperty(value = "更新时间")
+ private Date updateTime;
+ @ApiModelProperty(value = "复核内容")
+ private String content;
+ @ApiModelProperty(value = "0未整改 1部分整改 2已整改")
+ private Integer state;
+ @TableField("creator_id")
+ private Integer creatorId;
+
+ @ApiModelProperty(value = "复核人")
+ private String creator;
+
+
+ @ApiModelProperty(value = "图片 没有前缀")
+ private List<String> img;
+
+
+
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/EntrustDeviceListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/EntrustDeviceListQuery.java
index b8ac3e6..d392dee 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/query/EntrustDeviceListQuery.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/EntrustDeviceListQuery.java
@@ -12,7 +12,6 @@
public class EntrustDeviceListQuery extends BasePage {
@ApiModelProperty("项目id")
- @NotNull(message = "项目id不能为空")
private Integer projectId;
@ApiModelProperty("整改情况 true已整改 false未整改")
private Boolean reformed;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
index 9272541..2f84239 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/RecordService.java
@@ -24,7 +24,7 @@
List<HiddenDangerListVo> getHiddenDangerList(Page<HiddenDangerListVo> page, @Valid HiddenDangerListQuery query, List<Integer> taskIds);
- ProblemVo getHiddenDangerDetail(Integer problemId);
+ ProblemVo getHiddenDangerDetail(Integer id);
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
index 45264b2..80c1689 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
@@ -6,20 +6,10 @@
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.mapper.CheckMapper;
-import com.ruoyi.system.mapper.ClientMapper;
-import com.ruoyi.system.mapper.DeviceUsageMapper;
-import com.ruoyi.system.mapper.PlanMapper;
-import com.ruoyi.system.mapper.ProjectMapper;
-import com.ruoyi.system.mapper.RecordMapper;
-import com.ruoyi.system.mapper.TaskMapper;
-import com.ruoyi.system.model.Check;
-import com.ruoyi.system.model.Client;
-import com.ruoyi.system.model.DeviceUsage;
-import com.ruoyi.system.model.Plan;
-import com.ruoyi.system.model.Project;
+import com.ruoyi.system.enums.DeviceType;
+import com.ruoyi.system.mapper.*;
+import com.ruoyi.system.model.*;
import com.ruoyi.system.model.Record;
-import com.ruoyi.system.model.Task;
import com.ruoyi.system.service.ClientService;
import com.ruoyi.system.service.ProjectCategoryCalculator;
import com.ruoyi.system.vo.*;
@@ -55,6 +45,8 @@
private final DeviceUsageMapper deviceUsageMapper;
private final RecordMapper recordMapper;
private final ProjectCategoryCalculator projectCategoryCalculator;
+ private final ClientParamMapper clientParamMapper;
+ private final DeviceMapper deviceMapper;
@Override
public ClientDashboardVO getClientDashboard(ClientDashboardQuery query) {
@@ -145,6 +137,15 @@
.distinct()
.toList();
+ // 查询配置的项目总数
+ ClientParam clientParam = null;
+ if (clientId != null) {
+ clientParam = clientParamMapper.selectOne(
+ new LambdaQueryWrapper<ClientParam>()
+ .eq(ClientParam::getClientId, clientId.intValue())
+ );
+ }
+
// 房建检查覆盖率
List<Integer> housingProjectIds = projects.stream()
.filter(p -> p.getType() != null && p.getType() == 0)
@@ -153,8 +154,13 @@
long checkedHousingCount = checkedProjectIds.stream()
.filter(housingProjectIds::contains)
.count();
+
+ // 使用配置的房建项目总数,如果没有配置则使用实际数量
+ int configuredHousingNum = (clientParam != null && clientParam.getHousingProjectNum() != null)
+ ? clientParam.getHousingProjectNum()
+ : (int) housingCount;
vo.setHousingInspectionCoverage(
- housingCount > 0 ? (int) Math.round(checkedHousingCount * 100.0 / housingCount) : 0
+ configuredHousingNum > 0 ? (int) Math.round(checkedHousingCount * 100.0 / configuredHousingNum) : 0
);
// 市政检查覆盖率
@@ -165,8 +171,13 @@
long checkedMunicipalCount = checkedProjectIds.stream()
.filter(municipalProjectIds::contains)
.count();
+
+ // 使用配置的市政项目总数,如果没有配置则使用实际数量
+ int configuredMunicipalNum = (clientParam != null && clientParam.getMunicipalProjectNum() != null)
+ ? clientParam.getMunicipalProjectNum()
+ : (int) municipalCount;
vo.setMunicipalInspectionCoverage(
- municipalCount > 0 ? (int) Math.round(checkedMunicipalCount * 100.0 / municipalCount) : 0
+ configuredMunicipalNum > 0 ? (int) Math.round(checkedMunicipalCount * 100.0 / configuredMunicipalNum) : 0
);
} else {
vo.setHousingInspectionCoverage(0);
@@ -234,47 +245,7 @@
// 1. 统计项目总数
vo.setProjectTotal(projects.size());
- // 计算检查覆盖率
List<Integer> projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
- if (!projectIds.isEmpty()) {
- // 1. 先查询符合条件的 Task
- LambdaQueryWrapper<Task> taskWrapper = new LambdaQueryWrapper<>();
- taskWrapper.in(Task::getProjectId, projectIds)
- .eq(Task::getDeleted, false);
- List<Task> tasks = taskMapper.selectList(taskWrapper);
-
- if (!tasks.isEmpty()) {
- // 2. 获取 Task ID 列表
- List<Integer> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList());
-
- // 3. 建立 Task ID 到 Project ID 的映射
- Map<Integer, Integer> taskToProjectMap = tasks.stream()
- .collect(Collectors.toMap(Task::getId, Task::getProjectId));
-
- // 4. 查询 record 表中 record_type='error' 且 device_id 为 null 的记录(项目检查)
- LambdaQueryWrapper<Record> recordWrapper = new LambdaQueryWrapper<>();
- recordWrapper.eq(Record::getRecordType, "error")
- .isNull(Record::getDeviceId)
- .in(Record::getCheckTaskId, taskIds)
- .eq(Record::getDeleted, false);
- List<Record> projectRecords = recordMapper.selectList(recordWrapper);
-
- // 5. 通过 Task 映射获取有检查记录的项目 ID
- long checkedProjectCount = projectRecords.stream()
- .map(Record::getCheckTaskId)
- .map(taskToProjectMap::get)
- .filter(Objects::nonNull)
- .distinct()
- .count();
- vo.setInspectionCoverage(
- projects.size() > 0 ? (int) Math.round(checkedProjectCount * 100.0 / projects.size()) : 0
- );
- } else {
- vo.setInspectionCoverage(0);
- }
- } else {
- vo.setInspectionCoverage(0);
- }
// 2. 统计本月检查情况
calculateMonthlyInspectionForFixed(vo, projects, projectIds, monthStart, monthEnd);
@@ -433,19 +404,54 @@
.in(DeviceUsage::getProjectId, projectIds);
List<DeviceUsage> devices = deviceUsageMapper.selectList(deviceWrapper);
- // 按设备名称分组统计
+ // 批量查询 Device 信息
+ List<Integer> deviceIds = devices.stream()
+ .map(DeviceUsage::getDeviceId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+
+ Map<Integer, Device> deviceMap = new HashMap<>();
+ if (!deviceIds.isEmpty()) {
+ List<Device> deviceList = deviceMapper.selectBatchIds(deviceIds);
+ deviceMap = deviceList.stream()
+ .collect(Collectors.toMap(Device::getId, d -> d));
+ log.debug("批量查询到 {} 个设备信息", deviceMap.size());
+
+ // 检查是否有设备信息查询失败
+ if (deviceIds.size() != deviceMap.size()) {
+ log.warn("部分设备信息查询失败,期望 {} 个,实际查询到 {} 个",
+ deviceIds.size(), deviceMap.size());
+ }
+ }
+
+ // 按设备类型名称分组统计
+ final Map<Integer, Device> finalDeviceMap = deviceMap;
Map<String, List<DeviceUsage>> deviceGroupMap = devices.stream()
- .filter(d -> d.getName() != null && !d.getName().isEmpty())
- .collect(Collectors.groupingBy(DeviceUsage::getName));
+ .filter(d -> d.getDeviceId() != null)
+ .filter(d -> finalDeviceMap.containsKey(d.getDeviceId()))
+ .collect(Collectors.groupingBy(d -> {
+ try {
+ Device device = finalDeviceMap.get(d.getDeviceId());
+ return device.getDeviceType().getDesc();
+ } catch (Exception e) {
+ log.error("获取设备类型失败,deviceId: {}", d.getDeviceId(), e);
+ return DeviceType.OTHER.getDesc();
+ }
+ }));
+
+ log.debug("设备按类型分组完成,共 {} 种类型", deviceGroupMap.size());
// 查询设备检查记录
- List<Integer> deviceIds = devices.stream().map(DeviceUsage::getId).collect(Collectors.toList());
+ List<Integer> deviceUsageIds = devices.stream()
+ .map(DeviceUsage::getId)
+ .collect(Collectors.toList());
Map<Integer, Boolean> deviceInspectionMap = new HashMap<>();
- if (!deviceIds.isEmpty()) {
+ if (!deviceUsageIds.isEmpty()) {
LambdaQueryWrapper<Record> recordWrapper = new LambdaQueryWrapper<>();
recordWrapper.eq(Record::getRecordType, "error")
.isNotNull(Record::getDeviceId)
- .in(Record::getDeviceId, deviceIds)
+ .in(Record::getDeviceId, deviceUsageIds)
.eq(Record::getDeleted, false);
List<Record> records = recordMapper.selectList(recordWrapper);
@@ -453,8 +459,8 @@
.map(Record::getDeviceId)
.collect(Collectors.toSet());
- for (Integer deviceId : deviceIds) {
- deviceInspectionMap.put(deviceId, inspectedDeviceIds.contains(deviceId));
+ for (Integer deviceUsageId : deviceUsageIds) {
+ deviceInspectionMap.put(deviceUsageId, inspectedDeviceIds.contains(deviceUsageId));
}
}
@@ -465,6 +471,16 @@
vo.setName(entry.getKey());
vo.setTotal(entry.getValue().size());
+ // 设置设备类型字段
+ // 从当前分组的第一个设备使用记录中获取设备类型
+ if (!entry.getValue().isEmpty()) {
+ DeviceUsage firstUsage = entry.getValue().get(0);
+ Device device = finalDeviceMap.get(firstUsage.getDeviceId());
+ if (device != null && device.getType() != null) {
+ vo.setType(device.getType());
+ }
+ }
+
long inspectedCount = entry.getValue().stream()
.filter(d -> deviceInspectionMap.getOrDefault(d.getId(), false))
.count();
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordServiceImpl.java
index 278922e..dca8ae0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.system.mapper.RecordImageMapper;
import com.ruoyi.system.mapper.RecordMapper;
+import com.ruoyi.system.model.ErrorReview;
import com.ruoyi.system.model.Record;
import com.ruoyi.system.model.RecordImage;
import com.ruoyi.system.model.UserFile;
@@ -70,9 +71,14 @@
}
@Override
- public ProblemVo getHiddenDangerDetail(Integer problemId) {
+ public ProblemVo getHiddenDangerDetail(Integer id) {
+ // 根据id找到记录
+ Record record = baseMapper.selectById(id);
// 直接查询并返回,让前端处理JSON字符串解析
- ProblemVo hiddenDangerDetail = baseMapper.getHiddenDangerDetail(problemId);
+ ProblemVo hiddenDangerDetail = baseMapper.getHiddenDangerDetail(record.getProblemId());
+ String projectName =baseMapper.getProjectName(record.getCheckTaskId());
+ hiddenDangerDetail.setProjectName(projectName);
+
if(hiddenDangerDetail!=null){
if (hiddenDangerDetail.getSpecificTermsStr()!=null && !hiddenDangerDetail.getSpecificTermsStr().isEmpty()) {
String specificTermsStr = hiddenDangerDetail.getSpecificTermsStr();
@@ -89,6 +95,17 @@
hiddenDangerDetail.setNumberFactors(JSON.parseArray(numberFactorsStr, String.class));
}
}
+ Integer errorReviewId = record.getErrorReviewId();
+ if(errorReviewId!=null){
+ ErrorReview errorReview = baseMapper.getErrorReview(errorReviewId);
+ if(errorReview!=null){
+ // 查询图片
+ List<String> img = baseMapper.findReviewImg(errorReviewId);
+ errorReview.setImg(img);
+ hiddenDangerDetail.setErrorReview(errorReview);
+ }
+ }
+
return hiddenDangerDetail;
}
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ReportServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ReportServiceImpl.java
deleted file mode 100644
index 30054c9..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ReportServiceImpl.java
+++ /dev/null
@@ -1,264 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-
-import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.system.enums.BizResultCode;
-import com.ruoyi.system.model.ReportTemplate;
-import com.ruoyi.system.service.*;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.io.ByteArrayInputStream;
-import java.io.OutputStream;
-
-/**
- * 报告数据服务实现类
- **/
-@Slf4j
-@Service
-public class ReportServiceImpl implements ReportService {
-
- @Resource
- private ReportTemplateService reportTemplateService;
-
- @Resource
- private ProjectInfoService projectInfoService;
-
- @Resource
- private DeviceUsageService deviceUsageService;
-
- @Resource
- private EvalFuzzyService evalFuzzyService;
-
- @Resource
- private EvalScoreService evalScoreService;
-
- @Resource
- private ErrorRecordService errorRecordService;
-
- @Resource
- private DeviceService deviceService;
-
- @Resource
- private UserFileService userFileService;
-
- @Override
- public JSONObject fuzzyReportData(Integer checkTaskId, Integer templateId) {
- var evalFuzzyResult = evalFuzzyService.getByCheckTaskId(checkTaskId);
- BizResultCode.EVAL_FUZZY_RESULT_NOT_EXIST.check(evalFuzzyResult == null);
-
- var evalScoreResult = evalScoreService.getByCheckTaskId(checkTaskId);
- BizResultCode.EVAL_SCORE_RESULT_NOT_EXIST.check(evalScoreResult == null);
-
- var reportTemplate = reportTemplateService.get(templateId);
- BizResultCode.BIZ_REPORT_TEMPLATE_NOT_EXIST.check(reportTemplate == null);
-
- switch (reportTemplate.getType()) {
- case ThirdPartyReport:
- return buildFuzzySystemReportData(evalFuzzyResult, evalScoreResult, reportTemplate);
- case DeviceReport:
- return buildFuzzyDeviceReportData(evalFuzzyResult, evalScoreResult, reportTemplate);
- default:
- throw new BizException(BizResultCode.BIZ_REPORT_TEMPLATE_TYPE_NOT_EXIST);
- }
- }
-
- @Override
- public JSONObject scoreReportData(Integer checkTaskId, Integer templateId) {
- var evalFuzzyResult = evalFuzzyService.getByCheckTaskId(checkTaskId);
- BizResultCode.EVAL_FUZZY_RESULT_NOT_EXIST.check(evalFuzzyResult == null);
-
- var evalScoreResult = evalScoreService.getByCheckTaskId(checkTaskId);
- BizResultCode.EVAL_SCORE_RESULT_NOT_EXIST.check(evalScoreResult == null);
-
- var reportTemplate = reportTemplateService.get(templateId);
- BizResultCode.BIZ_REPORT_TEMPLATE_NOT_EXIST.check(reportTemplate == null);
-
- switch (reportTemplate.getType()) {
- case ThirdPartyReport:
- return buildScoreSystemReportData(evalFuzzyResult, evalScoreResult, reportTemplate);
- case DeviceReport:
- return buildScoreDeviceReportData(evalFuzzyResult, evalScoreResult, reportTemplate);
- default:
- throw new BizException(BizResultCode.BIZ_REPORT_TEMPLATE_TYPE_NOT_EXIST);
- }
- }
-
- @Override
- public XWPFTemplate fuzzyReport(Integer checkTaskId, Integer templateId) {
- var reportData = fuzzyReportData(checkTaskId, templateId);
- var builder = getReportBuilder(templateId);
- var template = reportTemplateService.get(templateId);
-
- // reportData to JSONObject
- return builder.buildReport(reportData, template.getConfig());
- }
-
- @Override
- public XWPFTemplate scoreReport(Integer checkTaskId, Integer templateId) {
- var reportData = scoreReportData(checkTaskId, templateId);
- var builder = getReportBuilder(templateId);
- var template = reportTemplateService.get(templateId);
-
- // reportData to JSONObject
- return builder.buildReport(reportData, template.getConfig());
- }
-
- @Override
- public void fuzzyReportPdf(Integer checkTaskId, Integer templateId, OutputStream outputStream) {
- try (var doc = fuzzyReport(checkTaskId, templateId)) {
- convertToPdf(doc, outputStream);
- } catch (Exception e) {
- log.error("生成模糊评价PDF报告失败", e);
- throw new BizException("生成模糊评价PDF报告失败");
- }
- }
-
- @Override
- public void scoreReportPdf(Integer checkTaskId, Integer templateId, OutputStream outputStream) {
- try (var doc = scoreReport(checkTaskId, templateId)) {
- convertToPdf(doc, outputStream);
- } catch (Exception e) {
- log.error("生成打分评价PDF报告失败", e);
- throw new BizException("生成打分评价PDF报告失败");
- }
- }
-
- /**
- * 将Word文档转换为PDF
- * @param template Word模板
- * @param outputStream 输出流
- */
- private void convertToPdf(XWPFTemplate template, OutputStream outputStream) throws Exception {
- // 先将Word模板写入字节数组
- ByteArrayOutputStream docOutputStream = new ByteArrayOutputStream();
- template.write(docOutputStream);
-
- // 从字节数组读取Word文档
- ByteArrayInputStream docInputStream = new ByteArrayInputStream(docOutputStream.toByteArray());
- org.apache.poi.xwpf.usermodel.XWPFDocument document = new org.apache.poi.xwpf.usermodel.XWPFDocument(docInputStream);
-
- // 转换为PDF
- PdfOptions options = PdfOptions.create();
- PdfConverter.getInstance().convert(document, outputStream, options);
-
- // 关闭资源
- document.close();
- docInputStream.close();
- docOutputStream.close();
- }
-
- private ReportBuilderBase getReportBuilder(Integer templateId) {
- var reportTemplate = reportTemplateService.get(templateId);
- BizResultCode.BIZ_REPORT_TEMPLATE_NOT_EXIST.check(reportTemplate == null);
- switch (reportTemplate.getType()) {
- case ThirdPartyReport:
- return new SystemReportBuilder(userFileService);
- case DeviceReport:
- return new DeviceReportBuilder(userFileService);
- default:
- throw new BizException(BizResultCode.BIZ_REPORT_TEMPLATE_TYPE_NOT_EXIST);
- }
- }
-
- private JSONObject buildFuzzySystemReportData(EvalFuzzyResult evalFuzzyResult, EvalScoreResult scoreResult, ReportTemplate reportTemplate) {
- // 查询必须要的数据
- var records = errorRecordService.listSystemErrors(evalFuzzyResult.getTask().getId());
- var project = evalFuzzyResult.getProject();
- var projectInfo = evalFuzzyResult.getTask().getProjectInfo();
-// var projectInfo = projectInfoService.getByCheckTaskId(evalFuzzyResult.getTask().getId());
- var deviceUsages = deviceUsageService.listUsages(project.getId(), null);
- var devices= deviceUsages.stream().map(DeviceUsage::getDevice).toList();
- var hierarchy = evalFuzzyResult.getPlan().getSystemScoreExpert().getModel().getHierarchy().getContent();
-
- // 生成报告数据
- return SystemFuzzyReportData.builder()
- .reportId(evalFuzzyResult.getId())
- .systemHierarchy(hierarchy)
- .sysResult(evalFuzzyResult.getSystemRes())
- .scoreResult(scoreResult.getSystemRes())
- .template(reportTemplate)
- .project(project)
- .projectInfo(projectInfo)
- .devices(devices)
- .records(records)
- .build()
- .generate();
- }
-
- private JSONObject buildScoreSystemReportData(EvalFuzzyResult evalFuzzyResult, EvalScoreResult scoreResult, ReportTemplate reportTemplate) {
- // 查询必须要的数据
- var records = errorRecordService.listSystemErrors(evalFuzzyResult.getTask().getId());
- var project = evalFuzzyResult.getProject();
-// var projectInfo = projectInfoService.latest(evalFuzzyResult.getProject().getId());
- var projectInfo = evalFuzzyResult.getTask().getProjectInfo();
- var deviceUsages = deviceUsageService.listUsages(project.getId(), null);
- var devices= deviceUsages.stream().map(DeviceUsage::getDevice).toList();
- var hierarchy = evalFuzzyResult.getPlan().getSystemScoreExpert().getModel().getHierarchy().getContent();
-
- // 生成报告数据
- return SystemScoreReportData.builder()
- .reportId(evalFuzzyResult.getId())
- .systemHierarchy(hierarchy)
- .sysResult(evalFuzzyResult.getSystemRes())
- .scoreResult(scoreResult.getSystemRes())
- .template(reportTemplate)
- .project(project)
- .projectInfo(projectInfo)
- .devices(devices)
- .records(records)
- .build()
- .generate();
- }
-
- private JSONObject buildFuzzyDeviceReportData(EvalFuzzyResult evalFuzzyResult, EvalScoreResult scoreResult, ReportTemplate reportTemplate) {
- var records = errorRecordService.listDeviceErrors(evalFuzzyResult.getTask().getId());
- var project = evalFuzzyResult.getProject();
- var projectInfo = evalFuzzyResult.getTask().getProjectInfo();
-// var projectInfo = projectInfoService.getByCheckTaskId(evalFuzzyResult.getTask().getId());
- var deviceIds = evalFuzzyResult.getDeviceResMap().keySet();
- var devices = deviceService.findAllById(deviceIds);
- var hierarchy = evalFuzzyResult.getPlan().getDeviceScoreExpert().getModel().getHierarchy().getContent();
-
- // 生成报告数据
- return DeviceFuzzyReportData.builder()
- .reportId(evalFuzzyResult.getId())
- .deviceResMap(evalFuzzyResult.getDeviceResMap())
- .deviceHierarchy(hierarchy)
- .template(reportTemplate)
- .project(project)
- .projectInfo(projectInfo)
- .devices(devices)
- .records(records)
- .build()
- .generate();
- }
-
- private JSONObject buildScoreDeviceReportData(EvalFuzzyResult evalFuzzyResult, EvalScoreResult evalScoreResult, ReportTemplate reportTemplate) {
- var records = errorRecordService.listDeviceErrors(evalFuzzyResult.getTask().getId());
- var project = evalFuzzyResult.getProject();
-// var projectInfo = projectInfoService.getByCheckTaskId(evalFuzzyResult.getTask().getId());
- var projectInfo = evalFuzzyResult.getTask().getProjectInfo();
- var deviceIds = evalFuzzyResult.getDeviceResMap().keySet();
- var devices = deviceService.findAllById(deviceIds);
- var hierarchy = evalFuzzyResult.getPlan().getDeviceScoreExpert().getModel().getHierarchy().getContent();
-
- // 生成报告数据
- return DeviceScoreReportData.builder()
- .reportId(evalFuzzyResult.getId())
- .deviceResMap(evalFuzzyResult.getDeviceResMap())
- .deviceScoreResMap(evalScoreResult.getDeviceResMap())
- .deviceHierarchy(hierarchy)
- .template(reportTemplate)
- .project(project)
- .projectInfo(projectInfo)
- .devices(devices)
- .records(records)
- .build()
- .generate();
- }
-
-
-
-}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java
index f7c1bd8..8a48664 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/DeviceCountVo.java
@@ -12,4 +12,7 @@
@ApiModelProperty("设备类型")
private Integer type;
+
+ @ApiModelProperty("设备名称")
+ private String name;
}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FixedAssetDashboardVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FixedAssetDashboardVO.java
index 4ca1ba5..38079b8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/FixedAssetDashboardVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/FixedAssetDashboardVO.java
@@ -20,9 +20,6 @@
@ApiModelProperty("项目总数")
private Integer projectTotal;
- @ApiModelProperty("检查覆盖率(百分比,如:77 表示 77%)")
- private Integer inspectionCoverage;
-
// ==================== 本月检查情况 ====================
@ApiModelProperty("已检查项目数")
private Integer inspectedCount;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MachineryStatisticsVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MachineryStatisticsVO.java
index 28ae4fa..b5a6c75 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MachineryStatisticsVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MachineryStatisticsVO.java
@@ -13,6 +13,8 @@
@Data
@ApiModel("机械设备统计数据")
public class MachineryStatisticsVO {
+ @ApiModelProperty("设备类型")
+ private Integer type;
@ApiModelProperty("设备名称")
private String name;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemVo.java
index 77af953..60a9e97 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ProblemVo.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.vo;
+import com.ruoyi.system.model.ErrorReview;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
@@ -68,4 +69,10 @@
@ApiModelProperty(value = "问题数量集合")
List<String> numberFactors;
+
+ @ApiModelProperty(value = "复核信息")
+ ErrorReview errorReview;
+
+ @ApiModelProperty(value = "项目名称")
+ String projectName;
}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml b/ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml
index b359e23..196b13b 100644
--- a/ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/RecordMapper.xml
@@ -60,7 +60,7 @@
and t1.create_time between #{query.startTime} and #{query.endTime}
</if>
- ) as o
+ ) as o where 1=1
<if test="query.type != null">
and o.type = #{query.type}
</if>
@@ -72,5 +72,27 @@
from problem
where id = #{problemId}
</select>
+ <select id="getErrorReview" resultType="com.ruoyi.system.model.ErrorReview">
+ select t1.id, t1.create_time,
+ t1.deleted,
+ t1.name,
+ t1.update_time,
+ t1.content,
+ t1.state,
+ t1.creator_id, t2.name creator
+ from error_review t1
+ left join user t2 on t1.creator_id = t2.id
+ where t1.id = #{errorReviewId}
+
+ </select>
+ <select id="findReviewImg" resultType="java.lang.String">
+ select CONCAT(t2.name, '.', t2.extension) from error_review_image t1
+ left join user_file t2 on t1.user_file_id = t2.id
+ where t1.error_review_id = #{errorReviewId}
+ </select>
+ <select id="getProjectName" resultType="java.lang.String">
+ select t2.name from task t1 left join project t2 on t1.project_id = t2.id
+ where t1.id = #{checkTaskId}
+ </select>
</mapper>
--
Gitblit v1.7.1