diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceController.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceController.java index 64f95c11..34f9a80a 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceController.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceController.java @@ -69,7 +69,7 @@ public class DeviceController extends BaseController { list = deviceService.selectDeviceShortList(device); }else { - // 精确查询 + // 精确查询 list = deviceService.selectDeviceShortListAccurate(device); } return getDataTable(list); diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceUserController.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceUserController.java index 54c574fd..ee5054fa 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceUserController.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/controller/DeviceUserController.java @@ -1,9 +1,7 @@ package com.ruoyi.iot.controller; import java.util.List; -import javax.servlet.http.HttpServletResponse; -import com.ruoyi.iot.domain.Firmware; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -22,7 +20,6 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.iot.domain.DeviceUser; import com.ruoyi.iot.service.IDeviceUserService; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; /** @@ -53,7 +50,7 @@ public class DeviceUserController extends BaseController } /** - * 获取设备用户详细信息 + * 获取设备用户详细信息 根据deviceId 查询的话可能会查出多个 */ @PreAuthorize("@ss.hasPermi('iot:device:query')") @GetMapping(value = "/{deviceId}") @@ -63,6 +60,17 @@ public class DeviceUserController extends BaseController return AjaxResult.success(deviceUserService.selectDeviceUserByDeviceId(deviceId)); } + /** + * 获取设备用户详细信息 双主键 device_id 和 user_id + */ + @PreAuthorize("@ss.hasPermi('iot:device:query')") + @GetMapping(value = "/{deviceId}/{userId}") + @ApiOperation("获取设备用户详情,根据用户id 和 设备id") + public AjaxResult getInfo(@PathVariable("deviceId") Long deviceId, @PathVariable("userId") Long userId) + { + return AjaxResult.success(deviceUserService.selectDeviceUserByDeviceIdAndUserId(deviceId, userId)); + } + /** * 新增设备用户 */ @@ -75,6 +83,18 @@ public class DeviceUserController extends BaseController return toAjax(deviceUserService.insertDeviceUser(deviceUser)); } + /** + * 新增多个设备用户 + */ + @PreAuthorize("@ss.hasPermi('iot:device:add')") + @Log(title = "设备用户", businessType = BusinessType.INSERT) + @PostMapping("/addDeviceUsers") + @ApiOperation("添加设备用户") + public AjaxResult addDeviceUsers(@RequestBody List deviceUsers) + { + return toAjax(deviceUserService.insertDeviceUserList(deviceUsers)); + } + /** * 修改设备用户 */ @@ -91,13 +111,13 @@ public class DeviceUserController extends BaseController /** * 删除设备用户 */ - @ApiOperation("批量删除设备用户") + @ApiOperation("删除设备用户") @PreAuthorize("@ss.hasPermi('iot:device:remove')") @Log(title = "设备用户", businessType = BusinessType.DELETE) - @DeleteMapping("/{deviceIds}") - public AjaxResult remove(@PathVariable Long[] deviceIds) + @DeleteMapping + public AjaxResult remove(@RequestBody DeviceUser deviceUser) { - int count=deviceUserService.deleteDeviceUserByDeviceIds(deviceIds); + int count=deviceUserService.deleteDeviceUser(deviceUser); if(count==0){ return AjaxResult.error("设备所有者不能删除"); }else{ diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/mapper/DeviceUserMapper.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/mapper/DeviceUserMapper.java index 7260a576..7387a8e4 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/mapper/DeviceUserMapper.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/mapper/DeviceUserMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.iot.mapper; import java.util.List; import com.ruoyi.iot.domain.DeviceUser; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; /** @@ -19,7 +20,7 @@ public interface DeviceUserMapper * @param deviceId 设备用户主键 * @return 设备用户 */ - public DeviceUser selectDeviceUserByDeviceId(Long deviceId); + public List selectDeviceUserByDeviceId(Long deviceId); /** * 查询设备用户列表 @@ -60,4 +61,21 @@ public interface DeviceUserMapper * @return 结果 */ public int deleteDeviceUserByDeviceIds(Long[] deviceIds); + + /** + * 批量添加设备用户 + * @param deviceUsers 设备用户 + * @return 结果 + */ + public int insertDeviceUserList(List deviceUsers); + + /** + * 根据deviceId 和 userId 查询 + * @param deviceId 设备id + * @param userId 用户id + * @return 结果 + */ + public DeviceUser selectDeviceUserByDeviceIdAndUserId(@Param("deviceId") Long deviceId, @Param("userId") Long userId); + + public int deleteDeviceUser(DeviceUser deviceUser); } diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/IDeviceUserService.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/IDeviceUserService.java index 6a92a3fa..91d485f3 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/IDeviceUserService.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/IDeviceUserService.java @@ -17,7 +17,7 @@ public interface IDeviceUserService * @param deviceId 设备用户主键 * @return 设备用户 */ - public DeviceUser selectDeviceUserByDeviceId(Long deviceId); + public List selectDeviceUserByDeviceId(Long deviceId); /** * 查询设备用户列表 @@ -58,4 +58,21 @@ public interface IDeviceUserService * @return 结果 */ public int deleteDeviceUserByDeviceId(Long deviceId); + + /** + * 批量添加设备用户 + * @param deviceUsers 设备用户 + * @return 结果 + */ + public int insertDeviceUserList(List deviceUsers); + + /** + * 查询设备用户 + * + * @param deviceId 设备用户主键 + * @return 设备用户 + */ + public DeviceUser selectDeviceUserByDeviceIdAndUserId(Long deviceId, Long userId); + + public int deleteDeviceUser(DeviceUser deviceUser); } diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceServiceImpl.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceServiceImpl.java index 16a9370d..c32a0408 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceServiceImpl.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceServiceImpl.java @@ -250,7 +250,7 @@ public class DeviceServiceImpl implements IDeviceService { return deviceList; } -// 精准查询所有条件的设备 + // 精准查询所有条件的设备 @Override public List selectDeviceShortListAccurate(Device device) { return deviceMapper.selectDeviceShortListAccurate(device); @@ -544,7 +544,7 @@ public class DeviceServiceImpl implements IDeviceService { public List selectAllDeviceShortListAccurate(String userName) { return deviceMapper.selectAllDeviceShortListAccurate(userName); } -// 精准查询 + // 精准查询 新增别人分享给自己的设备 @Override public List selectDeviceListAccurate(Device device) { return deviceMapper.selectDeviceListAccurate(device); diff --git a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceUserServiceImpl.java b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceUserServiceImpl.java index 523bd0de..d039f34d 100644 --- a/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceUserServiceImpl.java +++ b/springboot/wumei-iot/src/main/java/com/ruoyi/iot/service/impl/DeviceUserServiceImpl.java @@ -6,8 +6,10 @@ import com.ruoyi.iot.domain.DeviceUser; import com.ruoyi.iot.mapper.DeviceUserMapper; import com.ruoyi.iot.service.IDeviceUserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; +import java.sql.SQLIntegrityConstraintViolationException; import java.util.List; import static com.ruoyi.common.utils.SecurityUtils.getLoginUser; @@ -31,7 +33,7 @@ public class DeviceUserServiceImpl implements IDeviceUserService * @return 设备用户 */ @Override - public DeviceUser selectDeviceUserByDeviceId(Long deviceId) + public List selectDeviceUserByDeviceId(Long deviceId) { return deviceUserMapper.selectDeviceUserByDeviceId(deviceId); } @@ -57,6 +59,8 @@ public class DeviceUserServiceImpl implements IDeviceUserService @Override public int insertDeviceUser(DeviceUser deviceUser) { + List deviceUsers = selectDeviceUserList(deviceUser); + if (!deviceUsers.isEmpty()) throw new RuntimeException("该用户已添加, 禁止重复添加"); deviceUser.setCreateTime(DateUtils.getNowDate()); deviceUser.setIsOwner(0); SysUser sysUser = getLoginUser().getUser(); @@ -101,4 +105,30 @@ public class DeviceUserServiceImpl implements IDeviceUserService { return deviceUserMapper.deleteDeviceUserByDeviceId(deviceId); } + + @Override + public int insertDeviceUserList(List deviceUsers) { + try { + deviceUsers.forEach(deviceUser -> { + deviceUser.setCreateTime(DateUtils.getNowDate()); + deviceUser.setIsOwner(0); + SysUser sysUser = getLoginUser().getUser(); + deviceUser.setTenantId(sysUser.getUserId()); + deviceUser.setTenantName(sysUser.getUserName()); + }); + return deviceUserMapper.insertDeviceUserList(deviceUsers); + } catch (DuplicateKeyException e) { + throw new RuntimeException("存在设备已经与用户绑定"); + } + } + + @Override + public DeviceUser selectDeviceUserByDeviceIdAndUserId(Long deviceId, Long userId) { + return deviceUserMapper.selectDeviceUserByDeviceIdAndUserId(deviceId, userId); + } + + @Override + public int deleteDeviceUser(DeviceUser deviceUser) { + return deviceUserMapper.deleteDeviceUser(deviceUser); + } } diff --git a/springboot/wumei-iot/src/main/resources/mapper/iot/DeviceMapper.xml b/springboot/wumei-iot/src/main/resources/mapper/iot/DeviceMapper.xml index 6fa63f78..7f16e5f9 100644 --- a/springboot/wumei-iot/src/main/resources/mapper/iot/DeviceMapper.xml +++ b/springboot/wumei-iot/src/main/resources/mapper/iot/DeviceMapper.xml @@ -129,10 +129,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by create_time desc + - - + + + + insert into iot_device_user + device_id, user_id, device_name, user_name, @@ -55,6 +61,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" remark, + #{deviceId}, #{userId}, #{deviceName}, #{userName}, @@ -71,6 +78,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + insert into iot_device_user + (device_id, user_id, device_name, user_name, is_owner,tenant_id,tenant_name,phonenumber, create_time) values + + (#{item.deviceId},#{item.userId},#{item.deviceName}, #{item.userName}, #{item.isOwner}, #{item.tenantId},#{item.tenantName},#{item.phonenumber}, #{item.createTime}) + + + update iot_device_user @@ -88,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update_time = #{updateTime}, remark = #{remark}, - where device_id = #{deviceId} + where device_id = #{deviceId} and user_id = #{userId} @@ -101,4 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{deviceId} + + delete from iot_device_user where device_id = #{deviceId} and is_owner !=1 and user_id = #{userId} + \ No newline at end of file diff --git a/vue/src/api/iot/deviceuser.js b/vue/src/api/iot/deviceuser.js index 7ef53b60..5f2759f1 100644 --- a/vue/src/api/iot/deviceuser.js +++ b/vue/src/api/iot/deviceuser.js @@ -10,9 +10,9 @@ export function listDeviceUser(query) { } // 查询设备用户详细 -export function getDeviceUser(deviceId) { +export function getDeviceUser(deviceId, userId) { return request({ - url: '/iot/deviceUser/' + deviceId, + url: '/iot/deviceUser/' + deviceId + '/' + userId, method: 'get' }) } @@ -26,6 +26,15 @@ export function addDeviceUser(data) { }) } +// 新增多个设备用户 +export function addDeviceUsers(data) { + return request({ + url: '/iot/deviceUser/addDeviceUsers', + method: 'post', + data: data + }) +} + // 修改设备用户 export function updateDeviceUser(data) { return request({ @@ -36,9 +45,10 @@ export function updateDeviceUser(data) { } // 删除设备用户 -export function delDeviceUser(deviceId) { +export function delDeviceUser(device) { return request({ - url: '/iot/deviceUser/' + deviceId, - method: 'delete' + url: '/iot/deviceUser', + method: 'delete', + data: device }) } diff --git a/vue/src/views/iot/device/device-edit.vue b/vue/src/views/iot/device/device-edit.vue index 2112cf81..5e89845f 100644 --- a/vue/src/views/iot/device/device-edit.vue +++ b/vue/src/views/iot/device/device-edit.vue @@ -108,12 +108,12 @@ - + 设备日志 diff --git a/vue/src/views/iot/device/device-user.vue b/vue/src/views/iot/device/device-user.vue index c7b404a8..6c7de24a 100644 --- a/vue/src/views/iot/device/device-user.vue +++ b/vue/src/views/iot/device/device-user.vue @@ -3,6 +3,7 @@ 分享设备 + 分享所有设备 @@ -43,7 +44,7 @@ - + @@ -56,6 +57,9 @@ import { delDeviceUser, updateDeviceUser } from "@/api/iot/deviceuser"; +import { + listDeviceShort, +} from "@/api/iot/device"; export default { name: "device-user", @@ -73,6 +77,7 @@ export default { // 获取到父组件传递的device后,刷新列表 device: function (newVal, oldVal) { this.deviceInfo = newVal; + this.devices = [newVal]; if (this.deviceInfo && this.deviceInfo.deviceId != 0) { this.queryParams.deviceId = this.deviceInfo.deviceId; this.getList(); @@ -81,6 +86,8 @@ export default { }, data() { return { + // 设备列表 + devices: [], // 遮罩层 loading: true, // 选中数组 @@ -189,7 +196,7 @@ export default { handleUpdate(row) { this.reset(); const deviceId = row.deviceId || this.ids - getDeviceUser(deviceId).then(response => { + getDeviceUser(deviceId, row.userId).then(response => { this.form = response.data; this.open = true; this.title = "用户备注"; @@ -207,9 +214,9 @@ export default { }, /** 删除按钮操作 */ handleDelete(row) { - const deviceIds = row.deviceId || this.ids; - this.$modal.confirm('是否确认删除设备用户编号为"' + deviceIds + '"的数据项?').then(function () { - return delDeviceUser(deviceIds); + const deviceUser = row; + this.$modal.confirm('是否确认删除设备用户编号为"' + deviceUser.deviceId + "-" + deviceUser.userId + '"的数据项?').then(function () { + return delDeviceUser(deviceUser); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); @@ -223,8 +230,24 @@ export default { }, // 选择用户 selectUser() { + this.devices = [this.device] this.$refs.userList.openSelectUser = true; }, + selectUserShareAllDevice() { + this.loading = true; + // 获取设备列表 + // 判断是否是admin角色 + if (this.$store.state.user.roles.indexOf("admin") === -1) { + this.queryParams.userName = this.$store.state.user.name + } + listDeviceShort(this.queryParams).then(response => { + let deviceList = response.rows; + this.devices = deviceList + this.loading = false; + this.$refs.userList.openSelectUser = true; + }); + + } } }; diff --git a/vue/src/views/iot/device/user-list.vue b/vue/src/views/iot/device/user-list.vue index 5fb287f1..a8601a29 100644 --- a/vue/src/views/iot/device/user-list.vue +++ b/vue/src/views/iot/device/user-list.vue @@ -1,5 +1,5 @@