package com.xy.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xy.collections.list.JArrayList;
import com.xy.collections.list.JList;
import com.xy.collections.map.JMap;
import com.xy.dto.DeviceQualityDto;
import com.xy.dto.DeviceRegisterDto;
import com.xy.dto.MqttAclDto;
import com.xy.entity.*;
import com.xy.mapper.*;
import com.xy.utils.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
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 java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import static com.xy.utils.PlusBeans.*;
/**
*
* 设备-注册登记 服务实现类
*
*
* @author lijin
* @since 2022-12-29
*/
@Service
@Api(tags = "设备-注册登记")
@AllArgsConstructor
public class DeviceRegisterServiceImpl extends ServiceImpl implements DeviceRegisterService {
private DeviceCreateIdsMapper deviceCreateIdsMapper;
private DeviceInfoMapper deviceInfoMapper;
private DeviceSysinfoMapper deviceSysinfoMapper;
private DeviceStatusMapper deviceStatusMapper;
private DeviceQualityServiceImpl deviceQualityService;
private MqttAclServiceImpl mqttAclService;
@PostMapping("save")
@ApiOperation("添加")
@Transactional(rollbackFor = Exception.class)
public R save(@RequestBody @Validated DeviceRegisterDto.Save save) {
//重复校验
DeviceRegister deviceRegister = copy(DeviceRegister.class, save);
DeviceCreateIds deviceCreateIds = deviceCreateIdsMapper.selectById(deviceRegister.getDeviceId());
if (deviceCreateIds == null) {
return R.fail("设备不存在");
}
if (deviceCreateIds.getBindState()) {
return R.fail("设备已被绑定");
}
deviceRegister.setDeviceType(deviceCreateIds.getDeviceType())
.setCreateUser(AuthorizeUtils.getLoginId(Long.class))
.setCreateTime(LocalDateTime.now());
//操作注册序号
String property = LambdaUtils.getProperty(DeviceRegister::getRegisterNum);
QueryWrapper queryWrapper = new QueryWrapper()
.select(String.format("max(%s) as %s", StringTools.humpToLine(property), property))
.eq(StringTools.humpToLine(LambdaUtils.getProperty(DeviceRegister::getCreateUser)), AuthorizeUtils.getLoginId(Long.class));
DeviceRegister one = getOne(queryWrapper);
Integer registerNum = one == null || one.getRegisterNum() == null ? 0 : one.getRegisterNum();
deviceRegister.setRegisterNum(registerNum + 1);
//修改设备-机器ID号生成为已绑定
deviceCreateIdsMapper.updateById(new DeviceCreateIds().setDeviceId(deviceRegister.getDeviceId()).setBindState(true).setBindTime(deviceRegister.getCreateTime()));
//新增设备-注册登记
save(deviceRegister);
//新增设备信息
deviceInfoMapper.insert(new DeviceInfo()
.setDeviceId(deviceRegister.getDeviceId())
.setDeviceType(deviceRegister.getDeviceType())
.setMercDeviceCode(deviceRegister.getAssetNo())
.setCreateTime(deviceRegister.getCreateTime())
);
//新增设备-系统信息
deviceSysinfoMapper.insert(new DeviceSysinfo()
.setDeviceId(deviceRegister.getDeviceId())
.setDeviceSn(deviceRegister.getDeviceSn())
.setCreateTime(deviceRegister.getCreateTime())
);
//新增设备-状态
deviceStatusMapper.insert(new DeviceStatus().setDeviceId(deviceRegister.getDeviceId()));
//新增设备-质检
deviceQualityService.save(Arrays.asList(new DeviceQualityDto.Save().setDeviceId(deviceRegister.getDeviceId())));
//新增mqtt信息
String deviceId = deviceRegister.getDeviceId().toString();
mqttAclService.save(new MqttAclDto.Save().setClientid(deviceId).setUsername(deviceId));
return R.ok();
}
@PostMapping("page")
@ApiOperation("分页查询")
public R> page(@RequestBody DeviceRegisterDto.Page page) {
PageBean pageBean = page.getPage();
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceRegister.class)
.ge(DeviceRegister::getCreateTime, page.getBeginCreateTime())
.le(DeviceRegister::getCreateTime, page.getEndCreateTime())
.build()
.orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceRegister::getCreateTime);
IPage iPage = page(toIPage(pageBean), lambdaQueryWrapper);
PageBean voPageBean = toPageBean(DeviceRegisterDto.Vo.class, iPage);
List deviceRegisters = voPageBean.getRecords();
if (deviceRegisters.size() > 0) {
JList deviceIds = new JArrayList<>(deviceRegisters).getProperty(DeviceRegisterDto.Vo::getDeviceId);
List vos = deviceQualityService.list(new DeviceQualityDto.SelectList().setDeviceIds(deviceIds)
.setShowStatus(true)
).getData();
JMap map = new JArrayList<>(vos).toMap(DeviceQualityDto.Vo::getDeviceId).cover();
for (DeviceRegisterDto.Vo deviceRegister : deviceRegisters) {
DeviceQualityDto.Vo vo = map.get(deviceRegister.getDeviceId());
if (vo != null) {
deviceRegister.setFactoryState(vo.getFactoryState()).setQualityState(vo.getQualityState());
}
}
}
return R.ok(voPageBean);
}
@PostMapping("obj")
@ApiOperation("对象查询")
public R obj(@RequestBody DeviceRegisterDto.Vo vo) {
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(vo, DeviceRegister.class).build();
List list = list(lambdaQueryWrapper);
if (!Emptys.check(list)) {
return R.ok();
}
DeviceRegisterDto.Vo deviceRegister = copy(DeviceRegisterDto.Vo.class, list.get(0));
DeviceQualityDto.Vo deviceQuality = deviceQualityService.obj(new DeviceQualityDto.Obj()
.setDeviceId(deviceRegister.getDeviceId())
.setShowStatus(true)
).getData();
if (deviceQuality != null) {
deviceRegister.setFactoryState(deviceQuality.getFactoryState()).setQualityState(deviceQuality.getQualityState());
}
return R.ok(deviceRegister);
}
@PostMapping("list")
@ApiOperation("集合查询")
public R> list(@RequestBody DeviceRegisterDto.SelectList selectList) {
LambdaQueryWrapper lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, DeviceRegister.class)
.in(DeviceRegister::getDeviceId, selectList.getDeviceIds())
.in(DeviceRegister::getDeviceSn, selectList.getDeviceSns())
.in(DeviceRegister::getDeviceType, selectList.getDeviceTypes())
.in(DeviceRegister::getDevicePc, selectList.getDevicePcs())
.in(DeviceRegister::getAssetNo, selectList.getAssetNos())
.build();
List list = list(lambdaQueryWrapper);
return R.ok(copy(DeviceRegisterDto.Vo.class, list));
}
}