Преглед на файлове

Merge branch 'master' of http://git.nzklabs.com:3000/huangyuanhao/jfcloud-coldchain

# Conflicts:
#	snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
jackzhou преди 6 месеца
родител
ревизия
f70310eb9a
променени са 12 файла, в които са добавени 258 реда и са изтрити 22 реда
  1. 5 3
      snowy-admin-web/src/views/basicset/monitor/form.vue
  2. 29 13
      snowy-admin-web/src/views/motoring/location/form.vue
  3. 2 2
      snowy-admin-web/src/views/motoring/location/index.vue
  4. 3 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java
  5. 147 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDeviceTran.java
  6. 2 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java
  7. 12 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
  8. 11 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java
  9. 7 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java
  10. 13 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  11. 23 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
  12. 4 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java

+ 5 - 3
snowy-admin-web/src/views/basicset/monitor/form.vue

@@ -25,7 +25,7 @@
 			<a-form-item label="监控位置区域">
 				<a-input v-model:value="formData.monitorPoint" placeholder="请输入监控位置区域" allow-clear />
 			</a-form-item>
-			<a-form-item label="报警上限">
+			<a-form-item label="报警上限" name="limitUp">
 				<a-input-number
 					id="inputNumber"
 					v-model:value="formData.limitUp"
@@ -34,7 +34,7 @@
 					style="width: 100%"
 				/>
 			</a-form-item>
-			<a-form-item label="报警下限">
+			<a-form-item label="报警下限" name="limitDown">
 				<a-input-number
 					id="inputNumber"
 					v-model:value="formData.limitDown"
@@ -64,7 +64,9 @@
 	// 默认要校验的
 	const formRules = {
 		name: [required('请输入对象名称')],
-		status: [required('请选择对象状态')]
+		status: [required('请选择对象状态')],
+		limitUp: [required('请输入报警上限')],
+		limitDown: [required('请输入报警下限')]
 	}
 
 	// 表单数据

+ 29 - 13
snowy-admin-web/src/views/motoring/location/form.vue

@@ -1,6 +1,6 @@
 <template>
 	<xn-form-container
-		:title="formData.id ? '编辑区域' : '新增区域'"
+		:title="formData.id ? '编辑点位' : '新增点位'"
 		:width="'800px'"
 		:visible="visible"
 		:destroy-on-close="true"
@@ -15,11 +15,11 @@
 		>
 			<a-row :gutter="10">
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-					<a-form-item label="区域名称" name="name">
-						<a-input v-model:value="formData.name" placeholder="请输入区域名称" allow-clear />
+					<a-form-item label="点位名称" name="name">
+						<a-input v-model:value="formData.name" placeholder="请输入点位名称" allow-clear />
 					</a-form-item>
 				</a-col>
-				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+				<!-- <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 					<a-form-item label="上级区域:" name="parentId">
 						<a-tree-select
 							v-model:value="formData.parentId"
@@ -38,7 +38,7 @@
 							treeLine
 						/>
 					</a-form-item>
-				</a-col>
+				</a-col> -->
 
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 					<a-form-item label="监控对象" name="monitorTargetId">
@@ -47,6 +47,7 @@
 							v-model:value="formData.monitorTargetId"
 							:options="monitorTargetOptions"
 							placeholder="请选择监控对象"
+							@change="monitorTargetIdChange"
 						/>
 					</a-form-item>
 				</a-col>
@@ -58,14 +59,14 @@
 							v-model:value="formData.monitorDeviceId"
 							:options="memListOptions"
 							placeholder="请选择监控设备"
-							@change="monitorTargetChange"
+							@change="monitorDeviceIdChange"
 						/>
 					</a-form-item>
 				</a-col>
 
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
 					<a-form-item label="传感器编号" name="sensorCode">
-						<a-input v-model:value="formData.sensorCode" placeholder="请输入传感器编号" allow-clear />
+						<a-input v-model:value="formData.sensorCode" disabled placeholder="请输入传感器编号" allow-clear />
 					</a-form-item>
 				</a-col>
 
@@ -93,7 +94,7 @@
 				</a-col>
 
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-					<a-form-item label="报警上限">
+					<a-form-item label="报警上限" name="limitUp">
 						<a-input-number
 							id="inputNumber"
 							v-model:value="formData.limitUp"
@@ -104,7 +105,7 @@
 					</a-form-item>
 				</a-col>
 				<a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-					<a-form-item label="报警下限">
+					<a-form-item label="报警下限" name="limitDown">
 						<a-input-number
 							id="inputNumber"
 							v-model:value="formData.limitDown"
@@ -143,7 +144,7 @@
 	// 默认要校验的
 	const formRules = {
 		name: [required('请输入区域名称')],
-		parentId: [required('请选择上级区域')],
+		// parentId: [required('请选择上级区域')],
 		monitorTargetId: [required('请选择监控对象')],
 		monitorDeviceId: [required('请选择监控设备')],
 		sensorRoute: [required('请输入传感器路数')],
@@ -158,7 +159,9 @@
 	const onOpen = (record, parentId) => {
 		loadData()
 		visible.value = true
-		formData.value = {}
+		formData.value = {
+			parentId: 0
+		}
 		if (parentId) {
 			formData.value.parentId = parentId
 		}
@@ -182,6 +185,7 @@
 		setupApi.setupList({ isAll: false }).then((res) => {
 			monitorTargetOptions.value = (res || []).map((item) => {
 				return {
+					...item,
 					value: item['id'],
 					label: item['name']
 				}
@@ -189,8 +193,10 @@
 		})
 		// 获取监控设备
 		memApi.memList({ isAll: false }).then((res) => {
+			console.log(res)
 			memListOptions.value = (res || []).map((item) => {
 				return {
+					...item,
 					value: item['id'],
 					label: item['deviceName'],
 					modelName: item['modelName'],
@@ -202,16 +208,26 @@
 	}
 
 	// 选中监控设备
-	const monitorTargetChange = (value) => {
-		console.log(value, '1')
+	const monitorDeviceIdChange = (value) => {
 		if (value) {
 			const data = memListOptions.value.find((item) => item.value === value)
+			// console.log(data, '1')
+			formData.value.sensorCode = data.deviceCode //设备编号
 			formData.value.modelName = data.modelName //监控设备型号
 			formData.value.deviceCode = data.deviceCode //冷链编号
 			sensorRouteMax.value = data.sensorCount //传感器路数的最大值
 		}
 	}
 
+	// 选中监控对象
+	const monitorTargetIdChange = (value) => {
+		if (value) {
+			const item = monitorTargetOptions.value.find((item) => item.value === value)
+			formData.value.limitUp = item.limitUp //监控设备型号
+			formData.value.limitDown = item.limitDown //冷链编号
+		}
+	}
+
 	// 关闭抽屉
 	const onClose = () => {
 		formRef.value.resetFields()

+ 2 - 2
snowy-admin-web/src/views/motoring/location/index.vue

@@ -21,8 +21,8 @@
 								class="ant-advanced-search-form"
 							>
 								<a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
-									><a-form-item label="区域名称" name="name">
-										<a-input v-model:value="searchFormState.name" placeholder="请输入区域名称" /> </a-form-item
+									><a-form-item label="点位名称" name="name">
+										<a-input v-model:value="searchFormState.name" placeholder="请输入点位名称" /> </a-form-item
 								></a-col>
 							</a-form>
 						</a-row>

+ 3 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java

@@ -123,11 +123,12 @@ public class MonitorDeviceController {
 
     /**
      * 获取监控设备列表
+     * @param 是否查询所有
      */
     @Operation(summary = "获取监控设备列表")
     @SaCheckPermission("/coldchain/monitordevice/list")
     @GetMapping("/coldchain/monitordevice/list")
-    public CommonResult<List<MonitorDevice>> list() {
-        return CommonResult.data(monitorDeviceService.list());
+    public CommonResult<List<MonitorDevice>> list(Boolean isAll) {
+        return CommonResult.data(monitorDeviceService.myList(isAll));
     }
 }

+ 147 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDeviceTran.java

@@ -0,0 +1,147 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.Date;
+
+/**
+ * 采集器管理实体
+ *
+ * @author 黄渊昊
+ * @date 2024/11/13 16:55
+ **/
+@Getter
+@Setter
+@TableName("monitor_device")
+public class MonitorDeviceTran extends CommonEntity {
+
+    /**
+     * 设备唯一标识符,UUID
+     */
+    @TableId
+    @Schema(description = "设备唯一标识符,UUID")
+    private String id;
+
+    /**
+     * 设备名称
+     */
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    /**
+     * 设备编码
+     */
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    /**
+     * 设备型号
+     */
+    @Schema(description = "设备型号")
+    private String modelName;
+
+    /**
+     * 最后心跳时间
+     */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /**
+     * 设备状态(1:正常,2:闲置)
+     */
+    @Schema(description = "设备状态(1:正常,2:闲置)")
+    private String status = MonitorDeviceStatusEnum.NORMAL.getValue();
+
+    /**
+     * 传感器路数
+     */
+    @Schema(description = "传感器路数")
+    @NotNull(message = "传感器路数不能为空")
+    @Size(min = 1, max = 4, message = "传感器路数的大小必须在1到10之间")
+    private Integer sensorCount;
+
+    /**
+     * 最近登录时间
+     */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
+
+    /**
+     * 排序码
+     */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /**
+     * 扩展信息
+     */
+    @Schema(description = "扩展信息")
+    private String extraInfo;
+
+    /**
+     * 删除标志
+     */
+    @Schema(description = "删除标志")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @Schema(description = "记录创建时间")
+    private Date createdAt;
+
+    /**
+     * 记录创建用户
+     */
+    @Schema(description = "记录创建用户")
+    private String createdBy;
+
+    /**
+     * 记录修改时间
+     */
+    @Schema(description = "记录修改时间")
+    private Date updatedAt;
+
+    /**
+     * 记录修改用户
+     */
+    @Schema(description = "记录修改用户")
+    private String updatedBy;
+
+    /**
+     * 设备参数编号信息
+     */
+    @Schema(description = "设备参数编号信息")
+    @TableField(value = "param_ids")//, typeHandler = JacksonTypeHandler.class)
+//    private List<Integer> paramIds;
+    private String paramIds;
+
+    /**
+     * 设备参数信息
+     */
+    @Schema(description = "设备参数信息")
+    @TableField(value = "parameters")//, typeHandler = JacksonTypeHandler.class)
+//    private List<ParamItem> parameters;
+    private String parameters;
+}

+ 2 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java

@@ -98,4 +98,6 @@ public interface MonitorDeviceService extends IService<MonitorDevice> {
     SensorData queryLatestDataByDeviceIdAndRoads(String deviceId, Integer sensorRoute);
 
     List<SensorData> querySensorData(String deviceId, int roads, Instant startTime, Instant endTime, List<SensorQueryCondition> queryConditions);
+
+    List<MonitorDevice> myList(Boolean isAll);
 }

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java

@@ -17,6 +17,7 @@ import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -32,6 +33,7 @@ import vip.xiaonuo.coldchain.core.bean.influxdb.SensorQueryCondition;
 import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCache;
 import vip.xiaonuo.coldchain.core.renke.RenKeService;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
@@ -179,6 +181,16 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
     }
 
 
+    @Override
+    public List<MonitorDevice> myList(Boolean isAll) {
+        LambdaQueryWrapper<MonitorDevice> queryWrapper = new LambdaQueryWrapper<>();
+        if (!isAll) {
+            queryWrapper.eq(MonitorDevice::getStatus, MonitorDeviceStatusEnum.NORMAL.getValue())
+                    .orderByDesc(MonitorDevice::getCreatedAt);
+        }
+        return list(queryWrapper);
+    }
+
     // 通用更新方法,避免代码重复,并处理 timestamp 为空的情况
     private boolean updateDeviceTimeByDeviceId(Integer deviceId, Date timestamp, String timeField) {
         if (timestamp == null) {

+ 11 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java

@@ -140,4 +140,15 @@ public class MonitorTargetController {
     public CommonResult<Page<MonitorTarget>> getPageByUser(MonitorTargetPageParam monitorTargetPageParam) {
         return CommonResult.data(monitorTargetService.getPageByUser(monitorTargetPageParam));
     }
+
+    /**
+     * 获取监控对象列表
+     * @param 是否查询所有
+     */
+    @Operation(summary = "获取监控对象列表")
+    @SaCheckPermission("/coldchain/monitortarget/list")
+    @GetMapping("/coldchain/monitortarget/list")
+    public CommonResult<List<MonitorTarget>> list(Boolean isAll) {
+        return CommonResult.data(monitorTargetService.myList(isAll));
+    }
 }

+ 7 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java

@@ -100,4 +100,11 @@ public interface MonitorTargetService extends IService<MonitorTarget> {
      * 更新最后一次登录时间
      */
     boolean updateLastLoginTimeByDeviceId(Integer deviceId, Date timestamp);
+
+    /**
+     * 获取监控对象列表
+     * @param isAll
+     * @return
+     */
+    List<MonitorTarget> myList(Boolean isAll);
 }

+ 13 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -120,8 +120,9 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     public List<MonitorTarget> getListByUser(String userId) {
         LambdaQueryWrapper<MonitorTarget> queryWrapper = new LambdaQueryWrapper<MonitorTarget>();
         if (ObjectUtil.isNotNull(userId)) {
-            queryWrapper.eq(MonitorTarget::getCreateBy, userId).eq(MonitorTarget::getStatus,"1")
-                    .orderByDesc(MonitorTarget::getCreateTime);
+            queryWrapper.eq(MonitorTarget::getCreateBy, userId).orderByDesc(MonitorTarget::getCreateTime);
+        } else {
+            queryWrapper.eq(MonitorTarget::getCreateBy, StpLoginUserUtil.getLoginUser().getId());
         }
         queryWrapper.orderByDesc(MonitorTarget::getCreateTime);
         List<MonitorTarget> monitorTargetList = list(queryWrapper);
@@ -198,4 +199,14 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         return updateBatchById(monitorTargetList);
     }
 
+    @Override
+    public List<MonitorTarget> myList(Boolean isAll) {
+        LambdaQueryWrapper<MonitorTarget> queryWrapper = new LambdaQueryWrapper<>();
+        if (!isAll) {
+            queryWrapper.eq(MonitorTarget::getStatus, MonitorStatusEnum.ONLINE.getCode())
+                    .orderByDesc(MonitorTarget::getCreateTime);
+        }
+        return list(queryWrapper);
+    }
+
 }

+ 23 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java

@@ -12,14 +12,18 @@
  */
 package vip.xiaonuo.coldchain.modular.monitortargetregion.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDeviceTran;
 
 import java.util.Date;
 
@@ -137,6 +141,7 @@ public class MonitorTargetRegion {
     /**
      * 湿度报警上限 temperature humidity co2
      */
+
     @Schema(description = "湿度报警上限")
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
@@ -163,4 +168,22 @@ public class MonitorTargetRegion {
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Down;
+
+    @Schema(description = "报警下限")
+    private Float limitDown;
+
+    /**
+     * 监控对象名称
+     */
+    @TableField(exist = false)
+    @Schema(description = "监控对象名称")
+    private String targetName;
+
+    /**
+     * 监控设备名称
+     */
+    @TableField(exist = false)
+    @Schema(description = "监控设备名称")
+    private String deviceName;
+
 }

+ 4 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java

@@ -167,6 +167,10 @@ public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetReg
             if(ObjectUtil.isNotEmpty(byId)) {
                 monitorTargetRegion.setParentId(byId.getId());
             }
+            String targetId = monitorTargetService.getById(monitorTargetRegion.getMonitorTargetId()).getName();
+            monitorTargetRegion.setTargetName(targetId);
+            String deviceName = monitorDeviceService.getById(monitorTargetRegion.getMonitorDeviceId()).getDeviceName();
+            monitorTargetRegion.setDeviceName(deviceName);
         }
 
         List<TreeNode<String>> treeNodeList = monitorTargetRegionList.stream().map(locationType ->