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 521b3ae..884690a 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 @@ -92,7 +92,14 @@ public class AppAuthController { } - + /** + * 用户注销 + */ + @DeleteMapping("/cancelAccount") + public R cancelAccount() { + loginService.cancelAccount(); + return R.ok("用户注销成功"); + } /** * 退出登录 diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/domain/dto/DeviceInstructDto.java b/fys-admin/src/main/java/com/fuyuanshen/app/domain/dto/DeviceInstructDto.java index f176699..074bed3 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/domain/dto/DeviceInstructDto.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/domain/dto/DeviceInstructDto.java @@ -11,6 +11,6 @@ public class DeviceInstructDto { /** * 下发指令 */ - private Object instructValue; + private String instructValue; } diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceBizService.java b/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceBizService.java index c5acd24..024f63b 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceBizService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/service/AppDeviceBizService.java @@ -2,7 +2,6 @@ package com.fuyuanshen.app.service; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,7 +12,6 @@ import com.fuyuanshen.app.domain.dto.APPReNameDTO; import com.fuyuanshen.app.domain.dto.AppDeviceLogoUploadDto; import com.fuyuanshen.app.domain.dto.DeviceInstructDto; import com.fuyuanshen.app.domain.vo.APPDeviceTypeVo; -import com.fuyuanshen.app.domain.vo.AppDeviceBindRecordVo; import com.fuyuanshen.app.domain.vo.AppDeviceDetailVo; import com.fuyuanshen.app.domain.vo.AppPersonnelInfoVo; import com.fuyuanshen.app.mapper.AppDeviceBindRecordMapper; @@ -38,10 +36,6 @@ 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 static com.fuyuanshen.common.core.utils.Bitmap80x12Generator.*; -import static com.fuyuanshen.common.core.utils.ImageToCArrayConverter.convertHexToDecimal; - import com.fuyuanshen.equipment.utils.c.ReliableTextToBitmap; import com.fuyuanshen.global.mqtt.config.MqttGateway; import com.fuyuanshen.global.mqtt.constants.MqttConstants; @@ -53,6 +47,9 @@ import org.springframework.web.multipart.MultipartFile; import java.time.Duration; import java.util.*; +import static com.fuyuanshen.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY; +import static com.fuyuanshen.common.core.utils.ImageToCArrayConverter.convertHexToDecimal; + @Slf4j @Service @@ -66,7 +63,6 @@ public class AppDeviceBizService { private final MqttGateway mqttGateway; private final AppDeviceBindRecordMapper appDeviceBindRecordMapper; - public List getTypeList() { Long userId = AppLoginHelper.getUserId(); return appDeviceMapper.getTypeList(userId); @@ -83,23 +79,21 @@ public class AppDeviceBizService { public int sendMessage(AppDeviceSendMsgBo bo) { List deviceIds = bo.getDeviceIds(); - if (deviceIds == null || deviceIds.isEmpty()) { + if(deviceIds == null || deviceIds.isEmpty()){ throw new ServiceException("请选择设备"); } - for (Long deviceId : deviceIds) { + for (Long deviceId : deviceIds){ Device deviceObj = deviceMapper.selectById(deviceId); - if (deviceObj == null) { - throw new ServiceException("设备不存在" + deviceId); + if(deviceObj==null) { + throw new ServiceException("设备不存在"+deviceId); } byte[] msg = ReliableTextToBitmap.textToBitmapBytes(bo.getSendMsg()); - ArrayList intData = new ArrayList<>(); - intData.add(2); - buildArr(convertHexToDecimal(msg), intData); - Map map = new HashMap<>(); - map.put("instruct", intData); - mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), 1, JSON.toJSONString(map)); - log.info("发送设备消息:topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), bo.getSendMsg()); + Map linkHashMap = new HashMap<>(); + linkHashMap.put("message",msg); + String sendMsg = JSON.toJSONString(linkHashMap); + mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+deviceObj.getDeviceImei(), 1 ,sendMsg); + log.info("发送设备消息:{}", bo.getSendMsg()); UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", deviceId) @@ -136,27 +130,6 @@ public class AppDeviceBizService { if (device.getBindingStatus() != null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()) { throw new RuntimeException("设备已绑定"); } - - QueryWrapper bindRecordQueryWrapper = new QueryWrapper<>(); - bindRecordQueryWrapper.eq("device_id", device.getId()); - AppDeviceBindRecord appDeviceBindRecord = appDeviceBindRecordMapper.selectOne(bindRecordQueryWrapper); - if (appDeviceBindRecord != null) { - UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); - deviceUpdateWrapper.eq("device_id", device.getId()) - .set("binding_status", BindingStatusEnum.BOUND.getCode()) - .set("binding_user_id", userId) - .set("update_time", new Date()) - .set("binding_time", new Date()); - return appDeviceBindRecordMapper.update(null, deviceUpdateWrapper); - } else { - AppDeviceBindRecord bindRecord = new AppDeviceBindRecord(); - bindRecord.setDeviceId(device.getId()); - bindRecord.setBindingUserId(userId); - bindRecord.setBindingTime(new Date()); - bindRecord.setCreateBy(userId); - appDeviceBindRecordMapper.insert(bindRecord); - } - UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); deviceUpdateWrapper.eq("id", device.getId()) .set("binding_status", BindingStatusEnum.BOUND.getCode()) @@ -184,7 +157,7 @@ public class AppDeviceBizService { .set("binding_user_id", userId) .set("binding_time", new Date()); return appDeviceBindRecordMapper.update(null, deviceUpdateWrapper); - } else { + }else{ AppDeviceBindRecord bindRecord = new AppDeviceBindRecord(); bindRecord.setDeviceId(device.getId()); bindRecord.setBindingUserId(userId); @@ -217,8 +190,8 @@ public class AppDeviceBizService { } UpdateWrapper deviceUpdateWrapper = new UpdateWrapper<>(); deviceUpdateWrapper.eq("id", device.getId()) - .set("binding_user_id", null) .set("binding_status", BindingStatusEnum.UNBOUND.getCode()) + .set("binding_user_id", null) .set("binding_time", null); deviceMapper.update(null, deviceUpdateWrapper); @@ -278,70 +251,28 @@ public class AppDeviceBizService { return vo; } - public static void main(String[] args) { - byte[] unitName = generateFixedBitmapData("富源晟科技", 120); - byte[] position = generateFixedBitmapData("研发", 120); - byte[] name = generateFixedBitmapData("张三", 120); - byte[] id = generateFixedBitmapData("123456", 120); -// int[] intUnitNames = Bitmap80x12Generator.convertHexToDecimal(unitName); -// int[] intPosition = Bitmap80x12Generator.convertHexToDecimal(position); -// int[] intNames = Bitmap80x12Generator.convertHexToDecimal(position); -// int[] intIds = Bitmap80x12Generator.convertHexToDecimal(position); -// Map map = new HashMap<>(); -// map.put("instruct", 2); -// System.out.println(JSON.toJSONString( map)); -// StringBuilder sb = new StringBuilder(); -// sb.append("[") -// buildStr(unitName, sb); -// System.out.println(sb.toString()); -// Object[] arr = new Object[]{2, Bitmap80x12Generator , Arrays.toString(name), Arrays.toString(id)}; - -// System.out.println(Arrays.deepToString(arr)); -// int[] a = new int[]{6,6,6,6,6,6}; - ArrayList intData = new ArrayList<>(); - intData.add(2); - buildArr(convertHexToDecimal(unitName), intData); - buildArr(convertHexToDecimal(position), intData); - buildArr(convertHexToDecimal(name), intData); - buildArr(convertHexToDecimal(id), intData); - intData.add(0); - intData.add(0); - intData.add(0); - intData.add(0); - Map map = new HashMap<>(); - map.put("instruct", intData); - System.out.println(JSON.toJSONString(map)); - } - - public boolean registerPersonInfo(AppPersonnelInfoBo bo) { Long deviceId = bo.getDeviceId(); Device deviceObj = deviceMapper.selectById(deviceId); - if (deviceObj == null) { + if(deviceObj == null){ throw new RuntimeException("请先将设备入库!!!"); } QueryWrapper qw = new QueryWrapper() .eq("device_id", deviceId); List appPersonnelInfoVos = appPersonnelInfoMapper.selectVoList(qw); // unitName,position,name,id - byte[] unitName = generateFixedBitmapData(bo.getUnitName(), 120); - byte[] position = generateFixedBitmapData(bo.getPosition(), 120); - byte[] name = generateFixedBitmapData(bo.getName(), 120); - byte[] id = generateFixedBitmapData(bo.getCode(), 120); - ArrayList intData = new ArrayList<>(); - intData.add(2); - buildArr(convertHexToDecimal(unitName), intData); - buildArr(convertHexToDecimal(position), intData); - buildArr(convertHexToDecimal(name), intData); - buildArr(convertHexToDecimal(id), intData); - intData.add(0); - intData.add(0); - intData.add(0); - intData.add(0); - Map map = new HashMap<>(); - map.put("instruct", intData); - mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), 1, JSON.toJSONString(map)); - log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), bo); + byte[] unitName = ReliableTextToBitmap.textToBitmapBytes(bo.getUnitName()); + byte[] position = ReliableTextToBitmap.textToBitmapBytes(bo.getPosition()); + byte[] name = ReliableTextToBitmap.textToBitmapBytes(bo.getName()); + byte[] id = ReliableTextToBitmap.textToBitmapBytes(bo.getCode()); + Map linkHashMap = new HashMap<>(); + linkHashMap.put("unitName",unitName); + linkHashMap.put("position",position); + linkHashMap.put("name",name); + linkHashMap.put("id",id); + String personnelInfo = JSON.toJSONString(linkHashMap); + mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+deviceObj.getDeviceImei(), 1 ,personnelInfo); + log.info("发送点阵数据到设备消息:{}", bo); if (ObjectUtils.length(appPersonnelInfoVos) == 0) { AppPersonnelInfo appPersonnelInfo = MapstructUtils.convert(bo, AppPersonnelInfo.class); @@ -373,9 +304,9 @@ public class AppDeviceBizService { System.out.println("原始数据大小: " + largeData.length + " 字节"); int[] ints = convertHexToDecimal(largeData); - RedisUtils.setCacheObject("app_logo_data:" + device.getDeviceImei(), Arrays.toString(ints), Duration.ofSeconds(30 * 60L)); + RedisUtils.setCacheObject(GLOBAL_REDIS_KEY+"app_logo_data:" + device.getDeviceImei(), Arrays.toString(ints), Duration.ofSeconds(30 * 60L)); - String data = RedisUtils.getCacheObject("app_logo_data:" + device.getDeviceImei()); + String data = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+"app_logo_data:" + device.getDeviceImei()); byte[] arr = ImageToCArrayConverter.convertStringToByteArray(data); byte[] specificChunk = ImageToCArrayConverter.getChunk(arr, 0, 512); @@ -410,7 +341,7 @@ public class AppDeviceBizService { if(device == null){ throw new ServiceException("设备不存在"); } - Integer instructValue = (Integer) params.getInstructValue(); + Integer instructValue = Integer.parseInt(params.getInstructValue()); ArrayList intData = new ArrayList<>(); intData.add(1); intData.add(instructValue); @@ -434,7 +365,7 @@ public class AppDeviceBizService { if(device == null){ throw new ServiceException("设备不存在"); } - String instructValue = (String)params.getInstructValue(); + String instructValue = params.getInstructValue(); ArrayList intData = new ArrayList<>(); intData.add(5); String[] values = instructValue.split("\\."); @@ -466,7 +397,7 @@ public class AppDeviceBizService { if(device == null){ throw new ServiceException("设备不存在"); } - Integer instructValue = (Integer) params.getInstructValue(); + Integer instructValue = Integer.parseInt(params.getInstructValue()); ArrayList intData = new ArrayList<>(); intData.add(4); intData.add(instructValue); @@ -493,4 +424,5 @@ public class AppDeviceBizService { } return RedisUtils.getCacheObject("device:location:" + devices.get(0).getDeviceImei()); } + } diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppLoginService.java b/fys-admin/src/main/java/com/fuyuanshen/app/service/AppLoginService.java index a9aa566..23b8d5b 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/service/AppLoginService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/service/AppLoginService.java @@ -28,10 +28,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.Duration; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import java.util.function.Supplier; /** @@ -51,7 +48,7 @@ public class AppLoginService { private Integer lockTime; private final ISysTenantService tenantService; - private final IAppRoleService roleService; + private final IAppUserService appUserService; /** @@ -184,5 +181,24 @@ public class AppLoginService { throw new TenantException("tenant.expired"); } } - + public void cancelAccount() { + try { + AppLoginUser loginUser = AppLoginHelper.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + return; + } + appUserService.deleteWithValidByIds(Collections.singletonList(loginUser.getUserId()),true); + if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { + // 超级管理员 登出清除动态租户 + TenantHelper.clearDynamic(); + } + recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, "用户注销成功"); + } catch (NotLoginException ignored) { + } finally { + try { + StpUtil.logout(); + } catch (NotLoginException ignored) { + } + } + } } diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/service/AppRegisterService.java b/fys-admin/src/main/java/com/fuyuanshen/web/service/AppRegisterService.java index 0270844..9b61425 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/service/AppRegisterService.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/service/AppRegisterService.java @@ -7,6 +7,7 @@ import com.fuyuanshen.app.mapper.AppUserMapper; import com.fuyuanshen.common.core.constant.Constants; import com.fuyuanshen.common.core.constant.GlobalConstants; import com.fuyuanshen.common.core.domain.model.AppSmsRegisterBody; +import com.fuyuanshen.common.core.enums.UserType; import com.fuyuanshen.common.core.exception.BadRequestException; import com.fuyuanshen.common.core.exception.user.CaptchaException; import com.fuyuanshen.common.core.exception.user.CaptchaExpireException; @@ -47,6 +48,7 @@ public class AppRegisterService { String phoneNumber = registerBody.getPhoneNumber(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AppUser::getPhonenumber, phoneNumber); + wrapper.eq(AppUser::getUserType, UserType.APP_USER.getUserType()); AppUserVo appUserVo = appUserMapper.selectVoOne(wrapper); if (appUserVo != null) { throw new BadRequestException("该手机号已被注册"); @@ -67,7 +69,7 @@ public class AppRegisterService { appUser.setNickName(username); appUser.setPhonenumber(phoneNumber); appUser.setPassword(password); - appUser.setUserType("app_user"); + appUser.setUserType(UserType.APP_USER.getUserType()); appUser.setTenantId(tenantId); appUser.setLoginIp(ServletUtils.getClientIP()); appUser.setStatus("0"); diff --git a/fys-admin/src/main/resources/application-prod.yml b/fys-admin/src/main/resources/application-prod.yml index 1533e58..03a3b83 100644 --- a/fys-admin/src/main/resources/application-prod.yml +++ b/fys-admin/src/main/resources/application-prod.yml @@ -177,11 +177,14 @@ 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: 湖北星汉研创科技 config2: # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 supplier: tencent @@ -277,11 +280,11 @@ justauth: # MQTT配置 mqtt: username: admin - password: #YtvpSfCNG - url: tcp://47.120.79.150:2883 + password: fys123456 + url: tcp://47.107.152.87:1883 subClientId: fys_subClient - subTopic: worker/alert/#,worker/location/# - pubTopic: worker/location + subTopic: A/#,worker/location/# + pubTopic: B/# pubClientId: fys_pubClient diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/domain/AppDeviceBindRecord.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/domain/AppDeviceBindRecord.java index d601921..40698ce 100644 --- a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/domain/AppDeviceBindRecord.java +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/domain/AppDeviceBindRecord.java @@ -1,14 +1,13 @@ package com.fuyuanshen.app.domain; -import com.baomidou.mybatisplus.annotation.*; -import com.fuyuanshen.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.fuyuanshen.common.tenant.core.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serial; +import java.util.Date; /** * 设备绑定关系对象 app_device_bind_record