From 5917234ca8fec606e27323dfe8c105b23c686c21 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 2 Jul 2025 17:53:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=A2=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/service/SysLoginService.java | 2 + .../common/core/domain/model/LoginUser.java | 6 + .../fyscustomer/domain/Customer.java | 13 +- .../domain/query/UserQueryCriteria.java | 6 + .../fyscustomer/mapper/CustomerMapper.java | 9 + .../fyscustomer/service/CustomerService.java | 3 +- .../service/impl/CustomerServiceImpl.java | 17 +- .../mapper/customer/CustomerMapper.xml | 347 +----------------- .../domain/query/DeviceQueryCriteria.java | 32 +- .../service/impl/DeviceServiceImpl.java | 31 +- .../service/impl/DeviceTypeServiceImpl.java | 14 +- .../mapper/equipment/DeviceMapper.xml | 8 +- .../com/fuyuanshen/system/domain/SysUser.java | 2 + .../system/domain/vo/SysUserVo.java | 2 + 14 files changed, 137 insertions(+), 355 deletions(-) diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/service/SysLoginService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/SysLoginService.java index 81472b5..c7bf18a 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/service/SysLoginService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/SysLoginService.java @@ -157,6 +157,8 @@ public class SysLoginService { loginUser.setUsername(user.getUserName()); loginUser.setNickname(user.getNickName()); loginUser.setUserType(user.getUserType()); + // 用户级别 + loginUser.setUserLevel(user.getUserLevel()); loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); loginUser.setRolePermission(permissionService.getRolePermission(userId)); if (ObjectUtil.isNotNull(user.getDeptId())) { diff --git a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/model/LoginUser.java b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/model/LoginUser.java index f24e9f2..85a38e2 100644 --- a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/model/LoginUser.java +++ b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/model/LoginUser.java @@ -1,5 +1,6 @@ package com.fuyuanshen.common.core.domain.model; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.NoArgsConstructor; import com.fuyuanshen.common.core.domain.dto.PostDTO; @@ -132,6 +133,11 @@ public class LoginUser implements Serializable { */ private String deviceType; + /** + * 用户等级 + */ + private Byte userLevel; + /** * 获取登录id */ diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java index 6708410..2bc96f2 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java @@ -3,6 +3,8 @@ package com.fuyuanshen.fyscustomer.domain; import com.baomidou.mybatisplus.annotation.*; import com.fuyuanshen.common.core.constant.SystemConstants; import com.fuyuanshen.common.tenant.core.TenantEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -25,7 +27,7 @@ public class Customer extends TenantEntity { * 用户ID */ @TableId(value = "user_id") - private Long userId; + private Long customerId; /** * 父id @@ -40,13 +42,18 @@ public class Customer extends TenantEntity { /** * 用户账号 */ + @NotNull private String userName; /** * 用户昵称 */ + @NotNull private String nickName; + @TableField(value = "user_level") + private Byte userLevel; + /** * 用户类型(sys_user系统用户) */ @@ -110,11 +117,11 @@ public class Customer extends TenantEntity { public Customer(Long userId) { - this.userId = userId; + this.customerId = userId; } public boolean isSuperAdmin() { - return SystemConstants.SUPER_ADMIN_ID.equals(this.userId); + return SystemConstants.SUPER_ADMIN_ID.equals(this.customerId); } } diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java index 8a8d236..3b87ecb 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java @@ -75,4 +75,10 @@ public class UserQueryCriteria implements Serializable { @Schema(name = "APP/小程序账号") private String username; + /** + * 客户名称 + */ + @Schema(name = "客户名称") + private String customerName; + } diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java index dc453cb..5b8f728 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java @@ -24,4 +24,13 @@ public interface CustomerMapper extends BaseMapper { List queryAllCustomers(@Param("criteria") UserQueryCriteria criteria); + /** + * 根据条件查询客户 + * + * @param criteria + * @return + */ + List queryCustomers(@Param("criteria") UserQueryCriteria criteria); + + } diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java index ef0347c..6ad9457 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java @@ -2,6 +2,7 @@ package com.fuyuanshen.fyscustomer.service; import com.fuyuanshen.fyscustomer.domain.Customer; import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria; +import io.undertow.util.BadRequestException; import java.util.List; import java.util.Set; @@ -25,7 +26,7 @@ public interface CustomerService { * * @param customer / */ - void addCustomer(Customer customer); + void addCustomer(Customer customer) throws BadRequestException; /** * 修改客户 diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java index fd5e442..062ef88 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java @@ -1,10 +1,13 @@ package com.fuyuanshen.fyscustomer.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fuyuanshen.common.core.domain.model.LoginUser; +import com.fuyuanshen.common.satoken.utils.LoginHelper; import com.fuyuanshen.fyscustomer.domain.Customer; import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria; import com.fuyuanshen.fyscustomer.mapper.CustomerMapper; import com.fuyuanshen.fyscustomer.service.CustomerService; +import io.undertow.util.BadRequestException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,8 +46,20 @@ public class CustomerServiceImpl extends ServiceImpl i */ @Override @Transactional(rollbackFor = Exception.class) - public void addCustomer(Customer customer) { + public void addCustomer(Customer customer) throws BadRequestException { + LoginUser loginUser = LoginHelper.getLoginUser(); + + UserQueryCriteria userQueryCriteria = new UserQueryCriteria(); + userQueryCriteria.setCustomerName(customer.getUserName()); + List customers = customerMapper.queryCustomers(userQueryCriteria); + if (!customers.isEmpty()) { + throw new BadRequestException("用户名已存在!!!"); + } + customer.setUserLevel((byte) (loginUser.getUserLevel() + 1)); + customer.setPid(loginUser.getUserId()); + + save(customer); } diff --git a/fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml b/fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml index f06db01..f012caf 100644 --- a/fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml +++ b/fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml @@ -37,7 +37,9 @@ - u1.user_id + u1 + . + user_id as user_user_id, u1.dept_id as user_dept_id, u1.user_name as user_user_name, u1.nick_name as user_nick_name, u1.email as user_email, u1.phone as user_phone, u1.gender as user_gender, u1.avatar_name as user_avatar_name, u1.avatar_path as user_avatar_path, @@ -48,12 +50,16 @@ - j . job_id + j + . + job_id as job_id, j.name as job_name - r . role_id + r + . + role_id as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope @@ -84,137 +90,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update sys_user set password = #{pwd} - where user_id in - - #{id} - - - - - - - - - - - - - - + select u.user_id as customerId, + u.nick_name, + u.user_name, + u.enabled, + u.create_time from sys_user u - - and u.pid IN - - #{item} - - - - and u.nick_name like concat('%', TRIM(#{criteria.blurry}), '%') - - - and u.enabled = #{criteria.enabled} - - - and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} + + and u.user_name = concat('%', TRIM(#{criteria.customerName}), '%') - order by u.user_id desc - - limit #{criteria.offset}, #{criteria.size} - - - - - - - diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java index 18f86d0..6a098ab 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java @@ -1,5 +1,6 @@ package com.fuyuanshen.equipment.domain.query; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.sql.Timestamp; @@ -16,19 +17,22 @@ import java.util.Set; @Data public class DeviceQueryCriteria { - // @Schema(value = "设备名称") + @Schema(name = "设备id") + private Long deviceId; + + @Schema(name = "设备名称") private String deviceName; - // @Schema(value = "设备类型") - private Long deviceType; + @Schema(name = "设备类型") + private Long deviceTypeId; - // @Schema(value = "设备MAC") + @Schema(name = "设备MAC") private String deviceMac; - // @Schema(value = "设备IMEI") + @Schema(name = "设备IMEI") private String deviceImei; - // @Schema(value = "设备SN") + @Schema(name = "设备SN") private String deviceSn; /** @@ -36,29 +40,29 @@ public class DeviceQueryCriteria { * 0 失效 * 1 正常 */ - // @Schema(value = "设备状态 0 失效 1 正常 ") + @Schema(name = "设备状态 0 失效 1 正常 ") private Integer deviceStatus; - // @Schema(value = "创建时间") + @Schema(name = "创建时间") private List createTime; - // @Schema(value = "页码", example = "1") + @Schema(name = "页码", example = "1") private Integer page = 1; - // @Schema(value = "每页数据量", example = "10") + @Schema(name = "每页数据量", example = "10") private Integer size = 10; - // @Schema(value = "客户id") + @Schema(name = "客户id") private Long customerId; private Set customerIds; - // @Schema(value = "当前所有者") + @Schema(name = "当前所有者") private Long currentOwnerId; - // @Schema(value = "租户ID") + @Schema(name = "租户ID") private Long tenantId; - // @Schema(value = "通讯方式", example = "0:4G;1:蓝牙") + @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") private Integer communicationMode; } 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 8f8453a..5fca5a3 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 @@ -27,7 +27,9 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @Description: @@ -44,7 +46,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Value("${file.device.ip}") private String ip; - private final DeviceMapper deviceMapper; private final DeviceTypeMapper deviceTypeMapper; @@ -129,10 +130,22 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Transactional(rollbackFor = Exception.class) public void update(DeviceForm deviceForm) throws Exception { - Device device = getById(deviceForm.getId()); - if (device == null) { + DeviceTypeQueryCriteria deviceTypeQueryCriteria = new DeviceTypeQueryCriteria(); + deviceTypeQueryCriteria.setDeviceTypeId(deviceForm.getId()); + deviceTypeQueryCriteria.setCustomerId(LoginHelper.getUserId()); + List deviceTypes = deviceTypeMapper.findAll(deviceTypeQueryCriteria); + if (deviceTypes.isEmpty()) { + throw new Exception("设备类型不存在!!!"); + } + + DeviceQueryCriteria queryCriteria = new DeviceQueryCriteria(); + queryCriteria.setDeviceId(deviceForm.getId()); + queryCriteria.setCustomerId(LoginHelper.getUserId()); + List devices = deviceMapper.findAll(queryCriteria); + if (devices.isEmpty()) { throw new Exception("设备不存在!!!"); } + Device device = devices.get(0); // 处理上传的图片 String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName()); @@ -182,6 +195,18 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) 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); } 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 2f03e41..975b58f 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 @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.utils.PageUtil; import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.DeviceType; import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; +import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.mapper.DeviceMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; @@ -114,17 +116,25 @@ public class DeviceTypeServiceImpl extends ServiceImpl ids) { List invalidIds = new ArrayList<>(); - + List invalidId2 = new ArrayList<>(); for (Long id : ids) { DeviceType deviceType = deviceTypeMapper.selectById(id); if (deviceType == null || !Objects.equals(deviceType.getCustomerId(), LoginHelper.getUserId())) { invalidIds.add(id); } + DeviceQueryCriteria deviceQueryCriteria = new DeviceQueryCriteria(); + deviceQueryCriteria.setDeviceTypeId(id); + List devices = deviceMapper.findAll(deviceQueryCriteria); + if (!devices.isEmpty()) { + invalidId2.add(id); + } } - if (!invalidIds.isEmpty()) { throw new RuntimeException("以下设备类型无法删除(ID 不存在或无权限): " + invalidIds); } + if (!invalidId2.isEmpty()) { + throw new RuntimeException("以下设备类型无法删除(已绑定设备): " + invalidId2); + } deviceTypeMapper.deleteByIds(ids); } 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 469bc9c..f071704 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 @@ -55,8 +55,8 @@ and d.device_imei = #{criteria.deviceImei} - - and d.device_type = #{criteria.deviceType} + + and d.device_type = #{criteria.deviceTypeId} -- and da.active = #{criteria.deviceStatus} @@ -148,8 +148,8 @@ and d.device_mac = #{criteria.deviceMac} - - and d.device_type = #{criteria.deviceType} + + and d.device_type = #{criteria.deviceTypeId} and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java index a365906..fa0d4c2 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java @@ -103,6 +103,8 @@ public class SysUser extends TenantEntity { */ private String remark; + private Byte userLevel; + public SysUser(Long userId) { this.userId = userId; diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java index d7f91c1..144590e 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java @@ -139,4 +139,6 @@ public class SysUserVo implements Serializable { */ private Long roleId; + private Byte userLevel; + }