Merge branch 'hhk' into main

plp
HuangHuiKang 2 weeks ago
commit 108c207b3d

@ -34,28 +34,30 @@ public interface ErrorCodeConstants {
ErrorCode ALERT_RECORD_NOT_EXISTS = new ErrorCode(1_003_000_003, "告警记录不存在");
//======================================数据采集相关=================================================
ErrorCode DEVICE_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_000, "采集设备模型不存在");
ErrorCode DEVICE_MODEL_CODE_EXISTS = new ErrorCode(1_003_000_000, "采集设备模型编码已存在");
ErrorCode DEVICE_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_000, "该设备模型ID不能为空");
ErrorCode POINT_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_000, "该点位参数ID不能为空");
ErrorCode DEVICE_MODEL_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_000, "采集设备模型点位不存在");
ErrorCode DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_000, "设备属性不存在");
ErrorCode DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "采集点分类不存在");
ErrorCode DEVICE_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_001, "采集设备模型不存在");
ErrorCode DEVICE_MODEL_CODE_EXISTS = new ErrorCode(1_003_000_002, "采集设备模型编码已存在");
ErrorCode DEVICE_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_003, "该设备模型ID不能为空");
ErrorCode POINT_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_004, "该点位参数ID不能为空");
ErrorCode DEVICE_MODEL_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_005, "采集设备模型点位不存在");
ErrorCode DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_006, "设备属性不存在");
ErrorCode DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS = new ErrorCode(1_003_000_007, "采集点分类不存在");
ErrorCode DEVICE_CODE_EXISTS = new ErrorCode(1_003_000_000, "采集点编码已存在");
ErrorCode DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS = new ErrorCode(1_003_000_000, "存在采集点类型已被引用,请先删除对应引用");
ErrorCode DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS = new ErrorCode(1_003_000_008, "存在采集点类型已被引用,请先删除对应引用");
ErrorCode ENDPOINT_DOES_NOT_EXIS = new ErrorCode(1_003_000_009, "暂未设置设备端点");
ErrorCode DEVICE_DOES_NOT_EXIST= new ErrorCode(1_003_000_010, "该采集设备不存在");
ErrorCode DEVICE_ID_DOES_NOT_EXIST= new ErrorCode(1_003_000_011, "该设备ID不能为空");
ErrorCode OPC_USERNAME_DOES_NOT_EXIST= new ErrorCode(1_003_000_012, "OPC连接账号不能为空");
ErrorCode OPC_PASSWORD_DOES_NOT_EXIST= new ErrorCode(1_003_000_013, "OPC连接账号不能为空");
ErrorCode OPC_CONNECT_FAILURE_DOES_NOT_EXIST= new ErrorCode(1_003_000_014, "OPC连接失败,请检测url及账号密码是否正确");
ErrorCode OPC_CLOSE_CONNECT_FAILURE= new ErrorCode(1_003_000_015, "OPC断开连接失败");
ErrorCode OPC_PARAMETER_DOES_NOT_EXIST= new ErrorCode(1_003_000_016, "连接关闭参数不存在");
ErrorCode ENDPOINT_DOES_NOT_EXIS = new ErrorCode(1_003_000_000, "暂未设置设备端点");
ErrorCode DEVICE_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "该采集设备不存在");
ErrorCode DEVICE_ID_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "该设备ID不能为空");
ErrorCode OPC_USERNAME_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "OPC连接账号不能为空");
ErrorCode OPC_PASSWORD_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "OPC连接账号不能为空");
ErrorCode OPC_CONNECT_FAILURE_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "OPC连接失败,请检测url及账号密码是否正确");
ErrorCode OPC_CLOSE_CONNECT_FAILURE= new ErrorCode(1_003_000_000, "OPC断开连接失败");
ErrorCode OPC_PARAMETER_DOES_NOT_EXIST= new ErrorCode(1_003_000_000, "连接关闭参数不存在");
ErrorCode CREATE_TDENGINE_FAILURE= new ErrorCode(1_003_000_000, "创建Tdengine子表失败");
// ======================================= 点位规则 ============================================
ErrorCode DEVICE_POINT_RULES_NOT_EXISTS = new ErrorCode(1_004_000_001, "点位规则不存在");
ErrorCode DEVICE_MODEL_RULES_NOT_EXISTS = new ErrorCode(1_004_000_002, "点位规则关联模型不存在");
ErrorCode DEVICE_OPERATION_RECORD_NOT_EXISTS = new ErrorCode(1_004_000_003, "运行记录不存在");
// ======================================= 配方 ============================================
ErrorCode RECIPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方主不存在");
ErrorCode RECIPE_TYPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方类型表(基础字典)不存在");
ErrorCode RECIPE_POINT_NOT_EXISTS = new ErrorCode(1_003_000_000, "手动配置参数表(绑定配方)不存在");

@ -6,13 +6,12 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO;
import cn.iocoder.yudao.module.infra.service.job.JobService;
import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicecontactmodel.vo.DeviceContactModelPageReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.service.device.DeviceService;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;
import com.fasterxml.jackson.core.JsonProcessingException;
@ -57,20 +56,6 @@ public class DeviceController {
DeviceDO device = deviceService.createDevice(createReqVO);
//初始化Td表
tDengineService.initDatabaseAndTable(device.getId());
//添加定时任务
// 创建 JobSaveReqVO 对象实例
// JobSaveReqVO jobSaveReqVO = new JobSaveReqVO();
// // 设置任务属性(根据您的业务需求设置具体值)
// jobSaveReqVO.setName("deviceJob_" + device.getId()); // 处理器名称唯一
// jobSaveReqVO.setHandlerName("deviceJob"); // 处理器名称唯一
// jobSaveReqVO.setHandlerParam("{\"deviceId\": \"" + device.getId() + "\"}"); // 使用设备ID作为参数值
// jobSaveReqVO.setCronExpression("*/5 * * * * ?"); // CRON表达式每5秒执行一次[1,3](@ref)
// jobSaveReqVO.setRetryCount(3); // 重试次数
// jobSaveReqVO.setRetryInterval(5000); // 重试间隔(毫秒)
// jobSaveReqVO.setMonitorTimeout(30000); // 监控超时时间(毫秒)
// jobSaveReqVO.setDeviceId(device.getId());
//
// jobService.createJob(jobSaveReqVO);
return success(device);
}
@ -103,8 +88,8 @@ public class DeviceController {
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device:query')")
public CommonResult<DeviceRespVO> getDevice(@RequestParam("id") Long id) {
DeviceDO device = deviceService.getDevice(id);
return success(BeanUtils.toBean(device, DeviceRespVO.class));
DeviceRespVO deviceRespVO = deviceService.getDevice(id);
return success(deviceRespVO);
}
@GetMapping("/page")

@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.util.opc.OpcUtils;
import cn.iocoder.yudao.module.iot.controller.admin.device.enums.TaskTypeEnum;
import cn.iocoder.yudao.module.iot.controller.admin.device.scheduled.core.Task;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;

@ -1,11 +1,9 @@
package cn.iocoder.yudao.module.iot.controller.admin.device.vo;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import com.alibaba.excel.annotation.ExcelProperty;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.iot.controller.admin.device.vo;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.PointRulesRespVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
@ -100,4 +102,6 @@ public class DeviceRespVO {
@ExcelProperty("密码")
private String password;
@Schema(description = "点位规则")
private List<DevicePointRulesDO> pointRulesVOList;
}

@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicecontactmodel;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -9,7 +9,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
@ -87,6 +86,17 @@ public class DeviceContactModelController {
return success(BeanUtils.toBean(pageResult, DeviceContactModelRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得采集设备模型-点位管理 列表")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device-model-attribute:query')")
public CommonResult<List<DeviceContactModelDO>> getDeviceContactModelList(@RequestParam("id") Long id) {
List<DeviceContactModelDO> deviceModelAttribute = deviceContactModelService.getDeviceContactModelList(id);
return success(deviceModelAttribute);
}
@GetMapping("/export-excel")
@Operation(summary = "导出采集设备模型-点位管理 Excel")
@PreAuthorize("@ss.hasPermission('iot:device-contact-model:export')")

@ -78,6 +78,16 @@ public class DeviceModelAttributeController {
return success(BeanUtils.toBean(deviceModelAttribute, DeviceModelAttributeRespVO.class));
}
@GetMapping("/list")
@Operation(summary = "获得采集设备模型-点位管理 列表")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device-model-attribute:query')")
public CommonResult<List<DeviceModelAttributeDO>> getDeviceModelAttributeList(@RequestParam("id") Long id) {
List<DeviceModelAttributeDO> deviceModelAttribute = deviceModelAttributeService.getDeviceModelAttributeList(id);
return success(deviceModelAttribute);
}
@GetMapping("/page")
@Operation(summary = "获得采集设备模型-点位管理分页")
@PreAuthorize("@ss.hasPermission('iot:device-model-attribute:query')")

@ -0,0 +1,111 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import cn.iocoder.yudao.module.iot.service.devicemodelrules.DeviceModelRulesService;
@Tag(name = "管理后台 - 点位规则关联模型")
@RestController
@RequestMapping("/iot/device-model-rules")
@Validated
public class DeviceModelRulesController {
@Resource
private DeviceModelRulesService deviceModelRulesService;
@PostMapping("/create")
@Operation(summary = "创建点位规则关联模型")
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:create')")
public CommonResult<Long> createDeviceModelRules(@Valid @RequestBody DeviceModelRulesSaveReqVO createReqVO) {
return success(deviceModelRulesService.createDeviceModelRules(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新点位规则关联模型")
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:update')")
public CommonResult<Boolean> updateDeviceModelRules(@Valid @RequestBody DeviceModelRulesSaveReqVO updateReqVO) {
deviceModelRulesService.updateDeviceModelRules(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除点位规则关联模型")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:delete')")
public CommonResult<Boolean> deleteDeviceModelRules(@RequestParam("id") Long id) {
deviceModelRulesService.deleteDeviceModelRules(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得点位规则关联模型")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:query')")
public CommonResult<DeviceModelRulesRespVO> getDeviceModelRules(@RequestParam("id") Long id) {
DeviceModelRulesDO deviceModelRules = deviceModelRulesService.getDeviceModelRules(id);
DeviceModelRulesRespVO deviceModelRulesRespVO = BeanUtils.toBean(deviceModelRules, DeviceModelRulesRespVO.class);
if (StringUtils.isNotBlank(deviceModelRulesRespVO.getFieldRule())){
List<PointRulesRespVO> pointRulesVOList = JSON.parseArray(deviceModelRulesRespVO.getFieldRule(), PointRulesRespVO.class);
deviceModelRulesRespVO.setPointRulesVOList(pointRulesVOList);
}
return success(deviceModelRulesRespVO);
}
@GetMapping("/page")
@Operation(summary = "获得点位规则关联模型分页")
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:query')")
public CommonResult<PageResult<DeviceModelRulesRespVO>> getDeviceModelRulesPage(@Valid DeviceModelRulesPageReqVO pageReqVO) {
PageResult<DeviceModelRulesDO> pageResult = deviceModelRulesService.getDeviceModelRulesPage(pageReqVO);
PageResult<DeviceModelRulesRespVO> modelRulesRespVOPageResult = BeanUtils.toBean(pageResult, DeviceModelRulesRespVO.class);
for (DeviceModelRulesRespVO deviceModelRulesRespVO : modelRulesRespVOPageResult.getList()) {
if (StringUtils.isNotBlank(deviceModelRulesRespVO.getFieldRule())) {
List<PointRulesRespVO> pointRulesVOList = JSON.parseArray(deviceModelRulesRespVO.getFieldRule(), PointRulesRespVO.class);
deviceModelRulesRespVO.setPointRulesVOList(pointRulesVOList);
}
}
return success(modelRulesRespVOPageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出点位规则关联模型 Excel")
@PreAuthorize("@ss.hasPermission('iot:device-model-rules:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDeviceModelRulesExcel(@Valid DeviceModelRulesPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeviceModelRulesDO> list = deviceModelRulesService.getDeviceModelRulesPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "点位规则关联模型.xls", "数据", DeviceModelRulesRespVO.class,
BeanUtils.toBean(list, DeviceModelRulesRespVO.class));
}
}

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 点位规则关联模型分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeviceModelRulesPageReqVO extends PageParam {
@Schema(description = "标识符")
private String identifier;
@Schema(description = "名称", example = "王五")
private String fieldName;
@Schema(description = "规则")
private String fieldRule;
@Schema(description = "默认值")
private String defaultValue;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "关联设备模型Id", example = "13397")
private Long modelId;
}

@ -0,0 +1,46 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 点位规则关联模型 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DeviceModelRulesRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10916")
@ExcelProperty("ID")
private Long id;
@Schema(description = "标识符")
@ExcelProperty("标识符")
private String identifier;
@Schema(description = "名称", example = "王五")
@ExcelProperty("名称")
private String fieldName;
@Schema(description = "规则")
@ExcelProperty("规则")
private String fieldRule;
@Schema(description = "默认值")
@ExcelProperty("默认值")
private String defaultValue;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "关联设备模型Id", example = "13397")
@ExcelProperty("关联设备模型Id")
private Long modelId;
@Schema(description = "点位规则")
private List<PointRulesRespVO> pointRulesVOList;
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 点位规则关联模型新增/修改 Request VO")
@Data
public class DeviceModelRulesSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10916")
private Long id;
@Schema(description = "标识符")
private String identifier;
@Schema(description = "名称", example = "王五")
private String fieldName;
@Schema(description = "规则")
private String fieldRule;
@Schema(description = "默认值")
private String defaultValue;
@Schema(description = "关联设备模型Id", example = "13397")
private Long modelId;
@Schema(description = "点位规则列表", implementation = PointRulesRespVO.class)
private List<PointRulesRespVO> pointRulesVOList;
}

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 点位具体规则 Resp VO")
@Data
public class PointRulesRespVO {
@Schema(description = "点位规则")
private String rule;
@Schema(description = "点位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10916")
private Long id;
@Schema(description = "符号")
private String operator;
@Schema(description = "符号值")
private String operatorRule;
@Schema(description = "规则值")
private String ruleValue;
}

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Schema(description = "管理后台 - 点位规则 Resp VO")
@Data
public class RulesRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10916")
private Long id;
@Schema(description = "标识符")
private String identifier;
@Schema(description = "名称")
private String fieldName;
@Schema(description = "默认值")
private String defaultValue;
@ArraySchema(schema = @Schema(implementation = PointRulesRespVO.class))
private List<PointRulesRespVO> pointRulesVOList;
}

@ -0,0 +1,95 @@
package cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO;
import cn.iocoder.yudao.module.iot.service.deviceoperationrecord.DeviceOperationRecordService;
@Tag(name = "管理后台 - 运行记录")
@RestController
@RequestMapping("/iot/device-operation-record")
@Validated
public class DeviceOperationRecordController {
@Resource
private DeviceOperationRecordService deviceOperationRecordService;
@PostMapping("/create")
@Operation(summary = "创建运行记录")
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:create')")
public CommonResult<Long> createDeviceOperationRecord(@Valid @RequestBody DeviceOperationRecordSaveReqVO createReqVO) {
return success(deviceOperationRecordService.createDeviceOperationRecord(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新运行记录")
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:update')")
public CommonResult<Boolean> updateDeviceOperationRecord(@Valid @RequestBody DeviceOperationRecordSaveReqVO updateReqVO) {
deviceOperationRecordService.updateDeviceOperationRecord(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除运行记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:delete')")
public CommonResult<Boolean> deleteDeviceOperationRecord(@RequestParam("id") Long id) {
deviceOperationRecordService.deleteDeviceOperationRecord(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得运行记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:query')")
public CommonResult<DeviceOperationRecordRespVO> getDeviceOperationRecord(@RequestParam("id") Long id) {
DeviceOperationRecordDO deviceOperationRecord = deviceOperationRecordService.getDeviceOperationRecord(id);
return success(BeanUtils.toBean(deviceOperationRecord, DeviceOperationRecordRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得运行记录分页")
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:query')")
public CommonResult<PageResult<DeviceOperationRecordRespVO>> getDeviceOperationRecordPage(@Valid DeviceOperationRecordPageReqVO pageReqVO) {
PageResult<DeviceOperationRecordDO> pageResult = deviceOperationRecordService.getDeviceOperationRecordPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, DeviceOperationRecordRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出运行记录 Excel")
@PreAuthorize("@ss.hasPermission('iot:device-operation-record:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDeviceOperationRecordExcel(@Valid DeviceOperationRecordPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DeviceOperationRecordDO> list = deviceOperationRecordService.getDeviceOperationRecordPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "运行记录.xls", "数据", DeviceOperationRecordRespVO.class,
BeanUtils.toBean(list, DeviceOperationRecordRespVO.class));
}
}

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 运行记录分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DeviceOperationRecordPageReqVO extends PageParam {
@Schema(description = "设备ID", example = "18965")
private Long deviceId;
@Schema(description = "模型ID", example = "26876")
private Long modelId;
@Schema(description = "规则值")
private String rule;
@Schema(description = "地址值")
private String addressValue;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "类型 1-RUNNING 2-ALRAM", example = "2")
private Integer recordType;
}

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 运行记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DeviceOperationRecordRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4283")
@ExcelProperty("ID")
private Long id;
@Schema(description = "设备ID", example = "18965")
@ExcelProperty("设备ID")
private Long deviceId;
@Schema(description = "模型ID", example = "26876")
@ExcelProperty("模型ID")
private Long modelId;
@Schema(description = "规则值")
@ExcelProperty("规则值")
private String rule;
@Schema(description = "地址值")
@ExcelProperty("地址值")
private String addressValue;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "类型 1-RUNNING 2-ALRAM", example = "2")
@ExcelProperty("类型 1-RUNNING 2-ALRAM")
private Integer recordType;
}

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 运行记录新增/修改 Request VO")
@Data
public class DeviceOperationRecordSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4283")
private Long id;
@Schema(description = "设备ID", example = "18965")
private Long deviceId;
@Schema(description = "模型ID", example = "26876")
private Long modelId;
@Schema(description = "规则值")
private String rule;
@Schema(description = "地址值")
private String addressValue;
@Schema(description = "类型 1-RUNNING 2-ALRAM", example = "2")
private Integer recordType;
}

@ -0,0 +1,107 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicepointrules;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.PointRulesRespVO;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import cn.iocoder.yudao.module.iot.service.devicepointrules.DevicePointRulesService;
@Tag(name = "管理后台 - 点位规则")
@RestController
@RequestMapping("/iot/device-point-rules")
@Validated
public class DevicePointRulesController {
@Resource
private DevicePointRulesService devicePointRulesService;
@PostMapping("/create")
@Operation(summary = "创建点位规则")
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:create')")
public CommonResult<Long> createDevicePointRules(@Valid @RequestBody DevicePointRulesSaveReqVO createReqVO) {
return success(devicePointRulesService.createDevicePointRules(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新点位规则")
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:update')")
public CommonResult<Boolean> updateDevicePointRules(@Valid @RequestBody DevicePointRulesSaveReqVO updateReqVO) {
devicePointRulesService.updateDevicePointRules(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除点位规则")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:delete')")
public CommonResult<Boolean> deleteDevicePointRules(@RequestParam("id") Long id) {
devicePointRulesService.deleteDevicePointRules(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得点位规则")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:query')")
public CommonResult<DevicePointRulesRespVO> getDevicePointRules(@RequestParam("id") Long id) {
DevicePointRulesDO devicePointRules = devicePointRulesService.getDevicePointRules(id);
return success(BeanUtils.toBean(devicePointRules, DevicePointRulesRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得点位规则分页")
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:query')")
public CommonResult<PageResult<DevicePointRulesRespVO>> getDevicePointRulesPage(@Valid DevicePointRulesPageReqVO pageReqVO) {
PageResult<DevicePointRulesDO> pageResult = devicePointRulesService.getDevicePointRulesPage(pageReqVO);
PageResult<DevicePointRulesRespVO> rulesRespVOPageResult = BeanUtils.toBean(pageResult, DevicePointRulesRespVO.class);
for (DevicePointRulesRespVO devicePointRulesRespVO : rulesRespVOPageResult.getList()) {
if (StringUtils.isNotBlank(devicePointRulesRespVO.getFieldRule())) {
List<PointRulesRespVO> pointRulesVOList = JSON.parseArray(devicePointRulesRespVO.getFieldRule(), PointRulesRespVO.class);
devicePointRulesRespVO.setPointRulesVOList(pointRulesVOList);
}
}
return success(rulesRespVOPageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出点位规则 Excel")
@PreAuthorize("@ss.hasPermission('iot:device-point-rules:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportDevicePointRulesExcel(@Valid DevicePointRulesPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DevicePointRulesDO> list = devicePointRulesService.getDevicePointRulesPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "点位规则.xls", "数据", DevicePointRulesRespVO.class,
BeanUtils.toBean(list, DevicePointRulesRespVO.class));
}
}

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 点位规则分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class DevicePointRulesPageReqVO extends PageParam {
@Schema(description = "标识符")
private String identifier;
@Schema(description = "名称", example = "赵六")
private String fieldName;
@Schema(description = "规则")
private String fieldRule;
@Schema(description = "默认值")
private String defaultValue;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "设备模型Id", example = "19582")
private Long deviceId;
}

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.PointRulesRespVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 点位规则 Response VO")
@Data
@ExcelIgnoreUnannotated
public class DevicePointRulesRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13120")
@ExcelProperty("ID")
private Long id;
@Schema(description = "标识符")
@ExcelProperty("标识符")
private String identifier;
@Schema(description = "名称", example = "赵六")
@ExcelProperty("名称")
private String fieldName;
@Schema(description = "规则")
@ExcelProperty("规则")
private String fieldRule;
@Schema(description = "默认值")
@ExcelProperty("默认值")
private String defaultValue;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "设备模型Id", example = "19582")
@ExcelProperty("设备模型Id")
private Long deviceId;
@Schema(description = "点位规则")
private List<PointRulesRespVO> pointRulesVOList;
}

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.PointRulesRespVO;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 点位规则新增/修改 Request VO")
@Data
public class DevicePointRulesSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13120")
private Long id;
@Schema(description = "标识符")
private String identifier;
@Schema(description = "名称", example = "赵六")
private String fieldName;
@Schema(description = "规则")
private String fieldRule;
@Schema(description = "默认值")
private String defaultValue;
@Schema(description = "设备模型Id", example = "19582")
private Long deviceId;
@Schema(description = "点位规则列表", implementation = PointRulesRespVO.class)
private List<PointRulesRespVO> pointRulesVOList;
}

@ -1,16 +1,9 @@
package cn.iocoder.yudao.module.iot.controller.admin.recipedevicerecord;
import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO;
import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipeRespVO;
import cn.iocoder.yudao.module.iot.controller.admin.recipepointrecord.vo.RecipePointRecordSaveReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipeplandetail.RecipePlanDetailDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipepointrecord.RecipePointRecordDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.service.device.DeviceService;
import cn.iocoder.yudao.module.iot.service.recipe.RecipeService;
import cn.iocoder.yudao.module.iot.service.recipeplandetail.RecipePlanDetailService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -19,7 +12,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
@ -42,17 +34,8 @@ import cn.iocoder.yudao.module.iot.service.recipedevicerecord.RecipeDeviceRecord
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import cn.iocoder.yudao.module.iot.controller.admin.recipedevicerecord.vo.*;
// 新增必要的导入
import cn.iocoder.yudao.module.iot.service.recipedeviceattribute.RecipeDeviceAttributeService;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.dal.devicecontactmodel;
package cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("iot_device_model_rules")
@KeySequence("iot_device_model_rules_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeviceModelRulesDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
*
*/
private String identifier;
/**
*
*/
private String fieldName;
/**
*
*/
private String fieldRule;
/**
*
*/
private String defaultValue;
/**
* Id
*/
private Long modelId;
}

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("iot_device_operation_record")
@KeySequence("iot_device_operation_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DeviceOperationRecordDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* ID
*/
private Long deviceId;
/**
* ID
*/
private Long modelId;
/**
*
*/
private String rule;
/**
*
*/
private String addressValue;
/**
* 1-RUNNING 2-ALRAM
*/
private Integer recordType;
}

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("iot_device_point_rules")
@KeySequence("iot_device_point_rules_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DevicePointRulesDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
*
*/
private String identifier;
/**
*
*/
private String fieldName;
/**
*
*/
private String fieldRule;
/**
*
*/
private String defaultValue;
/**
* Id
*/
private Long deviceId;
}

@ -3,14 +3,10 @@ package cn.iocoder.yudao.module.iot.dal.mysql.deviceattributetype;
import java.util.*;
import java.util.stream.Collectors;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import com.alibaba.excel.util.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.deviceattributetype.vo.*;

@ -7,10 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelattribute.vo.DeviceModelAttributePageReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import com.alibaba.excel.util.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.iot.dal.mysql.devicemodelrules;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DeviceModelRulesMapper extends BaseMapperX<DeviceModelRulesDO> {
default PageResult<DeviceModelRulesDO> selectPage(DeviceModelRulesPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DeviceModelRulesDO>()
.eqIfPresent(DeviceModelRulesDO::getIdentifier, reqVO.getIdentifier())
.likeIfPresent(DeviceModelRulesDO::getFieldName, reqVO.getFieldName())
.eqIfPresent(DeviceModelRulesDO::getFieldRule, reqVO.getFieldRule())
.eqIfPresent(DeviceModelRulesDO::getDefaultValue, reqVO.getDefaultValue())
.betweenIfPresent(DeviceModelRulesDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DeviceModelRulesDO::getModelId, reqVO.getModelId())
.orderByDesc(DeviceModelRulesDO::getId));
}
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.iot.dal.mysql.deviceoperationrecord;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DeviceOperationRecordMapper extends BaseMapperX<DeviceOperationRecordDO> {
default PageResult<DeviceOperationRecordDO> selectPage(DeviceOperationRecordPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DeviceOperationRecordDO>()
.eqIfPresent(DeviceOperationRecordDO::getDeviceId, reqVO.getDeviceId())
.eqIfPresent(DeviceOperationRecordDO::getModelId, reqVO.getModelId())
.eqIfPresent(DeviceOperationRecordDO::getRule, reqVO.getRule())
.eqIfPresent(DeviceOperationRecordDO::getAddressValue, reqVO.getAddressValue())
.betweenIfPresent(DeviceOperationRecordDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DeviceOperationRecordDO::getRecordType, reqVO.getRecordType())
.orderByDesc(DeviceOperationRecordDO::getId));
}
}

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.iot.dal.mysql.devicepointrules;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface DevicePointRulesMapper extends BaseMapperX<DevicePointRulesDO> {
default PageResult<DevicePointRulesDO> selectPage(DevicePointRulesPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DevicePointRulesDO>()
.eqIfPresent(DevicePointRulesDO::getIdentifier, reqVO.getIdentifier())
.likeIfPresent(DevicePointRulesDO::getFieldName, reqVO.getFieldName())
.eqIfPresent(DevicePointRulesDO::getFieldRule, reqVO.getFieldRule())
.eqIfPresent(DevicePointRulesDO::getDefaultValue, reqVO.getDefaultValue())
.betweenIfPresent(DevicePointRulesDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DevicePointRulesDO::getDeviceId, reqVO.getDeviceId())
.orderByDesc(DevicePointRulesDO::getId));
}
}

@ -1,30 +1,19 @@
package cn.iocoder.yudao.module.iot.job;
import cn.iocoder.yudao.framework.common.util.opc.OpcUtils;
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAttributeMapper;
import cn.iocoder.yudao.module.iot.service.device.DeviceService;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_DOES_NOT_EXIST;
@Slf4j
@Component

@ -8,7 +8,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.device.vo.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicecontactmodel.vo.DeviceContactModelPageReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import com.fasterxml.jackson.core.JsonProcessingException;
import javax.validation.Valid;
@ -52,7 +52,7 @@ public interface DeviceService {
* @param id
* @return
*/
DeviceDO getDevice(Long id);
DeviceRespVO getDevice(Long id);
DeviceDO getDeviceByName(String name);
DeviceDO getDeviceByTopic(String topic);

@ -15,13 +15,17 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.mqttdatarecord.MqttDataRecordDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.deviceattributetype.DeviceAttributeTypeMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodel.DeviceModelMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAttributeMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelrules.DeviceModelRulesMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicepointrules.DevicePointRulesMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.mqttdatarecord.MqttDataRecordMapper;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceAttributeDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceAttributeMapper;
@ -92,6 +96,13 @@ public class DeviceServiceImpl implements DeviceService {
@Resource
private TaskSchedulerManager taskSchedulerManager;
@Resource
private DeviceModelRulesMapper deviceModelRulesMapper;
@Resource
private DevicePointRulesMapper devicePointRulesMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public DeviceDO createDevice(DeviceSaveReqVO createReqVO) {
@ -111,6 +122,8 @@ public class DeviceServiceImpl implements DeviceService {
device.setTenantId("1");
deviceMapper.insert(device);
//新增模板点位
LambdaQueryWrapper<DeviceModelAttributeDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DeviceModelAttributeDO::getDeviceModelId,createReqVO.getDeviceModelId());
List<DeviceModelAttributeDO> deviceModelAttributeDOS = deviceModelAttributeMapper.selectList(lambdaQueryWrapper);
@ -130,10 +143,32 @@ public class DeviceServiceImpl implements DeviceService {
//创建时序数据库
// createTDengine(device.getId());
// 返回
//新增规则点位
addNewRulePoints(createReqVO.getDeviceModelId(),device.getId());
return device;
}
private void addNewRulePoints(Long deviceModelId,Long deviceId) {
List<DevicePointRulesDO> devicePointRulesDOList = new ArrayList<>();
DeviceModelDO deviceModelDO = deviceModelMapper.selectById(deviceModelId);
if(deviceModelDO == null){
return;
}
List<DeviceModelRulesDO> deviceModelRulesDOList = deviceModelRulesMapper.selectList(Wrappers.<DeviceModelRulesDO>lambdaQuery()
.eq(DeviceModelRulesDO::getModelId, deviceModelDO.getId()));
for (DeviceModelRulesDO deviceModelRulesDO : deviceModelRulesDOList) {
DevicePointRulesDO devicePointRulesDO = new DevicePointRulesDO();
BeanUtils.copyProperties(deviceModelRulesDO, devicePointRulesDO);
devicePointRulesDO.setDeviceId(deviceId);
devicePointRulesDOList.add(devicePointRulesDO);
}
devicePointRulesMapper.insertBatch(devicePointRulesDOList);
}
//@Scheduled(cron="0/5 * * * * ? ") //每1秒执行一次
public void updateDeviceStatus(){
List<DeviceDO> list = deviceMapper.selectList();
@ -191,8 +226,20 @@ public class DeviceServiceImpl implements DeviceService {
}
@Override
public DeviceDO getDevice(Long id) {
return deviceMapper.selectById(id);
public DeviceRespVO getDevice(Long id) {
DeviceDO deviceDO = deviceMapper.selectById(id);
DeviceRespVO deviceRespVO = BeanUtils.toBean(deviceDO, DeviceRespVO.class);
List<DevicePointRulesDO> devicePointRulesDOList = devicePointRulesMapper.selectList(Wrappers.<DevicePointRulesDO>lambdaQuery()
.eq(DevicePointRulesDO::getDeviceId, id));
//设置点位规则
if (!devicePointRulesDOList.isEmpty()){
deviceRespVO.setPointRulesVOList(devicePointRulesDOList);
}
return deviceRespVO;
}
@Override
public DeviceDO getDeviceByName(String name) {

@ -1,16 +1,14 @@
package cn.iocoder.yudao.module.iot.service.deviceattributetype;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodel.DeviceModelMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAttributeMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.constraints.NotEmpty;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
@ -19,7 +17,6 @@ import java.util.*;
import cn.iocoder.yudao.module.iot.controller.admin.deviceattributetype.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.mysql.deviceattributetype.DeviceAttributeTypeMapper;

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.service.devicecontactmodel;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicecontactmodel.vo.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import java.util.List;
@ -52,4 +52,5 @@ public interface DeviceContactModelService {
*/
PageResult<DeviceContactModelDO> getDeviceContactModelPage(DeviceContactModelPageReqVO pageReqVO);
List<DeviceContactModelDO> getDeviceContactModelList(Long id);
}

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.iot.service.devicecontactmodel;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -73,4 +74,9 @@ public class DeviceContactModelServiceImpl implements DeviceContactModelService
return deviceContactModelMapper.selectPage(pageReqVO);
}
@Override
public List<DeviceContactModelDO> getDeviceContactModelList(Long id) {
return deviceContactModelMapper.selectList(Wrappers.<DeviceContactModelDO>lambdaQuery().eq(DeviceContactModelDO::getDeviceId,id));
}
}

@ -4,9 +4,12 @@ import cn.hutool.core.bean.BeanUtil;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelattribute.DeviceModelAttributeMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelrules.DeviceModelRulesMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.checkerframework.checker.units.qual.A;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -43,6 +46,9 @@ public class DeviceModelServiceImpl implements DeviceModelService {
@Resource
private DeviceModelAttributeMapper deviceModelAttributeMapper;
@Resource
private DeviceModelRulesMapper deviceModelRulesMapper;
@Override
public Long createDeviceModel(DeviceModelSaveReqVO createReqVO) {
//编码重复判断
@ -57,10 +63,37 @@ public class DeviceModelServiceImpl implements DeviceModelService {
// 插入
DeviceModelDO deviceModel = BeanUtils.toBean(createReqVO, DeviceModelDO.class);
deviceModelMapper.insert(deviceModel);
//插入点位规则
insertionPointRule(deviceModel.getId());
// 返回
return deviceModel.getId();
}
private void insertionPointRule(Long id) {
//TODO 待优化RUNNING及ALRAM
List<DeviceModelRulesDO> deviceModelRulesDOList = new ArrayList<>();
DeviceModelRulesDO deviceModelRulesDO = new DeviceModelRulesDO();
deviceModelRulesDO.setIdentifier("RUNNING");
deviceModelRulesDO.setFieldName("运行");
deviceModelRulesDO.setDefaultValue("运行");
deviceModelRulesDO.setModelId(id);
deviceModelRulesDOList.add(deviceModelRulesDO);
DeviceModelRulesDO deviceModelRulesDO1 = new DeviceModelRulesDO();
deviceModelRulesDO1.setIdentifier("ALARM");
deviceModelRulesDO1.setFieldName("报警");
deviceModelRulesDO1.setDefaultValue("报警");
deviceModelRulesDO1.setModelId(id);
deviceModelRulesDOList.add(deviceModelRulesDO1);
deviceModelRulesMapper.insertBatch(deviceModelRulesDOList);
}
@Override
public void updateDeviceModel(DeviceModelSaveReqVO updateReqVO) {
//编码重复判断

@ -53,4 +53,6 @@ public interface DeviceModelAttributeService {
PageResult<DeviceModelAttributeRespVO> getDeviceModelAttributePage(DeviceModelAttributePageReqVO pageReqVO);
List<Map<String, Object>> operationAnalysisDetails(Long deviceId, Long modelId,String collectionStartTime, String collectionEndTime);
List<DeviceModelAttributeDO> getDeviceModelAttributeList(Long id);
}

@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttr
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.deviceattributetype.DeviceAttributeTypeMapper;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp;
import java.sql.Wrapper;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -201,5 +203,11 @@ public class DeviceModelAttributeServiceImpl implements DeviceModelAttributeServ
return resultList;
}
@Override
public List<DeviceModelAttributeDO> getDeviceModelAttributeList(Long id) {
return deviceModelAttributeMapper.selectList(Wrappers.<DeviceModelAttributeDO>lambdaQuery().eq(DeviceModelAttributeDO::getDeviceModelId,id));
}
}

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.iot.service.devicemodelrules;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface DeviceModelRulesService {
/**
*
*
* @param createReqVO
* @return
*/
Long createDeviceModelRules(@Valid DeviceModelRulesSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateDeviceModelRules(@Valid DeviceModelRulesSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteDeviceModelRules(Long id);
/**
*
*
* @param id
* @return
*/
DeviceModelRulesDO getDeviceModelRules(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<DeviceModelRulesDO> getDeviceModelRulesPage(DeviceModelRulesPageReqVO pageReqVO);
}

@ -0,0 +1,81 @@
package cn.iocoder.yudao.module.iot.service.devicemodelrules;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicemodelrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelrules.DeviceModelRulesDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.mysql.devicemodelrules.DeviceModelRulesMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class DeviceModelRulesServiceImpl implements DeviceModelRulesService {
@Resource
private DeviceModelRulesMapper deviceModelRulesMapper;
@Override
public Long createDeviceModelRules(DeviceModelRulesSaveReqVO createReqVO) {
// 插入
DeviceModelRulesDO deviceModelRules = BeanUtils.toBean(createReqVO, DeviceModelRulesDO.class);
deviceModelRulesMapper.insert(deviceModelRules);
// 返回
return deviceModelRules.getId();
}
@Override
public void updateDeviceModelRules(DeviceModelRulesSaveReqVO updateReqVO) {
// 校验存在
validateDeviceModelRulesExists(updateReqVO.getId());
// 更新
DeviceModelRulesDO updateObj = BeanUtils.toBean(updateReqVO, DeviceModelRulesDO.class);
if (!updateReqVO.getPointRulesVOList().isEmpty()){
String jsonString = JSON.toJSONString(updateReqVO.getPointRulesVOList());
updateObj.setFieldRule(jsonString);
}
deviceModelRulesMapper.updateById(updateObj);
}
@Override
public void deleteDeviceModelRules(Long id) {
// 校验存在
validateDeviceModelRulesExists(id);
// 删除
deviceModelRulesMapper.deleteById(id);
}
private void validateDeviceModelRulesExists(Long id) {
if (deviceModelRulesMapper.selectById(id) == null) {
throw exception(DEVICE_MODEL_RULES_NOT_EXISTS);
}
}
@Override
public DeviceModelRulesDO getDeviceModelRules(Long id) {
return deviceModelRulesMapper.selectById(id);
}
@Override
public PageResult<DeviceModelRulesDO> getDeviceModelRulesPage(DeviceModelRulesPageReqVO pageReqVO) {
return deviceModelRulesMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.iot.service.deviceoperationrecord;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface DeviceOperationRecordService {
/**
*
*
* @param createReqVO
* @return
*/
Long createDeviceOperationRecord(@Valid DeviceOperationRecordSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateDeviceOperationRecord(@Valid DeviceOperationRecordSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteDeviceOperationRecord(Long id);
/**
*
*
* @param id
* @return
*/
DeviceOperationRecordDO getDeviceOperationRecord(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<DeviceOperationRecordDO> getDeviceOperationRecordPage(DeviceOperationRecordPageReqVO pageReqVO);
}

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.iot.service.deviceoperationrecord;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.iot.controller.admin.deviceoperationrecord.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceoperationrecord.DeviceOperationRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.mysql.deviceoperationrecord.DeviceOperationRecordMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class DeviceOperationRecordServiceImpl implements DeviceOperationRecordService {
@Resource
private DeviceOperationRecordMapper deviceOperationRecordMapper;
@Override
public Long createDeviceOperationRecord(DeviceOperationRecordSaveReqVO createReqVO) {
// 插入
DeviceOperationRecordDO deviceOperationRecord = BeanUtils.toBean(createReqVO, DeviceOperationRecordDO.class);
deviceOperationRecordMapper.insert(deviceOperationRecord);
// 返回
return deviceOperationRecord.getId();
}
@Override
public void updateDeviceOperationRecord(DeviceOperationRecordSaveReqVO updateReqVO) {
// 校验存在
validateDeviceOperationRecordExists(updateReqVO.getId());
// 更新
DeviceOperationRecordDO updateObj = BeanUtils.toBean(updateReqVO, DeviceOperationRecordDO.class);
deviceOperationRecordMapper.updateById(updateObj);
}
@Override
public void deleteDeviceOperationRecord(Long id) {
// 校验存在
validateDeviceOperationRecordExists(id);
// 删除
deviceOperationRecordMapper.deleteById(id);
}
private void validateDeviceOperationRecordExists(Long id) {
if (deviceOperationRecordMapper.selectById(id) == null) {
throw exception(DEVICE_OPERATION_RECORD_NOT_EXISTS);
}
}
@Override
public DeviceOperationRecordDO getDeviceOperationRecord(Long id) {
return deviceOperationRecordMapper.selectById(id);
}
@Override
public PageResult<DeviceOperationRecordDO> getDeviceOperationRecordPage(DeviceOperationRecordPageReqVO pageReqVO) {
return deviceOperationRecordMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.iot.service.devicepointrules;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* Service
*
* @author
*/
public interface DevicePointRulesService {
/**
*
*
* @param createReqVO
* @return
*/
Long createDevicePointRules(@Valid DevicePointRulesSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateDevicePointRules(@Valid DevicePointRulesSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteDevicePointRules(Long id);
/**
*
*
* @param id
* @return
*/
DevicePointRulesDO getDevicePointRules(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<DevicePointRulesDO> getDevicePointRulesPage(DevicePointRulesPageReqVO pageReqVO);
}

@ -0,0 +1,81 @@
package cn.iocoder.yudao.module.iot.service.devicepointrules;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.iot.controller.admin.devicepointrules.vo.*;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicepointrules.DevicePointRulesDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.mysql.devicepointrules.DevicePointRulesMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class DevicePointRulesServiceImpl implements DevicePointRulesService {
@Resource
private DevicePointRulesMapper devicePointRulesMapper;
@Override
public Long createDevicePointRules(DevicePointRulesSaveReqVO createReqVO) {
// 插入
DevicePointRulesDO devicePointRules = BeanUtils.toBean(createReqVO, DevicePointRulesDO.class);
devicePointRulesMapper.insert(devicePointRules);
// 返回
return devicePointRules.getId();
}
@Override
public void updateDevicePointRules(DevicePointRulesSaveReqVO updateReqVO) {
// 校验存在
validateDevicePointRulesExists(updateReqVO.getId());
// 更新
DevicePointRulesDO updateObj = BeanUtils.toBean(updateReqVO, DevicePointRulesDO.class);
if (!updateReqVO.getPointRulesVOList().isEmpty()){
String jsonString = JSON.toJSONString(updateReqVO.getPointRulesVOList());
updateObj.setFieldRule(jsonString);
}
devicePointRulesMapper.updateById(updateObj);
}
@Override
public void deleteDevicePointRules(Long id) {
// 校验存在
validateDevicePointRulesExists(id);
// 删除
devicePointRulesMapper.deleteById(id);
}
private void validateDevicePointRulesExists(Long id) {
if (devicePointRulesMapper.selectById(id) == null) {
throw exception(DEVICE_POINT_RULES_NOT_EXISTS);
}
}
@Override
public DevicePointRulesDO getDevicePointRules(Long id) {
return devicePointRulesMapper.selectById(id);
}
@Override
public PageResult<DevicePointRulesDO> getDevicePointRulesPage(DevicePointRulesPageReqVO pageReqVO) {
return devicePointRulesMapper.selectPage(pageReqVO);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.devicemodelrules.DeviceModelRulesMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.deviceoperationrecord.DeviceOperationRecordMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.devicepointrules.DevicePointRulesMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -1,8 +1,5 @@
package cn.iocoder.yudao.module.mes.service.criticalcomponent;
import cn.iocoder.yudao.module.iot.dal.dataobject.deviceattributetype.DeviceAttributeTypeDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodelattribute.DeviceModelAttributeDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.repairtems.RepairTemsDO;
import cn.iocoder.yudao.module.mes.dal.mysql.deviceledger.DeviceLedgerMapper;
@ -13,7 +10,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@ -21,14 +17,11 @@ import java.util.stream.Collectors;
import cn.iocoder.yudao.module.mes.controller.admin.criticalcomponent.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.dal.mysql.criticalcomponent.CriticalComponentMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_TYPE_NOT_EXISTS;
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_ATTRIBUTE_TYPE_REFERENCES_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/**

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mes.service.energydevice;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.service.device.TDengineService;
import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.*;
@ -15,7 +15,6 @@ import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;

@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
import cn.iocoder.yudao.module.iot.dal.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.devicecontactmodel.DeviceContactModelDO;
import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper;
import cn.iocoder.yudao.module.iot.dal.mysql.devicecontactmodel.DeviceContactModelMapper;
import cn.iocoder.yudao.module.iot.service.device.DeviceService;
@ -34,7 +34,6 @@ import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_NO_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
/**

@ -117,7 +117,7 @@ public class TicketManagementServiceImpl implements TicketManagementService {
public List<TicketResultsDO> getMaintenanceByDeviceId(Long id,String startTime,String endTime,String ids) {
DeviceLedgerDO deviceLedgerDO = deviceLedgerMapper.selectById(id);
//点检列表
//保养列表
List<TicketResultsDO> inspectionList = ticketResultsMapper.findByDeviceIdAndPlanType(id, PlanTypeEnum.MAINTENANCE.getCode(),startTime,endTime,ids);
if(CollectionUtils.isNotEmpty(inspectionList)){
deviceLedgerDO.setInspectionList(inspectionList);

@ -14,10 +14,11 @@
SELECT
mtr.*,
mtm.task_time,
mtm.operator
CONCAT( '(', su.username, ')', su.nickname) as operator
from
besure.mes_ticket_results mtr
left join besure.mes_ticket_management mtm on mtm.id = mtr.management_id
left join besure.system_users su on mtm.operator = su.id
WHERE 1=1
<!-- ID集合过滤 -->
<if test="ids != null and ids != ''">

Loading…
Cancel
Save