liriming
2024-08-26 aecc4908e1f2861d2dab1929a88f9053238b2dd2
kio opcda opcua代码升级
已添加4个文件
已修改26个文件
1604 ■■■■■ 文件已修改
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/collector/KingIOCollector.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioDeviceController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/dao/ChannelKioDeviceDao.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/dao/ChannelKioTagDao.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/ChannelKioDeviceService.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/ChannelKioTagService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/impl/ChannelKioDeviceServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/impl/ChannelKioTagServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioDevicePageReqVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioDeviceRespVO.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioTagPageReqVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioTagRespVO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/ChannelOPCDADeviceController.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/ChannelOPCDATagController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/dao/ChannelOPCDADeviceDao.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/dao/ChannelOPCDATagDao.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/ChannelOPCDADeviceService.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/ChannelOPCDATagService.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/impl/ChannelOPCDADeviceServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/impl/ChannelOPCDATagServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUADeviceController.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/dao/ChannelOPCUADeviceDao.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/dao/ChannelOPCUATagDao.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/ChannelOPCUADeviceService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/ChannelOPCUATagService.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/impl/ChannelOPCUADeviceServiceImpl.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/impl/ChannelOPCUATagServiceImpl.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/tag/controller/TagController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/collector/KingIOCollector.java
@@ -1,14 +1,14 @@
package com.iailab.module.data.channel.kio.collector;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.service.ChannelKioDeviceService;
import com.iailab.module.data.common.enums.DataSourceType;
import com.iailab.module.data.common.utils.TagUtils;
import com.iailab.module.data.channel.kio.dto.ChannelKioDeviceDTO;
import com.iailab.module.data.channel.kio.service.ChannelKioDeviceService;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
@@ -31,15 +31,15 @@
    private Map<String, KingIOClient> clientMap = new ConcurrentHashMap<>();
    private Map<String, ChannelKioDeviceDTO> deviceMap = new HashMap<>();
    private Map<String, ChannelKioDeviceEntity> deviceMap = new HashMap<>();
    public synchronized KingIOClient getClient(String sourceId) throws Exception {
        if (!clientMap.containsKey(sourceId)) {
            ChannelKioDeviceDTO deviceDto = channelKioDeviceService.get(sourceId);
            deviceMap.put(sourceId, deviceDto);
            KingIOClient kingIOClient = new KingIOClient(deviceDto.getInstanceName());
            ChannelKioDeviceEntity deviceEntity = channelKioDeviceService.info(sourceId);
            deviceMap.put(sourceId, deviceEntity);
            KingIOClient kingIOClient = new KingIOClient(deviceEntity.getInstanceName());
            clientMap.put(sourceId, kingIOClient);
            if (!kingIOClient.login(deviceDto.getAddress(), deviceDto.getPort(), deviceDto.getUsername(), deviceDto.getPassword())) {
            if (!kingIOClient.login(deviceEntity.getAddress(), deviceEntity.getPort(), deviceEntity.getUsername(), deviceEntity.getPassword())) {
                throw new Exception("登录异常");
            }
        }
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioDeviceController.java
@@ -1,29 +1,28 @@
package com.iailab.module.data.channel.kio.controller.admin;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.util.validation.ValidationUtils;
import com.iailab.framework.common.validation.group.AddGroup;
import com.iailab.framework.common.validation.group.DefaultGroup;
import com.iailab.module.data.channel.kio.service.ChannelKioDeviceService;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.kio.dto.ChannelKioDeviceDTO;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.service.ChannelKioDeviceService;
import com.iailab.module.data.channel.kio.vo.KioDevicePageReqVO;
import com.iailab.module.data.channel.kio.vo.KioDeviceRespVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月04日
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/data/channel/kio/device")
@@ -34,53 +33,37 @@
    private ChannelKioDeviceService channelKioDeviceService;
    @GetMapping("page")
    @Operation(summary = "分页")
    @Parameters({
            @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) ,
            @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) ,
            @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") ,
            @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)")
    })
    public CommonResult<PageData<ChannelKioDeviceDTO>> list(@RequestParam Map<String, Object> params) {
        PageData<ChannelKioDeviceDTO> page = channelKioDeviceService.page(params);
        return success(page);
    public CommonResult<PageResult<KioDeviceRespVO>> list(@Valid KioDevicePageReqVO reqVO) {
        PageResult<ChannelKioDeviceEntity> page = channelKioDeviceService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, KioDeviceRespVO.class));
    }
    @GetMapping("{id}")
    @GetMapping("/info/{id}")
    @Operation(summary = "信息")
    public CommonResult<ChannelKioDeviceDTO> get(@PathVariable("id") String id) {
        ChannelKioDeviceDTO data = channelKioDeviceService.get(id);
        return success(data);
    public CommonResult<ChannelKioDeviceEntity> info(@PathVariable("id") String id) {
        ChannelKioDeviceEntity info = channelKioDeviceService.info(id);
        return success(info);
    }
    @PostMapping
    @Operation(summary = "保存")
    public CommonResult save(@RequestBody ChannelKioDeviceDTO dto) {
        //效验数据
        ValidationUtils.validate(dto, AddGroup.class, DefaultGroup.class);
    @PostMapping("/add")
    public CommonResult<Boolean> add(@RequestBody ChannelKioDeviceEntity channelKioDeviceEntity) {
        String id = UUID.randomUUID().toString();
        dto.setId(id);
        channelKioDeviceService.save(dto);
        return new CommonResult();
        channelKioDeviceEntity.setId(id);
        channelKioDeviceEntity.setCreateTime(new Date());
        channelKioDeviceService.add(channelKioDeviceEntity);
        return success(true);
    }
    /**
     * 修改kio配置
     *
     */
    @PutMapping
    @Operation(summary = "修改")
    public CommonResult update(@RequestBody ChannelKioDeviceDTO dto) {
        //效验数据
        ValidationUtils.validate(dto, AddGroup.class, DefaultGroup.class);
        channelKioDeviceService.update(dto);
        return new CommonResult();
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelKioDeviceEntity channelKioDeviceEntity) {
        channelKioDeviceEntity.setUpdateTime(new Date());
        channelKioDeviceService.update(channelKioDeviceEntity);
        return success(true);
    }
    @DeleteMapping
    @Operation(summary = "删除")
    public CommonResult delete(@RequestBody String[] ids){
        channelKioDeviceService.delete(ids);
        return new CommonResult();
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelKioDeviceService.delete(id);
        return success(true);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/controller/admin/ChannelKioTagController.java
@@ -1,27 +1,26 @@
package com.iailab.module.data.channel.kio.controller.admin;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.util.validation.ValidationUtils;
import com.iailab.framework.common.validation.group.AddGroup;
import com.iailab.framework.common.validation.group.DefaultGroup;
import com.iailab.module.data.channel.kio.dto.ChannelKioTagDTO;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.channel.kio.service.ChannelKioTagService;
import com.iailab.module.data.channel.kio.vo.KioTagPageReqVO;
import com.iailab.module.data.channel.kio.vo.KioTagRespVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * 操作opcua tag配置
 *
 * @author DongYukun
 * @createTime 2023年05月6日 17:44:00
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/data/channel/kio/tag")
@@ -33,50 +32,38 @@
     * 分页查询tag
     * */
    @GetMapping("page")
    @Operation(summary = "分页")
    @Parameters({
            @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) ,
            @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) ,
            @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") ,
            @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)")
    })
    public CommonResult<PageData<ChannelKioTagDTO>> page(@RequestParam Map<String, Object> params){
        PageData<ChannelKioTagDTO> page = channelKioTagService.page(params);
        return  new CommonResult<PageData<ChannelKioTagDTO>>().setData(page);
    public CommonResult<PageResult<KioTagRespVO>> page(@Valid KioTagPageReqVO reqVO){
        PageResult<ChannelKioTagEntity> page = channelKioTagService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, KioTagRespVO.class));
    }
    @GetMapping("{id}")
    @GetMapping("/info/{id}")
    @Operation(summary = "信息")
    public CommonResult<ChannelKioTagDTO> get(@PathVariable("id") String id){
        ChannelKioTagDTO data= channelKioTagService.get(id);
        return new CommonResult<ChannelKioTagDTO>().setData(data);
    public CommonResult<ChannelKioTagEntity> info(@PathVariable("id") String id) {
        ChannelKioTagEntity info = channelKioTagService.info(id);
        return success(info);
    }
    @PostMapping
    @Operation(summary = "保存")
    public CommonResult save(@RequestBody ChannelKioTagDTO entity){
        entity.setId(UUID.randomUUID().toString());
        channelKioTagService.save(entity);
        return new CommonResult();
    @PostMapping("/add")
    public CommonResult<Boolean> add(@RequestBody ChannelKioTagEntity channelKioTagEntity) {
        String id = UUID.randomUUID().toString();
        channelKioTagEntity.setId(id);
        channelKioTagEntity.setCreateTime(new Date());
        channelKioTagService.add(channelKioTagEntity);
        return success(true);
    }
    /**
     * 修改tag
     */
    @PutMapping
    @Operation(summary = "修改")
    public CommonResult update(@RequestBody ChannelKioTagDTO dto) {
        //效验数据
        ValidationUtils.validate(dto, AddGroup.class, DefaultGroup.class);
        channelKioTagService.update(dto);
        return new CommonResult();
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelKioTagEntity channelKioTagEntity) {
        channelKioTagEntity.setUpdateTime(new Date());
        channelKioTagService.update(channelKioTagEntity);
        return success(true);
    }
    @DeleteMapping
    @Operation(summary = "删除")
    public CommonResult tagDelete(@RequestBody String[] ids) {
        channelKioTagService.delete(ids);
        return new CommonResult();
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelKioTagService.delete(id);
        return success(true);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/dao/ChannelKioDeviceDao.java
@@ -1,16 +1,25 @@
package com.iailab.module.data.channel.kio.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.vo.KioDevicePageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月04日
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelKioDeviceDao extends BaseDao<ChannelKioDeviceEntity> {
public interface ChannelKioDeviceDao extends BaseMapperX<ChannelKioDeviceEntity> {
    default PageResult<ChannelKioDeviceEntity> selectPage(KioDevicePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelKioDeviceEntity>()
                .likeIfPresent(ChannelKioDeviceEntity::getInstanceName, reqVO.getInstanceName())
                .orderByDesc(ChannelKioDeviceEntity::getCreateTime));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/dao/ChannelKioTagDao.java
@@ -1,16 +1,28 @@
package com.iailab.module.data.channel.kio.dao;
import com.iailab.framework.common.dao.BaseDao;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.channel.kio.vo.KioDevicePageReqVO;
import com.iailab.module.data.channel.kio.vo.KioTagPageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月05日
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelKioTagDao extends BaseDao<ChannelKioTagEntity> {
public interface ChannelKioTagDao extends BaseMapperX<ChannelKioTagEntity> {
    default PageResult<ChannelKioTagEntity> selectPage(KioTagPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelKioTagEntity>()
                .likeIfPresent(ChannelKioTagEntity::getTagName, reqVO.getTagName())
                .likeIfPresent(ChannelKioTagEntity::getDevice, reqVO.getDevice())
                .orderByDesc(ChannelKioTagEntity::getCreateTime));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/ChannelKioDeviceService.java
@@ -1,29 +1,30 @@
package com.iailab.module.data.channel.kio.service;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.service.BaseService;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.kio.dto.ChannelKioDeviceDTO;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.vo.KioDevicePageReqVO;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月04日
 * @createTime 2024年08月26日
 */
public interface ChannelKioDeviceService extends BaseService<ChannelKioDeviceEntity> {
public interface ChannelKioDeviceService{
    PageData<ChannelKioDeviceDTO> page(Map<String, Object> params);
    PageResult<ChannelKioDeviceEntity> queryPage(KioDevicePageReqVO reqVO);
    List<ChannelKioDeviceDTO> list(Map<String, Object> params);
    ChannelKioDeviceEntity info(String id);
    ChannelKioDeviceDTO get(String id);
    void add(ChannelKioDeviceEntity channelKioDeviceEntity);
    void save(ChannelKioDeviceDTO dto);
    void update(ChannelKioDeviceEntity channelKioDeviceEntity);
    void update(ChannelKioDeviceDTO dto);
    void delete(String id);
    void delete(String[] ids);
    List<ChannelKioDeviceEntity> list(Map<String, Object> params);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/ChannelKioTagService.java
@@ -1,33 +1,31 @@
package com.iailab.module.data.channel.kio.service;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.service.BaseService;
import com.iailab.module.data.channel.kio.dto.ChannelKioTagDTO;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.channel.kio.vo.KioTagPageReqVO;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月05日
 * @createTime 2024年08月26日
 */
public interface ChannelKioTagService extends BaseService<ChannelKioTagEntity> {
public interface ChannelKioTagService {
    PageData<ChannelKioTagDTO> page(Map<String, Object> params);
    PageResult<ChannelKioTagEntity> queryPage(KioTagPageReqVO reqVO);
    ChannelKioTagDTO get(String id);
    ChannelKioTagEntity info(String id);
    void save(ChannelKioTagDTO dto);
    void add(ChannelKioTagEntity channelKioTagEntity);
    void update(ChannelKioTagDTO dto);
    void update(ChannelKioTagEntity channelKioTagEntity);
    void delete(String[] ids);
    List<ChannelKioTagDTO> getByDevice(String instanceName);
    void delete(String id);
    ChannelKioTagDTO getByTagName(String tagName);
    List<ChannelKioTagEntity> getByDevice(String device);
    ChannelKioTagEntity getByTagName(String tagName);
    void deleteByDeviceName(String name);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/impl/ChannelKioDeviceServiceImpl.java
@@ -1,83 +1,69 @@
package com.iailab.module.data.channel.kio.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.kio.service.ChannelKioTagService;
import com.iailab.module.data.channel.kio.dao.ChannelKioDeviceDao;
import com.iailab.module.data.channel.kio.dto.ChannelKioDeviceDTO;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.service.ChannelKioDeviceService;
import com.iailab.module.data.channel.kio.service.ChannelKioTagService;
import org.apache.commons.lang3.StringUtils;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.iailab.module.data.channel.kio.vo.KioDevicePageReqVO;
import java.util.Arrays;
import javax.annotation.Resource;
import com.iailab.module.data.channel.modbus.entity.ChannelModBusDeviceEntity;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月04日
 * @createTime 2024年08月26日
 */
@Service
public class ChannelKioDeviceServiceImpl extends BaseServiceImpl<ChannelKioDeviceDao, ChannelKioDeviceEntity> implements ChannelKioDeviceService {
public class ChannelKioDeviceServiceImpl extends ServiceImpl<ChannelKioDeviceDao, ChannelKioDeviceEntity> implements ChannelKioDeviceService {
    @Resource
    private ChannelKioDeviceDao channelKioDeviceDao;
    @Resource
    ChannelKioTagService channelKioTagService;
    @Override
    public PageData<ChannelKioDeviceDTO> page(Map<String, Object> params) {
        IPage<ChannelKioDeviceEntity> page = baseDao.selectPage(
                getPage(params, Constant.CREATE_TIME, false),
                getWrapper(params)
        );
        return getPageData(page, ChannelKioDeviceDTO.class);
    public PageResult<ChannelKioDeviceEntity> queryPage(KioDevicePageReqVO reqVO) {
        return channelKioDeviceDao.selectPage(reqVO);
    }
    @Override
    public List<ChannelKioDeviceDTO> list(Map<String, Object> params) {
        List<ChannelKioDeviceEntity> list = baseDao.selectList(getWrapper(params));
        return ConvertUtils.sourceToTarget(list, ChannelKioDeviceDTO.class);
    }
    private QueryWrapper<ChannelKioDeviceEntity> getWrapper(Map<String, Object> params){
        String instanceName = (String)params.get("instanceName");
        QueryWrapper<ChannelKioDeviceEntity> wrapper = new QueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(instanceName), "instance_name", instanceName);
        return wrapper;
    public ChannelKioDeviceEntity info(String id) {
        return channelKioDeviceDao.selectById(id);
    }
    @Override
    public ChannelKioDeviceDTO get(String id) {
        ChannelKioDeviceEntity entity = baseDao.selectById(id);
        return ConvertUtils.sourceToTarget(entity, ChannelKioDeviceDTO.class);
    public void add(ChannelKioDeviceEntity channelKioDeviceEntity) {
        channelKioDeviceDao.insert(channelKioDeviceEntity);
    }
    @Override
    public void save(ChannelKioDeviceDTO dto) {
        ChannelKioDeviceEntity entity = ConvertUtils.sourceToTarget(dto, ChannelKioDeviceEntity.class);
        insert(entity);
    public void update(ChannelKioDeviceEntity channelKioDeviceEntity) {
        channelKioDeviceDao.updateById(channelKioDeviceEntity);
    }
    @Override
    public void update(ChannelKioDeviceDTO dto) {
        ChannelKioDeviceEntity entity = ConvertUtils.sourceToTarget(dto, ChannelKioDeviceEntity.class);
        updateById(entity);
    public void delete(String id) {
        //先删除device下的tag
        channelKioTagService.deleteByDeviceName(info(id).getInstanceName());
        channelKioDeviceDao.deleteById(id);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(String[] ids) {
        Arrays.asList(ids).forEach(id -> {
            channelKioTagService.deleteByDeviceName(get(id).getInstanceName());
        });
        baseDao.deleteBatchIds(Arrays.asList(ids));
    public List<ChannelKioDeviceEntity> list(Map<String, Object> params) {
        return channelKioDeviceDao.selectList(new QueryWrapper<ChannelKioDeviceEntity>().orderByAsc("instance_name"));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/service/impl/ChannelKioTagServiceImpl.java
@@ -1,106 +1,74 @@
package com.iailab.module.data.channel.kio.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iailab.framework.common.constant.Constant;
import com.iailab.framework.common.page.PageData;
import com.iailab.framework.common.service.impl.BaseServiceImpl;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.kio.dao.ChannelKioTagDao;
import com.iailab.module.data.channel.kio.dto.ChannelKioTagDTO;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.channel.kio.service.ChannelKioTagService;
import com.iailab.module.data.channel.kio.vo.KioTagPageReqVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2024年06月05日
 * @createTime 2024年08月26日
 */
@Slf4j
@Service
public class ChannelKioTagServiceImpl extends BaseServiceImpl<ChannelKioTagDao, ChannelKioTagEntity> implements ChannelKioTagService {
public class ChannelKioTagServiceImpl extends ServiceImpl<ChannelKioTagDao, ChannelKioTagEntity> implements ChannelKioTagService {
    @Resource
    private ChannelKioTagDao channelKioTagDao;
    @Value("${iems.upload-dir}")
    private String uploadDir;
    @Override
    public PageData<ChannelKioTagDTO> page(Map<String, Object> params) {
        IPage<ChannelKioTagEntity> page = baseDao.selectPage(
                getPage(params, Constant.CREATE_TIME, false),
                getWrapper(params)
        );
        return getPageData(page, ChannelKioTagDTO.class);
    public PageResult<ChannelKioTagEntity> queryPage(KioTagPageReqVO reqVO) {
        return channelKioTagDao.selectPage(reqVO);
    }
    @Override
    public ChannelKioTagDTO get(String id) {
        ChannelKioTagEntity entity = baseDao.selectById(id);
        return ConvertUtils.sourceToTarget(entity, ChannelKioTagDTO.class);
    public ChannelKioTagEntity info(String id) {
        return channelKioTagDao.selectById(id);
    }
    @Override
    public void save(ChannelKioTagDTO dto) {
        ChannelKioTagEntity entity = ConvertUtils.sourceToTarget(dto, ChannelKioTagEntity.class);
        entity.setCreateTime(new Date());
        entity.setUpdateTime(new Date());
        insert(entity);
    public void add(ChannelKioTagEntity channelKioTagEntity) {
        channelKioTagDao.insert(channelKioTagEntity);
    }
    @Override
    public void update(ChannelKioTagDTO dto) {
        ChannelKioTagEntity entity = ConvertUtils.sourceToTarget(dto, ChannelKioTagEntity.class);
        entity.setUpdateTime(new Date());
        updateById(entity);
    public void update(ChannelKioTagEntity channelKioTagEntity) {
        channelKioTagDao.updateById(channelKioTagEntity);
    }
    @Override
    public void delete(String[] ids) {
        baseDao.deleteBatchIds(Arrays.asList(ids));
    public void delete(String id) {
        channelKioTagDao.deleteById(id);
    }
    @Override
    public List<ChannelKioTagDTO> getByDevice(String device) {
    public List<ChannelKioTagEntity> getByDevice(String device) {
        QueryWrapper<ChannelKioTagEntity> wrapper = new QueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(device), "device", device)
        .orderByAsc("tag_id");
        List<ChannelKioTagEntity> list = baseDao.selectList(wrapper);
        return ConvertUtils.sourceToTarget(list, ChannelKioTagDTO.class);
        wrapper.like("device", device);
        wrapper.orderByAsc("tag_id");
        List<ChannelKioTagEntity> list = channelKioTagDao.selectList(wrapper);
        return list;
    }
    @Override
    public ChannelKioTagDTO getByTagName(String tagName) {
    public ChannelKioTagEntity getByTagName(String tagName) {
        QueryWrapper<ChannelKioTagEntity> wrapper = new QueryWrapper<>();
        wrapper.eq("tag_name", tagName);
        ChannelKioTagEntity entity = baseDao.selectOne(wrapper);
        return ConvertUtils.sourceToTarget(entity, ChannelKioTagDTO.class);
        ChannelKioTagEntity entity = channelKioTagDao.selectOne(wrapper);
        return entity;
    }
    @Override
    public void deleteByDeviceName(String name) {
        baseDao.delete(new QueryWrapper<ChannelKioTagEntity>().eq("device",name));
        channelKioTagDao.delete(new QueryWrapper<ChannelKioTagEntity>().eq("device",name));
    }
    private QueryWrapper<ChannelKioTagEntity> getWrapper(Map<String, Object> params){
        String tagName = (String) params.get("tagName");
        String device = (String) params.get("device");
        QueryWrapper<ChannelKioTagEntity> wrapper = new QueryWrapper<>();
        wrapper.eq(StringUtils.isNotBlank(device), "device", device);
        wrapper.like(StringUtils.isNotBlank(tagName), "tag_name", tagName);
        wrapper.orderByDesc("create_time");
        return wrapper;
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioDevicePageReqVO.java
对比新文件
@@ -0,0 +1,21 @@
package com.iailab.module.data.channel.kio.vo;
import com.iailab.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@Schema(description = "数据平台 - Kio分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class KioDevicePageReqVO extends PageParam {
    private String instanceName;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioDeviceRespVO.java
对比新文件
@@ -0,0 +1,51 @@
package com.iailab.module.data.channel.kio.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@Schema(description = "数据平台 - KioDevice Response VO")
@Data
@ExcelIgnoreUnannotated
public class KioDeviceRespVO {
    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("ID")
    private String id;
    @Schema(description = "实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("实例名称")
    private String instanceName;
    @Schema(description = "IP地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("IP地址")
    private String address;
    @Schema(description = "端口", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("端口")
    private Integer port;
    @Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("用户名")
    private String username;
    @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("密码")
    private String password;
    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("创建时间")
    private Date createTime;
    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("更新时间")
    private Date updateTime;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioTagPageReqVO.java
对比新文件
@@ -0,0 +1,23 @@
package com.iailab.module.data.channel.kio.vo;
import com.iailab.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@Schema(description = "数据平台 - Kio分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class KioTagPageReqVO extends PageParam {
    private String tagName;
    private String device;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/kio/vo/KioTagRespVO.java
对比新文件
@@ -0,0 +1,59 @@
package com.iailab.module.data.channel.kio.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
/**
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@Schema(description = "数据平台 - KioDevice Response VO")
@Data
@ExcelIgnoreUnannotated
public class KioTagRespVO {
    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("ID")
    private String id;
    @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("名称")
    private String tagName;
    @Schema(description = "数据类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("数据类型")
    private String dataType;
    @Schema(description = "顺序号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("顺序号")
    private Integer tagId;
    @Schema(description = "测点描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("测点描述")
    private String tagDesc;
    @Schema(description = "是否可以tag", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("是否可以tag")
    private Boolean enabled;
    @Schema(description = "关联设备", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("关联设备")
    private String device;
    @Schema(description = "采集频率", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("采集频率")
    private Integer samplingRate;
    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("创建时间")
    private Date createTime;
    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
    @ExcelProperty("更新时间")
    private Date updateTime;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/ChannelOPCDADeviceController.java
@@ -1,86 +1,64 @@
package com.iailab.module.data.channel.opcda.controller;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDADeviceEntity;
import com.iailab.module.data.channel.opcda.service.ChannelOPCDADeviceService;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.R;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import com.iailab.module.data.channel.opcda.vo.OpcDaDeviceRespVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * 操作opc ua配置
 *
 * @author DongYukun
 * @createTime 2023年04月26日 10:33:00
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/channel/opcda/device")
@RequestMapping("/data/channel/opcda/device")
public class ChannelOPCDADeviceController {
    @Autowired
    private ChannelOPCDADeviceService channelOPCDADeviceService;
    /**
     * 分页查询opc da 配置
     *
     * @param params
     */
    @GetMapping("/list")
    public R list(@RequestParam Map<String, Object> params) {
        PageUtils page = channelOPCDADeviceService.queryPage(params);
        return R.ok().put("page", page);
    @GetMapping("page")
    public CommonResult<PageResult<OpcDaDeviceRespVO>> list(@Valid OpcDaDevicePageReqVO reqVO) {
        PageResult<ChannelOPCDADeviceEntity> page = channelOPCDADeviceService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, OpcDaDeviceRespVO.class));
    }
    /**
     * 根据id查询opc da配置详情
     *
     * @param id
     */
    @GetMapping("/info/{id}")
    public R info(@PathVariable("id") String id) {
    public CommonResult<ChannelOPCDADeviceEntity> info(@PathVariable("id") String id) {
        ChannelOPCDADeviceEntity info = channelOPCDADeviceService.info(id);
        return R.ok().put("data", info);
        return success(info);
    }
    /**
     * 添加opc ua配置
     *
     * @param channelOPCDADeviceEntity
     */
    @PostMapping("/add")
    public R add(@RequestBody ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
    public CommonResult<Boolean> add(@RequestBody ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
        String id = UUID.randomUUID().toString();
        channelOPCDADeviceEntity.setId(id);
        channelOPCDADeviceEntity.setCreateTime(new Date());
        channelOPCDADeviceService.add(channelOPCDADeviceEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 修改opc ua配置
     *
     * @param channelOPCDADeviceEntity
     */
    @PostMapping("/update")
    public R update(@RequestBody ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
        channelOPCDADeviceEntity.setUpdateTime(new Date());
        channelOPCDADeviceService.update(channelOPCDADeviceEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 删除opc ua配置
     *
     * @param params
     */
    @PostMapping("/delete")
    public R delete(@RequestBody Map<String, Object> params) {
        String id = (String) params.get("id");
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelOPCDADeviceService.delete(id);
        return R.ok();
        return success(true);
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/controller/ChannelOPCDATagController.java
@@ -1,102 +1,78 @@
package com.iailab.module.data.channel.opcda.controller;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDATagEntity;
import com.iailab.module.data.channel.opcda.service.ChannelOPCDATagService;
import com.iailab.module.data.channel.opcda.vo.OpcDaTagPageReqVO;
import com.iailab.module.data.channel.opcda.vo.OpcDaTagRespVO;
import com.iailab.module.data.common.exception.RRException;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.R;
import jodd.util.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import javax.validation.Valid;
import java.util.Date;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * 操作OPCDA tag配置
 *
 * @author DongYukun
 * @createTime 2023年05月6日 17:44:00
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/channel/opcda/tag")
@RequestMapping("/data/channel/opcda/tag")
public class ChannelOPCDATagController {
    @Autowired
    private ChannelOPCDATagService channelOPCDATagService;
    /**
     * 分页查询tag
     *
     * @param params
     */
    @GetMapping("/list")
    public R tagList(@RequestParam Map<String, Object> params){
        PageUtils page = channelOPCDATagService.queryPage(params);
        return R.ok().put("page", page);
    @GetMapping("page")
    public CommonResult<PageResult<OpcDaTagRespVO>> list(@Valid OpcDaTagPageReqVO reqVO) {
        PageResult<ChannelOPCDATagEntity> page = channelOPCDATagService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, OpcDaTagRespVO.class));
    }
    /**
     * 根据id查询tag详情
     *
     * @param id
     */
    @GetMapping("/info/{id}")
    public R tagInfo(@PathVariable("id") String id){
        ChannelOPCDATagEntity info= channelOPCDATagService.info(Base64.decodeToString(id));
        return R.ok().put("data", info);
    public CommonResult<ChannelOPCDATagEntity> info(@PathVariable("id") String id) {
        ChannelOPCDATagEntity info = channelOPCDATagService.info(id);
        return success(info);
    }
    /**
     * 添加tag
     *
     * @param entity
     */
    @PostMapping("/add")
    public R tagAdd(@RequestBody ChannelOPCDATagEntity entity){
        entity.setId(UUID.randomUUID().toString());
        channelOPCDATagService.add(entity);
        return R.ok();
    public CommonResult<Boolean> add(@RequestBody ChannelOPCDATagEntity channelOPCDATagEntity) {
        String id = UUID.randomUUID().toString();
        channelOPCDATagEntity.setId(id);
        channelOPCDATagEntity.setCreateTime(new Date());
        channelOPCDATagService.add(channelOPCDATagEntity);
        return success(true);
    }
    /**
     * 修改tag
     *
     * @param channelOPCDATagEntity
     */
    @PostMapping("/update")
    public R tagUpdate(@RequestBody ChannelOPCDATagEntity channelOPCDATagEntity) {
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelOPCDATagEntity channelOPCDATagEntity) {
        channelOPCDATagEntity.setUpdateTime(new Date());
        channelOPCDATagService.update(channelOPCDATagEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 删除tag
     * @param params
     *
     */
    @PostMapping("/delete")
    public R tagDelete(@RequestBody Map<String, Object> params) {
        String id = (String)params.get("id");
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelOPCDATagService.delete(id);
        return R.ok();
        return success(true);
    }
    /**
     * 导入
     *
     * @param serverId
     * @param file
     * @return
     */
    @PostMapping("/import/{serverId}")
    public R importTag(@PathVariable("serverId") String serverId, @RequestParam("file") MultipartFile file) {
    public CommonResult<String> importTag(@PathVariable("serverId") String serverId, @RequestParam("file") MultipartFile file) {
        try {
            if (file.isEmpty()) {
                throw new RRException("上传文件不能为空");
            }
            channelOPCDATagService.importTag(serverId, file);
        } catch (Exception ex) {
            return R.error(ex.getMessage());
            ex.getMessage();
        }
        return R.ok();
        return success("上传成功");
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/dao/ChannelOPCDADeviceDao.java
@@ -1,18 +1,26 @@
package com.iailab.module.data.channel.opcda.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDADeviceEntity;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2023年04月26日 11:31:00
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelOPCDADeviceDao extends BaseMapper<ChannelOPCDADeviceEntity> {
public interface ChannelOPCDADeviceDao extends BaseMapperX<ChannelOPCDADeviceEntity> {
    default PageResult<ChannelOPCDADeviceEntity> selectPage(OpcDaDevicePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelOPCDADeviceEntity>()
                .likeIfPresent(ChannelOPCDADeviceEntity::getServerName, reqVO.getServerName())
                .orderByDesc(ChannelOPCDADeviceEntity::getCreateTime));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/dao/ChannelOPCDATagDao.java
@@ -1,16 +1,29 @@
package com.iailab.module.data.channel.opcda.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDATagEntity;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDATagEntity;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import com.iailab.module.data.channel.opcda.vo.OpcDaTagPageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月8日 15:01:00
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelOPCDATagDao extends BaseMapper<ChannelOPCDATagEntity> {
public interface ChannelOPCDATagDao extends BaseMapperX<ChannelOPCDATagEntity> {
    default PageResult<ChannelOPCDATagEntity> selectPage(OpcDaTagPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelOPCDATagEntity>()
                .likeIfPresent(ChannelOPCDATagEntity::getTagName, reqVO.getTagName())
                .likeIfPresent(ChannelOPCDATagEntity::getServerId, reqVO.getServerId())
                .orderByDesc(ChannelOPCDATagEntity::getCreateTime));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/ChannelOPCDADeviceService.java
@@ -1,60 +1,30 @@
package com.iailab.module.data.channel.opcda.service;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.opcda.dto.ChannelOPCDADeviceDTO;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDADeviceEntity;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import com.iailab.module.data.common.utils.PageUtils;
import java.util.List;
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
public interface ChannelOPCDADeviceService {
    /**
     * 分页查询设备
     *
     * @param params
     */
    PageUtils queryPage(Map<String, Object> params);
    /**
     * 查询设备详情
     *
     * @param id
     */
    List<ChannelOPCDADeviceDTO> selectAll();
    PageResult<ChannelOPCDADeviceEntity> queryPage(OpcDaDevicePageReqVO reqVO);
    ChannelOPCDADeviceEntity info(String id);
    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<ChannelOPCDADeviceEntity> list(Map<String, Object> params);
    /**
     * 添加设备
     *
     * @param channelOPCDADeviceEntity
     */
    void add(ChannelOPCDADeviceEntity channelOPCDADeviceEntity);
    /**
     * 修改设备
     *
     * @param channelOPCDADeviceEntity
     */
    void update(ChannelOPCDADeviceEntity channelOPCDADeviceEntity);
    /**
     * 删除设备
     *
     * @param id
     */
    void delete(String id);
    /**
     * 查询全部设备
     *
     */
    List<ChannelOPCDADeviceDTO> selectAll();
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/ChannelOPCDATagService.java
@@ -1,7 +1,9 @@
package com.iailab.module.data.channel.opcda.service;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.opcda.dto.ChannelOPCDATagDTO;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDATagEntity;
import com.iailab.module.data.channel.opcda.vo.OpcDaTagPageReqVO;
import com.iailab.module.data.common.utils.PageUtils;
import org.springframework.web.multipart.MultipartFile;
@@ -9,62 +11,29 @@
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
public interface ChannelOPCDATagService {
    /**
     * 分页查询tag
     *
     * @param params
     */
    PageUtils queryPage(Map<String, Object> params);
    /**
     * 查询tag详情
     * @param id
     *
     */
    ChannelOPCDATagEntity info(String id);
    /**
     * 添加tag
     *
     * @param channelOPCDATagEntity
     */
    void add(ChannelOPCDATagEntity channelOPCDATagEntity);
    /**
     * 修改tag
     *
     * @param channelOPCDATagEntity
     */
    void update(ChannelOPCDATagEntity channelOPCDATagEntity);
    /**
     * 删除tag
     * @param id
     *
     */
    void delete(String id);
    List<ChannelOPCDATagEntity> getByserverId(String serverId);
    List<ChannelOPCDATagDTO> selectAll();
    List<ChannelOPCDATagEntity> listByIds(List<String> ids);
    /**
     * 通过serverId删除
     *
     */
    void deleteByServerId(String serverId);
    /**
     * 导入Tag
     *
     * @param serverId
     * @param file
     * @throws Exception
     */
    void importTag(String serverId, MultipartFile file) throws Exception;
    PageResult<ChannelOPCDATagEntity> queryPage(OpcDaTagPageReqVO reqVO);
    ChannelOPCDATagEntity info(String id);
    void add(ChannelOPCDATagEntity channelOPCDATagEntity);
    void update(ChannelOPCDATagEntity channelOPCDATagEntity);
    void delete(String id);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/impl/ChannelOPCDADeviceServiceImpl.java
@@ -4,12 +4,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.channel.opcda.dao.ChannelOPCDADeviceDao;
import com.iailab.module.data.channel.opcda.dto.ChannelOPCDADeviceDTO;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDADeviceEntity;
import com.iailab.module.data.channel.opcda.service.ChannelOPCDADeviceService;
import com.iailab.module.data.channel.opcda.service.ChannelOPCDATagService;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.Query;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,9 +22,9 @@
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
@Service
public class ChannelOPCDADeviceServiceImpl extends ServiceImpl<ChannelOPCDADeviceDao, ChannelOPCDADeviceEntity> implements ChannelOPCDADeviceService {
@@ -31,70 +33,27 @@
    @Autowired
    private ChannelOPCDATagService channelOPCDATagService;
    /**
     * 分页查询opc ua配置
     *
     * @param params
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        String serverName = (String) params.get("serverName");
        IPage<ChannelOPCDADeviceEntity> page = this.page(
                new Query<ChannelOPCDADeviceEntity>().getPage(params),
                new QueryWrapper<ChannelOPCDADeviceEntity>()
                        .like(StringUtils.isNotBlank(serverName), "server_name", serverName)
                        .orderByDesc("create_time")
        );
        return new PageUtils(page);
    @Override
    public PageResult<ChannelOPCDADeviceEntity> queryPage(OpcDaDevicePageReqVO reqVO) {
        return channelOPCDADeviceDao.selectPage(reqVO);
    }
    /**
     * 查询opc ua配置详情
     *
     * @param id
     */
    @Override
    public ChannelOPCDADeviceEntity info(String id) {
        return channelOPCDADeviceDao.selectById(id);
    }
    /**
     * 列表
     *
     * @param params
     * @return
     */
    @Override
    public List<ChannelOPCDADeviceEntity> list(Map<String, Object> params) {
        return channelOPCDADeviceDao.selectList(new QueryWrapper<ChannelOPCDADeviceEntity>().orderByAsc("server_name"));
    }
    /**
     * 添加opc ua配置
     *
     * @param channelOPCDADeviceEntity
     */
    @Override
    public void add(ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
        channelOPCDADeviceDao.insert(channelOPCDADeviceEntity);
    }
    /**
     * 修改opc ua配置
     *
     * @param channelOPCDADeviceEntity
     */
    @Override
    public void update(ChannelOPCDADeviceEntity channelOPCDADeviceEntity) {
        channelOPCDADeviceDao.updateById(channelOPCDADeviceEntity);
    }
    /**
     * 删除opc ua配置
     *
     * @param id
     */
    @Override
    public void delete(String id) {
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcda/service/impl/ChannelOPCDATagServiceImpl.java
@@ -1,17 +1,15 @@
package com.iailab.module.data.channel.opcda.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.channel.opcda.dao.ChannelOPCDATagDao;
import com.iailab.module.data.channel.opcda.dto.ChannelOPCDATagDTO;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDATagEntity;
import com.iailab.module.data.channel.opcda.service.ChannelOPCDATagService;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.Query;
import com.iailab.module.data.channel.opcda.vo.OpcDaTagPageReqVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -27,13 +25,12 @@
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
@Slf4j
@Service
@@ -44,34 +41,46 @@
    @Value("${iems.upload-dir}")
    private String uploadDir;
    /**
     * 分页查询tag
     *
     * @param params
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        String tagName = (String) params.get("tagName");
        String serverId = (String) params.get("serverId");
        IPage<ChannelOPCDATagEntity> page = this.page(
                new Query<ChannelOPCDATagEntity>().getPage(params),
                new QueryWrapper<ChannelOPCDATagEntity>()
                        .like(StringUtils.isNotBlank(tagName), "tag_name", tagName)
                        .eq(StringUtils.isNotBlank(serverId), "server_id", serverId)
                        .orderByDesc("create_time")
        );
        return new PageUtils(page);
    @Override
    public PageResult<ChannelOPCDATagEntity> queryPage(OpcDaTagPageReqVO reqVO) {
        return channelOPCDATagDao.selectPage(reqVO);
    }
    /**
     * 查询tag详情
     *
     * @param id
     */
    @Override
    public ChannelOPCDATagEntity info(String id) {
        return channelOPCDATagDao.selectById(id);
    }
    @Override
    public void add(ChannelOPCDATagEntity channelOPCDATagEntity) {
        channelOPCDATagDao.insert(channelOPCDATagEntity);
    }
    @Override
    public void update(ChannelOPCDATagEntity channelOPCDATagEntity) {
        channelOPCDATagDao.updateById(channelOPCDATagEntity);
    }
    @Override
    public void delete(String id) {
        channelOPCDATagDao.deleteById(id);
    }
    @Override
    public List<ChannelOPCDATagDTO> selectAll() {
        List<ChannelOPCDATagEntity> entityList = channelOPCDATagDao.selectList(null);
        return ConvertUtils.sourceToTarget(entityList, ChannelOPCDATagDTO.class);
    }
    @Override
    public List<ChannelOPCDATagEntity> listByIds(List<String> ids) {
        return channelOPCDATagDao.selectList(new QueryWrapper<ChannelOPCDATagEntity>().in("id", ids));
    }
    @Override
    public void deleteByServerId(String serverId) {
        channelOPCDATagDao.delete(new QueryWrapper<ChannelOPCDATagEntity>().eq("server_id",serverId));
    }
    @Override
@@ -82,62 +91,6 @@
    }
    /**
     * 添加tag
     *
     * @param channelOPCDATagEntity
     */
    @Override
    public void add(ChannelOPCDATagEntity channelOPCDATagEntity) {
        channelOPCDATagDao.insert(channelOPCDATagEntity);
    }
    /**
     * 修改tag
     *
     * @param channelOPCDATagEntity
     */
    @Override
    public void update(ChannelOPCDATagEntity channelOPCDATagEntity) {
        channelOPCDATagDao.updateById(channelOPCDATagEntity);
    }
    /**
     * 删除tag
     *
     * @param id
     */
    @Override
    public void delete(String id) {
        channelOPCDATagDao.deleteById(id);
    }
    @Override
    public List<ChannelOPCDATagDTO> selectAll() {
        List<ChannelOPCDATagEntity> entityList = baseMapper.selectList(
                null
        );
        return ConvertUtils.sourceToTarget(entityList, ChannelOPCDATagDTO.class);
    }
    @Override
    public List<ChannelOPCDATagEntity> listByIds(List<String> ids) {
        return baseMapper.selectList(new QueryWrapper<ChannelOPCDATagEntity>().in("id", ids));
    }
    @Override
    public void deleteByServerId(String serverId) {
        baseMapper.delete(new QueryWrapper<ChannelOPCDATagEntity>().eq("server_id",serverId));
    }
    /**
     * 导入Tag
     *
     * @param serverId
     * @param file
     * @throws Exception
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importTag(String serverId, MultipartFile file) throws Exception {
@@ -173,7 +126,7 @@
            //getBaseMapper().insertList(dangerList);
            dangerList.forEach(item -> {
                try {
                    getBaseMapper().insert(item);
                    channelOPCDATagDao.insert(item);
                } catch (Exception ex) {
                    log.warn("插入异常:" + item.getTagName());
                }
@@ -184,4 +137,5 @@
            throw ex;
        }
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUADeviceController.java
@@ -1,23 +1,25 @@
package com.iailab.module.data.channel.opcua.controller.admin;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.R;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.service.ChannelOPCUADeviceService;
import javax.annotation.Resource;
import com.iailab.module.data.channel.opcua.vo.OpcUaDevicePageReqVO;
import com.iailab.module.data.channel.opcua.vo.OpcUaDeviceRespVO;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * 操作opc ua配置
 *
 * @author DongYukun
 * @createTime 2023年04月26日 10:33:00
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/data/channel/opcua/device")
@@ -25,84 +27,57 @@
    @Resource
    private ChannelOPCUADeviceService channelOPCUADeviceService;
    /**
     * 分页查询opc ua 配置
     *
     * @param params
     */
    @GetMapping("/list")
    public R list(@RequestParam Map<String, Object> params) {
        PageUtils page = channelOPCUADeviceService.queryPage(params);
        return R.ok().put("page", page);
    @GetMapping("page")
    public CommonResult<PageResult<OpcUaDeviceRespVO>> list(@Valid OpcUaDevicePageReqVO reqVO) {
        PageResult<ChannelOPCUADeviceEntity> page = channelOPCUADeviceService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, OpcUaDeviceRespVO.class));
    }
    /**
     * 根据id查询opc ua配置详情
     *
     * @param id
     */
    @GetMapping("/info/{id}")
    public R info(@PathVariable("id") String id) {
    public CommonResult<ChannelOPCUADeviceEntity> info(@PathVariable("id") String id) {
        ChannelOPCUADeviceEntity info = channelOPCUADeviceService.info(id);
        return R.ok().put("data", info);
        return success(info);
    }
    /**
     * 添加opc ua配置
     *
     * @param channelOPCUADeviceEntity
     */
    @PostMapping("/add")
    public R add(@RequestBody ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
    public CommonResult<Boolean> add(@RequestBody ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
        String id = UUID.randomUUID().toString();
        channelOPCUADeviceEntity.setId(id);
        channelOPCUADeviceService.add(channelOPCUADeviceEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 修改opc ua配置
     *
     * @param channelOPCUADeviceEntity
     */
    @PostMapping("/update")
    public R update(@RequestBody ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
        channelOPCUADeviceService.update(channelOPCUADeviceEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 删除opc ua配置
     *
     * @param params
     */
    @PostMapping("/delete")
    public R delete(@RequestBody Map<String, Object> params) {
        String id = (String) params.get("id");
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelOPCUADeviceService.delete(id);
        return R.ok();
        return success(true);
    }
    /**
     * 上传安全证书
     *
     * @param file
     */
    @PostMapping("/upload")
    public R uploadFile(@RequestParam("file") MultipartFile file) {
        String fileName = file.getOriginalFilename();
        String filePath = "";
        try {
            File dir = new File(filePath);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            File saveFile = new File(filePath + fileName);
            file.transferTo(saveFile);
            return R.ok().put("data",saveFile.getAbsolutePath());
        } catch (IOException e) {
            e.printStackTrace();
            return R.error();
        }
    }
//    @PostMapping("/upload")
//    public R uploadFile(@RequestParam("file") MultipartFile file) {
//        String fileName = file.getOriginalFilename();
//        String filePath = "";
//        try {
//            File dir = new File(filePath);
//            if (!dir.exists()) {
//                dir.mkdirs();
//            }
//            File saveFile = new File(filePath + fileName);
//            file.transferTo(saveFile);
//            return R.ok().put("data",saveFile.getAbsolutePath());
//        } catch (IOException e) {
//            e.printStackTrace();
//            return R.error();
//        }
//    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/controller/admin/ChannelOPCUATagController.java
@@ -1,102 +1,77 @@
package com.iailab.module.data.channel.opcua.controller.admin;
import cn.hutool.core.codec.Base64;
import com.iailab.module.data.common.exception.RRException;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.R;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.BeanUtils;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.service.ChannelOPCUATagService;
import javax.annotation.Resource;
import com.iailab.module.data.channel.opcua.vo.OpcUaTagPageReqVO;
import com.iailab.module.data.channel.opcua.vo.OpcUaTagRespVO;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Date;
import java.util.UUID;
import static com.iailab.framework.common.pojo.CommonResult.success;
/**
 * 操作opcua tag配置
 *
 * @author DongYukun
 * @createTime 2023年05月6日 17:44:00
 * @author lirm
 * @Description
 * @createTime 2024年08月26日
 */
@RestController
@RequestMapping("/data/channel/opcua/tag")
public class ChannelOPCUATagController {
    @Resource
    private ChannelOPCUATagService channelOpcuaTagService;
    /**
     * 分页查询tag
     *
     * @param params
     */
    @GetMapping("/list")
    public R tagList(@RequestParam Map<String, Object> params){
        PageUtils page = channelOpcuaTagService.queryPage(params);
        return R.ok().put("page", page);
    @GetMapping("page")
    public CommonResult<PageResult<OpcUaTagRespVO>> list(@Valid OpcUaTagPageReqVO reqVO) {
        PageResult<ChannelOPCUATagEntity> page = channelOpcuaTagService.queryPage(reqVO);
        return success(BeanUtils.toBean(page, OpcUaTagRespVO.class));
    }
    /**
     * 根据id查询tag详情
     *
     * @param id
     */
    @GetMapping("/info/{id}")
    public R tagInfo(@PathVariable("id") String id){
        ChannelOPCUATagEntity info= channelOpcuaTagService.info(Base64.decodeStr(id));
        return R.ok().put("data", info);
    public CommonResult<ChannelOPCUATagEntity> info(@PathVariable("id") String id) {
        ChannelOPCUATagEntity info = channelOpcuaTagService.info(id);
        return success(info);
    }
    /**
     * 添加tag
     *
     * @param entity
     */
    @PostMapping("/add")
    public R tagAdd(@RequestBody ChannelOPCUATagEntity entity){
        entity.setId(UUID.randomUUID().toString());
        channelOpcuaTagService.add(entity);
        return R.ok();
    public CommonResult<Boolean> add(@RequestBody ChannelOPCUATagEntity channelOPCUATagEntity) {
        String id = UUID.randomUUID().toString();
        channelOPCUATagEntity.setId(id);
        channelOPCUATagEntity.setCreateTime(new Date());
        channelOpcuaTagService.add(channelOPCUATagEntity);
        return success(true);
    }
    /**
     * 修改tag
     *
     * @param channelOPCUATagEntity
     */
    @PostMapping("/update")
    public R tagUpdate(@RequestBody ChannelOPCUATagEntity channelOPCUATagEntity) {
    @PutMapping("/update")
    public CommonResult<Boolean> update(@RequestBody ChannelOPCUATagEntity channelOPCUATagEntity) {
        channelOPCUATagEntity.setUpdateTime(new Date());
        channelOpcuaTagService.update(channelOPCUATagEntity);
        return R.ok();
        return success(true);
    }
    /**
     * 删除tag
     * @param params
     *
     */
    @PostMapping("/delete")
    public R tagDelete(@RequestBody Map<String, Object> params) {
        String id = (String)params.get("id");
    @DeleteMapping("/delete")
    public CommonResult<Boolean> delete(@RequestParam("id") String id) {
        channelOpcuaTagService.delete(id);
        return R.ok();
        return success(true);
    }
    /**
     * 导入
     *
     * @param device
     * @param file
     * @return
     */
    @PostMapping("/import/{device}")
    public R importTag(@PathVariable("device") String device, @RequestParam("file") MultipartFile file) {
        try {
            if (file.isEmpty()) {
                throw new RRException("上传文件不能为空");
            }
            channelOpcuaTagService.importTag(device, file);
        } catch (Exception ex) {
            return R.error(ex.getMessage());
        }
        return R.ok();
    }
//    @PostMapping("/import/{device}")
//    public R importTag(@PathVariable("device") String device, @RequestParam("file") MultipartFile file) {
//        try {
//            if (file.isEmpty()) {
//                throw new RRException("上传文件不能为空");
//            }
//            channelOpcuaTagService.importTag(device, file);
//        } catch (Exception ex) {
//            return R.error(ex.getMessage());
//        }
//        return R.ok();
//    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/dao/ChannelOPCUADeviceDao.java
@@ -1,21 +1,25 @@
package com.iailab.module.data.channel.opcua.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.vo.OpcUaDevicePageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author PanZhibao
 * @author lirm
 * @Description
 * @createTime 2023年04月26日 11:31:00
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelOPCUADeviceDao extends BaseMapper<ChannelOPCUADeviceEntity> {
public interface ChannelOPCUADeviceDao extends BaseMapperX<ChannelOPCUADeviceEntity> {
    default PageResult<ChannelOPCUADeviceEntity> selectPage(OpcUaDevicePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelOPCUADeviceEntity>()
                .likeIfPresent(ChannelOPCUADeviceEntity::getServerName, reqVO.getServerName()));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/dao/ChannelOPCUATagDao.java
@@ -1,19 +1,25 @@
package com.iailab.module.data.channel.opcua.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.mybatis.core.mapper.BaseMapperX;
import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.iailab.framework.tenant.core.db.dynamic.TenantDS;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.vo.OpcUaTagPageReqVO;
import org.apache.ibatis.annotations.Mapper;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月8日 15:01:00
 * @createTime 2024年08月26日
 */
@TenantDS
@Mapper
public interface ChannelOPCUATagDao extends BaseMapper<ChannelOPCUATagEntity> {
public interface ChannelOPCUATagDao extends BaseMapperX<ChannelOPCUATagEntity> {
    default PageResult<ChannelOPCUATagEntity> selectPage(OpcUaTagPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ChannelOPCUATagEntity>()
                .likeIfPresent(ChannelOPCUATagEntity::getTagName, reqVO.getTagName())
                .likeIfPresent(ChannelOPCUATagEntity::getDevice, reqVO.getDevice())
                .orderByDesc(ChannelOPCUATagEntity::getCreateTime));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/ChannelOPCUADeviceService.java
@@ -1,60 +1,32 @@
package com.iailab.module.data.channel.opcua.service;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.opcua.dto.ChannelOPCUADeviceDTO;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUADeviceEntity;
import com.iailab.module.data.channel.opcua.vo.OpcUaDevicePageReqVO;
import com.iailab.module.data.common.utils.PageUtils;
import java.util.List;
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
public interface ChannelOPCUADeviceService {
    /**
     * 分页查询设备
     *
     * @param params
     */
    PageUtils queryPage(Map<String, Object> params);
    /**
     * 查询设备详情
     *
     * @param id
     */
    PageResult<ChannelOPCUADeviceEntity> queryPage(OpcUaDevicePageReqVO reqVO);
    ChannelOPCUADeviceEntity info(String id);
    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<ChannelOPCUADeviceEntity> list(Map<String, Object> params);
    /**
     * 添加设备
     *
     * @param channelOPCUADeviceEntity
     */
    void add(ChannelOPCUADeviceEntity channelOPCUADeviceEntity);
    /**
     * 修改设备
     *
     * @param channelOPCUADeviceEntity
     */
    void update(ChannelOPCUADeviceEntity channelOPCUADeviceEntity);
    /**
     * 删除设备
     *
     * @param id
     */
    void delete(String id);
    /**
     * 查询全部设备
     *
     */
    List<ChannelOPCUADeviceDTO> selectAll();
    List<ChannelOPCUADeviceEntity> list(Map<String, Object> params);
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/ChannelOPCUATagService.java
@@ -1,70 +1,37 @@
package com.iailab.module.data.channel.opcua.service;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.module.data.channel.opcua.dto.ChannelOPCUATagDTO;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.vo.OpcUaTagPageReqVO;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
public interface ChannelOPCUATagService {
    /**
     * 分页查询tag
     *
     * @param params
     */
    PageUtils queryPage(Map<String, Object> params);
    PageResult<ChannelOPCUATagEntity> queryPage(OpcUaTagPageReqVO reqVO);
    /**
     * 查询tag详情
     * @param id
     *
     */
    ChannelOPCUATagEntity info(String id);
    /**
     * 添加tag
     *
     * @param channelOPCUATagEntity
     */
    void add(ChannelOPCUATagEntity channelOPCUATagEntity);
    /**
     * 修改tag
     *
     * @param channelOPCUATagEntity
     */
    void update(ChannelOPCUATagEntity channelOPCUATagEntity);
    /**
     * 删除tag
     * @param id
     *
     */
    void delete(String id);
    List<ChannelOPCUATagEntity> getByDevice(String device);
    List<ChannelOPCUATagDTO> selectAll();
    List<ChannelOPCUATagEntity> listByIds(List<String> ids);
    /**
     * 通过deviceName删除
     *
     */
    void deleteByDeviceName(String name);
    /**
     * 导入Tag
     *
     * @param device
     * @param file
     * @throws Exception
     */
    void importTag(String device, MultipartFile file) throws Exception;
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/impl/ChannelOPCUADeviceServiceImpl.java
@@ -4,7 +4,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.channel.opcda.entity.ChannelOPCDADeviceEntity;
import com.iailab.module.data.channel.opcda.vo.OpcDaDevicePageReqVO;
import com.iailab.module.data.channel.opcua.vo.OpcUaDevicePageReqVO;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.Query;
import com.iailab.module.data.channel.opcua.dao.ChannelOPCUADeviceDao;
@@ -19,9 +23,9 @@
import java.util.Map;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
@Service
public class ChannelOPCUADeviceServiceImpl extends ServiceImpl<ChannelOPCUADeviceDao, ChannelOPCUADeviceEntity> implements ChannelOPCUADeviceService {
@@ -30,70 +34,27 @@
    @Resource
    private ChannelOPCUATagService channelOPCUATagService;
    /**
     * 分页查询opc ua配置
     *
     * @param params
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        String serverName = (String) params.get("serverName");
        IPage<ChannelOPCUADeviceEntity> page = this.page(
                new Query<ChannelOPCUADeviceEntity>().getPage(params),
                new QueryWrapper<ChannelOPCUADeviceEntity>()
                        .like(StringUtils.isNotBlank(serverName), "server_name", serverName)
                        .orderByDesc("create_time")
        );
        return new PageUtils(page);
    @Override
    public PageResult<ChannelOPCUADeviceEntity> queryPage(OpcUaDevicePageReqVO reqVO) {
        return channelOPCUADeviceDao.selectPage(reqVO);
    }
    /**
     * 查询opc ua配置详情
     *
     * @param id
     */
    @Override
    public ChannelOPCUADeviceEntity info(String id) {
        return channelOPCUADeviceDao.selectById(id);
    }
    /**
     * 列表
     *
     * @param params
     * @return
     */
    @Override
    public List<ChannelOPCUADeviceEntity> list(Map<String, Object> params) {
        return channelOPCUADeviceDao.selectList(new QueryWrapper<ChannelOPCUADeviceEntity>().orderByAsc("server_name"));
    }
    /**
     * 添加opc ua配置
     *
     * @param channelOPCUADeviceEntity
     */
    @Override
    public void add(ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
        channelOPCUADeviceDao.insert(channelOPCUADeviceEntity);
    }
    /**
     * 修改opc ua配置
     *
     * @param channelOPCUADeviceEntity
     */
    @Override
    public void update(ChannelOPCUADeviceEntity channelOPCUADeviceEntity) {
        channelOPCUADeviceDao.updateById(channelOPCUADeviceEntity);
    }
    /**
     * 删除opc ua配置
     *
     * @param id
     */
    @Override
    public void delete(String id) {
@@ -111,4 +72,9 @@
        );
        return ConvertUtils.sourceToTarget(entityList, ChannelOPCUADeviceDTO.class);
    }
    @Override
    public List<ChannelOPCUADeviceEntity> list(Map<String, Object> params) {
        return channelOPCUADeviceDao.selectList(new QueryWrapper<ChannelOPCUADeviceEntity>().orderByAsc("server_name"));
    }
}
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/opcua/service/impl/ChannelOPCUATagServiceImpl.java
@@ -1,17 +1,15 @@
package com.iailab.module.data.channel.opcua.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iailab.framework.common.pojo.PageResult;
import com.iailab.framework.common.util.object.ConvertUtils;
import com.iailab.module.data.common.utils.PageUtils;
import com.iailab.module.data.common.utils.Query;
import com.iailab.module.data.channel.opcua.dao.ChannelOPCUATagDao;
import com.iailab.module.data.channel.opcua.dto.ChannelOPCUATagDTO;
import com.iailab.module.data.channel.opcua.entity.ChannelOPCUATagEntity;
import com.iailab.module.data.channel.opcua.service.ChannelOPCUATagService;
import com.iailab.module.data.channel.opcua.vo.OpcUaTagPageReqVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -27,13 +25,12 @@
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
 * @author DongYukun
 * @author lirm
 * @Description
 * @createTime 2023年05月08日 15:04:00
 * @createTime 2024年08月26日
 */
@Slf4j
@Service
@@ -44,77 +41,41 @@
    @Value("${iems.upload-dir}")
    private String uploadDir;
    /**
     * 分页查询tag
     *
     * @param params
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        String tagName = (String) params.get("tagName");
        String device = (String) params.get("device");
        IPage<ChannelOPCUATagEntity> page = this.page(
                new Query<ChannelOPCUATagEntity>().getPage(params),
                new QueryWrapper<ChannelOPCUATagEntity>()
                        .like(StringUtils.isNotBlank(tagName), "tag_name", tagName)
                        .eq(StringUtils.isNotBlank(device), "device", device)
                        .orderByDesc("create_time")
        );
        return new PageUtils(page);
    public PageResult<ChannelOPCUATagEntity> queryPage(OpcUaTagPageReqVO reqVO) {
        return channelOPCUATagDao.selectPage(reqVO);
    }
    /**
     * 查询tag详情
     *
     * @param id
     */
    @Override
    public ChannelOPCUATagEntity info(String id) {
        return channelOPCUATagDao.selectById(id);
    }
    @Override
    public List<ChannelOPCUATagEntity> getByDevice(String device) {
        QueryWrapper<ChannelOPCUATagEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("device", device).orderByDesc ("create_time");
        return channelOPCUATagDao.selectList(queryWrapper);
    }
    /**
     * 添加tag
     *
     * @param channelOPCUATagEntity
     */
    @Override
    public void add(ChannelOPCUATagEntity channelOPCUATagEntity) {
        channelOPCUATagDao.insert(channelOPCUATagEntity);
    }
    /**
     * 修改tag
     *
     * @param channelOPCUATagEntity
     */
    @Override
    public void update(ChannelOPCUATagEntity channelOPCUATagEntity) {
        channelOPCUATagDao.updateById(channelOPCUATagEntity);
    }
    /**
     * 删除tag
     *
     * @param id
     */
    @Override
    public void delete(String id) {
        channelOPCUATagDao.deleteById(id);
    }
    @Override
    public List<ChannelOPCUATagEntity> getByDevice(String device) {
        QueryWrapper<ChannelOPCUATagEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("device", device).orderByDesc ("create_time");
        return channelOPCUATagDao.selectList(queryWrapper);
    }
    @Override
    public List<ChannelOPCUATagDTO> selectAll() {
        List<ChannelOPCUATagEntity> entityList = baseMapper.selectList(
                null
        );
@@ -131,13 +92,6 @@
        baseMapper.delete(new QueryWrapper<ChannelOPCUATagEntity>().eq("device",name));
    }
    /**
     * 导入Tag
     *
     * @param device
     * @param file
     * @throws Exception
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importTag(String device, MultipartFile file) throws Exception {
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/channel/tag/controller/TagController.java
@@ -1,5 +1,7 @@
package com.iailab.module.data.channel.tag.controller;
import com.iailab.module.data.channel.kio.entity.ChannelKioDeviceEntity;
import com.iailab.module.data.channel.kio.entity.ChannelKioTagEntity;
import com.iailab.module.data.common.enums.DataSourceType;
import com.iailab.framework.common.pojo.CommonResult;
import com.iailab.module.data.channel.kio.dto.ChannelKioDeviceDTO;
@@ -121,14 +123,14 @@
        TagOptionDTO kioData = new TagOptionDTO();
        kioData.setValue(DataSourceType.KIO.getCode());
        kioData.setLabel(DataSourceType.KIO.getDesc());
        List<ChannelKioDeviceDTO> kioList = channelKioDeviceService.list(new HashMap<>());
        List<ChannelKioDeviceEntity> kioList = channelKioDeviceService.list(new HashMap<>());
        List<TagOptionDTO> kioDeviceOp = new ArrayList<>();
        if (!CollectionUtils.isEmpty(kioList)) {
            kioList.forEach(item -> {
                TagOptionDTO op1 = new TagOptionDTO();
                op1.setValue(item.getId());
                op1.setLabel(item.getInstanceName());
                List<ChannelKioTagDTO> tags = channelKioTagService.getByDevice(item.getInstanceName());
                List<ChannelKioTagEntity> tags = channelKioTagService.getByDevice(item.getInstanceName());
                List<TagOptionDTO> op2 = new ArrayList<>();
                tags.forEach(item1 -> {
                    TagOptionDTO op3 = new TagOptionDTO();