From 3947f9b6f01057b000babc90def772b1f248525a Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Fri, 4 Jul 2025 15:42:10 +0800 Subject: [PATCH 1/8] =?UTF-8?q?WEB=EF=BC=9A=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CustomerServiceImpl.java | 1 + .../mapper/customer/CustomerMapper.xml | 11 ++++--- .../controller/DeviceController.java | 4 +-- .../equipment/domain/DeviceType.java | 8 +++++ .../equipment/domain/form/DeviceForm.java | 2 +- .../domain/query/DeviceQueryCriteria.java | 8 ++--- .../equipment/mapper/DeviceMapper.java | 7 ++++ .../service/impl/DeviceServiceImpl.java | 32 ++++++++++++++----- .../service/impl/DeviceTypeServiceImpl.java | 4 +-- .../mapper/equipment/DeviceMapper.xml | 23 +++++++++---- 10 files changed, 70 insertions(+), 30 deletions(-) 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 5eb7705..b9225f4 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 @@ -57,6 +57,7 @@ public class CustomerServiceImpl extends ServiceImpl i */ @Override public List queryAllCustomers(UserQueryCriteria criteria) { + criteria.setPid(LoginHelper.getUserId()); 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 index 98d2817..885753d 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 @@ -148,7 +148,6 @@ - @@ -187,16 +189,15 @@ 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 175a64a..8308068 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 @@ -133,9 +133,9 @@ public class DeviceController { // @Log("撤回设备") @Operation(summary = "撤回分配设备") @PostMapping(value = "/withdraw") - public ResponseVO withdrawDevice(@Validated @ModelAttribute DeviceForm deviceForm) { + public ResponseVO withdrawDevice(@RequestBody List ids) { try { - deviceService.withdrawDevice(deviceForm); + // deviceService.withdrawDevice(deviceForm); } catch (Exception e) { log.error("updateDevice error: " + e.getMessage()); return ResponseVO.fail("出错了"); 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 66fdb0d..dc6d542 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 @@ -27,6 +27,14 @@ public class DeviceType extends TenantEntity { @Schema(name = "创建该类型的客户") private Long ownerCustomerId; + /** + * 原始所有者(创建者) + * original_owner_id + */ + @Schema(name = "原始所有者(创建者)") + private Long originalOwnerId; + + @NotBlank(message = "设备类型名称不能为空") @Schema(name = "类型名称", required = true) private String typeName; 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 d1c7187..77713ed 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 deviceTypeId; + private Long deviceType; @Schema(title = "客户号") private Long customerId; 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 8da135f..773a18b 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 com.fuyuanshen.common.mybatis.core.domain.BaseEntity; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +16,7 @@ import java.util.Set; * @Date: 2025/5/16 **/ @Data -public class DeviceQueryCriteria { +public class DeviceQueryCriteria extends BaseEntity { @Schema(name = "设备id") private Long deviceId; @@ -24,7 +25,7 @@ public class DeviceQueryCriteria { private String deviceName; @Schema(name = "设备类型") - private Long deviceTypeId; + private Long deviceType; @Schema(name = "设备MAC") private String deviceMac; @@ -43,9 +44,6 @@ public class DeviceQueryCriteria { @Schema(name = "设备状态 0 失效 1 正常 ") private Integer deviceStatus; - @Schema(name = "创建时间") - private List createTime; - @Schema(name = "页码", example = "1") private Integer page = 1; 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 c473541..be09e6e 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 @@ -31,4 +31,11 @@ public interface DeviceMapper extends BaseMapper { List findAllDevices(@Param("criteria") DeviceQueryCriteria criteria); + /** + * 获取分配设备的客户 + * + * @param customerId + * @return + */ + Device getAssignCustomer(Long customerId); } 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 015d70c..f43c918 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -1,6 +1,7 @@ package com.fuyuanshen.equipment.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.generator.SnowflakeGenerator; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -113,7 +114,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Transactional(rollbackFor = Exception.class) public void addDevice(DeviceForm deviceForm) throws Exception { DeviceTypeQueryCriteria queryCriteria = new DeviceTypeQueryCriteria(); - queryCriteria.setDeviceTypeId(deviceForm.getId()); + queryCriteria.setDeviceTypeId(deviceForm.getDeviceType()); queryCriteria.setCustomerId(LoginHelper.getUserId()); List deviceTypes = deviceTypeMapper.findAll(queryCriteria); if (deviceTypes.isEmpty()) { @@ -152,7 +153,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme public void update(DeviceForm deviceForm) throws Exception { DeviceTypeQueryCriteria deviceTypeQueryCriteria = new DeviceTypeQueryCriteria(); - deviceTypeQueryCriteria.setDeviceTypeId(deviceForm.getId()); + deviceTypeQueryCriteria.setDeviceTypeId(deviceForm.getDeviceType()); deviceTypeQueryCriteria.setCustomerId(LoginHelper.getUserId()); List deviceTypes = deviceTypeMapper.findAll(deviceTypeQueryCriteria); if (deviceTypes.isEmpty()) { @@ -258,6 +259,11 @@ public class DeviceServiceImpl extends ServiceImpl impleme invalidIds.add(id); continue; } + Device assignCustomer = deviceMapper.getAssignCustomer(device.getId()); + if (assignCustomer != null) { + invalidIds.add(id); + continue; + } device.setCustomerId(customerId); device.setCustomerName(customer.getNickName()); devices.add(device); @@ -268,14 +274,24 @@ public class DeviceServiceImpl extends ServiceImpl impleme } devices.forEach((device) -> { - deviceMapper.updateById(device); - device.setId(null); - device.setCurrentOwnerId(customerId); - deviceMapper.insert(device); - DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - deviceType.setId(null); + deviceMapper.updateById(device); device.setCurrentOwnerId(customerId); + if (device.getDeviceType() == null) { + throw new RuntimeException("设备类型有问题!!! "); + } + DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); + SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); + device.setOriginalOwnerId(device.getId()); + Long next = snowflakeGenerator.next(); + device.setId(next); + device.setDeviceType(next); + + deviceType.setOriginalOwnerId(deviceType.getId()); + deviceType.setId(next); + deviceType.setOwnerCustomerId(customerId); + + deviceMapper.insert(device); deviceTypeMapper.insert(deviceType); }); 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 7c607d3..426cc6c 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 @@ -125,11 +125,11 @@ public class DeviceTypeServiceImpl extends ServiceImpl invalidId2 = new ArrayList<>(); for (Long id : ids) { DeviceType deviceType = deviceTypeMapper.selectById(id); - if (deviceType == null || !Objects.equals(deviceType.getCustomerId(), LoginHelper.getUserId())) { + if (deviceType == null || !Objects.equals(deviceType.getOwnerCustomerId(), LoginHelper.getUserId())) { invalidIds.add(id); } DeviceQueryCriteria deviceQueryCriteria = new DeviceQueryCriteria(); - deviceQueryCriteria.setDeviceTypeId(id); + deviceQueryCriteria.setDeviceType(id); List devices = deviceMapper.findAll(deviceQueryCriteria); if (!devices.isEmpty()) { invalidId2.add(id); 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 8879dae..695b102 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,7 +38,7 @@ + + + \ No newline at end of file From 2d34120b455f6f07644c99b785cd494077dc57d6 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Fri, 4 Jul 2025 15:49:23 +0800 Subject: [PATCH 2/8] =?UTF-8?q?WEB=EF=BC=9A=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fuyuanshen/equipment/controller/DeviceController.java | 2 +- .../equipment/controller/DeviceTypeController.java | 2 +- .../equipment/domain/query/DeviceQueryCriteria.java | 4 ++-- .../equipment/domain/query/DeviceTypeQueryCriteria.java | 5 ++--- 4 files changed, 6 insertions(+), 7 deletions(-) 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 8308068..e6405d8 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 @@ -62,7 +62,7 @@ public class DeviceController { @Operation(summary = "分页查询设备列表", security = {@SecurityRequirement(name = "bearer-key")}) @GetMapping public TableDataInfo queryDevice(DeviceQueryCriteria criteria) throws IOException { - Page page = new Page<>(criteria.getPage(), criteria.getSize()); + Page page = new Page<>(criteria.getPageNum(), criteria.getPageSize()); return deviceService.queryAll(criteria, page); } 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 100a44c..3e5d8be 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 @@ -33,7 +33,7 @@ public class DeviceTypeController { @GetMapping @Operation(summary = "分页查询设备类型") public TableDataInfo queryDeviceType(DeviceTypeQueryCriteria criteria) { - Page page = new Page<>(criteria.getPage(), criteria.getSize()); + Page page = new Page<>(criteria.getPageNum(), criteria.getPageSize()); return deviceTypeService.queryAll(criteria, page); } 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 773a18b..e8efd86 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 @@ -45,10 +45,10 @@ public class DeviceQueryCriteria extends BaseEntity { private Integer deviceStatus; @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 = "客户id") 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 9d2010e..a2a0ad0 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 @@ -31,9 +31,8 @@ public class DeviceTypeQueryCriteria extends BaseEntity implements Serializable private Long tenantId; @Schema(name = "页码", example = "1") - private Integer page = 1; + private Integer pageNum = 1; @Schema(name = "每页数据量", example = "10") - private Integer size = 10; - + private Integer pageSize = 10; } From ad82ab5fcaaa4c8f88495bb588fecf2952adb1ec Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Sat, 5 Jul 2025 15:55:46 +0800 Subject: [PATCH 3/8] =?UTF-8?q?APP/=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E5=A4=87=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fys-admin/src/main/resources/application.yml | 2 + fys-modules/fys-app/pom.xml | 5 + .../com/fuyuanshen/app/enums/UserType.java | 48 +++++ .../mapper/equipment/AppDeviceTypeMapper.java | 29 +++ .../impl/equipment/APPDeviceServiceImpl.java | 115 ++++++------ .../app/equipment/AppDeviceTypeMapper.xml | 35 ++++ .../controller/DeviceController.java | 2 +- .../fuyuanshen/equipment/domain/Device.java | 8 +- .../equipment/domain/DeviceType.java | 5 + .../domain/dto/DeviceExcelImportDTO.java | 1 - .../excel/UploadDeviceDataListener.java | 23 +-- .../equipment/mapper/DeviceMapper.java | 8 + .../equipment/mapper/DeviceTypeMapper.java | 8 + .../equipment/service/DeviceService.java | 2 +- .../service/impl/DeviceServiceImpl.java | 165 ++++++++++++++---- .../service/impl/DeviceTypeServiceImpl.java | 1 + .../mapper/equipment/DeviceMapper.xml | 10 +- .../mapper/equipment/DeviceTypeMapper.xml | 7 + 18 files changed, 376 insertions(+), 98 deletions(-) create mode 100644 fys-modules/fys-app/src/main/java/com/fuyuanshen/app/enums/UserType.java create mode 100644 fys-modules/fys-app/src/main/java/com/fuyuanshen/app/mapper/equipment/AppDeviceTypeMapper.java create mode 100644 fys-modules/fys-app/src/main/resources/mapper/app/equipment/AppDeviceTypeMapper.xml diff --git a/fys-admin/src/main/resources/application.yml b/fys-admin/src/main/resources/application.yml index b99b5d2..f550a10 100644 --- a/fys-admin/src/main/resources/application.yml +++ b/fys-admin/src/main/resources/application.yml @@ -216,6 +216,8 @@ springdoc: packages-to-scan: com.fuyuanshen.equipment - group: 客户管理模块 packages-to-scan: com.fuyuanshen.customer + - group: APP模块 + packages-to-scan: com.fuyuanshen.app # 防止XSS攻击 xss: diff --git a/fys-modules/fys-app/pom.xml b/fys-modules/fys-app/pom.xml index 1dd5471..de945a3 100644 --- a/fys-modules/fys-app/pom.xml +++ b/fys-modules/fys-app/pom.xml @@ -15,6 +15,11 @@ + + com.fuyuanshen + fys-equipment + + com.fuyuanshen diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/enums/UserType.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/enums/UserType.java new file mode 100644 index 0000000..1e7cb35 --- /dev/null +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/enums/UserType.java @@ -0,0 +1,48 @@ +package com.fuyuanshen.app.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * 用户类型枚举 + * + * @author: 默苍璃 + * @date: 2025-06-1811:14 + */ +public enum UserType { + + APP(0, "APP"), MINI_PROGRAM(1, "小程序"); + + private final int value; + private final String description; + + UserType(int value, String description) { + this.value = value; + this.description = description; + } + + @JsonValue + public int getValue() { + return value; + } + + public String getDescription() { + return description; + } + + /** + * 根据值获取对应的枚举 + * + * @param value 枚举值 + * @return 对应的枚举对象 + */ + public static UserType fromValue(int value) { + for (UserType userType : values()) { + if (userType.getValue() == value) { + return userType; + } + } + throw new IllegalArgumentException("Invalid user type value: " + value); + } + +} + diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/mapper/equipment/AppDeviceTypeMapper.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/mapper/equipment/AppDeviceTypeMapper.java new file mode 100644 index 0000000..774ae54 --- /dev/null +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/mapper/equipment/AppDeviceTypeMapper.java @@ -0,0 +1,29 @@ +package com.fuyuanshen.app.mapper.equipment; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fuyuanshen.app.domain.APPDeviceType; +import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author 97433 + * @description 针对表【app_device_type(设备类型表)】的数据库操作Mapper + * @createDate 2025-06-24 11:16:18 + * @Entity system.domain.AppDeviceType + */ +@Mapper +public interface AppDeviceTypeMapper extends BaseMapper { + + /** + * 查询设备类型列表 + * + * @param criteria 查询条件 + * @return 设备类型列表 + */ + List appTypeList(@Param("criteria") DeviceQueryCriteria criteria); + +} diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java index d5c659b..b5715a7 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java @@ -10,9 +10,19 @@ import com.fuyuanshen.app.domain.APPDevice; import com.fuyuanshen.app.domain.APPDeviceType; import com.fuyuanshen.app.domain.dto.APPUnbindDTO; import com.fuyuanshen.app.domain.query.APPDeviceQueryCriteria; +import com.fuyuanshen.app.enums.UserType; import com.fuyuanshen.app.mapper.equipment.APPDeviceMapper; +import com.fuyuanshen.app.mapper.equipment.AppDeviceTypeMapper; import com.fuyuanshen.app.service.equipment.APPDeviceService; import com.fuyuanshen.common.core.domain.PageResult; +import com.fuyuanshen.common.core.exception.BadRequestException; +import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.domain.DeviceType; +import com.fuyuanshen.equipment.enums.BindingStatusEnum; +import com.fuyuanshen.equipment.enums.CommunicationModeEnum; +import com.fuyuanshen.equipment.mapper.DeviceMapper; +import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -34,6 +44,9 @@ import java.util.stream.Collectors; public class APPDeviceServiceImpl extends ServiceImpl implements APPDeviceService { private final APPDeviceMapper appDeviceMapper; + private final DeviceMapper deviceMapper; + private final AppDeviceTypeMapper appDeviceTypeMapper; + private final DeviceTypeMapper deviceTypeMapper; /** @@ -72,56 +85,58 @@ public class APPDeviceServiceImpl extends ServiceImpl devices = new ArrayList<>(); - // - // if (criteria.getCommunicationMode().equals(CommunicationModeEnum.BLUETOOTH.getValue())) { - // devices = deviceMapper.selectList(new QueryWrapper().eq("device_mac", criteria.getDeviceMac())); - // if (CollectionUtil.isEmpty(devices)) { - // throw new BadRequestException("请先将设备入库!!!"); - // } - // List appDevices = appDeviceMapper.selectList(new QueryWrapper() - // .eq("device_mac", criteria.getDeviceMac()).eq("binding_type", UserType.APP.getValue())); - // if (CollectionUtil.isNotEmpty(appDevices)) { - // throw new BadRequestException("该设备已绑定!!!"); - // } - // } - // - // if (criteria.getCommunicationMode().equals(CommunicationModeEnum.FOUR_G.getValue())) { - // devices = deviceMapper.selectList(new QueryWrapper().eq("device_imei", criteria.getDeviceImei())); - // if (CollectionUtil.isEmpty(devices)) { - // throw new BadRequestException("请先将设备入库!!!"); - // } - // List appDevices = appDeviceMapper.selectList(new QueryWrapper() - // .eq("device_imei", criteria.getDeviceImei()).eq("binding_type", UserType.APP.getValue())); - // if (CollectionUtil.isNotEmpty(appDevices)) { - // throw new BadRequestException("该设备已绑定!!!"); - // } - // } - // - // Device device = devices.get(0); - // device.setBindingStatus(BindingStatusEnum.BOUND.getCode()); - // deviceMapper.updateById(device); - // - // APPDevice appDevice = new APPDevice(); - // BeanUtil.copyProperties(device, appDevice); - // appDevice.setBindingType(UserType.APP.getValue()); - // appDevice.setBindingStatus(BindingStatusEnum.BOUND.getCode()); - // Long currentUserId = SecurityUtils.getCurrentUserId(); - // appDevice.setCustomerId(currentUserId); - // appDevice.setCreateTime(new Timestamp(System.currentTimeMillis())); - // // 设备类型名称 - // appDevice.setDeviceTypeName(device.getTypeName()); - // appDeviceMapper.insert(appDevice); - // - // APPDeviceType appDeviceType = appDeviceTypeMapper.selectById(device.getDeviceType()); - // if (appDeviceType == null) { - // DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - // APPDeviceType type = new APPDeviceType(); - // BeanUtil.copyProperties(deviceType, type); - // type.setCustomerId(currentUserId); - // appDeviceTypeMapper.insert(type); - // } + List devices = new ArrayList<>(); + if (criteria.getCommunicationMode().equals(CommunicationModeEnum.BLUETOOTH.getValue())) { + devices = deviceMapper.selectList(new QueryWrapper() + .eq("original_device_id", null) + .eq("device_mac", criteria.getDeviceMac())); + if (CollectionUtil.isEmpty(devices)) { + throw new BadRequestException("请先将设备入库!!!"); + } + List appDevices = appDeviceMapper.selectList(new QueryWrapper() + .eq("device_mac", criteria.getDeviceMac()).eq("binding_type", UserType.APP.getValue())); + if (CollectionUtil.isNotEmpty(appDevices)) { + throw new BadRequestException("该设备已绑定!!!"); + } + } + + if (criteria.getCommunicationMode().equals(CommunicationModeEnum.FOUR_G.getValue())) { + devices = deviceMapper.selectList(new QueryWrapper() + .eq("original_device_id", null) + .eq("device_imei", criteria.getDeviceImei())); + if (CollectionUtil.isEmpty(devices)) { + throw new BadRequestException("请先将设备入库!!!"); + } + List appDevices = appDeviceMapper.selectList(new QueryWrapper() + .eq("device_imei", criteria.getDeviceImei()).eq("binding_type", UserType.APP.getValue())); + if (CollectionUtil.isNotEmpty(appDevices)) { + throw new BadRequestException("该设备已绑定!!!"); + } + } + + Device device = devices.get(0); + device.setBindingStatus(BindingStatusEnum.BOUND.getCode()); + deviceMapper.updateById(device); + + APPDevice appDevice = new APPDevice(); + BeanUtil.copyProperties(device, appDevice); + appDevice.setBindingType(UserType.APP.getValue()); + appDevice.setBindingStatus(BindingStatusEnum.BOUND.getCode()); + Long userId = LoginHelper.getUserId(); + appDevice.setCustomerId(userId); + appDevice.setCreateTime(new Timestamp(System.currentTimeMillis())); + // 设备类型名称 + appDevice.setDeviceTypeName(device.getTypeName()); + appDeviceMapper.insert(appDevice); + + APPDeviceType appDeviceType = appDeviceTypeMapper.selectById(device.getDeviceType()); + if (appDeviceType == null) { + DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); + APPDeviceType type = new APPDeviceType(); + BeanUtil.copyProperties(deviceType, type); + type.setCustomerId(userId); + appDeviceTypeMapper.insert(type); + } } diff --git a/fys-modules/fys-app/src/main/resources/mapper/app/equipment/AppDeviceTypeMapper.xml b/fys-modules/fys-app/src/main/resources/mapper/app/equipment/AppDeviceTypeMapper.xml new file mode 100644 index 0000000..5c1fd86 --- /dev/null +++ b/fys-modules/fys-app/src/main/resources/mapper/app/equipment/AppDeviceTypeMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + id + ,type_name,is_support_ble,locate_mode,network_way,create_by, + update_by,create_time,update_time,customer_id,communication_mode + + + + + 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 e6405d8..01b89fb 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 @@ -135,7 +135,7 @@ public class DeviceController { @PostMapping(value = "/withdraw") public ResponseVO withdrawDevice(@RequestBody List ids) { try { - // deviceService.withdrawDevice(deviceForm); + deviceService.withdrawDevice(ids); } catch (Exception e) { log.error("updateDevice error: " + e.getMessage()); return ResponseVO.fail("出错了"); 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 5536e1b..2361024 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 @@ -1,7 +1,5 @@ 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.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -55,6 +53,11 @@ public class Device extends TenantEntity { @Schema(name = "原始所有者(创建者)") private Long originalOwnerId; + /** + * 原始设备 + */ + @Schema(name = "原始设备") + private Long originalDeviceId; /*@Schema( name = "设备编号") private String deviceNo;*/ @@ -99,7 +102,6 @@ public class Device extends TenantEntity { @Schema(name = "绑定状态") private Integer bindingStatus; - /** * 创建人名称 */ 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 dc6d542..76e554e 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 @@ -34,6 +34,11 @@ public class DeviceType extends TenantEntity { @Schema(name = "原始所有者(创建者)") private Long originalOwnerId; + /** + * 原始设备 + */ + @Schema(name = "原始设备类型") + private Long originalDeviceId; @NotBlank(message = "设备类型名称不能为空") @Schema(name = "类型名称", required = true) diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java index 7fce9e8..f2f9a87 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/dto/DeviceExcelImportDTO.java @@ -26,7 +26,6 @@ public class DeviceExcelImportDTO { @ColumnWidth(20) private String deviceName; - @ExcelProperty(value = "设备图片", converter = ByteArrayImageConverter.class) @ColumnWidth(15) private byte[] devicePic; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java index 7869e0d..7647eaa 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/excel/UploadDeviceDataListener.java @@ -29,7 +29,6 @@ import java.util.*; @Slf4j public class UploadDeviceDataListener implements ReadListener { - // 存储图片数据的映射 private final Map rowImageMap = new HashMap<>(); @@ -48,6 +47,7 @@ public class UploadDeviceDataListener implements ReadListener deviceList = params.getDeviceMapper().findAll(criteria); - if (!deviceList.isEmpty()) { - throw new RuntimeException("设备MAC重复"); - } - device.setTenantId(params.getTenantId()); + // DeviceQueryCriteria criteria = new DeviceQueryCriteria(); + // criteria.setDeviceMac(device.getDeviceMac()); + // criteria.setTenantId(params.getTenantId()); + // List deviceList = params.getDeviceMapper().findAll(criteria); + // if (!deviceList.isEmpty()) { + // throw new RuntimeException("设备MAC重复"); + // } + // device.setTenantId(params.getTenantId()); // 设备类型 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("type_name", device.getTypeName()); - wrapper.eq("customer_id", params.getUserId()); + // wrapper.eq("customer_id", params.getUserId()); List deviceTypes = params.getDeviceTypeMapper().selectList(wrapper); if (CollectionUtil.isNotEmpty(deviceTypes)) { device.setDeviceType(deviceTypes.get(0).getId()); } + device.setCurrentOwnerId(loginUser.getUserId()); + device.setOriginalOwnerId(loginUser.getUserId()); + device.setCreateByName(loginUser.getNickname()); params.getDeviceService().save(device); successCount++; log.info("行 {} 数据插入成功", rowIndex); 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 be09e6e..7ff7d3c 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 @@ -38,4 +38,12 @@ public interface DeviceMapper extends BaseMapper { * @return */ Device getAssignCustomer(Long customerId); + + /** + * 获取设备链 + * + * @param originalDeviceId + * @return + */ + List findByOriginalDeviceId(Long originalDeviceId); } 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 15f0fd1..90799fe 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 @@ -36,4 +36,12 @@ public interface DeviceTypeMapper extends BaseMapper { */ List findAll(@Param("criteria") DeviceTypeQueryCriteria criteria); + /** + * 获取已经分配的设备类型 + * + * @param customerId + * @return + */ + DeviceType getAssignType(@Param("deviceType") Long deviceType, @Param("customerId") Long customerId); + } 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 4990517..4ff019e 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 @@ -73,7 +73,7 @@ public interface DeviceService extends IService { /** * 撤回设备 */ - void withdrawDevice(DeviceForm deviceForm); + void withdrawDevice(List ids); /** * 解绑设备 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 f43c918..ddd6813 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,7 @@ 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.enums.DeviceStatusEnum; import com.fuyuanshen.equipment.mapper.DeviceMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; import com.fuyuanshen.equipment.service.DeviceService; @@ -32,9 +33,7 @@ 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; +import java.util.*; /** * @Description: @@ -133,6 +132,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme Device device = new Device(); LoginUser loginUser = LoginHelper.getLoginUser(); device.setCurrentOwnerId(loginUser.getUserId()); + device.setOriginalOwnerId(loginUser.getUserId()); device.setCreateByName(loginUser.getNickname()); device.setTypeName(deviceTypes.get(0).getTypeName()); BeanUtil.copyProperties(deviceForm, device, true); @@ -171,9 +171,11 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 处理上传的图片 // String imageUrl = saveDeviceImage(deviceForm.getFile(), device.getDeviceName()); - SysOssVo upload = ossService.upload(deviceForm.getFile()); - // 设置图片路径 - deviceForm.setDevicePic(upload.getUrl()); + if (deviceForm.getFile() != null) { + SysOssVo upload = ossService.upload(deviceForm.getFile()); + // 设置图片路径 + deviceForm.setDevicePic(upload.getUrl()); + } // 更新字段 BeanUtil.copyProperties(deviceForm, device, true); @@ -240,8 +242,65 @@ public class DeviceServiceImpl extends ServiceImpl impleme * * @param customerVo */ + // @Override + // @Transactional(rollbackFor = Exception.class) + // public void assignCustomer1(CustomerVo customerVo) { + // List deviceIds = customerVo.getDeviceIds(); + // Long customerId = customerVo.getCustomerId(); + // + // Customer customer = customerMapper.queryCustomerById(customerId, LoginHelper.getLoginUser().getPid()); + // if (customer == null) { + // throw new RuntimeException("待分配的客户不存在!!!"); + // } + // + // List invalidIds = new ArrayList<>(); + // List devices = new ArrayList<>(); + // for (Long id : deviceIds) { + // Device device = deviceMapper.selectById(id); + // if (device == null || !Objects.equals(device.getCurrentOwnerId(), LoginHelper.getUserId())) { + // invalidIds.add(id); + // continue; + // } + // Device assignCustomer = deviceMapper.getAssignCustomer(device.getId()); + // if (assignCustomer != null) { + // invalidIds.add(id); + // continue; + // } + // device.setCustomerId(customerId); + // device.setCustomerName(customer.getNickName()); + // devices.add(device); + // } + // if (!invalidIds.isEmpty()) { + // throw new RuntimeException("以下设备无法分配(ID 不存在或无权限): " + invalidIds); + // } + // + // devices.forEach((device) -> { + // + // deviceMapper.updateById(device); + // device.setCurrentOwnerId(customerId); + // if (device.getDeviceType() == null) { + // throw new RuntimeException("设备类型有问题!!! "); + // } + // DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); + // SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); + // device.setOriginalDeviceId(device.getId()); + // Long next = snowflakeGenerator.next(); + // device.setId(next); + // device.setDeviceType(next); + // + // DeviceType assignType = deviceTypeMapper.getAssignType(device.getDeviceType(), customerId); + // if (assignType == null) { + // deviceType.setOriginalDeviceId(deviceType.getId()); + // deviceType.setId(next); + // deviceType.setOwnerCustomerId(customerId); + // deviceTypeMapper.insert(deviceType); + // } + // + // deviceMapper.insert(device); + // + // }); + // } @Override - @Transactional(rollbackFor = Exception.class) public void assignCustomer(CustomerVo customerVo) { List deviceIds = customerVo.getDeviceIds(); Long customerId = customerVo.getCustomerId(); @@ -251,8 +310,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme throw new RuntimeException("待分配的客户不存在!!!"); } + List devicesToAssign = new ArrayList<>(); 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())) { @@ -266,51 +326,94 @@ public class DeviceServiceImpl extends ServiceImpl impleme } device.setCustomerId(customerId); device.setCustomerName(customer.getNickName()); - devices.add(device); - + devicesToAssign.add(device); } + if (!invalidIds.isEmpty()) { throw new RuntimeException("以下设备无法分配(ID 不存在或无权限): " + invalidIds); } - devices.forEach((device) -> { + // 批量处理设备分配 + batchAssignDevices(devicesToAssign, customer); + } - deviceMapper.updateById(device); - device.setCurrentOwnerId(customerId); + @Transactional(rollbackFor = Exception.class) + public void batchAssignDevices(List devicesToAssign, Customer customer) { + Long userId = LoginHelper.getUserId(); + SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); + for (Device device : devicesToAssign) { if (device.getDeviceType() == null) { throw new RuntimeException("设备类型有问题!!! "); } - DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); - device.setOriginalOwnerId(device.getId()); - Long next = snowflakeGenerator.next(); - device.setId(next); - device.setDeviceType(next); - deviceType.setOriginalOwnerId(deviceType.getId()); - deviceType.setId(next); - deviceType.setOwnerCustomerId(customerId); + deviceMapper.updateById(device); + + DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); + DeviceType assignType = deviceTypeMapper.getAssignType(device.getDeviceType(), customer.getCustomerId()); + + Long next = snowflakeGenerator.next(); + + device.setOriginalDeviceId(device.getId()); + device.setCurrentOwnerId(customer.getCustomerId()); + device.setOriginalOwnerId(device.getCurrentOwnerId()); + device.setCustomerId(null); + device.setCustomerName(""); + device.setId(next); + + if (assignType == null) { + deviceType.setOriginalDeviceId(deviceType.getId()); + deviceType.setOriginalOwnerId(deviceType.getOwnerCustomerId()); + deviceType.setId(next); + device.setDeviceType(next); + deviceType.setOwnerCustomerId(customer.getCustomerId()); + deviceTypeMapper.insert(deviceType); + } else { + device.setDeviceType(assignType.getId()); + } deviceMapper.insert(device); - deviceTypeMapper.insert(deviceType); - - }); - } - - public void assign(List deviceIds) { - + } } /** * 撤回设备 * - * @param deviceForm + * @param ids */ @Override - public void withdrawDevice(DeviceForm deviceForm) { + public void withdrawDevice(List ids) { + ids.forEach((id) -> { + List deviceChain = getDeviceChain(id); + deviceChain.forEach((device) -> { + device.setDeviceStatus(DeviceStatusEnum.INVALID.getCode()); + // device.setCustomerId(null); + // device.setCustomerName(""); + deviceMapper.updateById(device); + }); + }); + } + public List getDeviceChain(Long originalDeviceId) { + List chain = new ArrayList<>(); + Set visited = new HashSet<>(); // 防止循环引用 + findNext(chain, visited, originalDeviceId); + return chain; + } + + private void findNext(List chain, Set visited, Long currentOriginalDeviceId) { + if (visited.contains(currentOriginalDeviceId)) { + log.info("检测到循环引用,终止递归"); + return; + } + visited.add(currentOriginalDeviceId); + + List devices = deviceMapper.findByOriginalDeviceId(currentOriginalDeviceId); + for (Device device : devices) { + chain.add(device); + findNext(chain, visited, device.getId()); + } } 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 426cc6c..fa9e8f0 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 @@ -85,6 +85,7 @@ public class DeviceTypeServiceImpl extends ServiceImpl SELECT * FROM device - WHERE original_owner_id = #{customerId} + WHERE original_device_id = #{customerId} AND device_status = 1 + + + \ No newline at end of file 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 ede9a98..a48b7be 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 @@ -37,4 +37,11 @@ ORDER BY dt.create_time DESC + + + \ No newline at end of file From 2a06c18f352ddaade5331b127510df9e014222cd Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Sat, 5 Jul 2025 16:29:31 +0800 Subject: [PATCH 4/8] =?UTF-8?q?WEB=E7=AB=AF=E6=9F=A5=E7=9C=8BAPP=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E8=AE=BE=E5=A4=87=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../equipment/APPDeviceController.java | 27 +++++++------------ .../service/equipment/APPDeviceService.java | 5 ++-- .../impl/equipment/APPDeviceServiceImpl.java | 11 ++++---- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java index df1098f..f71e136 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java @@ -8,6 +8,7 @@ import com.fuyuanshen.app.domain.query.APPDeviceQueryCriteria; import com.fuyuanshen.app.service.equipment.APPDeviceService; import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.domain.ResponseVO; +import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -34,16 +35,11 @@ public class APPDeviceController { @PostMapping(value = "/list") @Operation(summary = "APP客户设备列表") - public ResponseVO> appDeviceList(@RequestBody APPDeviceQueryCriteria criteria) { + public TableDataInfo appDeviceList(@RequestBody APPDeviceQueryCriteria criteria) { Page page = new Page<>(criteria.getPage(), criteria.getSize()); - PageResult devices = null; - try { - devices = appDeviceService.appDeviceList(page, criteria); - } catch (Exception e) { - log.error("queryDevice error: " + e.getMessage()); - return ResponseVO.fail(""); - } - return ResponseVO.success(devices); + + TableDataInfo devices = appDeviceService.appDeviceList(page, criteria); + return devices; } @@ -65,16 +61,11 @@ public class APPDeviceController { @GetMapping @Operation(summary = "WEB端查看APP客户设备绑定") - public ResponseVO> queryAPPDevice(APPDeviceQueryCriteria criteria) { + public TableDataInfo queryAPPDevice(APPDeviceQueryCriteria criteria) { Page page = new Page<>(criteria.getPage(), criteria.getSize()); - PageResult devices = null; - try { - devices = appDeviceService.queryAll(page, criteria); - } catch (Exception e) { - log.error("queryDevice error: " + e.getMessage()); - return ResponseVO.fail(""); - } - return ResponseVO.success(devices); + TableDataInfo devices = null; + devices = appDeviceService.queryAll(page, criteria); + return devices; } diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/equipment/APPDeviceService.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/equipment/APPDeviceService.java index 3f7160d..82e5ae6 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/equipment/APPDeviceService.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/equipment/APPDeviceService.java @@ -7,6 +7,7 @@ import com.fuyuanshen.app.domain.APPDeviceType; import com.fuyuanshen.app.domain.dto.APPUnbindDTO; import com.fuyuanshen.app.domain.query.APPDeviceQueryCriteria; import com.fuyuanshen.common.core.domain.PageResult; +import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import java.util.List; @@ -22,7 +23,7 @@ public interface APPDeviceService extends IService { * * @param criteria */ - PageResult appDeviceList(Page page, APPDeviceQueryCriteria criteria); + TableDataInfo appDeviceList(Page page, APPDeviceQueryCriteria criteria); /** @@ -47,7 +48,7 @@ public interface APPDeviceService extends IService { * @param page * @return */ - PageResult queryAll(Page page, APPDeviceQueryCriteria criteria); + TableDataInfo queryAll(Page page, APPDeviceQueryCriteria criteria); /** * APP/小程序用户设备解绑 diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java index b5715a7..480d457 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/service/impl/equipment/APPDeviceServiceImpl.java @@ -16,6 +16,7 @@ import com.fuyuanshen.app.mapper.equipment.AppDeviceTypeMapper; import com.fuyuanshen.app.service.equipment.APPDeviceService; import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.exception.BadRequestException; +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; @@ -55,7 +56,7 @@ public class APPDeviceServiceImpl extends ServiceImpl appDeviceList(Page page, APPDeviceQueryCriteria criteria) { + public TableDataInfo appDeviceList(Page page, APPDeviceQueryCriteria criteria) { // criteria.setCustomerId(SecurityUtils.getCurrentUserId()); // IPage devices = appDeviceMapper.appDeviceList(page, criteria); // return new PageResult<>(devices.getRecords(), devices.getTotal()); @@ -149,11 +150,9 @@ public class APPDeviceServiceImpl extends ServiceImpl queryAll(Page page, APPDeviceQueryCriteria criteria) { - // IPage devices = appDeviceMapper.queryAll(page, criteria); - // return new PageResult<>(devices.getRecords(), devices.getTotal()); - - return null; + public TableDataInfo queryAll(Page page, APPDeviceQueryCriteria criteria) { + IPage devices = appDeviceMapper.queryAll(page, criteria); + return new TableDataInfo<>(devices.getRecords(), devices.getTotal()); } From 952077da92d927fb3078f4b780a2be8a5f2f4b0e Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Mon, 7 Jul 2025 10:56:14 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=A2=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../equipment/APPDeviceController.java | 1 - fys-modules/fys-customer/pom.xml | 6 ++++ .../customer/constant/ArrayConstants.java | 34 +++++++++++++++++++ .../service/impl/CustomerServiceImpl.java | 17 ++++++++++ fys-modules/fys-equipment/pom.xml | 6 ++++ .../service/impl/DeviceServiceImpl.java | 11 ++++-- fys-modules/fys-system/pom.xml | 5 +++ .../service/impl/SysUserServiceImpl.java | 2 +- 8 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/constant/ArrayConstants.java diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java index f71e136..a9a8b1f 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/equipment/APPDeviceController.java @@ -6,7 +6,6 @@ import com.fuyuanshen.app.domain.APPDeviceType; import com.fuyuanshen.app.domain.dto.APPUnbindDTO; import com.fuyuanshen.app.domain.query.APPDeviceQueryCriteria; import com.fuyuanshen.app.service.equipment.APPDeviceService; -import com.fuyuanshen.common.core.domain.PageResult; import com.fuyuanshen.common.core.domain.ResponseVO; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; import io.swagger.v3.oas.annotations.Operation; diff --git a/fys-modules/fys-customer/pom.xml b/fys-modules/fys-customer/pom.xml index 7788bf9..41a5f23 100644 --- a/fys-modules/fys-customer/pom.xml +++ b/fys-modules/fys-customer/pom.xml @@ -16,6 +16,12 @@ + + + com.fuyuanshen + fys-system + + com.fuyuanshen diff --git a/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/constant/ArrayConstants.java b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/constant/ArrayConstants.java new file mode 100644 index 0000000..8cfbd66 --- /dev/null +++ b/fys-modules/fys-customer/src/main/java/com/fuyuanshen/customer/constant/ArrayConstants.java @@ -0,0 +1,34 @@ +package com.fuyuanshen.customer.constant; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 数组相关常量 + * + * @author: 默苍璃 + * @date: 2025-07-0710:10 + */ +public class ArrayConstants { + + /** + * 默认长整型数组 + */ + public static final Long[] DEFAULT_LONG_ARRAY = {666L}; + public static final Long DEFAULT_LONG = 666L; + + /** + * 空字符串数组 + */ + public static final String[] EMPTY_STRING_ARRAY = new String[0]; + + /** + * 获取只读的默认长整型列表 + */ + public static List getDefaultLongList() { + return Collections.unmodifiableList(new ArrayList<>(List.of(DEFAULT_LONG_ARRAY))); + } + + +} 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 b9225f4..49baa0b 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 @@ -6,11 +6,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.constant.ArrayConstants; 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 com.fuyuanshen.system.domain.SysUserRole; +import com.fuyuanshen.system.domain.bo.SysUserBo; +import com.fuyuanshen.system.mapper.SysRoleMapper; +import com.fuyuanshen.system.mapper.SysUserRoleMapper; +import com.fuyuanshen.system.service.ISysUserService; +import com.fuyuanshen.system.service.impl.SysUserServiceImpl; import io.undertow.util.BadRequestException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -28,6 +35,9 @@ import java.util.Set; public class CustomerServiceImpl extends ServiceImpl implements CustomerService { private final CustomerMapper customerMapper; + private final SysUserServiceImpl userService; + private final SysRoleMapper roleMapper; + private final SysUserRoleMapper userRoleMapper; /** @@ -84,6 +94,13 @@ public class CustomerServiceImpl extends ServiceImpl i customer.setPid(loginUser.getUserId()); save(customer); + + // 新增用户与角色管理 + SysUserRole sysUserRole = new SysUserRole(); + sysUserRole.setUserId(customer.getCustomerId()); + sysUserRole.setRoleId(ArrayConstants.DEFAULT_LONG); + userRoleMapper.insert(sysUserRole); + } diff --git a/fys-modules/fys-equipment/pom.xml b/fys-modules/fys-equipment/pom.xml index ba67986..ee98be4 100644 --- a/fys-modules/fys-equipment/pom.xml +++ b/fys-modules/fys-equipment/pom.xml @@ -17,6 +17,12 @@ + + + + + + com.fuyuanshen 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 ddd6813..226b7df 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 @@ -387,11 +387,18 @@ public class DeviceServiceImpl extends ServiceImpl impleme List deviceChain = getDeviceChain(id); deviceChain.forEach((device) -> { device.setDeviceStatus(DeviceStatusEnum.INVALID.getCode()); - // device.setCustomerId(null); - // device.setCustomerName(""); deviceMapper.updateById(device); }); }); + + ids.forEach((id) -> { + Device device = new Device(); + device.setId(id); + device.setCustomerId(null); + device.setCustomerName(""); + deviceMapper.updateById(device); + }); + } diff --git a/fys-modules/fys-system/pom.xml b/fys-modules/fys-system/pom.xml index 1a26ea2..e32778e 100644 --- a/fys-modules/fys-system/pom.xml +++ b/fys-modules/fys-system/pom.xml @@ -16,6 +16,11 @@ + + + + + com.fuyuanshen diff --git a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysUserServiceImpl.java b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysUserServiceImpl.java index a0b9aa8..d4b1a08 100644 --- a/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysUserServiceImpl.java +++ b/fys-modules/fys-system/src/main/java/com/fuyuanshen/system/service/impl/SysUserServiceImpl.java @@ -428,7 +428,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { * @param user 用户对象 * @param clear 清除已存在的关联数据 */ - private void insertUserRole(SysUserBo user, boolean clear) { + public void insertUserRole(SysUserBo user, boolean clear) { this.insertUserRole(user.getUserId(), user.getRoleIds(), clear); } From f338ef47d12c3ebebff5c629d6ce282bbb4c4875 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Mon, 7 Jul 2025 11:40:46 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9APP=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeviceAPPController.java | 49 +++++++ .../fuyuanshen/equipment/domain/UserApp.java | 99 +++++++++++++++ .../equipment/domain/bo/UserAppBo.java | 95 ++++++++++++++ .../equipment/domain/vo/UserAppVo.java | 120 ++++++++++++++++++ .../equipment/mapper/UserAppMapper.java | 17 +++ .../equipment/service/AppUserService.java | 27 ++++ .../service/impl/UserAppServiceImpl.java | 41 ++++++ .../mapper/equipment/AppUserMapper.xml | 7 + 8 files changed, 455 insertions(+) create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceAPPController.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/UserAppVo.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/UserAppMapper.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java create mode 100644 fys-modules/fys-equipment/src/main/resources/mapper/equipment/AppUserMapper.xml diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceAPPController.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceAPPController.java new file mode 100644 index 0000000..1e892dd --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/controller/DeviceAPPController.java @@ -0,0 +1,49 @@ +package com.fuyuanshen.equipment.controller; + + +import com.fuyuanshen.common.core.domain.R; +import com.fuyuanshen.common.core.validate.EditGroup; +import com.fuyuanshen.common.idempotent.annotation.RepeatSubmit; +import com.fuyuanshen.common.log.annotation.Log; +import com.fuyuanshen.common.log.enums.BusinessType; +import com.fuyuanshen.common.web.core.BaseController; +import com.fuyuanshen.equipment.domain.bo.UserAppBo; +import com.fuyuanshen.equipment.service.AppUserService; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description: + * @Author: WY + * @Date: 2025/5/16 + **/ +@Slf4j +@Tag(name = "设备管理", description = "设备:设备管理") +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/app/device") +public class DeviceAPPController extends BaseController { + + private final AppUserService appUserService; + + + /** + * 修改APP用户信息 + */ + // @SaCheckPermission("app:user:edit") + @Log(title = "APP用户信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody UserAppBo bo) { + return toAjax(appUserService.updateByBo(bo)); + } + +} + + diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java new file mode 100644 index 0000000..64679ac --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java @@ -0,0 +1,99 @@ +package com.fuyuanshen.equipment.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fuyuanshen.common.tenant.core.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.util.Date; + +/** + * APP用户信息对象 app_user + * + * @author Lion Li + * @date 2025-06-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("app_user") +public class UserApp extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @TableId(value = "user_id") + private Long userId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户类型(app_user系统用户) + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 密码 + */ + private String password; + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 最后登录IP + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; + + /** + * 备注 + */ + private String remark; + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java new file mode 100644 index 0000000..ab6b839 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java @@ -0,0 +1,95 @@ +package com.fuyuanshen.equipment.domain.bo; + +import com.fuyuanshen.common.core.validate.AddGroup; +import com.fuyuanshen.common.core.validate.EditGroup; +import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; +import com.fuyuanshen.equipment.domain.UserApp; +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * APP用户信息业务对象 app_user + * + * @author Lion Li + * @date 2025-06-27 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = UserApp.class, reverseConvertGenerate = false) +public class UserAppBo extends BaseEntity { + + /** + * 用户ID + */ + @NotNull(message = "用户ID不能为空", groups = { EditGroup.class }) + private Long userId; + + /** + * 用户账号 + */ + @NotBlank(message = "用户账号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String userName; + + /** + * 用户昵称 + */ + @NotBlank(message = "用户昵称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String nickName; + + /** + * 用户类型(app_user系统用户) + */ + private String userType; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 密码 + */ + private String password; + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + /** + * 最后登录IP + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/UserAppVo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/UserAppVo.java new file mode 100644 index 0000000..537c1a7 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/vo/UserAppVo.java @@ -0,0 +1,120 @@ +package com.fuyuanshen.equipment.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import com.fuyuanshen.common.excel.annotation.ExcelDictFormat; +import com.fuyuanshen.common.excel.convert.ExcelDictConvert; +import com.fuyuanshen.equipment.domain.UserApp; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + +/** + * APP用户信息视图对象 app_user + * + * @author Lion Li + * @date 2025-06-27 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = UserApp.class) +public class UserAppVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 用户ID + */ + @ExcelProperty(value = "用户ID") + private Long userId; + + /** + * 用户账号 + */ + @ExcelProperty(value = "用户账号") + private String userName; + + /** + * 用户昵称 + */ + @ExcelProperty(value = "用户昵称") + private String nickName; + + /** + * 用户类型(app_user系统用户) + */ + @ExcelProperty(value = "用户类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "a=pp_user系统用户") + private String userType; + + /** + * 用户邮箱 + */ + @ExcelProperty(value = "用户邮箱") + private String email; + + /** + * 手机号码 + */ + @ExcelProperty(value = "手机号码") + private String phonenumber; + + /** + * 用户性别(0男 1女 2未知) + */ + @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=男,1=女,2=未知") + private String sex; + + /** + * 头像地址 + */ + @ExcelProperty(value = "头像地址") + private Long avatar; + + /** + * 密码 + */ + @ExcelProperty(value = "密码") + private String password; + + /** + * 帐号状态(0正常 1停用) + */ + @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 最后登录IP + */ + @ExcelProperty(value = "最后登录IP") + private String loginIp; + + /** + * 最后登录时间 + */ + @ExcelProperty(value = "最后登录时间") + private Date loginDate; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 租户编号 + */ + private String tenantId; + + /** + * 部门ID + */ + private Long deptId; +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/UserAppMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/UserAppMapper.java new file mode 100644 index 0000000..d5399e2 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/UserAppMapper.java @@ -0,0 +1,17 @@ +package com.fuyuanshen.equipment.mapper; + +import com.fuyuanshen.common.mybatis.core.mapper.BaseMapperPlus; +import com.fuyuanshen.equipment.domain.UserApp; +import com.fuyuanshen.equipment.domain.vo.UserAppVo; +import org.apache.ibatis.annotations.Mapper; + +/** + * APP用户信息Mapper接口 + * + * @author Lion Li + * @date 2025-06-27 + */ +@Mapper +public interface UserAppMapper extends BaseMapperPlus { + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java new file mode 100644 index 0000000..c5efd02 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java @@ -0,0 +1,27 @@ +package com.fuyuanshen.equipment.service; + +import com.fuyuanshen.common.mybatis.core.page.PageQuery; +import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; +import com.fuyuanshen.equipment.domain.bo.UserAppBo; + +import java.util.Collection; +import java.util.List; + +/** + * APP用户信息Service接口 + * + * @author Lion Li + * @date 2025-06-27 + */ +public interface AppUserService { + + /** + * 修改APP用户信息 + * + * @param bo APP用户信息 + * @return 是否修改成功 + */ + Boolean updateByBo(UserAppBo bo); + + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java new file mode 100644 index 0000000..59a6e27 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java @@ -0,0 +1,41 @@ +package com.fuyuanshen.equipment.service.impl; + +import com.fuyuanshen.common.core.utils.MapstructUtils; +import com.fuyuanshen.equipment.domain.UserApp; +import com.fuyuanshen.equipment.domain.bo.UserAppBo; +import com.fuyuanshen.equipment.mapper.UserAppMapper; +import com.fuyuanshen.equipment.service.AppUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Collection; + +/** + * Service业务层处理 + * + * @author Lion Li + * @date 2025-06-27 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class UserAppServiceImpl implements AppUserService { + + private final UserAppMapper baseMapper; + + + /** + * 修改APP用户信息 + * + * @param bo APP用户信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(UserAppBo bo) { + UserApp update = MapstructUtils.convert(bo, UserApp.class); + return baseMapper.updateById(update) > 0; + } + + +} diff --git a/fys-modules/fys-equipment/src/main/resources/mapper/equipment/AppUserMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/AppUserMapper.xml new file mode 100644 index 0000000..a12ad16 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/AppUserMapper.xml @@ -0,0 +1,7 @@ + + + + + From d301e9da3ce345ce45649d29110e5a33c9023116 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Mon, 7 Jul 2025 15:34:02 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controller/AppAuthController.java | 13 + .../src/main/resources/application-dev.yml | 12 +- .../main/resources/application-jingquan.yml | 304 ++++++++++++++++++ .../sms/controller/TestSMSController.java | 24 ++ .../equipment/domain/bo/UserAppBo.java | 2 +- 5 files changed, 350 insertions(+), 5 deletions(-) create mode 100644 fys-admin/src/main/resources/application-jingquan.yml create mode 100644 fys-common/fys-common-sms/src/main/java/com/fuyuanshen/common/sms/controller/TestSMSController.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppAuthController.java b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppAuthController.java index 2d06b91..f761ea6 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppAuthController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/controller/AppAuthController.java @@ -29,6 +29,9 @@ import com.fuyuanshen.web.service.SysRegisterService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -157,4 +160,14 @@ public class AppAuthController { return R.ok(result); } + + @GetMapping("/test") + public void testSend() { + // 在创建完SmsBlend实例后,再未手动调用注销的情况下框架会持有该实例,可以直接通过指定configId来获取想要的配置,如果你想使用 + // 负载均衡形式获取实例,只要使用getSmsBlend的无参重载方法即可,如果你仅有一个配置,也可以使用该方法 + SmsBlend smsBlend = SmsFactory.getSmsBlend("config1"); + + SmsResponse smsResponse = smsBlend.sendMessage("18656573389", "123"); + } + } diff --git a/fys-admin/src/main/resources/application-dev.yml b/fys-admin/src/main/resources/application-dev.yml index 811dcfd..e050891 100644 --- a/fys-admin/src/main/resources/application-dev.yml +++ b/fys-admin/src/main/resources/application-dev.yml @@ -174,11 +174,15 @@ sms: # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 supplier: alibaba # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 - access-key-id: 您的accessKey + access-key-id: LTAI5tJdDNpZootsPQ5hdELx # 称为accessSecret有些称之为apiSecret - access-key-secret: 您的accessKeySecret - signature: 您的短信签名 - sdk-app-id: 您的sdkAppId + access-key-secret: mU4WtffcCXpHPz5tLwQpaGtLsJXONt + #模板ID 非必须配置,如果使用sendMessage的快速发送需此配置 + template-id: SMS_322180518 + #模板变量 上述模板的变量 + templateName: code + signature: 湖北星汉研创科技 +# sdk-app-id: 您的sdkAppId config2: # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 supplier: tencent diff --git a/fys-admin/src/main/resources/application-jingquan.yml b/fys-admin/src/main/resources/application-jingquan.yml new file mode 100644 index 0000000..811dcfd --- /dev/null +++ b/fys-admin/src/main/resources/application-jingquan.yml @@ -0,0 +1,304 @@ +--- # 监控中心配置 +spring.boot.admin.client: + # 增加客户端开关 + enabled: false + url: http://localhost:9090/admin + instance: + service-host-type: IP + metadata: + username: ${spring.boot.admin.client.username} + userpassword: ${spring.boot.admin.client.password} + username: @monitor.username@ + password: @monitor.password@ + +--- # snail-job 配置 +snail-job: + enabled: false + # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 + group: "fys_group" + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表 + token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" + server: + host: 127.0.0.1 + port: 17888 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 + namespace: ${spring.profiles.active} + # 随主应用端口漂移 + port: 2${server.port} + # 客户端ip指定 + host: + # RPC类型: netty, grpc + rpc-type: grpc + +--- # 数据源配置 +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + # 性能分析插件(有性能损耗 不建议生产环境使用) + p6spy: true + # 设置默认的数据源或者数据源组,默认值即为 master + primary: master + # 严格模式 匹配不到数据源则报错 + strict: true + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:mysql://47.120.79.150:3306/fys-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: root + password: Jq_123456# +# # 从库数据源 +# slave: +# lazy: true +# type: ${spring.datasource.type} +# driverClassName: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# username: +# password: +# oracle: +# type: ${spring.datasource.type} +# driverClassName: oracle.jdbc.OracleDriver +# url: jdbc:oracle:thin:@//localhost:1521/XE +# username: ROOT +# password: root +# postgres: +# type: ${spring.datasource.type} +# driverClassName: org.postgresql.Driver +# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true +# username: root +# password: root +# sqlserver: +# type: ${spring.datasource.type} +# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver +# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true +# username: SA +# password: root + hikari: + # 最大连接池数量 + maxPoolSize: 20 + # 最小空闲线程数量 + minIdle: 10 + # 配置获取连接等待超时的时间 + connectionTimeout: 30000 + # 校验超时时间 + validationTimeout: 5000 + # 空闲连接存活最大时间,默认10分钟 + idleTimeout: 600000 + # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟 + maxLifetime: 1800000 + # 多久检查一次连接的活性 + keepaliveTime: 30000 + +--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉) +spring.data: + redis: + # 地址 + host: 47.120.79.150 + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 2 + # redis 密码必须配置 + password: xhYc_djkl382^#780! + # 连接超时时间 + timeout: 10s + # 是否开启ssl + ssl.enabled: false + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 4 + # Netty线程池数量 + nettyThreads: 8 + # 单节点配置 + singleServerConfig: + # 客户端名称 不能用中文 + clientName: fys-Vue-Plus + # 最小空闲连接数 + connectionMinimumIdleSize: 8 + # 连接池大小 + connectionPoolSize: 32 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 + +--- # mail 邮件发送 +mail: + enabled: false + host: smtp.163.com + port: 465 + # 是否需要用户名密码验证 + auth: true + # 发送方,遵循RFC-822标准 + from: xxx@163.com + # 用户名(注意:如果使用foxmail邮箱,此处user为qq号) + user: xxx@163.com + # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助) + pass: xxxxxxxxxx + # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 + starttlsEnable: true + # 使用SSL安全连接 + sslEnable: true + # SMTP超时时长,单位毫秒,缺省值不超时 + timeout: 0 + # Socket连接超时值,单位毫秒,缺省值不超时 + connectionTimeout: 0 + +--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 +# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用 +sms: + # 配置源类型用于标定配置来源(interface,yaml) + config-type: yaml + # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 + restricted: true + # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 + minute-max: 1 + # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 + account-max: 30 + # 以下配置来自于 com.fuyuanshen.sms4j.provider.config.BaseConfig类中 + blends: + # 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可 + # 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户 + config1: + # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: alibaba + # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 + access-key-id: 您的accessKey + # 称为accessSecret有些称之为apiSecret + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + config2: + # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: tencent + access-key-id: 您的accessKey + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + + +--- # 三方授权 +justauth: + # 前端外网访问地址 + address: http://localhost:80 + type: + maxkey: + # maxkey 服务器地址 + # 注意 如下均配置均不需要修改 maxkey 已经内置好了数据 + server-url: http://sso.maxkey.top + client-id: 876892492581044224 + client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8 + redirect-uri: ${justauth.address}/social-callback?source=maxkey + topiam: + # topiam 服务器地址 + server-url: http://127.0.0.1:1898/api/v1/authorize/y0q************spq***********8ol + client-id: 449c4*********937************759 + client-secret: ac7***********1e0************28d + redirect-uri: ${justauth.address}/social-callback?source=topiam + scopes: [openid, email, phone, profile] + qq: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=qq + union-id: false + weibo: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=weibo + gitee: + client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98 + client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac + redirect-uri: ${justauth.address}/social-callback?source=gitee + dingtalk: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=dingtalk + baidu: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=baidu + csdn: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=csdn + coding: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=coding + coding-group-name: xx + oschina: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=oschina + alipay_wallet: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet + alipay-public-key: MIIB**************DAQAB + wechat_open: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_open + wechat_mp: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_mp + wechat_enterprise: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise + agent-id: 1000002 + gitlab: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitlab + gitea: + # 前端改动 https://gitee.com/JavaLionLi/plus-ui/pulls/204 + # gitea 服务器地址 + server-url: https://demo.gitea.com + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitea + + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 + device: + pic: C:\eladmin\file\ #设备图片存储路径 + ip: http://fuyuanshen.com:81/ #服务器地址 + app_avatar: + pic: C:\eladmin\file\ #设备图片存储路径 + #ip: http://fuyuanshen.com:81/ #服务器地址 + ip: https://fuyuanshen.com/ #服务器地址 +# MQTT配置 +mqtt: + username: admin + password: fys123456 + url: tcp://47.107.152.87:1883 + subClientId: fys_subClient_01 + subTopic: worker/alert/#,worker/location/# + pubTopic: worker/location + pubClientId: fys_pubClient_01 \ No newline at end of file diff --git a/fys-common/fys-common-sms/src/main/java/com/fuyuanshen/common/sms/controller/TestSMSController.java b/fys-common/fys-common-sms/src/main/java/com/fuyuanshen/common/sms/controller/TestSMSController.java new file mode 100644 index 0000000..2b62da7 --- /dev/null +++ b/fys-common/fys-common-sms/src/main/java/com/fuyuanshen/common/sms/controller/TestSMSController.java @@ -0,0 +1,24 @@ +package com.fuyuanshen.common.sms.controller; + +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author: 默苍璃 + * @date: 2025-07-0714:02 + */ +@RestController +public class TestSMSController { + + @GetMapping("/test") + public void testSend() { + // 在创建完SmsBlend实例后,再未手动调用注销的情况下框架会持有该实例,可以直接通过指定configId来获取想要的配置,如果你想使用 + // 负载均衡形式获取实例,只要使用getSmsBlend的无参重载方法即可,如果你仅有一个配置,也可以使用该方法 + SmsBlend smsBlend = SmsFactory.getSmsBlend("alibaba"); + SmsResponse smsResponse = smsBlend.sendMessage("18656573389", "123"); + } + +} \ No newline at end of file diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java index ab6b839..c1cb78c 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/bo/UserAppBo.java @@ -38,7 +38,7 @@ public class UserAppBo extends BaseEntity { /** * 用户昵称 */ - @NotBlank(message = "用户昵称不能为空", groups = { AddGroup.class, EditGroup.class }) + // @NotBlank(message = "用户昵称不能为空", groups = { AddGroup.class, EditGroup.class }) private String nickName; /** From 08b1f73af18fbf585b06aa58ddb2c2231d226502 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Tue, 8 Jul 2025 11:09:14 +0800 Subject: [PATCH 8/8] =?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 --- .../common/web/config/ResourcesConfig.java | 1 + .../mapper/DeviceTypeGrantsMapper.java | 18 ++++++ .../service/impl/DeviceTypeServiceImpl.java | 64 ++++++++++++------- .../equipment/DeviceTypeGrantsMapper.xml | 19 ++++++ .../mapper/equipment/DeviceTypeMapper.xml | 16 ++--- 5 files changed, 87 insertions(+), 31 deletions(-) create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeGrantsMapper.java create mode 100644 fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeGrantsMapper.xml diff --git a/fys-common/fys-common-web/src/main/java/com/fuyuanshen/common/web/config/ResourcesConfig.java b/fys-common/fys-common-web/src/main/java/com/fuyuanshen/common/web/config/ResourcesConfig.java index 0a0ae28..628fa0f 100644 --- a/fys-common/fys-common-web/src/main/java/com/fuyuanshen/common/web/config/ResourcesConfig.java +++ b/fys-common/fys-common-web/src/main/java/com/fuyuanshen/common/web/config/ResourcesConfig.java @@ -58,4 +58,5 @@ public class ResourcesConfig implements WebMvcConfigurer { public GlobalExceptionHandler globalExceptionHandler() { return new GlobalExceptionHandler(); } + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeGrantsMapper.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeGrantsMapper.java new file mode 100644 index 0000000..543e3ef --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/mapper/DeviceTypeGrantsMapper.java @@ -0,0 +1,18 @@ +package com.fuyuanshen.equipment.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.fuyuanshen.equipment.domain.DeviceTypeGrants; +import org.apache.ibatis.annotations.Mapper; + +/** +* @author 97433 +* @description 针对表【device_type_grants】的数据库操作Mapper +* @createDate 2025-06-19 13:49:33 +* @Entity generator.domain.DeviceTypeGrants +*/ +@Mapper +public interface DeviceTypeGrantsMapper extends BaseMapper { + + +} 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 fa9e8f0..6244f07 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 @@ -11,10 +11,12 @@ 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; +import com.fuyuanshen.equipment.domain.DeviceTypeGrants; 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.DeviceTypeGrantsMapper; import com.fuyuanshen.equipment.mapper.DeviceTypeMapper; import com.fuyuanshen.equipment.service.DeviceTypeService; import lombok.RequiredArgsConstructor; @@ -22,6 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; @@ -37,6 +40,8 @@ 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.getOwnerCustomerId(), LoginHelper.getUserId())) { - invalidIds.add(id); - } - DeviceQueryCriteria deviceQueryCriteria = new DeviceQueryCriteria(); - deviceQueryCriteria.setDeviceType(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); + deviceTypeGrantsMapper.deleteByIds(ids); + // + // List invalidIds = new ArrayList<>(); + // List invalidId2 = new ArrayList<>(); + // for (Long id : ids) { + // DeviceType deviceType = deviceTypeMapper.selectById(id); + // if (deviceType == null || !Objects.equals(deviceType.getOwnerCustomerId(), LoginHelper.getUserId())) { + // invalidIds.add(id); + // } + // DeviceQueryCriteria deviceQueryCriteria = new DeviceQueryCriteria(); + // deviceQueryCriteria.setDeviceType(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/DeviceTypeGrantsMapper.xml b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeGrantsMapper.xml new file mode 100644 index 0000000..3f52045 --- /dev/null +++ b/fys-modules/fys-equipment/src/main/resources/mapper/equipment/DeviceTypeGrantsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + id,device_type_id,customer_id,grantor_customer_id,granted_at,assignment_id + + 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 a48b7be..56f47cc 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 @@ -2,7 +2,7 @@ - + @@ -19,29 +19,27 @@ , type_name, is_support_ble, locate_mode, network_way, create_by, update_by, create_time, update_time,communication_mode - \ No newline at end of file