diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/DeviceAttributeTypeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/DeviceAttributeTypeController.java index ef1ebf44f..df3dfdc1d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/DeviceAttributeTypeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/DeviceAttributeTypeController.java @@ -30,6 +30,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import cn.iocoder.yudao.module.iot.controller.admin.deviceattributetype.vo.*; import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO; import cn.iocoder.yudao.module.iot.service.deviceattributetype.DeviceAttributeTypeService; +import org.springframework.web.multipart.MultipartFile; @Tag(name = "管理后台 - 采集点分类") @RestController @@ -101,6 +102,34 @@ public class DeviceAttributeTypeController { } + @GetMapping("/get-import-template") + @Operation(summary = "获得采集点分类导入模板") + @PreAuthorize("@ss.hasPermission('iot:device-attribute-type:create')") + public void getImportTemplate(HttpServletResponse response) throws IOException { + List list = Collections.singletonList( + DeviceAttributeTypeImportExcelVO.builder() + .code("temperature") + .name("温度") + .sort(1) + .remark("温度类采集点") + .build() + ); + ExcelUtils.write(response, "采集点分类导入模板.xls", "采集点分类列表", + DeviceAttributeTypeImportExcelVO.class, list); + } + + @PostMapping("/import") + @Operation(summary = "导入采集点分类") + @PreAuthorize("@ss.hasPermission('iot:device-attribute-type:create')") + public CommonResult importExcel( + @RequestParam("file") MultipartFile file, + @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) + throws Exception { + List list = ExcelUtils.read(file, DeviceAttributeTypeImportExcelVO.class); + deviceAttributeTypeService.importDeviceAttributeTypeList(list, updateSupport); + return success("导入成功"); + } + @GetMapping("/list") @Operation(summary = "获得采集点分类列表") public CommonResult> getDeviceModelList() { @@ -109,4 +138,4 @@ public class DeviceAttributeTypeController { } -} \ No newline at end of file +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/vo/DeviceAttributeTypeImportExcelVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/vo/DeviceAttributeTypeImportExcelVO.java new file mode 100644 index 000000000..5120333aa --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/deviceattributetype/vo/DeviceAttributeTypeImportExcelVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.iot.controller.admin.deviceattributetype.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +/** + * 采集点分类 Excel 导入 VO + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) +public class DeviceAttributeTypeImportExcelVO { + + @ExcelProperty("编码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("显示顺序") + private Integer sort; + + @ExcelProperty("备注") + private String remark; + +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeService.java index b28e978d4..d8a093928 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeService.java @@ -59,4 +59,12 @@ public interface DeviceAttributeTypeService { * @return 采集点分类列表 */ List getDeviceAttributeTypeList(); -} \ No newline at end of file + + /** + * 导入采集点分类 + * + * @param list 导入列表 + * @param updateSupport 是否更新已存在数据 + */ + void importDeviceAttributeTypeList(List list, Boolean updateSupport); +} diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java index d130f345f..74d7783f2 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/deviceattributetype/DeviceAttributeTypeServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.iot.service.deviceattributetype; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO; import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO; import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper; @@ -7,6 +8,7 @@ import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAtt import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -137,4 +139,41 @@ public class DeviceAttributeTypeServiceImpl implements DeviceAttributeTypeServic return deviceAttributeTypeMapper.selectList(); } -} \ No newline at end of file + @Override + @Transactional(rollbackFor = Exception.class) + public void importDeviceAttributeTypeList(List list, Boolean updateSupport) { + if (CollUtil.isEmpty(list)) { + throw exception(DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS); + } + + Set importCodes = new HashSet<>(); + for (DeviceAttributeTypeImportExcelVO item : list) { + if (StringUtils.isBlank(item.getCode()) || StringUtils.isBlank(item.getName())) { + throw exception(DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS); + } + + String code = item.getCode().trim(); + if (!importCodes.add(code)) { + throw exception(DEVICE_CODE_EXISTS); + } + + DeviceAttributeTypeDO exist = deviceAttributeTypeMapper.selectOne( + Wrappers.lambdaQuery().eq(DeviceAttributeTypeDO::getCode, code)); + + DeviceAttributeTypeDO entity = BeanUtils.toBean(item, DeviceAttributeTypeDO.class); + entity.setCode(code); + entity.setName(item.getName().trim()); + entity.setSort(item.getSort() == null ? 0 : item.getSort()); + + if (exist == null) { + deviceAttributeTypeMapper.insert(entity); + } else if (Boolean.TRUE.equals(updateSupport)) { + entity.setId(exist.getId()); + deviceAttributeTypeMapper.updateById(entity); + } else { + throw exception(DEVICE_CODE_EXISTS); + } + } + } + +}