diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceMapper.java index 17a3bf5..f932a27 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceMapper.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceMapper.java @@ -1,6 +1,7 @@ package org.dromara.sample.manage.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.sample.manage.model.entity.DeviceEntity; @@ -11,5 +12,6 @@ import org.dromara.sample.manage.model.entity.DeviceEntity; * @version 0.1 */ public interface IDeviceMapper extends BaseMapper { + int updatePor(@Param("id") Integer id, @Param("proId") Integer proId); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java new file mode 100644 index 0000000..529cdd3 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProMapper.java @@ -0,0 +1,21 @@ +package org.dromara.sample.manage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.sample.manage.model.dto.DeviceProDTO; +import org.dromara.sample.manage.model.dto.DeviceQrtzDTO; +import org.dromara.sample.manage.model.entity.DeviceProEntity; + +import java.util.List; + +/** + * @auther yq + * @data 2025/3/20 + */ +public interface IDeviceProMapper extends BaseMapper { + + List listDeviceProEntityMap(Page page, @Param("condition") DeviceProDTO deviceProDTO); + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProUserMapper.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProUserMapper.java new file mode 100644 index 0000000..3297360 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IDeviceProUserMapper.java @@ -0,0 +1,16 @@ +package org.dromara.sample.manage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.entity.DeviceProUserEntity; + +/** + * @auther yq + * @data 2025/3/20 + */ +public interface IDeviceProUserMapper extends BaseMapper { + + + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java index 5b809fb..6e2fcca 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java @@ -6,6 +6,7 @@ import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum; import org.dromara.common.sdk.cloudapi.device.DeviceTypeEnum; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; +import org.dromara.sample.manage.model.entity.DeviceProEntity; import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; import lombok.AllArgsConstructor; @@ -100,6 +101,12 @@ public class DeviceDTO { @Schema(description = "租户ID") private String tenantId; + @Schema(description = "项目ID") + private String proId; + + @Schema(description = "项目ID") + private DeviceProEntity deviceProEntity; + private String videoId; private Float latitude; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java new file mode 100644 index 0000000..7283c78 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceProDTO.java @@ -0,0 +1,47 @@ +package org.dromara.sample.manage.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.dromara.sample.manage.model.entity.DeviceQrtzDateEntity; +import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @auther yq + * @data 2025/3/20 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DeviceProDTO { + /** + 机场sn + */ + private String deviceSn; + + /** + 机场名称 + */ + private String deviceName; + + /** + 机场昵称 + */ + private String nickname; + + /** + 分配人员姓名 + */ + private String realname; + + /** + 分配人员 + */ + private Integer userId; +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java index 21bb2e1..94c17ea 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java @@ -89,4 +89,7 @@ public class DeviceEntity implements Serializable { @TableField(value = "login_time") private LocalDateTime loginTime; + @TableField(value = "pro_id") + private Integer proId; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java new file mode 100644 index 0000000..08156cf --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProEntity.java @@ -0,0 +1,51 @@ +package org.dromara.sample.manage.model.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "manage_device_pro") +public class DeviceProEntity extends BaseEntity implements Serializable { + + @TableId(type = IdType.AUTO) + private Integer id; + + @TableField(value = "pro_name") + private String proName; + + @TableField(value = "bind_code") + private String bindCode; + + @TableField(value = "bind_type") + private Integer bindType; + + @TableField(value = "workspace_id") + private Integer workspaceId; + + @TableField(exist = false) + private List deviceProUserEntityList = new ArrayList<>(); + + @TableField(exist = false) + private List deviceEntityList = new ArrayList<>(); + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java new file mode 100644 index 0000000..2b0b27c --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceProUserEntity.java @@ -0,0 +1,41 @@ +package org.dromara.sample.manage.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serializable; + +/** + * The entity class of the device + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "manage_device_pro_user") +public class DeviceProUserEntity extends BaseEntity implements Serializable { + + @TableId(type = IdType.AUTO) + private Integer id; + + @TableField(value = "pro_id") + private Integer proId; + + @TableField(value = "user_id") + private String userId; + + @TableField(value = "realname") + private String realname; + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java new file mode 100644 index 0000000..ae49322 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProService.java @@ -0,0 +1,37 @@ +package org.dromara.sample.manage.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.JsonNode; +import org.apache.ibatis.annotations.Param; +import org.dromara.common.sdk.cloudapi.device.ControlSourceEnum; +import org.dromara.common.sdk.cloudapi.device.DeviceOsdHost; +import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum; +import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.PaginationData; +import org.dromara.common.sdk.config.version.GatewayManager; +import org.dromara.common.websocket.dto.BizCodeEnum; +import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; +import org.dromara.sample.manage.model.dto.DeviceProDTO; +import org.dromara.sample.manage.model.dto.TopologyDeviceDTO; +import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.param.DeviceQueryParam; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +/** + * @author sean.zhou + * @date 2021/11/10 + * @version 0.1 + */ +public interface IDeviceProService { + + List listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO); + + Boolean saveAndUpdate(DeviceProEntity deviceProEntity); + + Boolean deleteIds(Collection ids); +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProUserService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProUserService.java new file mode 100644 index 0000000..dc5ba25 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceProUserService.java @@ -0,0 +1,28 @@ +package org.dromara.sample.manage.service; + +import com.fasterxml.jackson.databind.JsonNode; +import org.dromara.common.sdk.cloudapi.device.ControlSourceEnum; +import org.dromara.common.sdk.cloudapi.device.DeviceOsdHost; +import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum; +import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum; +import org.dromara.common.sdk.common.HttpResultResponse; +import org.dromara.common.sdk.common.PaginationData; +import org.dromara.common.sdk.config.version.GatewayManager; +import org.dromara.common.websocket.dto.BizCodeEnum; +import org.dromara.sample.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; +import org.dromara.sample.manage.model.dto.TopologyDeviceDTO; +import org.dromara.sample.manage.model.param.DeviceQueryParam; + +import java.util.List; +import java.util.Optional; + +/** + * @author sean.zhou + * @date 2021/11/10 + * @version 0.1 + */ +public interface IDeviceProUserService { + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java new file mode 100644 index 0000000..567e260 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceProServiceImpl.java @@ -0,0 +1,131 @@ +package org.dromara.sample.manage.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sdk.cloudapi.device.*; +import org.dromara.common.sdk.cloudapi.firmware.*; +import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService; +import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService; +import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; +import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel; +import org.dromara.common.sdk.common.*; +import org.dromara.common.sdk.config.version.GatewayManager; +import org.dromara.common.sdk.exception.CloudSDKException; +import org.dromara.common.sdk.mqtt.IMqttTopicService; +import org.dromara.common.sdk.mqtt.MqttGatewayPublish; +import org.dromara.common.sdk.mqtt.events.EventsSubscribe; +import org.dromara.common.sdk.mqtt.osd.OsdSubscribe; +import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum; +import org.dromara.common.sdk.mqtt.property.PropertySetSubscribe; +import org.dromara.common.sdk.mqtt.requests.RequestsSubscribe; +import org.dromara.common.sdk.mqtt.services.ServicesReplyData; +import org.dromara.common.sdk.mqtt.services.ServicesSubscribe; +import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; +import org.dromara.common.sdk.mqtt.state.StateSubscribe; +import org.dromara.common.sdk.mqtt.status.StatusSubscribe; +import org.dromara.common.websocket.dto.BizCodeEnum; +import org.dromara.sample.common.error.CommonErrorEnum; +import org.dromara.sample.component.mqtt.model.EventsReceiver; +import org.dromara.sample.control.model.enums.DroneAuthorityEnum; +import org.dromara.sample.manage.mapper.IDeviceMapper; +import org.dromara.sample.manage.mapper.IDeviceProMapper; +import org.dromara.sample.manage.mapper.IDeviceProUserMapper; +import org.dromara.sample.manage.mapper.IDeviceQrtzMapper; +import org.dromara.sample.manage.model.dto.*; +import org.dromara.sample.manage.model.entity.DeviceEntity; +import org.dromara.sample.manage.model.entity.DeviceProEntity; +import org.dromara.sample.manage.model.entity.DeviceProUserEntity; +import org.dromara.sample.manage.model.entity.DeviceQrtzDateEntity; +import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; +import org.dromara.sample.manage.model.enums.PropertySetFieldEnum; +import org.dromara.sample.manage.model.enums.UserTypeEnum; +import org.dromara.sample.manage.model.param.DeviceQueryParam; +import org.dromara.sample.manage.model.receiver.BasicDeviceProperty; +import org.dromara.sample.manage.service.*; +import org.dromara.sample.websocket.service.IWebSocketMessageService; +import org.dromara.system.api.model.LoginUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * + * @author sean.zhou + * @version 0.1 + * @date 2021/11/10 + */ +@Service +@Slf4j +@Transactional +public class DeviceProServiceImpl implements IDeviceProService { + @Autowired + private IDeviceProMapper deviceProMapper; + + @Autowired + private IDeviceMapper deviceMapper; + + @Autowired + private IDeviceProUserMapper deviceProUserMapper; + + @Override + public List listDeviceProEntityMap(Page page, DeviceProDTO deviceProDTO) { + return deviceProMapper.listDeviceProEntityMap(page,deviceProDTO); + } + + @Override + public Boolean saveAndUpdate(DeviceProEntity entity) { + boolean flag = true; + //项目信息 + if(entity.getId() != null){ + flag = deviceProMapper.updateById(entity) > 0 ; + }else { + LoginUser loginUser = LoginHelper.getLoginUser(); + entity.setCreateBy(loginUser.getUserId()); + entity.setCreateTime(new Date()); + entity.setCreateDept(loginUser.getDeptId()); + flag = deviceProMapper.insert(entity) > 0; + } + //设备项目绑定 + if(entity.getDeviceEntityList().size() >= 0 && flag == true){ + for (DeviceEntity deviceEntity : deviceMapper.selectList(new QueryWrapper().eq("pro_id", entity.getId()))) { + deviceMapper.updatePor(deviceEntity.getId(),null); + } + entity.getDeviceEntityList().stream().forEach(itme->{ + itme.setProId(entity.getId()); + }); + flag = deviceMapper.updateById(entity.getDeviceEntityList(),100).size() > 0;; + } + //设备项目绑定 + if(entity.getDeviceProUserEntityList().size() >= 0 && flag == true){ + deviceProUserMapper.delete(new QueryWrapper().eq("pro_id",entity.getId())); + entity.getDeviceProUserEntityList().stream().forEach(itme->{ + itme.setProId(entity.getId()); + }); + flag = deviceProUserMapper.insert(entity.getDeviceProUserEntityList(),100).size() > 0; + } + return flag; + } + + @Override + public Boolean deleteIds(Collection ids) { + for (Long proId : ids) { + deviceProMapper.delete(new QueryWrapper().eq("id",proId)); + } + return deviceProMapper.deleteBatchIds(ids)>0; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index 1b349ed..4639f68 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.sample.manage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.sdk.cloudapi.device.*; @@ -29,8 +30,10 @@ import org.dromara.sample.common.error.CommonErrorEnum; import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.control.model.enums.DroneAuthorityEnum; import org.dromara.sample.manage.mapper.IDeviceMapper; +import org.dromara.sample.manage.mapper.IDeviceProMapper; import org.dromara.sample.manage.model.dto.*; import org.dromara.sample.manage.model.entity.DeviceEntity; +import org.dromara.sample.manage.model.entity.DeviceProEntity; import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum; import org.dromara.sample.manage.model.enums.PropertySetFieldEnum; import org.dromara.sample.manage.model.enums.UserTypeEnum; @@ -125,6 +128,9 @@ public class DeviceServiceImpl implements IDeviceService { @Autowired private IWebSocketMessageService webSocketMessageService; + @Autowired + private IDeviceProMapper deviceProMapper; + @Override public void subDeviceOffline(String deviceSn) { // If no information about this device exists in the cache, the drone is considered to be offline. @@ -507,6 +513,10 @@ public class DeviceServiceImpl implements IDeviceService { device.setChildren(child); }); } + if(device.getProId() != null){ + DeviceProEntity deviceProEntitie = deviceProMapper.selectOne(new LambdaQueryWrapper().eq(DeviceProEntity::getId, device.getProId())); + device.setDeviceProEntity(deviceProEntitie); + } }) .collect(Collectors.toList()); return new PaginationData(devicesList, new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal())); diff --git a/dk-modules/sample/src/main/resources/mapper/DeviceProUserMapper.xml b/dk-modules/sample/src/main/resources/mapper/DeviceProUserMapper.xml new file mode 100644 index 0000000..7facbe1 --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/DeviceProUserMapper.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceMapper.xml new file mode 100644 index 0000000..9674698 --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceMapper.xml @@ -0,0 +1,11 @@ + + + + + + + update manage_device set pro_id =#{proId} where id=#{id} + + diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml new file mode 100644 index 0000000..f29e0fe --- /dev/null +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +