ソースを参照

多责任人处理

lipenghui 6 日 前
コミット
3b278b8060

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

@@ -68,6 +68,7 @@ import javax.validation.Valid;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
+import java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -989,5 +990,22 @@ public class IotStaticController {
         }
         return result;
     }
+
+    @PermitAll
+    @GetMapping("/mttr")
+    public CommonResult<String> getMttr() {
+        List<IotFailureReportDO> failureReportDOS = iotFailureReportMapper.selectList();
+        List<IotFailureReportDO> collect = failureReportDOS.stream().filter(e -> Objects.nonNull(e.getDealHour())&&(e.getDealHour().compareTo(BigDecimal.ZERO) > 0)).collect(Collectors.toList());
+        if (CollUtil.isEmpty(collect)) {
+            return success("0");
+        } else {
+            int size = collect.size();
+            double sum = collect.stream().mapToDouble(re -> re.getDealHour().doubleValue()).sum();
+            Double result = sum/size;
+            DecimalFormat df = new DecimalFormat("#.0");
+            String formattedResult = df.format(result);
+            return success(formattedResult);
+        }
+    }
 }
 

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/inspect/IotInspectOrderDetailMapper.java

@@ -38,6 +38,12 @@ public interface IotInspectOrderDetailMapper extends BaseMapperX<IotInspectOrder
                 .orderByDesc(IotInspectOrderDetailDO::getId));
     }
 
+    default List<IotInspectOrderDetailDO> selectByTimeAndOrderIdAndDeviceId(IotInspectOrderDetailPageReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<IotInspectOrderDetailDO>().betweenIfPresent(IotInspectOrderDetailDO::getCreateTime, reqVO.getCreateTime()).eqIfPresent(IotInspectOrderDetailDO::getDeviceId, reqVO.getDeviceId())
+                .eqIfPresent(IotInspectOrderDetailDO::getOrderId, reqVO.getOrderId())
+        );
+    }
+
     default List<IotInspectOrderDetailDO> selectListStat(IotCountDataDO vo, Set<Long> ids) {
         return selectList(new LambdaQueryWrapperX<IotInspectOrderDetailDO>()
                 .betweenIfPresent(IotInspectOrderDetailDO::getCreateTime, vo.getCreateTime())

+ 44 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/inspect/IotInspectOrderServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.pms.service.inspect;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
@@ -8,6 +9,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 import cn.iocoder.yudao.module.pms.constant.PmsConstants;
+import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderDetailPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.route.vo.IotInspectRouteRespVO;
@@ -117,6 +119,48 @@ public class IotInspectOrderServiceImpl implements IotInspectOrderService {
             order.setExecuteDate(LocalDateTime.now());
         }
         iotInspectOrderMapper.updateById(order);
+
+        CompletableFuture.runAsync(()->{
+            //处理多责任人工单逻辑
+            //判断该设备是否多个责任人
+            Map<Long, String> iotDevicePerson = iotDevicePersonService.getIotDevicePerson(ImmutableList.of(Long.valueOf(deviceId)));
+            String person = iotDevicePerson.get(Long.valueOf(deviceId));
+            if (StringUtils.isNotBlank(person)) {
+                String[] persons = person.split(",");
+                //多个责任人的处理
+                if (persons.length>1) {
+                    //查询出该工单的该设备的所有巡检项
+                    List<IotInspectOrderDetailDO> detailDOS = iotInspectOrderDetailMapper.selectByMap(ImmutableMap.of("order_id", orderId, "device_id", deviceId));
+                    boolean allFinish = detailDOS.stream().noneMatch(e -> Objects.isNull(e.getIfNormal()));
+                    //如果该工单该设备都巡检完成
+                    if (allFinish) {
+                        //查询所有当天的该设备的巡检明细
+                        IotInspectOrderDetailDO todayDetail = detailDOS.get(0);
+                        LocalDateTime createTime = todayDetail.getCreateTime();
+                        String create = DateUtil.format(createTime, DatePattern.NORM_DATE_PATTERN);
+                        LocalDateTime startOfDay = DateUtils.getStartOfDay(create);
+                        LocalDateTime endOfDay = DateUtils.getEndOfDay(create);
+                        IotInspectOrderDetailPageReqVO iotInspectOrderDetailPageReqVO = new IotInspectOrderDetailPageReqVO();
+                        iotInspectOrderDetailPageReqVO.setCreateTime(new LocalDateTime[]{startOfDay, endOfDay});
+                        iotInspectOrderDetailPageReqVO.setDeviceId(Long.valueOf(deviceId));
+                        List<IotInspectOrderDetailDO> deviceIdDetails = iotInspectOrderDetailMapper.selectByTimeAndOrderIdAndDeviceId(iotInspectOrderDetailPageReqVO);
+                        Map<Long, List<IotInspectOrderDetailDO>> otherOrderMap = deviceIdDetails.stream().filter(e -> !orderId.equals(e.getOrderId())).collect(Collectors.groupingBy(IotInspectOrderDetailDO::getOrderId));
+                        otherOrderMap.forEach((k, v) -> {
+                            iotInspectOrderDetailPageReqVO.setDeviceId(null);
+                            iotInspectOrderDetailPageReqVO.setOrderId(k);
+                            List<IotInspectOrderDetailDO> orderIdDetails = iotInspectOrderDetailMapper.selectByTimeAndOrderIdAndDeviceId(iotInspectOrderDetailPageReqVO);
+                            //删除巡检明细
+                            v.forEach(f -> iotInspectOrderDetailMapper.deleteById(f));
+                            //如果工单里面只有这一个设备的话,删除该工单
+                            if (v.size()==orderIdDetails.size()) {
+                                iotInspectOrderMapper.deleteById(k);
+                            }
+
+                        });
+                    }
+                }
+            }
+        });
     }
 
     @Override