package com.xy.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xy.annotation.LogOperate;
import com.xy.device.EnumEnvParams;
import com.xy.dto.DevicePartDto;
import com.xy.dto.MqttUserDto;
import com.xy.entity.*;
import com.xy.enums.LogEnum;
import com.xy.mapper.MqttUserMapper;
import com.xy.utils.Emptys;
import com.xy.utils.R;
import com.xy.utils.SysDictUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
import static com.xy.utils.Beans.copy;
/**
*
* 服务实现类
*
*
* @author lijin
* @since 2023-02-17
*/
@Slf4j
@Service
@Api(tags = "mqtt认证")
@AllArgsConstructor(onConstructor_ = @Lazy)
public class MqttUserServiceImpl extends ServiceImpl implements MqttUserService {
private DeviceInfoServiceImpl deviceInfoService;
private DeviceSysinfoServiceImpl deviceSysinfoService;
private DevicePartServiceImpl devicePartService;
@PostMapping("obj")
@ApiOperation("对象查询")
@LogOperate(logType = LogEnum.LogType.V2, optType = LogEnum.OptType.V3, logContent = "mqtt认证查询")
public R obj(@RequestBody MqttUserDto.Obj obj) {
MqttUser mqttUser = getOne(new LambdaQueryWrapper().eq(MqttUser::getSn, obj.getSn()));
if (!Emptys.check(mqttUser)) {
return R.ok().setLogMsg("结果=false,sn=" + obj.getSn());
}
DeviceInfo deviceInfo = deviceInfoService.getById(mqttUser.getDeviceId());
DeviceSysinfo deviceSysinfo = deviceSysinfoService.getById(mqttUser.getDeviceId());
List deviceParts = devicePartService.list(new LambdaQueryWrapper().eq(DevicePart::getDeviceId, deviceInfo.getDeviceId()));
Map map = SysDictUtils.get(EnumEnvParams.Code.CODE.getCode());
SysDictRedis mqttUrl = map.get(EnumEnvParams.MQTT_URL.getCode());
SysDictRedis serverUrl = map.get(EnumEnvParams.SERVER_URL.getCode());
MqttUserDto.ObjVo objVo = copy(MqttUserDto.ObjVo.class, mqttUser)
.setAlgorithmId(deviceInfo.getAlgorithmId())
.setDeviceType(deviceInfo.getDeviceType())
.setScreenType(deviceSysinfo.getScreenType())
.setDeviceModel(deviceSysinfo.getDeviceModel())
.setDeviceParts(copy(DevicePartDto.Vo.class, deviceParts));
objVo.setServerTime(System.currentTimeMillis());
objVo.setIpAddress(mqttUrl.getValue());
objVo.setServerUrl(serverUrl.getValue());
return R.ok(objVo).setLogMsg("结果=true,sn=" + obj.getSn());
}
@PostMapping("save")
@ApiOperation("添加")
public R save(@RequestBody @Validated MqttUserDto.Save save) {
MqttUser saveInfo = copy(MqttUser.class, save);
save(saveInfo);
return R.ok();
}
}