|
@@ -1,29 +1,43 @@
|
|
|
package com.middle.platform.manage.biz.service;
|
|
package com.middle.platform.manage.biz.service;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.middle.platform.common.constant.Global;
|
|
import com.middle.platform.common.constant.Global;
|
|
|
import com.middle.platform.common.exception.BusinessException;
|
|
import com.middle.platform.common.exception.BusinessException;
|
|
|
-import com.middle.platform.pagehelper.core.PageRes;
|
|
|
|
|
|
|
+import com.middle.platform.excel.core.util.ExcelUtils;
|
|
|
import com.middle.platform.manage.biz.domain.req.DevicePage;
|
|
import com.middle.platform.manage.biz.domain.req.DevicePage;
|
|
|
import com.middle.platform.manage.biz.domain.req.IotDeviceFlag;
|
|
import com.middle.platform.manage.biz.domain.req.IotDeviceFlag;
|
|
|
import com.middle.platform.manage.biz.domain.req.IotDevicePara;
|
|
import com.middle.platform.manage.biz.domain.req.IotDevicePara;
|
|
|
|
|
+import com.middle.platform.manage.biz.domain.vo.DeviceImportExcelVo;
|
|
|
import com.middle.platform.manage.biz.domain.vo.IotDeviceDetailVo;
|
|
import com.middle.platform.manage.biz.domain.vo.IotDeviceDetailVo;
|
|
|
import com.middle.platform.manage.biz.domain.vo.IotDeviceVo;
|
|
import com.middle.platform.manage.biz.domain.vo.IotDeviceVo;
|
|
|
|
|
+import com.middle.platform.manage.biz.domain.vo.ProductDeviceDto;
|
|
|
import com.middle.platform.manage.biz.entity.IotDevice;
|
|
import com.middle.platform.manage.biz.entity.IotDevice;
|
|
|
|
|
+import com.middle.platform.manage.biz.entity.IotProduct;
|
|
|
import com.middle.platform.manage.biz.mapper.IotDeviceMapper;
|
|
import com.middle.platform.manage.biz.mapper.IotDeviceMapper;
|
|
|
|
|
+import com.middle.platform.manage.biz.mapper.IotProductMapper;
|
|
|
|
|
+import com.middle.platform.pagehelper.core.PageRes;
|
|
|
|
|
+import com.middle.platform.redis.constant.CacheConstant;
|
|
|
|
|
+import com.middle.platform.redis.service.CacheService;
|
|
|
import com.middle.platform.system.api.enums.DictType;
|
|
import com.middle.platform.system.api.enums.DictType;
|
|
|
import com.middle.platform.system.api.feign.DictApi;
|
|
import com.middle.platform.system.api.feign.DictApi;
|
|
|
import com.middle.platform.system.api.feign.UserApi;
|
|
import com.middle.platform.system.api.feign.UserApi;
|
|
|
|
|
+import jakarta.validation.ConstraintViolation;
|
|
|
|
|
+import jakarta.validation.Validation;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
import java.util.Objects;
|
|
|
import java.util.Optional;
|
|
import java.util.Optional;
|
|
|
|
|
+import java.util.Set;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author xucaiqin
|
|
* @author xucaiqin
|
|
@@ -33,6 +47,8 @@ import java.util.Optional;
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
public class IotDeviceService {
|
|
public class IotDeviceService {
|
|
|
private final IotDeviceMapper iotDeviceMapper;
|
|
private final IotDeviceMapper iotDeviceMapper;
|
|
|
|
|
+ private final IotProductMapper iotProductMapper;
|
|
|
|
|
+ private final CacheService cacheService;
|
|
|
private final DictApi dictApi;
|
|
private final DictApi dictApi;
|
|
|
private final UserApi userApi;
|
|
private final UserApi userApi;
|
|
|
|
|
|
|
@@ -94,12 +110,15 @@ public class IotDeviceService {
|
|
|
* @return
|
|
* @return
|
|
|
*/
|
|
*/
|
|
|
public Object enable(IotDeviceFlag iotDeviceFlag) {
|
|
public Object enable(IotDeviceFlag iotDeviceFlag) {
|
|
|
- IotDevice iotDevice = iotDeviceMapper.selectById(iotDeviceFlag.getId());
|
|
|
|
|
- if (Objects.isNull(iotDevice)) {
|
|
|
|
|
|
|
+ ProductDeviceDto productDeviceDto = iotDeviceMapper.query(iotDeviceFlag.getId());
|
|
|
|
|
+ if (Objects.isNull(productDeviceDto)) {
|
|
|
throw new BusinessException("设备不存在");
|
|
throw new BusinessException("设备不存在");
|
|
|
}
|
|
}
|
|
|
|
|
+ IotDevice iotDevice = new IotDevice();
|
|
|
|
|
+ iotDevice.setId(iotDeviceFlag.getId());
|
|
|
iotDevice.setEnableFlag(iotDeviceFlag.getStatus());
|
|
iotDevice.setEnableFlag(iotDeviceFlag.getStatus());
|
|
|
iotDeviceMapper.updateById(iotDevice);
|
|
iotDeviceMapper.updateById(iotDevice);
|
|
|
|
|
+ cacheService.delKey(String.format(CacheConstant.PRODUCT_CACHE, productDeviceDto.getCode(), productDeviceDto.getSn()));
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -134,4 +153,54 @@ public class IotDeviceService {
|
|
|
public Object count(Long productId) {
|
|
public Object count(Long productId) {
|
|
|
return iotDeviceMapper.count(productId);
|
|
return iotDeviceMapper.count(productId);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 导入excel数据
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param file
|
|
|
|
|
+ * @return
|
|
|
|
|
+ * @throws IOException
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public String importFile(MultipartFile file) throws IOException {
|
|
|
|
|
+ List<DeviceImportExcelVo> list = ExcelUtils.read(file, DeviceImportExcelVo.class);
|
|
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
|
|
+ return "导入0条";
|
|
|
|
|
+ }
|
|
|
|
|
+ //数据字段校验
|
|
|
|
|
+ for (DeviceImportExcelVo deviceImportExcelVo : list) {
|
|
|
|
|
+ Set<ConstraintViolation<DeviceImportExcelVo>> validate = Validation.buildDefaultValidatorFactory().getValidator().validate(deviceImportExcelVo);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(validate)) {
|
|
|
|
|
+ for (ConstraintViolation<DeviceImportExcelVo> next : validate) {
|
|
|
|
|
+ throw new BusinessException(deviceImportExcelVo.getSn() + ":" + next.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //产品编码转换
|
|
|
|
|
+ for (DeviceImportExcelVo deviceImportExcelVo : list) {
|
|
|
|
|
+ IotProduct iotProduct = iotProductMapper.selectOne(new LambdaQueryWrapper<IotProduct>()
|
|
|
|
|
+ .eq(IotProduct::getCode, deviceImportExcelVo.getCode())
|
|
|
|
|
+ .eq(IotProduct::getDelFlag, Global.UN_DEL).last("limit 1"));
|
|
|
|
|
+ if (Objects.isNull(iotProduct)) {
|
|
|
|
|
+ throw new BusinessException(deviceImportExcelVo.getCode() + "产品不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ deviceImportExcelVo.setProductId(iotProduct.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ //入库
|
|
|
|
|
+ IotDevice iotDevice;
|
|
|
|
|
+ for (DeviceImportExcelVo deviceImportExcelVo : list) {
|
|
|
|
|
+ iotDevice = new IotDevice();
|
|
|
|
|
+ iotDevice.setProductId(deviceImportExcelVo.getProductId());
|
|
|
|
|
+ iotDevice.setName(deviceImportExcelVo.getName());
|
|
|
|
|
+ iotDevice.setSn(deviceImportExcelVo.getSn());
|
|
|
|
|
+ iotDevice.setGuid(IdUtil.fastSimpleUUID());
|
|
|
|
|
+ iotDevice.setSubtitle(deviceImportExcelVo.getSubtitle());
|
|
|
|
|
+ iotDevice.setOnlineTime(null);
|
|
|
|
|
+ iotDevice.setStatus(0);
|
|
|
|
|
+ iotDevice.setEnableFlag(1);
|
|
|
|
|
+ iotDevice.setRemark(deviceImportExcelVo.getRemark());
|
|
|
|
|
+ iotDeviceMapper.insert(iotDevice);
|
|
|
|
|
+ }
|
|
|
|
|
+ return "导入成功";
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|