|
|
@@ -277,12 +277,40 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
// 异常情况
|
|
|
String malfunction = StrUtil.blankToDefault(dailyReport.getMalfunction(), "无");
|
|
|
DeptDO dept = deptService.getDept(deptId);
|
|
|
- // 查询当前队伍的上级项目部
|
|
|
- DeptDO projectDept = deptService.getDept(dept.getParentId());
|
|
|
+
|
|
|
+ List<String> projectDeptNames = new ArrayList<>();
|
|
|
+ // 查询瑞鹰 163l 下具有以上角色的人员 查询集团(科瑞石油技术) 拥有以上角色的人员
|
|
|
+ Set<Long> userIds = new HashSet<>();
|
|
|
+ Set<Long> deptIds = new HashSet<>();
|
|
|
+ DataPermissionUtils.executeIgnore(() -> {
|
|
|
+ // 封装以上消息内容 发送到公司 角色 (生产异常通知)
|
|
|
+ // 查询瑞恒 157l 下具有以上角色的人员 查询集团(科瑞石油技术) 拥有以上角色的人员
|
|
|
+ deptIds.add(163l);
|
|
|
+ List<AdminUserDO> companyUsers = adminUserService.getUserListByDeptIds(deptIds);
|
|
|
+ if (CollUtil.isNotEmpty(companyUsers)) {
|
|
|
+ companyUsers.forEach(user -> {
|
|
|
+ userIds.add(user.getId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ deptIds.clear();
|
|
|
+ deptIds.add(156l);
|
|
|
+ List<AdminUserDO> groupUsers = adminUserService.getUserListByDeptIds(deptIds);
|
|
|
+ if (CollUtil.isNotEmpty(groupUsers)) {
|
|
|
+ groupUsers.forEach(user -> {
|
|
|
+ userIds.add(user.getId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 查询当前队伍的上级项目部 过滤掉数据权限
|
|
|
+ DeptDO projectDept = deptService.getDept(dept.getParentId());
|
|
|
+ if (ObjUtil.isNotEmpty(projectDept)) {
|
|
|
+ projectDeptNames.add(projectDept.getName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
// 队伍名称
|
|
|
String deptName = ObjUtil.isNotEmpty(dept) ? dept.getName() : StrUtil.EMPTY;
|
|
|
// 项目部名称
|
|
|
- String projectDeptName = ObjUtil.isNotEmpty(projectDept) ? projectDept.getName() : StrUtil.EMPTY;
|
|
|
+ String projectDeptName = CollUtil.isNotEmpty(projectDeptNames) ? projectDeptNames.get(0) : StrUtil.EMPTY;
|
|
|
String wellName = "无";
|
|
|
if (ObjUtil.isNotEmpty(taskId)) {
|
|
|
IotProjectTaskDO task = iotProjectTaskMapper.selectById(taskId);
|
|
|
@@ -297,39 +325,20 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
// 故障误工时间 accidentTime H
|
|
|
|
|
|
String PRODUCTION_EXCEPTION_MSG_TEMPLATE =
|
|
|
- "[公司]:{}\n" +
|
|
|
- "[项目部]:{}\n" +
|
|
|
- "[队伍]:{}\n" +
|
|
|
- "[井号]:{}\n" +
|
|
|
- "[故障描述]:{}\n" +
|
|
|
- "[当前处理进度]:{}\n" +
|
|
|
- "[下步处理计划]:{}\n" +
|
|
|
- "[累计误工时间]:{}\n";
|
|
|
+ "[**公司**]:{} \n" +
|
|
|
+ "[**项目部**]:{} \n" +
|
|
|
+ "[**队伍**]:{} \n" +
|
|
|
+ "[**井号**]:{} \n" +
|
|
|
+ "[**故障描述**]:{} \n" +
|
|
|
+ "[**当前处理进度**]:{} \n" +
|
|
|
+ "[**下步处理计划**]:{} \n" +
|
|
|
+ "[**累计误工时间**]:{} \n";
|
|
|
|
|
|
String finalMsgTitle = StrUtil.format(PRODUCTION_EXCEPTION_MSG_TEMPLATE,
|
|
|
companyName, projectDeptName, deptName, wellName,
|
|
|
malfunction, brief, nextPlan, accidentDay
|
|
|
);
|
|
|
|
|
|
- // 封装以上消息内容 发送到公司 角色 (生产异常通知)
|
|
|
- // 查询瑞恒 157l 下具有以上角色的人员 查询集团(科瑞石油技术) 拥有以上角色的人员
|
|
|
- Set<Long> userIds = new HashSet<>();
|
|
|
- Set<Long> deptIds = new HashSet<>();
|
|
|
- deptIds.add(163l);
|
|
|
- List<AdminUserDO> companyUsers = adminUserService.getUserListByDeptIds(deptIds);
|
|
|
- if (CollUtil.isNotEmpty(companyUsers)) {
|
|
|
- companyUsers.forEach(user -> {
|
|
|
- userIds.add(user.getId());
|
|
|
- });
|
|
|
- }
|
|
|
- deptIds.clear();
|
|
|
- deptIds.add(156l);
|
|
|
- List<AdminUserDO> groupUsers = adminUserService.getUserListByDeptIds(deptIds);
|
|
|
- if (CollUtil.isNotEmpty(groupUsers)) {
|
|
|
- groupUsers.forEach(user -> {
|
|
|
- userIds.add(user.getId());
|
|
|
- });
|
|
|
- }
|
|
|
RoleDO role = roleService.getRoleByCode("生产异常通知");
|
|
|
if (ObjUtil.isNotEmpty(role)) {
|
|
|
Set<Long> roleIds = new HashSet<>();
|
|
|
@@ -493,6 +502,7 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
// 平台井需要更新任务施工状态的关联井
|
|
|
List<IotProjectTaskDO> relatedPlatformTasks = new ArrayList<>();
|
|
|
if (SupplierAuditStatusEnum.REJECT.getStatus().equals(updateReqVO.getAuditStatus())) {
|
|
|
+ // 审批拒绝
|
|
|
dailyReport.setStatus(0);
|
|
|
} else {
|
|
|
// 审核通过 更新关联任务状态
|
|
|
@@ -1601,6 +1611,11 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
// key项目部id value 压裂井数
|
|
|
Map<Long, Set<Long>> ylWellsPair = new HashMap<>();
|
|
|
|
|
|
+ // 已经完工的任务id集合
|
|
|
+ Set<Long> finishedTaskIds = new HashSet<>();
|
|
|
+ // key队伍id/项目部id value累计 油耗
|
|
|
+ Map<Long, Set<Long>> cumulativeWellsPair = new HashMap<>();
|
|
|
+
|
|
|
// 队伍id 集合
|
|
|
Set<Long> teamIds = new HashSet<>();
|
|
|
|
|
|
@@ -1746,12 +1761,26 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
daysCount = 0L;
|
|
|
}
|
|
|
|
|
|
+ // 遍历日报 找到每个日报关联的任务的 施工队伍
|
|
|
+ List<Long> taskIds = convertList(dailyReports, IotRdDailyReportDO::getTaskId);
|
|
|
+ Set<Long> uniqueTaskIds = new HashSet<>(taskIds);
|
|
|
+ IotProjectTaskPageReqVO relatedTaskReqVO = new IotProjectTaskPageReqVO();
|
|
|
+ relatedTaskReqVO.setTaskIds(new ArrayList<>(uniqueTaskIds));
|
|
|
+ List<IotProjectTaskDO> relatedTasks = iotProjectTaskMapper.selectList(relatedTaskReqVO);
|
|
|
+ if (CollUtil.isNotEmpty(relatedTasks)) {
|
|
|
+ relatedTasks.forEach(task -> {
|
|
|
+ // 筛选出 完工 的任务集合 任务完工 施工井数 +1
|
|
|
+ if ("wg".equals(task.getRdStatus())) {
|
|
|
+ finishedTaskIds.add(task.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// 累计计算各项 工作量
|
|
|
if (CollUtil.isNotEmpty(dailyReports)) {
|
|
|
dailyReports.forEach(report -> {
|
|
|
// 统计日报包含施工AB类设备的利用率
|
|
|
// 利用率暂时不考虑日报状态
|
|
|
- // if (lyStatuses.contains(report.getRdStatus())) {
|
|
|
Set<Long> reportDeviceIds = report.getDeviceIds();
|
|
|
// 获得当前日报施工队伍的上级项目部
|
|
|
if (teamProjectIdPair.containsKey(report.getDeptId())) {
|
|
|
@@ -1777,11 +1806,14 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // }
|
|
|
|
|
|
+ // 油耗
|
|
|
BigDecimal dailyFuel = report.getDailyFuel();
|
|
|
dailyFuel = ObjUtil.isEmpty(dailyFuel) ? BigDecimal.ZERO : dailyFuel;
|
|
|
|
|
|
+ // 日报关联的任务井id
|
|
|
+ Long taskId = report.getTaskId();
|
|
|
+
|
|
|
if (ObjUtil.isNotEmpty(report.getDeptId()) && teamProjectIdPair.containsKey(report.getDeptId())) {
|
|
|
// projectDeptId可能是项目部 也可能是项目的上级
|
|
|
Long projectDeptId = 0l;
|
|
|
@@ -1794,6 +1826,21 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
projectDeptId = report.getDeptId();
|
|
|
}
|
|
|
if (ObjUtil.isNotEmpty(projectDeptId) && (projectDeptId > 0)) {
|
|
|
+ // 完工井
|
|
|
+ if (ObjUtil.isNotEmpty(taskId) && finishedTaskIds.contains(taskId)) {
|
|
|
+ // 统计各项目部下的完工井
|
|
|
+ if (cumulativeWellsPair.containsKey(projectDeptId)) {
|
|
|
+ Set<Long> existTaskIds = cumulativeWellsPair.get(projectDeptId);
|
|
|
+ existTaskIds.add(taskId);
|
|
|
+ cumulativeWellsPair.put(projectDeptId, existTaskIds);
|
|
|
+ } else {
|
|
|
+ Set<Long> existTaskIds = new HashSet<>();
|
|
|
+ existTaskIds.add(taskId);
|
|
|
+ cumulativeWellsPair.put(projectDeptId, existTaskIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 油耗
|
|
|
if (cumulativeFuelsPair.containsKey(projectDeptId)) {
|
|
|
BigDecimal existTotalFuel = cumulativeFuelsPair.get(projectDeptId);
|
|
|
BigDecimal tempTotalFuel = existTotalFuel.add(dailyFuel);
|
|
|
@@ -1978,7 +2025,11 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
statistics.setUtilizationRate(utilizationRatePair.get(deptId));
|
|
|
statistics.setCumulativeBridgePlug(cumulativeBridgePlugPair.get(deptId));
|
|
|
statistics.setCumulativeRunCount(cumulativeRunCountPair.get(deptId));
|
|
|
- statistics.setCumulativeWorkingWell(cumulativeWorkingWellPair.get(deptId));
|
|
|
+ // 累计施工井 设置 查询区间累计已经完工的井数
|
|
|
+ if (cumulativeWellsPair.containsKey(deptId)) {
|
|
|
+ Set<Long> projectFinishedTaskIds = cumulativeWellsPair.get(deptId);
|
|
|
+ statistics.setCumulativeWorkingWell(BigDecimal.valueOf(projectFinishedTaskIds.size()));
|
|
|
+ }
|
|
|
statistics.setCumulativeHourCount(cumulativeHourCountPair.get(deptId));
|
|
|
statistics.setCumulativeWaterVolume(cumulativeWaterVolumePair.get(deptId));
|
|
|
statistics.setCumulativeWorkingLayers(cumulativeWorkingLayersPair.get(deptId));
|
|
|
@@ -2042,6 +2093,11 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
// key队伍id/项目部id value累计 台次 当日泵车台次
|
|
|
Map<Long, BigDecimal> cumulativePumpTripsPair = new HashMap<>();
|
|
|
|
|
|
+ // 已经完工的任务id集合
|
|
|
+ Set<Long> finishedTaskIds = new HashSet<>();
|
|
|
+ // key队伍id/项目部id value累计 油耗
|
|
|
+ Map<Long, Set<Long>> cumulativeWellsPair = new HashMap<>();
|
|
|
+
|
|
|
// 以 队伍 为维度统计数据
|
|
|
// 找到所有项目部与队伍的对应关系
|
|
|
// 查询指定根部门下的所有子部门
|
|
|
@@ -2158,6 +2214,21 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 遍历日报 找到每个日报关联的任务的 施工队伍
|
|
|
+ List<Long> taskIds = convertList(dailyReports, IotRdDailyReportDO::getTaskId);
|
|
|
+ Set<Long> uniqueTaskIds = new HashSet<>(taskIds);
|
|
|
+ IotProjectTaskPageReqVO relatedTaskReqVO = new IotProjectTaskPageReqVO();
|
|
|
+ relatedTaskReqVO.setTaskIds(new ArrayList<>(uniqueTaskIds));
|
|
|
+ List<IotProjectTaskDO> relatedTasks = iotProjectTaskMapper.selectList(relatedTaskReqVO);
|
|
|
+ if (CollUtil.isNotEmpty(relatedTasks)) {
|
|
|
+ relatedTasks.forEach(task -> {
|
|
|
+ // 筛选出 完工 的任务集合 任务完工 施工井数 +1
|
|
|
+ if ("wg".equals(task.getRdStatus())) {
|
|
|
+ finishedTaskIds.add(task.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// 累计计算 工作量
|
|
|
if (CollUtil.isNotEmpty(dailyReports)) {
|
|
|
dailyReports.forEach(report -> {
|
|
|
@@ -2186,22 +2257,33 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ // 油耗
|
|
|
BigDecimal dailyFuel = report.getDailyFuel();
|
|
|
dailyFuel = ObjUtil.isEmpty(dailyFuel) ? BigDecimal.ZERO : dailyFuel;
|
|
|
+
|
|
|
+ // 日报关联的任务井id
|
|
|
+ Long taskId = report.getTaskId();
|
|
|
+
|
|
|
if (ObjUtil.isNotEmpty(report.getDeptId()) && teamProjectIdPair.containsKey(report.getDeptId())) {
|
|
|
// projectDeptId可能是项目部 也可能是项目的上级
|
|
|
Long detailDeptId = 0l;
|
|
|
detailDeptId = report.getDeptId();
|
|
|
- /* if (teamDeptPair.containsKey(report.getDeptId())) {
|
|
|
- // 日报deptId如果是队伍 获取队伍的上级项目部
|
|
|
- detailDeptId = teamProjectIdPair.get(report.getDeptId());
|
|
|
- }
|
|
|
- if (projectDeptPair.containsKey(report.getDeptId())) {
|
|
|
- // 日报deptId如果是项目部 使用当前项目部
|
|
|
- detailDeptId = report.getDeptId();
|
|
|
- } */
|
|
|
+ // 设置各项工作量
|
|
|
if (ObjUtil.isNotEmpty(detailDeptId) && (detailDeptId > 0)) {
|
|
|
+ // 完工井
|
|
|
+ if (ObjUtil.isNotEmpty(taskId) && finishedTaskIds.contains(taskId)) {
|
|
|
+ // 统计各项目部下的完工井
|
|
|
+ if (cumulativeWellsPair.containsKey(detailDeptId)) {
|
|
|
+ Set<Long> existTaskIds = cumulativeWellsPair.get(detailDeptId);
|
|
|
+ existTaskIds.add(taskId);
|
|
|
+ cumulativeWellsPair.put(detailDeptId, existTaskIds);
|
|
|
+ } else {
|
|
|
+ Set<Long> existTaskIds = new HashSet<>();
|
|
|
+ existTaskIds.add(taskId);
|
|
|
+ cumulativeWellsPair.put(detailDeptId, existTaskIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 油耗
|
|
|
if (cumulativeFuelsPair.containsKey(detailDeptId)) {
|
|
|
BigDecimal existTotalFuel = cumulativeFuelsPair.get(detailDeptId);
|
|
|
BigDecimal tempTotalFuel = existTotalFuel.add(dailyFuel);
|
|
|
@@ -2363,7 +2445,11 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
statistics.setUtilizationRate(utilizationRatePair.get(teamDeptId));
|
|
|
statistics.setCumulativeBridgePlug(cumulativeBridgePlugPair.get(teamDeptId));
|
|
|
statistics.setCumulativeRunCount(cumulativeRunCountPair.get(teamDeptId));
|
|
|
- statistics.setCumulativeWorkingWell(cumulativeWorkingWellPair.get(teamDeptId));
|
|
|
+ // 累计施工井 设置 查询区间累计已经完工的井数
|
|
|
+ if (cumulativeWellsPair.containsKey(teamDeptId)) {
|
|
|
+ Set<Long> teamFinishedTaskIds = cumulativeWellsPair.get(teamDeptId);
|
|
|
+ statistics.setCumulativeWorkingWell(BigDecimal.valueOf(teamFinishedTaskIds.size()));
|
|
|
+ }
|
|
|
statistics.setCumulativeHourCount(cumulativeHourCountPair.get(teamDeptId));
|
|
|
statistics.setCumulativeWaterVolume(cumulativeWaterVolumePair.get(teamDeptId));
|
|
|
statistics.setCumulativeWorkingLayers(cumulativeWorkingLayersPair.get(teamDeptId));
|