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 c7bf18a..0d55a4e 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 @@ -159,6 +159,9 @@ public class SysLoginService { loginUser.setUserType(user.getUserType()); // 用户级别 loginUser.setUserLevel(user.getUserLevel()); + // pid + loginUser.setPid(user.getPid()); + loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); loginUser.setRolePermission(permissionService.getRolePermission(userId)); if (ObjectUtil.isNotNull(user.getDeptId())) { @@ -244,7 +247,7 @@ public class SysLoginService { log.info("登录租户:{} 已被停用.", tenantId); throw new TenantException("tenant.blocked"); } else if (ObjectUtil.isNotNull(tenant.getExpireTime()) - && new Date().after(tenant.getExpireTime())) { + && new Date().after(tenant.getExpireTime())) { log.info("登录租户:{} 已超过有效期.", tenantId); throw new TenantException("tenant.expired"); } 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 85a38e2..2f6260b 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 @@ -32,6 +32,7 @@ public class LoginUser implements Serializable { * 用户ID */ private Long userId; + private Long pid; /** * 部门ID diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java index e08ebd5..ca03770 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java @@ -1,10 +1,13 @@ package com.fuyuanshen.fyscustomer.controller; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.domain.ResponseVO; import com.fuyuanshen.common.core.utils.StringUtils; import com.fuyuanshen.fyscustomer.domain.Customer; import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria; +import com.fuyuanshen.fyscustomer.domain.vo.ConsumerVo; import com.fuyuanshen.fyscustomer.service.CustomerService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -31,6 +34,21 @@ public class CustomerController { private final CustomerService customerService; + /** + * 分页查询客户(限制子客户) + * + * @param criteria + * @return + */ + @Operation(summary = "分页查询客户") + @GetMapping(value = "/customer") + public ResponseVO> queryCustomer(UserQueryCriteria criteria) { + Page page = new Page<>(criteria.getPage(), criteria.getSize()); + PageResult pageUsers = customerService.queryCustomers(criteria, page); + return ResponseVO.success(pageUsers); + } + + @GetMapping(value = "/allCustomer") @Operation(summary = "查询所有客户") public ResponseVO> queryAllCustomer(UserQueryCriteria criteria) { 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 3b87ecb..1bffc1d 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 @@ -37,6 +37,9 @@ public class UserQueryCriteria implements Serializable { @Schema(name = "ids") private Set ids; + @Schema(name = "pid") + private Long pid; + @Schema(name = "多个ID") private Set deptIds = new HashSet<>(); diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/vo/ConsumerVo.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/vo/ConsumerVo.java new file mode 100644 index 0000000..6ea6096 --- /dev/null +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/vo/ConsumerVo.java @@ -0,0 +1,97 @@ +package com.fuyuanshen.fyscustomer.domain.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +/** + * @author: 默苍璃 + * @date: 2025-06-1211:34 + */ +@Getter +@Setter +public class ConsumerVo implements Serializable { + + @Schema(name = "ID", hidden = true) + private Long id; + + + @Schema(hidden = true) + private Long deptId; + + @Schema(hidden = true) + private Long pid; + + @Schema(hidden = true) + private Byte userLevel; + + + @Schema(name = "账号") + private String username; + + @Schema(name = "用户昵称") + private String nickName; + + @Schema(name = "邮箱") + private String email; + + @Schema(name = "电话号码") + private String phone; + + @Schema(name = "用户性别") + private String gender; + + @Schema(name = "头像真实名称", hidden = true) + private String avatarName; + + @Schema(name = "头像存储的路径", hidden = true) + private String avatarPath; + + @Schema(name = "密码") + private String password; + + @Schema(name = "是否启用") + private Boolean enabled; + + @Schema(name = "是否为admin账号", hidden = true) + private Boolean isAdmin = false; + + @Schema(name = "最后修改密码的时间", hidden = true) + private Date pwdResetTime; + + /** + * 租户ID + */ + @Schema(hidden = true) + private Long tenantId; + + + private List children; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ConsumerVo consumer = (ConsumerVo) o; + return Objects.equals(id, consumer.id) && Objects.equals(username, consumer.username); + } + + + @Override + public int hashCode() { + return Objects.hash(id, username); + } + + +} 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 5b8f728..23743cb 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 @@ -15,6 +15,23 @@ import java.util.List; @Mapper public interface CustomerMapper extends BaseMapper { + /** + * 分页查询客户 + * + * @param criteria + * @return + */ + List findCustomers(@Param("criteria") UserQueryCriteria criteria); + + /** + * 获取分页总数 + * + * @param criteria + * @return + */ + Long countCustomers(@Param("criteria") UserQueryCriteria criteria); + + /** * 查询所有客户 * @@ -23,7 +40,6 @@ public interface CustomerMapper extends BaseMapper { */ List queryAllCustomers(@Param("criteria") UserQueryCriteria criteria); - /** * 根据条件查询客户 * @@ -32,5 +48,13 @@ public interface CustomerMapper extends BaseMapper { */ List queryCustomers(@Param("criteria") UserQueryCriteria criteria); + /** + * 根据id查询客户 + * + * @param customerId + * @return + */ + Customer queryCustomerById(@Param("customerId") Long customerId, @Param("pid") Long pid); + } 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 6ad9457..b4b3e26 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 @@ -1,7 +1,10 @@ package com.fuyuanshen.fyscustomer.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.fyscustomer.domain.Customer; import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria; +import com.fuyuanshen.fyscustomer.domain.vo.ConsumerVo; import io.undertow.util.BadRequestException; import java.util.List; @@ -13,6 +16,17 @@ import java.util.Set; */ public interface CustomerService { + + /** + * 分页查询客户 + * + * @param criteria + * @param page + * @return + */ + PageResult queryCustomers(UserQueryCriteria criteria, Page page); + + /** * 查询所有客户 * 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 062ef88..f0cb1bb 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,15 @@ package com.fuyuanshen.fyscustomer.service.impl; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.domain.model.LoginUser; +import com.fuyuanshen.common.core.utils.PageUtil; import com.fuyuanshen.common.satoken.utils.LoginHelper; import com.fuyuanshen.fyscustomer.domain.Customer; import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria; +import com.fuyuanshen.fyscustomer.domain.vo.ConsumerVo; import com.fuyuanshen.fyscustomer.mapper.CustomerMapper; import com.fuyuanshen.fyscustomer.service.CustomerService; import io.undertow.util.BadRequestException; @@ -26,6 +31,24 @@ public class CustomerServiceImpl extends ServiceImpl i private final CustomerMapper customerMapper; + /** + * 分页查询客户 + * + * @param criteria + * @param page + * @return + */ + @Override + public PageResult queryCustomers(UserQueryCriteria criteria, Page page) { + criteria.setOffset(page.offset()); + criteria.setPid(LoginHelper.getUserId()); + List users = customerMapper.findCustomers(criteria); + List consumerVoList = BeanUtil.copyToList(users, ConsumerVo.class); + Long total = customerMapper.countCustomers(criteria); + return PageUtil.toPage(consumerVoList, total); + } + + /** * 查询所有客户 * 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 f012caf..a716d27 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 @@ -91,6 +91,64 @@ + + + + + + + + + + \ No newline at end of file diff --git a/fys-modules/fys-equipment/pom.xml b/fys-modules/fys-equipment/pom.xml index ca320b0..f1f5e8c 100644 --- a/fys-modules/fys-equipment/pom.xml +++ b/fys-modules/fys-equipment/pom.xml @@ -101,6 +101,12 @@ fys-common-sse + + + com.fuyuanshen + fys-customer + + com.alibaba easyexcel diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java index defb608..6a500a7 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/Device.java @@ -38,6 +38,9 @@ public class Device extends TenantEntity { @Schema(name = "客户号") private Long customerId; + @Schema(name = "所属客户") + private String customerName; + /** * 当前所有者 * current_owner_id @@ -52,8 +55,6 @@ public class Device extends TenantEntity { @Schema(name = "原始所有者(创建者)") private Long originalOwnerId; - @Schema(name = "所属客户") - private String customerName; /*@Schema( name = "设备编号") private String deviceNo;*/ 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 5fca5a3..46df5f5 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 @@ -17,6 +17,8 @@ import com.fuyuanshen.equipment.domain.vo.CustomerVo; import com.fuyuanshen.equipment.mapper.DeviceMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; import com.fuyuanshen.equipment.service.DeviceService; +import com.fuyuanshen.fyscustomer.domain.Customer; +import com.fuyuanshen.fyscustomer.mapper.CustomerMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -49,6 +51,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme private final DeviceMapper deviceMapper; private final DeviceTypeMapper deviceTypeMapper; + private final CustomerMapper customerMapper; + /** * 分页查询设备 @@ -219,7 +223,40 @@ public class DeviceServiceImpl extends ServiceImpl impleme @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("待分配的客户不存在!!!"); + } + + 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.setCustomerId(customerId); + device.setCustomerName(customer.getNickName()); + devices.add(device); + + } + if (!invalidIds.isEmpty()) { + throw new RuntimeException("以下设备无法分配(ID 不存在或无权限): " + invalidIds); + } + + devices.forEach((device) -> { + deviceMapper.updateById(device); + device.setId( null); + device.setCurrentOwnerId(customerId); + deviceMapper.insert( device); + }); + } + + public void assign(List deviceIds) { } 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 144590e..0f1cfac 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 @@ -32,6 +32,7 @@ public class SysUserVo implements Serializable { * 用户ID */ private Long userId; + private Long pid; /** * 租户ID