From 9f6538b449ab88e863ab5539418087e972efd3ee Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Tue, 1 Jul 2025 15:24:09 +0800
Subject: [PATCH 01/16] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AE=A1=E7=90=86=20?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fys-admin/pom.xml | 6 +
.../controller/CustomerController.java | 40 ++
.../fyscustomer/domain/Customer.java | 120 +++++
.../domain/query/UserQueryCriteria.java | 78 ++++
.../fyscustomer/mapper/CustomerMapper.java | 27 ++
.../fyscustomer/service/CustomerService.java | 22 +
.../service/impl/CustomerServiceImpl.java | 37 ++
.../mapper/customer/CustomerMapper.xml | 438 ++++++++++++++++++
fys-modules/fys-customer/web2/WEB-INF/web.xml | 6 +
fys-modules/pom.xml | 1 +
pom.xml | 7 +
11 files changed, 782 insertions(+)
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java
create mode 100644 fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml
create mode 100644 fys-modules/fys-customer/web2/WEB-INF/web.xml
diff --git a/fys-admin/pom.xml b/fys-admin/pom.xml
index 36c4f36..636479c 100644
--- a/fys-admin/pom.xml
+++ b/fys-admin/pom.xml
@@ -65,6 +65,12 @@
fys-common-mail
+
+
+ com.fuyuanshen
+ fys-customer
+
+
com.fuyuanshen
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
new file mode 100644
index 0000000..5cb25b0
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java
@@ -0,0 +1,40 @@
+package com.fuyuanshen.fyscustomer.controller;
+
+import com.fuyuanshen.common.core.domain.ResponseVO;
+import com.fuyuanshen.fyscustomer.domain.Customer;
+import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria;
+import com.fuyuanshen.fyscustomer.service.CustomerService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-07-0114:20
+ */
+@Slf4j
+@Tag(name = "WEB:客户管理", description = "WEB:客户管理")
+@RestController
+@RequestMapping("/api/customers")
+@RequiredArgsConstructor
+public class CustomerController {
+
+ private final CustomerService customerService;
+
+
+
+ @GetMapping(value = "/allCustomer")
+ @Operation(summary = "查询所有客户")
+ public ResponseVO> queryAllCustomer(UserQueryCriteria criteria) {
+ List customers = customerService.queryAllCustomers(criteria);
+ return ResponseVO.success(customers);
+ }
+
+
+}
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
new file mode 100644
index 0000000..6708410
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java
@@ -0,0 +1,120 @@
+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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 用户对象 sys_user
+ *
+ * @author Lion Li
+ */
+
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@TableName("sys_user")
+public class Customer extends TenantEntity {
+
+ /**
+ * 用户ID
+ */
+ @TableId(value = "user_id")
+ private Long userId;
+
+ /**
+ * 父id
+ */
+ private Long pid;
+
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+ /**
+ * 用户账号
+ */
+ private String userName;
+
+ /**
+ * 用户昵称
+ */
+ private String nickName;
+
+ /**
+ * 用户类型(sys_user系统用户)
+ */
+ private String userType;
+
+ /**
+ * 用户邮箱
+ */
+ private String email;
+
+ /**
+ * 手机号码
+ */
+ private String phonenumber;
+
+ /**
+ * 用户性别
+ */
+ private String sex;
+
+ /**
+ * 用户头像
+ */
+ private Long avatar;
+
+ /**
+ * 密码
+ */
+ @TableField(
+ insertStrategy = FieldStrategy.NOT_EMPTY,
+ updateStrategy = FieldStrategy.NOT_EMPTY,
+ whereStrategy = FieldStrategy.NOT_EMPTY
+ )
+ private String password;
+
+ /**
+ * 帐号状态(0正常 1停用)
+ */
+ private String status;
+
+ /**
+ * 删除标志(0代表存在 1代表删除)
+ */
+ @TableLogic
+ private String delFlag;
+
+ /**
+ * 最后登录IP
+ */
+ private String loginIp;
+
+ /**
+ * 最后登录时间
+ */
+ private Date loginDate;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+ public Customer(Long userId) {
+ this.userId = userId;
+ }
+
+ public boolean isSuperAdmin() {
+ return SystemConstants.SUPER_ADMIN_ID.equals(this.userId);
+ }
+
+}
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
new file mode 100644
index 0000000..8a8d236
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2019-2025 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.fuyuanshen.fyscustomer.domain.query;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Zheng Jie
+ * @date 2018-11-23
+ */
+@Data
+public class UserQueryCriteria implements Serializable {
+
+ @Schema(name = "ID")
+ private Long id;
+
+ @Schema(name = "ids")
+ private Set ids;
+
+ @Schema(name = "多个ID")
+ private Set deptIds = new HashSet<>();
+
+ @Schema(name = "模糊查询")
+ private String blurry;
+
+ @Schema(name = "是否启用")
+ private Boolean enabled;
+
+ @Schema(name = "部门ID")
+ private Long deptId;
+
+ @Schema(name = "创建时间")
+ private List createTime;
+
+ @Schema(name = "页码", example = "1")
+ private Integer page = 1;
+
+ @Schema(name = "每页数据量", example = "10")
+ private Integer size = 10;
+
+ @Schema(name = "偏移量", hidden = true)
+ private long offset;
+
+ /**
+ * 用户类型
+ * 0 app
+ * 1 小程序
+ */
+ @Schema(name = "用户类型 0 app 1 小程序")
+ private Integer userType;
+
+ /**
+ * 账号
+ */
+ @Schema(name = "APP/小程序账号")
+ private String 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
new file mode 100644
index 0000000..dc453cb
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java
@@ -0,0 +1,27 @@
+package com.fuyuanshen.fyscustomer.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fuyuanshen.fyscustomer.domain.Customer;
+import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-07-0114:37
+ */
+@Mapper
+public interface CustomerMapper extends BaseMapper {
+
+ /**
+ * 查询所有客户
+ *
+ * @param criteria
+ * @return
+ */
+ List queryAllCustomers(@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
new file mode 100644
index 0000000..dff9ecd
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java
@@ -0,0 +1,22 @@
+package com.fuyuanshen.fyscustomer.service;
+
+import com.fuyuanshen.fyscustomer.domain.Customer;
+import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria;
+
+import java.util.List;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-07-0114:31
+ */
+public interface CustomerService {
+
+ /**
+ * 查询所有客户
+ *
+ * @param criteria
+ * @return
+ */
+ List queryAllCustomers(UserQueryCriteria criteria);
+
+}
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
new file mode 100644
index 0000000..4e1f0cf
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java
@@ -0,0 +1,37 @@
+package com.fuyuanshen.fyscustomer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-07-0114:31
+ */
+@Service
+@RequiredArgsConstructor
+public class CustomerServiceImpl extends ServiceImpl implements CustomerService {
+
+ private final CustomerMapper customerMapper;
+
+
+ /**
+ * 查询所有客户
+ *
+ * @param criteria
+ * @return
+ */
+ @Override
+ public List queryAllCustomers(UserQueryCriteria criteria) {
+ List users = customerMapper.queryAllCustomers(criteria);
+ return users;
+ }
+
+
+}
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
new file mode 100644
index 0000000..b70ed49
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/resources/mapper/customer/CustomerMapper.xml
@@ -0,0 +1,438 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ u
+ .
+ user_user_id
+ AS user_user_id,
+ u.username,
+ u.nick_name AS nickName,
+ u.email,
+ u.phone,
+ u.gender,
+ u.avatar_name AS avatarName,
+ u.avatar_path AS avatarPath,
+ u.enabled,
+ IF(u.is_admin = 1, true, false) AS isAdmin,
+ u.pwd_reset_time AS pwdResetTime,
+ u.dept_id AS deptId,
+ u.tenant_id AS tenantId
+
+
+
+ u1.user_id
+ as user_user_id, u1.dept_id as user_dept_id, u1.username as user_username,
+ 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,
+ u1.enabled as user_enabled, u1.pwd_reset_time as user_pwd_reset_time, u1.create_by as user_create_by,
+ u1.update_by as user_update_by, u1.create_time as user_create_time, u1.update_time as user_update_time,
+ u1.user_level, u1.pid as user_pid,u1.is_admin AS admin,
+ d.dept_id as dept_id, d.name as dept_name
+
+
+
+ j . job_id
+ as job_id, j.name as job_name
+
+
+
+ r . role_id
+ as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope
+
+
+
+
+
+ and u1.user_id = #{criteria.id}
+
+
+ and u1.enabled = #{criteria.enabled}
+
+
+ and u1.dept_id in
+
+ #{deptId}
+
+
+
+ and (
+ u1.username like concat('%', #{criteria.blurry}, '%')
+ or u1.nick_name like concat('%', #{criteria.blurry}, '%')
+ or u1.email like concat('%', #{criteria.blurry}, '%')
+ )
+
+
+ and u1.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update sys_user set password = #{pwd}
+ where user_id in
+
+ #{id}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/fys-modules/fys-customer/web2/WEB-INF/web.xml b/fys-modules/fys-customer/web2/WEB-INF/web.xml
new file mode 100644
index 0000000..d80081d
--- /dev/null
+++ b/fys-modules/fys-customer/web2/WEB-INF/web.xml
@@ -0,0 +1,6 @@
+
+
+
\ No newline at end of file
diff --git a/fys-modules/pom.xml b/fys-modules/pom.xml
index 551067b..478838d 100644
--- a/fys-modules/pom.xml
+++ b/fys-modules/pom.xml
@@ -16,6 +16,7 @@
fys-system
fys-workflow
fys-equipment
+ fys-customer
fys-modules
diff --git a/pom.xml b/pom.xml
index 1c1623b..df4f1cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -351,6 +351,13 @@
${revision}
+
+
+ com.fuyuanshen
+ fys-customer
+ ${revision}
+
+
com.fuyuanshen
fys-job
From dd6d5e4911e2bf65de2d779518536d629ff3f976 Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Tue, 1 Jul 2025 15:24:17 +0800
Subject: [PATCH 02/16] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AE=A1=E7=90=86=20?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fys-modules/fys-customer/pom.xml | 117 ++++++++++++++++++
.../src/main/resources/application.properties | 1 +
2 files changed, 118 insertions(+)
create mode 100644 fys-modules/fys-customer/pom.xml
create mode 100644 fys-modules/fys-customer/src/main/resources/application.properties
diff --git a/fys-modules/fys-customer/pom.xml b/fys-modules/fys-customer/pom.xml
new file mode 100644
index 0000000..7788bf9
--- /dev/null
+++ b/fys-modules/fys-customer/pom.xml
@@ -0,0 +1,117 @@
+
+
+
+
+ com.fuyuanshen
+ fys-modules
+ ${revision}
+
+
+ 4.0.0
+ fys-customer
+
+
+ 富源晟客户管理
+
+
+
+
+
+ com.fuyuanshen
+ fys-common-core
+
+
+
+ com.fuyuanshen
+ fys-common-doc
+
+
+
+ com.fuyuanshen
+ fys-common-mybatis
+
+
+
+ com.fuyuanshen
+ fys-common-translation
+
+
+
+
+ com.fuyuanshen
+ fys-common-oss
+
+
+
+ com.fuyuanshen
+ fys-common-log
+
+
+
+
+ com.fuyuanshen
+ fys-common-excel
+
+
+
+
+ com.fuyuanshen
+ fys-common-sms
+
+
+
+ com.fuyuanshen
+ fys-common-tenant
+
+
+
+ com.fuyuanshen
+ fys-common-security
+
+
+
+ com.fuyuanshen
+ fys-common-web
+
+
+
+ com.fuyuanshen
+ fys-common-idempotent
+
+
+
+ com.fuyuanshen
+ fys-common-sensitive
+
+
+
+ com.fuyuanshen
+ fys-common-encrypt
+
+
+
+ com.fuyuanshen
+ fys-common-websocket
+
+
+
+ com.fuyuanshen
+ fys-common-sse
+
+
+
+ com.alibaba
+ easyexcel
+ 3.3.1
+
+
+ poi-ooxml-schemas
+ org.apache.poi
+
+
+
+
+
+
+
diff --git a/fys-modules/fys-customer/src/main/resources/application.properties b/fys-modules/fys-customer/src/main/resources/application.properties
new file mode 100644
index 0000000..08e63d2
--- /dev/null
+++ b/fys-modules/fys-customer/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=fys-customer
From 56288830cb3d3e22732dc914ff7c8b19f270fa81 Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Tue, 1 Jul 2025 16:20:39 +0800
Subject: [PATCH 03/16] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=89=80=E6=9C=89?=
=?UTF-8?q?=E5=AE=A2=E6=88=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../encrypt/utils/EncryptUtilsTest.java | 4 +-
.../mapper/customer/CustomerMapper.xml | 40 +++++++++----------
2 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java b/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java
index 04662bf..06b72d0 100644
--- a/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java
+++ b/fys-common/fys-common-encrypt/src/main/java/com/fuyuanshen/common/encrypt/utils/EncryptUtilsTest.java
@@ -39,8 +39,8 @@ public class EncryptUtilsTest {
loginBody.setClientId("e5cd7e4891bf95d1d19206ce24a7b32e");
loginBody.setGrantType("password");
loginBody.setTenantId("894078");
- loginBody.setCode("21");
- loginBody.setUuid("39785885a3ef42d59501502848cd1dcb");
+ loginBody.setCode("9");
+ loginBody.setUuid("64d5a9107e4949f3ba8f57ede00bd034");
// loginBody.setUsername("admin");
// loginBody.setPassword("admin123");
loginBody.setUsername("dyf");
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 b70ed49..f06db01 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
@@ -4,7 +4,7 @@
-
+
@@ -22,7 +22,7 @@
.
user_user_id
AS user_user_id,
- u.username,
+ u.user_name,
u.nick_name AS nickName,
u.email,
u.phone,
@@ -38,7 +38,7 @@
u1.user_id
- as user_user_id, u1.dept_id as user_dept_id, u1.username as user_username,
+ 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,
u1.enabled as user_enabled, u1.pwd_reset_time as user_pwd_reset_time, u1.create_by as user_create_by,
@@ -73,7 +73,7 @@
and (
- u1.username like concat('%', #{criteria.blurry}, '%')
+ u1.user_name like concat('%', #{criteria.blurry}, '%')
or u1.nick_name like concat('%', #{criteria.blurry}, '%')
or u1.email like concat('%', #{criteria.blurry}, '%')
)
@@ -133,8 +133,8 @@
AND u.nick_name = #{userQuery.nickName}
-
- AND u.username = #{userQuery.username}
+
+ AND u.user_name = #{userQuery.user_name}
AND u.password = #{userQuery.password}
@@ -164,7 +164,7 @@
-
+
select
u1.password user_password, u1.is_admin user_is_admin, u1.tenant_id,
from sys_user u1
left join sys_dept d on u1.dept_id = d.dept_id
- where u1.username = #{username}
+ where u1.user_name = #{user_name}
@@ -252,19 +252,19 @@
- select user_id as id, username
+ select user_id as id, user_name
from sys_user
where email = #{email}
- select user_id as id, username
+ select user_id as id, user_name
from sys_user
where phone = #{phone}
- SELECT u.user_id as id, u.username
+ SELECT u.user_id as id, u.user_name
FROM sys_user u,
sys_users_roles r
WHERE u.user_id = r.user_id
@@ -284,7 +284,7 @@
- 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 @@
-
-
- select
- u.*,
- ,
-
- from (
- select
-
- from sys_user u1
- left join sys_dept d on u1.dept_id = d.dept_id
-
- order by u1.user_id desc
-
- limit #{criteria.offset}, #{criteria.size}
-
- ) u
- left join sys_users_jobs suj on u.user_user_id = suj.user_id
- left join sys_job j on suj.job_id = j.job_id
- left join sys_users_roles sur on u.user_user_id = sur.user_id
- left join sys_role r on sur.role_id = r.role_id
- order by u.user_user_id desc
-
-
-
-
-
- SELECT u.*
- FROM sys_user u
-
-
- AND u.pid = #{userQuery.pid}
-
-
- ORDER BY u.user_id DESC
-
-
-
-
- select
- u.*
- from sys_user u
-
-
- AND u.pid = #{userQuery.pid}
-
-
- AND u.nick_name = #{userQuery.nickName}
-
-
- AND u.user_name = #{userQuery.user_name}
-
-
- AND u.password = #{userQuery.password}
-
-
-
-
-
-
-
- select
- u.*
- from sys_user u
-
-
- and u.tenant_id = #{tenantId}
-
-
-
-
-
- select count(*)
- from sys_user u1
-
-
-
-
-
- select
- u.user_id as id, 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]}
-
-
- order by u.user_id desc
-
- limit #{criteria.offset}, #{criteria.size}
-
-
-
-
-
- select count(*)
- 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]}
-
-
-
- select u.user_id as id,
+ select u.user_id as customerId,
u.nick_name,
u.user_name,
u.enabled,
@@ -231,207 +110,21 @@
-
- select
- u1.password user_password, u1.is_admin user_is_admin, u1.tenant_id,
-
- from sys_user u1
- left join sys_dept d on u1.dept_id = d.dept_id
- where u1.user_name = #{user_name}
-
-
-
- select
- u1.password user_password, u1.is_admin user_is_admin, u1.tenant_id,
-
- from sys_user u1
- left join sys_dept d on u1.dept_id = d.dept_id
- where u1.nick_name = #{nickName}
-
-
-
-
- select user_id as id, user_name
- from sys_user
- where email = #{email}
-
-
-
- select user_id as id, user_name
- from sys_user
- where phone = #{phone}
-
-
-
- SELECT u.user_id as id, u.user_name
- FROM sys_user u,
- sys_users_roles r
- WHERE u.user_id = r.user_id
- AND r.role_id = #{roleId}
- group by u.user_id
-
-
-
- SELECT u.*
- FROM sys_user u,
- sys_users_roles r,
- sys_roles_depts d
- WHERE u.user_id = r.user_id
- AND r.role_id = d.role_id
- AND d.dept_id = #{deptId}
- group by u.user_id
-
-
-
-
-
- SELECT count(*) FROM sys_user u, sys_users_jobs j
- WHERE u.user_id = j.user_id AND j.job_id IN
-
- #{jobId}
-
-
-
-
- SELECT count(*) FROM sys_user u
- WHERE u.dept_id IN
-
- #{deptId}
-
-
-
-
- SELECT count(*) FROM sys_user u, sys_users_roles r
- WHERE u.user_id = r.user_id AND r.role_id in
-
- #{roleId}
-
-
-
-
-
- update sys_user set password = #{pwd}
- where user_id in
-
- #{id}
-
-
-
-
-
- SELECT u.user_id AS id,
- u.nick_name,
- u.user_name,
- u.enabled,
- u.create_time
- FROM sys_user u
- WHERE u.pid = #{currentUserId}
- OR u.user_id = #{currentUserId}
-
-
-
-
- WITH RECURSIVE UserTree AS (
- -- 初始查询:查找指定用户自己
- SELECT user_id AS id, user_name, pid
- FROM sys_user
- WHERE user_id = #{currentUserId} -- 替换为你要查询的用户ID
-
- UNION ALL
-
- -- 递归部分:查找所有子节点
- SELECT u.user_id AS id, u.user_name, u.pid
- FROM sys_user u
- INNER JOIN UserTree ut ON u.pid = ut.id)
- SELECT *
- FROM UserTree;
-
-
-
-
- WITH RECURSIVE UserTree AS (
- -- 初始查询:查找当前用户的直接子节点
- SELECT user_id AS id, user_name, pid
- FROM sys_user
- WHERE pid = #{currentUserId} -- 当前用户的子节点
-
- UNION ALL
-
- -- 递归部分:查找所有后代节点
- SELECT u.user_id AS id, u.user_name, u.pid
- FROM sys_user u
- INNER JOIN UserTree ut ON u.pid = ut.id)
- SELECT *
- FROM UserTree;
-
-
-
-
- select
- u.user_id as id, u.nick_name , u.user_name, u.enabled, u.create_time,
- u.pid -- 确保包含 pid 字段
+
+
+ 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}
-
-
-
-
- WITH RECURSIVE user_tree AS (
- SELECT * FROM sys_user WHERE user_id IN
-
- #{item}
-
- UNION ALL
- SELECT u.* FROM sys_user u
- INNER JOIN user_tree ut ON u.user_id = ut.pid
- )
- SELECT DISTINCT * FROM user_tree;
-
-
-
-
- WITH RECURSIVE user_ancestors AS (SELECT user_id, pid, tenant_id
- FROM sys_user
- WHERE user_id = #{currentUserId}
-
- UNION ALL
-
- SELECT u.user_id, u.pid, u.tenant_id
- FROM sys_user u
- INNER JOIN user_ancestors a ON u.user_id = a.pid)
- SELECT *
- FROM user_ancestors
- WHERE user_id != #{currentUserId}
- AND user_id IS NOT NULL;
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;
+
}
From abe9dc2fe845327bb29fc0354464a8d9d17a16f5 Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Thu, 3 Jul 2025 10:08:09 +0800
Subject: [PATCH 11/16] =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=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 | 5 +-
.../common/core/domain/model/LoginUser.java | 1 +
.../controller/CustomerController.java | 18 ++++
.../domain/query/UserQueryCriteria.java | 3 +
.../fyscustomer/domain/vo/ConsumerVo.java | 97 +++++++++++++++++++
.../fyscustomer/mapper/CustomerMapper.java | 26 ++++-
.../fyscustomer/service/CustomerService.java | 14 +++
.../service/impl/CustomerServiceImpl.java | 23 +++++
.../mapper/customer/CustomerMapper.xml | 73 ++++++++++++++
fys-modules/fys-equipment/pom.xml | 6 ++
.../fuyuanshen/equipment/domain/Device.java | 5 +-
.../service/impl/DeviceServiceImpl.java | 37 +++++++
.../system/domain/vo/SysUserVo.java | 1 +
13 files changed, 305 insertions(+), 4 deletions(-)
create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/vo/ConsumerVo.java
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 @@
+
+
+ select
+ u.user_id as id, u.nick_name , u.username, u.enabled, u.create_time
+ from sys_user u
+
+
+ and u.pid IN
+
+ #{item}
+
+
+
+ and u.pid = #{criteria.pid}
+
+
+ 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]}
+
+
+ order by u.user_id desc
+
+ limit #{criteria.offset}, #{criteria.size}
+
+
+
+
+
+ select count(*)
+ from sys_user u
+
+
+ and u.pid IN
+
+ #{item}
+
+
+
+ and u.pid = #{criteria.pid}
+
+
+ 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]}
+
+
+
+
+
select u.user_id as customerId,
@@ -127,5 +185,20 @@
+
+
+ select u.*
+ from sys_user u
+
+
+ and u.user_id = customerId)
+
+
+ and u.pid = pid)
+
+
+
+
+
\ 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
From b06e071196e249807aac1bf736270d477ade520b Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Thu, 3 Jul 2025 11:39:49 +0800
Subject: [PATCH 12/16] =?UTF-8?q?WEB=EF=BC=9A=E5=AE=A2=E6=88=B7=E7=AE=A1?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
fys-admin/src/main/resources/application.yml | 2 ++
.../common/core/domain/PageResult.java | 4 ++--
.../controller/CustomerController.java | 19 +++++++++---------
.../domain/Customer.java | 6 +++++-
.../domain/query/UserQueryCriteria.java | 6 +++---
.../domain/vo/ConsumerVo.java | 3 +--
.../mapper/CustomerMapper.java | 6 +++---
.../service/CustomerService.java | 12 +++++------
.../service/impl/CustomerServiceImpl.java | 20 +++++++++----------
.../mapper/customer/CustomerMapper.xml | 16 +++++++--------
.../service/impl/DeviceServiceImpl.java | 4 ++--
11 files changed, 51 insertions(+), 47 deletions(-)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/controller/CustomerController.java (80%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/domain/Customer.java (94%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/domain/query/UserQueryCriteria.java (94%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/domain/vo/ConsumerVo.java (96%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/mapper/CustomerMapper.java (87%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/service/CustomerService.java (71%)
rename fys-modules/fys-customer/src/main/java/com/fuyuanshen/{fyscustomer => customer}/service/impl/CustomerServiceImpl.java (81%)
diff --git a/fys-admin/src/main/resources/application.yml b/fys-admin/src/main/resources/application.yml
index 7970540..b10ed90 100644
--- a/fys-admin/src/main/resources/application.yml
+++ b/fys-admin/src/main/resources/application.yml
@@ -214,6 +214,8 @@ springdoc:
packages-to-scan: com.fuyuanshen.workflow
- group: 设备管理模块
packages-to-scan: com.fuyuanshen.equipment
+ - group: 客户管理模块
+ packages-to-scan: com.fuyuanshen.customer
# 防止XSS攻击
xss:
diff --git a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/PageResult.java b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/PageResult.java
index 2ab8173..2d46205 100644
--- a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/PageResult.java
+++ b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/domain/PageResult.java
@@ -18,7 +18,7 @@ import java.util.List;
@AllArgsConstructor
public class PageResult implements Serializable {
- private List content;
+ private List rows;
- private long totalElements;
+ private long total;
}
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/customer/controller/CustomerController.java
similarity index 80%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/controller/CustomerController.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/controller/CustomerController.java
index ca03770..471aa23 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/customer/controller/CustomerController.java
@@ -1,14 +1,14 @@
-package com.fuyuanshen.fyscustomer.controller;
+package com.fuyuanshen.customer.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 com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
+import com.fuyuanshen.customer.domain.Customer;
+import com.fuyuanshen.customer.domain.query.UserQueryCriteria;
+import com.fuyuanshen.customer.domain.vo.ConsumerVo;
+import com.fuyuanshen.customer.service.CustomerService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.undertow.util.BadRequestException;
@@ -42,10 +42,9 @@ public class CustomerController {
*/
@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);
+ public TableDataInfo queryCustomer(UserQueryCriteria criteria) {
+ Page page = new Page<>(criteria.getPageNum(), criteria.getPageSize());
+ return customerService.queryCustomers(criteria, page);
}
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/customer/domain/Customer.java
similarity index 94%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/Customer.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/Customer.java
index 2bc96f2..9886065 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/customer/domain/Customer.java
@@ -1,4 +1,4 @@
-package com.fuyuanshen.fyscustomer.domain;
+package com.fuyuanshen.customer.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.fuyuanshen.common.core.constant.SystemConstants;
@@ -100,6 +100,10 @@ public class Customer extends TenantEntity {
@TableLogic
private String delFlag;
+ @NotNull
+ @Schema(name = "是否启用")
+ private Boolean enabled;
+
/**
* 最后登录IP
*/
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/customer/domain/query/UserQueryCriteria.java
similarity index 94%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/query/UserQueryCriteria.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/query/UserQueryCriteria.java
index 1bffc1d..d4b6f5b 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/customer/domain/query/UserQueryCriteria.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.fuyuanshen.fyscustomer.domain.query;
+package com.fuyuanshen.customer.domain.query;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -56,10 +56,10 @@ public class UserQueryCriteria implements Serializable {
private List createTime;
@Schema(name = "页码", example = "1")
- private Integer page = 1;
+ private Integer pageNum = 1;
@Schema(name = "每页数据量", example = "10")
- private Integer size = 10;
+ private Integer pageSize = 10;
@Schema(name = "偏移量", hidden = true)
private long offset;
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/customer/domain/vo/ConsumerVo.java
similarity index 96%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/domain/vo/ConsumerVo.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/vo/ConsumerVo.java
index 6ea6096..874bba3 100644
--- 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/customer/domain/vo/ConsumerVo.java
@@ -1,4 +1,4 @@
-package com.fuyuanshen.fyscustomer.domain.vo;
+package com.fuyuanshen.customer.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -9,7 +9,6 @@ import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
/**
* @author: 默苍璃
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/customer/mapper/CustomerMapper.java
similarity index 87%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/mapper/CustomerMapper.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/mapper/CustomerMapper.java
index 23743cb..831c46c 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/customer/mapper/CustomerMapper.java
@@ -1,8 +1,8 @@
-package com.fuyuanshen.fyscustomer.mapper;
+package com.fuyuanshen.customer.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.fuyuanshen.fyscustomer.domain.Customer;
-import com.fuyuanshen.fyscustomer.domain.query.UserQueryCriteria;
+import com.fuyuanshen.customer.domain.Customer;
+import com.fuyuanshen.customer.domain.query.UserQueryCriteria;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
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/customer/service/CustomerService.java
similarity index 71%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/CustomerService.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/CustomerService.java
index b4b3e26..12f4a2c 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/customer/service/CustomerService.java
@@ -1,10 +1,10 @@
-package com.fuyuanshen.fyscustomer.service;
+package com.fuyuanshen.customer.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 com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
+import com.fuyuanshen.customer.domain.Customer;
+import com.fuyuanshen.customer.domain.query.UserQueryCriteria;
+import com.fuyuanshen.customer.domain.vo.ConsumerVo;
import io.undertow.util.BadRequestException;
import java.util.List;
@@ -24,7 +24,7 @@ public interface CustomerService {
* @param page
* @return
*/
- PageResult queryCustomers(UserQueryCriteria criteria, Page page);
+ TableDataInfo 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/customer/service/impl/CustomerServiceImpl.java
similarity index 81%
rename from fys-modules/fys-customer/src/main/java/com/fuyuanshen/fyscustomer/service/impl/CustomerServiceImpl.java
rename to fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/impl/CustomerServiceImpl.java
index f0cb1bb..bbb27d1 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/customer/service/impl/CustomerServiceImpl.java
@@ -1,17 +1,16 @@
-package com.fuyuanshen.fyscustomer.service.impl;
+package com.fuyuanshen.customer.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.mybatis.core.page.TableDataInfo;
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 com.fuyuanshen.customer.domain.Customer;
+import com.fuyuanshen.customer.domain.query.UserQueryCriteria;
+import com.fuyuanshen.customer.domain.vo.ConsumerVo;
+import com.fuyuanshen.customer.mapper.CustomerMapper;
+import com.fuyuanshen.customer.service.CustomerService;
import io.undertow.util.BadRequestException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -39,13 +38,14 @@ public class CustomerServiceImpl extends ServiceImpl i
* @return
*/
@Override
- public PageResult queryCustomers(UserQueryCriteria criteria, Page page) {
+ public TableDataInfo 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);
+ // return PageUtil.toPage(consumerVoList, total);
+ return new TableDataInfo(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 a716d27..99f404e 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
@@ -1,7 +1,7 @@
-
+
@@ -92,9 +92,9 @@
-
+
select
- u.user_id as id, u.nick_name , u.username, u.enabled, u.create_time
+ u.user_id as id, u.nick_name , u.user_name, u.enabled, u.create_time
from sys_user u
@@ -118,7 +118,7 @@
order by u.user_id desc
- limit #{criteria.offset}, #{criteria.size}
+ limit #{criteria.offset}, #{criteria.pageSize}
@@ -150,7 +150,7 @@
-
+
select u.user_id as customerId,
u.nick_name,
u.user_name,
@@ -170,8 +170,8 @@
-
+
select u.user_id as customerId,
u.nick_name,
u.user_name,
@@ -186,7 +186,7 @@
-
+
select u.*
from sys_user u
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 46df5f5..432a54a 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,8 +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 com.fuyuanshen.customer.domain.Customer;
+import com.fuyuanshen.customer.mapper.CustomerMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
From 5bc56ca36d3362d29bf7793d5491c3a61af3e1ff Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Thu, 3 Jul 2025 14:17:53 +0800
Subject: [PATCH 13/16] =?UTF-8?q?WEB=EF=BC=9A=E5=AE=A2=E6=88=B7=E7=AE=A1?=
=?UTF-8?q?=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/CustomerController.java | 2 ++
.../customer/domain/vo/ConsumerVo.java | 21 +++++++------------
.../mapper/customer/CustomerMapper.xml | 8 +++----
.../controller/DeviceController.java | 2 +-
.../service/impl/DeviceServiceImpl.java | 6 ++++++
5 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/controller/CustomerController.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/controller/CustomerController.java
index 471aa23..b38095a 100644
--- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/controller/CustomerController.java
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/controller/CustomerController.java
@@ -1,6 +1,7 @@
package com.fuyuanshen.customer.controller;
import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.crypto.digest.BCrypt;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuyuanshen.common.core.domain.ResponseVO;
import com.fuyuanshen.common.core.utils.StringUtils;
@@ -63,6 +64,7 @@ public class CustomerController {
if (StringUtils.isBlank(customer.getPassword())) {
throw new BadRequestException("账号密码不能为空");
}
+ customer.setPassword(BCrypt.hashpw(customer.getPassword()));
customerService.addCustomer(customer);
return ResponseVO.success("新增客户成功!!!");
}
diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/vo/ConsumerVo.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/vo/ConsumerVo.java
index 874bba3..d17971c 100644
--- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/vo/ConsumerVo.java
+++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/vo/ConsumerVo.java
@@ -1,6 +1,7 @@
package com.fuyuanshen.customer.domain.vo;
+import com.fuyuanshen.common.tenant.core.TenantEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@@ -16,11 +17,10 @@ import java.util.Objects;
*/
@Getter
@Setter
-public class ConsumerVo implements Serializable {
+public class ConsumerVo extends TenantEntity {
@Schema(name = "ID", hidden = true)
- private Long id;
-
+ private Long customerId;
@Schema(hidden = true)
private Long deptId;
@@ -31,9 +31,8 @@ public class ConsumerVo implements Serializable {
@Schema(hidden = true)
private Byte userLevel;
-
@Schema(name = "账号")
- private String username;
+ private String userName;
@Schema(name = "用户昵称")
private String nickName;
@@ -65,15 +64,9 @@ public class ConsumerVo implements Serializable {
@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) {
@@ -83,13 +76,13 @@ public class ConsumerVo implements Serializable {
return false;
}
ConsumerVo consumer = (ConsumerVo) o;
- return Objects.equals(id, consumer.id) && Objects.equals(username, consumer.username);
+ return Objects.equals(customerId, consumer.customerId) && Objects.equals(userName, consumer.userName);
}
@Override
public int hashCode() {
- return Objects.hash(id, username);
+ return Objects.hash(customerId, userName);
}
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 99f404e..eeb2e85 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
@@ -1,8 +1,8 @@
-
+
-
+
@@ -94,7 +94,7 @@
select
- u.user_id as id, u.nick_name , u.user_name, u.enabled, u.create_time
+ u.user_id as customerId, u.nick_name , u.user_name, u.enabled, u.create_time
from sys_user u
@@ -180,7 +180,7 @@
from sys_user u
- and u.user_name = concat('%', TRIM(#{criteria.customerName}), '%')
+ and u.user_name = TRIM(#{criteria.customerName})
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 663006c..62f6bc3 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
@@ -120,7 +120,7 @@ public class DeviceController {
// @Log("撤回设备")
- @Operation(summary = "撤回设备")
+ @Operation(summary = "撤回分配设备")
@PostMapping(value = "/withdraw")
public ResponseVO
order by u.user_id desc
@@ -142,8 +142,8 @@
and u.enabled = #{criteria.enabled}
-
- and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
+
+ and u.create_time between #{criteria.params.beginTime} and #{criteria.params.endTime}
From 0271a84bc219f8487395d7822b75fe45972994d6 Mon Sep 17 00:00:00 2001
From: daiyongfei <974332738@qq.com>
Date: Thu, 3 Jul 2025 16:58:08 +0800
Subject: [PATCH 15/16] =?UTF-8?q?WEB=EF=BC=9A=E8=AE=BE=E5=A4=87=E7=B1=BB?=
=?UTF-8?q?=E5=9E=8B=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application-dev.yml | 10 +++----
fys-modules/fys-equipment/pom.xml | 5 ++++
.../controller/DeviceController.java | 27 ++++++++++++-------
.../controller/DeviceTypeController.java | 7 ++---
.../equipment/domain/DeviceType.java | 8 +++---
.../equipment/mapper/DeviceMapper.java | 2 +-
.../equipment/mapper/DeviceTypeMapper.java | 2 +-
.../equipment/service/DeviceService.java | 3 ++-
.../equipment/service/DeviceTypeService.java | 3 ++-
.../service/impl/DeviceServiceImpl.java | 7 +++--
.../service/impl/DeviceTypeServiceImpl.java | 16 +++++++----
11 files changed, 58 insertions(+), 32 deletions(-)
diff --git a/fys-admin/src/main/resources/application-dev.yml b/fys-admin/src/main/resources/application-dev.yml
index 43b5507..52b2877 100644
--- a/fys-admin/src/main/resources/application-dev.yml
+++ b/fys-admin/src/main/resources/application-dev.yml
@@ -49,9 +49,9 @@ spring:
driverClassName: com.mysql.cj.jdbc.Driver
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
- url: jdbc:mysql://localhost:3306/fys-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+ url: jdbc:mysql://120.79.224.186:3366/fys-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
- password: root
+ password: 1fys@QWER..
# # 从库数据源
# slave:
# lazy: true
@@ -98,13 +98,13 @@ spring:
spring.data:
redis:
# 地址
- host: 123.207.99.140
+ host: 120.79.224.186
# 端口,默认为6379
- port: 6379
+ port: 26379
# 数据库索引
database: 2
# redis 密码必须配置
- password: ccxx11234
+ password: 1fys@QWER..
# 连接超时时间
timeout: 10s
# 是否开启ssl
diff --git a/fys-modules/fys-equipment/pom.xml b/fys-modules/fys-equipment/pom.xml
index f1f5e8c..fe09466 100644
--- a/fys-modules/fys-equipment/pom.xml
+++ b/fys-modules/fys-equipment/pom.xml
@@ -38,6 +38,11 @@
fys-common-translation
+
+ com.fuyuanshen
+ fys-system
+
+
com.fuyuanshen
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 62f6bc3..f93b997 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
@@ -5,12 +5,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuyuanshen.common.core.constant.ResponseMessageConstants;
import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.core.domain.ResponseVO;
+import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.dto.ImportResult;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
import com.fuyuanshen.equipment.service.DeviceService;
+import com.fuyuanshen.system.domain.vo.SysOssVo;
+import com.fuyuanshen.system.service.ISysOssService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -37,21 +40,23 @@ import java.util.List;
@RequestMapping("/api/device")
public class DeviceController {
+ private final ISysOssService ossService;
private final DeviceService deviceService;
@Operation(summary = "分页查询设备列表", security = {@SecurityRequirement(name = "bearer-key")})
@GetMapping
- public ResponseVO> queryDevice(DeviceQueryCriteria criteria) {
- Page
+
+
+ org.apache.poi
+ ooxml-schemas
+ 1.4
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 f93b997..d1cfb59 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
@@ -3,7 +3,6 @@ package com.fuyuanshen.equipment.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuyuanshen.common.core.constant.ResponseMessageConstants;
-import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.core.domain.ResponseVO;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device;
@@ -12,6 +11,7 @@ import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
import com.fuyuanshen.equipment.service.DeviceService;
+import com.fuyuanshen.equipment.service.impl.DeviceExportService;
import com.fuyuanshen.system.domain.vo.SysOssVo;
import com.fuyuanshen.system.service.ISysOssService;
import io.swagger.v3.oas.annotations.Operation;
@@ -43,19 +43,13 @@ public class DeviceController {
private final ISysOssService ossService;
private final DeviceService deviceService;
+ private final DeviceExportService exportService;
+
@Operation(summary = "分页查询设备列表", security = {@SecurityRequirement(name = "bearer-key")})
@GetMapping
public TableDataInfo queryDevice(DeviceQueryCriteria criteria) throws IOException {
Page page = new Page<>(criteria.getPage(), criteria.getSize());
- // PageResult devices = null;
- // try {
- // devices = deviceService.queryAll(criteria, page);
- // } catch (IOException e) {
- // log.error("queryDevice error: " + e.getMessage());
- // return ResponseVO.fail("");
- // }
- // return ResponseVO.success(devices);
return deviceService.queryAll(criteria, page);
}
@@ -102,7 +96,6 @@ public class DeviceController {
@DeleteMapping(value = "/delete")
public ResponseVO deleteDevice(@Parameter(name = "传ID数组[]") @RequestBody List ids) {
deviceService.deleteAll(ids);
- // deviceService.deleteAssign(ids);
return ResponseVO.success(ResponseMessageConstants.DELETE_SUCCESS);
}
@@ -156,7 +149,8 @@ public class DeviceController {
@Operation(summary = "导出数据设备")
@GetMapping(value = "/download")
public void exportDevice(HttpServletResponse response, DeviceQueryCriteria criteria) throws IOException {
-
+ List devices = deviceService.queryAll(criteria);
+ exportService.export(devices, response);
}
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceTypeController.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceTypeController.java
index 4185f8d..100a44c 100644
--- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceTypeController.java
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceTypeController.java
@@ -1,7 +1,6 @@
package com.fuyuanshen.equipment.controller;
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.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.DeviceType;
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java
new file mode 100644
index 0000000..650bec9
--- /dev/null
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java
@@ -0,0 +1,76 @@
+package com.fuyuanshen.equipment.converter;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.data.WriteCellData;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-06-0618:56
+ */
+
+public class IgnoreFailedImageConverter implements Converter {
+ private static final Logger logger = LoggerFactory.getLogger(IgnoreFailedImageConverter.class);
+
+ @Override
+ public Class> supportJavaTypeKey() {
+ return URL.class;
+ }
+
+ // @Override
+ // public CellDataTypeEnum supportExcelTypeKey() {
+ // return CellDataTypeEnum.STRING;
+ // }
+
+ @Override
+ public WriteCellData> convertToExcelData(URL value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
+ if (value == null) {
+ return null;
+ }
+
+ try {
+ URLConnection conn = value.openConnection();
+ conn.setConnectTimeout(2000); // 2秒超时
+ conn.setReadTimeout(3000); // 3秒超时
+
+ try (InputStream inputStream = conn.getInputStream()) {
+ // byte[] bytes = FileUtils.readInputStream(inputStream, value.toString());
+ // 替代 FileUtils.readInputStream 的自定义方法
+ byte[] bytes = readInputStream(inputStream);
+ return new WriteCellData<>(bytes);
+ }
+ } catch (Exception e) {
+ // 静默忽略错误,只记录日志
+ logger.debug("忽略图片加载失败: {}, 原因: {}", value, e.getMessage());
+ // return null; // 返回null表示不写入图片
+ return new WriteCellData<>(new byte[0]); // 返回空数组而不是 null
+ }
+ }
+
+ /**
+ * 替代 FileUtils.readInputStream 的自定义方法
+ *
+ * @param inputStream 输入流
+ * @return 字节数组
+ * @throws Exception 读取异常
+ */
+ private byte[] readInputStream(InputStream inputStream) throws Exception {
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ byte[] buffer = new byte[8192];
+ int bytesRead;
+
+ while ((bytesRead = inputStream.read(buffer)) != -1) {
+ outputStream.write(buffer, 0, bytesRead);
+ }
+
+ return outputStream.toByteArray();
+ }
+}
\ No newline at end of file
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/ImageReadConverter.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/ImageReadConverter.java
new file mode 100644
index 0000000..3e6d12f
--- /dev/null
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/ImageReadConverter.java
@@ -0,0 +1,44 @@
+package com.fuyuanshen.equipment.converter;// package com.fuyuanshen.modules.system.converter;
+//
+// import com.alibaba.excel.converters.Converter;
+// import com.alibaba.excel.enums.CellDataTypeEnum;
+// import com.alibaba.excel.metadata.GlobalConfiguration;
+// import com.alibaba.excel.metadata.data.ReadCellData;
+// import com.alibaba.excel.metadata.property.ExcelContentProperty;
+//
+// import java.io.ByteArrayOutputStream;
+// import java.io.IOException;
+//
+// /**
+// * @author: 默苍璃
+// * @date: 2025-06-0710:01
+// */
+//
+// public class ImageReadConverter implements Converter {
+//
+// @Override
+// public Class> supportJavaTypeKey() {
+// return byte[].class;
+// }
+//
+// // @Override
+// // public CellDataTypeEnum supportExcelTypeKey() {
+// // return CellDataTypeEnum.IMAGE;
+// // }
+//
+// @Override
+// public byte[] convertToJavaData(ReadCellData> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws IOException {
+// if (cellData.getType() == CellDataTypeEnum.IMAGE) {
+// ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+// cellData.getImageValueList().forEach(image -> {
+// try {
+// outputStream.write(image.getImageBytes());
+// } catch (IOException e) {
+// throw new RuntimeException(e);
+// }
+// });
+// return outputStream.toByteArray();
+// }
+// return null;
+// }
+// }
\ No newline at end of file
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 6a500a7..5536e1b 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
@@ -99,4 +99,10 @@ public class Device extends TenantEntity {
@Schema(name = "绑定状态")
private Integer bindingStatus;
+
+ /**
+ * 创建人名称
+ */
+ private String createByName;
+
}
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java
new file mode 100644
index 0000000..28aa32c
--- /dev/null
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java
@@ -0,0 +1,80 @@
+package com.fuyuanshen.equipment.domain.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fuyuanshen.equipment.converter.IgnoreFailedImageConverter;
+import lombok.Data;
+
+import java.net.URL;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-06-0618:16
+ */
+@Data
+@HeadRowHeight(20) // 表头行高
+@ContentRowHeight(100) // 内容行高
+public class DeviceExcelExportDTO {
+
+ @ExcelProperty("ID")
+ private Long id;
+
+ @ExcelProperty("设备类型")
+ private Long deviceType;
+
+ // @ExcelProperty("客户号")
+ // private Long customerId;
+
+ @ExcelProperty("所属客户")
+ private String customerName;
+
+ @ExcelProperty("设备名称")
+ @ColumnWidth(20)
+ private String deviceName;
+
+ @ExcelProperty(value = "设备图片", converter = IgnoreFailedImageConverter.class)
+ @ColumnWidth(15) // 设置图片列宽度
+ private URL devicePic; // 使用URL类型
+
+ @ExcelProperty("设备MAC")
+ @ColumnWidth(20)
+ private String deviceMac;
+
+ @ExcelProperty("设备IMEI")
+ @ColumnWidth(20)
+ private String deviceImei;
+
+ @ExcelProperty("经度")
+ private String longitude;
+
+ @ExcelProperty("纬度")
+ private String latitude;
+
+ @ExcelProperty("备注")
+ @ColumnWidth(30)
+ private String remark;
+
+ @ExcelProperty("设备类型名称")
+ @ColumnWidth(20)
+ private String typeName;
+
+ /**
+ * 设备状态
+ * 0 失效
+ * 1 正常
+ */
+ @ExcelProperty("设备状态")
+ @ColumnWidth(20)
+ private String deviceStatus;
+
+ @ExcelProperty("创建时间")
+ @ColumnWidth(20)
+ private String createTime;
+
+ @ExcelProperty("创建人")
+ @ColumnWidth(20)
+ private String createBy;
+
+}
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java
index af53adb..4990517 100644
--- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java
@@ -28,6 +28,14 @@ public interface DeviceService extends IService {
*/
TableDataInfo queryAll(DeviceQueryCriteria criteria, Page page) throws IOException;
+ /**
+ * 查询所有数据不分页
+ *
+ * @param criteria 条件参数
+ * @return List
+ */
+ List queryAll(DeviceQueryCriteria criteria);
+
/**
* 查询所有设备信息
*
diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java
new file mode 100644
index 0000000..22650e3
--- /dev/null
+++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java
@@ -0,0 +1,86 @@
+package com.fuyuanshen.equipment.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.DateUtils;
+import com.fuyuanshen.equipment.domain.Device;
+import com.fuyuanshen.equipment.domain.dto.DeviceExcelExportDTO;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author: 默苍璃
+ * @date: 2025-06-0618:22
+ */
+@Service
+public class DeviceExportService {
+
+ public void export(List devices, HttpServletResponse response) {
+ try {
+ String fileName = "设备列表_" + System.currentTimeMillis() + ".xlsx";
+ // 使用URLEncoder进行RFC 5987编码
+ String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
+
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ // 使用RFC 5987标准编码文件名
+ response.setHeader("Content-disposition", "attachment;filename*=UTF-8''" + encodedFileName);
+
+ // 转换为DTO列表
+ List dtoList = devices.stream().map(device -> {
+ DeviceExcelExportDTO dto = new DeviceExcelExportDTO();
+ dto.setId(device.getId());
+ dto.setDeviceType(device.getDeviceType());
+ dto.setCustomerName(device.getCustomerName());
+ dto.setDeviceName(device.getDeviceName());
+ dto.setDeviceMac(device.getDeviceMac());
+ // 设备IMEI
+ dto.setDeviceImei(device.getDeviceImei());
+ dto.setLongitude(device.getLongitude());
+ dto.setLatitude(device.getLatitude());
+ dto.setRemark(device.getRemark());
+ dto.setTypeName(device.getTypeName());
+ dto.setCreateBy(device.getCreateByName());
+ Integer deviceStatus = device.getDeviceStatus();
+ dto.setDeviceStatus(deviceStatus == 1 ? "正常" : "失效");
+ // 时间戳转换
+ dto.setCreateTime(DateUtils.format(device.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
+
+ // 处理图片URL转换
+ handleDevicePic(device, dto);
+
+ return dto;
+ }).collect(Collectors.toList());
+
+ // 写入Excel
+ EasyExcel.write(response.getOutputStream(), DeviceExcelExportDTO.class).sheet("设备数据").doWrite(dtoList);
+
+ } catch (IOException e) {
+ throw new RuntimeException("导出Excel失败", e);
+ }
+ }
+
+
+ private void handleDevicePic(Device device, DeviceExcelExportDTO dto) {
+ String picUrl = device.getDevicePic();
+ if (picUrl != null && !picUrl.trim().isEmpty()) {
+ try {
+ // 尝试创建URL对象(会自动验证格式)
+ dto.setDevicePic(new URL(picUrl));
+ } catch (MalformedURLException e) {
+ // 不是有效URL时设置为null
+ dto.setDevicePic(null);
+ }
+ } else {
+ dto.setDevicePic(null);
+ }
+ }
+
+}
\ No newline at end of file
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 cd99a56..df9f271 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
@@ -4,11 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.utils.PageUtil;
+import com.fuyuanshen.common.core.domain.model.LoginUser;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.common.satoken.utils.LoginHelper;
-import com.fuyuanshen.customer.domain.vo.ConsumerVo;
+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.DeviceType;
@@ -19,8 +19,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.customer.domain.Customer;
-import com.fuyuanshen.customer.mapper.CustomerMapper;
+import com.fuyuanshen.system.domain.vo.SysOssVo;
+import com.fuyuanshen.system.service.ISysOssService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@@ -55,6 +55,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme
private final CustomerMapper customerMapper;
+ private final ISysOssService ossService;
+
/**
* 分页查询设备
@@ -83,6 +85,12 @@ public class DeviceServiceImpl extends ServiceImpl impleme
}
+ @Override
+ public List queryAll(DeviceQueryCriteria criteria) {
+ return deviceMapper.findAll(criteria);
+ }
+
+
/**
* 查询所有设备
*
@@ -113,13 +121,16 @@ public class DeviceServiceImpl extends ServiceImpl impleme
}
// 保存图片并获取URL
- String imageUrl = saveDeviceImage(deviceForm.getFile(), deviceForm.getDeviceName());
+ // String imageUrl = saveDeviceImage(deviceForm.getFile(), deviceForm.getDeviceName());
+ SysOssVo upload = ossService.upload(deviceForm.getFile());
// 设置图片路径
- deviceForm.setDevicePic(imageUrl);
+ deviceForm.setDevicePic(upload.getUrl());
// 转换对象并插入数据库
Device device = new Device();
- device.setCurrentOwnerId(LoginHelper.getUserId());
+ LoginUser loginUser = LoginHelper.getLoginUser();
+ device.setCurrentOwnerId(loginUser.getUserId());
+ device.setCreateByName(loginUser.getNickname());
BeanUtil.copyProperties(deviceForm, device, true);
deviceMapper.insert(device);
@@ -155,8 +166,10 @@ public class DeviceServiceImpl extends ServiceImpl impleme
Device device = devices.get(0);
// 处理上传的图片
- String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName());
- deviceForm.setDevicePic(imageUrl);
+ // String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName());
+ SysOssVo upload = ossService.upload(deviceForm.getFile());
+ // 设置图片路径
+ deviceForm.setDevicePic(upload.getUrl());
// 更新字段
BeanUtil.copyProperties(deviceForm, device, true);
@@ -253,14 +266,14 @@ public class DeviceServiceImpl extends ServiceImpl impleme
devices.forEach((device) -> {
deviceMapper.updateById(device);
- device.setId( null);
+ device.setId(null);
device.setCurrentOwnerId(customerId);
- deviceMapper.insert( device);
+ deviceMapper.insert(device);
DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType());
- deviceType.setId( null);
+ deviceType.setId(null);
device.setCurrentOwnerId(customerId);
- deviceTypeMapper.insert( deviceType);
+ deviceTypeMapper.insert(deviceType);
});
}
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 f071704..8879dae 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
@@ -38,10 +38,7 @@
- select
- d.id,d.device_name,
- d.device_pic, d.device_mac, d.device_sn, d.update_by,d.device_imei,
- d.update_time, d.device_type, d.remark, d.binding_status,t.type_name
+ select d.* ,t.type_name
FROM device d
LEFT JOIN device_type t ON d.device_type = t.id
@@ -73,68 +70,6 @@
-
- SELECT
- d.id, d.customer_id, d.customer_name, d.device_name,
- d.device_pic, d.device_mac, d.device_sn, d.create_by, d.update_by,
- d.create_time, d.update_time, d.device_type, d.remark, d.device_status, t.type_name
- from device d
- left join device_type t
- on d.device_type = t.id
-
-
-
- and d.device_name like concat('%', TRIM(#{criteria.deviceName}), '%')
-
-
- and d.device_mac = #{criteria.deviceMac}
-
-
- and d.device_sn = #{criteria.deviceSn}
-
-
- and d.device_type = #{criteria.deviceType}
-
-
- and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
-
-
-
-
- AND (
-
-
- d.create_by IN (
- SELECT username FROM sys_user
- WHERE user_id = #{criteria.customerId} OR pid = #{criteria.customerId}
- ) AND d.customer_id IS NULL
-
-
-
-
-
- OR
-
-
-
-
-
-
-
-
- (d.customer_id IN
-
- #{customerId}
-
- )
-
- )
-
-
-
- order by d.id desc
-
-
select
d.id, d.customer_id, d.device_name,