|
|
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.pms.service.iotprojecttask;
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.util.ObjUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
@@ -13,16 +15,18 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProject
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotrddailyreport.IotRdDailyReportDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotattachment.IotAttachmentMapper;
|
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotprojectinfo.IotProjectInfoMapper;
|
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask.IotProjectTaskMapper;
|
|
|
+import cn.iocoder.yudao.module.pms.dal.mysql.iotrddailyreport.IotRdDailyReportMapper;
|
|
|
import cn.iocoder.yudao.module.pms.enums.AttachmentCategoryEnum;
|
|
|
import cn.iocoder.yudao.module.pms.enums.AttachmentTypeEnum;
|
|
|
import cn.iocoder.yudao.module.pms.service.iotprojectinfo.IotProjectInfoService;
|
|
|
-import cn.iocoder.yudao.module.supplier.service.product.SupplierService;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
|
|
|
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
@@ -30,6 +34,8 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
@@ -38,6 +44,7 @@ import java.util.stream.Collectors;
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
|
|
import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_PROJECT_TASK_NOT_EXISTS;
|
|
|
+import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_RD_DAILY_REPORT_EXISTS;
|
|
|
|
|
|
/**
|
|
|
* 项目信息任务拆分 Service 实现类
|
|
|
@@ -54,13 +61,15 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
|
|
|
private IotProjectInfoService iotProjectInfoService;
|
|
|
|
|
|
@Resource
|
|
|
- private SupplierService iotSupplierService;
|
|
|
+ private IotRdDailyReportMapper iotRdDailyReportMapper;
|
|
|
@Resource
|
|
|
private IotProjectInfoMapper iotProjectInfoMapper;
|
|
|
@Resource
|
|
|
private DeptMapper deptMapper;
|
|
|
@Resource
|
|
|
private IotAttachmentMapper attachmentMapper;
|
|
|
+ @Resource
|
|
|
+ private DeptService deptService;
|
|
|
|
|
|
@Override
|
|
|
public Long createIotProjectTask(IotProjectTaskSaveReqVO createReqVO) {
|
|
|
@@ -450,4 +459,60 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
|
|
|
return tasks;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Long generateReport(IotProjectTaskPageReqVO reqVO) {
|
|
|
+ // 根据当前任务井id 生成对应施工队伍 指定日期的日报
|
|
|
+ if (ObjUtil.isEmpty(reqVO.getId()) || ObjUtil.isEmpty(reqVO.getReportDate())) {
|
|
|
+ throw exception(IOT_PROJECT_TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ IotProjectTaskDO task = iotProjectTaskMapper.selectById(reqVO.getId());
|
|
|
+ if (ObjUtil.isEmpty(task)) {
|
|
|
+ throw exception(IOT_PROJECT_TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ LocalDateTime reportDate = reqVO.getReportDate();
|
|
|
+ Set<Long> deptIds = task.getDeptIds();
|
|
|
+ if (CollUtil.isEmpty(deptIds)) {
|
|
|
+ throw exception(IOT_PROJECT_TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ List<Long> deptIdList = new ArrayList<>(deptIds);
|
|
|
+ Long deptId = deptIdList.get(0);
|
|
|
+
|
|
|
+ // 查询部门信息
|
|
|
+ DeptDO dept = deptService.getDept(deptId);
|
|
|
+ if (ObjUtil.isEmpty(dept)) {
|
|
|
+ throw exception(IOT_PROJECT_TASK_NOT_EXISTS);
|
|
|
+ }
|
|
|
+ String reportDateStr = LocalDateTimeUtil.format(reportDate, DatePattern.NORM_DATE_PATTERN);
|
|
|
+ // 校验:指定日期 相同施工队伍 相同任务井号 只能有1份日报
|
|
|
+ IotRdDailyReportDO existReport = iotRdDailyReportMapper.selectExistTaskReport(deptId, task.getId(), reportDateStr);
|
|
|
+ if (ObjUtil.isNotEmpty(existReport)) {
|
|
|
+ throw exception(IOT_RD_DAILY_REPORT_EXISTS);
|
|
|
+ }
|
|
|
+ // 生成指定日期、施工队伍、任务井号的日报
|
|
|
+ IotRdDailyReportDO tobeGeneratedReport = new IotRdDailyReportDO();
|
|
|
+ tobeGeneratedReport.setDeptId(deptId);
|
|
|
+ tobeGeneratedReport.setReportName(dept.getName()+"/"+reportDateStr+"手工推送日报");
|
|
|
+ tobeGeneratedReport.setProjectId(task.getProjectId());
|
|
|
+ tobeGeneratedReport.setTaskId(task.getId());
|
|
|
+ Set<Long> techniqueIds = new HashSet<>();
|
|
|
+ techniqueIds.add(Long.valueOf(task.getTechnique()));
|
|
|
+ tobeGeneratedReport.setTechniqueIds(techniqueIds);
|
|
|
+ tobeGeneratedReport.setDeviceIds(task.getDeviceIds());
|
|
|
+ tobeGeneratedReport.setStartTime(LocalTime.of(8, 0, 0));
|
|
|
+ tobeGeneratedReport.setEndTime(LocalTime.of(8, 0, 0));
|
|
|
+ tobeGeneratedReport.setStatus(0);
|
|
|
+ tobeGeneratedReport.setAuditStatus(0);
|
|
|
+ tobeGeneratedReport.setCreateTime(reportDate);
|
|
|
+ Set<Long> userIds = task.getSubmitter();
|
|
|
+ if (CollUtil.isNotEmpty(userIds)) {
|
|
|
+ List<Long> userIdList = new ArrayList<>(userIds);
|
|
|
+ tobeGeneratedReport.setCreator(String.valueOf(userIdList.get(0)));
|
|
|
+ }
|
|
|
+ LocalDateTime nextDate = reportDate.plusDays(1);
|
|
|
+ tobeGeneratedReport.setConstructionStartDate(reportDate);
|
|
|
+ tobeGeneratedReport.setConstructionEndDate(nextDate);
|
|
|
+ int num = iotRdDailyReportMapper.insert(tobeGeneratedReport);
|
|
|
+ return tobeGeneratedReport.getId();
|
|
|
+ }
|
|
|
+
|
|
|
}
|