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 u.user_id as id, u.nick_name, - u.username, + u.user_name, u.enabled, u.create_time from sys_user u @@ -231,13 +231,13 @@ - 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 u.user_id AS id, u.nick_name, - u.username, + u.user_name, u.enabled, u.create_time FROM sys_user u @@ -343,14 +343,14 @@ WITH RECURSIVE UserTree AS ( -- 初始查询:查找当前用户的直接子节点 - SELECT user_id AS id, username, pid + SELECT user_id AS id, user_name, pid FROM sys_user WHERE pid = #{currentUserId} -- 当前用户的子节点 UNION ALL -- 递归部分:查找所有后代节点 - SELECT u.user_id AS id, u.username, u.pid + 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 * @@ -378,7 +378,7 @@ + select d.* from app_device as d + + + + and d.device_name like concat('%', TRIM(#{criteria.deviceName}), '%') + + + and d.device_mac = #{criteria.deviceMac} + + + and d.device_imei = #{criteria.deviceImei} + + + and d.device_sn = #{criteria.deviceSn} + + + and d.device_type = #{criteria.deviceType} + + + and d.device_status = #{criteria.deviceStatus} + + + and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} + + + AND tenant_id = #{criteria.tenantId} + + and d.customer_id = #{criteria.customerId} + + order by d.create_time desc + + + + + + + \ No newline at end of file From a69aad227a236fc8013a7901e5d86864b194071f Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 2 Jul 2025 11:25:41 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceTypeController.java | 12 ++--- .../equipment/domain/form/DeviceTypeForm.java | 39 ++++++++++++++ .../equipment/service/DeviceTypeService.java | 10 +++- .../service/impl/DeviceServiceImpl.java | 2 + .../service/impl/DeviceTypeServiceImpl.java | 52 ++++++++++++++++++- .../mapper/equipment/DeviceTypeMapper.xml | 7 +-- 6 files changed, 107 insertions(+), 15 deletions(-) create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java 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 dccdb61..3ff0fe3 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 @@ -4,14 +4,13 @@ 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.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.service.DeviceTypeService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -59,7 +58,7 @@ public class DeviceTypeController { // @Log("修改设备类型") @Operation(summary = "修改设备类型") @PutMapping(value = "/update") - public ResponseVO updateDeviceType(@Validated @RequestBody DeviceType resources) { + public ResponseVO updateDeviceType(@Validated @RequestBody DeviceTypeForm resources) { deviceTypeService.update(resources); return ResponseVO.success(null); } @@ -68,17 +67,16 @@ public class DeviceTypeController { // @Log("删除设备类型") @Operation(summary = "删除设备类型") @DeleteMapping(value = "/delete") - public ResponseEntity deleteDeviceType(@Parameter(name = "传ID数组[]") @RequestBody List ids) { + public ResponseVO deleteDeviceType(@Parameter(name = "传ID数组[]") @RequestBody List ids) { deviceTypeService.deleteAll(ids); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseVO.success("删除成功!!!"); } @GetMapping(value = "/communicationMode") @Operation(summary = "获取设备类型通讯方式") public ResponseVO getCommunicationMode(@Parameter(name = "设备类型ID", required = true) Long id) { - return ResponseVO.success(deviceTypeService.getById(id)); + return ResponseVO.success(deviceTypeService.getCommunicationMode(id)); } - } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java new file mode 100644 index 0000000..d416718 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceTypeForm.java @@ -0,0 +1,39 @@ +package com.fuyuanshen.equipment.domain.form; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fuyuanshen.common.tenant.core.TenantEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +/** + * @Description: 设备类型 + * @Author: WY + * @Date: 2025/5/14 + **/ +@Data +public class DeviceTypeForm { + + @Schema(name = "ID", hidden = true) + private Long id; + + @Schema(name = "类型名称", required = true) + private String typeName; + + @Schema(name = "是否支持蓝牙") + private Boolean isSupportBle; + + @Schema(name = "定位方式", example = "0:无;1:GPS;2:基站;3:wifi;4:北斗") + private String locateMode; + + @Schema(name = "联网方式", example = "0:无;1:4G;2:WIFI") + private String networkWay; + + @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") + private String communicationMode; + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java index 81ed641..25569ea 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import java.util.List; @@ -51,7 +52,7 @@ public interface DeviceTypeService extends IService { * * @param resources / */ - void update(DeviceType resources); + void update(DeviceTypeForm resources); /** * 多选删除 @@ -60,4 +61,11 @@ public interface DeviceTypeService extends IService { */ void deleteAll(List ids); + /** + * 获取设备类型通讯方式 + * + * @param id / + * @return DeviceTypeDto + */ + DeviceType getCommunicationMode(Long id); } 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 a51b8d8..e1e6c26 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 @@ -7,6 +7,7 @@ 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.satoken.utils.LoginHelper; import com.fuyuanshen.equipment.constants.DeviceConstants; import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.form.DeviceForm; @@ -56,6 +57,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public PageResult queryAll(DeviceQueryCriteria criteria, Page page) throws IOException { + criteria.setCustomerId(LoginHelper.getUserId()); IPage devices = deviceMapper.findAll(criteria, page); List records = devices.getRecords(); 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 a064039..2f03e41 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 @@ -1,11 +1,13 @@ package com.fuyuanshen.equipment.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.utils.PageUtil; import com.fuyuanshen.common.satoken.utils.LoginHelper; import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.mapper.DeviceMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; @@ -14,7 +16,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @Description: @@ -38,6 +42,7 @@ public class DeviceTypeServiceImpl extends ServiceImpl queryAll(DeviceTypeQueryCriteria criteria, Page page) { + criteria.setCustomerId(LoginHelper.getUserId()); return PageUtil.toPage(deviceTypeMapper.findAll(criteria, page)); } @@ -84,8 +89,18 @@ public class DeviceTypeServiceImpl extends ServiceImpl 0) + // throw new RuntimeException("该设备类型已被使用,无法删除"); + BeanUtil.copyProperties(resources, deviceType); + deviceTypeMapper.updateById(deviceType); } @@ -97,8 +112,41 @@ public class DeviceTypeServiceImpl extends ServiceImpl ids) { + + List invalidIds = new ArrayList<>(); + + for (Long id : ids) { + DeviceType deviceType = deviceTypeMapper.selectById(id); + if (deviceType == null || !Objects.equals(deviceType.getCustomerId(), LoginHelper.getUserId())) { + invalidIds.add(id); + } + } + + if (!invalidIds.isEmpty()) { + throw new RuntimeException("以下设备类型无法删除(ID 不存在或无权限): " + invalidIds); + } + deviceTypeMapper.deleteByIds(ids); } + /** + * 获取设备类型通讯方式 + * + * @param id / + * @return DeviceTypeDto + */ + @Override + public DeviceType getCommunicationMode(Long id) { + DeviceType deviceType = deviceTypeMapper.selectById(id); + if (deviceType == null) { + throw new RuntimeException("设备类型不存在"); + } + if (!Objects.equals(deviceType.getCustomerId(), LoginHelper.getUserId())) { + throw new RuntimeException("无权获取该设备类型通讯方式"); + } + return deviceType; + } + + } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml index f69fff7..5ddd1e7 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeMapper.xml @@ -28,11 +28,8 @@ and dt.type_name like concat('%', TRIM(#{criteria.typeName}), '%') - - and dt.tenant_id = #{criteria.tenantId} - - - and dt.create_by = #{criteria.createBy} + + and dt.owner_customer_id = #{criteria.customerId} ORDER BY dt.create_time DESC From a487e7ae677aab510e4694a9f688cc348098912e Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 2 Jul 2025 14:16:11 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E6=B8=85=E7=A9=BA=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fys-admin/src/main/resources/application.yml | 1 + .../encrypt/utils/EncryptUtilsTest.java | 4 +- .../fuyuanshen/equipment/domain/Device.java | 53 ++++++++----------- .../service/impl/DeviceServiceImpl.java | 4 +- .../system/SysConfigController.java | 13 +++++ .../service/impl/SysClientServiceImpl.java | 11 ++-- 6 files changed, 46 insertions(+), 40 deletions(-) diff --git a/fys-admin/src/main/resources/application.yml b/fys-admin/src/main/resources/application.yml index dbc7ca5..7970540 100644 --- a/fys-admin/src/main/resources/application.yml +++ b/fys-admin/src/main/resources/application.yml @@ -39,6 +39,7 @@ logging: org.springframework: warn org.mybatis.spring.mapper: error org.apache.fury: warn + com.fuyuanshen.web.service.impl.ClientServiceImpl: debug config: classpath:logback-plus.xml # 用户配置 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 bb7413d..c81f353 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("10"); - loginBody.setUuid("390942eb87174dcc9c2c074b066b1b79"); + loginBody.setCode("0"); + loginBody.setUuid("1c285b27f516486f9535face77023aeb"); // loginBody.setUsername("admin"); // loginBody.setPassword("admin123"); loginBody.setUsername("dyf"); 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 127316b..defb608 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 @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonInclude; import com.fuyuanshen.common.tenant.core.TenantEntity; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; /** @@ -17,83 +18,76 @@ import lombok.Data; **/ @Data @TableName("device") -@JsonInclude(JsonInclude.Include.ALWAYS) // 关键注解 +@JsonInclude(JsonInclude.Include.ALWAYS) // 关键注解 public class Device extends TenantEntity { @TableId(value = "id", type = IdType.AUTO) - // @Schema(value = "ID") + @Schema(name = "ID") private Long id; - // @Schema(value = "设备记录ID") + @Schema(name = "设备记录ID") @TableField(exist = false) private Long assignId; - // @Schema(value = "设备类型") + @Schema(name = "设备类型") private Long deviceType; - // @Schema(value = "设备类型名称") + @Schema(name = "设备类型名称") private String typeName; - // @Schema(value = "客户号") + @Schema(name = "客户号") private Long customerId; /** * 当前所有者 * current_owner_id */ - // @Schema(value = "当前所有者") + @Schema(name = "当前所有者") private Long currentOwnerId; /** * 原始所有者(创建者) * original_owner_id */ - // @Schema(value = "原始所有者(创建者)") + @Schema(name = "原始所有者(创建者)") private Long originalOwnerId; - // @Schema(value = "所属客户") + @Schema(name = "所属客户") private String customerName; - /*@Schema(value = "设备编号") + /*@Schema( name = "设备编号") private String deviceNo;*/ - // @Schema(value = "设备名称") + @Schema(name = "设备名称") private String deviceName; - // @Schema(value = "设备图片") + @Schema(name = "设备图片") private String devicePic; - // @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; - // @Schema(value = "经度") + @Schema(name = "经度") private String longitude; - // @Schema(value = "纬度") + @Schema(name = "纬度") private String latitude; - // @Schema(value = "备注") + @Schema(name = "备注") private String remark; - /** - * 租户ID - */ - // @TableField(value = "tenant_id") - // // @Schema(hidden = true) - // private Long tenantId; - /** * 设备状态 * 0 失效 * 1 正常 */ - // @Schema(value = "设备状态") + @Schema(name = "设备状态") private Integer deviceStatus; /** @@ -101,12 +95,7 @@ public class Device extends TenantEntity { * 0 未绑定 * 1 已绑定 */ - // @Schema(value = "绑定状态") + @Schema(name = "绑定状态") private Integer bindingStatus; - - public void copy(Device source) { - BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); - } - } 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 e1e6c26..08b6e5e 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -1,7 +1,6 @@ package com.fuyuanshen.equipment.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -96,6 +95,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 获取当前登录用户信息 // LoginUser user = LoginHelper.getLoginUser(); + // 保存图片并获取URL String imageUrl = saveDeviceImage(deviceForm.getFile(), deviceForm.getDeviceName()); // 设置图片路径 @@ -110,6 +110,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme } + + /** * 更新设备信息 * diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysConfigController.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysConfigController.java index 0cb543b..851cb15 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysConfigController.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysConfigController.java @@ -1,6 +1,7 @@ package com.fuyuanshen.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import com.fuyuanshen.common.core.constant.CacheNames; import com.fuyuanshen.common.core.domain.R; import com.fuyuanshen.common.excel.utils.ExcelUtil; import com.fuyuanshen.common.log.annotation.Log; @@ -13,6 +14,7 @@ import com.fuyuanshen.system.domain.vo.SysConfigVo; import com.fuyuanshen.system.service.ISysConfigService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -134,4 +136,15 @@ public class SysConfigController extends BaseController { configService.resetConfigCache(); return R.ok(); } + + + /** + * 清空所有客户端缓存 + */ + @GetMapping(value = "/clearAllClientCache") + @CacheEvict(cacheNames = CacheNames.SYS_CLIENT, allEntries = true) + public void clearAllClientCache() { + + } + } diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysClientServiceImpl.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysClientServiceImpl.java index 56c2a95..efe7dd1 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysClientServiceImpl.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysClientServiceImpl.java @@ -54,6 +54,7 @@ public class SysClientServiceImpl implements ISysClientService { @Cacheable(cacheNames = CacheNames.SYS_CLIENT, key = "#clientId") @Override public SysClientVo queryByClientId(String clientId) { + log.debug("【queryByClientId】缓存未命中,开始执行数据库查询,clientId={}", clientId); return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysClient::getClientId, clientId)); } @@ -125,16 +126,16 @@ public class SysClientServiceImpl implements ISysClientService { @Override public int updateClientStatus(String clientId, String status) { return baseMapper.update(null, - new LambdaUpdateWrapper() - .set(SysClient::getStatus, status) - .eq(SysClient::getClientId, clientId)); + new LambdaUpdateWrapper() + .set(SysClient::getStatus, status) + .eq(SysClient::getClientId, clientId)); } /** * 保存前的数据校验 */ private void validEntityBeforeSave(SysClient entity) { - //TODO 做一些数据校验,如唯一约束 + // TODO 做一些数据校验,如唯一约束 } /** @@ -144,7 +145,7 @@ public class SysClientServiceImpl implements ISysClientService { @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + // TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; } From 4220428f92c53eeda2ca8311f42b7284138decf3 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 2 Jul 2025 14:47:17 +0800 Subject: [PATCH 08/16] fel --- .../common/core/constant/TenantConstants.java | 5 +++++ .../controller/system/SysMenuController.java | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/constant/TenantConstants.java b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/constant/TenantConstants.java index c51e256..43839b2 100644 --- a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/constant/TenantConstants.java +++ b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/constant/TenantConstants.java @@ -22,6 +22,11 @@ public interface TenantConstants { */ String TENANT_ADMIN_ROLE_KEY = "admin"; + /** + * 富源晟内部员工 roleKey + */ + String FYS_ROLE_KEY = "fel"; + /** * 租户管理员角色名称 */ diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysMenuController.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysMenuController.java index 3b705f8..9f2a0d6 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysMenuController.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/controller/system/SysMenuController.java @@ -51,8 +51,9 @@ public class SysMenuController extends BaseController { * 获取菜单列表 */ @SaCheckRole(value = { - TenantConstants.SUPER_ADMIN_ROLE_KEY, - TenantConstants.TENANT_ADMIN_ROLE_KEY + TenantConstants.SUPER_ADMIN_ROLE_KEY, + TenantConstants.TENANT_ADMIN_ROLE_KEY, + TenantConstants.FYS_ROLE_KEY }, mode = SaMode.OR) @SaCheckPermission("system:menu:list") @GetMapping("/list") @@ -67,8 +68,9 @@ public class SysMenuController extends BaseController { * @param menuId 菜单ID */ @SaCheckRole(value = { - TenantConstants.SUPER_ADMIN_ROLE_KEY, - TenantConstants.TENANT_ADMIN_ROLE_KEY + TenantConstants.SUPER_ADMIN_ROLE_KEY, + TenantConstants.TENANT_ADMIN_ROLE_KEY, + TenantConstants.FYS_ROLE_KEY }, mode = SaMode.OR) @SaCheckPermission("system:menu:query") @GetMapping(value = "/{menuId}") @@ -96,8 +98,8 @@ public class SysMenuController extends BaseController { public R roleMenuTreeselect(@PathVariable("roleId") Long roleId) { List menus = menuService.selectMenuList(LoginHelper.getUserId()); MenuTreeSelectVo selectVo = new MenuTreeSelectVo( - menuService.selectMenuListByRoleId(roleId), - menuService.buildMenuTreeSelect(menus)); + menuService.selectMenuListByRoleId(roleId), + menuService.buildMenuTreeSelect(menus)); return R.ok(selectVo); } @@ -112,8 +114,8 @@ public class SysMenuController extends BaseController { public R tenantPackageMenuTreeselect(@PathVariable("packageId") Long packageId) { List menus = menuService.selectMenuList(LoginHelper.getUserId()); MenuTreeSelectVo selectVo = new MenuTreeSelectVo( - menuService.selectMenuListByPackageId(packageId), - menuService.buildMenuTreeSelect(menus)); + menuService.selectMenuListByPackageId(packageId), + menuService.buildMenuTreeSelect(menus)); return R.ok(selectVo); } From 2a81385554517077da0d2d115355335147e5d8db Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Wed, 2 Jul 2025 15:29:09 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../equipment/domain/form/DeviceForm.java | 2 +- .../domain/query/DeviceTypeQueryCriteria.java | 3 +++ .../service/impl/DeviceServiceImpl.java | 23 +++++++++++-------- .../mapper/equipment/DeviceMapper.xml | 23 ++++--------------- .../mapper/equipment/DeviceTypeMapper.xml | 3 +++ 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java index 77713ed..d1c7187 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/form/DeviceForm.java @@ -21,7 +21,7 @@ public class DeviceForm { private Long assignId; @Schema(title = "设备类型") - private Long deviceType; + private Long deviceTypeId; @Schema(title = "客户号") private Long customerId; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceTypeQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceTypeQueryCriteria.java index 67b6049..9d2010e 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceTypeQueryCriteria.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceTypeQueryCriteria.java @@ -15,6 +15,9 @@ import java.util.Set; @Data public class DeviceTypeQueryCriteria extends BaseEntity implements Serializable { + @Schema(name = "设备类型id") + private Long deviceTypeId; + @Schema(name = "型号名称") private String typeName; 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 08b6e5e..8f8453a 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 @@ -9,10 +9,13 @@ import com.fuyuanshen.common.core.utils.PageUtil; import com.fuyuanshen.common.satoken.utils.LoginHelper; import com.fuyuanshen.equipment.constants.DeviceConstants; import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.domain.DeviceType; import com.fuyuanshen.equipment.domain.form.DeviceForm; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; +import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -43,6 +46,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme private final DeviceMapper deviceMapper; + private final DeviceTypeMapper deviceTypeMapper; /** @@ -56,7 +60,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public PageResult queryAll(DeviceQueryCriteria criteria, Page page) throws IOException { - criteria.setCustomerId(LoginHelper.getUserId()); + // criteria.setCustomerId(LoginHelper.getUserId()); + criteria.setCurrentOwnerId(LoginHelper.getUserId()); IPage devices = deviceMapper.findAll(criteria, page); List records = devices.getRecords(); @@ -91,10 +96,13 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public void addDevice(DeviceForm deviceForm) throws Exception { - - // 获取当前登录用户信息 - // LoginUser user = LoginHelper.getLoginUser(); - + DeviceTypeQueryCriteria queryCriteria = new DeviceTypeQueryCriteria(); + queryCriteria.setDeviceTypeId(deviceForm.getId()); + queryCriteria.setCustomerId(LoginHelper.getUserId()); + List deviceTypes = deviceTypeMapper.findAll(queryCriteria); + if (deviceTypes.isEmpty()) { + throw new Exception("设备类型不存在!!!"); + } // 保存图片并获取URL String imageUrl = saveDeviceImage(deviceForm.getFile(), deviceForm.getDeviceName()); @@ -103,6 +111,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 转换对象并插入数据库 Device device = new Device(); + device.setCurrentOwnerId(LoginHelper.getUserId()); BeanUtil.copyProperties(deviceForm, device, true); deviceMapper.insert(device); @@ -110,8 +119,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme } - - /** * 更新设备信息 * @@ -216,6 +223,4 @@ public class DeviceServiceImpl extends ServiceImpl impleme } - - } 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 82c5ace..469bc9c 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 @@ -42,11 +42,8 @@ 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 --- da.assignee_id AS customerId, da.assignee_name AS customerName, da.active AS deviceStatus, --- da.assigned_at AS create_time , da.assigner_name AS create_by , da.id AS assignId - from device d + FROM device d LEFT JOIN device_type t ON d.device_type = t.id --- LEFT JOIN device_assignments da ON da.device_id = d.id @@ -62,28 +59,18 @@ and d.device_type = #{criteria.deviceType} --- and da.active = #{criteria.deviceStatus} + -- and da.active = #{criteria.deviceStatus} + + + d.current_owner_id = #{criteria.currentOwnerId} and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} - AND tenant_id = #{criteria.tenantId} - - - - - - - - - - - --- ORDER BY create_time DESC - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - update sys_user set password = #{pwd} - where user_id in - - #{id} - - - - - - - - - - - - - - + select u.user_id as customerId, + u.nick_name, + u.user_name, + u.enabled, + u.create_time from sys_user u - - and u.pid IN - - #{item} - - - - and u.nick_name like concat('%', TRIM(#{criteria.blurry}), '%') - - - and u.enabled = #{criteria.enabled} - - - and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} + + and u.user_name = concat('%', TRIM(#{criteria.customerName}), '%') - order by u.user_id desc - - limit #{criteria.offset}, #{criteria.size} - - - - - - - diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java index 18f86d0..6a098ab 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/query/DeviceQueryCriteria.java @@ -1,5 +1,6 @@ package com.fuyuanshen.equipment.domain.query; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.sql.Timestamp; @@ -16,19 +17,22 @@ import java.util.Set; @Data public class DeviceQueryCriteria { - // @Schema(value = "设备名称") + @Schema(name = "设备id") + private Long deviceId; + + @Schema(name = "设备名称") private String deviceName; - // @Schema(value = "设备类型") - private Long deviceType; + @Schema(name = "设备类型") + private Long deviceTypeId; - // @Schema(value = "设备MAC") + @Schema(name = "设备MAC") private String deviceMac; - // @Schema(value = "设备IMEI") + @Schema(name = "设备IMEI") private String deviceImei; - // @Schema(value = "设备SN") + @Schema(name = "设备SN") private String deviceSn; /** @@ -36,29 +40,29 @@ public class DeviceQueryCriteria { * 0 失效 * 1 正常 */ - // @Schema(value = "设备状态 0 失效 1 正常 ") + @Schema(name = "设备状态 0 失效 1 正常 ") private Integer deviceStatus; - // @Schema(value = "创建时间") + @Schema(name = "创建时间") private List createTime; - // @Schema(value = "页码", example = "1") + @Schema(name = "页码", example = "1") private Integer page = 1; - // @Schema(value = "每页数据量", example = "10") + @Schema(name = "每页数据量", example = "10") private Integer size = 10; - // @Schema(value = "客户id") + @Schema(name = "客户id") private Long customerId; private Set customerIds; - // @Schema(value = "当前所有者") + @Schema(name = "当前所有者") private Long currentOwnerId; - // @Schema(value = "租户ID") + @Schema(name = "租户ID") private Long tenantId; - // @Schema(value = "通讯方式", example = "0:4G;1:蓝牙") + @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") private Integer communicationMode; } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 8f8453a..5fca5a3 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -27,7 +27,9 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.sql.Timestamp; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @Description: @@ -44,7 +46,6 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Value("${file.device.ip}") private String ip; - private final DeviceMapper deviceMapper; private final DeviceTypeMapper deviceTypeMapper; @@ -129,10 +130,22 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Transactional(rollbackFor = Exception.class) public void update(DeviceForm deviceForm) throws Exception { - Device device = getById(deviceForm.getId()); - if (device == null) { + DeviceTypeQueryCriteria deviceTypeQueryCriteria = new DeviceTypeQueryCriteria(); + deviceTypeQueryCriteria.setDeviceTypeId(deviceForm.getId()); + deviceTypeQueryCriteria.setCustomerId(LoginHelper.getUserId()); + List deviceTypes = deviceTypeMapper.findAll(deviceTypeQueryCriteria); + if (deviceTypes.isEmpty()) { + throw new Exception("设备类型不存在!!!"); + } + + DeviceQueryCriteria queryCriteria = new DeviceQueryCriteria(); + queryCriteria.setDeviceId(deviceForm.getId()); + queryCriteria.setCustomerId(LoginHelper.getUserId()); + List devices = deviceMapper.findAll(queryCriteria); + if (devices.isEmpty()) { throw new Exception("设备不存在!!!"); } + Device device = devices.get(0); // 处理上传的图片 String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName()); @@ -182,6 +195,18 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { + List invalidIds = new ArrayList<>(); + + for (Long id : ids) { + Device deviceType = deviceMapper.selectById(id); + if (deviceType == null || !Objects.equals(deviceType.getCurrentOwnerId(), LoginHelper.getUserId())) { + invalidIds.add(id); + } + } + if (!invalidIds.isEmpty()) { + throw new RuntimeException("以下设备无法删除(ID 不存在或无权限): " + invalidIds); + } + deviceMapper.deleteByIds(ids); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java index 2f03e41..975b58f 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceTypeServiceImpl.java @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.utils.PageUtil; import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.DeviceType; import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; +import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; import com.fuyuanshen.equipment.mapper.DeviceMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; @@ -114,17 +116,25 @@ public class DeviceTypeServiceImpl extends ServiceImpl ids) { List invalidIds = new ArrayList<>(); - + List invalidId2 = new ArrayList<>(); for (Long id : ids) { DeviceType deviceType = deviceTypeMapper.selectById(id); if (deviceType == null || !Objects.equals(deviceType.getCustomerId(), LoginHelper.getUserId())) { invalidIds.add(id); } + DeviceQueryCriteria deviceQueryCriteria = new DeviceQueryCriteria(); + deviceQueryCriteria.setDeviceTypeId(id); + List devices = deviceMapper.findAll(deviceQueryCriteria); + if (!devices.isEmpty()) { + invalidId2.add(id); + } } - if (!invalidIds.isEmpty()) { throw new RuntimeException("以下设备类型无法删除(ID 不存在或无权限): " + invalidIds); } + if (!invalidId2.isEmpty()) { + throw new RuntimeException("以下设备类型无法删除(已绑定设备): " + invalidId2); + } deviceTypeMapper.deleteByIds(ids); } diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml index 469bc9c..f071704 100644 --- a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceMapper.xml @@ -55,8 +55,8 @@ and d.device_imei = #{criteria.deviceImei} - - and d.device_type = #{criteria.deviceType} + + and d.device_type = #{criteria.deviceTypeId} -- and da.active = #{criteria.deviceStatus} @@ -148,8 +148,8 @@ and d.device_mac = #{criteria.deviceMac} - - and d.device_type = #{criteria.deviceType} + + and d.device_type = #{criteria.deviceTypeId} and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java index a365906..fa0d4c2 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/SysUser.java @@ -103,6 +103,8 @@ public class SysUser extends TenantEntity { */ private String remark; + private Byte userLevel; + public SysUser(Long userId) { this.userId = userId; diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java index d7f91c1..144590e 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/domain/vo/SysUserVo.java @@ -139,4 +139,6 @@ public class SysUserVo implements Serializable { */ private Long roleId; + private Byte userLevel; + } 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 @@ + + + + + + + + + + \ 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 @@ 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 withdrawDevice(@Validated @ModelAttribute DeviceForm deviceForm) { try { 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 432a54a..f5b91f3 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 @@ -253,6 +253,12 @@ public class DeviceServiceImpl extends ServiceImpl impleme device.setId( null); device.setCurrentOwnerId(customerId); deviceMapper.insert( device); + + DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); + deviceType.setId( null); + device.setCurrentOwnerId(customerId); + deviceTypeMapper.insert( deviceType); + }); } From 4e83e3570a2910622e294e71e69d9562fbe9c2af Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Thu, 3 Jul 2025 15:30:18 +0800 Subject: [PATCH 14/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 +- .../customer/domain/query/UserQueryCriteria.java | 7 ++++--- .../com/fuyuanshen/customer/service/CustomerService.java | 3 --- .../customer/service/impl/CustomerServiceImpl.java | 6 +++--- .../src/main/resources/mapper/customer/CustomerMapper.xml | 8 ++++---- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/fys-admin/src/main/resources/application.yml b/fys-admin/src/main/resources/application.yml index b10ed90..b99b5d2 100644 --- a/fys-admin/src/main/resources/application.yml +++ b/fys-admin/src/main/resources/application.yml @@ -136,7 +136,7 @@ tenant: # https://baomidou.com/config/ mybatis-plus: # 自定义配置 是否全局开启逻辑删除 关闭后 所有逻辑删除功能将失效 - enableLogicDelete: true + enableLogicDelete: false # 多包名使用 例如 com.fuyuanshen.**.mapper,org.xxx.**.mapper mapperPackage: com.fuyuanshen.**.mapper # 对应的 XML 文件位置 diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/query/UserQueryCriteria.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/query/UserQueryCriteria.java index d4b6f5b..c454b4a 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/query/UserQueryCriteria.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/domain/query/UserQueryCriteria.java @@ -15,6 +15,7 @@ */ package com.fuyuanshen.customer.domain.query; +import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -29,7 +30,7 @@ import java.util.Set; * @date 2018-11-23 */ @Data -public class UserQueryCriteria implements Serializable { +public class UserQueryCriteria extends BaseEntity { @Schema(name = "ID") private Long id; @@ -52,8 +53,8 @@ public class UserQueryCriteria implements Serializable { @Schema(name = "部门ID") private Long deptId; - @Schema(name = "创建时间") - private List createTime; + // @Schema(name = "创建时间") + // // private List createTime; @Schema(name = "页码", example = "1") private Integer pageNum = 1; diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/CustomerService.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/CustomerService.java index 12f4a2c..98ccd3a 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/CustomerService.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/CustomerService.java @@ -16,7 +16,6 @@ import java.util.Set; */ public interface CustomerService { - /** * 分页查询客户 * @@ -26,7 +25,6 @@ public interface CustomerService { */ TableDataInfo queryCustomers(UserQueryCriteria criteria, Page page); - /** * 查询所有客户 * @@ -58,5 +56,4 @@ public interface CustomerService { void delete(Set ids); - } diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/impl/CustomerServiceImpl.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/impl/CustomerServiceImpl.java index bbb27d1..5eb7705 100644 --- a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/impl/CustomerServiceImpl.java +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/service/impl/CustomerServiceImpl.java @@ -45,7 +45,7 @@ public class CustomerServiceImpl extends ServiceImpl i List consumerVoList = BeanUtil.copyToList(users, ConsumerVo.class); Long total = customerMapper.countCustomers(criteria); // return PageUtil.toPage(consumerVoList, total); - return new TableDataInfo(consumerVoList, total); + return new TableDataInfo(consumerVoList, total); } @@ -94,7 +94,7 @@ public class CustomerServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) public void updateCustomer(Customer resources) throws Exception { - + saveOrUpdate(resources); } @@ -106,7 +106,7 @@ public class CustomerServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) public void delete(Set ids) { - + customerMapper.deleteByIds(ids); } 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 eeb2e85..98d2817 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 @@ -112,8 +112,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} 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 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); + 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); } @@ -159,6 +164,8 @@ public class DeviceController { @PostMapping(value = "/import", consumes = "multipart/form-data") public ResponseVO importData(@Parameter(name = "文件", required = true) @RequestPart("file") MultipartFile file) { + SysOssVo upload = ossService.upload(file); + // String suffix = FileUtil.getExtensionName(file.getOriginalFilename()); // if (!("xlsx".equalsIgnoreCase(suffix))) { // throw new BadRequestException("只能上传Excel——xlsx格式文件"); 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 3ff0fe3..4185f8d 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 @@ -3,6 +3,7 @@ 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; import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; @@ -32,9 +33,9 @@ public class DeviceTypeController { @GetMapping @Operation(summary = "分页查询设备类型") - public ResponseVO> queryDeviceType(DeviceTypeQueryCriteria criteria) { - Page page = new Page<>(criteria.getPage(), criteria.getSize()); - return ResponseVO.success(deviceTypeService.queryAll(criteria, page)); + public TableDataInfo queryDeviceType(DeviceTypeQueryCriteria criteria) { + Page page = new Page<>(criteria.getPage(), criteria.getSize()); + return deviceTypeService.queryAll(criteria, page); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java index 075d305..66fdb0d 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/DeviceType.java @@ -2,9 +2,7 @@ package com.fuyuanshen.equipment.domain; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import com.fuyuanshen.common.tenant.core.TenantEntity; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -45,6 +43,10 @@ public class DeviceType extends TenantEntity { @Schema(name = "通讯方式", example = "0:4G;1:蓝牙") private String communicationMode; + /** + * 创建人名称 + */ + private String createByName; public void copy(DeviceType source) { BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true)); diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java index 1cccbca..c473541 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceMapper.java @@ -25,7 +25,7 @@ public interface DeviceMapper extends BaseMapper { * @param page * @return */ - IPage findAll(@Param("criteria") DeviceQueryCriteria criteria, Page page); + IPage findAll(@Param("criteria") DeviceQueryCriteria criteria, Page page); List findAll(@Param("criteria") DeviceQueryCriteria criteria); diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeMapper.java index 7efd78d..15f0fd1 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeMapper.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeMapper.java @@ -25,7 +25,7 @@ public interface DeviceTypeMapper extends BaseMapper { * @param page * @return */ - IPage findAll(@Param("criteria") DeviceTypeQueryCriteria criteria, Page page); + IPage findAll(@Param("criteria") DeviceTypeQueryCriteria criteria, Page page); /** 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 fec0c52..af53adb 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 @@ -3,6 +3,7 @@ package com.fuyuanshen.equipment.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.fuyuanshen.common.core.domain.PageResult; +import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.form.DeviceForm; import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; @@ -25,7 +26,7 @@ public interface DeviceService extends IService { * @param page 分页参数 * @return PageResult */ - PageResult queryAll(DeviceQueryCriteria criteria, Page page) throws IOException; + TableDataInfo queryAll(DeviceQueryCriteria criteria, Page page) throws IOException; /** * 查询所有设备信息 diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java index 25569ea..aa2b622 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceTypeService.java @@ -3,6 +3,7 @@ package com.fuyuanshen.equipment.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.fuyuanshen.common.core.domain.PageResult; +import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import com.fuyuanshen.equipment.domain.DeviceType; import com.fuyuanshen.equipment.domain.form.DeviceTypeForm; import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria; @@ -23,7 +24,7 @@ public interface DeviceTypeService extends IService { * @param page 分页参数 * @return PageResult */ - PageResult queryAll(DeviceTypeQueryCriteria criteria, Page page); + TableDataInfo queryAll(DeviceTypeQueryCriteria criteria, Page page); /** * 查询所有数据不分页 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 f5b91f3..cd99a56 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 @@ -6,7 +6,9 @@ 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.mybatis.core.page.TableDataInfo; import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.customer.domain.vo.ConsumerVo; import com.fuyuanshen.equipment.constants.DeviceConstants; import com.fuyuanshen.equipment.domain.Device; import com.fuyuanshen.equipment.domain.DeviceType; @@ -63,7 +65,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme * @throws IOException */ @Override - public PageResult queryAll(DeviceQueryCriteria criteria, Page page) throws IOException { + public TableDataInfo queryAll(DeviceQueryCriteria criteria, Page page) throws IOException { // criteria.setCustomerId(LoginHelper.getUserId()); criteria.setCurrentOwnerId(LoginHelper.getUserId()); @@ -76,7 +78,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme } } - return PageUtil.toPage(devices); + // return PageUtil.toPage(devices); + return new TableDataInfo(records, devices.getTotal()); } 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 975b58f..7c607d3 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 @@ -1,10 +1,13 @@ package com.fuyuanshen.equipment.service.impl; 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.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.equipment.domain.Device; import com.fuyuanshen.equipment.domain.DeviceType; @@ -43,9 +46,11 @@ public class DeviceTypeServiceImpl extends ServiceImpl queryAll(DeviceTypeQueryCriteria criteria, Page page) { + public TableDataInfo queryAll(DeviceTypeQueryCriteria criteria, Page page) { criteria.setCustomerId(LoginHelper.getUserId()); - return PageUtil.toPage(deviceTypeMapper.findAll(criteria, page)); + // return + IPage deviceTypeIPage = deviceTypeMapper.findAll(criteria, page); + return new TableDataInfo(deviceTypeIPage.getRecords(), deviceTypeIPage.getTotal()); } @@ -77,9 +82,10 @@ public class DeviceTypeServiceImpl extends ServiceImpl Date: Thu, 3 Jul 2025 17:53:10 +0800 Subject: [PATCH 16/16] =?UTF-8?q?WEB=EF=BC=9A=E5=AF=BC=E5=87=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fys-modules/fys-equipment/pom.xml | 12 +-- .../controller/DeviceController.java | 16 ++-- .../controller/DeviceTypeController.java | 1 - .../converter/IgnoreFailedImageConverter.java | 76 ++++++++++++++++ .../converter/ImageReadConverter.java | 44 ++++++++++ .../fuyuanshen/equipment/domain/Device.java | 6 ++ .../domain/dto/DeviceExcelExportDTO.java | 80 +++++++++++++++++ .../equipment/service/DeviceService.java | 8 ++ .../service/impl/DeviceExportService.java | 86 +++++++++++++++++++ .../service/impl/DeviceServiceImpl.java | 41 ++++++--- .../mapper/equipment/DeviceMapper.xml | 67 +-------------- 11 files changed, 339 insertions(+), 98 deletions(-) create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/IgnoreFailedImageConverter.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/converter/ImageReadConverter.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelExportDTO.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceExportService.java diff --git a/fys-modules/fys-equipment/pom.xml b/fys-modules/fys-equipment/pom.xml index fe09466..87cc0b3 100644 --- a/fys-modules/fys-equipment/pom.xml +++ b/fys-modules/fys-equipment/pom.xml @@ -116,12 +116,12 @@ com.alibaba easyexcel 3.3.1 - - - poi-ooxml-schemas - org.apache.poi - - + + + + 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 @@ - -