package org.jeecg.modules.dry.controller;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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;
|
import org.jeecg.common.system.query.QueryGenerator;
|
import org.jeecg.common.util.DateUtils;
|
import org.jeecg.common.util.RedisUtil;
|
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
|
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;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
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.*;
|
import java.util.stream.Collectors;
|
|
@Api(tags = "移动端")
|
@RestController
|
@RequestMapping("/mobile")
|
@Slf4j
|
public class MobileController {
|
@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) {
|
//------------------------------------------------------------------------------------------------
|
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
|
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);
|
}
|
|
@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);
|
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
|
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);
|
}
|
|
|
@ApiOperation(value = "报警图标数据", notes = "报警图标数据查询")
|
@GetMapping(value = "/fault/chart")
|
public List<DryFaultRecordVo> queryFaultChartData(DryFaultRecord faultRecord, HttpServletRequest req) {
|
int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
//是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】
|
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;
|
}
|
|
|
//此接口仅用作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);
|
}
|
|
/**
|
* @param startTimeStr
|
* @param endTimeStr
|
* @return
|
*/
|
private String calculateTimeDifference(String startTimeStr, String endTimeStr) {
|
// 定义时间格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
// 将字符串解析为 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();
|
|
}
|
|
|
}
|