ソースを参照

pms 瑞都 临时新建日报 瑞恒 设备利用率统计逻辑调整

zhangcl 21 時間 前
コミット
3989185c70

+ 11 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/IotRdDailyReportController.java

@@ -541,7 +541,18 @@ public class IotRdDailyReportController {
                 }
             }
             dailyReportVO.setReportFuels(tobeAddedReportFuels);
+        } else {
+            // 临时新建的日报 没有关联项目 任务
+            Set<Long> personIds = dailyReport.getResponsiblePerson();
+            if (CollUtil.isNotEmpty(personIds)) {
+                List<AdminUserRespDTO> users = adminUserApi.getUserList(personIds);
+                String userNames = users.stream()
+                        .map(AdminUserRespDTO::getNickname) // 提取每个员工的nickName
+                        .collect(Collectors.joining(","));   // 用逗号拼接所有名称
+                dailyReportVO.setResponsiblePersonNames(userNames);
+            }
         }
+
         // 查询当前日报关联的附件信息
         IotAttachmentPageReqVO reqVO = new IotAttachmentPageReqVO();
         reqVO.setBizId(dailyReport.getId());

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrddailyreport/vo/IotRdDailyReportSaveReqVO.java

@@ -143,6 +143,12 @@ public class IotRdDailyReportSaveReqVO {
     @Schema(description = "故障误工h")
     private BigDecimal faultDowntime;
 
+    @Schema(description = "施工区域")
+    private String location;
+
+    @Schema(description = "责任人([123,234])")
+    private Set<Long> responsiblePerson;
+
     @Schema(description = "人员情况")
     private String personnel;
 

+ 11 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/stat/IotStaticController.java

@@ -1749,6 +1749,8 @@ public class IotStaticController {
         Map<Long, String> projectPair = new HashMap<>();
         // key项目部id   value项目部包含的队伍id集合
         Map<Long, Set<Long>> projectTeamPair = new HashMap<>();
+        // 队伍id 集合
+        Set<Long> teamDepartmentIds = new HashSet<>();
         // 查询 瑞恒 所有设备 只统计包含 施工 状态设备的队伍
         IotDevicePageReqVO deviceReqVO = new IotDevicePageReqVO();
         deviceReqVO.setDeptIds(new ArrayList<>(childDeptIds));
@@ -1768,14 +1770,18 @@ public class IotStaticController {
                     projectDeptNames.add(dept.getName());
                     projectPair.put(deptId, dept.getName());
                 }
+                // 队伍
+                if ("3".equals(dept.getType())) {
+                    teamDepartmentIds.add(dept.getId());
+                }
             });
             // 遍历所有部门 只筛选出有设备的队伍
             allDeptPair.forEach((deptId, dept) -> {
                 // 找出每个项目部下的队伍
                 if (projectPair.containsKey(dept.getParentId())) {
                     // 获得当前部门的上级项目部
-                    projectPair.forEach((projectDeptId, projectDept) -> {
-                        if (projectDeptId.equals(dept.getParentId()) && haveDeviceDeptIds.contains(deptId)) {
+                    projectPair.forEach((projectDeptId, projectDeptName) -> {
+                        if (projectDeptId.equals(dept.getParentId()) && haveDeviceDeptIds.contains(deptId) && teamDepartmentIds.contains(deptId)) {
                             if (projectTeamPair.containsKey(projectDeptId)) {
                                 Set<Long> teamIds = projectTeamPair.get(projectDeptId);
                                 teamIds.add(deptId);
@@ -1946,7 +1952,9 @@ public class IotStaticController {
         Set<Long> projectTeamIds = new HashSet<>();
         if (CollUtil.isNotEmpty(projectTeams)) {
             projectTeams.forEach(team -> {
-                projectTeamIds.add(team.getId());
+                if ("3".equals(team.getType())) {
+                    projectTeamIds.add(team.getId());
+                }
             });
             // 如果是吐哈 将克拉玛依的队伍合并过来
             if (160 == reqVO.getDeptId()) {

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/iotrddailyreport/IotRdDailyReportDO.java

@@ -228,6 +228,15 @@ public class IotRdDailyReportDO extends BaseDO {
      * 故障误工h
      */
     private BigDecimal faultDowntime;
+    /**
+     * 责任人([123,234])
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Set<Long> responsiblePerson;
+    /**
+     * 施工区域
+     */
+    private String location;
     /**
      * 人员情况
      */

+ 89 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrddailyreport/IotRdDailyReportServiceImpl.java

@@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdailyreportfuel.vo.IotDailyReportFuelSaveReqVO;
@@ -127,7 +128,94 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
     public Long createIotRdDailyReport(IotRdDailyReportSaveReqVO createReqVO) {
         // 插入
         IotRdDailyReportDO iotRdDailyReport = BeanUtils.toBean(createReqVO, IotRdDailyReportDO.class);
-        iotRdDailyReportMapper.insert(iotRdDailyReport);
+        // 如果没有传递 deptId 则默认使用当前登录人的 部门
+        if (ObjUtil.isEmpty(createReqVO.getDeptId())) {
+            Long deptId = SecurityFrameworkUtils.getLoginUserDeptId();
+            if (ObjUtil.isNotEmpty(deptId)) {
+                createReqVO.setDeptId(deptId);
+            }
+        }
+        // 根据部门名称 当前日期 生成日报标题
+        if (ObjUtil.isNotEmpty(createReqVO.getDeptId())) {
+            DeptDO dept = deptService.getDept(createReqVO.getDeptId());
+            if (ObjUtil.isNotEmpty(dept)) {
+                String todayDateStr = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.NORM_DATE_PATTERN);
+                iotRdDailyReport.setReportName(dept.getName() + "/" + todayDateStr + "日报");
+            }
+        }
+        // 临时新建的日报 审批状态 默认为 审批通过 status 赋值为1 填写完成
+        iotRdDailyReport.setAuditStatus(SupplierAuditStatusEnum.APPROVE.getStatus());
+        iotRdDailyReport.setStatus(1);
+        if (ObjUtil.isNotEmpty(createReqVO.getId())) {
+            // 编辑现有数据
+            iotRdDailyReportMapper.updateById(iotRdDailyReport);
+        } else {
+            // 新建日报记录
+            iotRdDailyReportMapper.insert(iotRdDailyReport);
+        }
+        // 保存生产动态明细
+        if (CollUtil.isNotEmpty(createReqVO.getReportDetails())) {
+            // 先删除明细 再新增
+            List<IotRdDailyReportDetailSaveReqVO> reportDetails = createReqVO.getReportDetails();
+            int count = iotRdDailyReportDetailMapper.deleteByMap(ImmutableMap.of(
+                    "report_id", iotRdDailyReport.getId()
+            ));
+            // 新增生产动态明细
+            List<IotRdDailyReportDetailDO> reportDOs = new ArrayList<>();
+            reportDetails.forEach(detail -> {
+                String detailEndTime = detail.getEndTime();
+                if (StrUtil.isNotBlank(detailEndTime)) {
+                    String[] timeAttr = detailEndTime.split(":");
+                    if ("24".equals(timeAttr[0])) {
+                        detail.setEndTime("23:59:59");
+                    }
+                }
+                IotRdDailyReportDetailDO tempDetail = BeanUtils.toBean(detail, IotRdDailyReportDetailDO.class);
+                tempDetail.setDeptId(createReqVO.getDeptId());
+                // 临时新建的日报 不关联项目 任务
+                // tempDetail.setTaskId(updateObj.getTaskId());
+                tempDetail.setReportId(iotRdDailyReport.getId());
+                tempDetail.setReportDate(LocalDateTime.now());
+                reportDOs.add(tempDetail);
+            });
+            // 插入日报明细记录
+            if (CollUtil.isNotEmpty(reportDOs)) {
+                iotRdDailyReportDetailMapper.insertBatch(reportDOs);
+            }
+        }
+        // 保存附件
+        if (CollUtil.isNotEmpty(createReqVO.getAttachments())) {
+            List<IotAttachmentSaveReqVO> attachments = createReqVO.getAttachments();
+            List<IotAttachmentDO> tobeAddedAttachments = new ArrayList<>();
+            attachments.forEach(att -> {
+                IotAttachmentDO attachment = new IotAttachmentDO();
+                attachment.setBizId(iotRdDailyReport.getId());
+                attachment.setCategory(AttachmentCategoryEnum.DAILY_REPORT.getCode());
+                attachment.setType(AttachmentTypeEnum.EXTERNAL_RENTAL.getCode());
+                attachment.setFilePath(att.getFilePath());
+                attachment.setFileSize(att.getFileSize());
+                attachment.setFilename(att.getFilename());
+                attachment.setFileType(att.getFileType());
+                attachment.setRemark(att.getRemark());
+                tobeAddedAttachments.add(attachment);
+            });
+            if (CollUtil.isNotEmpty(tobeAddedAttachments)) {
+                // 先删除再新增
+                int count = iotAttachmentMapper.deleteByMap(ImmutableMap.of(
+                        "category", AttachmentCategoryEnum.DAILY_REPORT.getCode(),
+                        "biz_id", iotRdDailyReport.getId(),
+                        "type", AttachmentTypeEnum.EXTERNAL_RENTAL.getCode()
+                ));
+                iotAttachmentMapper.insertBatch(tobeAddedAttachments);
+            }
+        } else {
+            // 如果传递的附件列表为空 则删除已有的附件 有可能编辑已有数据
+            int count = iotAttachmentMapper.deleteByMap(ImmutableMap.of(
+                    "category", AttachmentCategoryEnum.DAILY_REPORT.getCode(),
+                    "biz_id", iotRdDailyReport.getId(),
+                    "type", AttachmentTypeEnum.EXTERNAL_RENTAL.getCode()
+            ));
+        }
         // 返回
         return iotRdDailyReport.getId();
     }

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrhdailyreport/IotRhDailyReportServiceImpl.java

@@ -1097,7 +1097,7 @@ public class IotRhDailyReportServiceImpl implements IotRhDailyReportService {
                     projectDeptPair.forEach((projectDeptId, projectDept) -> {
                         // 找到每个项目部下的队伍 只筛选 包含设备的队伍
                         teamProjectIdPair.forEach((deptId, parentDeptId) -> {
-                            if (parentDeptId.equals(projectDeptId) && deviceDeptIds.contains(deptId)) {
+                            if (parentDeptId.equals(projectDeptId) && deviceDeptIds.contains(deptId) && teamIds.contains(deptId)) {
                                 if (teamCountPair.containsKey(projectDeptId)) {
                                     Integer tempCount = teamCountPair.get(projectDeptId);
                                     teamCountPair.put(projectDeptId, ++tempCount);