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