Răsfoiți Sursa

pms 瑞鹰日报 编辑

zhangcl 2 săptămâni în urmă
părinte
comite
01c39b41dc

+ 8 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/IotRyDailyReportController.java

@@ -39,6 +39,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -121,6 +122,8 @@ public class IotRyDailyReportController {
         Map<Long, BigDecimal> taskExtPropertyPair = new HashMap<>();
         // key任务id   value设计井身结构
         Map<Long, String> taskWellStructPair = new HashMap<>();
+        // key部门id  value设备型号编号
+        AtomicReference<Map<Long, String>> equipmentTypePair = new AtomicReference<>(new HashMap<>());
         DataPermissionUtils.executeIgnore(() -> {
             // 查询日报关联的项目信息
             IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
@@ -154,6 +157,8 @@ public class IotRyDailyReportController {
                     }
                 });
             }
+            // 查询当前日报所属施工队伍中包含 井架 的型号
+            equipmentTypePair.set(iotRyDailyReportService.queryEquipmentType(convertList(reports, IotRyDailyReportDO::getDeptId)));
         });
         // 2. 拼接数据
         return BeanUtils.toBean(reports, IotRyDailyReportRespVO.class, (reportVO) -> {
@@ -165,8 +170,10 @@ public class IotRyDailyReportController {
             findAndThen(taskPair, reportVO.getTaskId(), taskName -> reportVO.setTaskName(taskName));
             // 2.4 设计井深
             findAndThen(taskExtPropertyPair, reportVO.getTaskId(), wellDepth -> reportVO.setDesignWellDepth(wellDepth));
-            // 2.4 设计井身结构
+            // 2.5 设计井身结构
             findAndThen(taskWellStructPair, reportVO.getTaskId(), wellStruct -> reportVO.setDesignWellStruct(wellStruct));
+            // 2.6 设备型号
+            findAndThen(equipmentTypePair.get(), reportVO.getDeptId(), equipmentType -> reportVO.setEquipmentType(equipmentType));
         });
     }
 

+ 4 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotrydailyreport/vo/IotRyDailyReportRespVO.java

@@ -165,7 +165,7 @@ public class IotRyDailyReportRespVO {
     @Schema(description = "任务 井号-施工地点")
     private String taskName;
 
-    @Schema(description = "设计井深")
+    @Schema(description = "设计井深(m)")
     private BigDecimal designWellDepth;
 
     @Schema(description = "设计井身结构")
@@ -176,4 +176,7 @@ public class IotRyDailyReportRespVO {
 
     @Schema(description = "完工井数", example = "2")
     private Integer completedWells;
+
+    @Schema(description = "设备型号/编号", example = "70D")
+    private String equipmentType;
 }

+ 9 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrydailyreport/IotRyDailyReportService.java

@@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDai
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotrydailyreport.IotRyDailyReportDO;
 
 import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 瑞鹰日报 Service 接口
@@ -52,4 +54,11 @@ public interface IotRyDailyReportService {
      */
     PageResult<IotRyDailyReportDO> getIotRyDailyReportPage(IotRyDailyReportPageReqVO pageReqVO);
 
+    /**
+     * 查询 施工队伍下 的 井架 类别 设备型号 编号
+     *
+     * @param deptIds
+     * @return 增压机 产能 集合
+     */
+    Map<Long, String> queryEquipmentType(List<Long> deptIds);
 }

+ 52 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotrydailyreport/IotRyDailyReportServiceImpl.java

@@ -2,24 +2,33 @@ package cn.iocoder.yudao.module.pms.service.iotrydailyreport;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
+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.module.pms.controller.admin.iotdevicecategorytemplateattrs.vo.IotDeviceProperty;
 import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotrydailyreport.vo.IotRyDailyReportSaveReqVO;
+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.iotprojecttask.IotProjectTaskDO;
 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.iotprojecttask.IotProjectTaskMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotrydailyreport.IotRyDailyReportMapper;
+import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO;
+import cn.iocoder.yudao.module.system.service.dict.DictTypeService;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.lang.reflect.Type;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.*;
@@ -38,6 +47,10 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
     private IotRyDailyReportMapper iotRyDailyReportMapper;
     @Resource
     private IotProjectTaskMapper iotProjectTaskMapper;
+    @Resource
+    private DictTypeService dictTypeService;
+    @Resource
+    private IotDeviceMapper iotDeviceMapper;
 
     @Override
     public Long createIotRyDailyReport(IotRyDailyReportSaveReqVO createReqVO) {
@@ -147,4 +160,40 @@ public class IotRyDailyReportServiceImpl implements IotRyDailyReportService {
         return iotRyDailyReportMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public Map<Long, String> queryEquipmentType(List<Long> deptIds) {
+        Map<Long, String> equipmentTypePair = new HashMap<>();
+        // 找到当前小队下的 电驱增压机 分类下设备的产能 计算 运行时效
+        DictTypeDO dictType = dictTypeService.getDictType("rq_iot_derrick_device_category");
+        AtomicReference<String> capacity = new AtomicReference<>();
+        if (ObjUtil.isNotEmpty(dictType)) {
+            if (StrUtil.isNotBlank(dictType.getRemark())) {
+                IotDevicePageReqVO capacityReqVO = new IotDevicePageReqVO();
+                capacityReqVO.setDeptIds(deptIds);
+                capacityReqVO.setAssetClass(Long.valueOf(dictType.getRemark()));
+                List<IotDeviceDO> capacityDevices = iotDeviceMapper.selectList(capacityReqVO);
+                if (CollUtil.isNotEmpty(capacityDevices)) {
+                    // 解析每个设备的 扩展属性 找出 已经设置 了产能的设备并提取值
+                    capacityDevices.forEach(device -> {
+                        if (StrUtil.isNotBlank(device.getTemplateJson())) {
+                            Gson gson = new Gson();
+                            Type listType = new TypeToken<List<IotDeviceProperty>>(){}.getType();
+                            List<IotDeviceProperty> deviceProperties = gson.fromJson(device.getTemplateJson(), listType);
+                            if (CollUtil.isNotEmpty(deviceProperties)) {
+                                deviceProperties.forEach(property -> {
+                                    if ("型号".equals(property.getName()) && StrUtil.isNotBlank(property.getValue())) {
+                                        // 当前扩展属性已经维护了 型号 值
+                                        capacity.set(property.getValue());
+                                    }
+                                    equipmentTypePair.put(device.getDeptId(), capacity.get());
+                                });
+                            }
+                        }
+                    });
+                }
+            }
+        }
+        return equipmentTypePair;
+    }
+
 }