diff --git a/maibu-admin/src/main/java/com/maibu/web/controller/system/SysSiteController.java b/maibu-admin/src/main/java/com/maibu/web/controller/system/SysSiteController.java index a281690..875d8ce 100644 --- a/maibu-admin/src/main/java/com/maibu/web/controller/system/SysSiteController.java +++ b/maibu-admin/src/main/java/com/maibu/web/controller/system/SysSiteController.java @@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; - /** * 区域/场站 * @@ -23,7 +22,6 @@ public class SysSiteController extends BaseController { @Autowired private SysSiteService sysSiteService; - /** * 查询组织列表 */ @@ -46,7 +44,7 @@ public class SysSiteController extends BaseController { try { return AjaxResult.success(sysSiteService.save(org)); } catch (Exception e) { - return AjaxResult.error("保存组织出错", e.getMessage()); + return AjaxResult.error("新增修改场站出错", e.getMessage()); } } @@ -58,12 +56,14 @@ public class SysSiteController extends BaseController { public AjaxResult delete(@RequestBody List ids) { try { if (CollectionUtils.isEmpty(ids)) { -// return error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), menu.getMenuName())); + // return + // error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), + // menu.getMenuName())); return error("删除id为空"); } return AjaxResult.success(sysSiteService.delete(ids)); } catch (Exception e) { - return AjaxResult.error("保存组织出错", e.getMessage()); + return AjaxResult.error("删除场站出错", e.getMessage()); } } @@ -76,7 +76,7 @@ public class SysSiteController extends BaseController { try { return AjaxResult.success(sysSiteService.selectById(id)); } catch (Exception e) { - return AjaxResult.error("保存组织出错", e.getMessage()); + return AjaxResult.error("查询场站详情出错", e.getMessage()); } } @@ -89,7 +89,20 @@ public class SysSiteController extends BaseController { try { return AjaxResult.success(sysSiteService.selectByOrgId(id)); } catch (Exception e) { - return AjaxResult.error("保存组织出错", e.getMessage()); + return AjaxResult.error("查询组织下所有场站出错", e.getMessage()); + } + } + + /** + * 查询用户的场站 + */ + + @GetMapping("/selectByUserId") + public AjaxResult selectByUserId() { + try { + return AjaxResult.success(sysSiteService.selectByUserId(getLoginUser())); + } catch (Exception e) { + return AjaxResult.error("查询用户场站出错", e.getMessage()); } } } diff --git a/maibu-common/src/main/java/com/maibu/core/business/AlarmOrderConfig.java b/maibu-common/src/main/java/com/maibu/core/business/AlarmOrderConfig.java new file mode 100644 index 0000000..ce3a6b0 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/AlarmOrderConfig.java @@ -0,0 +1,29 @@ +package com.maibu.core.business; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.maibu.core.domain.OrgNoUserDO; +import com.maibu.core.enums.ErrorSource; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +//记录配置告警是否需要自动生成工单 +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "iot_alarm_order_config", autoResultMap = true) +public class AlarmOrderConfig extends OrgNoUserDO { + private static final long serialVersionUID = 1L; + @TableId(type = IdType.AUTO) + private Long id; + + private String ErrorCode; + + private ErrorSource sourceType; + + private boolean autoGenerateOrder = false; + + private Long modelId; // 工单模型 + +} diff --git a/maibu-common/src/main/java/com/maibu/core/business/ErrorIdentificationStandard.java b/maibu-common/src/main/java/com/maibu/core/business/ErrorIdentificationStandard.java index 84854b4..93619a3 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/ErrorIdentificationStandard.java +++ b/maibu-common/src/main/java/com/maibu/core/business/ErrorIdentificationStandard.java @@ -3,6 +3,7 @@ package com.maibu.core.business; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.maibu.core.domain.OrgBaseDO; import com.maibu.core.enums.CompareEnum; import com.maibu.core.enums.ErrorLevel; import com.maibu.core.enums.ErrorSource; @@ -10,8 +11,8 @@ import lombok.Data; @Data -@TableName("error_identification") -public class ErrorIdentificationStandard { +@TableName("iot_error_identification") +public class ErrorIdentificationStandard extends OrgBaseDO { @TableId(type = IdType.AUTO) private Long id; private String field; diff --git a/maibu-common/src/main/java/com/maibu/core/business/IOTWorkOrder.java b/maibu-common/src/main/java/com/maibu/core/business/IOTWorkOrder.java index 76d01a5..e4d5193 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/IOTWorkOrder.java +++ b/maibu-common/src/main/java/com/maibu/core/business/IOTWorkOrder.java @@ -1,23 +1,26 @@ package com.maibu.core.business; -import com.baomidou.mybatisplus.annotation.*; -import com.maibu.core.domain.TenantBaseDO; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.maibu.core.domain.OrgNoUserDO; import com.maibu.core.enums.ErrorLevel; import com.maibu.core.enums.ErrorSource; +import com.maibu.core.enums.OrderType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import java.math.BigDecimal; -import java.time.LocalDateTime; - @Data @EqualsAndHashCode(callSuper = true) @TableName("iot_work_order") @ApiModel("工单记录") -public class IOTWorkOrder extends TenantBaseDO { +public class IOTWorkOrder extends OrgNoUserDO { @ApiModelProperty("主键 ID") @TableId(type = IdType.AUTO) @@ -32,10 +35,8 @@ public class IOTWorkOrder extends TenantBaseDO { @ApiModelProperty("工单来源:1-AI 诊断 2-无人机巡检 3-清洗优化 4-视频监控 5-装备控制 6-人工创建 7-告警关联") private Integer sourceType; - @ApiModelProperty("工单类型:1-巡检 2-检修 3-清洗 4-维修 5-运维") - private Integer orderType; + private OrderType orderType; - @ApiModelProperty("优先级:1-高 2-中 3-低") private ErrorLevel priorityLevel; @ApiModelProperty("关联设备 ID") @@ -45,17 +46,11 @@ public class IOTWorkOrder extends TenantBaseDO { private String deviceName; @ApiModelProperty("设备类型") - private ErrorSource deviceType; - - @ApiModelProperty("关联场站 ID") - private Long siteId; + private ErrorSource deviceType; @ApiModelProperty("关联场站名称") private String siteName; - @ApiModelProperty("关联组织 ID") - private Long orgId; - @ApiModelProperty("负责人 ID") private Long assigneeId; @@ -109,4 +104,8 @@ public class IOTWorkOrder extends TenantBaseDO { @ApiModelProperty("处理备注") private String handleRemark; + + private Long modelId; + + private Long taskId; } diff --git a/maibu-common/src/main/java/com/maibu/core/business/OrderModel.java b/maibu-common/src/main/java/com/maibu/core/business/OrderModel.java new file mode 100644 index 0000000..bc06e1f --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/OrderModel.java @@ -0,0 +1,40 @@ +package com.maibu.core.business; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.maibu.core.domain.OrgNoUserDO; +import com.maibu.core.enums.ErrorLevel; +import com.maibu.core.enums.OrderType; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +//自动生成工单配置的模型 +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "iot_order_model", autoResultMap = true) +public class OrderModel extends OrgNoUserDO { + private static final long serialVersionUID = 1L; + @TableId(type = IdType.AUTO) + private Long id; + + private String orderName; // 工单名称 这个需要拼上时间 + + private OrderType orderType; + + private ErrorLevel errorLevel; + + private boolean autoGenerateTask = false; // 是否自动生成任务 + + private String deviceId; // 设备Id + + private Long routeId; // 路径规划Id + + private String waylineId; // 航线ID + + private Integer rthAltitude; // 返航高度 + + private String rthMode; // 返航模式 optimal 智能高度 preset 设定高度 + +} diff --git a/maibu-common/src/main/java/com/maibu/core/business/alarm_center/Alarm.java b/maibu-common/src/main/java/com/maibu/core/business/alarm_center/Alarm.java index 7aece87..a2e6c89 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/alarm_center/Alarm.java +++ b/maibu-common/src/main/java/com/maibu/core/business/alarm_center/Alarm.java @@ -107,4 +107,8 @@ public class Alarm extends TenantBaseDO { @ApiModelProperty("是否邮件通知:0-否 1-是") @Excel(name = "邮件通知", readConverterExp = "0=否,1=是") private Integer notifyEmail; + + private Long siteId; + + private Long orgId; } diff --git a/maibu-common/src/main/java/com/maibu/core/business/alarm_center/AlarmMessage.java b/maibu-common/src/main/java/com/maibu/core/business/alarm_center/AlarmMessage.java index d94ea92..a32725a 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/alarm_center/AlarmMessage.java +++ b/maibu-common/src/main/java/com/maibu/core/business/alarm_center/AlarmMessage.java @@ -40,4 +40,9 @@ public class AlarmMessage { /** 状态 */ private String status; + + private Long siteId; + + private Long orgId; + } diff --git a/maibu-common/src/main/java/com/maibu/core/business/device/NettyDevice.java b/maibu-common/src/main/java/com/maibu/core/business/device/NettyDevice.java index f5084d4..f4d3317 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/device/NettyDevice.java +++ b/maibu-common/src/main/java/com/maibu/core/business/device/NettyDevice.java @@ -55,6 +55,9 @@ public class NettyDevice extends Connector { // todo 注册的时候更新 siteId private Device device; + //todo 假如设置一个当前控制的token + private String currentControlToken; + @JsonIgnore private DevicePlanTaskMapper devicePlanTaskMapper = SpringUtils.getBean(DevicePlanTaskMapper.class); diff --git a/maibu-common/src/main/java/com/maibu/core/business/dto/AlarmQueryDTO.java b/maibu-common/src/main/java/com/maibu/core/business/dto/AlarmQueryDTO.java index 2034e90..23ac69c 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/dto/AlarmQueryDTO.java +++ b/maibu-common/src/main/java/com/maibu/core/business/dto/AlarmQueryDTO.java @@ -5,6 +5,9 @@ import java.time.LocalDateTime; import org.springframework.format.annotation.DateTimeFormat; import com.fasterxml.jackson.annotation.JsonFormat; +import com.maibu.core.domain.BaseEntity; +import com.maibu.core.enums.ErrorLevel; +import com.maibu.core.enums.ErrorSource; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,25 +15,14 @@ import lombok.Data; @Data @ApiModel("告警查询参数") -public class AlarmQueryDTO { +public class AlarmQueryDTO extends BaseEntity { - @ApiModelProperty("页码") - private Integer pageNum = 1; + @ApiModelProperty("告警编号") + private String alarmNo; - @ApiModelProperty("每页条数") - private Integer pageSize = 10; + private ErrorSource deviceType; - @ApiModelProperty("告警级别:1-严重 2-重要 3-一般 4-提示") - private Integer alarmLevel; - - @ApiModelProperty("告警类型") - private Integer alarmType; - - @ApiModelProperty("设备类型") - private Integer deviceType; - - @ApiModelProperty("处理状态:1-待处理 2-处理中 3-已关闭 4-已忽略") - private Integer handleStatus; + private ErrorLevel alarmLevel; @ApiModelProperty("开始时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @@ -42,9 +34,6 @@ public class AlarmQueryDTO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime endTime; - @ApiModelProperty("搜索关键词(告警编号/内容)") - private String keyword; - @ApiModelProperty("设备ID") private String deviceId; diff --git a/maibu-netty-server/src/main/java/com/maibu/dto/DeviceTaskCommandDTO.java b/maibu-common/src/main/java/com/maibu/core/business/dto/DeviceTaskCommandDTO.java similarity index 89% rename from maibu-netty-server/src/main/java/com/maibu/dto/DeviceTaskCommandDTO.java rename to maibu-common/src/main/java/com/maibu/core/business/dto/DeviceTaskCommandDTO.java index df5b4d9..a172505 100644 --- a/maibu-netty-server/src/main/java/com/maibu/dto/DeviceTaskCommandDTO.java +++ b/maibu-common/src/main/java/com/maibu/core/business/dto/DeviceTaskCommandDTO.java @@ -1,4 +1,4 @@ -package com.maibu.dto; +package com.maibu.core.business.dto; import lombok.Data; diff --git a/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderQueryDTO.java b/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderQueryDTO.java index 2bb4b5e..01d5143 100644 --- a/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderQueryDTO.java +++ b/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderQueryDTO.java @@ -6,6 +6,10 @@ import lombok.Data; import java.time.LocalDateTime; +import javax.lang.model.type.ErrorType; + +import com.maibu.core.enums.OrderType; + @Data @ApiModel("工单查询参数") public class WorkOrderQueryDTO { @@ -20,10 +24,10 @@ public class WorkOrderQueryDTO { private Integer sourceType; @ApiModelProperty("工单类型") - private Integer orderType; + private OrderType orderType; @ApiModelProperty("优先级") - private Integer priorityLevel; + private ErrorType priorityLevel; @ApiModelProperty("负责人 ID") private Long assigneeId; diff --git a/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderStartDTO.java b/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderStartDTO.java new file mode 100644 index 0000000..de7f0c1 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/dto/WorkOrderStartDTO.java @@ -0,0 +1,20 @@ +package com.maibu.core.business.dto; + +import java.time.LocalDateTime; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +@Data +public class WorkOrderStartDTO { + + private List ids; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + + private String deviceId; + +} diff --git a/maibu-external/src/main/java/com/maibu/uav/dto/FlightTaskCreateDTO.java b/maibu-common/src/main/java/com/maibu/core/business/dto/uav/FlightTaskCreateDTO.java similarity index 89% rename from maibu-external/src/main/java/com/maibu/uav/dto/FlightTaskCreateDTO.java rename to maibu-common/src/main/java/com/maibu/core/business/dto/uav/FlightTaskCreateDTO.java index 6c4fd50..368cf89 100644 --- a/maibu-external/src/main/java/com/maibu/uav/dto/FlightTaskCreateDTO.java +++ b/maibu-common/src/main/java/com/maibu/core/business/dto/uav/FlightTaskCreateDTO.java @@ -1,4 +1,4 @@ -package com.maibu.uav.dto; +package com.maibu.core.business.dto.uav; import lombok.Data; diff --git a/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandDispather.java b/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandDispather.java new file mode 100644 index 0000000..61358b7 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandDispather.java @@ -0,0 +1,26 @@ +package com.maibu.core.business.inter.mower; + +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import com.maibu.core.business.dto.DeviceTaskCommandDTO; + +@Component +public class MowerCommandDispather { + + @Resource + private ApplicationContext applicationContext; + + public void dispathDeviceTask(DeviceTaskCommandDTO dto) { + Map beanMap = applicationContext.getBeansOfType(MowerCommandInter.class); + // 遍历 + beanMap.values().forEach(x -> { + x.createDeviceTask(dto); + }); + } + +} diff --git a/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandInter.java b/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandInter.java new file mode 100644 index 0000000..b60f7c6 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/inter/mower/MowerCommandInter.java @@ -0,0 +1,9 @@ +package com.maibu.core.business.inter.mower; + +import com.maibu.core.business.dto.DeviceTaskCommandDTO; + +public interface MowerCommandInter { + + void createDeviceTask(DeviceTaskCommandDTO dto); + +} diff --git a/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandDispather.java b/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandDispather.java new file mode 100644 index 0000000..9ba5234 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandDispather.java @@ -0,0 +1,26 @@ +package com.maibu.core.business.inter.uav; + +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Component; + +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; + +@Component +public class UAVCommandDispather { + + @Resource + private ApplicationContext applicationContext; + + public void dispathFightTask(FlightTaskCreateDTO dto) { + Map beanMap = applicationContext.getBeansOfType(UAVCommandInter.class); + // 遍历 + beanMap.values().forEach(x -> { + x.createFlightTask(dto); + }); + } + +} diff --git a/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandInter.java b/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandInter.java new file mode 100644 index 0000000..ff80362 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/business/inter/uav/UAVCommandInter.java @@ -0,0 +1,9 @@ +package com.maibu.core.business.inter.uav; + +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; + +public interface UAVCommandInter { + + void createFlightTask(FlightTaskCreateDTO dto); + +} diff --git a/maibu-common/src/main/java/com/maibu/core/domain/OrgNoUserDO.java b/maibu-common/src/main/java/com/maibu/core/domain/OrgNoUserDO.java new file mode 100644 index 0000000..cf10c3f --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/domain/OrgNoUserDO.java @@ -0,0 +1,22 @@ +package com.maibu.core.domain; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 拓展多租户的 BaseDO 基类 + * + * @author fastbee + */ +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class OrgNoUserDO extends BaseDO { + + /** + * 多租户编号 + */ + private Long orgId; + + private Long siteId; + +} diff --git a/maibu-common/src/main/java/com/maibu/core/enums/OrderType.java b/maibu-common/src/main/java/com/maibu/core/enums/OrderType.java new file mode 100644 index 0000000..656ebcf --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/core/enums/OrderType.java @@ -0,0 +1,33 @@ +package com.maibu.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum OrderType { + MOWER_ERROR("MOWER_ERROR", "割草机故障", 1), + + UAV_ERROR("UAV_ERROR", "无人机故障", 2), + + INSPECTION_TASK("INSPECTION_TASK", "巡检", 2), + + COMPONENT_DEFECT("COMPONENT_DEFECT", "光伏组件故障", 3), + + CLEAN_TASK("CLEAN_TASK", "清洗任务", 2), + + MAINTAIN_TASK("MAINTAIN_TASK", "维护任务", 3), + + REPAIR_TASK("REPAIR_TASK", "维修任务", 3), + + OTHER("OTHER", "其他", 3); + + /** 订单类型值(存储在数据库中) */ + private final String value; + + /** 订单类型名称(用于前端显示) */ + private final String name; + + // 主体 1-割草机 2 -无人机 3 -其他 + private final Integer type; +} diff --git a/maibu-common/src/main/java/com/maibu/mapper/AlarmOrderConfigMapper.java b/maibu-common/src/main/java/com/maibu/mapper/AlarmOrderConfigMapper.java new file mode 100644 index 0000000..c4b0558 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/mapper/AlarmOrderConfigMapper.java @@ -0,0 +1,14 @@ +package com.maibu.mapper; + +import org.springframework.stereotype.Repository; + +import com.maibu.core.business.AlarmOrderConfig; +import com.maibu.mybatis.mapper.BaseMapperX; + +/** + * 设备历史状态 + */ +@Repository +public interface AlarmOrderConfigMapper extends BaseMapperX { + +} diff --git a/maibu-common/src/main/java/com/maibu/mapper/OrderModelMapper.java b/maibu-common/src/main/java/com/maibu/mapper/OrderModelMapper.java new file mode 100644 index 0000000..b049127 --- /dev/null +++ b/maibu-common/src/main/java/com/maibu/mapper/OrderModelMapper.java @@ -0,0 +1,14 @@ +package com.maibu.mapper; + +import org.springframework.stereotype.Repository; + +import com.maibu.core.business.OrderModel; +import com.maibu.mybatis.mapper.BaseMapperX; + +/** + * 设备历史状态 + */ +@Repository +public interface OrderModelMapper extends BaseMapperX { + +} diff --git a/maibu-common/src/main/java/com/maibu/memory/SiteMemory.java b/maibu-common/src/main/java/com/maibu/memory/SiteMemory.java index 6e283ea..2d7247e 100644 --- a/maibu-common/src/main/java/com/maibu/memory/SiteMemory.java +++ b/maibu-common/src/main/java/com/maibu/memory/SiteMemory.java @@ -10,12 +10,14 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import com.maibu.core.business.AlarmOrderConfig; import com.maibu.core.business.Device; import com.maibu.core.business.DevicePlan; import com.maibu.core.business.DevicePlanTask; import com.maibu.core.business.DeviceRunParam; import com.maibu.core.business.ErrorIdentificationStandard; import com.maibu.core.business.IoTCommonDevice; +import com.maibu.core.business.OrderModel; import com.maibu.core.domain.entity.SysSite; import com.maibu.core.enums.ErrorSource; @@ -27,12 +29,16 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SiteMemory { - public Map> standards = null; + public ConcurrentHashMap> standards = null; public Long siteId; public SysSite sysSite; + public static final ConcurrentHashMap ordrModelMap = new ConcurrentHashMap<>(); + + public static final ConcurrentHashMap orderConfigMap = new ConcurrentHashMap<>(); + public static final ConcurrentHashMap deviceRunParamMap = new ConcurrentHashMap<>(); private static final ConcurrentHashMap deviceMap = new ConcurrentHashMap<>(); @@ -73,6 +79,68 @@ public class SiteMemory { } } + public void saveErrorIdentificationStandard(ErrorIdentificationStandard errorIdentificationStandard) { + if (standards == null) { + standards = new ConcurrentHashMap<>(); + } + List list = standards.get(errorIdentificationStandard.getErrorSource()); + if (CollectionUtils.isEmpty(list)) { + list = new ArrayList<>(); + } + list.add(errorIdentificationStandard); + standards.put(errorIdentificationStandard.getErrorSource(), list); + } + + public List getErrorIdentificationStandard(ErrorSource errorSource) { + if (errorSource != null && standards != null) { + return standards.get(errorSource); + } + return null; + } + + public void removeErrorIdentificationStandard(ErrorIdentificationStandard errorIdentificationStandard) { + if (errorIdentificationStandard != null && standards != null) { + List list = standards.get(errorIdentificationStandard.getErrorSource()); + if (!CollectionUtils.isEmpty(list)) { + list.removeIf(x -> x.getId().equals(errorIdentificationStandard.getId())); + } + } + } + + public void saveOrderModel(OrderModel orderModel) { + ordrModelMap.put(orderModel.getId(), orderModel); + } + + public OrderModel getOrderModel(Long id) { + if (id != null) { + return ordrModelMap.get(id); + } + return null; + } + + public void removeOrderModel(Long id) { + if (id != null) { + ordrModelMap.remove(id); + } + } + + public void saveAlarmOrderConfig(AlarmOrderConfig alarmOrderConfig) { + orderConfigMap.put(alarmOrderConfig.getErrorCode(), alarmOrderConfig); + } + + public AlarmOrderConfig getAlarmOrderConfig(String errorCode) { + if (!StringUtils.isEmpty(errorCode)) { + return orderConfigMap.get(errorCode); + } + return null; + } + + public void removeAlarmOrderConfig(String errorCode) { + if (!StringUtils.isEmpty(errorCode)) { + orderConfigMap.remove(errorCode); + } + } + public void addDevicePlan(DevicePlan devicePlan) { if (devicePlan != null && !StringUtils.isEmpty(devicePlan.getDeviceId())) { String deviceId = devicePlan.getDeviceId(); diff --git a/maibu-common/src/main/java/com/maibu/mqtt/MqttClientUtil.java b/maibu-common/src/main/java/com/maibu/mqtt/MqttClientUtil.java index c4dcf9f..c907aed 100644 --- a/maibu-common/src/main/java/com/maibu/mqtt/MqttClientUtil.java +++ b/maibu-common/src/main/java/com/maibu/mqtt/MqttClientUtil.java @@ -1,6 +1,5 @@ package com.maibu.mqtt; - import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; @@ -83,11 +82,14 @@ public class MqttClientUtil { int qos) throws MqttException { - MqttMessage message = - new MqttMessage(payload.getBytes()); + MqttMessage message = new MqttMessage(payload.getBytes()); message.setQos(qos); + if (!client.isConnected()) { + log.warn("MQTT未连接"); + return; + } client.publish(topic, message); } diff --git a/maibu-external/src/main/java/com/maibu/uav/controller/UAVController.java b/maibu-external/src/main/java/com/maibu/uav/controller/UAVController.java index a01ed11..0b57b06 100644 --- a/maibu-external/src/main/java/com/maibu/uav/controller/UAVController.java +++ b/maibu-external/src/main/java/com/maibu/uav/controller/UAVController.java @@ -1,5 +1,6 @@ package com.maibu.uav.controller; +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; import com.maibu.core.controller.BaseController; import com.maibu.core.domain.AjaxResult; import com.maibu.core.page.TableDataInfo; diff --git a/maibu-external/src/main/java/com/maibu/uav/service/UAVCommamdHandler.java b/maibu-external/src/main/java/com/maibu/uav/service/UAVCommamdHandler.java new file mode 100644 index 0000000..a6280d6 --- /dev/null +++ b/maibu-external/src/main/java/com/maibu/uav/service/UAVCommamdHandler.java @@ -0,0 +1,20 @@ +package com.maibu.uav.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; +import com.maibu.core.business.inter.uav.UAVCommandInter; + +@Component +public class UAVCommamdHandler implements UAVCommandInter { + + @Autowired + private UAVService uService; + + @Override + public void createFlightTask(FlightTaskCreateDTO dto){ + uService.createFlightTask(dto); + } + +} diff --git a/maibu-external/src/main/java/com/maibu/uav/service/UAVService.java b/maibu-external/src/main/java/com/maibu/uav/service/UAVService.java index 00ef0fd..1d45162 100644 --- a/maibu-external/src/main/java/com/maibu/uav/service/UAVService.java +++ b/maibu-external/src/main/java/com/maibu/uav/service/UAVService.java @@ -3,6 +3,7 @@ package com.maibu.uav.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; import com.maibu.core.business.uav.IotUAVDevice; import com.maibu.core.domain.entity.SysRole; import com.maibu.core.redis.RedisCache; diff --git a/maibu-netty-server/src/main/java/com/maibu/controller/DeviceTaskController.java b/maibu-netty-server/src/main/java/com/maibu/controller/DeviceTaskController.java index 33a48b5..cd061e3 100644 --- a/maibu-netty-server/src/main/java/com/maibu/controller/DeviceTaskController.java +++ b/maibu-netty-server/src/main/java/com/maibu/controller/DeviceTaskController.java @@ -13,12 +13,12 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.maibu.core.business.DevicePlan; +import com.maibu.core.business.dto.DeviceTaskCommandDTO; import com.maibu.core.controller.BaseController; import com.maibu.core.domain.AjaxResult; import com.maibu.core.domain.model.LoginUser; import com.maibu.core.enums.DeviceTaskStaus; import com.maibu.core.page.TableDataInfo; -import com.maibu.dto.DeviceTaskCommandDTO; import com.maibu.dto.DeviceTaskQueryDTO; import com.maibu.memory.GlobalMemory; import com.maibu.memory.SiteMemory; diff --git a/maibu-netty-server/src/main/java/com/maibu/handler/MowerCommamdHandler.java b/maibu-netty-server/src/main/java/com/maibu/handler/MowerCommamdHandler.java new file mode 100644 index 0000000..6da9a23 --- /dev/null +++ b/maibu-netty-server/src/main/java/com/maibu/handler/MowerCommamdHandler.java @@ -0,0 +1,23 @@ +package com.maibu.handler; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.maibu.core.business.dto.DeviceTaskCommandDTO; +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; +import com.maibu.core.business.inter.mower.MowerCommandInter; +import com.maibu.core.business.inter.uav.UAVCommandInter; +import com.maibu.service.DeviceTaskService; + +@Component +public class MowerCommamdHandler implements MowerCommandInter { + + @Autowired + private DeviceTaskService dService; + + @Override + public void createDeviceTask(DeviceTaskCommandDTO dto) { + dService.createDeviceTask(dto, "system"); + } + +} diff --git a/maibu-netty-server/src/main/java/com/maibu/init/InitThread.java b/maibu-netty-server/src/main/java/com/maibu/init/InitThread.java index fe00fa2..ae5e323 100644 --- a/maibu-netty-server/src/main/java/com/maibu/init/InitThread.java +++ b/maibu-netty-server/src/main/java/com/maibu/init/InitThread.java @@ -16,15 +16,21 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import com.maibu.constant.FastBeeConstant; +import com.maibu.core.business.AlarmOrderConfig; import com.maibu.core.business.DevicePlan; import com.maibu.core.business.DevicePlanTask; import com.maibu.core.business.DeviceRunParam; +import com.maibu.core.business.ErrorIdentificationStandard; +import com.maibu.core.business.OrderModel; import com.maibu.core.domain.entity.SysSite; import com.maibu.core.enums.DeviceTaskStaus; import com.maibu.influxdb.util.InfluxDBUtil; +import com.maibu.mapper.AlarmOrderConfigMapper; import com.maibu.mapper.DevicePlanMapper; import com.maibu.mapper.DevicePlanTaskMapper; import com.maibu.mapper.DeviceRunParamMapper; +import com.maibu.mapper.ErrorIdentificationStandardMapper; +import com.maibu.mapper.OrderModelMapper; import com.maibu.mapper.SysSiteMapper; import com.maibu.memory.GlobalMemory; import com.maibu.memory.SiteMemory; @@ -63,6 +69,12 @@ public class InitThread implements ApplicationRunner { @Autowired private DeviceRunParamMapper deviceRunParamMapper; + @Autowired + private ErrorIdentificationStandardMapper errorIdentificationStandardMapper; + @Autowired + private OrderModelMapper orderModelMapper; + @Autowired + private AlarmOrderConfigMapper alarmOrderConfigMapper; @Value("${influxdb.url}") private String influxDBUrl; @@ -157,6 +169,43 @@ public class InitThread implements ApplicationRunner { } }); } + + List standadList = errorIdentificationStandardMapper.selectList(); + if (!CollectionUtils.isEmpty(standadList)) { + standadList.forEach(x -> { + Long orgId = x.getOrgId(); + Long siteId = x.getId(); + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); + if (siteMemory != null) { + siteMemory.saveErrorIdentificationStandard(x); + } + }); + } + + List orderModelList = orderModelMapper.selectList(); + if (!CollectionUtils.isEmpty(orderModelList)) { + orderModelList.forEach(x -> { + Long orgId = x.getOrgId(); + Long siteId = x.getId(); + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); + if (siteMemory != null) { + siteMemory.saveOrderModel(x); + } + }); + } + + List alarmOrderList = alarmOrderConfigMapper.selectList(); + if (!CollectionUtils.isEmpty(alarmOrderList)) { + alarmOrderList.forEach(x -> { + Long orgId = x.getOrgId(); + Long siteId = x.getId(); + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); + if (siteMemory != null) { + siteMemory.saveAlarmOrderConfig(x); + } + }); + } + // 未执行完的重复计划 LambdaQueryWrapperX query = new LambdaQueryWrapperX<>(); List list = Arrays.asList(DeviceTaskStaus.NEW.getCode(), DeviceTaskStaus.EXECUTING.getCode(), diff --git a/maibu-netty-server/src/main/java/com/maibu/netty/handler/CommandForwardHandler.java b/maibu-netty-server/src/main/java/com/maibu/netty/handler/CommandForwardHandler.java index e6ed5e1..d08f171 100644 --- a/maibu-netty-server/src/main/java/com/maibu/netty/handler/CommandForwardHandler.java +++ b/maibu-netty-server/src/main/java/com/maibu/netty/handler/CommandForwardHandler.java @@ -1,16 +1,8 @@ package com.maibu.netty.handler; -import com.maibu.common.CommandConstant; -import com.maibu.core.enums.ConnectorType; -import com.maibu.core.business.device.Connector; -import com.maibu.core.business.device.NettyDevice; -import com.maibu.manager.DeviceSessionManager; -import com.maibu.memory.GlobalMemory; -import io.netty.buffer.ByteBuf; -import io.netty.channel.Channel; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; +import java.util.List; +import java.util.Set; + import org.apache.commons.codec.binary.Hex; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,8 +10,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.Set; +import com.maibu.common.CommandConstant; +import com.maibu.core.business.device.Connector; +import com.maibu.core.business.device.NettyDevice; +import com.maibu.core.enums.ConnectorType; +import com.maibu.manager.DeviceSessionManager; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; @Component @ChannelHandler.Sharable diff --git a/maibu-netty-server/src/main/java/com/maibu/service/AlertPushService.java b/maibu-netty-server/src/main/java/com/maibu/service/AlertPushService.java index d3b5be7..39d625c 100644 --- a/maibu-netty-server/src/main/java/com/maibu/service/AlertPushService.java +++ b/maibu-netty-server/src/main/java/com/maibu/service/AlertPushService.java @@ -4,8 +4,9 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; -import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; @@ -19,17 +20,19 @@ import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiRobotSendRequest; import com.dingtalk.api.response.OapiRobotSendResponse; -import com.maibu.core.business.alarm_center.Alarm; +import com.maibu.core.business.AlarmOrderConfig; +import com.maibu.core.business.IOTWorkOrder; import com.maibu.core.business.alarm_center.AlarmMessage; import com.maibu.core.business.device.NettyDevice; +import com.maibu.core.redis.RedisCache; import com.maibu.dto.DeviceErrorPushDTO; -import com.maibu.dto.DeviceErrorPushDetail; import com.maibu.manager.DeviceSessionManager; import com.maibu.memory.GlobalMemory; import com.maibu.memory.SiteMemory; import com.maibu.service.impl.AlarmServiceImpl; +import com.maibu.service.impl.WorkOrderServiceImpl; import com.maibu.utils.DingTalkTemplate; -import com.maibu.utils.SecurityUtils; +import com.maibu.utils.json.JsonUtils; import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; @@ -44,6 +47,12 @@ public class AlertPushService { @Autowired private AlarmServiceImpl alarmService; + @Autowired + private RedisCache redisCache; + + @Autowired + private WorkOrderServiceImpl wService; + public void messagePushHandler(String deviceId, List dtos) { NettyDevice nettyDevice = sessionManager.getDevice(deviceId); if (nettyDevice != null && nettyDevice.getDevice() != null) { @@ -58,17 +67,48 @@ public class AlertPushService { String token = siteMemory.getSysSite().getDingTalkToken(); dtos.forEach(dto -> { if (!CollectionUtils.isEmpty(dto.getDetails())) { + List newList = new ArrayList<>(); + List workOrders = new ArrayList<>(); dto.getDetails().forEach(detail -> { if (dingTalkPush == 1) { - pushDingTalkMessage(secret, token, DingTalkTemplate.buildText(detail)); + String pushKey = "alarm:" + "dingtalk:" + deviceId + ":" + detail.getNo(); + Boolean exists = redisCache.hasKey(pushKey); + if (exists != null && !exists) { + pushDingTalkMessage(secret, token, DingTalkTemplate.buildText(detail)); + redisCache.setCacheObject(pushKey, JsonUtils.toJsonString(detail), 10, + TimeUnit.MINUTES); + } } if (emailPush == 1) { - pushEmailMessage(null, null); + String pushKey = "alarm:" + "email:" + deviceId + ":" + detail.getNo(); + Boolean exists = redisCache.hasKey(pushKey); + if (exists != null && !exists) { + pushEmailMessage(null, null); + redisCache.setCacheObject(pushKey, JsonUtils.toJsonString(detail), 10, + TimeUnit.MINUTES); + } + } + if (alertPush == 1) { + String pushKey = "alarm:" + "mqtt:" + deviceId + ":" + detail.getNo(); + Boolean exists = redisCache.hasKey(pushKey); + if (exists != null && !exists) { + newList.add(detail); + redisCache.setCacheObject(pushKey, JsonUtils.toJsonString(detail), 10, + TimeUnit.MINUTES); + } + } + AlarmOrderConfig config = siteMemory.getAlarmOrderConfig(detail.getNo()); + if (config != null && config.isAutoGenerateOrder()) { + IOTWorkOrder workOrder = wService.generateWorkOrders(siteId, deviceId, orgId, orgId); + workOrders.add(workOrder); } }); if (alertPush == 1) { alarmService.pushAlertMes(dto.getDetails()); } + if (!CollectionUtils.isEmpty(workOrders)) { + wService.saveAll(workOrders); + } } }); diff --git a/maibu-netty-server/src/main/java/com/maibu/service/DevicePathService.java b/maibu-netty-server/src/main/java/com/maibu/service/DevicePathService.java deleted file mode 100644 index 3155557..0000000 --- a/maibu-netty-server/src/main/java/com/maibu/service/DevicePathService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.maibu.service; - -import org.springframework.stereotype.Service; - -@Service -public class DevicePathService { - - - - - - -} diff --git a/maibu-netty-server/src/main/java/com/maibu/service/DeviceTaskService.java b/maibu-netty-server/src/main/java/com/maibu/service/DeviceTaskService.java index 6681fda..61571a4 100644 --- a/maibu-netty-server/src/main/java/com/maibu/service/DeviceTaskService.java +++ b/maibu-netty-server/src/main/java/com/maibu/service/DeviceTaskService.java @@ -21,12 +21,12 @@ import com.maibu.core.business.DevicePlanTask; import com.maibu.core.business.DeviceTaskPlanRule; import com.maibu.core.business.WorkRecord; import com.maibu.core.business.device.NettyDevice; +import com.maibu.core.business.dto.DeviceTaskCommandDTO; import com.maibu.core.domain.entity.SysSite; import com.maibu.core.domain.model.LoginUser; import com.maibu.core.enums.DeviceTaskStaus; import com.maibu.dto.DevicePlanStatisticsDTO; import com.maibu.dto.DevicePlanTaskStatisticsDTO; -import com.maibu.dto.DeviceTaskCommandDTO; import com.maibu.dto.DeviceTaskQueryDTO; import com.maibu.dto.DeviceWorkStatisticsDTO; import com.maibu.manager.DeviceSessionManager; diff --git a/maibu-netty-server/src/main/java/com/maibu/service/DeviceThreadService.java b/maibu-netty-server/src/main/java/com/maibu/service/DeviceThreadService.java index 6c5feee..2ea8e94 100644 --- a/maibu-netty-server/src/main/java/com/maibu/service/DeviceThreadService.java +++ b/maibu-netty-server/src/main/java/com/maibu/service/DeviceThreadService.java @@ -1,41 +1,5 @@ package com.maibu.service; -import cn.hutool.core.io.IoUtil; -import com.alibaba.fastjson2.JSON; -import com.maibu.common.CommandConstant; -import com.maibu.common.NettyCacheKey; -import com.maibu.core.business.DeviceRunningStatusHistory; -import com.maibu.core.business.DeviceStatusRecordDTO; -import com.maibu.core.enums.CompareEnum; -import com.maibu.core.enums.ErrorSource; -import com.maibu.core.enums.RespondCode; -import com.maibu.core.redis.RedisCache; -import com.maibu.dto.DeviceErrorPushDTO; -import com.maibu.dto.DeviceErrorPushDetail; -import com.maibu.core.business.device.NettyDevice; -import com.maibu.core.business.inter.WebsocketMesDispather; -import com.maibu.core.business.ErrorIdentificationStandard; -import com.maibu.core.business.alarm_center.AlarmMessage; -import com.maibu.manager.DeviceSessionManager; -import com.maibu.mapper.ErrorIdentificationStandardMapper; -import com.maibu.memory.GlobalMemory; -import com.maibu.memory.SiteMemory; -import com.maibu.mqtt.MqttTopic; -import com.maibu.utils.CommandUtils; -import com.maibu.utils.CompareUtils; -import com.maibu.utils.json.JsonUtils; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - import java.io.IOException; import java.lang.reflect.Field; import java.time.LocalDateTime; @@ -44,9 +8,44 @@ import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.maibu.common.NettyCacheKey; +import com.maibu.core.business.DeviceRunningStatusHistory; +import com.maibu.core.business.DeviceStatusRecordDTO; +import com.maibu.core.business.ErrorIdentificationStandard; +import com.maibu.core.business.alarm_center.AlarmMessage; +import com.maibu.core.business.device.NettyDevice; +import com.maibu.core.business.inter.WebsocketMesDispather; +import com.maibu.core.enums.CompareEnum; +import com.maibu.core.enums.ErrorSource; +import com.maibu.core.enums.RespondCode; +import com.maibu.core.redis.RedisCache; +import com.maibu.dto.DeviceErrorPushDTO; +import com.maibu.manager.DeviceSessionManager; +import com.maibu.mapper.ErrorIdentificationStandardMapper; +import com.maibu.memory.GlobalMemory; +import com.maibu.memory.SiteMemory; +import com.maibu.mqtt.MqttTopic; +import com.maibu.utils.CompareUtils; + +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; +import lombok.extern.slf4j.Slf4j; @Slf4j @Service @@ -55,9 +54,6 @@ public class DeviceThreadService { @Autowired private ResourceLoader resourceLoader; - @Autowired - private SiteMemory siteMemory; - @Autowired private RedisCache redisCache; @@ -76,6 +72,9 @@ public class DeviceThreadService { public void deviceErrorMonitor() throws InterruptedException, IOException { initStandard(); + // TODO fix 后续是否分多个线程 一个site一个线程 + // 有还需要更新接受故障方式。 + ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleWithFixedDelay(() -> { try { @@ -89,11 +88,16 @@ public class DeviceThreadService { recordDTO.getHistories() .sort(Comparator.comparing(DeviceRunningStatusHistory::getCreateTime).reversed()); DeviceRunningStatusHistory history = recordDTO.getHistories().get(0); - List compared = compareErrorStandard(history, - siteMemory.standards.get(ErrorSource.MOWER)); String[] parts = k.split(":"); String deviceId = parts[1]; + NettyDevice slaveDevice = sessionManager.getDevice(deviceId); + Long siteId = slaveDevice != null ? slaveDevice.getDevice().getSiteId() : null; + Long orgId = slaveDevice != null ? slaveDevice.getDevice().getOrgId() : null; + + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); + List compared = compareErrorStandard(siteId, orgId, history, + siteMemory.standards.get(ErrorSource.MOWER)); DeviceErrorPushDTO pushDTO = new DeviceErrorPushDTO(); pushDTO.setDeviceId(deviceId); @@ -116,30 +120,55 @@ public class DeviceThreadService { } catch (Exception e) { log.error("执行监测错误线程错误:{}", e.getMessage()); } - }, 0, 2, TimeUnit.MINUTES); + }, 0, 5, TimeUnit.SECONDS); } public void initStandard() throws IOException { - if (siteMemory.standards == null) { - List list = standardMapper.selectList(); - if (CollectionUtils.isEmpty(list)) { - // 读取resource目录下的device-config.json文件 - Resource resource = resourceLoader.getResource("classpath:errorStandard.json"); - // 使用fastjson2转换为DeviceConfig对象 - String jsonContent = IoUtil.readUtf8(resource.getInputStream()); - List newStandards = JSON.parseArray(jsonContent, - ErrorIdentificationStandard.class); - if (!CollectionUtils.isEmpty(newStandards)) { - standardMapper.insertBatch(newStandards); - siteMemory.standards = newStandards.stream() - .collect(java.util.stream.Collectors - .groupingBy(ErrorIdentificationStandard::getErrorSource)); + GlobalMemory.getAllSiteMemory().forEach(siteMemory -> { + if (siteMemory != null && siteMemory.standards == null) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErrorIdentificationStandard::getSiteId, siteMemory.sysSite.getId()); + List list = standardMapper.selectList(queryWrapper); + if (CollectionUtils.isEmpty(list)) { + try { + // 读取resource目录下的device-config.json文件 + Resource resource = resourceLoader.getResource("classpath:errorStandard.json"); + // 使用fastjson2转换为DeviceConfig对象 + String jsonContent; + jsonContent = IoUtil.readUtf8(resource.getInputStream()); + List newStandards = JSON.parseArray(jsonContent, + ErrorIdentificationStandard.class); + if (!CollectionUtils.isEmpty(newStandards)) { + newStandards.forEach(x -> { + x.setOrgId(siteMemory.sysSite.getOrgId()); + x.setSiteId(siteMemory.sysSite.getId()); + }); + standardMapper.insertBatch(newStandards); + siteMemory.standards = newStandards.stream() + .filter(e -> e.getErrorSource() != null) + .collect(Collectors.groupingBy( + ErrorIdentificationStandard::getErrorSource, + ConcurrentHashMap::new, + Collectors.toList())); + + } + } catch (IORuntimeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else { + siteMemory.standards = list.stream() + .filter(e -> e.getErrorSource() != null) + .collect(Collectors.groupingBy( + ErrorIdentificationStandard::getErrorSource, + ConcurrentHashMap::new, + Collectors.toList())); } - } else { - siteMemory.standards = list.stream() - .collect(java.util.stream.Collectors.groupingBy(ErrorIdentificationStandard::getErrorSource)); } - } + }); } public void pushErrorMessage(String deviceId, String dto) { @@ -165,7 +194,7 @@ public class DeviceThreadService { } } - public List compareErrorStandard(DeviceRunningStatusHistory history, + public List compareErrorStandard(Long siteId, Long orgId, DeviceRunningStatusHistory history, List standards) { if (history == null || CollectionUtils.isEmpty(standards)) return null; @@ -189,6 +218,8 @@ public class DeviceThreadService { alarm.setSuggestion(standard.getSuggestion()); alarm.setStatus("未处理"); alarm.setTime(LocalDateTime.now()); + alarm.setOrgId(orgId); + alarm.setSiteId(siteId); list.add(alarm); } } diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java index 080ef4f..1bc362d 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmController.java @@ -35,7 +35,7 @@ import lombok.extern.slf4j.Slf4j; @RestController @Slf4j @RequestMapping("/iot/alarm") -public class AlarmController extends BaseController{ +public class AlarmController extends BaseController { @Autowired @@ -45,9 +45,9 @@ public class AlarmController extends BaseController{ @GetMapping("/list") @ApiOperation("告警分页列表") public TableDataInfo list(AlarmQueryDTO queryDTO) { -// startPage(); -// return alarmService.selectAlarmPage(queryDTO); - return alarmService.selectAlarmPage(queryDTO); + startPage(); + + return getDataTable(alarmService.selectAlarmPage(queryDTO)); } // @PreAuthorize("@ss.hasPermi('iot:alarm:query')") diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmOrderConfigController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmOrderConfigController.java new file mode 100644 index 0000000..f385626 --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/AlarmOrderConfigController.java @@ -0,0 +1,42 @@ +package com.maibu.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.maibu.core.business.AlarmOrderConfig; +import com.maibu.core.controller.BaseController; +import com.maibu.core.domain.AjaxResult; +import com.maibu.core.page.TableDataInfo; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.service.impl.AlarmOrderConfigService; + +@RestController +@RequestMapping("/iot/alarmOrderConfig") +public class AlarmOrderConfigController extends BaseController { + + @Autowired + private AlarmOrderConfigService service; + + @PostMapping("/save") + public AjaxResult save(@RequestBody AlarmOrderConfig config) { + + return AjaxResult.success(service.save(config)); + } + + @PostMapping("/list") + public TableDataInfo list(@RequestBody BaseQueryDTO dto) { + startPage(); + return getDataTable(service.list(dto)); + } + + @PostMapping("/delete") + public AjaxResult delete(@RequestBody List ids) { + return AjaxResult.success(service.delete(ids)); + } + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceRunParamController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceRunParamController.java index f93103d..97c86e5 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceRunParamController.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/DeviceRunParamController.java @@ -14,7 +14,7 @@ import com.maibu.core.business.DeviceRunParam; import com.maibu.core.controller.BaseController; import com.maibu.core.domain.AjaxResult; import com.maibu.core.page.TableDataInfo; -import com.maibu.dto.DeviceRunParamQueryDTO; +import com.maibu.dto.BaseQueryDTO; import com.maibu.service.impl.DeviceRunParamService; @RestController @@ -31,7 +31,7 @@ public class DeviceRunParamController extends BaseController { } @PostMapping("/list") - public TableDataInfo list(@RequestBody DeviceRunParamQueryDTO dto) { + public TableDataInfo list(@RequestBody BaseQueryDTO dto) { startPage(); return getDataTable(service.list(dto)); } diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/ErrorIdentificationController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/ErrorIdentificationController.java index e2bc45c..ae9c4ec 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/ErrorIdentificationController.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/ErrorIdentificationController.java @@ -3,7 +3,6 @@ package com.maibu.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/IOTWorkOrderController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/IOTWorkOrderController.java index 8a65d8f..465126e 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/IOTWorkOrderController.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/IOTWorkOrderController.java @@ -19,6 +19,7 @@ import com.maibu.annotation.Log; import com.maibu.core.business.IOTWorkOrder; import com.maibu.core.business.dto.WorkOrderDispatchDTO; import com.maibu.core.business.dto.WorkOrderQueryDTO; +import com.maibu.core.business.dto.WorkOrderStartDTO; import com.maibu.core.controller.BaseController; import com.maibu.core.domain.AjaxResult; import com.maibu.core.page.TableDataInfo; @@ -77,12 +78,11 @@ public class IOTWorkOrderController extends BaseController { return toAjax(workOrderService.dispatchWorkOrder(dispatchDTO)); } - //@PreAuthorize("@ss.hasPermi('iot:workOrder:start')") - @Log(title = "工单开始", businessType = BusinessType.UPDATE) - @PutMapping("/start/{id}") + + @PostMapping("/start") @ApiOperation("开始执行工单") - public AjaxResult start(@PathVariable Long id) { - return toAjax(workOrderService.startWorkOrder(id)); + public AjaxResult start(@RequestBody WorkOrderStartDTO dto) { + return toAjax(workOrderService.startWorkOrder(dto)); } // @PreAuthorize("@ss.hasPermi('iot:workOrder:complete')") diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/OrderModelController.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/OrderModelController.java new file mode 100644 index 0000000..f52780d --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/controller/OrderModelController.java @@ -0,0 +1,45 @@ +package com.maibu.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.maibu.core.business.DeviceRunParam; +import com.maibu.core.business.OrderModel; +import com.maibu.core.controller.BaseController; +import com.maibu.core.domain.AjaxResult; +import com.maibu.core.page.TableDataInfo; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.service.impl.OrderModelService; + +@RestController +@RequestMapping("/iot/orderModel") +public class OrderModelController extends BaseController { + + @Autowired + private OrderModelService service; + + @PostMapping("/save") + public AjaxResult save(@RequestBody OrderModel orderModel) { + + return AjaxResult.success(service.save(orderModel)); + } + + @PostMapping("/list") + public TableDataInfo list(@RequestBody BaseQueryDTO dto) { + startPage(); + return getDataTable(service.list(dto)); + } + + @PostMapping("/delete") + public AjaxResult delete(@RequestBody List ids) { + return AjaxResult.success(service.delete(ids)); + } + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/DeviceRunParamQueryDTO.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/BaseQueryDTO.java similarity index 67% rename from maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/DeviceRunParamQueryDTO.java rename to maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/BaseQueryDTO.java index aef3743..44648b9 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/DeviceRunParamQueryDTO.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/BaseQueryDTO.java @@ -5,7 +5,8 @@ import com.maibu.core.domain.BaseEntity; import lombok.Data; @Data -public class DeviceRunParamQueryDTO extends BaseEntity { +public class BaseQueryDTO extends BaseEntity { private Long siteId; private String deviceId; + private Long orgId; } diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/ErrorQueryDTO.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/ErrorQueryDTO.java index 5b837fd..40bc06b 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/ErrorQueryDTO.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/dto/ErrorQueryDTO.java @@ -12,4 +12,6 @@ public class ErrorQueryDTO extends BaseEntity { private ErrorSource errorSource; private String errorCode; private ErrorLevel errorLevel; + private Long orgId; + private Long siteId; } diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java index de10cbf..938e8d1 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IAlarmService.java @@ -1 +1,36 @@ -package com.maibu.service; import com.baomidou.mybatisplus.extension.service.IService; import com.maibu.core.business.alarm_center.Alarm; import com.maibu.core.business.dto.AlarmHandleDTO; import com.maibu.core.business.dto.AlarmQueryDTO; import com.maibu.core.page.TableDataInfo; import java.util.List; import java.util.Map; public interface IAlarmService extends IService { TableDataInfo selectAlarmPage(AlarmQueryDTO queryDTO); List selectAlarmList(AlarmQueryDTO queryDTO); Alarm selectAlarmById(Long id); int insertAlarm(Alarm alarm); int updateAlarm(Alarm alarm); int handleAlarm(AlarmHandleDTO handleDTO); int deleteAlarmById(Long id); int deleteAlarmByIds(Long[] ids); Map getAlarmStatistics(); Map getAlarmStatistics(AlarmQueryDTO queryDTO); } \ No newline at end of file +package com.maibu.service; + + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.maibu.core.business.alarm_center.Alarm; +import com.maibu.core.business.dto.AlarmHandleDTO; +import com.maibu.core.business.dto.AlarmQueryDTO; + +public interface IAlarmService extends IService { + + List selectAlarmPage(AlarmQueryDTO queryDTO); + + List selectAlarmList(AlarmQueryDTO queryDTO); + + Alarm selectAlarmById(Long id); + + int insertAlarm(Alarm alarm); + + int updateAlarm(Alarm alarm); + + int handleAlarm(AlarmHandleDTO handleDTO); + + int deleteAlarmById(Long id); + + int deleteAlarmByIds(Long[] ids); + + Map getAlarmStatistics(); + + + Map getAlarmStatistics(AlarmQueryDTO queryDTO); + + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWebRtcService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWebRtcService.java deleted file mode 100644 index 8679b89..0000000 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWebRtcService.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.maibu.service; - -public interface IWebRtcService { - -} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWorkOrderService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWorkOrderService.java index ced5ea0..175a5a1 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWorkOrderService.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/IWorkOrderService.java @@ -1,14 +1,15 @@ package com.maibu.service; +import java.util.List; +import java.util.Map; + import com.baomidou.mybatisplus.extension.service.IService; import com.maibu.core.business.IOTWorkOrder; import com.maibu.core.business.dto.WorkOrderDispatchDTO; import com.maibu.core.business.dto.WorkOrderQueryDTO; +import com.maibu.core.business.dto.WorkOrderStartDTO; import com.maibu.core.page.TableDataInfo; -import java.util.List; -import java.util.Map; - public interface IWorkOrderService extends IService { TableDataInfo selectWorkOrderPage(WorkOrderQueryDTO queryDTO); @@ -23,7 +24,7 @@ public interface IWorkOrderService extends IService { int dispatchWorkOrder(WorkOrderDispatchDTO dispatchDTO); - int startWorkOrder(Long id); + boolean startWorkOrder(WorkOrderStartDTO dto); int completeWorkOrder(IOTWorkOrder workOrder); diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmOrderConfigService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmOrderConfigService.java new file mode 100644 index 0000000..85985ca --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmOrderConfigService.java @@ -0,0 +1,56 @@ +package com.maibu.service.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.maibu.core.business.AlarmOrderConfig; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.mapper.AlarmOrderConfigMapper; +import com.maibu.memory.GlobalMemory; +import com.maibu.memory.SiteMemory; + +@Service +public class AlarmOrderConfigService { + + @Autowired + private AlarmOrderConfigMapper alarmOrderConfigMapper; + + public boolean save(AlarmOrderConfig alarmOrderConfig) { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(alarmOrderConfig.getOrgId(), + alarmOrderConfig.getSiteId()); + if (siteMemory != null) { + siteMemory.saveAlarmOrderConfig(alarmOrderConfig); + } + return alarmOrderConfigMapper.saveOrUpdate(alarmOrderConfig); + } + + public List list(BaseQueryDTO dto) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (dto != null) { + if (dto.getSiteId() != null) { + queryWrapper.eq(AlarmOrderConfig::getSiteId, dto.getSiteId()); + } + } + return alarmOrderConfigMapper.selectList(queryWrapper); + } + + public int delete(List ids) { + List alarmOrderConfigs = alarmOrderConfigMapper + .selectBatchIds(ids); + if (!CollectionUtils.isEmpty(alarmOrderConfigs)) { + alarmOrderConfigs.forEach(x -> { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(x.getOrgId(), x.getSiteId()); + if (siteMemory != null) { + siteMemory.removeAlarmOrderConfig(x.getErrorCode()); + } + }); + } + int i = alarmOrderConfigMapper.deleteBatchIds(ids); + return i; + } + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java index 1b57bfe..3dbb0df 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/AlarmServiceImpl.java @@ -1,12 +1,23 @@ package com.maibu.service.impl; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import org.eclipse.paho.client.mqttv3.MqttException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.maibu.core.business.Device; import com.maibu.core.business.alarm_center.Alarm; import com.maibu.core.business.alarm_center.AlarmMessage; -import com.maibu.core.business.device.NettyDevice; import com.maibu.core.business.dto.AlarmHandleDTO; import com.maibu.core.business.dto.AlarmQueryDTO; import com.maibu.core.domain.model.LoginUser; @@ -24,18 +35,6 @@ import com.maibu.utils.json.JsonUtils; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - @Service @Slf4j public class AlarmServiceImpl extends ServiceImpl implements IAlarmService { @@ -43,27 +42,23 @@ public class AlarmServiceImpl extends ServiceImpl implements @Autowired private DeviceMapper deviceMapper; + @Autowired + private AlarmMapper alarmMapper; + @Override - public TableDataInfo selectAlarmPage(AlarmQueryDTO queryDTO) { - validateQueryParams(queryDTO); + public List selectAlarmPage(AlarmQueryDTO queryDTO) { + // validateQueryParams(queryDTO); LambdaQueryWrapper wrapper = buildQueryWrapper(queryDTO); - - Page page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize()); - Page result = baseMapper.selectPage(page, wrapper); - - TableDataInfo tableDataInfo = new TableDataInfo(); - tableDataInfo.setRows(result.getRecords()); - tableDataInfo.setTotal(result.getTotal()); - - return tableDataInfo; + List list = alarmMapper.selectList(wrapper); + return list; } @Override public List selectAlarmList(AlarmQueryDTO queryDTO) { validateQueryParams(queryDTO); LambdaQueryWrapper wrapper = buildQueryWrapper(queryDTO); - return baseMapper.selectList(wrapper); + return alarmMapper.selectList(wrapper); } @Override @@ -72,7 +67,7 @@ public class AlarmServiceImpl extends ServiceImpl implements LambdaQueryWrapper wrapper = buildQueryWrapper(queryDTO); - List alarms = baseMapper.selectList(wrapper); + List alarms = alarmMapper.selectList(wrapper); Map statistics = new HashMap<>(); statistics.put("total", alarms.size()); statistics.put("pending", alarms.stream().filter(a -> a.getHandleStatus() == 1).count()); @@ -172,70 +167,63 @@ public class AlarmServiceImpl extends ServiceImpl implements private LambdaQueryWrapper buildQueryWrapper(AlarmQueryDTO queryDTO) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - Long userId = SecurityUtils.getUserId(); - LoginUser loginUser = SecurityUtils.getLoginUser(); - Long userOrgId = loginUser.getOrgId(); - Long userSiteId = loginUser.getSiteId(); + // Long userId = SecurityUtils.getUserId(); + // LoginUser loginUser = SecurityUtils.getLoginUser(); + // Long userOrgId = loginUser.getOrgId(); + // Long userSiteId = loginUser.getSiteId(); // 数据权限过滤(核心修复:防止组织管理员越权) - if (!SecurityUtils.isAdmin(userId)) { - if (queryDTO.getSiteId() != null) { - // 修复:组织管理员指定场站查询时,必须同时满足 orgId 匹配 - String sql = "SELECT 1 FROM iot_device d WHERE d.device_id = iot_alarm.device_id AND d.site_id = {0}"; - if (userOrgId != null) { - sql += " AND d.org_id = " + userOrgId; - } - wrapper.exists(sql, queryDTO.getSiteId()); - } else if (userSiteId != null) { - wrapper.exists("SELECT 1 FROM iot_device d WHERE d.device_id = iot_alarm.device_id AND d.site_id = {0}", - userSiteId); - } else if (userOrgId != null) { - wrapper.exists("SELECT 1 FROM iot_device d WHERE d.device_id = iot_alarm.device_id AND d.org_id = {0}", - userOrgId); - } - } + // if (!SecurityUtils.isAdmin(userId)) { + // if (queryDTO.getSiteId() != null) { + // // 修复:组织管理员指定场站查询时,必须同时满足 orgId 匹配 + // String sql = "SELECT 1 FROM iot_device d WHERE d.device_id = + // iot_alarm.device_id AND d.site_id = {0}"; + // if (userOrgId != null) { + // sql += " AND d.org_id = " + userOrgId; + // } + // wrapper.exists(sql, queryDTO.getSiteId()); + // } else if (userSiteId != null) { + // wrapper.exists("SELECT 1 FROM iot_device d WHERE d.device_id = + // iot_alarm.device_id AND d.site_id = {0}", + // userSiteId); + // } else if (userOrgId != null) { + // wrapper.exists("SELECT 1 FROM iot_device d WHERE d.device_id = + // iot_alarm.device_id AND d.org_id = {0}", + // userOrgId); + // } + // } - if (queryDTO.getDeviceId() != null) { + if (!StringUtils.isEmpty(queryDTO.getAlarmNo())) { + wrapper.like(Alarm::getAlarmNo, queryDTO.getAlarmNo()); + } + if (!StringUtils.isEmpty(queryDTO.getDeviceId())) { + wrapper.eq(Alarm::getDeviceId, queryDTO.getDeviceId()); + } + if (queryDTO.getSiteId() != null) { + wrapper.eq(Alarm::getSiteId, queryDTO.getSiteId()); + } + if (!StringUtils.isEmpty(queryDTO.getDeviceId())) { wrapper.eq(Alarm::getDeviceId, queryDTO.getDeviceId()); } if (queryDTO.getAlarmLevel() != null) { wrapper.eq(Alarm::getAlarmLevel, queryDTO.getAlarmLevel()); } - if (queryDTO.getAlarmType() != null) { - wrapper.eq(Alarm::getAlarmType, queryDTO.getAlarmType()); - } if (queryDTO.getDeviceType() != null) { wrapper.eq(Alarm::getDeviceType, queryDTO.getDeviceType()); } - if (queryDTO.getHandleStatus() != null) { - wrapper.eq(Alarm::getHandleStatus, queryDTO.getHandleStatus()); - } - // if (queryDTO.getStartTime() != null) { - // wrapper.ge(Alarm::getAlarmTime, queryDTO.getStartTime()); - // } - // if (queryDTO.getEndTime() != null) { - // wrapper.le(Alarm::getAlarmTime, queryDTO.getEndTime()); - // } - if (queryDTO.getStartTime() != null) { wrapper.ge(Alarm::getAlarmTime, queryDTO.getStartTime()); } if (queryDTO.getEndTime() != null) { wrapper.le(Alarm::getAlarmTime, queryDTO.getEndTime()); } - if (StringUtils.isNotEmpty(queryDTO.getKeyword())) { - wrapper.and(w -> w.like(Alarm::getAlarmNo, queryDTO.getKeyword()) - .or() - .like(Alarm::getAlarmContent, queryDTO.getKeyword())); - } - wrapper.orderByDesc(Alarm::getAlarmTime); return wrapper; } @Override public Alarm selectAlarmById(Long id) { - Alarm alarm = baseMapper.selectById(id); + Alarm alarm = alarmMapper.selectById(id); if (alarm == null) throw new ServiceException("告警不存在"); @@ -255,24 +243,24 @@ public class AlarmServiceImpl extends ServiceImpl implements alarm.setTenantId(SecurityUtils.getLoginUser().getOrgId()); alarm.setAlarmTime(LocalDateTime.now()); alarm.setHandleStatus(1); - return baseMapper.insert(alarm); + return alarmMapper.insert(alarm); } @Override public int updateAlarm(Alarm alarm) { Long userId = SecurityUtils.getUserId(); if (!SecurityUtils.isAdmin(userId) && alarm.getId() != null) { - Alarm existAlarm = baseMapper.selectById(alarm.getId()); + Alarm existAlarm = alarmMapper.selectById(alarm.getId()); if (existAlarm != null && existAlarm.getDeviceId() != null) { validateDeviceAccess(existAlarm.getDeviceId()); } } - return baseMapper.updateById(alarm); + return alarmMapper.updateById(alarm); } @Override public int handleAlarm(AlarmHandleDTO handleDTO) { - Alarm alarm = baseMapper.selectById(handleDTO.getAlarmId()); + Alarm alarm = alarmMapper.selectById(handleDTO.getAlarmId()); if (alarm == null) throw new ServiceException("告警不存在"); @@ -292,19 +280,19 @@ public class AlarmServiceImpl extends ServiceImpl implements if (handleDTO.getHandleStatus() == 3) { updateAlarm.setRecoverTime(LocalDateTime.now()); } - return baseMapper.updateById(updateAlarm); + return alarmMapper.updateById(updateAlarm); } @Override public int deleteAlarmById(Long id) { Long userId = SecurityUtils.getUserId(); if (!SecurityUtils.isAdmin(userId)) { - Alarm alarm = baseMapper.selectById(id); + Alarm alarm = alarmMapper.selectById(id); if (alarm != null && alarm.getDeviceId() != null) { validateDeviceAccess(alarm.getDeviceId()); } } - return baseMapper.deleteById(id); + return alarmMapper.deleteById(id); } @Override @@ -312,13 +300,13 @@ public class AlarmServiceImpl extends ServiceImpl implements Long userId = SecurityUtils.getUserId(); if (!SecurityUtils.isAdmin(userId)) { for (Long id : ids) { - Alarm alarm = baseMapper.selectById(id); + Alarm alarm = alarmMapper.selectById(id); if (alarm != null && alarm.getDeviceId() != null) { validateDeviceAccess(alarm.getDeviceId()); } } } - return baseMapper.deleteBatchIds(Arrays.asList(ids)); + return alarmMapper.deleteBatchIds(Arrays.asList(ids)); } @Override @@ -341,7 +329,7 @@ public class AlarmServiceImpl extends ServiceImpl implements } wrapper.ge(Alarm::getAlarmTime, LocalDateTime.now().minusDays(7)); - List alarms = baseMapper.selectList(wrapper); + List alarms = alarmMapper.selectList(wrapper); Map statistics = new HashMap<>(); statistics.put("total", alarms.size()); statistics.put("pending", alarms.stream().filter(a -> a.getHandleStatus() == 1).count()); @@ -372,22 +360,26 @@ public class AlarmServiceImpl extends ServiceImpl implements alarm.setDeviceName(alarmMessage.getDeviceName()); alarm.setDeviceType(ErrorSource.MOWER); alarm.setAlarmTime(LocalDateTime.now()); + alarm.setOrgId(alarmMessage.getOrgId()); + alarm.setSiteId(alarmMessage.getSiteId()); + alarm.setAlarmTime(LocalDateTime.now()); pushErrorMessage(alarmMessage.getDeviceName(), JsonUtils.toJsonString(alarm)); list.add(alarm); } - baseMapper.insertBatch(list); + alarmMapper.saveOrUpdateBatch(list); // todo 推送websocket? } public void pushErrorMessage(String deviceId, String dto) { try { GlobalMemory.mqttClientUtil.publish(String.format(MqttTopic.DEVICE_ERROR_PUSH_TOPIC, deviceId), dto); - // List controlMasters = sessionManager.getAllSlaveControl(deviceId); + // List controlMasters = + // sessionManager.getAllSlaveControl(deviceId); // if (!CollectionUtils.isEmpty(controlMasters)) { - // controlMasters.forEach(x -> { - // websocketMesDispather.dispather(x.getConnectorId(), dto); - // log.info("推送错误信息 device:{},content:{}", deviceId, dto); - // }); + // controlMasters.forEach(x -> { + // websocketMesDispather.dispather(x.getConnectorId(), dto); + // log.info("推送错误信息 device:{},content:{}", deviceId, dto); + // }); // } } catch (MqttException e) { log.error("推送错误信息失败 device:{}error:{}", deviceId, e.getMessage()); diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceRunParamService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceRunParamService.java index d5a9be7..ffbd2f3 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceRunParamService.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/DeviceRunParamService.java @@ -1,6 +1,5 @@ package com.maibu.service.impl; -import java.util.Collection; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -10,7 +9,7 @@ import org.springframework.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.maibu.core.business.DeviceRunParam; -import com.maibu.dto.DeviceRunParamQueryDTO; +import com.maibu.dto.BaseQueryDTO; import com.maibu.mapper.DeviceRunParamMapper; import com.maibu.memory.GlobalMemory; import com.maibu.memory.SiteMemory; @@ -29,7 +28,7 @@ public class DeviceRunParamService { return deviceRunParamMapper.saveOrUpdate(deviceRunParam); } - public List list(DeviceRunParamQueryDTO dto) { + public List list(BaseQueryDTO dto) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (dto != null) { if (dto.getSiteId() != null) { @@ -65,3 +64,4 @@ public class DeviceRunParamService { } } + \ No newline at end of file diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/ErrorIdentificationService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/ErrorIdentificationService.java index 05bef23..80e8b38 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/ErrorIdentificationService.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/ErrorIdentificationService.java @@ -5,11 +5,14 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.maibu.core.business.ErrorIdentificationStandard; import com.maibu.dto.ErrorQueryDTO; import com.maibu.mapper.ErrorIdentificationStandardMapper; +import com.maibu.memory.GlobalMemory; +import com.maibu.memory.SiteMemory; @Service public class ErrorIdentificationService { @@ -18,6 +21,12 @@ public class ErrorIdentificationService { private ErrorIdentificationStandardMapper errorIdentificationStandardMapper; public boolean save(ErrorIdentificationStandard errorIdentificationStandard) { + + SiteMemory siteMemory = GlobalMemory.getSiteMemory(errorIdentificationStandard.getOrgId(), + errorIdentificationStandard.getSiteId()); + if (siteMemory != null) { + siteMemory.saveErrorIdentificationStandard(errorIdentificationStandard); + } return errorIdentificationStandardMapper.saveOrUpdate(errorIdentificationStandard); } @@ -36,11 +45,27 @@ public class ErrorIdentificationService { if (dto.getErrorSource() != null) { queryWrapper.eq(ErrorIdentificationStandard::getErrorSource, dto.getErrorSource()); } + if (dto.getOrgId() != null) { + queryWrapper.eq(ErrorIdentificationStandard::getOrgId, dto.getOrgId()); + } + if (dto.getSiteId() != null) { + queryWrapper.eq(ErrorIdentificationStandard::getSiteId, dto.getSiteId()); + } } return errorIdentificationStandardMapper.selectList(queryWrapper); } public int delete(List ids) { + List errorIdentificationStandards = errorIdentificationStandardMapper + .selectBatchIds(ids); + if (!CollectionUtils.isEmpty(errorIdentificationStandards)) { + errorIdentificationStandards.forEach(x -> { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(x.getOrgId(), x.getSiteId()); + if (siteMemory != null) { + siteMemory.removeErrorIdentificationStandard(x); + } + }); + } int i = errorIdentificationStandardMapper.deleteBatchIds(ids); return i; } diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/OrderModelService.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/OrderModelService.java new file mode 100644 index 0000000..e5d992f --- /dev/null +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/OrderModelService.java @@ -0,0 +1,111 @@ +package com.maibu.service.impl; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.maibu.core.business.OrderModel; +import com.maibu.core.business.dto.DeviceTaskCommandDTO; +import com.maibu.core.business.dto.uav.FlightTaskCreateDTO; +import com.maibu.core.business.inter.mower.MowerCommandDispather; +import com.maibu.core.business.inter.uav.UAVCommandDispather; +import com.maibu.core.enums.OrderType; +import com.maibu.dto.BaseQueryDTO; +import com.maibu.mapper.OrderModelMapper; +import com.maibu.memory.GlobalMemory; +import com.maibu.memory.SiteMemory; + +@Service +public class OrderModelService { + + @Autowired + private OrderModelMapper orderModelMapper; + + @Autowired + private UAVCommandDispather dispather; + + @Autowired + private MowerCommandDispather mowerDispather; + + public boolean save(OrderModel orderModel) { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orderModel.getOrgId(), + orderModel.getSiteId()); + if (siteMemory != null) { + siteMemory.saveOrderModel(orderModel); + } + return orderModelMapper.saveOrUpdate(orderModel); + } + + public List list(BaseQueryDTO dto) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (dto != null && dto.getSiteId() != null) { + queryWrapper.eq(OrderModel::getSiteId, dto.getSiteId()); + } + return orderModelMapper.selectList(queryWrapper); + } + + public OrderModel selectByDeviceId(String deviceId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (!StringUtils.isEmpty(deviceId)) { + queryWrapper.eq(OrderModel::getDeviceId, deviceId); + } + return orderModelMapper.selectOne(queryWrapper); + } + + public int delete(List ids) { + List orderModels = orderModelMapper + .selectBatchIds(ids); + if (!CollectionUtils.isEmpty(orderModels)) { + orderModels.forEach(x -> { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(x.getOrgId(), x.getSiteId()); + if (siteMemory != null) { + siteMemory.removeOrderModel(x.getId()); + } + }); + } + int i = orderModelMapper.deleteBatchIds(ids); + return i; + } + + public void createTask(String deviceId, Long siteId, Long orgId, Long modelId) { + SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); + OrderModel orderModel = siteMemory.getOrderModel(modelId); + OrderType orderType = orderModel.getOrderType(); + // 割草机 + if (orderType != null && orderType.getType() == 1) { + Long routeId = orderModel.getRouteId(); + DeviceTaskCommandDTO dto = new DeviceTaskCommandDTO(); + dto.setDeviceId(deviceId); + dto.setRouteId(routeId); + dto.setOrgId(orgId); + dto.setSiteId(siteId); + dto.setStartTime(LocalDateTime.now()); + mowerDispather.dispathDeviceTask(dto); + } + // 无人机 + if (orderType != null && orderType.getType() == 2) { + String waylineId = orderModel.getWaylineId(); + FlightTaskCreateDTO dto = new FlightTaskCreateDTO(); + dto.setWayline_uuid(waylineId); + dto.setSn(deviceId); + String name = orderType.getValue() + "-" + + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + dto.setName(name); + dto.setRth_altitude(orderModel.getRthAltitude()); + dto.setRth_mode(orderModel.getRthMode()); + dispather.dispathFightTask(dto); + } + // 其他 + if (orderType != null && orderType.getType() == 3) { + + } + + } + +} diff --git a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/WorkOrderServiceImpl.java b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/WorkOrderServiceImpl.java index aab2037..08d05eb 100644 --- a/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/WorkOrderServiceImpl.java +++ b/maibu-service/maibu-iot-service/src/main/java/com/maibu/service/impl/WorkOrderServiceImpl.java @@ -1,25 +1,5 @@ package com.maibu.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.maibu.core.business.Device; -import com.maibu.core.business.IOTWorkOrder; -import com.maibu.core.business.dto.WorkOrderDispatchDTO; -import com.maibu.core.business.dto.WorkOrderQueryDTO; -import com.maibu.core.domain.model.LoginUser; -import com.maibu.core.enums.ErrorLevel; -import com.maibu.core.page.TableDataInfo; -import com.maibu.exception.ServiceException; -import com.maibu.mapper.DeviceMapper; -import com.maibu.mapper.IotWorkOrderMapper; -import com.maibu.service.IAlarmService; -import com.maibu.service.IWorkOrderService; -import com.maibu.utils.SecurityUtils; -import com.maibu.utils.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; @@ -27,6 +7,32 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.maibu.core.business.Device; +import com.maibu.core.business.IOTWorkOrder; +import com.maibu.core.business.OrderModel; +import com.maibu.core.business.dto.WorkOrderDispatchDTO; +import com.maibu.core.business.dto.WorkOrderQueryDTO; +import com.maibu.core.business.dto.WorkOrderStartDTO; +import com.maibu.core.domain.model.LoginUser; +import com.maibu.core.enums.ErrorLevel; +import com.maibu.core.enums.OrderType; +import com.maibu.core.page.TableDataInfo; +import com.maibu.exception.ServiceException; +import com.maibu.mapper.DeviceMapper; +import com.maibu.mapper.IotWorkOrderMapper; +import com.maibu.mapper.OrderModelMapper; +import com.maibu.service.IAlarmService; +import com.maibu.service.IWorkOrderService; +import com.maibu.utils.SecurityUtils; +import com.maibu.utils.StringUtils; + @Service public class WorkOrderServiceImpl extends ServiceImpl implements IWorkOrderService { @@ -36,6 +42,15 @@ public class WorkOrderServiceImpl extends ServiceImpl() .eq(Device::getSiteId, siteId) - .eq(Device::getOrgId, userOrgId) - ); + .eq(Device::getOrgId, userOrgId)); if (count == 0) { throw new ServiceException("无权访问该场站"); } @@ -103,16 +119,17 @@ public class WorkOrderServiceImpl extends ServiceImpl() .eq(Device::getDeviceId, deviceId) - .select(Device::getOrgId, Device::getSiteId) - ); + .select(Device::getOrgId, Device::getSiteId)); if (device == null) { throw new ServiceException("设备不存在"); @@ -210,7 +227,8 @@ public class WorkOrderServiceImpl extends ServiceImpl ids = dto.getIds(); + List workOrders = baseMapper.selectBatchIds(ids); + if (CollectionUtils.isEmpty(workOrders)) { + throw new ServiceException("工单不存在"); } - - IOTWorkOrder updateWorkOrder = new IOTWorkOrder(); - updateWorkOrder.setId(id); - updateWorkOrder.setOrderStatus(3); - updateWorkOrder.setActualStartTime(LocalDateTime.now()); - updateWorkOrder.setUpdateTime(LocalDateTime.now()); - updateWorkOrder.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName()); - return baseMapper.updateById(updateWorkOrder); + Long userId = SecurityUtils.getUserId(); + String userName = SecurityUtils.getUsername(); + workOrders.forEach(workOrder -> { + workOrder.setOrderStatus(3); + workOrder.setActualStartTime(LocalDateTime.now()); + workOrder.setUpdateTime(LocalDateTime.now()); + workOrder.setUpdateBy(userName); + workOrder.setAssigneeId(userId); + workOrder.setAssigneeName(userName); + // todo 派发自定义的路径规划任务 + Long modelId = workOrder.getModelId(); + if (modelId == null) return; + Long siteId = workOrder.getSiteId(); + Long orgId = workOrder.getOrgId(); + orderModelService.createTask(dto.getDeviceId(), siteId, orgId, modelId); + }); + return baseMapper.saveOrUpdateBatch(workOrders); } @Override public int completeWorkOrder(IOTWorkOrder workOrder) { IOTWorkOrder existWorkOrder = baseMapper.selectById(workOrder.getId()); - if (existWorkOrder == null) throw new ServiceException("工单不存在"); + if (existWorkOrder == null) + throw new ServiceException("工单不存在"); Long userId = SecurityUtils.getUserId(); if (!SecurityUtils.isAdmin(userId)) { @@ -379,7 +407,8 @@ public class WorkOrderServiceImpl extends ServiceImpl w.getCreateTime().toLocalDate().equals(LocalDateTime.now().toLocalDate())) .count()); - statistics.put("highPriority", workOrders.stream().filter(w -> w.getPriorityLevel().equals(ErrorLevel.ERROR)).count()); + statistics.put("highPriority", + workOrders.stream().filter(w -> w.getPriorityLevel().equals(ErrorLevel.ERROR)).count()); return statistics; } @@ -469,8 +499,7 @@ public class WorkOrderServiceImpl extends ServiceImpl() .eq(Device::getDeviceId, alarm.getDeviceId()) - .select(Device::getOrgId, Device::getSiteId) - ); + .select(Device::getOrgId, Device::getSiteId)); if (device != null) { LoginUser loginUser = SecurityUtils.getLoginUser(); if (!loginUser.getOrgId().equals(device.getOrgId())) { @@ -483,7 +512,7 @@ public class WorkOrderServiceImpl extends ServiceImpl list) { + return iotWorkOrderMapper.saveOrUpdateBatch(list); + } + +} diff --git a/maibu-service/maibu-system-service/src/main/java/com/maibu/service/SysSiteService.java b/maibu-service/maibu-system-service/src/main/java/com/maibu/service/SysSiteService.java index 1fe7c41..49828df 100644 --- a/maibu-service/maibu-system-service/src/main/java/com/maibu/service/SysSiteService.java +++ b/maibu-service/maibu-system-service/src/main/java/com/maibu/service/SysSiteService.java @@ -1,7 +1,10 @@ package com.maibu.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.maibu.core.business.Device; +import com.maibu.core.domain.entity.SysRole; import com.maibu.core.domain.entity.SysSite; +import com.maibu.core.domain.model.LoginUser; import com.maibu.exception.ServiceException; import com.maibu.mapper.SysRegionMapper; import com.maibu.mapper.SysSiteMapper; @@ -14,6 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; @Service @@ -25,6 +29,9 @@ public class SysSiteService { @Autowired private SysRegionService sysRegionService; + @Autowired + private ISysRoleService roleService; + public List list(SysSite site) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (site != null && !StringUtils.isEmpty(site.getSiteName())) { @@ -72,4 +79,25 @@ public class SysSiteService { return sysSiteMapper.selectList(queryWrapper); } + public List selectByUserId(LoginUser loginUser) { + SysRole sysRole = roleService.selectRoleById(loginUser.getRoleId()); + if (sysRole != null) { + String roleKey = sysRole.getRoleKey(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (!StringUtils.isEmpty(roleKey)) { + if ("manager".equals(roleKey)) { + queryWrapper.eq(SysSite::getOrgId, loginUser.getOrgId()); + } else if ("siteManager".equals(roleKey)) { + queryWrapper.eq(SysSite::getId, loginUser.getSiteId()); + } else if ("admin".equals(roleKey)) { + + } else { + queryWrapper.eq(SysSite::getId, loginUser.getSiteId()); + } + return sysSiteMapper.selectList(queryWrapper); + } + } + return null; + } + }