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)); } }