|
|
@@ -0,0 +1,158 @@
|
|
|
+package cn.iocoder.yudao.module.pms.job.dailyreport;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
|
|
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.depttype.vo.IotDeptTypePageReqVO;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.depttype.IotDeptTypeDO;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.depttype.IotDeptTypeMapper;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreport.IotRyDailyReportMapper;
|
|
|
+import cn.iocoder.yudao.module.pms.message.PmsMessage;
|
|
|
+import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
|
|
|
+import cn.iocoder.yudao.module.pms.service.iotmainworkorderbom.IotMainWorkOrderBomService;
|
|
|
+import cn.iocoder.yudao.module.pms.service.iotprojecttask.IotProjectTaskService;
|
|
|
+import cn.iocoder.yudao.module.pms.service.iotrydailyreport.IotRyDailyReportService;
|
|
|
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
|
|
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import static cn.iocoder.yudao.module.pms.framework.config.MultiThreadConfiguration.PMS_THREAD_POOL_TASK_EXECUTOR;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 瑞鹰挂靠队伍 生成日报
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@Slf4j
|
|
|
+public class CreateRyDailyReportOrderJob implements JobHandler {
|
|
|
+ @Resource
|
|
|
+ private IotDevicePersonService iotDevicePersonService;
|
|
|
+ @Resource
|
|
|
+ private IotRyDailyReportMapper iotRyDailyReportMapper;
|
|
|
+ @Autowired
|
|
|
+ private IotRyDailyReportService iotRyDailyReportService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IotDeviceMapper iotDeviceMapper;
|
|
|
+ @Resource
|
|
|
+ private IotProjectTaskService iotProjectTaskService;
|
|
|
+ @Resource
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
+ @Resource
|
|
|
+ private IotMainWorkOrderBomService iotMainWorkOrderBomService;
|
|
|
+ @Resource
|
|
|
+ private IotDeptTypeMapper iotDeptTypeMapper;
|
|
|
+ @Resource(name = PMS_THREAD_POOL_TASK_EXECUTOR)
|
|
|
+ private ThreadPoolTaskExecutor pmsThreadPoolTaskExecutor;
|
|
|
+ @Resource
|
|
|
+ private PmsMessage pmsMessage;
|
|
|
+ @Resource
|
|
|
+ private DeptService deptService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @TenantIgnore
|
|
|
+ public String execute(String param) throws Exception {
|
|
|
+
|
|
|
+ // 查询瑞鹰下所有部门 筛选出 修井 队伍(不包含任何设备的队伍)
|
|
|
+ IotDeptTypePageReqVO deptTypeReqVO = new IotDeptTypePageReqVO();
|
|
|
+ // 查询 钻井 修井 类型的部门
|
|
|
+ deptTypeReqVO.setType("xj");
|
|
|
+ List<IotDeptTypeDO> deptTypes = iotDeptTypeMapper.selectList(deptTypeReqVO);
|
|
|
+ Set<Long> xjDeptIds = new HashSet<>();
|
|
|
+ if (CollUtil.isNotEmpty(deptTypes)) {
|
|
|
+ deptTypes.forEach(deptType -> {
|
|
|
+ xjDeptIds.add(deptType.getDeptId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 查询瑞鹰下所有队伍
|
|
|
+ Set<Long> ryTeamDeptIds = new HashSet<>();
|
|
|
+ // 查询瑞鹰所有 队伍 项目部
|
|
|
+ Set<Long> ryChildDeptIds = deptService.getChildDeptIdListFromCache(158l);
|
|
|
+ List<DeptDO> depts =deptService.getDeptList(ryChildDeptIds);
|
|
|
+ if (CollUtil.isNotEmpty(depts)) {
|
|
|
+ depts.forEach(dept -> {
|
|
|
+ if ("3".equals(dept.getType())) {
|
|
|
+ ryTeamDeptIds.add(dept.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 查询瑞鹰所有队伍关联的设备 筛选出不包含任何设备的队伍
|
|
|
+ IotDevicePageReqVO reqVO = new IotDevicePageReqVO();
|
|
|
+ reqVO.setDeptIds(new ArrayList<>(ryTeamDeptIds));
|
|
|
+ List<IotDeviceDO> devices = iotDeviceMapper.selectListAlone(reqVO);
|
|
|
+ // 包含设备的部门id集合
|
|
|
+ Set<Long> containsDeviceDeptIds = new HashSet<>();
|
|
|
+ if (CollUtil.isNotEmpty(devices)) {
|
|
|
+ devices.forEach(device -> {
|
|
|
+ containsDeviceDeptIds.add(device.getDeptId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 不包含任何设备的队伍id集合
|
|
|
+ Set<Long> noDeviceXjDeptIds = xjDeptIds.stream()
|
|
|
+ .filter(deptId -> !containsDeviceDeptIds.contains(deptId))
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 查询无设备修井队伍日报列表
|
|
|
+ IotRyDailyReportPageReqVO ryReqVO = new IotRyDailyReportPageReqVO();
|
|
|
+ ryReqVO.setDeptIds(noDeviceXjDeptIds);
|
|
|
+ ryReqVO.setProjectClassification("2");
|
|
|
+ List<IotRyDailyReportDO> ryDailyReports = iotRyDailyReportMapper.dailyReports(ryReqVO);
|
|
|
+
|
|
|
+ // 查询所有瑞都的项目任务 以‘部门-时间’ 为唯一键 当天创建时间 内没有生成过日报 就自动生成
|
|
|
+ IotRdDailyReportPageReqVO pageReqVO = new IotRdDailyReportPageReqVO();
|
|
|
+ LocalDateTime currentDate = LocalDateTime.now();
|
|
|
+ String currentFormatDateStr = LocalDateTimeUtil.format(currentDate, "yyyy-MM-dd");
|
|
|
+ // 前一天的日期
|
|
|
+ LocalDateTime yesterday = currentDate.minusDays(1);
|
|
|
+ // 当天已经生成日报的修井队伍deptId集合
|
|
|
+ Set<Long> currentDayReportedDeptIds = new HashSet<>();
|
|
|
+ if (CollUtil.isNotEmpty(ryDailyReports)) {
|
|
|
+ ryDailyReports.forEach(report -> {
|
|
|
+ // 查询当天生成的日报
|
|
|
+ LocalDateTime createDate = report.getCreateTime();
|
|
|
+ String formatDateStr = LocalDateTimeUtil.format(createDate, "yyyy-MM-dd");
|
|
|
+ if (formatDateStr.equals(currentFormatDateStr)) {
|
|
|
+ currentDayReportedDeptIds.add(report.getTaskId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果当天的修井日报记录中不包含 无设备的修井队伍部门id 则生成修井队伍日报记录
|
|
|
+ Set<Long> tobeReportXjDeptIds = noDeviceXjDeptIds.stream()
|
|
|
+ .filter(deptId -> !currentDayReportedDeptIds.contains(deptId))
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(tobeReportXjDeptIds)) {
|
|
|
+ List<IotRyDailyReportDO> tobeAddedReports = new ArrayList<>();
|
|
|
+ tobeReportXjDeptIds.forEach(deptId -> {
|
|
|
+ IotRyDailyReportDO noDeviceReport = new IotRyDailyReportDO();
|
|
|
+ noDeviceReport.setDeptId(deptId);
|
|
|
+ noDeviceReport.setProjectClassification("2");
|
|
|
+ tobeAddedReports.add(noDeviceReport);
|
|
|
+ });
|
|
|
+ if (CollUtil.isNotEmpty(tobeAddedReports)) {
|
|
|
+ iotRyDailyReportMapper.insertBatch(tobeAddedReports);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return "创建成功";
|
|
|
+ }
|
|
|
+}
|