| | |
| | | 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.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.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.*; |
| | |
| | | @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) { |
| | | //------------------------------------------------------------------------------------------------ |
| | | //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 |
| | | 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) { |
| | | //------------------------------------------------------------------------------------------------ |
| | | //是否开启系统管理模块的多租户数据隔离【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); |
| | | } |
| | | //------------------------------------------------------------------------------------------------ |
| | | 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); |
| | | //是否开启系统管理模块的多租户数据隔离【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); |
| | | } |
| | | |
| | | |
| | | 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); |
| | | //是否开启系统管理模块的多租户数据隔离【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; |
| | | } |
| | | |
| | | |
| | | 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); |
| | | } |
| | | //此接口仅用作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"); |
| | | // 将字符串解析为 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(); |
| | | |
| | | } |
| | | |
| | | |
| | | } |