From 5dd889b470543bed7564054cdfcd750b1d9316cb Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期三, 11 十二月 2024 10:19:52 +0800
Subject: [PATCH] 添加移动端实时故障和历史故障接口

---
 jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/MobileController.java |  216 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 160 insertions(+), 56 deletions(-)

diff --git a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/MobileController.java b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/MobileController.java
index feea7b1..4fcdc30 100755
--- a/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/MobileController.java
+++ b/jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/MobileController.java
@@ -8,6 +8,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.config.TenantContext;
 import org.jeecg.common.constant.MqttConstant;
@@ -19,8 +20,11 @@
 import org.jeecg.modules.dry.api.EmqxApi;
 import org.jeecg.modules.dry.entity.DryEquipment;
 import org.jeecg.modules.dry.entity.DryFaultRecord;
+import org.jeecg.modules.dry.entity.DryOrder;
 import org.jeecg.modules.dry.service.IDryEquipmentService;
 import org.jeecg.modules.dry.service.IDryFaultRecordService;
+import org.jeecg.modules.dry.service.IDryOrderService;
+import org.jeecg.modules.dry.vo.DryFaultRecordVo;
 import org.jeecg.modules.dry.vo.MoEquVo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +34,8 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import java.time.Duration;
+import java.time.LocalDateTime;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -40,71 +46,169 @@
 @RequestMapping("/mobile")
 @Slf4j
 public class MobileController {
-  @Autowired
-  private IDryEquipmentService dryEquipmentService;
-  @Autowired
-  private IDryFaultRecordService faultRecordService;
-  @Autowired
-  private RedisUtil redisUtil;
+    @Autowired
+    private IDryEquipmentService dryEquipmentService;
+    @Autowired
+    private IDryFaultRecordService faultRecordService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private IDryOrderService orderService;
 
-  @ApiOperation(value = "璁惧鍒楄〃鏌ヨ", notes = "璁惧鍒楄〃鏌ヨ")
-  @GetMapping(value = "/equ/list")
-  public Result<IPage<MoEquVo>> queryPageList(DryEquipment dryEquipment, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
-    //------------------------------------------------------------------------------------------------
-    //鏄惁寮�鍚郴缁熺鐞嗘ā鍧楃殑澶氱鎴锋暟鎹殧绂汇�怱AAS澶氱鎴锋ā寮忋��
-    if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
-      dryEquipment.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
+    @ApiOperation(value = "璁惧鍒楄〃鏌ヨ", notes = "璁惧鍒楄〃鏌ヨ")
+    @GetMapping(value = "/equ/list")
+    public Result<IPage<MoEquVo>> queryPageList(DryEquipment dryEquipment, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        //------------------------------------------------------------------------------------------------
+        //鏄惁寮�鍚郴缁熺鐞嗘ā鍧楃殑澶氱鎴锋暟鎹殧绂汇�怱AAS澶氱鎴锋ā寮忋��
+        if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
+            dryEquipment.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0));
+        }
+        //------------------------------------------------------------------------------------------------
+        QueryWrapper<DryEquipment> queryWrapper = QueryGenerator.initQueryWrapper(dryEquipment, req.getParameterMap());
+        Page<DryEquipment> page = new Page<DryEquipment>(pageNo, pageSize);
+        Page<MoEquVo> voPage = new Page<MoEquVo>(pageNo, pageSize);
+        IPage<DryEquipment> pageList = dryEquipmentService.page(page, queryWrapper);
+
+
+        compEqu(pageList, voPage);
+
+
+        return Result.OK(voPage);
     }
-    //------------------------------------------------------------------------------------------------
-    QueryWrapper<DryEquipment> queryWrapper = QueryGenerator.initQueryWrapper(dryEquipment, req.getParameterMap());
-    Page<DryEquipment> page = new Page<DryEquipment>(pageNo, pageSize);
-    Page<MoEquVo> voPage = new Page<MoEquVo>(pageNo, pageSize);
-    IPage<DryEquipment> pageList = dryEquipmentService.page(page, queryWrapper);
+
+    @ApiOperation(value = "璁惧鎶ヨ鏁版嵁", notes = "璁惧鎶ヨ鏁版嵁鍒楄〃鏌ヨ")
+    @GetMapping(value = "/fault/list")
+    public Result<IPage<DryFaultRecordVo>> queryFaultList(DryFaultRecord faultRecord, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
+        //鏄惁寮�鍚郴缁熺鐞嗘ā鍧楃殑澶氱鎴锋暟鎹殧绂汇�怱AAS澶氱鎴锋ā寮忋��
+        if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
+            faultRecord.setTenantId(tenantId);
+        }
+        QueryWrapper<DryFaultRecord> queryWrapper = QueryGenerator.initQueryWrapper(faultRecord, req.getParameterMap());
+        Page<DryFaultRecord> page = new Page<DryFaultRecord>(pageNo, pageSize);
+        IPage<DryFaultRecord> pageList = faultRecordService.page(page, queryWrapper);
+        Page<DryFaultRecordVo> voPage = new Page<DryFaultRecordVo>(pageNo, pageSize);
+        compFault(pageList, voPage);
+        return Result.OK(voPage);
+    }
+
+    private void compFault(IPage<DryFaultRecord> pageList, Page<DryFaultRecordVo> page) {
+        List<DryFaultRecordVo> collect = pageList.getRecords().stream().filter(item -> item.getOrderId() != null).map(item -> {
+            DryFaultRecordVo vo = new DryFaultRecordVo();
+            BeanUtils.copyProperties(item, vo);
+            String orderCode = item.getOrderId();
+            QueryWrapper<DryOrder> orderQueryWrapper = new QueryWrapper<>();
+            orderQueryWrapper.lambda().eq(DryOrder::getCode, orderCode);
+            DryOrder order = orderService.getOne(orderQueryWrapper);
+            if (vo.getStartTime() != null && vo.getEndTime() != null) {
+                String faultTimeStr = calculateTimeDifference(DateUtils.date2Str(vo.getStartTime(), DateUtils.datetimeFormat.get()), DateUtils.date2Str(vo.getEndTime(), DateUtils.datetimeFormat.get()));
+                vo.setFaultTimeStr(faultTimeStr);
+            }
+
+            if (order == null) return vo;
+            String equId = order.getEquId();
+            if (equId == null) return vo;
+            DryEquipment equipment = dryEquipmentService.getById(equId);
+            if (equipment == null || equipment.getName() == null) return vo;
+            vo.setEquName(equipment.getName().substring(0, 2));
+            return vo;
+        }).collect(Collectors.toList());
+        BeanUtils.copyProperties(pageList, page);
+        page.setRecords(collect);
+    }
 
 
-    comp(pageList, voPage);
+    @ApiOperation(value = "鎶ヨ鍥炬爣鏁版嵁", notes = "鎶ヨ鍥炬爣鏁版嵁鏌ヨ")
+    @GetMapping(value = "/fault/chart")
+    public List<DryFaultRecordVo> queryFaultChartData(DryFaultRecord faultRecord, HttpServletRequest req) {
+        int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
+        //鏄惁寮�鍚郴缁熺鐞嗘ā鍧楃殑澶氱鎴锋暟鎹殧绂汇�怱AAS澶氱鎴锋ā寮忋��
+        if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
+            faultRecord.setTenantId(tenantId);
+        }
+        QueryWrapper<DryFaultRecord> queryWrapper = QueryGenerator.initQueryWrapper(faultRecord, req.getParameterMap());
+        List<DryFaultRecord> faultList = faultRecordService.list(queryWrapper);
+        List<DryFaultRecordVo> result = new ArrayList<>(faultList.stream()
+                .collect(Collectors.groupingBy(DryFaultRecord::getFaultName,
+                        Collectors.collectingAndThen(Collectors.toList(), list ->
+                                new DryFaultRecordVo(list.get(0), list.size()))))
+                .values())
+                .stream()
+                .sorted(Comparator.comparingInt(DryFaultRecordVo::getECount).reversed())
+                .collect(Collectors.toList());
+        return result;
+    }
 
 
-    return Result.OK(voPage);
-  }
-
-  @ApiOperation(value = "璁惧鎶ヨ鏁版嵁", notes = "璁惧鎶ヨ鏁版嵁鍒楄〃鏌ヨ")
-  @GetMapping(value = "/fault/list")
-  public Result<IPage<DryFaultRecord>> queryFaultList(DryFaultRecord faultRecord, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req){
-    int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
-    QueryWrapper<DryFaultRecord> queryWrapper = QueryGenerator.initQueryWrapper(faultRecord, req.getParameterMap());
-    Page<DryFaultRecord> page = new Page<DryFaultRecord>(pageNo, pageSize);
-    IPage<DryFaultRecord> pageList = faultRecordService.page(page, queryWrapper);
-    return Result.OK(pageList);
-  }
+    //姝ゆ帴鍙d粎鐢ㄤ綔uniapp涓嬫媺杩斿洖锛屾棤瀹為檯鎰忎箟
+    @GetMapping(value = "/sample/list")
+    public Result<IPage<Object>> querySampleList(DryFaultRecord faultRecord, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        Page<Object> page = new Page<Object>(pageNo, pageSize);
+        page.setRecords(Arrays.asList(""));
+        page.setSize(1);
+        page.setCurrent(1);
+        return Result.OK(page);
+    }
 
 
+    private void compEqu(IPage<DryEquipment> pageList, Page<MoEquVo> page) {
+        //褰撳墠绉熸埛id
+        int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
+        List<MoEquVo> collect = pageList.getRecords().stream().map(item -> {
+            MoEquVo vo = new MoEquVo();
+            BeanUtils.copyProperties(item, vo);
+            String clientid = "client-" + tenantId + "-" + item.getCode();
+            //JSONObject client = (JSONObject) redisUtil.hget(MqttConstant.MQTT_ONLINE_CLIENT ,tenantId);
+            JSONObject client = (JSONObject) redisUtil.hget(String.format(MqttConstant.MQTT_ONLINE_CLIENT, tenantId), clientid);
+            //缁勮鐘舵�佹暟鎹�
+            if (client != null) {
+                vo.setOnline(true);
+                //杩炴帴鏃堕棿
+                String st = client.getString("connectedAt");
+                vo.setUpTime(st);
+                vo.setClientId(clientid);
+            }
+            return vo;
+        }).collect(Collectors.toList());
+        //鎺掑簭
+        collect.sort(Comparator.comparing(obj -> obj.getCode(), Comparator.nullsLast(Comparator.naturalOrder())));
+        collect.sort(Comparator.comparing(obj -> obj.getOnline(), Comparator.nullsLast(Comparator.naturalOrder())));
+        BeanUtils.copyProperties(pageList, page);
+        page.setRecords(collect);
+    }
 
-  private void comp(IPage<DryEquipment> pageList, Page<MoEquVo> page) {
-    //褰撳墠绉熸埛id
-    int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
-    List<MoEquVo> collect = pageList.getRecords().stream().map(item -> {
-      MoEquVo vo = new MoEquVo();
-      BeanUtils.copyProperties(item, vo);
-      String clientid = "client-" + tenantId + "-" + item.getCode();
-      //JSONObject client = (JSONObject) redisUtil.hget(MqttConstant.MQTT_ONLINE_CLIENT ,tenantId);
-      JSONObject client = (JSONObject) redisUtil.hget(String.format(MqttConstant.MQTT_ONLINE_CLIENT,tenantId),clientid);
-      //缁勮鐘舵�佹暟鎹�
-      if (client != null) {
-        vo.setOnline(true);
-        //杩炴帴鏃堕棿
-        String st = client.getString("connectedAt");
-        vo.setUpTime(st);
-        vo.setClientId(clientid);
-      }
-      return vo;
-    }).collect(Collectors.toList());
-    //鎺掑簭
-    collect.sort(Comparator.comparing(obj -> obj.getCode(), Comparator.nullsLast(Comparator.naturalOrder())));
-    collect.sort(Comparator.comparing(obj -> obj.getOnline(), Comparator.nullsLast(Comparator.naturalOrder())));
-    BeanUtils.copyProperties(pageList, page);
-    page.setRecords(collect);
-  }
+    /**
+     * @param startTimeStr
+     * @param endTimeStr
+     * @return
+     */
+    private String calculateTimeDifference(String startTimeStr, String endTimeStr) {
+        // 瀹氫箟鏃堕棿鏍煎紡
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 灏嗗瓧绗︿覆瑙f瀽涓� LocalDateTime 瀵硅薄
+        LocalDateTime startTime = LocalDateTime.parse(startTimeStr, formatter);
+        LocalDateTime endTime = LocalDateTime.parse(endTimeStr, formatter);
+        // 璁$畻涓や釜鏃堕棿鐐逛箣闂寸殑鎸佺画鏃堕棿
+        Duration duration = Duration.between(startTime, endTime);
+        // 鑾峰彇灏忔椂銆佸垎閽熷拰绉掓暟
+        long hours = duration.toHours();
+        long minutes = duration.toMinutes() % 60;
+        long seconds = duration.getSeconds() % 60;
+
+        StringBuilder result = new StringBuilder();
+        if (hours > 0) {
+            result.append(hours).append("鏃�");
+        }
+        if (minutes > 0) {
+            result.append(minutes).append("鍒�");
+        }
+        if (seconds > 0) {
+            result.append(seconds).append("绉�");
+        }
+
+        return result.toString();
+
+    }
 
 
 }

--
Gitblit v1.9.3