package com.xy.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xy.collections.list.JArrayList;
import com.xy.collections.list.JList;
import com.xy.config.DeviceThreadPoolConfig;
import com.xy.consts.DictConsts;
import com.xy.dto.*;
import com.xy.entity.*;
import com.xy.enums.FileExportType;
import com.xy.error.CommRuntimeException;
import com.xy.mapper.DeviceInfoMapper;
import com.xy.mapper.entity.DeviceInfoQueryPage;
import com.xy.util.ExcelUtils;
import com.xy.util.FileUtils;
import com.xy.utils.*;
import com.xy.utils.enums.DeviceActiveStateEnum;
import com.xy.utils.enums.DeviceNetSateType;
import com.xy.utils.enums.DictEnum;
import com.xy.utils.enums.DictSonEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jodd.introspector.MapperFunction;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static com.xy.utils.PlusBeans.*;
/**
*
* 设备-信息 服务实现类
*
*
* @author lijin
* @since 2022-12-23
*/
@Service
@RequiredArgsConstructor
@Api(tags = "设备-信息")
public class DeviceInfoServiceImpl extends ServiceImpl implements DeviceInfoService {
private final DeviceSysinfoServiceImpl deviceSysinfoService;
private final DeviceStatusServiceImpl deviceStatusService;
private final DeviceRegisterServiceImpl deviceRegisterService;
private final DeviceErrorsRecordServiceImpl deviceErrorsRecordService;
private final DeviceDataServiceImpl deviceDataService;
private final DeviceTempRecordsServiceImpl deviceTempRecordsService;
private final DeviceNetRecordServiceImpl deviceNetRecordService;
private final GoodsDeviceService goodsDeviceService;
private final FileExportService fileExportService;
private final RedisService redisService;
private final String keyPrefix = "device:history:";
private final FileUtils fileUtils;
@Override
@ApiOperation("对象查询")
public R obj(DeviceInfoDto.Obj obj) {
//设备信息
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(obj, DeviceInfo.class).build();
List list = list(lambdaQueryWrapper);
if (!Emptys.check(list)) {
return R.ok();
}
DeviceInfoDto.Vo deviceInfo = copy(DeviceInfoDto.Vo.class, list.get(0));
int num = 0;
if (obj.getIsSysinfo()) {
num++;
}
if (obj.getIsStatus()) {
num++;
}
if (obj.getIsRegister()) {
num++;
}
if (num > 0) {
ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(DeviceThreadPoolConfig.DEVICE_COMMON_POLL, num);
if (obj.getIsSysinfo()) {
execute.execute(() -> {
//系统信息
DeviceSysinfoDto.Vo deviceSysinfo = deviceSysinfoService.get(new DeviceSysinfoDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
deviceInfo.setDeviceSysinfo(deviceSysinfo);
});
}
if (obj.getIsStatus()) {
execute.execute(() -> {
//状态信息
DeviceStatusDto.Vo deviceStatus = deviceStatusService.obj(new DeviceStatusDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
deviceInfo.setDeviceStatus(deviceStatus);
});
}
if (obj.getIsRegister()) {
execute.execute(() -> {
//注册信息
DeviceRegisterDto.Vo deviceRegister = deviceRegisterService.obj(new DeviceRegisterDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
deviceInfo.setDeviceRegister(deviceRegister);
});
}
execute.end();
}
return R.ok(deviceInfo);
}
@ApiOperation("反显设备名称")
@Override
public R