diff --git a/fys-admin/src/main/resources/logback-plus.xml b/fys-admin/src/main/resources/logback-plus.xml index b74289e..afb8124 100644 --- a/fys-admin/src/main/resources/logback-plus.xml +++ b/fys-admin/src/main/resources/logback-plus.xml @@ -16,12 +16,12 @@ ${log.path}/sys-console.log - - - ${log.path}/sys-console.%d{yyyy-MM-dd}.log - - 1 - + + + + + + ${log.pattern} utf-8 @@ -36,12 +36,12 @@ ${log.path}/sys-info.log - - - ${log.path}/sys-info.%d{yyyy-MM-dd}.log - - 60 - + + + + + + ${log.pattern} @@ -58,12 +58,12 @@ ${log.path}/sys-error.log - - - ${log.path}/sys-error.%d{yyyy-MM-dd}.log - - 60 - + + + + + + ${log.pattern} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java index 01b89fb..9633007 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceController.java @@ -44,7 +44,7 @@ import java.util.List; * @Date: 2025/5/16 **/ @Slf4j -@Tag(name = "设备管理", description = "设备:设备管理") +@Tag(name = "web:设备管理", description = "web:设备管理") @RestController @RequiredArgsConstructor @RequestMapping("/api/device") diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceAssignmentQuery.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceAssignmentQuery.java new file mode 100644 index 0000000..5597e1f --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceAssignmentQuery.java @@ -0,0 +1,54 @@ +package com.fuyuanshen.equipment.domain.query; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author: 默苍璃 + * @date: 2025-07-0910:27 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class DeviceAssignmentQuery implements Serializable { + + /** + * 表示这个 serialVersionUID 字段是专门为 Java 序列化机制服务的。 + */ + @Serial + private static final long serialVersionUID = 1L; + + private Long deviceId; + + /** + * 分配者 + */ + private Long assignerId; + + /** + * 接收者 + */ + private Long assigneeId; + + /** + * 0 否 + * 1 是 + * 设备是否有效 + */ + private Integer active; + + /** + * 分配等级(用于失效) + */ + private String lever; + + + // Getters and Setters + +} \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAssignmentsMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAssignmentsMapper.java new file mode 100644 index 0000000..e411c23 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceAssignmentsMapper.java @@ -0,0 +1,27 @@ +package com.fuyuanshen.equipment.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fuyuanshen.equipment.domain.DeviceAssignments; +import com.fuyuanshen.equipment.domain.query.DeviceAssignmentQuery; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 97433 + * @description 针对表【device_assignments】的数据库操作Mapper + * @createDate 2025-06-19 18:19:13 + * @Entity system.domain.DeviceAssignments + */ +@Mapper +public interface DeviceAssignmentsMapper extends BaseMapper { + + /** + * 查询设备分配信息 + * + * @param deviceAssignmentQuery + * @return + */ + List deviceAssignmentsMapper(@Param("query") DeviceAssignmentQuery deviceAssignmentQuery); +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceAssignmentsService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceAssignmentsService.java new file mode 100644 index 0000000..c8c30de --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceAssignmentsService.java @@ -0,0 +1,13 @@ +package com.fuyuanshen.equipment.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.fuyuanshen.equipment.domain.DeviceAssignments; + +/** +* @author 97433 +* @description 针对表【device_assignments】的数据库操作Service +* @createDate 2025-06-19 18:19:13 +*/ +public interface DeviceAssignmentsService extends IService { + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeGrantsService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeGrantsService.java new file mode 100644 index 0000000..dfe2f20 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeGrantsService.java @@ -0,0 +1,14 @@ +package com.fuyuanshen.equipment.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.fuyuanshen.equipment.domain.DeviceTypeGrants; + +/** +* @author 97433 +* @description 针对表【device_type_grants】的数据库操作Service +* @createDate 2025-06-19 13:49:33 +*/ +public interface DeviceTypeGrantsService extends IService { + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAssignmentsServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAssignmentsServiceImpl.java new file mode 100644 index 0000000..dd9bda9 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceAssignmentsServiceImpl.java @@ -0,0 +1,17 @@ +package com.fuyuanshen.equipment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fuyuanshen.equipment.domain.DeviceAssignments; +import com.fuyuanshen.equipment.mapper.DeviceAssignmentsMapper; +import com.fuyuanshen.equipment.service.DeviceAssignmentsService; +import org.springframework.stereotype.Service; + +/** +* @author 97433 +* @description 针对表【device_assignments】的数据库操作Service实现 +* @createDate 2025-06-19 18:19:13 +*/ +@Service +public class DeviceAssignmentsServiceImpl extends ServiceImpl implements DeviceAssignmentsService { + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 70549f8..50c0aaf 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -1,6 +1,7 @@ package com.fuyuanshen.equipment.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.generator.SnowflakeGenerator; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -18,21 +19,30 @@ import com.fuyuanshen.customer.domain.Customer; import com.fuyuanshen.customer.mapper.CustomerMapper; import com.fuyuanshen.equipment.constants.DeviceConstants; import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.domain.DeviceAssignments; import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.DeviceTypeGrants; import com.fuyuanshen.equipment.domain.dto.AppDeviceBo; import com.fuyuanshen.equipment.domain.form.DeviceForm; +import com.fuyuanshen.equipment.domain.query.DeviceAssignmentQuery; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.domain.vo.AppDeviceVo; import com.fuyuanshen.equipment.domain.vo.CustomerVo; import com.fuyuanshen.equipment.enums.BindingStatusEnum; import com.fuyuanshen.equipment.enums.CommunicationModeEnum; +import com.fuyuanshen.equipment.enums.DeviceActiveStatusEnum; import com.fuyuanshen.equipment.enums.DeviceStatusEnum; +import com.fuyuanshen.equipment.mapper.DeviceAssignmentsMapper; import com.fuyuanshen.equipment.mapper.DeviceMapper; +import com.fuyuanshen.equipment.mapper.DeviceTypeGrantsMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; +import com.fuyuanshen.equipment.service.DeviceAssignmentsService; import com.fuyuanshen.equipment.service.DeviceService; +import com.fuyuanshen.equipment.service.DeviceTypeGrantsService; import com.fuyuanshen.system.domain.vo.SysOssVo; import com.fuyuanshen.system.service.ISysOssService; +import com.fuyuanshen.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -43,6 +53,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.*; /** @@ -55,6 +66,8 @@ import java.util.*; @RequiredArgsConstructor public class DeviceServiceImpl extends ServiceImpl implements DeviceService { + public static final String USER_ID_SEPARATOR = ":"; + @Value("${file.device.pic}") private String filePath; @Value("${file.device.ip}") @@ -62,11 +75,16 @@ public class DeviceServiceImpl extends ServiceImpl impleme private final DeviceMapper deviceMapper; private final DeviceTypeMapper deviceTypeMapper; - private final CustomerMapper customerMapper; private final ISysOssService ossService; + private final DeviceAssignmentsService deviceAssignmentsService; + private final DeviceAssignmentsMapper deviceAssignmentsMapper; + + private final DeviceTypeGrantsService deviceTypeGrantsService; + private final DeviceTypeGrantsMapper deviceTypeGrantsMapper; + /** * 分页查询设备 @@ -79,7 +97,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public TableDataInfo queryAll(DeviceQueryCriteria criteria, Page page) throws IOException { - // criteria.setCustomerId(LoginHelper.getUserId()); criteria.setCurrentOwnerId(LoginHelper.getUserId()); IPage devices = deviceMapper.findAll(criteria, page); @@ -90,7 +107,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme } } - // return PageUtil.toPage(devices); return new TableDataInfo(records, devices.getTotal()); } @@ -125,13 +141,13 @@ public class DeviceServiceImpl extends ServiceImpl impleme DeviceTypeQueryCriteria queryCriteria = new DeviceTypeQueryCriteria(); queryCriteria.setDeviceTypeId(deviceForm.getDeviceType()); queryCriteria.setCustomerId(LoginHelper.getUserId()); - List deviceTypes = deviceTypeMapper.findAll(queryCriteria); - if (deviceTypes.isEmpty()) { + DeviceTypeGrants typeGrants = deviceTypeGrantsMapper.selectById(queryCriteria.getDeviceTypeId()); + DeviceType deviceTypes = deviceTypeMapper.selectById(typeGrants.getDeviceTypeId()); + if (deviceTypes == null) { throw new Exception("设备类型不存在!!!"); } // 保存图片并获取URL - // String imageUrl = saveDeviceImage(deviceForm.getFile(), deviceForm.getDeviceName()); if (deviceForm.getFile() != null) { SysOssVo upload = ossService.upload(deviceForm.getFile()); // 设置图片路径 @@ -140,22 +156,39 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 转换对象并插入数据库 Device device = new Device(); + BeanUtil.copyProperties(deviceForm, device, true); + device.setDeviceNo(createDeviceNo()); LoginUser loginUser = LoginHelper.getLoginUser(); device.setCurrentOwnerId(loginUser.getUserId()); device.setOriginalOwnerId(loginUser.getUserId()); device.setCreateByName(loginUser.getNickname()); - device.setTypeName(deviceTypes.get(0).getTypeName()); - BeanUtil.copyProperties(deviceForm, device, true); + device.setTypeName(deviceTypes.getTypeName()); + device.setDeviceType(deviceTypes.getId()); - device.setDeviceNo(createDeviceNo()); deviceMapper.insert(device); + // 新增设备类型记录 + DeviceAssignments assignments = new DeviceAssignments(); + assignments.setDeviceId(device.getId()); + assignments.setAssignedAt(LocalDateTime.now()); + // 分配者 + assignments.setAssignerId(loginUser.getUserId()); + assignments.setAssignerName(loginUser.getUsername()); + // 接收者 + assignments.setAssigneeId(loginUser.getUserId()); + assignments.setActive(DeviceActiveStatusEnum.ACTIVE.getCode()); + String lever = USER_ID_SEPARATOR + loginUser.getUserId(); + assignments.setLever(lever); + deviceAssignmentsService.save(assignments); + } + private String createDeviceNo() { String uuidStr = UUID.fastUUID().toString(); // 获取带 - 的标准格式字符串 return uuidStr.replaceAll("-", ""); } + /** * 更新设备信息 * @@ -165,9 +198,10 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public void update(DeviceForm deviceForm) throws Exception { + DeviceAssignments deviceAssignments = deviceAssignmentsMapper.selectById(deviceForm.getId()); DeviceTypeQueryCriteria deviceTypeQueryCriteria = new DeviceTypeQueryCriteria(); - deviceTypeQueryCriteria.setDeviceTypeId(deviceForm.getDeviceType()); + deviceTypeQueryCriteria.setDeviceTypeId(deviceAssignments.getDeviceId()); deviceTypeQueryCriteria.setCustomerId(LoginHelper.getUserId()); List deviceTypes = deviceTypeMapper.findAll(deviceTypeQueryCriteria); if (deviceTypes.isEmpty()) { @@ -175,8 +209,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme } DeviceQueryCriteria queryCriteria = new DeviceQueryCriteria(); - queryCriteria.setDeviceId(deviceForm.getId()); + queryCriteria.setDeviceId(deviceAssignments.getDeviceId()); queryCriteria.setCustomerId(LoginHelper.getUserId()); + queryCriteria.setCurrentOwnerId(LoginHelper.getUserId()); List devices = deviceMapper.findAll(queryCriteria); if (devices.isEmpty()) { throw new Exception("设备不存在!!!"); @@ -184,7 +219,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme Device device = devices.get(0); // 处理上传的图片 - // String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName()); if (deviceForm.getFile() != null) { SysOssVo upload = ossService.upload(deviceForm.getFile()); // 设置图片路径 @@ -193,6 +227,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 更新字段 BeanUtil.copyProperties(deviceForm, device, true); + device.setId(deviceAssignments.getDeviceId()); device.setUpdateTime(new Timestamp(System.currentTimeMillis())); deviceMapper.updateById(device); } @@ -237,17 +272,20 @@ public class DeviceServiceImpl extends ServiceImpl impleme public void deleteAll(List ids) { List invalidIds = new ArrayList<>(); - for (Long id : ids) { - Device deviceType = deviceMapper.selectById(id); - if (deviceType == null || !Objects.equals(deviceType.getCurrentOwnerId(), LoginHelper.getUserId())) { - invalidIds.add(id); - } - } - if (!invalidIds.isEmpty()) { - throw new RuntimeException("以下设备无法删除(ID 不存在或无权限): " + invalidIds); - } - - deviceMapper.deleteByIds(ids); + deviceAssignmentsMapper.deleteByIds(ids); + // + // for (Long id : ids) { + // + // Device deviceType = deviceMapper.selectById(id); + // if (deviceType == null || !Objects.equals(deviceType.getCurrentOwnerId(), LoginHelper.getUserId())) { + // invalidIds.add(id); + // } + // } + // if (!invalidIds.isEmpty()) { + // throw new RuntimeException("以下设备无法删除(ID 不存在或无权限): " + invalidIds); + // } + // + // deviceMapper.deleteByIds(ids); } @@ -256,137 +294,106 @@ public class DeviceServiceImpl extends ServiceImpl impleme * * @param customerVo */ - // @Override - // @Transactional(rollbackFor = Exception.class) - // public void assignCustomer1(CustomerVo customerVo) { - // List deviceIds = customerVo.getDeviceIds(); - // Long customerId = customerVo.getCustomerId(); - // - // Customer customer = customerMapper.queryCustomerById(customerId, LoginHelper.getLoginUser().getPid()); - // if (customer == null) { - // throw new RuntimeException("待分配的客户不存在!!!"); - // } - // - // List invalidIds = new ArrayList<>(); - // List devices = new ArrayList<>(); - // for (Long id : deviceIds) { - // Device device = deviceMapper.selectById(id); - // if (device == null || !Objects.equals(device.getCurrentOwnerId(), LoginHelper.getUserId())) { - // invalidIds.add(id); - // continue; - // } - // Device assignCustomer = deviceMapper.getAssignCustomer(device.getId()); - // if (assignCustomer != null) { - // invalidIds.add(id); - // continue; - // } - // device.setCustomerId(customerId); - // device.setCustomerName(customer.getNickName()); - // devices.add(device); - // } - // if (!invalidIds.isEmpty()) { - // throw new RuntimeException("以下设备无法分配(ID 不存在或无权限): " + invalidIds); - // } - // - // devices.forEach((device) -> { - // - // deviceMapper.updateById(device); - // device.setCurrentOwnerId(customerId); - // if (device.getDeviceType() == null) { - // throw new RuntimeException("设备类型有问题!!! "); - // } - // DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - // SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); - // device.setOriginalDeviceId(device.getId()); - // Long next = snowflakeGenerator.next(); - // device.setId(next); - // device.setDeviceType(next); - // - // DeviceType assignType = deviceTypeMapper.getAssignType(device.getDeviceType(), customerId); - // if (assignType == null) { - // deviceType.setOriginalDeviceId(deviceType.getId()); - // deviceType.setId(next); - // deviceType.setOwnerCustomerId(customerId); - // deviceTypeMapper.insert(deviceType); - // } - // - // deviceMapper.insert(device); - // - // }); - // } @Override + @Transactional(rollbackFor = Exception.class) public void assignCustomer(CustomerVo customerVo) { - List deviceIds = customerVo.getDeviceIds(); - Long customerId = customerVo.getCustomerId(); - Customer customer = customerMapper.queryCustomerById(customerId, LoginHelper.getLoginUser().getPid()); - if (customer == null) { - throw new RuntimeException("待分配的客户不存在!!!"); + if (customerVo.getDeviceIds().isEmpty() || customerVo.getCustomerId() == null) { + throw new RuntimeException("请选择设备或客户"); } - List devicesToAssign = new ArrayList<>(); - List invalidIds = new ArrayList<>(); + // 获取当前登录用户 + LoginUser loginUser = LoginHelper.getLoginUser(); + // 获取分配用户信息 + Customer assignUser = customerMapper.selectById(customerVo.getCustomerId()); + // 获取分配设备信息 + List assignments = deviceAssignmentsMapper.selectByIds(customerVo.getDeviceIds()); - for (Long id : deviceIds) { - Device device = deviceMapper.selectById(id); - if (device == null || !Objects.equals(device.getCurrentOwnerId(), LoginHelper.getUserId())) { - invalidIds.add(id); + // 批量更新设备状态 + List deviceTypeGrants = new ArrayList<>(); + for (DeviceAssignments assignment : assignments) { + Device device = deviceMapper.selectById(assignment.getDeviceId()); + + // 如果设备已分配给需要分配的客户,则跳过 + DeviceAssignmentQuery dq = DeviceAssignmentQuery.builder().deviceId(device.getId()).assigneeId(customerVo.getCustomerId()) + .active(DeviceActiveStatusEnum.ACTIVE.getCode()).lever(assignment.getLever() + USER_ID_SEPARATOR).build(); + // 查询分配 + List assignmentsList = deviceAssignmentsMapper.deviceAssignmentsMapper(dq); + if (CollectionUtil.isNotEmpty(assignmentsList)) { + log.info("设备 {} 已分配给客户 {}", device.getDeviceName(), device.getCustomerName()); continue; } - Device assignCustomer = deviceMapper.getAssignCustomer(device.getId()); - if (assignCustomer != null) { - invalidIds.add(id); + + // 更改分配客户 + assignment.setAssigneeName(assignUser.getNickName()); + deviceAssignmentsMapper.updateById(assignment); + + // 设备失效 + // 获取用户的设备记录 + DeviceAssignmentQuery dq1 = DeviceAssignmentQuery.builder().deviceId(device.getId()).assignerId(loginUser.getUserId()) + .active(DeviceActiveStatusEnum.ACTIVE.getCode()).lever(assignment.getLever() + USER_ID_SEPARATOR).build(); + List ag = deviceAssignmentsMapper.deviceAssignmentsMapper(dq1); + if (CollectionUtil.isNotEmpty(ag)) { + for (DeviceAssignments d : ag) { + d.setActive(DeviceActiveStatusEnum.INACTIVE.getCode()); + deviceAssignmentsMapper.updateById(d); + } + } + + // 新增设备类型记录 + DeviceAssignments dam = new DeviceAssignments(); + dam.setDeviceId(device.getId()); + dam.setAssignedAt(LocalDateTime.now()); + // 分配者 + dam.setAssignerId(loginUser.getUserId()); + dam.setAssignerName(loginUser.getUsername()); + // 接收者 + dam.setAssigneeId(assignUser.getCustomerId()); + // assignments.setAssigneeName(assignUser.getUsername()); + dam.setActive(DeviceActiveStatusEnum.ACTIVE.getCode()); + String lever = assignment.getLever() + USER_ID_SEPARATOR + assignUser.getCustomerId(); + dam.setLever(lever); + deviceAssignmentsService.save(dam); + + // 判断设备类型是否存在 + DeviceTypeGrants dtg = deviceTypeGrantsMapper.selectOne(new LambdaQueryWrapper().eq(DeviceTypeGrants::getDeviceTypeId, device.getId())); + if (dtg != null) { continue; } - device.setCustomerId(customerId); - device.setCustomerName(customer.getNickName()); - devicesToAssign.add(device); + // 创建并保存设备类型授权记录 + DeviceTypeGrants deviceTypeGrant = new DeviceTypeGrants(); + deviceTypeGrant.setGrantedAt(new Date()); + deviceTypeGrant.setDeviceTypeId(device.getDeviceType()); + // 关联分配记录 + deviceTypeGrant.setAssignmentId(dam.getId()); + // 被授权的客户 + deviceTypeGrant.setCustomerId(customerVo.getCustomerId()); + // 授权方客户 + deviceTypeGrant.setGrantorCustomerId(loginUser.getUserId()); + deviceTypeGrants.add(deviceTypeGrant); } - if (!invalidIds.isEmpty()) { - throw new RuntimeException("以下设备无法分配(ID 不存在或无权限): " + invalidIds); - } + deviceTypeGrantsService.saveBatch(deviceTypeGrants); - // 批量处理设备分配 - batchAssignDevices(devicesToAssign, customer); } - @Transactional(rollbackFor = Exception.class) - public void batchAssignDevices(List devicesToAssign, Customer customer) { - Long userId = LoginHelper.getUserId(); - SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); - for (Device device : devicesToAssign) { - if (device.getDeviceType() == null) { - throw new RuntimeException("设备类型有问题!!! "); - } - - deviceMapper.updateById(device); - - DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - DeviceType assignType = deviceTypeMapper.getAssignType(device.getDeviceType(), customer.getCustomerId()); - - Long next = snowflakeGenerator.next(); - - device.setOriginalDeviceId(device.getId()); - device.setCurrentOwnerId(customer.getCustomerId()); - device.setOriginalOwnerId(device.getCurrentOwnerId()); - device.setCustomerId(null); - device.setCustomerName(""); - device.setId(next); - - if (assignType == null) { - deviceType.setOriginalDeviceId(deviceType.getId()); - deviceType.setOriginalOwnerId(deviceType.getOwnerCustomerId()); - deviceType.setId(next); - device.setDeviceType(next); - deviceType.setOwnerCustomerId(customer.getCustomerId()); - deviceTypeMapper.insert(deviceType); - } else { - device.setDeviceType(assignType.getId()); - } - - deviceMapper.insert(device); - } + /** + * 创建并保存设备类型授权记录 + * + * @param device 当前设备对象 + * @param currentUser 当前登录用户 + * @param customerVo 客户信息 + * @param deviceTypeGrants 授权记录集合 + */ + private void createAndSaveDeviceTypeGrants(Device device, LoginUser currentUser, CustomerVo customerVo, List deviceTypeGrants) { + // Long generatedId = NanoId.generate(NanoIdLengthEnum.HIGH_CONCURRENCY.getLength()); + DeviceTypeGrants deviceTypeGrant = new DeviceTypeGrants(); + deviceTypeGrant.setGrantedAt(new Date()); + deviceTypeGrant.setDeviceTypeId(device.getDeviceType()); + // deviceTypeGrant.setAssignmentId(generatedId); + deviceTypeGrant.setCustomerId(customerVo.getCustomerId()); + deviceTypeGrant.setGrantorCustomerId(currentUser.getUserId()); + deviceTypeGrants.add(deviceTypeGrant); } @@ -449,6 +456,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme } + @Override public TableDataInfo queryAppDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery) { Long userId = AppLoginHelper.getUserId(); @@ -461,43 +469,44 @@ public class DeviceServiceImpl extends ServiceImpl impleme public int bindDevice(AppDeviceBo bo) { Integer mode = bo.getCommunicationMode(); Long userId = AppLoginHelper.getUserId(); - if(mode == CommunicationModeEnum.FOUR_G.getValue()){ + if (mode == CommunicationModeEnum.FOUR_G.getValue()) { String deviceImei = bo.getDeviceImei(); QueryWrapper qw = new QueryWrapper() .eq("device_imei", deviceImei); List devices = baseMapper.selectList(qw); - if(devices.isEmpty()){ + if (devices.isEmpty()) { throw new RuntimeException("请先将设备入库!!!"); } Device device = devices.get(0); - if(device.getBindingStatus()!=null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()){ + if (device.getBindingStatus() != null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()) { throw new RuntimeException("设备已绑定"); } UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); deviceUpdateWrapper.eq("id", device.getId()) .set("binding_status", BindingStatusEnum.BOUND.getCode()) - .set("binding_user_id",userId);; + .set("binding_user_id", userId); + ; return baseMapper.update(null, deviceUpdateWrapper); - }else if(mode == CommunicationModeEnum.BLUETOOTH.getValue()){ + } else if (mode == CommunicationModeEnum.BLUETOOTH.getValue()) { String deviceMac = bo.getDeviceMac(); QueryWrapper qw = new QueryWrapper() .eq("device_mac", deviceMac); List devices = baseMapper.selectList(qw); - if(devices.isEmpty()){ + if (devices.isEmpty()) { throw new RuntimeException("请先将设备入库!!!"); } Device device = devices.get(0); - if(device.getBindingStatus() != null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()){ + if (device.getBindingStatus() != null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()) { throw new RuntimeException("设备已绑定"); } UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); deviceUpdateWrapper.eq("id", device.getId()) .set("binding_status", BindingStatusEnum.BOUND.getCode()) - .set("binding_user_id",userId); - return baseMapper.update(null, deviceUpdateWrapper); - }else{ + .set("binding_user_id", userId); + return baseMapper.update(null, qw); + } else { throw new RuntimeException("通讯方式错误"); } @@ -506,13 +515,14 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public int unBindDevice(Long id) { Device device = baseMapper.selectById(id); - if(device == null){ + if (device == null) { throw new RuntimeException("请先将设备入库!!!"); } +// DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); +// String mode = deviceType.getCommunicationMode(); UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); deviceUpdateWrapper.eq("id", device.getId()) .set("binding_status", BindingStatusEnum.UNBOUND.getCode()); - return baseMapper.update(null, deviceUpdateWrapper); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeGrantsServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeGrantsServiceImpl.java new file mode 100644 index 0000000..650c3a3 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeGrantsServiceImpl.java @@ -0,0 +1,18 @@ +package com.fuyuanshen.equipment.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fuyuanshen.equipment.domain.DeviceTypeGrants; +import com.fuyuanshen.equipment.mapper.DeviceTypeGrantsMapper; +import com.fuyuanshen.equipment.service.DeviceTypeGrantsService; +import org.springframework.stereotype.Service; + +/** +* @author 97433 +* @description 针对表【device_type_grants】的数据库操作Service实现 +* @createDate 2025-06-19 13:49:33 +*/ +@Service +public class DeviceTypeGrantsServiceImpl extends ServiceImpl +implements DeviceTypeGrantsService { + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java index 6244f07..28bbced 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java @@ -175,13 +175,20 @@ public class DeviceTypeServiceImpl extends ServiceImpl + + + + + + + + + + + + + + id + ,device_id,from_customer_id,to_customer_id,assigned_at,device_type_granted + + + + + + diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml index 18a0e24..27a823c 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml @@ -37,7 +37,7 @@ - select d.* , t.type_name FROM device d LEFT JOIN device_type t ON d.device_type = t.id @@ -71,6 +71,45 @@ order by d.create_time desc + + + + +