|
|
@@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachme
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportattrs.vo.IotDailyReportAttrsPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPlatformVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportRespVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportSaveReqVO;
|
|
|
@@ -39,7 +40,9 @@ import cn.iocoder.yudao.module.pms.service.iotrddailyreport.IotRdDailyReportServ
|
|
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
|
|
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
|
|
+import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
|
import io.swagger.v3.oas.annotations.Parameter;
|
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
@@ -90,6 +93,9 @@ public class IotRdDailyReportController {
|
|
|
@Resource
|
|
|
private AdminUserApi adminUserApi;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private DictDataService dictDataService;
|
|
|
+
|
|
|
@PostMapping("/create")
|
|
|
@Operation(summary = "创建瑞都日报")
|
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:create')")
|
|
|
@@ -105,6 +111,14 @@ public class IotRdDailyReportController {
|
|
|
return success(true);
|
|
|
}
|
|
|
|
|
|
+ @PostMapping("/saveBatch")
|
|
|
+ @Operation(summary = "批量更新瑞都日报 平台井")
|
|
|
+ @PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:update')")
|
|
|
+ public CommonResult<Boolean> saveBatch(@Valid @RequestBody List<IotRdDailyReportSaveReqVO> reports) {
|
|
|
+ iotRdDailyReportService.saveBatch(reports);
|
|
|
+ return success(true);
|
|
|
+ }
|
|
|
+
|
|
|
@PutMapping("/approval")
|
|
|
@Operation(summary = "审批日报")
|
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:update')")
|
|
|
@@ -204,7 +218,86 @@ public class IotRdDailyReportController {
|
|
|
DeptDO dept = deptService.getDept(dailyReport.getDeptId());
|
|
|
dailyReportVO.setDeptName(dept.getName());
|
|
|
}
|
|
|
+ // 日报任务对应的平台井列表
|
|
|
+ if (1 == dailyReport.getPlatformWell()) {
|
|
|
+ IotProjectTaskPageReqVO pageReqVO = new IotProjectTaskPageReqVO();
|
|
|
+ pageReqVO.setPlatformGroup(dailyReport.getTaskPlatform());
|
|
|
+ List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(pageReqVO);
|
|
|
+ // 查询相同平台井组关联的 日报
|
|
|
+ IotRdDailyReportPageReqVO reportReqVO = new IotRdDailyReportPageReqVO();
|
|
|
+ reportReqVO.setPlatformGroup(dailyReport.getPlatformGroup());
|
|
|
+ List<IotRdDailyReportDO> reports = iotRdDailyReportService.dailyReports(reportReqVO);
|
|
|
+ // key任务id value日报id
|
|
|
+ Map<Long, Long> reportPair = new HashMap<>();
|
|
|
+ // key任务id value平台井日报已经设置的多种属性
|
|
|
+ Map<Long, IotProjectTaskPlatformVO> platformPair = new HashMap<>();
|
|
|
+ // 施工状态 key字典键值 value字典标签
|
|
|
+ Map<String, String> statusDictPair = new HashMap<>();
|
|
|
+ // 施工工艺 key字典键值 value字典标签
|
|
|
+ Map<String, String> techniqueDictPair = new HashMap<>();
|
|
|
+ if (CollUtil.isNotEmpty(reports)) {
|
|
|
+ // 查询施工工艺字典数据
|
|
|
+ List<DictDataDO> rdStatusDicts = dictDataService.getDictDataListByDictType("rdStatus");
|
|
|
+ // 查询施工工艺字典数据
|
|
|
+ List<DictDataDO> rdTechniquesDicts = dictDataService.getDictDataListByDictType("rq_iot_project_technology_rd");
|
|
|
+ if (CollUtil.isNotEmpty(rdStatusDicts)) {
|
|
|
+ rdStatusDicts.forEach(tech -> {
|
|
|
+ statusDictPair.put(tech.getValue(), tech.getLabel());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (CollUtil.isNotEmpty(rdTechniquesDicts)) {
|
|
|
+ rdTechniquesDicts.forEach(tech -> {
|
|
|
+ techniqueDictPair.put(tech.getValue(), tech.getLabel());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ reports.forEach(report -> {
|
|
|
+ // 保养平台井关联的多个日报使用
|
|
|
+ reportPair.put(report.getTaskId(), report.getId());
|
|
|
+ // 设置 平台关联井 已经设置的 属性 施工状态 施工工艺 工作量属性
|
|
|
+ // 查询 平台关联井详情使用
|
|
|
|
|
|
+ IotProjectTaskPlatformVO platformVO = new IotProjectTaskPlatformVO();
|
|
|
+ platformVO.setRdStatus(report.getRdStatus());
|
|
|
+ if (StrUtil.isNotBlank(report.getRdStatus()) && statusDictPair.containsKey(report.getRdStatus())) {
|
|
|
+ platformVO.setRdStatusLabel(statusDictPair.get(report.getRdStatus()));
|
|
|
+ }
|
|
|
+ if (CollUtil.isNotEmpty(report.getTechniqueIds())) {
|
|
|
+ String techniqueNames = report.getTechniqueIds().stream()
|
|
|
+ .map(lg -> ObjUtil.isNotEmpty(lg) ? lg.toString() : StrUtil.EMPTY) // 将Long转为String,匹配techniqueDictPair的key类型
|
|
|
+ .map(key -> techniqueDictPair.getOrDefault(key, key)) // 取label,无则用原key
|
|
|
+ .collect(Collectors.joining(",")); // 逗号拼接
|
|
|
+ platformVO.setTechniqueNames(techniqueNames);
|
|
|
+ } else {
|
|
|
+ platformVO.setTechniqueNames(""); // 空集合时设为空字符串(或null,根据业务需求)
|
|
|
+ }
|
|
|
+ platformVO.setTechniqueIds(report.getTechniqueIds());
|
|
|
+ platformVO.setExtProperty(report.getExtProperty());
|
|
|
+ platformPair.put(report.getTaskId(), platformVO);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ List<IotProjectTaskPlatformVO> platforms = new ArrayList<>();
|
|
|
+ if (CollUtil.isNotEmpty(tasks)) {
|
|
|
+ tasks.forEach(task -> {
|
|
|
+ IotProjectTaskPlatformVO platform = new IotProjectTaskPlatformVO();
|
|
|
+ platform.setId(task.getId());
|
|
|
+ platform.setWellName(task.getWellName());
|
|
|
+ platform.setWorkloadDesign(task.getWorkloadDesign());
|
|
|
+ if (reportPair.containsKey(task.getId())) {
|
|
|
+ platform.setReportId(reportPair.get(task.getId()));
|
|
|
+ }
|
|
|
+ if (platformPair.containsKey(task.getId())) {
|
|
|
+ IotProjectTaskPlatformVO tempPlatform = platformPair.get(task.getId());
|
|
|
+ platform.setRdStatus(tempPlatform.getRdStatus());
|
|
|
+ platform.setRdStatusLabel(tempPlatform.getRdStatusLabel());
|
|
|
+ platform.setTechniqueIds(tempPlatform.getTechniqueIds());
|
|
|
+ platform.setTechniqueNames(tempPlatform.getTechniqueNames());
|
|
|
+ platform.setExtProperty(tempPlatform.getExtProperty());
|
|
|
+ }
|
|
|
+ platforms.add(platform);
|
|
|
+ });
|
|
|
+ dailyReportVO.setPlatforms(platforms);
|
|
|
+ }
|
|
|
+ }
|
|
|
return dailyReportVO;
|
|
|
}
|
|
|
|
|
|
@@ -212,6 +305,31 @@ public class IotRdDailyReportController {
|
|
|
@Operation(summary = "获得瑞都日报分页")
|
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")
|
|
|
public CommonResult<PageResult<IotRdDailyReportRespVO>> getIotRdDailyReportPage(@Valid IotRdDailyReportPageReqVO pageReqVO) {
|
|
|
+ // 根据查询参数筛选出 符合条件 的记录id 再传入 分页查询
|
|
|
+ Set<Long> projectIds = new HashSet<>();
|
|
|
+ Set<Long> taskIds = new HashSet<>();
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getContractName())) {
|
|
|
+ IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
|
|
|
+ reqVO.setContractName(pageReqVO.getContractName());
|
|
|
+ List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(reqVO);
|
|
|
+ if (CollUtil.isNotEmpty(projects)) {
|
|
|
+ projects.forEach(project -> {
|
|
|
+ projectIds.add(project.getId());
|
|
|
+ });
|
|
|
+ pageReqVO.setProjectIds(projectIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getTaskName())) {
|
|
|
+ IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
|
|
|
+ reqVO.setSearchKey(pageReqVO.getTaskName());
|
|
|
+ List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
|
|
|
+ if (CollUtil.isNotEmpty(tasks)) {
|
|
|
+ tasks.forEach(task -> {
|
|
|
+ taskIds.add(task.getId());
|
|
|
+ });
|
|
|
+ pageReqVO.setTaskIds(taskIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
PageResult<IotRdDailyReportDO> pageResult = iotRdDailyReportService.getIotRdDailyReportPage(pageReqVO);
|
|
|
// 设置日报的关联信息 部门(施工队伍) 项目 任务 带班干部 日报填报人
|
|
|
return success(new PageResult<>(buildDailyReportList(pageResult.getList()), pageResult.getTotal()));
|
|
|
@@ -221,6 +339,31 @@ public class IotRdDailyReportController {
|
|
|
@Operation(summary = "瑞都日报 统计")
|
|
|
@PreAuthorize("@ss.hasPermission('pms:iot-rd-daily-report:query')")
|
|
|
public CommonResult<List<IotRdDailyReportStatisticsRespVO>> statistics(@Valid IotRdDailyReportPageReqVO pageReqVO) {
|
|
|
+ // 根据查询参数筛选出 符合条件 的记录id 再传入 分页查询
|
|
|
+ Set<Long> projectIds = new HashSet<>();
|
|
|
+ Set<Long> taskIds = new HashSet<>();
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getContractName())) {
|
|
|
+ IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
|
|
|
+ reqVO.setContractName(pageReqVO.getContractName());
|
|
|
+ List<IotProjectInfoDO> projects = iotProjectInfoService.getIotProjectInfos(reqVO);
|
|
|
+ if (CollUtil.isNotEmpty(projects)) {
|
|
|
+ projects.forEach(project -> {
|
|
|
+ projectIds.add(project.getId());
|
|
|
+ });
|
|
|
+ pageReqVO.setProjectIds(projectIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(pageReqVO.getTaskName())) {
|
|
|
+ IotProjectTaskPageReqVO reqVO = new IotProjectTaskPageReqVO();
|
|
|
+ reqVO.setSearchKey(pageReqVO.getTaskName());
|
|
|
+ List<IotProjectTaskDO> tasks = iotProjectTaskService.projectTasks(reqVO);
|
|
|
+ if (CollUtil.isNotEmpty(tasks)) {
|
|
|
+ tasks.forEach(task -> {
|
|
|
+ taskIds.add(task.getId());
|
|
|
+ });
|
|
|
+ pageReqVO.setTaskIds(taskIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
List<IotRdDailyReportStatisticsRespVO> result = iotRdDailyReportService.statistics(pageReqVO);
|
|
|
// 瑞都日报 按照项目部统计
|
|
|
List<IotRdDailyReportStatisticsRespVO> projectReports = new ArrayList<>();
|
|
|
@@ -236,9 +379,6 @@ public class IotRdDailyReportController {
|
|
|
if (CollUtil.isEmpty(reports)) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
- // 设备部门信息
|
|
|
- Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
|
|
- convertList(reports, IotRdDailyReportDO::getDeptId));
|
|
|
// key项目id value项目合同号
|
|
|
Map<Long, String> projectPair = new HashMap<>();
|
|
|
// key任务id value任务井号-施工区域
|
|
|
@@ -249,7 +389,11 @@ public class IotRdDailyReportController {
|
|
|
Map<Long, String> taskSubmitterPair = new HashMap<>();
|
|
|
// key任务id value工作量数据集合
|
|
|
Map<Long, List<IotTaskAttrModelProperty>> taskWorkloadPair = new HashMap<>();
|
|
|
+ // key任务id value任务关联的施工队伍名称 多个逗号分隔
|
|
|
+ Map<Long, String> taskTeamsPair = new HashMap<>();
|
|
|
Set<Long> userIds = new HashSet<>();
|
|
|
+ // 当前页所有日报关联任务的 施工队伍id 集合
|
|
|
+ Set<Long> currentPageDeptIds = new HashSet<>();
|
|
|
DataPermissionUtils.executeIgnore(() -> {
|
|
|
// 查询日报关联的项目信息
|
|
|
IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
|
|
|
@@ -268,6 +412,9 @@ public class IotRdDailyReportController {
|
|
|
tasks.forEach(task -> {
|
|
|
Set<Long> personIds = task.getResponsiblePerson();
|
|
|
Set<Long> submitterIds = task.getSubmitter();
|
|
|
+ // 施工队伍id集合
|
|
|
+ Set<Long> deptIds = task.getDeptIds();
|
|
|
+ currentPageDeptIds.addAll(Optional.ofNullable(deptIds).orElse(Collections.emptySet()));
|
|
|
taskPair.put(task.getId(), task.getWellName());
|
|
|
userIds.addAll(Optional.ofNullable(personIds).orElse(Collections.emptySet()));
|
|
|
userIds.addAll(Optional.ofNullable(submitterIds).orElse(Collections.emptySet()));
|
|
|
@@ -276,6 +423,8 @@ public class IotRdDailyReportController {
|
|
|
taskWorkloadPair.put(task.getId(), extProperties);
|
|
|
});
|
|
|
}
|
|
|
+ // 查询当前页所有日报关联的任务的施工队伍名称
|
|
|
+ Map<Long, DeptDO> deptMap = deptService.getDeptMap(currentPageDeptIds);
|
|
|
// 查询所有 带班干部 填报人 的姓名
|
|
|
Map<Long, AdminUserRespDTO> userMap;
|
|
|
if (CollUtil.isNotEmpty(userIds)) {
|
|
|
@@ -285,6 +434,21 @@ public class IotRdDailyReportController {
|
|
|
}
|
|
|
if (CollUtil.isNotEmpty(tasks)) {
|
|
|
tasks.forEach(task -> {
|
|
|
+ // 安全获取施工队伍ID集合(避免null)
|
|
|
+ Set<Long> deptIds = Optional.ofNullable(task.getDeptIds())
|
|
|
+ .orElse(Collections.emptySet());
|
|
|
+ // 转换ID集合为队伍名称字符串(用逗号分隔)
|
|
|
+ String deptNames = deptIds.stream()
|
|
|
+ // 映射ID到队伍名称(队伍不存在时用空字符串)
|
|
|
+ .map(deptId -> Optional.ofNullable(deptMap.get(deptId))
|
|
|
+ .map(DeptDO::getName)
|
|
|
+ .orElse(""))
|
|
|
+ // 过滤空字符串(避免多余逗号)
|
|
|
+ .filter(name -> !name.isEmpty())
|
|
|
+ // 拼接部门名称
|
|
|
+ .collect(Collectors.joining(","));
|
|
|
+ // 存入映射关系
|
|
|
+ taskTeamsPair.put(task.getId(), deptNames);
|
|
|
// 安全获取带班干部ID集合(避免null)
|
|
|
Set<Long> responsibleIds = Optional.ofNullable(task.getResponsiblePerson())
|
|
|
.orElse(Collections.emptySet());
|
|
|
@@ -380,7 +544,7 @@ public class IotRdDailyReportController {
|
|
|
if ("台次".equals(unit) && "当日泵车台次".equals(attr.getName())) {
|
|
|
tempTotalPumpTrips = tempTotalPumpTrips.add(actualValue);
|
|
|
}
|
|
|
- if ("台次".equals(unit) && ("当日仪表".equals(attr.getName()) || "当日混砂".equals(attr.getName()))) {
|
|
|
+ if ("台次".equals(unit) && ("当日仪表/混砂".equals(attr.getName()))) {
|
|
|
tempTotalMixSand = tempTotalMixSand.add(actualValue);
|
|
|
}
|
|
|
}
|
|
|
@@ -396,8 +560,8 @@ public class IotRdDailyReportController {
|
|
|
}
|
|
|
});
|
|
|
return BeanUtils.toBean(reports, IotRdDailyReportRespVO.class, (reportVO) -> {
|
|
|
- // 部门信息
|
|
|
- findAndThen(deptMap, reportVO.getDeptId(), dept -> reportVO.setDeptName(dept.getName()));
|
|
|
+ // 部门信息 任务中关联的施工队伍
|
|
|
+ findAndThen(taskTeamsPair, reportVO.getTaskId(), deptNames -> reportVO.setDeptName(deptNames));
|
|
|
// 日报关联的项目信息
|
|
|
findAndThen(projectPair, reportVO.getProjectId(), contractName -> reportVO.setContractName(contractName));
|
|
|
// 日报关联的任务信息
|