From cabc747f2c403e922951c0f68506e2a4fb7f9339 Mon Sep 17 00:00:00 2001 From: zhangyu Date: Mon, 22 Sep 2025 10:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zxwl/web/controller/AuthController.java | 75 +++--------- .../src/main/resources/application-prod.yml | 14 ++- .../common/core/constant/DefaultConstant.java | 6 - .../common/core/constant/SystemConstants.java | 15 +++ .../common/core/domain/model/LoginUser.java | 5 + .../core/exception/SystemErrorCode.java | 13 +-- .../zxwl/common/core/utils/MapstructUtil.java | 93 +++++++++++++++ .../org/zxwl/common/log/aspect/LogAspect.java | 12 +- .../org/zxwl/common/log/enums/ModuleType.java | 39 +++++-- .../zxwl/common/log/enums/OperateType.java | 7 +- .../mqtt/handler/MqttMessageReceiver.java | 8 +- .../org/zxwl/common/oss/utils/MinioUtil.java | 4 +- .../java/org/zxwl/common/utils/RedisUtil.java | 96 ++++++++++----- .../common/satoken/utils/LoginHelper.java | 45 ++++---- .../zxwl/sweeper/config/ScheduleConfig.java | 1 + .../sweeper/constant/KafkaTopicConst.java | 16 +++ .../zxwl/sweeper/constant/MqttTopicConst.java | 32 +---- .../zxwl/sweeper/constant/RedisKeyConst.java | 15 ++- .../zxwl/sweeper/constant/TopicNameConst.java | 24 ---- .../controller/CockpitInfoController.java | 26 +++-- .../controller/DispatchRecordController.java | 11 +- .../sweeper/controller/DpHomeController.java | 16 +++ .../controller/ElectricFenceController.java | 14 ++- .../controller/FaultRepairController.java | 93 +++++++++++++++ .../controller/GatewayInfoController.java | 27 ++--- .../sweeper/controller/RemoteController.java | 37 ------ .../controller/RemoteTakeOverController.java | 8 +- .../controller/RouteInfoController.java | 17 +++ .../controller/SafetyOfficerController.java | 9 ++ .../controller/TaskInfoController.java | 15 ++- .../controller/TaskRecordController.java | 5 + .../controller/VehicleCardController.java | 7 +- .../controller/VehicleCtrlController.java | 7 +- .../controller/VehicleFaultController.java | 5 + .../controller/VehicleGridController.java | 34 ------ .../controller/VehicleInfoController.java | 32 ++--- .../org/zxwl/sweeper/entity/FaultRepair.java | 96 +++++++++++++++ .../zxwl/sweeper/enums/RepairStatusEnum.java | 19 +++ .../zxwl/sweeper/enums/TaskStatusEnum.java | 3 +- .../listener/CockpitKafkaConsumer.java | 5 +- .../sweeper/listener/TaskKafkaConsumer.java | 14 ++- .../listener/VehicleKafkaConsumer.java | 47 ++++++-- .../sweeper/mapper/FaultRepairMapper.java | 29 +++++ .../zxwl/sweeper/mapper/TaskRecordMapper.java | 8 +- .../sweeper/mapper/VehicleGridMapper.java | 20 ---- .../zxwl/sweeper/model/VehicleInfoAPPVO.java | 14 ++- .../model/cockpitInfo/CockpitInfoVO.java | 11 +- .../cockpitInfo/CockpitStatisticsVO.java | 12 ++ .../cockpitInfo/dp/CockpitStatusInfoVO.java | 4 +- .../electricFence/ElectricFenceQuery.java | 3 +- .../faultRepair/FaultRepairAllocateDTO.java | 31 +++++ .../model/faultRepair/FaultRepairDTO.java | 67 +++++++++++ .../model/faultRepair/FaultRepairDataVo.java | 27 +++++ .../model/faultRepair/FaultRepairQuery.java | 26 +++++ .../model/faultRepair/FaultRepairStatus.java | 28 +++++ .../model/faultRepair/FaultRepairVo.java | 109 ++++++++++++++++++ .../safetyOfficer/SafetyOfficerQuery.java | 2 +- .../sweeper/model/taskInfo/TaskInfoVO.java | 8 ++ .../model/taskRecord/TaskStatisticsVo.java | 15 +++ .../model/taskRecord/TaskStatusDataVo.java | 11 ++ .../model/vehicleGrid/VehicleGridInfoVO.java | 12 -- .../model/vehicleInfo/VehicleInfoVO.java | 4 +- .../vehicleInfo/VehicleStatisticsVo.java | 13 +++ .../vehicleInfo/app/VehicleSimpleInfoVO.java | 14 ++- .../vehicleInfo/dp/VehicleStatusInfoVO.java | 12 +- .../sweeper/service/CockpitInfoService.java | 16 ++- .../sweeper/service/CtrlCommandService.java | 8 -- .../service/DispatchRecordService.java | 8 +- .../zxwl/sweeper/service/DpHomeService.java | 2 + .../sweeper/service/ElectricFenceService.java | 5 +- .../sweeper/service/FaultRepairService.java | 28 +++++ .../sweeper/service/GatewayInfoService.java | 6 +- .../sweeper/service/RouteInfoService.java | 10 +- .../sweeper/service/SafetyOfficerService.java | 5 +- .../zxwl/sweeper/service/TaskInfoService.java | 6 +- .../sweeper/service/TaskRecordService.java | 11 +- .../sweeper/service/VehicleCardService.java | 5 +- .../sweeper/service/VehicleFaultService.java | 4 +- .../sweeper/service/VehicleGridService.java | 21 ---- .../sweeper/service/VehicleInfoService.java | 14 ++- .../service/impl/CockpitInfoServiceImpl.java | 76 +++++++----- .../service/impl/CtrlCommandServiceImpl.java | 28 ----- .../impl/DispatchRecordServiceImpl.java | 21 ++-- .../service/impl/FaultRepairServiceImpl.java | 71 ++++++++++++ .../service/impl/RouteInfoServiceImpl.java | 44 ++++--- .../impl/SafetyOfficerServiceImpl.java | 3 - .../service/impl/TaskInfoServiceImpl.java | 28 ++--- .../service/impl/TaskRecordServiceImpl.java | 46 +++++++- .../service/impl/VehicleCardServiceImpl.java | 3 +- .../service/impl/VehicleCtrlServiceImpl.java | 18 +-- .../service/impl/VehicleFaultServiceImpl.java | 9 +- .../service/impl/VehicleGridServiceImpl.java | 59 ---------- .../service/impl/VehicleInfoServiceImpl.java | 77 +++++++++++-- .../zxwl/sweeper/ws/CloudCtrlWebSocket.java | 67 +++++++++++ .../resources/mapper/FaultRepairMapper.xml | 41 +++++++ .../resources/mapper/TaskRecordMapper.xml | 9 ++ .../resources/mapper/VehicleGridMapper.xml | 21 ---- zxwl-modules/zxwl-system/pom.xml | 5 + .../controller/CompanyInfoController.java | 15 ++- .../controller/ConfigInfoController.java | 63 ++++++++++ .../system/controller/DictItemController.java | 5 +- .../system/controller/DictTypeController.java | 26 +++-- .../system/controller/MenuInfoController.java | 12 +- .../controller/OrganizeInfoController.java | 11 +- .../zxwl/system/controller/OssController.java | 93 +++++++++++++++ .../system/controller/RoleInfoController.java | 27 +++-- .../system/controller/RoleMenuController.java | 4 + .../controller/SystemLogController.java | 15 ++- .../system/controller/UserInfoController.java | 37 +++--- .../org/zxwl/system/entity/ConfigInfo.java} | 32 ++--- .../java/org/zxwl/system/entity/DictItem.java | 4 + .../java/org/zxwl/system/entity/OssInfo.java | 83 +++++++++++++ .../org/zxwl/system/mapper/ConfigMapper.java | 17 +++ .../org/zxwl/system/mapper/OssMapper.java | 17 +++ .../zxwl/system/mapper/SystemLogMapper.java | 13 +++ .../system/model/config/ConfigInfoDTO.java | 44 +++++++ .../system/model/config/ConfigInfoQuery.java | 12 ++ .../system/model/config/ConfigInfoVO.java | 37 ++++++ .../system/model/dictItem/DictItemDTO.java | 2 + .../system/model/dictType/DictTypeQuery.java | 3 +- .../zxwl/system/model/menu/MenuInfoDTO.java | 5 + .../org/zxwl/system/model/oss/OssInfoDTO.java | 55 +++++++++ .../zxwl/system/model/oss/OssInfoQuery.java | 12 ++ .../org/zxwl/system/model/oss/OssInfoVO.java | 52 +++++++++ .../model/systemLog/SystemLogQuery.java | 11 ++ .../system/model/systemLog/SystemLogVO.java | 43 +++++-- .../system/model/userInfo/UserInfoQuery.java | 1 + .../system/model/userInfo/UserInfoVO.java | 11 ++ .../zxwl/system/model/userInfo/UserLogin.java | 6 + .../model/userInfo/VehicleUserLogin.java | 13 --- .../system/service/CompanyInfoService.java | 4 +- .../zxwl/system/service/ConfigService.java | 25 ++++ .../zxwl/system/service/DictItemService.java | 10 +- .../zxwl/system/service/DictTypeService.java | 8 +- .../zxwl/system/service/MenuInfoService.java | 8 +- .../system/service/OrganizeInfoService.java | 5 +- .../org/zxwl/system/service/OssService.java | 20 ++++ .../zxwl/system/service/RoleInfoService.java | 7 +- .../zxwl/system/service/SystemLogService.java | 6 +- .../zxwl/system/service/UploadService.java | 4 + .../zxwl/system/service/UserInfoService.java | 7 +- .../service/impl/CompanyInfoServiceImpl.java | 2 +- .../service/impl/ConfigServiceImpl.java | 61 ++++++++++ .../service/impl/DictItemServiceImpl.java | 16 ++- .../service/impl/DictTypeServiceImpl.java | 9 +- .../system/service/impl/OssServiceImpl.java | 36 ++++++ .../service/impl/PermissionServiceImpl.java | 20 +++- .../service/impl/RoleInfoServiceImpl.java | 2 +- .../service/impl/RoleMenuServiceImpl.java | 4 - .../service/impl/SystemLogServiceImpl.java | 8 ++ .../service/impl/UploadServiceImpl.java | 6 + .../service/impl/UserInfoServiceImpl.java | 10 +- .../main/resources/mapper/ConfigMapper.xml | 5 + .../src/main/resources/mapper/OssMapper.xml | 5 + .../main/resources/mapper/SystemLogMapper.xml | 21 ++++ 155 files changed, 2617 insertions(+), 795 deletions(-) delete mode 100644 zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/DefaultConstant.java create mode 100644 zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/SystemConstants.java create mode 100644 zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/utils/MapstructUtil.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/TopicNameConst.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/FaultRepairController.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteController.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleGridController.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/FaultRepair.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/RepairStatusEnum.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/FaultRepairMapper.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/VehicleGridMapper.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitStatisticsVO.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairAllocateDTO.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDTO.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDataVo.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairQuery.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairStatus.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairVo.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatisticsVo.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatusDataVo.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleGrid/VehicleGridInfoVO.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleStatisticsVo.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CtrlCommandService.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/FaultRepairService.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleGridService.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CtrlCommandServiceImpl.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/FaultRepairServiceImpl.java delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleGridServiceImpl.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/ws/CloudCtrlWebSocket.java create mode 100644 zxwl-modules/zxwl-sweeper/src/main/resources/mapper/FaultRepairMapper.xml delete mode 100644 zxwl-modules/zxwl-sweeper/src/main/resources/mapper/VehicleGridMapper.xml create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/ConfigInfoController.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OssController.java rename zxwl-modules/{zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/VehicleGrid.java => zxwl-system/src/main/java/org/zxwl/system/entity/ConfigInfo.java} (66%) create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/OssInfo.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/ConfigMapper.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/OssMapper.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoDTO.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoQuery.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoVO.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoDTO.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoQuery.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoVO.java delete mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/VehicleUserLogin.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/ConfigService.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OssService.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/ConfigServiceImpl.java create mode 100644 zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/OssServiceImpl.java create mode 100644 zxwl-modules/zxwl-system/src/main/resources/mapper/ConfigMapper.xml create mode 100644 zxwl-modules/zxwl-system/src/main/resources/mapper/OssMapper.xml diff --git a/zxwl-admin/src/main/java/org/zxwl/web/controller/AuthController.java b/zxwl-admin/src/main/java/org/zxwl/web/controller/AuthController.java index 9b85e98..b425318 100644 --- a/zxwl-admin/src/main/java/org/zxwl/web/controller/AuthController.java +++ b/zxwl-admin/src/main/java/org/zxwl/web/controller/AuthController.java @@ -4,17 +4,17 @@ import cn.dev33.satoken.stp.StpUtil; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.LineCaptcha; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.domain.model.LoginUser; -import org.zxwl.common.core.exception.BusinessException; -import org.zxwl.common.core.exception.SystemErrorCode; +import org.zxwl.common.core.service.PermissionService; import org.zxwl.common.log.annotation.Log; import org.zxwl.common.log.enums.ModuleType; import org.zxwl.common.log.enums.OperateType; @@ -38,55 +38,17 @@ public class AuthController { private final HttpSession session; private final UserInfoService userInfoService; private final RoleInfoService roleInfoService; + private final PermissionService permissionService; @PostMapping("/login") - @Log(module = ModuleType.USER, operateType = OperateType.LOGIN, operateExplain = "登录认证模块") - public Result login(@RequestBody UserLogin userLogin) { + @Log(module = ModuleType.SYSTEM, operateType = OperateType.LOGIN, operateExplain = "登录认证") + public Result login(@RequestBody @Validated UserLogin userLogin) { UserInfo userInfo = userInfoService.login(userLogin); - if (userInfo != null) { - if (CharSequenceUtil.isEmpty(userLogin.getDevice())) { - return Result.failure("登录失败"); - } - RoleInfo roleInfo = roleInfoService.getById(userInfo.getRoleId()); - if (userLogin.getDevice().equalsIgnoreCase("pc")) { - if (!roleInfo.getRoleKey().equals("system")) { - return Result.failure("登录失败"); - } - } - StpUtil.login(userInfo.getId()); - - LoginUser loginUser = BeanUtil.copyProperties(userInfo, LoginUser.class); - StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); - log.info("token值:{}", StpUtil.getTokenValue()); - return Result.success("登录成功", StpUtil.getTokenValue()); - } - return Result.failure("登录失败"); - } - - //车端应用登录 - @PostMapping("/vehicle/login") - public Result vehicleLogin(@RequestBody UserLogin userLogin) { - UserInfo userInfo = userInfoService.login(userLogin); - if (userInfo != null) { - if (CharSequenceUtil.isEmpty(userLogin.getDevice())) { - return Result.failure("登录失败"); - } - RoleInfo roleInfo = roleInfoService.getById(userInfo.getRoleId()); - - if (userLogin.getDevice().equalsIgnoreCase("pc")) { - if (!roleInfo.getRoleKey().equals("system")) { - return Result.failure("登录失败"); - } - } - StpUtil.login(userInfo.getId()); - - LoginUser loginUser = BeanUtil.copyProperties(userInfo, LoginUser.class); - StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); - log.info("token值:{}", StpUtil.getTokenValue()); - return Result.success("登录成功", StpUtil.getTokenValue()); - } - return Result.failure("登录失败"); + StpUtil.login(userInfo.getId(), userLogin.getDevice()); + LoginUser loginUser = BeanUtil.copyProperties(userInfo, LoginUser.class); + StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); + return Result.success("登录成功", StpUtil.getTokenValue()); } @RequestMapping("/getCaptcha") @@ -104,30 +66,27 @@ public class AuthController { System.out.println("session 里的验证码:" + sessionCode); String receivedCode = code.toLowerCase(); System.out.println("用户的验证码:" + receivedCode); - return !"".equals(sessionCode) && !"".equals(receivedCode) && sessionCode.equals(receivedCode) ? + return StrUtil.isBlank(sessionCode) && StrUtil.isBlank(receivedCode) && sessionCode.equals(receivedCode) ? Result.success() : Result.failure(7777, "验证码错误"); } @GetMapping("/user") public Result getUser() { - Object loginId = StpUtil.getLoginId(); - if (loginId == null) { - throw new BusinessException(SystemErrorCode.USER_NOT_LOGIN); - } - LoginUser loginUser = (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY); - System.out.println("o = " + loginUser.getUserName()); + Long userId = (Long) StpUtil.getLoginId(); - UserInfo userInfo = userInfoService.getById((String) loginId); + UserInfo userInfo = userInfoService.getById(userId); RoleInfo roleInfo = roleInfoService.getById(userInfo.getRoleId()); + UserInfoVO userInfoVO = new UserInfoVO(userInfo); userInfoVO.setRoleName(roleInfo.getRoleName()); + userInfoVO.setMenuPermission(permissionService.getMenuPermission(userId)); + userInfoVO.setRolePermission(permissionService.getRolePermission(userId)); return Result.success(userInfoVO); } @PostMapping("/logout") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.LOGOUT, operateExplain = "登出账号") public Result logout() { - log.info("[/sso/logout]"); - // System.out.println("StpUtil.getLoginId() = " + StpUtil.getLoginId()); // 如果未登录,则无需注销 if (!StpUtil.isLogin()) { return Result.success(); diff --git a/zxwl-admin/src/main/resources/application-prod.yml b/zxwl-admin/src/main/resources/application-prod.yml index 937af77..51858bc 100644 --- a/zxwl-admin/src/main/resources/application-prod.yml +++ b/zxwl-admin/src/main/resources/application-prod.yml @@ -100,12 +100,14 @@ spring: timeout: 30 # 超时时间 keepalive: 60 # 保持连接 clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) - topics: - - /zxwl/vehicle/+/info - - /zxwl/vehicle/+/gps - - /zxwl/vehicle/+/fault - - /zxwl/vehicle/+/task - - /zxwl/cockpit/+/heartbeat + topics: # 订阅主题 + - /zxwl/vehicle/+/info # 清扫车信息上报 + - /zxwl/vehicle/+/gps # 定位信息上报 + - /zxwl/vehicle/+/fault # 故障信息上报 + - /zxwl/vehicle/+/task # 清扫任务推送、任务停止 + - /zxwl/vehicle/+/task/status # 清扫任务状态上报 + - /zxwl/vehicle/+/ctrl # 驾驶舱远程控制、路径采集 + - /zxwl/cockpit/+/heartbeat # 网关心跳 --- # redis配置 spring: diff --git a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/DefaultConstant.java b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/DefaultConstant.java deleted file mode 100644 index 1f825d0..0000000 --- a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/DefaultConstant.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zxwl.common.core.constant; -public class DefaultConstant { - - public static final String NULL = "null"; - public static final String EMPTY = ""; -} diff --git a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/SystemConstants.java b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/SystemConstants.java new file mode 100644 index 0000000..054827d --- /dev/null +++ b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/constant/SystemConstants.java @@ -0,0 +1,15 @@ +package org.zxwl.common.core.constant; + +public interface SystemConstants { + + /** + * 管理员角色 roleKey + */ + String ADMIN_ROLE_KEY = "admin"; + + /** + * 超级管理员ID + */ + Long SUPER_ADMIN_ID = 1L; + +} diff --git a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/domain/model/LoginUser.java b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/domain/model/LoginUser.java index 4619818..f58a224 100644 --- a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/domain/model/LoginUser.java +++ b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/domain/model/LoginUser.java @@ -26,6 +26,11 @@ public class LoginUser { */ private String avatar; + /** + * 用户类型(是否系统用户) 0-否 1-是 + */ + private Integer userType; + /** * 用户性别 0 未知 1 男 2 女 */ diff --git a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/exception/SystemErrorCode.java b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/exception/SystemErrorCode.java index 8bc8547..75fd9c1 100644 --- a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/exception/SystemErrorCode.java +++ b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/exception/SystemErrorCode.java @@ -57,11 +57,6 @@ public enum SystemErrorCode { DELETE_FAILURE_EXIST_BINDING_GATEWAY(11018, "操作失败,车辆存在绑定的网关"), DELETE_FAILURE_EXIST_UNDO_RECORD(11019, "操作失败,存在未完成的调度记录"), - CLASSROOM_NUMBER_EXIST(12001, "该教室编号已被使用"), - DELETE_DAILY_INVALID(12002, "存在被绑定的作息,无法删除"), - DAILY_OCCUPY(12003, "作息时间存在冲突"), - CLASS_INFO_EXIST(12004, "班级已存在"), - FILE_CHECK_ERROR(20000, "文件校验异常"), FILE_NOT_EXIST(20001, "文件不存在"), FILE_EXTENSION_INVALID(20002, "非法的文件扩展名"), @@ -74,7 +69,6 @@ public enum SystemErrorCode { VEHICLE_DISPATCH_DUPLICATE(30002, "存在重复的调度记录"), VEHICLE_DISPATCH_STARTING(30003, "当前驾驶舱正在执行任务,请先结束当前任务"), - FTP_CLIENT_ERROR(15000, "ftp客户端异常"), FTP_FILE_WRITE_ERROR(15001, "ftp文件写入异常"), FTP_FILE_NOT_FOUND(15002, "当前文件不存在"), @@ -83,14 +77,15 @@ public enum SystemErrorCode { VEHICLE_OFFLINE(15005, "当前车辆不在线"), CAMERA_URL_NOT_FOUND(15006, "未配置摄像头地址"), - VEHICLE_NOT_FOUND(16000, "车辆不存在"), - PICKUP_CODE_NOT_FOUND(16001, "取货码无效或已过期"), - TASK_NOT_EXIST(50001, "任务不存在"), TASK_EXECUTING(50002, "存在进行中的任务"), TASK_NAME_EXIST(50003, "任务名称已存在"), VEHICLE_NOT_EXIST(50013, "车辆不存在"), + VEHICLE_STATUS_EXIST(50014, "车辆存在启用状态"), + ROUTE_STATUS_EXIST(50015, "路径信息存在已启用状态"), + ROUTE_TASK_EXIST(50016, "该路径所属的任务正在进行中"), + COCKPIT_STATUS_EXIST(50017, "驾驶舱存在已启用状态"), ; private final int code; diff --git a/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/utils/MapstructUtil.java b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/utils/MapstructUtil.java new file mode 100644 index 0000000..784d532 --- /dev/null +++ b/zxwl-common/zxwl-common-core/src/main/java/org/zxwl/common/core/utils/MapstructUtil.java @@ -0,0 +1,93 @@ +package org.zxwl.common.core.utils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; +import io.github.linpeilie.Converter; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * Mapstruct 工具类 + *

参考文档:mapstruct-plus

+ * + * + * @author Michelle.Chung + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class MapstructUtil { + + private final static Converter CONVERTER = SpringUtil.getBean(Converter.class); + + /** + * 将 T 类型对象,转换为 desc 类型的对象并返回 + * + * @param source 数据来源实体 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static V convert(T source, Class desc) { + if (ObjectUtil.isNull(source)) { + return null; + } + if (ObjectUtil.isNull(desc)) { + return null; + } + return CONVERTER.convert(source, desc); + } + + /** + * 将 T 类型对象,按照配置的映射字段规则,给 desc 类型的对象赋值并返回 desc 对象 + * + * @param source 数据来源实体 + * @param desc 转换后的对象 + * @return desc + */ + public static V convert(T source, V desc) { + if (ObjectUtil.isNull(source)) { + return null; + } + if (ObjectUtil.isNull(desc)) { + return null; + } + return CONVERTER.convert(source, desc); + } + + /** + * 将 T 类型的集合,转换为 desc 类型的集合并返回 + * + * @param sourceList 数据来源实体列表 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static List convert(List sourceList, Class desc) { + if (ObjectUtil.isNull(sourceList)) { + return null; + } + if (CollUtil.isEmpty(sourceList)) { + return CollUtil.newArrayList(); + } + return CONVERTER.convert(sourceList, desc); + } + + /** + * 将 Map 转换为 beanClass 类型的集合并返回 + * + * @param map 数据来源 + * @param beanClass bean类 + * @return bean对象 + */ + public static T convert(Map map, Class beanClass) { + if (MapUtil.isEmpty(map)) { + return null; + } + if (ObjectUtil.isNull(beanClass)) { + return null; + } + return CONVERTER.convert(map, beanClass); + } + +} diff --git a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/aspect/LogAspect.java b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/aspect/LogAspect.java index 06d5188..8af4dca 100644 --- a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/aspect/LogAspect.java +++ b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/aspect/LogAspect.java @@ -15,7 +15,6 @@ import org.zxwl.common.core.utils.IpUtils; import org.zxwl.common.core.utils.SpringUtil; import org.zxwl.common.log.annotation.Log; import org.zxwl.common.log.event.OperLogEvent; -import org.zxwl.common.satoken.utils.LoginHelper; import java.lang.reflect.Method; import java.time.LocalDateTime; @@ -85,18 +84,19 @@ public class LogAspect { systemLog.setOperateExplain(log.operateExplain()); } } - + String ipAddr = IpUtils.getIpAddr(request); String className = joinPoint.getTarget().getClass().getName(); String methodName = method.getName(); - systemLog.setClassMethod(className + "." + methodName + "()"); + systemLog.setClassMethod(className + "." + methodName + "()"); systemLog.setRequestUrl(request.getRequestURL().toString()); - String ipAddr = IpUtils.getIpAddr(request); - systemLog.setOperator(LoginHelper.getRealName()); + // TODO 暂时测试 + //systemLog.setOperator(LoginHelper.getRealName()); + systemLog.setOperator("admin"); + systemLog.setRemoteAddress(ipAddr); systemLog.setCreated(LocalDateTime.now()); - // 发布事件保存数据库 SpringUtil.context().publishEvent(systemLog); } diff --git a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/ModuleType.java b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/ModuleType.java index a9f4e57..64fb89f 100644 --- a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/ModuleType.java +++ b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/ModuleType.java @@ -7,23 +7,44 @@ public enum ModuleType { */ OTHER, - /** - * 控制模块 - */ - CONTROL, - /** * 系统模块 */ SYSTEM, /** - * 用户模块 + * 清洁车模块 */ - USER, + VEHICLE, /** - * 角色模块 + * 驾驶舱模块 */ - ROLE; + COCKPIT, + + /** + * 任务模块 + */ + TASK, + + /** + * 安全员模块 + */ + SAFETY, + + /** + * 路径模块 + */ + ROUTE, + + /** + * 远控模块 + */ + CONTROL, + + /** + * 报修模块 + */ + REPAIR + } diff --git a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/OperateType.java b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/OperateType.java index 2955e5e..7355ab4 100644 --- a/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/OperateType.java +++ b/zxwl-common/zxwl-common-log/src/main/java/org/zxwl/common/log/enums/OperateType.java @@ -17,11 +17,6 @@ public enum OperateType { */ LOGOUT, - /** - * 查询 - */ - SEARCH, - /** * 新增 */ @@ -50,5 +45,5 @@ public enum OperateType { /** * 命令 */ - COMMAND; + COMMAND, } diff --git a/zxwl-common/zxwl-common-mqtt/src/main/java/org/zxwl/common/mqtt/handler/MqttMessageReceiver.java b/zxwl-common/zxwl-common-mqtt/src/main/java/org/zxwl/common/mqtt/handler/MqttMessageReceiver.java index 21b20af..d059ba5 100644 --- a/zxwl-common/zxwl-common-mqtt/src/main/java/org/zxwl/common/mqtt/handler/MqttMessageReceiver.java +++ b/zxwl-common/zxwl-common-mqtt/src/main/java/org/zxwl/common/mqtt/handler/MqttMessageReceiver.java @@ -41,10 +41,12 @@ public class MqttMessageReceiver implements MessageHandler { if (Boolean.TRUE.equals(retained)) { return; } - Integer qos = (Integer) headers.get(MqttHeaders.RECEIVED_QOS); // 获取消息体 - String payload = (String) message.getPayload(); - log.info("MQTT获取到的消息-topic:{}, qos: {}, payload: {}", topic, qos, payload); + String payload = message.getPayload().toString(); + log.info("\n--------------------START-------------------\n" + + "接收到订阅消息:\ntopic:" + topic + "\nmessage:" + payload + + "\n---------------------END--------------------"); + // 去掉第一个字符/ String replace = topic.replaceFirst("^/", "").replace('/', '.'); // 根据主题分别进行消息处理 diff --git a/zxwl-common/zxwl-common-oss/src/main/java/org/zxwl/common/oss/utils/MinioUtil.java b/zxwl-common/zxwl-common-oss/src/main/java/org/zxwl/common/oss/utils/MinioUtil.java index cfa4ad7..ffa2359 100644 --- a/zxwl-common/zxwl-common-oss/src/main/java/org/zxwl/common/oss/utils/MinioUtil.java +++ b/zxwl-common/zxwl-common-oss/src/main/java/org/zxwl/common/oss/utils/MinioUtil.java @@ -116,9 +116,9 @@ public class MinioUtil { return "/" + bucketName + "/" + objectName; } - public void download(String fileName, String bucketName, HttpServletResponse res) { + public void download(String fileName, String url, String bucketName, HttpServletResponse res) { GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(bucketName) - .object(fileName).build(); + .object(url).build(); try (GetObjectResponse response = minioClient.getObject(objectArgs)) { byte[] buf = new byte[1024]; int len; diff --git a/zxwl-common/zxwl-common-redis/src/main/java/org/zxwl/common/utils/RedisUtil.java b/zxwl-common/zxwl-common-redis/src/main/java/org/zxwl/common/utils/RedisUtil.java index f1eee22..88d21b5 100644 --- a/zxwl-common/zxwl-common-redis/src/main/java/org/zxwl/common/utils/RedisUtil.java +++ b/zxwl-common/zxwl-common-redis/src/main/java/org/zxwl/common/utils/RedisUtil.java @@ -3,13 +3,18 @@ package org.zxwl.common.utils; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.TimeUnit; +@Slf4j @Component @RequiredArgsConstructor public class RedisUtil { @@ -29,7 +34,7 @@ public class RedisUtil { try { return Optional.ofNullable(redisTemplate.opsForValue().get(key)); } catch (Exception e) { - e.printStackTrace(); + log.error("Error getting value: {}", e.getMessage(), e); return Optional.empty(); } } @@ -38,7 +43,7 @@ public class RedisUtil { try { redisTemplate.opsForValue().set(key, value); } catch (Exception e) { - e.printStackTrace(); + log.error("Error putting value: {}", e.getMessage(), e); } } @@ -46,16 +51,16 @@ public class RedisUtil { try { redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); } catch (Exception e) { - e.printStackTrace(); + log.error("Error putting value and expire: {}", e.getMessage(), e); } } public static Boolean exist(String key) { System.out.println("key = " + key); try { - return redisTemplate.hasKey(key); + return Objects.equals(redisTemplate.hasKey(key), Boolean.TRUE); } catch (Exception e) { - e.printStackTrace(); + log.error("Error hasKey: {}", e.getMessage(), e); return false; } } @@ -65,7 +70,7 @@ public class RedisUtil { redisTemplate.delete(key); return true; } catch (Exception e) { - e.printStackTrace(); + log.error("Error delete key: {}", e.getMessage(), e); return false; } } @@ -74,7 +79,7 @@ public class RedisUtil { try { return redisTemplate.keys(key); } catch (Exception e) { - e.printStackTrace(); + log.error("Error getting keys: {}", e.getMessage(), e); return null; } } @@ -82,12 +87,9 @@ public class RedisUtil { public static boolean setIfAbsent(String key, Object value) { try { Boolean bool = redisTemplate.opsForValue().setIfAbsent(key, value); - if (bool != null) { - return bool; - } - return false; + return Objects.equals(bool, Boolean.TRUE); } catch (Exception e) { - e.printStackTrace(); + log.error("Error setIfAbsent value: {}", e.getMessage(), e); return false; } } @@ -96,7 +98,7 @@ public class RedisUtil { try { return Optional.ofNullable(redisTemplate.opsForHash().get(key, hashKey)); } catch (Exception e) { - e.printStackTrace(); + log.error("Error getting hashValue: {}", e.getMessage(), e); return Optional.empty(); } } @@ -105,7 +107,7 @@ public class RedisUtil { try { return redisTemplate.opsForHash().entries(key); } catch (Exception e) { - e.printStackTrace(); + log.error("Error getting all hashMap: {}", e.getMessage(), e); return new HashMap<>(); } } @@ -114,16 +116,33 @@ public class RedisUtil { try { return redisTemplate.opsForHash().values(key); } catch (Exception e) { - e.printStackTrace(); + log.error("Error getting all hash values: {}", e.getMessage(), e); return new ArrayList<>(); } } + public static void putHashAll(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + } catch (Exception e) { + log.error("Error putting hashMap: {}", e.getMessage(), e); + } + } + + public static void putHashAll(String key, Map map, long time, TimeUnit timeUnit) { + try { + redisTemplate.opsForHash().putAll(key, map); + redisTemplate.expire(key, time, timeUnit); + } catch (Exception e) { + log.error("Error putting hashMap: {}", e.getMessage(), e); + } + } + public static void putHashValue(String key, String hashKey, Object value) { try { redisTemplate.opsForHash().put(key, hashKey, value); } catch (Exception e) { - e.printStackTrace(); + log.error("Error putting hash key value: {}", e.getMessage(), e); } } @@ -132,7 +151,7 @@ public class RedisUtil { redisTemplate.opsForHash().delete(key, hashKey); return true; } catch (Exception e) { - e.printStackTrace(); + log.error("Error delete hash key Value: {}", e.getMessage(), e); return false; } } @@ -140,8 +159,8 @@ public class RedisUtil { public static Map entries(String key) { try { return redisTemplate.opsForHash().entries(key); - }catch (Exception e) { - e.printStackTrace(); + } catch (Exception e) { + log.error("Error delete hash entries: {}", e.getMessage(), e); return MapUtil.empty(); } } @@ -149,8 +168,8 @@ public class RedisUtil { public static List values(String key) { try { return redisTemplate.opsForHash().values(key); - }catch (Exception e) { - e.printStackTrace(); + } catch (Exception e) { + log.error("Error getting hash values: {}", e.getMessage(), e); return ListUtil.empty(); } } @@ -159,7 +178,7 @@ public class RedisUtil { try { return redisTemplate.opsForHash().hasKey(key, hashKey); } catch (Exception e) { - e.printStackTrace(); + log.error("Error boolean hash key: {}", e.getMessage(), e); return false; } } @@ -172,8 +191,8 @@ public class RedisUtil { return redisTemplate.opsForList().range(key, 0, -1); } - public static boolean addZSet(String key, Object value, double score) { - return Boolean.TRUE.equals(redisTemplate.opsForZSet().add(key, value, score)); + public static void addZSet(String key, Object value, double score) { + redisTemplate.opsForZSet().add(key, value, score); } public static long getZSetSize(String key) { @@ -185,7 +204,32 @@ public class RedisUtil { return redisTemplate.opsForZSet().range(key, start, end); } - public static Long removeRangeByScore(String key, long min, long max) { - return redisTemplate.opsForZSet().removeRangeByScore(key, min, max); + public static void removeRangeByScore(String key, long min, long max) { + redisTemplate.opsForZSet().removeRangeByScore(key, min, max); + } + + /** + * 统计指定前缀的 key 数量 + * + * @param keyPrefix key 前缀,如 "user:profile:" + * @return 未过期的 key 数量 + */ + public static Long countKeysByPrefix(String keyPrefix) { + return redisTemplate.execute((RedisCallback) connection -> { + long count = 0; + ScanOptions options = ScanOptions.scanOptions() + .match(keyPrefix + "*") + .count(1000) + .build(); + try (Cursor cursor = connection.scan(options)) { + while (cursor.hasNext()) { + cursor.next(); + count++; + } + } catch (Exception e) { + log.error("统计前缀为{}的key数量时发生异常", keyPrefix, e); + } + return count; + }); } } diff --git a/zxwl-common/zxwl-common-satoken/src/main/java/org/zxwl/common/satoken/utils/LoginHelper.java b/zxwl-common/zxwl-common-satoken/src/main/java/org/zxwl/common/satoken/utils/LoginHelper.java index d2bc426..19058eb 100644 --- a/zxwl-common/zxwl-common-satoken/src/main/java/org/zxwl/common/satoken/utils/LoginHelper.java +++ b/zxwl-common/zxwl-common-satoken/src/main/java/org/zxwl/common/satoken/utils/LoginHelper.java @@ -1,12 +1,12 @@ package org.zxwl.common.satoken.utils; import cn.dev33.satoken.context.SaHolder; -import cn.dev33.satoken.context.model.SaStorage; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.zxwl.common.core.constant.SystemConstants; import org.zxwl.common.core.domain.model.LoginUser; /** @@ -20,20 +20,6 @@ public class LoginHelper { public static final String LOGIN_USER_KEY = "loginUser"; public static final String USER_KEY = "userId"; - /** - * 登录系统 基于 设备类型 - * 针对相同用户体系不同设备 - * - * @param loginUser 登录用户信息 - */ - public static void loginByDevice(LoginUser loginUser) { - SaStorage storage = SaHolder.getStorage(); - storage.set(LOGIN_USER_KEY, loginUser); - storage.set(USER_KEY, loginUser.getId()); - StpUtil.login(loginUser.getId()); - StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); - } - /** * 获取用户(多级缓存) */ @@ -86,18 +72,35 @@ public class LoginHelper { } /** - * 是否为管理员 + * 是否为超级管理员 * * @param userId 用户ID * @return 结果 */ - public static boolean isAdmin(Long userId) { -// return UserConstants.ADMIN_ID.equals(userId); - return false; + public static boolean isSuperAdmin(Long userId) { + return SystemConstants.SUPER_ADMIN_ID.equals(userId); } - public static boolean isAdmin() { - return isAdmin(getUserId()); + /** + * 是否为超级管理员 + * + * @return 结果 + */ + public static boolean isSuperAdmin() { + return isSuperAdmin(getUserId()); + } + + /** + * 检查当前用户是否已登录 + * + * @return 结果 + */ + public static boolean isLogin() { + try { + return getLoginUser() != null; + } catch (Exception e) { + return false; + } } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/config/ScheduleConfig.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/config/ScheduleConfig.java index f744196..ac3a604 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/config/ScheduleConfig.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/config/ScheduleConfig.java @@ -19,5 +19,6 @@ public class ScheduleConfig { public void checkCockpitStatus() { long threshold = Instant.now().minus(30, ChronoUnit.SECONDS).getEpochSecond(); RedisUtil.removeRangeByScore(RedisKeyConst.COCKPIT_ONLINE_KEY, 0, threshold); + } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/KafkaTopicConst.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/KafkaTopicConst.java index 2e1d725..7d1afa0 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/KafkaTopicConst.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/KafkaTopicConst.java @@ -3,7 +3,23 @@ package org.zxwl.sweeper.constant; public interface KafkaTopicConst { String GATEWAY_HEARTBEAT_TOPIC = "^dcpcmcc\\.v1\\.vehmedia\\.[a-zA-Z0-9_]+\\.heartbeat.up$"; //网关的心跳 + String GATEWAY_PUSH_VIDEO_TOPIC = "adcpcmcc.v1.vehmedia.*.video.down"; //网关的视频拉流 + String GATEWAY_SAVE_VIDEO_TOPIC = "adcpcmcc.v1.vehmedia.*.video.save.down"; //网关的视频存储 + String VEHICLE_INFO = "zxwl.vehicle.*.info"; + + String VEHICLE_FAULT = "zxwl.vehicle.*.fault"; + + String VEHICLE_GPS = "zxwl.vehicle.*.gps"; + + String VEHICLE_CTRL = "zxwl.vehicle.*.ctrl"; + + String VEHICLE_TASK = "zxwl.vehicle.*.task"; + + String VEHICLE_TASK_STATUS = "zxwl.vehicle.*.task.status"; + + String COCKPIT_HEARTBEAT = "zxwl.cockpit.*.heartbeat"; + } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/MqttTopicConst.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/MqttTopicConst.java index d5d488b..a014086 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/MqttTopicConst.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/MqttTopicConst.java @@ -1,34 +1,12 @@ package org.zxwl.sweeper.constant; public interface MqttTopicConst { - static String generateVehicleCtrlTopic(String vid) { //控制命令主题 - return "/zxwl/vehicle/" + vid + "/ctrl"; + + static String VehicleCtrl(String vid) { + return "/zxwl/vehicle/" + vid + "/ctrl"; //车辆控制 } -// String CTRL_COMMAND_TOPIC = "/ntvu/vehicle/ctrl/+"; //控制命令主题的前缀 -// -// String INFO_COMMAND_PREFIX = "/ntvu/vehicle/info/"; //车辆信息上报主题的前缀 -// String INFO_COMMAND_TOPIC = "/ntvu/vehicle/info/+"; //车辆信息上报主题的前缀 -// -// String WARNING_COMMAND_PREFIX = "/ntvu/vehicle/warning/"; //车辆状态上报主题的前缀 -// String WARNING_COMMAND_TOPIC = "/ntvu/vehicle/warning/+"; //车辆状态上报主题的前缀 -// -// String GATEWAY_HEARTBEAT_TOPIC = "adcpcmcc/v1/vehmedia/+/heartbeat/up"; //网关的心跳 -// String GATEWAY_PUSH_VIDEO_TOPIC = "adcpcmcc/v1/vehmedia/+/video/down"; //网关的视频拉流 -// String GATEWAY_SAVE_VIDEO_TOPIC = "adcpcmcc/v1/vehmedia/+/video/save/down"; //网关的视频存储 - - //网关推流主题 - static String getPushVideoTopic(String vid) { - return "adcpcmcc/v1/vehmedia/" + vid + "/video/down"; - } - - //网关保存视频 - static String getVideoSaveDownTopic(String vid) { - return "adcpcmcc/v1/vehmedia/" + vid + "/video/save/down"; - } - - //网关心跳 - static String getHeartbeatTopic(String vid) { - return "adcpcmcc/v1/vehmedia/" + vid + "/heartbeat/up"; + static String TaskCtrl(String vid) { + return "/zxwl/vehicle/" + vid + "/task"; //任务控制 } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/RedisKeyConst.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/RedisKeyConst.java index dafc2ef..b75f0a4 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/RedisKeyConst.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/RedisKeyConst.java @@ -8,16 +8,23 @@ public interface RedisKeyConst { String GATEWAY_INFO_IP = "ZXWL:GATEWAY:INFO:IP"; //记录网关IP信息 String GATEWAY_INFO_URL = "ZXWL:GATEWAY:INFO:URL"; //记录网关摄像头地址信息 - + // vehicle车俩 String VEHICLE_CTRL_RESPONSE = "ZXWL:VEHICLE:CTRL:RESPONSE:"; //车辆控制响应 - String TASK_RESPONSE = "ZXWL:VEHICLE:TASK:RESPONSE:"; //任务响应 String VEHICLE_STATUS = "ZXWL:VEHICLE:ONLINE:"; //车辆在线状态 String VEHICLE_FAULT_STATUS = "ZXWL:VEHICLE:FAULT:"; //车辆故障状态 String VEHICLE_POWER = "ZXWL:VEHICLE:POWER:"; //车辆电量 + String VEHICLE_STATUS_INFO = "ZXWL:VEHICLE:STATUS:INFO:"; //车俩状态 + + // route路径 String ROUTE_KEY_PREFIX = "routeName:"; - String DEVICE_STATUS_KEY_PREFIX = "ZXWL:DEVICE_STATUS:"; -// cockpit + + // task任务 + String TASK_RESPONSE = "ZXWL:VEHICLE:TASK:RESPONSE:"; //任务响应 + + // cockpit驾驶舱 String COCKPIT_ONLINE_PREFIX = "ZXWL:COCKPIT:ONLINE:"; String COCKPIT_ONLINE_KEY = "ZXWL:COCKPIT:ONLINE"; + String DEVICE_STATUS_KEY_PREFIX = "ZXWL:DEVICE_STATUS:"; + } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/TopicNameConst.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/TopicNameConst.java deleted file mode 100644 index c6416de..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/constant/TopicNameConst.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.zxwl.sweeper.constant; - -public interface TopicNameConst { - - static String TrainBoxIMU(String deviceId) { - return "/zxwl/training_box/" + deviceId + "/imu_setting"; //车辆信息上报 - } - - static String TrainBoxRTK(String deviceId) { - return "/zxwl/training_box/" + deviceId + "/rtk_setting"; //车辆信息上报 - } - - static String VehicleCtrl(String deviceId) { - return "/zxwl/vehicle/" + deviceId + "/ctrl"; //车辆控制 - } - - static String TaskCtrl(String vid) { - return "/zxwl/vehicle/" + vid + "/task"; //任务控制 - } - - static String AdasFunctionCtrl(String deviceId) { - return "/zxwl/adas/" + deviceId + "/function"; //adas功能开关控制 - } -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/CockpitInfoController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/CockpitInfoController.java index 5a6d6a8..49a1197 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/CockpitInfoController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/CockpitInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.cockpitInfo.CockpitDropVO; import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoDTO; @@ -48,37 +51,36 @@ public class CockpitInfoController extends BaseController { } @PostMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "驾驶舱新增") + //@SaCheckPermission("cockpit:info:add") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.INSERT, operateExplain = "驾驶舱信息新增") public Result add(@RequestBody @Validated CockpitInfoDTO dto) { return toResult(cockpitInfoService.add(dto)); } @PutMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "驾驶舱修改") - public Result update(@RequestBody @Validated({UpdateGroup.class, - Default.class}) CockpitInfoDTO dto) { + //@SaCheckPermission("cockpit:info:update") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.UPDATE, operateExplain = "驾驶舱信息修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) CockpitInfoDTO dto) { return toResult(cockpitInfoService.update(dto)); } @DeleteMapping("{ids}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "驾驶舱删除") + //@SaCheckPermission("cockpit:info:delete") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.DELETE, operateExplain = "驾驶舱信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(cockpitInfoService.delete(ValidatorUtil.checkIds(ids))); } @PutMapping("enable") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "驾驶舱启用") + //@SaCheckPermission("cockpit:info:enable") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.OTHER, operateExplain = "驾驶舱启用") public Result enable(@RequestParam Long id) { return toResult(cockpitInfoService.enable(id)); } @PutMapping("disable") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "驾驶舱停用") + //@SaCheckPermission("cockpit:info:disable") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.OTHER, operateExplain = "驾驶舱停用") public Result disable(@RequestParam Long id) { return toResult(cockpitInfoService.disable(id)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DispatchRecordController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DispatchRecordController.java index 260de69..e4b877c 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DispatchRecordController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DispatchRecordController.java @@ -9,6 +9,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.dispatchRecord.DispatchRecordExcelQuery; import org.zxwl.sweeper.model.dispatchRecord.DispatchRecordQuery; @@ -44,15 +47,15 @@ public class DispatchRecordController extends BaseController { } @DeleteMapping("{ids}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "调度记录删除") + //@SaCheckPermission("cockpit:dispatch:delete") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.DELETE, operateExplain = "远程调度记录删除") public Result delete(@PathVariable("ids") List ids) { return toResult(dispatchRecordService.delete(ValidatorUtil.checkIds(ids))); } @PostMapping("export") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.EXPORT, operateExplain = "调度记录导出") + //@SaCheckPermission("cockpit:dispatch:export") + @Log(module = ModuleType.COCKPIT, operateType = OperateType.EXPORT, operateExplain = "远程调度记录导出") public void downloadExcel(@RequestBody DispatchRecordExcelQuery query, HttpServletResponse response) { dispatchRecordService.downloadExcel(query, response); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DpHomeController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DpHomeController.java index d079f1c..8462f8a 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DpHomeController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/DpHomeController.java @@ -22,16 +22,32 @@ public class DpHomeController { private final DpHomeService dpService; + /** + * 驾驶舱状态列表 + * + * @param query 查询 + * @return Result + */ @GetMapping("/listCockpitStatus") public Result> listDevice(CockpitSimpleInfoQuery query) { return Result.success(dpService.listCockpitStatus(query)); } + /** + * 车辆状态列表 + * @param query 查询 + * @return Result + */ @GetMapping("/listVehicleStatus") public Result> listDevice(VehicleSimpleInfoQuery query) { return Result.success(dpService.listVehicleStatus(query)); } + /** + * 远控记录列表 + * + * @return Result + */ @GetMapping("/listDispatchRecord") public Result> listDispatchRecord() { return Result.success(dpService.listDispatchRecord()); diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/ElectricFenceController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/ElectricFenceController.java index 8e225e0..0978e4d 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/ElectricFenceController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/ElectricFenceController.java @@ -7,6 +7,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.electricFence.ElectricFenceDTO; import org.zxwl.sweeper.model.electricFence.ElectricFenceQuery; @@ -17,7 +20,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -36,17 +39,22 @@ public class ElectricFenceController extends BaseController { } @PostMapping + //@SaCheckPermission("electric:info:add") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.INSERT, operateExplain = "围栏信息新增") public Result add(@RequestBody @Validated ElectricFenceDTO electricFenceDTO) { return toResult(electricFenceService.add(electricFenceDTO)); } @PutMapping - public Result update(@RequestBody @Validated({UpdateGroup.class, - Default.class}) ElectricFenceDTO electricFenceDTO) { + //@SaCheckPermission("electric:info:update") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.UPDATE, operateExplain = "围栏信息修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) ElectricFenceDTO electricFenceDTO) { return toResult(electricFenceService.update(electricFenceDTO)); } @DeleteMapping("{ids}") + //@SaCheckPermission("electric:info:delete") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.DELETE, operateExplain = "围栏信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(electricFenceService.delete(ids)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/FaultRepairController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/FaultRepairController.java new file mode 100644 index 0000000..c38978d --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/FaultRepairController.java @@ -0,0 +1,93 @@ +package org.zxwl.sweeper.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.validation.groups.Default; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.zxwl.common.core.domain.Result; +import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; +import org.zxwl.common.web.base.BaseController; +import org.zxwl.sweeper.enums.RepairStatusEnum; +import org.zxwl.sweeper.model.faultRepair.*; +import org.zxwl.sweeper.service.FaultRepairService; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@RestController +@RequestMapping("/fault/repair") +@RequiredArgsConstructor +public class FaultRepairController extends BaseController { + + private final FaultRepairService faultRepairService; + + @GetMapping + public Result> queryPage(FaultRepairQuery query) { + return Result.success(faultRepairService.queryPage(query)); + } + + @GetMapping + public Result data() { + return Result.success(faultRepairService.data()); + } + + @PostMapping + //@SaCheckPermission("fault:repair:add") + @Log(module = ModuleType.REPAIR, operateType = OperateType.INSERT, operateExplain = "故障报修新增") + public Result add(@RequestBody @Validated FaultRepairDTO faultRepairDTO) { + return toResult(faultRepairService.add(faultRepairDTO)); + } + + @PutMapping + //@SaCheckPermission("fault:repair:update") + @Log(module = ModuleType.REPAIR, operateType = OperateType.UPDATE, operateExplain = "故障报修修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) FaultRepairDTO faultRepairDTO) { + return toResult(faultRepairService.edit(faultRepairDTO)); + } + + @DeleteMapping("{ids}") + //@SaCheckPermission("fault:repair:delete") + @Log(module = ModuleType.REPAIR, operateType = OperateType.DELETE, operateExplain = "故障报修删除") + public Result delete(@PathVariable("ids") List ids) { + return toResult(faultRepairService.removeByIds(ids)); + } + + @PostMapping("/allocate") + //@SaCheckPermission("fault:repair:allocate") + @Log(module = ModuleType.REPAIR, operateType = OperateType.OTHER, operateExplain = "指派给维修人员") + public Result allocate(@RequestBody FaultRepairAllocateDTO faultRepairAllocateDTO) { + return toResult(faultRepairService.assign(faultRepairAllocateDTO)); + } + + @PostMapping("/complete/{id}") + //@SaCheckPermission("fault:repair:complete") + @Log(module = ModuleType.REPAIR, operateType = OperateType.OTHER, operateExplain = "维修人员完成报修单") + public Result complete(@PathVariable("id") Long id) { + return toResult(faultRepairService.updateByStatus(id, RepairStatusEnum.SOLVE.getValue())); + } + + @PostMapping("/close/{id}") + //@SaCheckPermission("fault:repair:close") + @Log(module = ModuleType.REPAIR, operateType = OperateType.OTHER, operateExplain = "维修人员关闭报修单") + public Result close(@PathVariable("id") Long id) { + return toResult(faultRepairService.updateByStatus(id, RepairStatusEnum.CLOSE.getValue())); + } + + @PostMapping("/cancel/{id}") + //@SaCheckPermission("fault:repair:cancel") + @Log(module = ModuleType.REPAIR, operateType = OperateType.OTHER, operateExplain = "维修人员取消报修单") + public Result cancel(@PathVariable("id") Long id) { + return toResult(faultRepairService.updateByStatus(id, RepairStatusEnum.CANCEL.getValue())); + } +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/GatewayInfoController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/GatewayInfoController.java index 9cfecbb..ea0e8ec 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/GatewayInfoController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/GatewayInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.gatewayInfo.GatewayInfoDTO; import org.zxwl.sweeper.model.gatewayInfo.GatewayInfoQuery; @@ -18,7 +21,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -37,32 +40,30 @@ public class GatewayInfoController extends BaseController { } @PostMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "网关信息新增") + //@SaCheckPermission("gateway:info:add") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.INSERT, operateExplain = "网关信息新增") public Result add(@RequestBody @Validated GatewayInfoDTO dto) { return toResult(gatewayInfoService.add(dto)); } @PutMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "网关信息修改") - public Result update(@RequestBody @Validated({UpdateGroup.class, - Default.class}) GatewayInfoDTO dto) { + //@SaCheckPermission("gateway:info:update") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.UPDATE, operateExplain = "网关信息修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) GatewayInfoDTO dto) { return toResult(gatewayInfoService.update(dto)); } @DeleteMapping("{ids}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "网关信息删除") + //@SaCheckPermission("gateway:info:delete") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.DELETE, operateExplain = "网关信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(gatewayInfoService.delete(ValidatorUtil.checkIds(ids))); } @PutMapping("binding") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "网关设备绑定") - public Result bindVehicle(@RequestParam("id") Long id, - @RequestParam("vid") String vid) { + //@SaCheckPermission("gateway:info:bind") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.OTHER, operateExplain = "网关设备绑定") + public Result bindVehicle(@RequestParam("id") Long id, @RequestParam("vid") String vid) { return toResult(gatewayInfoService.bindVehicle(id, vid)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteController.java deleted file mode 100644 index 16ebc6d..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteController.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.zxwl.sweeper.controller; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.zxwl.common.core.domain.Result; -import org.zxwl.sweeper.model.app.ctrl.CtrlCommand; -import org.zxwl.sweeper.service.CtrlCommandService; - -@Slf4j -@RestController -@RequiredArgsConstructor -@RequestMapping("/ctrl") -public class RemoteController { - - private final CtrlCommandService ctrlCommandService; - -// private void sendCommand(String id, String command, String value) { -// CtrlCommand ctrlCommand = new CtrlCommand(command, value); -// String jsonStr = JSONUtil.toJsonStr(ctrlCommand); -// log.info("发送命令 ==> {}", jsonStr); -// mqttGateway.sendToMqtt(getTopicById(id), jsonStr); -// } - - - - @PostMapping -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "指令下发") - public Result ctrlCommand(@RequestBody @Validated CtrlCommand command) { - ctrlCommandService.sendCommand(command); - return Result.success(); - } -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteTakeOverController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteTakeOverController.java index 0ed5af7..d3dedb5 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteTakeOverController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RemoteTakeOverController.java @@ -6,6 +6,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.zxwl.common.core.domain.Result; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.service.DispatchRecordService; @@ -17,9 +20,8 @@ public class RemoteTakeOverController extends BaseController { private final DispatchRecordService dispatchRecordService; @GetMapping("confirm") -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "远程接管") - public Result takeOver(@RequestParam("cid") String cid, - @RequestParam("vid") String vid) { + @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "开始远程接管车辆") + public Result takeOver(@RequestParam("cid") String cid, @RequestParam("vid") String vid) { return toResult(dispatchRecordService.takeOver(cid, vid)); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RouteInfoController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RouteInfoController.java index 6b04321..34964f6 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RouteInfoController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/RouteInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.validate.AddGroup; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.routeInfo.*; import org.zxwl.sweeper.model.routeInfo.app.RouteInfoDetailVO; @@ -38,16 +41,22 @@ public class RouteInfoController extends BaseController { } @PostMapping("/ctrl") + //@SaCheckPermission("route:info:ctrl") + @Log(module = ModuleType.ROUTE, operateType = OperateType.COMMAND, operateExplain = "路径采集开始") public Result route(@RequestBody @Validated RouteCommandDTO routeCommandDTO) { return toResult(routeInfoService.sendRouteCommand(routeCommandDTO)); } @PostMapping("/upload") + //@SaCheckPermission("route:info:upload") + @Log(module = ModuleType.ROUTE, operateType = OperateType.OTHER, operateExplain = "路径文件上传") public Result upload(@ModelAttribute @Validated RouteUploadDTO routeUploadDTO) { return toResult(routeInfoService.uploadFile(routeUploadDTO)); } @GetMapping("/download/{id}") + //@SaCheckPermission("route:info:download") + @Log(module = ModuleType.ROUTE, operateType = OperateType.OTHER, operateExplain = "路径信息下发") public Result download(@PathVariable("id") Long id) { routeInfoService.downloadFile(id); return Result.success(); @@ -59,22 +68,30 @@ public class RouteInfoController extends BaseController { } @PostMapping + //@SaCheckPermission("route:info:add") + @Log(module = ModuleType.ROUTE, operateType = OperateType.INSERT, operateExplain = "路径信息新增") public Result add(@ModelAttribute @Validated({AddGroup.class, Default.class}) RouteInfoDTO dto) { return toResult(routeInfoService.add(dto)); } @PutMapping("enable") + //@SaCheckPermission("route:info:enable") + @Log(module = ModuleType.ROUTE, operateType = OperateType.OTHER, operateExplain = "路径信息启用") public Result enable(@RequestParam Long id) { return toResult(routeInfoService.enable(id)); } @PutMapping("disable") + //@SaCheckPermission("route:info:disable") + @Log(module = ModuleType.ROUTE, operateType = OperateType.OTHER, operateExplain = "路径信息禁用") public Result disable(@RequestParam Long id) { return toResult(routeInfoService.disable(id)); } @PutMapping + //@SaCheckPermission("route:info:update") + @Log(module = ModuleType.ROUTE, operateType = OperateType.OTHER, operateExplain = "路径信息修改") public Result update(@ModelAttribute @Validated({UpdateGroup.class, Default.class}) RouteInfoDTO dto) { return toResult(routeInfoService.update(dto)); diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/SafetyOfficerController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/SafetyOfficerController.java index 74b9f4e..0464c16 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/SafetyOfficerController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/SafetyOfficerController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.safetyOfficer.SafetyOfficerDTO; import org.zxwl.sweeper.model.safetyOfficer.SafetyOfficerQuery; @@ -37,17 +40,23 @@ public class SafetyOfficerController extends BaseController { } @PostMapping + //@SaCheckPermission("safety:info:add") + @Log(module = ModuleType.SAFETY, operateType = OperateType.INSERT, operateExplain = "安全员信息新增") public Result add(@RequestBody @Validated SafetyOfficerDTO dto) { return toResult(safetyOfficerService.add(dto)); } @PutMapping + //@SaCheckPermission("safety:info:update") + @Log(module = ModuleType.SAFETY, operateType = OperateType.UPDATE, operateExplain = "安全员信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) SafetyOfficerDTO dto) { return toResult(safetyOfficerService.update(dto)); } @DeleteMapping("{ids}") + //@SaCheckPermission("safety:info:delete") + @Log(module = ModuleType.SAFETY, operateType = OperateType.DELETE, operateExplain = "安全员信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(safetyOfficerService.delete(ValidatorUtil.checkIds(ids))); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskInfoController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskInfoController.java index 3ea1ed9..c3fcb89 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskInfoController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.taskInfo.TaskInfoDTO; import org.zxwl.sweeper.model.taskInfo.TaskInfoQuery; @@ -18,7 +21,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -42,27 +45,37 @@ public class TaskInfoController extends BaseController { } @PostMapping + //@SaCheckPermission("task:info:add") + @Log(module = ModuleType.TASK, operateType = OperateType.INSERT, operateExplain = "任务信息新增") public Result add(@RequestBody @Validated TaskInfoDTO dto) { return toResult(taskInfoService.add(dto)); } @PutMapping + //@SaCheckPermission("task:info:update") + @Log(module = ModuleType.TASK, operateType = OperateType.UPDATE, operateExplain = "任务信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) TaskInfoDTO dto) { return toResult(taskInfoService.update(dto)); } @DeleteMapping("{ids}") + //@SaCheckPermission("task:info:delete") + @Log(module = ModuleType.TASK, operateType = OperateType.DELETE, operateExplain = "任务信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(taskInfoService.delete(ValidatorUtil.checkIds(ids))); } @GetMapping("/start/{id}") + //@SaCheckPermission("task:info:start") + @Log(module = ModuleType.TASK, operateType = OperateType.DELETE, operateExplain = "任务调度开始") public Result start(@PathVariable("id") Long id) { return toResult(taskInfoService.start(id)); } @GetMapping("/stop/{id}") + //@SaCheckPermission("task:info:stop") + @Log(module = ModuleType.TASK, operateType = OperateType.DELETE, operateExplain = "任务调度停止") public Result stop(@PathVariable("id") Long id) { return toResult(taskInfoService.stop(id)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskRecordController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskRecordController.java index 0d84fd6..0244c6a 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskRecordController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/TaskRecordController.java @@ -5,6 +5,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.taskRecord.TaskRecordQuery; import org.zxwl.sweeper.model.taskRecord.TaskRecordVO; @@ -33,6 +36,8 @@ public class TaskRecordController extends BaseController { } @DeleteMapping("{ids}") + //@SaCheckPermission("task:record:delete") + @Log(module = ModuleType.TASK, operateType = OperateType.DELETE, operateExplain = "任务调度记录删除") public Result delete(@PathVariable("ids") List ids) { return toResult(taskRecordService.delete(ValidatorUtil.checkIds(ids))); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCardController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCardController.java index c2dc79a..68671e3 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCardController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCardController.java @@ -3,6 +3,9 @@ package org.zxwl.sweeper.controller; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.app.ctrl.RemoteCommand; import org.zxwl.sweeper.model.app.vehicleCard.VehicleCard; @@ -23,13 +26,13 @@ public class VehicleCardController extends BaseController { } @PostMapping("confirmCtrl") -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "远程控制") + @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "确认远程控制车辆") public Result> confirmRemote(@RequestBody RemoteCommand remoteCommand) { return Result.success(vehicleCardService.submitRemoteControl(remoteCommand)); } @PostMapping("confirmAutoCtrl") -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "远程控制") + @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "开启自动驾驶模式") public Result confirmAutoControl(@RequestBody RemoteCommand remoteCommand) { return toResult(vehicleCardService.submitAutoControl(remoteCommand)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCtrlController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCtrlController.java index 9f5aa25..2703968 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCtrlController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleCtrlController.java @@ -7,6 +7,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.zxwl.common.core.domain.Result; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.app.ctrl.CtrlCommand; import org.zxwl.sweeper.model.app.ctrl.RemoteCommand; @@ -22,13 +25,13 @@ public class VehicleCtrlController extends BaseController { private final DispatchRecordService dispatchRecordService; @PostMapping -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "远控指令") + @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "下发指令") public Result vehicleCtrl(@RequestBody @Validated CtrlCommand command) { return toResult(vehicleCtrlService.sendCommand(command)); } @PostMapping("/endCtrl") -// @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "结束远控") + @Log(module = ModuleType.CONTROL, operateType = OperateType.COMMAND, operateExplain = "结束远程接管车辆") public Result endVehicleCtrl(@RequestBody RemoteCommand remoteCommand) { return toResult(dispatchRecordService.endRemote(remoteCommand)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleFaultController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleFaultController.java index 1446b31..c276add 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleFaultController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleFaultController.java @@ -6,6 +6,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.sweeper.model.vehicleFault.VehicleFaultDTO; import org.zxwl.sweeper.model.vehicleFault.VehicleFaultQuery; @@ -40,6 +43,8 @@ public class VehicleFaultController extends BaseController { } @DeleteMapping("{ids}") + //@SaCheckPermission("vehicle:fault:delete") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.DELETE, operateExplain = "车辆故障信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(vehicleFaultService.delete(ValidatorUtil.checkIds(ids))); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleGridController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleGridController.java deleted file mode 100644 index 709c200..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleGridController.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.zxwl.sweeper.controller; - -import org.zxwl.sweeper.service.VehicleGridService; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.zxwl.common.core.domain.Result; -import org.zxwl.sweeper.model.vehicleGrid.VehicleGridInfoVO; - -import java.util.List; - -/** - *

- * 前端控制器 - *

- * - * @author Ben - * @since 2025-06-20 - */ -@RestController -@RequestMapping("/vehicleGrid") -@RequiredArgsConstructor -public class VehicleGridController { - - private final VehicleGridService vehicleGridService; - - @GetMapping - public Result> vehicleGrid(@RequestParam String vid) { - return Result.success(vehicleGridService.listGridByVehicle(vid)); - } - -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleInfoController.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleInfoController.java index 1f34d0f..7c6fde5 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleInfoController.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/controller/VehicleInfoController.java @@ -6,10 +6,13 @@ import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; -import org.zxwl.sweeper.model.VehicleInfoAPPVO; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; +import org.zxwl.sweeper.model.VehicleInfoAPPVO; import org.zxwl.sweeper.model.app.vehicleCard.VehicleCard; import org.zxwl.sweeper.model.vehicleInfo.*; import org.zxwl.sweeper.service.VehicleInfoService; @@ -62,46 +65,45 @@ public class VehicleInfoController extends BaseController { } @PostMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "车辆信息新增") + //@SaCheckPermission("vehicle:info:add") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.INSERT, operateExplain = "车辆信息新增") public Result add(@RequestBody @Validated VehicleInfoDTO dto) { return toResult(vehicleInfoService.add(dto)); } @PutMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "车辆信息修改") + //@SaCheckPermission("vehicle:info:update") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.UPDATE, operateExplain = "车辆信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) VehicleInfoDTO dto) { return toResult(vehicleInfoService.update(dto)); } @DeleteMapping("{ids}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "车辆信息删除") + //@SaCheckPermission("vehicle:info:delete") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.DELETE, operateExplain = "车辆信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(vehicleInfoService.delete(ValidatorUtil.checkIds(ids))); } @PutMapping("enable") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "车辆信息启用") + //@SaCheckPermission("vehicle:info:enable") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.OTHER, operateExplain = "车辆启用") public Result enable(@RequestParam Long id) { return toResult(vehicleInfoService.enable(id)); } @PutMapping("disable") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "车辆信息禁用") + //@SaCheckPermission("vehicle:info:disable") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.OTHER, operateExplain = "车辆禁用") public Result disable(@RequestParam Long id) { return toResult(vehicleInfoService.disable(id)); } @PutMapping("binding") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "车辆绑定") - public Result bindCockpit(@RequestParam("id") Long id, - @RequestParam("cid") String cid) { + //@SaCheckPermission("vehicle:info:bind") + @Log(module = ModuleType.VEHICLE, operateType = OperateType.OTHER, operateExplain = "车辆绑定") + public Result bindCockpit(@RequestParam("id") Long id, @RequestParam("cid") String cid) { return toResult(vehicleInfoService.bindCockpit(id, cid)); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/FaultRepair.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/FaultRepair.java new file mode 100644 index 0000000..d79c8bc --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/FaultRepair.java @@ -0,0 +1,96 @@ +package org.zxwl.sweeper.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +@TableName("info_fault_repair") +public class FaultRepair { + + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + + /** + * 标题 + */ + @TableField("title") + private String title; + + /** + * 故障详细描述 + */ + @TableField("description") + private String description; + + /** + * 报修人id + */ + @TableField("report_user_id") + private Long reportUserId; + + /** + * 优先级 + */ + @TableField("priority") + private Integer priority; + + /** + * 状态 + */ + @TableField("status") + private Integer status; + + /** + * 指派给维修人员ID + */ + @TableField("assign_to_user_id") + private Long assignToUserId; + + /** + * 维修结果描述 + */ + @TableField("repair_result") + private String repairResult; + + /** + * 备注 + */ + @TableField("remark") + private String remark; + + /** + * 创建时间 + */ + @TableField(value = "created", fill = FieldFill.INSERT) + private LocalDateTime created; + + /** + * 修改时间 + */ + @TableField(value = "last", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime last; + + /** + * 是否删除 0 未删除 1 已删除 + */ + @TableField("deleted") + @TableLogic + private Integer deleted; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/RepairStatusEnum.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/RepairStatusEnum.java new file mode 100644 index 0000000..082d9f3 --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/RepairStatusEnum.java @@ -0,0 +1,19 @@ +package org.zxwl.sweeper.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum RepairStatusEnum { + + PEND("待处理", 0), + PROCESS("处理中", 1), + SOLVE("已解决", 2), + CLOSE("已关闭", 3), + CANCEL("已取消", 4); + + private final String label; + + private final Integer value; +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/TaskStatusEnum.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/TaskStatusEnum.java index da57b96..fa32489 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/TaskStatusEnum.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/enums/TaskStatusEnum.java @@ -11,8 +11,7 @@ public enum TaskStatusEnum { UN_EXECUTED("待执行", 0), EXECUTING("执行中", 1), COMPLETED("已完成", 2), - EXCEPTION("运行异常", 3), - ; + EXCEPTION("运行异常", 3); private final String label; private final Integer value; diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/CockpitKafkaConsumer.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/CockpitKafkaConsumer.java index 58c833b..d427811 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/CockpitKafkaConsumer.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/CockpitKafkaConsumer.java @@ -10,6 +10,7 @@ import org.springframework.kafka.support.KafkaHeaders; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; import org.zxwl.common.utils.RedisUtil; +import org.zxwl.sweeper.constant.KafkaTopicConst; import org.zxwl.sweeper.constant.RedisKeyConst; import org.zxwl.sweeper.utils.KafkaUtil; @@ -21,15 +22,13 @@ import java.util.Optional; @RequiredArgsConstructor public class CockpitKafkaConsumer { - @KafkaListener(id = "device_heartbeat_info", topicPattern = "zxwl.cockpit.*.heartbeat") + @KafkaListener(id = "device_heartbeat_info", topicPattern = KafkaTopicConst.COCKPIT_HEARTBEAT) public void handleDeviceHeartbeatInfo(ConsumerRecord record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { Optional message = Optional.ofNullable(record.value()); if (message.isPresent()) { - String msg = message.get(); String cid = KafkaUtil.getVIdByTopic(topic, 3); if (CharSequenceUtil.isEmpty(cid)) return; -// log.info("[kafka] ==> Topic: {}, Message: {}", topic, msg); // RedisUtil.setValueWithExpire(RedisKeyConst.COCKPIT_ONLINE_PREFIX + cid, LocalDateTimeUtil.now(), 30); RedisUtil.addZSet(RedisKeyConst.COCKPIT_ONLINE_KEY, cid, Instant.now().getEpochSecond()); ack.acknowledge(); diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/TaskKafkaConsumer.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/TaskKafkaConsumer.java index 42a60da..1fc1eaa 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/TaskKafkaConsumer.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/TaskKafkaConsumer.java @@ -11,6 +11,7 @@ import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; import org.zxwl.common.json.utils.JacksonUtil; import org.zxwl.common.utils.RedisUtil; +import org.zxwl.sweeper.constant.KafkaTopicConst; import org.zxwl.sweeper.constant.RedisKeyConst; import org.zxwl.sweeper.model.reply.ReplyHeader; @@ -21,7 +22,7 @@ import java.util.Optional; @RequiredArgsConstructor public class TaskKafkaConsumer { - @KafkaListener(id = "task_push", topicPattern = "zxwl.vehicle.*.task") + @KafkaListener(id = "task_push", topicPattern = KafkaTopicConst.VEHICLE_TASK) public void handleVehicleTask(ConsumerRecord consumerRecord, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { Optional message = Optional.ofNullable(consumerRecord.value()); @@ -37,4 +38,15 @@ public class TaskKafkaConsumer { ack.acknowledge(); } } + + @KafkaListener(id = "task_status_push", topicPattern = KafkaTopicConst.VEHICLE_TASK_STATUS) + public void handleVehicleStatusTask(ConsumerRecord consumerRecord, Acknowledgment ack, + @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { + Optional message = Optional.ofNullable(consumerRecord.value()); + if (message.isPresent()) { + String msg = message.get(); + log.info("task_status_push <==> {}", msg); + ack.acknowledge(); + } + } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/VehicleKafkaConsumer.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/VehicleKafkaConsumer.java index 07f4e38..d3e48fa 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/VehicleKafkaConsumer.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/listener/VehicleKafkaConsumer.java @@ -1,5 +1,6 @@ package org.zxwl.sweeper.listener; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -12,18 +13,23 @@ import org.springframework.kafka.support.Acknowledgment; import org.springframework.kafka.support.KafkaHeaders; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; +import org.zxwl.common.json.utils.JacksonUtil; import org.zxwl.common.utils.RedisUtil; +import org.zxwl.sweeper.constant.KafkaTopicConst; import org.zxwl.sweeper.constant.RedisKeyConst; import org.zxwl.sweeper.model.app.info.VehicleFaultInfo; import org.zxwl.sweeper.model.app.info.VehicleInfoReport; import org.zxwl.sweeper.model.app.sensor.GPSInfo; +import org.zxwl.sweeper.model.reply.ReplyHeader; import org.zxwl.sweeper.utils.KafkaUtil; import org.zxwl.sweeper.ws.VehicleGpsWebSocket; import org.zxwl.sweeper.ws.VehicleInfoWebSocket; import org.zxwl.sweeper.ws.VehicleWarningWebSocket; import java.time.LocalDateTime; +import java.util.Map; import java.util.Optional; +import java.util.concurrent.TimeUnit; @Slf4j @Component @@ -32,7 +38,24 @@ public class VehicleKafkaConsumer { private final MongoTemplate mongoTemplate; - @KafkaListener(id = "vehicle_base_info", topicPattern = "zxwl.vehicle.*.info") + @KafkaListener(id = "vehicle_ctrl_info", topicPattern = KafkaTopicConst.VEHICLE_CTRL) + public void handleVehicleTask(ConsumerRecord consumerRecord, Acknowledgment ack, + @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { + Optional message = Optional.ofNullable(consumerRecord.value()); + if (message.isPresent()) { + String msg = message.get(); + log.info("ctrl_push <==> {}", msg); + ReplyHeader replyHeader = JSONUtil.toBean(msg, ReplyHeader.class); + if ("response".equals(replyHeader.getType())) { + Long seqNo = replyHeader.getSeqNo(); + RedisUtil.setValueWithExpire(RedisKeyConst.VEHICLE_CTRL_RESPONSE + seqNo, + JacksonUtil.toJsonStr(replyHeader.getData()), 10); + } + ack.acknowledge(); + } + } + + @KafkaListener(id = "vehicle_base_info", topicPattern = KafkaTopicConst.VEHICLE_INFO) public void handleVehicleInfo(ConsumerRecord consumerRecord, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { Optional message = Optional.ofNullable(consumerRecord.value()); @@ -41,6 +64,7 @@ public class VehicleKafkaConsumer { String vid = KafkaUtil.getVIdByTopic(topic, 3); if (CharSequenceUtil.isEmpty(vid)) return; + // 车俩在线状态 RedisUtil.setValueWithExpire(RedisKeyConst.VEHICLE_STATUS + vid, System.currentTimeMillis(), 30); @@ -54,17 +78,21 @@ public class VehicleKafkaConsumer { // log.info("[kafka] ==> Topic: {}, Message: {}", topic, jsonObject); VehicleInfoWebSocket.sendBroadcast(vid, 1, jsonObject.toString()); + Map map = BeanUtil.beanToMap(jsonObject); VehicleInfoReport vehicleInfoReport = JSONUtil.toBean(msg, VehicleInfoReport.class); vehicleInfoReport.setVid(vid); vehicleInfoReport.setCreatedAt(LocalDateTime.now()); + // 车俩电池容量 RedisUtil.setValue(RedisKeyConst.VEHICLE_POWER + vid ,vehicleInfoReport.getPower()); + // 车俩实时状态信息(档位、水位、充电状态、速度、电机温度、垃圾豆容量等) + RedisUtil.putHashAll(RedisKeyConst.VEHICLE_STATUS_INFO + vid, map, 30, TimeUnit.SECONDS); mongoTemplate.save(vehicleInfoReport, "v_vehicle_info"); ack.acknowledge(); } } - @KafkaListener(id = "vehicle_gps_info", topicPattern = "zxwl.vehicle.*.gps") + @KafkaListener(id = "vehicle_gps_info", topicPattern = KafkaTopicConst.VEHICLE_GPS) public void handleGPSInfo(ConsumerRecord consumerRecord, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { Optional message = Optional.ofNullable(consumerRecord.value()); @@ -93,7 +121,7 @@ public class VehicleKafkaConsumer { } } - @KafkaListener(id = "vehicle_fault_info", topicPattern = "zxwl.vehicle.*.fault") + @KafkaListener(id = "vehicle_fault_info", topicPattern = KafkaTopicConst.VEHICLE_FAULT) public void handleVehicleWarningInfo(ConsumerRecord record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { Optional message = Optional.ofNullable(record.value()); @@ -101,7 +129,6 @@ public class VehicleKafkaConsumer { String msg = message.get(); String vid = KafkaUtil.getVIdByTopic(topic, 3); if (CharSequenceUtil.isEmpty(vid)) return; -// log.info("[kafka] ==> Topic: {}, Message: {}", topic, msg); VehicleWarningWebSocket.sendBroadcast(vid, 1, msg); VehicleFaultInfo vehicleFaultInfo = JSONUtil.toBean(msg, VehicleFaultInfo.class); vehicleFaultInfo.setVin(vid); @@ -113,11 +140,11 @@ public class VehicleKafkaConsumer { } } - @KafkaListener(id = "test", topicPattern = "zxwl.vehicle.*.test") - public void listener(ConsumerRecord record, Acknowledgment ack, - @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { - log.info("kafka收到的消息-topic:{}, data:{}", topic, record.value()); - ack.acknowledge(); - } +// @KafkaListener(id = "test", topicPattern = "zxwl.vehicle.*.test") +// public void listener(ConsumerRecord record, Acknowledgment ack, +// @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) { +// log.info("kafka收到的消息-topic:{}, data:{}", topic, record.value()); +// ack.acknowledge(); +// } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/FaultRepairMapper.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/FaultRepairMapper.java new file mode 100644 index 0000000..630c6ac --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/FaultRepairMapper.java @@ -0,0 +1,29 @@ +package org.zxwl.sweeper.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.zxwl.sweeper.entity.FaultRepair; +import org.zxwl.sweeper.model.faultRepair.FaultRepairQuery; +import org.zxwl.sweeper.model.faultRepair.FaultRepairStatus; +import org.zxwl.sweeper.model.faultRepair.FaultRepairVo; + +import java.util.List; + +@Mapper +public interface FaultRepairMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页参数 + * @param query 查询参数 + * @return Page + */ + Page queryPage(@Param("page") Page page, @Param("query") FaultRepairQuery query); + + @Select("select status, count(*) count from info_fault_repair where deleted = 0 group by status") + List selectData(); +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/TaskRecordMapper.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/TaskRecordMapper.java index f49764d..b21c6f3 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/TaskRecordMapper.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/TaskRecordMapper.java @@ -5,9 +5,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.zxwl.sweeper.entity.TaskRecord; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.zxwl.sweeper.entity.TaskRecord; +import org.zxwl.sweeper.model.taskRecord.TaskStatusDataVo; + +import java.time.LocalDateTime; +import java.util.List; /** *

@@ -22,4 +26,6 @@ public interface TaskRecordMapper extends BaseMapper { Page selectAllByPage(@Param("page") IPage page, @Param(Constants.WRAPPER) Wrapper wrapper); + + List getDataList(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/VehicleGridMapper.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/VehicleGridMapper.java deleted file mode 100644 index 16997ac..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/mapper/VehicleGridMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.zxwl.sweeper.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.zxwl.sweeper.entity.VehicleGrid; -import org.apache.ibatis.annotations.Mapper; - -/** - *

- * Mapper 接口 - *

- * - * @author Ben - * @since 2025-06-20 - */ -@Mapper -public interface VehicleGridMapper extends BaseMapper { - - - -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/VehicleInfoAPPVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/VehicleInfoAPPVO.java index 6fc1445..425a192 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/VehicleInfoAPPVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/VehicleInfoAPPVO.java @@ -18,6 +18,10 @@ public class VehicleInfoAPPVO { * ID */ private Long id; + + /** + * 车俩vin + */ private String vid; /** @@ -39,6 +43,7 @@ public class VehicleInfoAPPVO { * 状态 0 离线 1 在线 */ private Integer status; + /** * 故障状态 */ @@ -50,20 +55,19 @@ public class VehicleInfoAPPVO { if (CharSequenceUtil.isNotEmpty(vehicleInfo.getPicture())) { this.picture = EnvUtil.getProperty("minio.pathPrefix") + vehicleInfo.getPicture(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid()))) { + if (RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_FAULT_STATUS + vehicleInfo.getVid()))) { + if (RedisUtil.exist(RedisKeyConst.VEHICLE_FAULT_STATUS + vehicleInfo.getVid())) { this.faultStatus = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.faultStatus = OnlineEnum.OFFLINE.getValue(); } this.power = String.valueOf(RedisUtil.getValue(RedisKeyConst.VEHICLE_POWER + vehicleInfo.getVid()).orElse("")); - } } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitInfoVO.java index 18be5ff..5260ce4 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitInfoVO.java @@ -38,11 +38,15 @@ public class CockpitInfoVO { * 异常状态 0 正常 1 异常 */ private Integer faultStatus; - private Integer enableStatus; /** * 启用状态 0 停用 1 启用 */ + private Integer enableStatus; + + /** + * 在线状态 0 离线 1 在线 + */ private Integer status; /** @@ -68,9 +72,10 @@ public class CockpitInfoVO { if (CharSequenceUtil.isNotEmpty(cockpitInfo.getPicture())) { this.picture = EnvUtil.getProperty("minio.pathPrefix") + cockpitInfo.getPicture(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.COCKPIT_ONLINE_PREFIX + cockpitInfo.getCid()))) { + + if (RedisUtil.exist(RedisKeyConst.COCKPIT_ONLINE_PREFIX + cockpitInfo.getCid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitStatisticsVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitStatisticsVO.java new file mode 100644 index 0000000..27e084e --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/CockpitStatisticsVO.java @@ -0,0 +1,12 @@ +package org.zxwl.sweeper.model.cockpitInfo; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CockpitStatisticsVO { + private long onlineCount; // 驾驶舱在线数量 + private long remoteCtrlCount; // 远控数量 + private long idleCount; // 空闲数量 +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/dp/CockpitStatusInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/dp/CockpitStatusInfoVO.java index 4f42cfd..b712edb 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/dp/CockpitStatusInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/cockpitInfo/dp/CockpitStatusInfoVO.java @@ -30,9 +30,9 @@ public class CockpitStatusInfoVO { if (cockpitInfo != null) { this.name = cockpitInfo.getName(); this.faultStatus = cockpitInfo.getFaultStatus(); - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.COCKPIT_ONLINE_PREFIX + cockpitInfo.getCid()))) { + if (RedisUtil.exist(RedisKeyConst.COCKPIT_ONLINE_PREFIX + cockpitInfo.getCid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/electricFence/ElectricFenceQuery.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/electricFence/ElectricFenceQuery.java index 86a4d33..104e7a8 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/electricFence/ElectricFenceQuery.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/electricFence/ElectricFenceQuery.java @@ -29,7 +29,8 @@ public class ElectricFenceQuery extends BaseQuery { return new LambdaQueryWrapper() .like(CharSequenceUtil.isNotEmpty(name), ElectricFence::getName, name) .eq(Objects.nonNull(vehicleId), ElectricFence::getVehicleId, vehicleId) - .eq(Objects.nonNull(type), ElectricFence::getType, type); + .eq(Objects.nonNull(type), ElectricFence::getType, type) + .orderByDesc(ElectricFence::getCreated); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairAllocateDTO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairAllocateDTO.java new file mode 100644 index 0000000..62ef03b --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairAllocateDTO.java @@ -0,0 +1,31 @@ +package org.zxwl.sweeper.model.faultRepair; + +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairAllocateDTO { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空") + private Long id; + + /** + * 维修人员id + */ + @NotNull(message = "维修人员id") + private Long assignToUserId; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDTO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDTO.java new file mode 100644 index 0000000..b1f32ba --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDTO.java @@ -0,0 +1,67 @@ +package org.zxwl.sweeper.model.faultRepair; + +import cn.hutool.core.bean.BeanUtil; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.PositiveOrZero; +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.sweeper.entity.FaultRepair; + +import java.util.List; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairDTO { + + /** + * ID + */ + @NotNull(groups = UpdateGroup.class) + @PositiveOrZero(groups = UpdateGroup.class) + private Long id; + + /** + * 标题 + */ + @NotBlank(message = "标题不能为空") + private String title; + + /** + * 故障详细描述 + */ + @NotBlank(message = "故障详细描述不能为空") + private String description; + + /** + * 优先级 + */ + @NotNull(message = "优先级不能为空") + private Integer priority; + + /** + * 故障图片或者视频集合 + */ + private List fileIds; + + /** + * 备注 + */ + private String remark; + + public FaultRepair toFaultRepair() { + FaultRepair faultRepair = new FaultRepair(); + BeanUtil.copyProperties(this, faultRepair); + return faultRepair; + } +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDataVo.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDataVo.java new file mode 100644 index 0000000..db40f1e --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairDataVo.java @@ -0,0 +1,27 @@ +package org.zxwl.sweeper.model.faultRepair; + +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairDataVo { + /** + * 代办数量 + */ + private Long pendCount; + + /** + * 处理中数量 + */ + private Long processCount; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairQuery.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairQuery.java new file mode 100644 index 0000000..24f3b4d --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairQuery.java @@ -0,0 +1,26 @@ +package org.zxwl.sweeper.model.faultRepair; + +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.mybatis.page.BaseQuery; +import org.zxwl.sweeper.entity.FaultRepair; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairQuery extends BaseQuery { + + private String title; + + private Integer status; + + private Integer priority; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairStatus.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairStatus.java new file mode 100644 index 0000000..64697fa --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairStatus.java @@ -0,0 +1,28 @@ +package org.zxwl.sweeper.model.faultRepair; + +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairStatus { + + /** + * 状态 + */ + private Integer status; + + /** + * 状态统计 + */ + private Long count; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairVo.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairVo.java new file mode 100644 index 0000000..06f8a7b --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/faultRepair/FaultRepairVo.java @@ -0,0 +1,109 @@ +package org.zxwl.sweeper.model.faultRepair; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + *

+ * 故障报修表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +public class FaultRepairVo { + + /** + * ID + */ + private Long id; + + + /** + * 标题 + */ + private String title; + + /** + * 故障详细描述 + */ + private String description; + + /** + * 报修人id + */ + private Long reportUserId; + + /** + * 报修人姓名 + */ + private String reportName; + + /** + * 报修人手机号 + */ + private String reportPhone; + + /** + * 优先级 + */ + private Integer priority; + + /** + * 优先级中文 + */ + private String priorityCn; + + /** + * 状态 + */ + private Integer status; + + /** + * 状态中文 + */ + private String statusCn; + + /** + * 指派给维修人员ID + */ + private Long assignToUserId; + + /** + * 指派给维修人员姓名 + */ + private String assignName; + + /** + * 维修人员手机号 + */ + private String assignPhone; + + /** + * 维修结果描述 + */ + private String repairResult; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime created; + + /** + * 修改时间 + */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime last; +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/safetyOfficer/SafetyOfficerQuery.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/safetyOfficer/SafetyOfficerQuery.java index 4e6ae53..9a2797d 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/safetyOfficer/SafetyOfficerQuery.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/safetyOfficer/SafetyOfficerQuery.java @@ -41,7 +41,7 @@ public class SafetyOfficerQuery extends BaseQuery { .like(CharSequenceUtil.isNotEmpty(key), SafetyOfficer::getPhone, key).or() .like(CharSequenceUtil.isNotEmpty(key), SafetyOfficer::getDriverCardNo, key).or() .like(CharSequenceUtil.isNotEmpty(key), SafetyOfficer::getLoginName, key).or() - + .orderByDesc(SafetyOfficer::getCreated) ; } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskInfo/TaskInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskInfo/TaskInfoVO.java index 0482f2c..c6590f8 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskInfo/TaskInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskInfo/TaskInfoVO.java @@ -23,6 +23,10 @@ public class TaskInfoVO { * 任务路径 */ private Long routeId; + + /** + * 路径名称 + */ private String routeName; /** @@ -39,6 +43,10 @@ public class TaskInfoVO { * 任务车辆 */ private Long vehicleId; + + /** + * 车俩名称 + */ private String vehicleName; /** diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatisticsVo.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatisticsVo.java new file mode 100644 index 0000000..f056421 --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatisticsVo.java @@ -0,0 +1,15 @@ +package org.zxwl.sweeper.model.taskRecord; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class TaskStatisticsVo { + private long count; // 当日任务总数 + private long unExecutedCount; // 当日待执行任务总数 + private long pendingCount; // 当日执行中任务总数 + private long abnormalCount; // 当日异常任务总数 + private long completionCount; // 当日任务完成总数 + private long completionRate; // 任务完成率(当日完成数/总数) +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatusDataVo.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatusDataVo.java new file mode 100644 index 0000000..b5fc400 --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/taskRecord/TaskStatusDataVo.java @@ -0,0 +1,11 @@ +package org.zxwl.sweeper.model.taskRecord; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class TaskStatusDataVo { + private int status; + private long count; +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleGrid/VehicleGridInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleGrid/VehicleGridInfoVO.java deleted file mode 100644 index 714029e..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleGrid/VehicleGridInfoVO.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.zxwl.sweeper.model.vehicleGrid; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class VehicleGridInfoVO { - - private String label; //格口标签 - private String value; //锁编号 -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleInfoVO.java index 62cdaff..dcaa810 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleInfoVO.java @@ -94,9 +94,9 @@ public class VehicleInfoVO { if (CharSequenceUtil.isNotEmpty(vehicleInfo.getPicture())) { this.picture = EnvUtil.getProperty("minio.pathPrefix") + vehicleInfo.getPicture(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid()))) { + if (RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleStatisticsVo.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleStatisticsVo.java new file mode 100644 index 0000000..eea8a5d --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/VehicleStatisticsVo.java @@ -0,0 +1,13 @@ +package org.zxwl.sweeper.model.vehicleInfo; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class VehicleStatisticsVo { + private long count; // 车辆总数 + private long onlineCount; // 在线数 + private long offlineCount; // 离线数 + private long faultCount; // 故障数 +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/app/VehicleSimpleInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/app/VehicleSimpleInfoVO.java index c9518f2..bf460c1 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/app/VehicleSimpleInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/app/VehicleSimpleInfoVO.java @@ -37,9 +37,13 @@ public class VehicleSimpleInfoVO { private String picture; /** - * 状态 0 离线 1 在线 + * 在线状态 0 离线 1 在线 */ private Integer status; + + /** + * 故障状态 + */ private Integer faultStatus; public VehicleSimpleInfoVO(VehicleInfo vehicleInfo) { @@ -48,14 +52,14 @@ public class VehicleSimpleInfoVO { if (CharSequenceUtil.isNotEmpty(vehicleInfo.getPicture())) { this.picture = EnvUtil.getProperty("minio.pathPrefix") + vehicleInfo.getPicture(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid()))) { + if (RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_FAULT_STATUS + vehicleInfo.getVid()))) { + if (RedisUtil.exist(RedisKeyConst.VEHICLE_FAULT_STATUS + vehicleInfo.getVid())) { this.faultStatus = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.faultStatus = OnlineEnum.OFFLINE.getValue(); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/dp/VehicleStatusInfoVO.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/dp/VehicleStatusInfoVO.java index 5e7d2d5..923d172 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/dp/VehicleStatusInfoVO.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/model/vehicleInfo/dp/VehicleStatusInfoVO.java @@ -29,12 +29,18 @@ public class VehicleStatusInfoVO { public VehicleStatusInfoVO(VehicleInfo vehicleInfo) { if (vehicleInfo != null) { this.name = vehicleInfo.getName(); -// this.faultStatus = vehicleInfo.getFaultStatus(); - if(Boolean.TRUE.equals(RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid()))) { + + if (RedisUtil.exist(RedisKeyConst.VEHICLE_STATUS + vehicleInfo.getVid())) { this.status = OnlineEnum.ONLINE.getValue(); - }else { + } else { this.status = OnlineEnum.OFFLINE.getValue(); } + + if (RedisUtil.exist(RedisKeyConst.VEHICLE_FAULT_STATUS + vehicleInfo.getVid())) { + this.faultStatus = OnlineEnum.ONLINE.getValue(); + } else { + this.faultStatus = OnlineEnum.OFFLINE.getValue(); + } } } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CockpitInfoService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CockpitInfoService.java index b23de0d..92c1671 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CockpitInfoService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CockpitInfoService.java @@ -3,10 +3,7 @@ package org.zxwl.sweeper.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.zxwl.sweeper.entity.CockpitInfo; -import org.zxwl.sweeper.model.cockpitInfo.CockpitDropVO; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoDTO; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoQuery; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoVO; +import org.zxwl.sweeper.model.cockpitInfo.*; import org.zxwl.sweeper.model.cockpitInfo.dp.CockpitSimpleInfoQuery; import org.zxwl.sweeper.model.cockpitInfo.dp.CockpitStatusInfoVO; @@ -15,7 +12,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -24,15 +21,24 @@ import java.util.Set; public interface CockpitInfoService extends IService { Page list(CockpitInfoQuery query); //列表 + boolean add(CockpitInfoDTO dto); //新增 + boolean update(CockpitInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 + boolean enable(Long id); //启用 + boolean disable(Long id); //停用 + List bindingList(); //驾驶舱绑定下拉列表 + List dropList(); //驾驶舱下拉列表 Long onlineCount(); //在线数 Page listStatusInfo(CockpitSimpleInfoQuery query); //列表 + + CockpitStatisticsVO getData(); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CtrlCommandService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CtrlCommandService.java deleted file mode 100644 index cc77a8f..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/CtrlCommandService.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.zxwl.sweeper.service; - -import org.zxwl.sweeper.model.app.ctrl.CtrlCommand; - -public interface CtrlCommandService { - - void sendCommand(CtrlCommand command); //发送控制命令 -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DispatchRecordService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DispatchRecordService.java index 1786840..4679d15 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DispatchRecordService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DispatchRecordService.java @@ -16,7 +16,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -25,15 +25,21 @@ import java.util.Set; public interface DispatchRecordService extends IService { Page list(DispatchRecordQuery query); //列表 + boolean add(DispatchRecordDTO dto); //新增 + boolean update(DispatchRecordDTO dto); //编辑 + boolean delete(Set ids); //删除 + VehicleIdVO getVehicleIdByCid(String cid); //根据座舱ID获取车辆ID + DispatchRecordVO getDispatchRecordByCid(String cid); //根据cid获取调度信息 List confirmRemote(RemoteCommand remoteCommand); //确认远控 boolean endRemote(RemoteCommand remoteCommand); //结束远控 + boolean confirmAutoDrive(RemoteCommand remoteCommand); //确认自动驾驶 boolean takeOver(String cid, String vid); //远程接管 diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DpHomeService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DpHomeService.java index b81a609..05e5bda 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DpHomeService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/DpHomeService.java @@ -12,7 +12,9 @@ import java.util.List; public interface DpHomeService { Page listCockpitStatus(CockpitSimpleInfoQuery query); + Page listVehicleStatus(VehicleSimpleInfoQuery query); + List listDispatchRecord(); // List listVehicleWarning(); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/ElectricFenceService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/ElectricFenceService.java index 1bf9953..c846da4 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/ElectricFenceService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/ElectricFenceService.java @@ -11,7 +11,7 @@ import java.util.List; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -20,8 +20,11 @@ import java.util.List; public interface ElectricFenceService extends IService { Page list(ElectricFenceQuery query); //列表 + boolean add(ElectricFenceDTO dto); //新增 + boolean update(ElectricFenceDTO dto); //编辑 + boolean delete(List ids); //删除 // List listElectricFenceByCid(); //查询电子围栏 diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/FaultRepairService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/FaultRepairService.java new file mode 100644 index 0000000..6bbbf58 --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/FaultRepairService.java @@ -0,0 +1,28 @@ +package org.zxwl.sweeper.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.zxwl.sweeper.entity.FaultRepair; +import org.zxwl.sweeper.model.faultRepair.*; + +/** + *

+ * 接口 + *

+ * + * @author zy + * @since 2025-09-19 + */ +public interface FaultRepairService extends IService { + Page queryPage(FaultRepairQuery query); // 分页查询 + + FaultRepairDataVo data(); // 统计代办和处理中总数量 + + boolean add(FaultRepairDTO faultRepairDTO); + + boolean edit(FaultRepairDTO faultRepairDTO); + + boolean assign(FaultRepairAllocateDTO faultRepairAllocateDTO); + + boolean updateByStatus(Long id, Integer status); +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/GatewayInfoService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/GatewayInfoService.java index 038ac5a..71eac9d 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/GatewayInfoService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/GatewayInfoService.java @@ -12,7 +12,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -20,9 +20,13 @@ import java.util.Set; */ public interface GatewayInfoService extends IService { Page list(GatewayInfoQuery query); //列表 + List listCameraUrls(String vid); //根据vid查询摄像头地址 + boolean add(GatewayInfoDTO dto); //新增 + boolean update(GatewayInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 boolean bindVehicle(Long id, String vid); //绑定车辆 diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/RouteInfoService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/RouteInfoService.java index 1f5bf73..595ffcb 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/RouteInfoService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/RouteInfoService.java @@ -11,24 +11,32 @@ import java.util.List; public interface RouteInfoService extends IService { Page listRouteInfo(RouteInfoAPPQuery routeInfoAPPQuery); //根据VID获取车辆的路径信息 + List routeDropList(String vid); //根据VID获取车辆的路径下拉列表 RouteInfoDetailVO routeInfoDetail(Long id); //路径详情 List listRoutePosition(String rid); //根据路径ID获取路径点的信息 + List listRoutePositionByVid(String vid); //根据vid获取路径点的信息 + boolean uploadFile(RouteUploadDTO routeUploadDTO); //上传路径文件 + void downloadFile(Long id); //根据路径ID下载路径文件 + RoutePath getRoutePath(Long id); //根据路径ID获取路径文件 boolean sendRouteCommand(RouteCommandDTO routeCommandDTO); //发送路径命令 - Page list(RouteInfoQuery query); //列表 + boolean add(RouteInfoDTO dto); //路径新增 + boolean update(RouteInfoDTO dto); //路径编辑 + boolean delete(List ids); //路径删除 boolean enable(Long id); //路径启用 + boolean disable(Long id); //路径停用 } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/SafetyOfficerService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/SafetyOfficerService.java index 70bd625..d5db042 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/SafetyOfficerService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/SafetyOfficerService.java @@ -11,7 +11,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -20,7 +20,10 @@ import java.util.Set; public interface SafetyOfficerService extends IService { Page list(SafetyOfficerQuery query); //列表 + boolean add(SafetyOfficerDTO dto); //新增 + boolean update(SafetyOfficerDTO dto); //编辑 + boolean delete(Set ids); //删除 } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskInfoService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskInfoService.java index 441ac4b..a43a96d 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskInfoService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskInfoService.java @@ -12,7 +12,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -21,9 +21,13 @@ import java.util.Set; public interface TaskInfoService extends IService { Page list(TaskInfoQuery query); //列表 + TaskInfoVO detail(Long id); //详情 + boolean add(TaskInfoDTO dto); //新增 + boolean update(TaskInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 TaskInfoAPPVO currentTaskInfo(Long vehicleId); //当前任务 diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskRecordService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskRecordService.java index b84c35b..4d73b86 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskRecordService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/TaskRecordService.java @@ -5,12 +5,13 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.zxwl.sweeper.entity.TaskRecord; import org.zxwl.sweeper.model.taskRecord.TaskRecordQuery; import org.zxwl.sweeper.model.taskRecord.TaskRecordVO; +import org.zxwl.sweeper.model.taskRecord.TaskStatisticsVo; import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -19,9 +20,15 @@ import java.util.Set; public interface TaskRecordService extends IService { Page list(TaskRecordQuery query); //列表 -// TaskInfoVO detail(Long id); //详情 + + // TaskInfoVO detail(Long id); //详情 boolean add(Long taskId, Long vehicleId); //新增 + boolean updateRecordCompleted(Long taskId, Long vehicleId); //更新完成记录 + boolean updateRecordException(Long taskId, Long vehicleId); //更新失败记录 + boolean delete(Set ids); //删除 + + TaskStatisticsVo getData(); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleCardService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleCardService.java index 45717fa..f8b95a8 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleCardService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleCardService.java @@ -9,6 +9,7 @@ public interface VehicleCardService { List listVehicleCard(String cid); //车辆卡片列表 - List submitRemoteControl(RemoteCommand remoteCommand); - boolean submitAutoControl(RemoteCommand remoteCommand); + List submitRemoteControl(RemoteCommand remoteCommand); //确认远程 + + boolean submitAutoControl(RemoteCommand remoteCommand); //确认自动驾驶 } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleFaultService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleFaultService.java index b244435..71834ae 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleFaultService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleFaultService.java @@ -12,7 +12,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -21,7 +21,9 @@ import java.util.Set; public interface VehicleFaultService extends IService { Page list(VehicleFaultQuery query); //列表 + boolean add(VehicleFaultDTO dto); //新增 + boolean delete(Set ids); //删除 List listByVid(String vid); //根据vid查询故障信息 diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleGridService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleGridService.java deleted file mode 100644 index 2929558..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleGridService.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.zxwl.sweeper.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import org.zxwl.sweeper.entity.VehicleGrid; -import org.zxwl.sweeper.model.vehicleGrid.VehicleGridInfoVO; - -import java.util.List; - -/** - *

- * 服务类 - *

- * - * @author Ben - * @since 2025-06-20 - */ -public interface VehicleGridService extends IService { - - List listGridByVehicle(String vid); - -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleInfoService.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleInfoService.java index 34f61b8..2dad638 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleInfoService.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/VehicleInfoService.java @@ -15,7 +15,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -28,15 +28,25 @@ public interface VehicleInfoService extends IService { VehicleSimpleInfoVO getVehicleSimpleInfo(Long id); //车辆详情简化 Page list(VehicleInfoQuery query); //列表 + List listDrop(); //下拉菜单 + List sidebar(); //侧边栏 + List bindingList(); //下拉菜单 + boolean add(VehicleInfoDTO dto); //新增 + boolean update(VehicleInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 + boolean enable(Long id); //启用 + boolean disable(Long id); //停用 + boolean bindCockpit(Long id, String cid); //绑定驾驶舱 + boolean hasGateway(String vid); //判断是否具有网关 Long onlineCount(); //在线数 @@ -46,4 +56,6 @@ public interface VehicleInfoService extends IService { Page listStatusInfo(VehicleSimpleInfoQuery query); //车辆状态列表 boolean exitVehicleInfo(String vid); //是否存在车辆信息 + + VehicleStatisticsVo getData(); } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CockpitInfoServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CockpitInfoServiceImpl.java index 5e1465d..ad6e257 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CockpitInfoServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CockpitInfoServiceImpl.java @@ -15,16 +15,16 @@ import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.RedisKeyConst; import org.zxwl.sweeper.entity.CockpitInfo; +import org.zxwl.sweeper.entity.DispatchRecord; import org.zxwl.sweeper.entity.VehicleInfo; +import org.zxwl.sweeper.enums.DispatchStatusEnum; import org.zxwl.sweeper.enums.EnableEnum; import org.zxwl.sweeper.enums.OnlineEnum; import org.zxwl.sweeper.mapper.CockpitInfoMapper; +import org.zxwl.sweeper.mapper.DispatchRecordMapper; import org.zxwl.sweeper.mapper.VehicleInfoMapper; import org.zxwl.sweeper.model.cache.DeviceStatusCache; -import org.zxwl.sweeper.model.cockpitInfo.CockpitDropVO; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoDTO; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoQuery; -import org.zxwl.sweeper.model.cockpitInfo.CockpitInfoVO; +import org.zxwl.sweeper.model.cockpitInfo.*; import org.zxwl.sweeper.model.cockpitInfo.dp.CockpitSimpleInfoQuery; import org.zxwl.sweeper.model.cockpitInfo.dp.CockpitStatusInfoVO; import org.zxwl.sweeper.service.CockpitInfoService; @@ -36,7 +36,7 @@ import java.util.stream.Collectors; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -49,6 +49,7 @@ public class CockpitInfoServiceImpl extends ServiceImpl ids) { - if (exitsBindingVehicle(ids)) { - throw new BusinessException(SystemErrorCode.ELETE_FAILURE_EXIST_BINDING_VEHICLE); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.in(CockpitInfo::getId, ids); + wrapper.eq(CockpitInfo::getEnableStatus, EnableEnum.ENABLE.getValue()); + if (exists(wrapper)) { + throw new BusinessException(SystemErrorCode.COCKPIT_STATUS_EXIST); } return cockpitInfoMapper.deleteByIds(ids) > 0; } - private boolean exitsBindingVehicle(Set ids) { - List cidList = cockpitInfoMapper.selectBatchIds(ids).stream().map(CockpitInfo::getCid).toList(); - for (String cid : cidList) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(VehicleInfo::getCid, cid); - if (vehicleInfoMapper.exists(queryWrapper)) { - return true; - } - } - return false; - } - - private boolean exitsBindingVehicle(Long id) { - CockpitInfo cockpitInfo = cockpitInfoMapper.selectById(id); - if (cockpitInfo == null) { - return false; - } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(VehicleInfo::getCid, cockpitInfo.getCid()); - return vehicleInfoMapper.exists(queryWrapper); - } - @Override public boolean enable(Long id) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -132,9 +114,24 @@ public class CockpitInfoServiceImpl extends ServiceImpl vehicleWrapper = new LambdaQueryWrapper<>(); + vehicleWrapper.eq(VehicleInfo::getCid, cockpitInfo.getCid()); + vehicleWrapper.eq(VehicleInfo::getEnableStatus, EnableEnum.ENABLE.getValue()); + if (vehicleInfoMapper.exists(vehicleWrapper)) { + throw new BusinessException(SystemErrorCode.ELETE_FAILURE_EXIST_BINDING_VEHICLE); } + + // 判断该驾驶舱是否存在远程控制车辆 + LambdaQueryWrapper dispatchRecordWrapper = new LambdaQueryWrapper<>(); + dispatchRecordWrapper.eq(DispatchRecord::getCid, cockpitInfo.getCid()); + dispatchRecordWrapper.ne(DispatchRecord::getStatus, DispatchStatusEnum.DISPATCH_END.getValue()); + if (dispatchRecordMapper.exists(dispatchRecordWrapper)) { + throw new BusinessException(SystemErrorCode.VEHICLE_DISPATCH_STARTING); + } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(Objects.nonNull(id), CockpitInfo::getId, id); updateWrapper.set(CockpitInfo::getEnableStatus, EnableEnum.DISABLE.getValue()); @@ -170,4 +167,21 @@ public class CockpitInfoServiceImpl extends ServiceImpl(page.getCurrent(), page.getSize(), page.getTotal()).setRecords(list); } + @Override + public CockpitStatisticsVO getData() { + long count = cockpitInfoMapper.selectCount(Wrappers.query(CockpitInfo.class).lambda() + .eq(CockpitInfo::getEnableStatus, EnableEnum.ENABLE.getValue())); + + long remoteCtrlCount = dispatchRecordMapper.selectCount(Wrappers.query(DispatchRecord.class).lambda() + .ne(DispatchRecord::getStatus, DispatchStatusEnum.DISPATCH_END.getValue())); + + long onlineCount = RedisUtil.countKeysByPrefix(RedisKeyConst.COCKPIT_ONLINE_PREFIX); + + CockpitStatisticsVO statisticsVO = new CockpitStatisticsVO(); + statisticsVO.setOnlineCount(onlineCount); + statisticsVO.setRemoteCtrlCount(remoteCtrlCount); + statisticsVO.setIdleCount(count - onlineCount); + return statisticsVO; + } + } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CtrlCommandServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CtrlCommandServiceImpl.java deleted file mode 100644 index e74b6f6..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/CtrlCommandServiceImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.zxwl.sweeper.service.impl; - -import cn.hutool.json.JSONUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.zxwl.common.mqtt.handler.MqttMessageSender; -import org.zxwl.sweeper.constant.MqttTopicConst; -import org.zxwl.sweeper.model.app.ctrl.CtrlCommand; -import org.zxwl.sweeper.service.CtrlCommandService; - -@Slf4j -@Service -@RequiredArgsConstructor -public class CtrlCommandServiceImpl implements CtrlCommandService { - - //private final MqttInfoService mqttInfoService; - private final MqttMessageSender mqttMessageSender; - - @Override - public void sendCommand(CtrlCommand command) { - String jsonStr = JSONUtil.toJsonStr(command); - String topic = MqttTopicConst.generateVehicleCtrlTopic(command.getVid()); - log.info("发送命令 ==> {} : {}", topic, jsonStr); - //mqttInfoService.publishMessage(topic, jsonStr); - mqttMessageSender.send(topic, jsonStr); - } -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/DispatchRecordServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/DispatchRecordServiceImpl.java index f042ff4..fc4979b 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/DispatchRecordServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/DispatchRecordServiceImpl.java @@ -15,6 +15,7 @@ import org.zxwl.common.core.exception.BusinessException; import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.common.excel.utils.ExcelUtil; import org.zxwl.common.mqtt.handler.MqttMessageSender; +import org.zxwl.common.satoken.utils.LoginHelper; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.MqttTopicConst; import org.zxwl.sweeper.constant.RedisKeyConst; @@ -128,9 +129,9 @@ public class DispatchRecordServiceImpl extends ServiceImpl + * 服务实现类 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@RequiredArgsConstructor +@Service +public class FaultRepairServiceImpl extends ServiceImpl implements FaultRepairService { + + private final FaultRepairMapper faultRepairMapper; + + @Override + public Page queryPage(FaultRepairQuery query) { + return faultRepairMapper.queryPage(query.toPage(), query); + } + + @Override + public FaultRepairDataVo data() { + List list = faultRepairMapper.selectData(); + Map map = list.stream().collect(Collectors.groupingBy(FaultRepairStatus::getStatus, Collectors.counting())); + + FaultRepairDataVo vo = new FaultRepairDataVo();; + vo.setPendCount(map.getOrDefault(RepairStatusEnum.PEND.getValue(), 0L)); + vo.setProcessCount(map.getOrDefault(RepairStatusEnum.PROCESS.getValue(), 0L)); + return vo; + } + + @Override + public boolean add(FaultRepairDTO faultRepairDTO) { + return save(faultRepairDTO.toFaultRepair()); + } + + @Override + public boolean edit(FaultRepairDTO faultRepairDTO) { + return updateById(faultRepairDTO.toFaultRepair()); + } + + @Override + public boolean assign(FaultRepairAllocateDTO dto) { + return update(new LambdaUpdateWrapper() + .eq(FaultRepair::getId, dto.getId()) + .set(FaultRepair::getAssignToUserId, dto.getAssignToUserId())); + } + + @Override + public boolean updateByStatus(Long id, Integer status) { + return update(new LambdaUpdateWrapper() + .eq(FaultRepair::getId, id) + .set(FaultRepair::getStatus, status)); + } +} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/RouteInfoServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/RouteInfoServiceImpl.java index 2be2b15..a3c4cdd 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/RouteInfoServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/RouteInfoServiceImpl.java @@ -24,9 +24,11 @@ import org.zxwl.common.mqtt.handler.MqttMessageSender; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.MqttTopicConst; import org.zxwl.sweeper.constant.RedisKeyConst; -import org.zxwl.sweeper.constant.TopicNameConst; import org.zxwl.sweeper.entity.RouteInfo; +import org.zxwl.sweeper.entity.TaskInfo; +import org.zxwl.sweeper.enums.TaskStatusEnum; import org.zxwl.sweeper.mapper.RouteInfoMapper; +import org.zxwl.sweeper.mapper.TaskInfoMapper; import org.zxwl.sweeper.model.app.ctrl.BaseCommand; import org.zxwl.sweeper.model.reply.ReplyHeader; import org.zxwl.sweeper.model.reply.ResponseMessage; @@ -51,13 +53,14 @@ import java.util.concurrent.TimeUnit; public class RouteInfoServiceImpl extends ServiceImpl implements RouteInfoService { private final RouteInfoMapper routeInfoMapper; - //private final MqttInfoService mqttInfoService; + private final TaskInfoMapper taskInfoMapper; + // private final MqttInfoService mqttInfoService; private final MqttMessageSender mqttMessageSender; private final CurrentRouteService currentRouteService; @Value("${route-file.web-dir}") private String baseWebPath; -// @Value("${route-file.local-dir}") + // @Value("${route-file.local-dir}") private String baseLocalPath; @Override @@ -155,8 +158,8 @@ public class RouteInfoServiceImpl extends ServiceImpl replyHeader = new ReplyHeader<>(); - long seqNo = generateSeqNo(); + long seqNo = RandomUtil.randomLong(1, Integer.MAX_VALUE); replyHeader.requestInfo(seqNo, routeCommandDTO.toBaseCommand()); - String topic = MqttTopicConst.generateVehicleCtrlTopic(routeCommandDTO.getVid()); + String topic = MqttTopicConst.VehicleCtrl(routeCommandDTO.getVid()); String jsonStr = JacksonUtil.toJsonStr(replyHeader); log.info("发送命令 ==> {} : {}", topic, jsonStr); - //mqttInfoService.publishMessage(TopicNameConst.VehicleCtrl(routeCommandDTO.getVid()), jsonStr, 2); - mqttMessageSender.send(TopicNameConst.VehicleCtrl(routeCommandDTO.getVid()), 2, jsonStr); + //mqttInfoService.publishMessage(MqttTopicConst.VehicleCtrl(routeCommandDTO.getVid()), jsonStr, 2); + mqttMessageSender.send(MqttTopicConst.VehicleCtrl(routeCommandDTO.getVid()), 2, jsonStr); RedisUtil.setValueWithExpire(RedisKeyConst.ROUTE_KEY_PREFIX + routeCommandDTO.getVid(), routeCommandDTO.getRouteName(), 5 * 60 * 60L); @@ -203,10 +206,6 @@ public class RouteInfoServiceImpl extends ServiceImpl ids) { + // 判断路径信息是否存在已启用 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(RouteInfo::getId, ids); + wrapper.eq(RouteInfo::getStatus, 1); + if (exists(wrapper)) { + throw new BusinessException(SystemErrorCode.ROUTE_STATUS_EXIST); + } return routeInfoMapper.deleteByIds(ids) > 0; } @@ -295,13 +301,17 @@ public class RouteInfoServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(TaskInfo::getRouteId, id); + wrapper.eq(TaskInfo::getStatus, TaskStatusEnum.EXECUTING.getValue()); + if (taskInfoMapper.exists(wrapper)) { + throw new BusinessException(SystemErrorCode.ROUTE_TASK_EXIST); + } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(Objects.nonNull(id), RouteInfo::getId, id); updateWrapper.set(RouteInfo::getStatus, 0); return routeInfoMapper.update(updateWrapper) > 0; } - - public boolean saveRoute(RouteInfo routeInfo) { - return routeInfoMapper.insert(routeInfo) > 0; - } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/SafetyOfficerServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/SafetyOfficerServiceImpl.java index aed4227..ed035ae 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/SafetyOfficerServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/SafetyOfficerServiceImpl.java @@ -37,9 +37,6 @@ public class SafetyOfficerServiceImpl extends ServiceImpl 0; } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskInfoServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskInfoServiceImpl.java index 4e0338d..e5d0297 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskInfoServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskInfoServiceImpl.java @@ -13,9 +13,10 @@ import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.common.core.utils.TimeUtil; import org.zxwl.common.json.utils.JacksonUtil; import org.zxwl.common.mqtt.handler.MqttMessageSender; +import org.zxwl.common.satoken.utils.LoginHelper; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.RedisKeyConst; -import org.zxwl.sweeper.constant.TopicNameConst; +import org.zxwl.sweeper.constant.MqttTopicConst; import org.zxwl.sweeper.entity.RouteInfo; import org.zxwl.sweeper.entity.TaskInfo; import org.zxwl.sweeper.entity.VehicleInfo; @@ -43,7 +44,7 @@ import java.util.concurrent.TimeUnit; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -90,8 +91,7 @@ public class TaskInfoServiceImpl extends ServiceImpl i throw new BusinessException(SystemErrorCode.TASK_NAME_EXIST); } TaskInfo taskInfo = dto.toTaskInfo(); - //todo 临时 - taskInfo.setOperator("admin"); + taskInfo.setOperator(LoginHelper.getRealName()); return taskInfoMapper.insert(taskInfo) > 0; } @@ -117,10 +117,10 @@ public class TaskInfoServiceImpl extends ServiceImpl i if (existExecutingTask(ids)) { throw new BusinessException(SystemErrorCode.TASK_EXECUTING); } - return taskInfoMapper.deleteByIds(ids) > 0; } + //是否有正在执行中的任务 private boolean existExecutingTask(Set ids) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -164,12 +164,12 @@ public class TaskInfoServiceImpl extends ServiceImpl i String vid = getVidByVehicleId(taskInfo.getVehicleId()); ReplyHeader replyHeader = new ReplyHeader<>(); - RequestMessage requestMessage = new RequestMessage("start",taskPushInfo); - long seqNo = generateSeqNo(); + RequestMessage requestMessage = new RequestMessage("start", taskPushInfo); + long seqNo = RandomUtil.randomLong(1, Integer.MAX_VALUE); replyHeader.requestInfo(seqNo, requestMessage); - //mqttInfoService.publishMessage(TopicNameConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); - mqttMessageSender.send(TopicNameConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); + //mqttInfoService.publishMessage(MqttTopicConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); + mqttMessageSender.send(MqttTopicConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); Object o = tryGetObject(RedisKeyConst.TASK_RESPONSE + seqNo, 200, 25); if (o != null) { @@ -196,11 +196,11 @@ public class TaskInfoServiceImpl extends ServiceImpl i ReplyHeader replyHeader = new ReplyHeader<>(); RequestMessage requestMessage = new RequestMessage("stop", id); - long seqNo = generateSeqNo(); + long seqNo = RandomUtil.randomLong(1, Integer.MAX_VALUE); replyHeader.requestInfo(seqNo, requestMessage); - //mqttInfoService.publishMessage(TopicNameConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); - mqttMessageSender.send(TopicNameConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); + //mqttInfoService.publishMessage(MqttTopicConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); + mqttMessageSender.send(MqttTopicConst.TaskCtrl(vid), JacksonUtil.toJsonStr(replyHeader)); Object o = tryGetObject(RedisKeyConst.TASK_RESPONSE + seqNo, 200, 25); if (o != null) { @@ -231,10 +231,6 @@ public class TaskInfoServiceImpl extends ServiceImpl i return vehicleInfo.getVid(); } - private static long generateSeqNo() { - return RandomUtil.randomLong(1, Integer.MAX_VALUE); - } - private static Object tryGetObject(String key, int initDelay, int count) { if (count == 0) { return null; diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskRecordServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskRecordServiceImpl.java index 27d653e..7a07fa8 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskRecordServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/TaskRecordServiceImpl.java @@ -10,15 +10,22 @@ import org.zxwl.sweeper.enums.TaskStatusEnum; import org.zxwl.sweeper.mapper.TaskRecordMapper; import org.zxwl.sweeper.model.taskRecord.TaskRecordQuery; import org.zxwl.sweeper.model.taskRecord.TaskRecordVO; +import org.zxwl.sweeper.model.taskRecord.TaskStatisticsVo; +import org.zxwl.sweeper.model.taskRecord.TaskStatusDataVo; import org.zxwl.sweeper.service.TaskRecordService; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -49,11 +56,6 @@ public class TaskRecordServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(TaskRecord::getEndTime, LocalDateTime.now()); updateWrapper.set(TaskRecord::getStatus, TaskStatusEnum.COMPLETED.getValue()); @@ -78,4 +80,36 @@ public class TaskRecordServiceImpl extends ServiceImpl ids) { return taskRecordMapper.deleteByIds(ids) > 0; } + + @Override + public TaskStatisticsVo getData() { + LocalDate today = LocalDate.now(); + + List list = taskRecordMapper.getDataList(today.atStartOfDay(), today.plusDays(1).atStartOfDay()); + Map map = list.stream().collect(Collectors.toMap(TaskStatusDataVo::getStatus, TaskStatusDataVo::getCount)); + + long count = list.stream().mapToLong(TaskStatusDataVo::getCount).sum(); + long unExecutedCount = map.getOrDefault(TaskStatusEnum.UN_EXECUTED.getValue(), 0L); + long pendingCount = map.getOrDefault(TaskStatusEnum.EXECUTING.getValue(), 0L); + long completionCount = map.getOrDefault(TaskStatusEnum.COMPLETED.getValue(), 0L); + long abnormalCount = map.getOrDefault(TaskStatusEnum.EXCEPTION.getValue(), 0L); + + TaskStatisticsVo vo = new TaskStatisticsVo(); + vo.setCount(count); + vo.setCompletionRate(unExecutedCount); + vo.setPendingCount(pendingCount); + vo.setCompletionCount(completionCount); + vo.setAbnormalCount(abnormalCount); + vo.setCompletionRate(calculateRate(completionCount, count)); + return vo; + } + + private long calculateRate(long completionCount, long totalCount) { + if (totalCount == 0) { + return 0; + } + BigDecimal d1 = new BigDecimal(completionCount); + BigDecimal d2 = new BigDecimal(totalCount); + return d1.divide(d2, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).longValue(); + } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCardServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCardServiceImpl.java index 3cd995b..aa6aa86 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCardServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCardServiceImpl.java @@ -30,8 +30,7 @@ public class VehicleCardServiceImpl implements VehicleCardService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(VehicleInfo::getCid, cid); queryWrapper.eq(VehicleInfo::getEnableStatus, EnableEnum.ENABLE.getValue()); - List records = vehicleInfoMapper.selectList(queryWrapper).stream().map(VehicleCard::new).toList(); - return records; + return vehicleInfoMapper.selectList(queryWrapper).stream().map(VehicleCard::new).toList(); } @Override diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCtrlServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCtrlServiceImpl.java index 303f631..8397657 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCtrlServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleCtrlServiceImpl.java @@ -13,7 +13,7 @@ import org.zxwl.common.json.utils.JacksonUtil; import org.zxwl.common.mqtt.handler.MqttMessageSender; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.RedisKeyConst; -import org.zxwl.sweeper.constant.TopicNameConst; +import org.zxwl.sweeper.constant.MqttTopicConst; import org.zxwl.sweeper.model.app.baseInfo.VehicleReportInfo; import org.zxwl.sweeper.model.app.ctrl.BaseCommand; import org.zxwl.sweeper.model.app.ctrl.CtrlCommand; @@ -31,21 +31,19 @@ import java.util.concurrent.TimeUnit; @RequiredArgsConstructor public class VehicleCtrlServiceImpl implements VehicleCtrlService { - //private final MqttInfoService mqttInfoService; + // private final MqttInfoService mqttInfoService; private final MqttMessageSender mqttMessageSender; @Override public boolean sendCommand(CtrlCommand command) { - log.info("***********command************"); -// sendTestInfo(command); + // sendTestInfo(command); ReplyHeader replyHeader = new ReplyHeader<>(); - long seqNo = generateSeqNo(); + long seqNo = RandomUtil.randomLong(1, Integer.MAX_VALUE); replyHeader.requestInfo(seqNo, new BaseCommand(command)); - //mqttInfoService.publishMessage(TopicNameConst.VehicleCtrl(command.getVid()), - // JacksonUtil.toJsonStr(replyHeader), 2); - mqttMessageSender.send(TopicNameConst.VehicleCtrl(command.getVid()), 2, JacksonUtil.toJsonStr(replyHeader)); + // mqttInfoService.publishMessage(MqttTopicConst.VehicleCtrl(command.getVid()), JacksonUtil.toJsonStr(replyHeader), 2); + mqttMessageSender.send(MqttTopicConst.VehicleCtrl(command.getVid()), 2, JacksonUtil.toJsonStr(replyHeader)); Object o = tryGetObject(RedisKeyConst.VEHICLE_CTRL_RESPONSE + seqNo, 200, 25); if (o != null) { @@ -56,10 +54,6 @@ public class VehicleCtrlServiceImpl implements VehicleCtrlService { return false; } - private static long generateSeqNo() { - return RandomUtil.randomLong(1, Integer.MAX_VALUE); - } - private static Object tryGetObject(String key, int initDelay, int count) { if (count == 0) { return null; diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleFaultServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleFaultServiceImpl.java index 53d8610..a0d2f5c 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleFaultServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleFaultServiceImpl.java @@ -24,7 +24,7 @@ import java.util.stream.Collectors; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -56,11 +56,8 @@ public class VehicleFaultServiceImpl extends ServiceImpl listByVid(String vid) { - // TODO: 2025/06/04 minusDays临时 LocalDateTime todayStart = LocalDate.now().atStartOfDay(); LocalDateTime todayEnd = todayStart.plusDays(1).minusNanos(1); -// Date startDate = Date.from(todayStart.atZone(ZoneId.systemDefault()).toInstant()); -// Date endDate = Date.from(todayEnd.atZone(ZoneId.systemDefault()).toInstant()); Query query = Query.query(Criteria.where("createdAt") .gte(todayStart) @@ -69,8 +66,8 @@ public class VehicleFaultServiceImpl extends ServiceImpl faultInfoList = mongoTemplate.find(query, VehicleFaultInfo.class); return faultInfoList.stream().collect(Collectors.toMap(VehicleFaultInfo::getCode, - record -> record, (oldRecord, newRecord) -> - newRecord.getTimestamp() > oldRecord.getTimestamp() ? newRecord : oldRecord)) + record -> record, (oldRecord, newRecord) -> + newRecord.getTimestamp() > oldRecord.getTimestamp() ? newRecord : oldRecord)) .values().stream().map(VehicleFaultVO::new).toList(); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleGridServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleGridServiceImpl.java deleted file mode 100644 index c6ce41a..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleGridServiceImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.zxwl.sweeper.service.impl; - -import cn.hutool.core.text.CharSequenceUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.zxwl.sweeper.entity.VehicleGrid; -import org.zxwl.sweeper.entity.VehicleInfo; -import org.zxwl.sweeper.mapper.VehicleGridMapper; -import org.zxwl.sweeper.model.vehicleGrid.VehicleGridInfoVO; -import org.zxwl.sweeper.service.VehicleGridService; -import org.zxwl.sweeper.service.VehicleInfoService; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - *

- * 服务实现类 - *

- * - * @author Ben - * @since 2025-06-20 - */ -@Service -@RequiredArgsConstructor -public class VehicleGridServiceImpl extends ServiceImpl implements VehicleGridService { - - private final VehicleGridMapper vehicleGridMapper; - private final VehicleInfoService vehicleInfoService; - - @Override - public List listGridByVehicle(String vid) { - VehicleInfo vehicleInfo = vehicleInfoService.getOne(Wrappers.lambdaQuery(VehicleInfo.class).eq(VehicleInfo::getVid, vid)); - Long id = vehicleInfo.getId(); - VehicleGrid vehicleGrid = vehicleGridMapper.selectOne(Wrappers.lambdaQuery(VehicleGrid.class).eq(VehicleGrid::getVehicleId, id)); - String gridNum = vehicleGrid.getGridNum(); - if (CharSequenceUtil.isEmpty(gridNum)) { - return Collections.emptyList(); - } - - List list = new ArrayList<>(); - String[] gridNumSplit = gridNum.split(","); - int sum = 0; - for (int i = 0; i < gridNumSplit.length; i++) { - int num = Integer.parseInt(gridNumSplit[i]); - for (int j = 0; j < num; j++) { - VehicleGridInfoVO vehicleGridInfoVO = new VehicleGridInfoVO(); - sum++; - vehicleGridInfoVO.setLabel(String.valueOf(sum)); - vehicleGridInfoVO.setValue(String.valueOf(i + 1) + String.valueOf(j + 1)); - list.add(vehicleGridInfoVO); - } - } - return list; - } -} diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleInfoServiceImpl.java b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleInfoServiceImpl.java index 2114079..4ba9c02 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleInfoServiceImpl.java +++ b/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/service/impl/VehicleInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.zxwl.sweeper.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.text.CharSequenceUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -16,9 +17,14 @@ import org.zxwl.common.core.exception.BusinessException; import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.common.utils.RedisUtil; import org.zxwl.sweeper.constant.RedisKeyConst; -import org.zxwl.sweeper.entity.VehicleInfo; +import org.zxwl.sweeper.entity.*; +import org.zxwl.sweeper.enums.DispatchStatusEnum; import org.zxwl.sweeper.enums.EnableEnum; import org.zxwl.sweeper.enums.OnlineEnum; +import org.zxwl.sweeper.enums.TaskStatusEnum; +import org.zxwl.sweeper.mapper.DispatchRecordMapper; +import org.zxwl.sweeper.mapper.RouteInfoMapper; +import org.zxwl.sweeper.mapper.TaskInfoMapper; import org.zxwl.sweeper.mapper.VehicleInfoMapper; import org.zxwl.sweeper.model.VehicleInfoAPPVO; import org.zxwl.sweeper.model.app.vehicleCard.VehicleCard; @@ -37,7 +43,7 @@ import java.util.Set; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -49,6 +55,9 @@ import java.util.Set; public class VehicleInfoServiceImpl extends ServiceImpl implements VehicleInfoService { private final VehicleInfoMapper vehicleInfoMapper; + private final RouteInfoMapper routeInfoMapper; + private final DispatchRecordMapper dispatchRecordMapper; + private final TaskInfoMapper taskInfoMapper; private final CurrentRouteService currentRouteService; @PostConstruct @@ -69,9 +78,6 @@ public class VehicleInfoServiceImpl extends ServiceImpl listVehicleInfo(VehicleInfoQuery query) { Page page = vehicleInfoMapper.selectPage(query.toPage(), query.toWrapper()); List list = page.getRecords().stream().map(VehicleInfoAPPVO::new).toList(); -// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); -// queryWrapper.eq(VehicleInfo::getEnableStatus, 1); -// System.out.println("list.size() = " + list.size()); return new Page(page.getCurrent(), page.getSize(), page.getTotal()) .setRecords(list); } @@ -84,9 +90,6 @@ public class VehicleInfoServiceImpl extends ServiceImpl list(VehicleInfoQuery query) { -// UserInfo userInfo = LoginHelper.getLoginUser(); -// System.out.println("organizeId = " + userInfo.getOrganizeId()); - Page page = vehicleInfoMapper.selectPage(query.toPage(), query.toWrapper()); List list = page.getRecords().stream().map(VehicleInfoVO::new).toList(); return new Page(page.getCurrent(), page.getSize(), page.getTotal()).setRecords(list); @@ -121,7 +124,7 @@ public class VehicleInfoServiceImpl extends ServiceImpl ids) { + // 判断车辆状态是否启用 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(VehicleInfo::getId, ids); + wrapper.eq(VehicleInfo::getEnableStatus, EnableEnum.ENABLE.getValue()); + List list = vehicleInfoMapper.selectList(wrapper); + if (CollUtil.isEmpty(list)) { + throw new BusinessException(SystemErrorCode.VEHICLE_STATUS_EXIST); + } + List vids = list.stream().map(VehicleInfo::getVid).toList(); + + // 解除关联信息 + taskInfoMapper.delete(Wrappers.lambdaQuery(TaskInfo.class).in(TaskInfo::getVehicleId, ids)); + routeInfoMapper.delete(Wrappers.lambdaQuery(RouteInfo.class).in(RouteInfo::getVid, vids)); + currentRouteService.remove(Wrappers.lambdaQuery(CurrentRoute.class).in(CurrentRoute::getVid, vids)); + return vehicleInfoMapper.deleteByIds(ids) > 0; } @@ -162,6 +180,25 @@ public class VehicleInfoServiceImpl extends ServiceImpl taskWrapper = new LambdaQueryWrapper<>(); + taskWrapper.eq(TaskInfo::getVehicleId, id); + taskWrapper.eq(TaskInfo::getStatus, TaskStatusEnum.EXECUTING.getValue()); + if (taskInfoMapper.exists(taskWrapper)) { + throw new BusinessException(SystemErrorCode.DELETE_FAILURE_EXIST_UNDO_RECORD); + } + + // 判断车辆是否存在被驾驶舱远程控制 + LambdaUpdateWrapper dispatchWrapper = new LambdaUpdateWrapper<>(); + dispatchWrapper.eq(DispatchRecord::getVid, vehicleInfo.getVid()); + dispatchWrapper.eq(DispatchRecord::getStatus, DispatchStatusEnum.DISPATCH_BEGIN.getValue()); + if (dispatchRecordMapper.exists(dispatchWrapper)) { + throw new BusinessException(SystemErrorCode.VEHICLE_DISPATCH_BEGIN); + } + + // 车辆停用 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(Objects.nonNull(id), VehicleInfo::getId, id); updateWrapper.set(VehicleInfo::getEnableStatus, EnableEnum.DISABLE.getValue()); @@ -170,6 +207,7 @@ public class VehicleInfoServiceImpl extends ServiceImpl cockpitInfoService.getData(); + case "vehicle" -> vehicleInfoService.getData(); + case "task" -> taskRecordService.getData(); + default -> null; + }; + if (result != null) { + session.getAsyncRemote().sendText(JSONUtil.toJsonStr(result)); + } + } + + @OnError + public void onError(Session session, Throwable throwable) { + log.error("云控大屏WebSocket异常错误:{}", Arrays.toString(throwable.getStackTrace())); + } +} + diff --git a/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/FaultRepairMapper.xml b/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/FaultRepairMapper.xml new file mode 100644 index 0000000..ba9f80e --- /dev/null +++ b/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/FaultRepairMapper.xml @@ -0,0 +1,41 @@ + + + + + + diff --git a/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/TaskRecordMapper.xml b/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/TaskRecordMapper.xml index 5ed5e7c..ade7cd5 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/TaskRecordMapper.xml +++ b/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/TaskRecordMapper.xml @@ -33,4 +33,13 @@ order by tr.created desc + + diff --git a/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/VehicleGridMapper.xml b/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/VehicleGridMapper.xml deleted file mode 100644 index 9b3831f..0000000 --- a/zxwl-modules/zxwl-sweeper/src/main/resources/mapper/VehicleGridMapper.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - id, vehicle_id, grid_num, status, created, last, deleted - - - diff --git a/zxwl-modules/zxwl-system/pom.xml b/zxwl-modules/zxwl-system/pom.xml index 1607def..07c6290 100644 --- a/zxwl-modules/zxwl-system/pom.xml +++ b/zxwl-modules/zxwl-system/pom.xml @@ -24,6 +24,11 @@ zxwl-common-doc + + org.zxwl + zxwl-common-excel + + org.zxwl zxwl-common-log diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/CompanyInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/CompanyInfoController.java index 2b957c9..48c17f5 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/CompanyInfoController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/CompanyInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.companyInfo.CompanyInfoDTO; import org.zxwl.system.model.companyInfo.CompanyInfoQuery; @@ -18,7 +21,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -32,22 +35,28 @@ public class CompanyInfoController extends BaseController { private final CompanyInfoService companyInfoService; @GetMapping + //@SaCheckPermission("sys:company:list") public Result> list(CompanyInfoQuery query) { return Result.success(companyInfoService.list(query)); } @PostMapping + //@SaCheckPermission("sys:company:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "企业信息新增") public Result add(@RequestBody @Validated CompanyInfoDTO dto) { return toResult(companyInfoService.add(dto)); } @PutMapping - public Result update(@RequestBody @Validated({UpdateGroup.class, - Default.class}) CompanyInfoDTO dto) { + //@SaCheckPermission("sys:company:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "企业信息修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) CompanyInfoDTO dto) { return toResult(companyInfoService.update(dto)); } @DeleteMapping("{ids}") + //@SaCheckPermission("sys:company:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "企业信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(companyInfoService.delete(ValidatorUtil.checkIds(ids))); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/ConfigInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/ConfigInfoController.java new file mode 100644 index 0000000..093582f --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/ConfigInfoController.java @@ -0,0 +1,63 @@ +package org.zxwl.system.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.validation.groups.Default; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.zxwl.common.core.domain.Result; +import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; +import org.zxwl.common.web.base.BaseController; +import org.zxwl.system.model.config.ConfigInfoDTO; +import org.zxwl.system.model.config.ConfigInfoQuery; +import org.zxwl.system.model.config.ConfigInfoVO; +import org.zxwl.system.service.ConfigService; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@RestController +@RequestMapping("/config") +@RequiredArgsConstructor +public class ConfigInfoController extends BaseController { + + private final ConfigService configService; + + @GetMapping + //@SaCheckPermission("sys:config:list") + public Result> queryPageList(ConfigInfoQuery query) { + return Result.success(configService.queryPageList(query)); + } + + @PostMapping + //@SaCheckPermission("sys:config:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "配置信息新增") + public Result add(@RequestBody @Validated ConfigInfoDTO dto) { + return toResult(configService.add(dto)); + } + + @PutMapping + //@SaCheckPermission("sys:config:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "配置信息修改") + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) ConfigInfoDTO dto) { + return toResult(configService.edit(dto)); + } + + @DeleteMapping("{ids}") + //@SaCheckPermission("sys:config:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "配置信息删除") + public Result delete(@PathVariable("ids") List ids) { + return toResult(configService.removeByIds(ValidatorUtil.checkIds(ids))); + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictItemController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictItemController.java index 4464b39..a3122db 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictItemController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictItemController.java @@ -15,7 +15,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -34,8 +34,7 @@ public class DictItemController extends BaseController { } @PutMapping - public Result update(@RequestBody @Validated({UpdateGroup.class, - Default.class}) DictItemDTO dto) { + public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) DictItemDTO dto) { return toResult(dictItemService.update(dto)); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictTypeController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictTypeController.java index c277eb9..3d2bb34 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictTypeController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/DictTypeController.java @@ -7,6 +7,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.dictItem.DictItemVO; import org.zxwl.system.model.dictType.DictTypeDTO; @@ -18,7 +21,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -32,42 +35,43 @@ public class DictTypeController extends BaseController { private final DictTypeService dictTypeService; @GetMapping + //@SaCheckPermission("sys:dict:list") public Result> page(DictTypeQuery dictTypeQuery) { return Result.success(dictTypeService.list(dictTypeQuery)); } @PostMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "驾驶舱新增") + //@SaCheckPermission("sys:dict:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "字典信息新增") public Result add(@RequestBody @Validated DictTypeDTO dto) { return toResult(dictTypeService.add(dto)); } @PutMapping -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "驾驶舱修改") + //@SaCheckPermission("sys:dict:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "字典信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) DictTypeDTO dto) { return toResult(dictTypeService.update(dto)); } @DeleteMapping("{ids}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "驾驶舱删除") + //@SaCheckPermission("sys:dict:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "字典信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(dictTypeService.delete(ids)); } @PutMapping("enable/{id}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "驾驶舱启用") + //@SaCheckPermission("sys:dict:enable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "字典信息启用") public Result enable(@PathVariable("id") Long id) { return toResult(dictTypeService.enable(id)); } @PutMapping("disable/{id}") -// @SaCheckRole(value = {"admin", "system"}, mode = SaMode.OR) -// @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "驾驶舱停用") + //@SaCheckPermission("sys:dict:disable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "字典信息禁用") public Result disable(@PathVariable("id") Long id) { return toResult(dictTypeService.disable(id)); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/MenuInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/MenuInfoController.java index 48769b8..468ecb1 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/MenuInfoController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/MenuInfoController.java @@ -6,6 +6,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.menu.MenuInfoDTO; import org.zxwl.system.model.menu.MenuParentVO; @@ -18,7 +21,7 @@ import java.util.Set; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -32,22 +35,29 @@ public class MenuInfoController extends BaseController { private final MenuInfoService menuInfoService; @PostMapping + //@SaCheckPermission("sys:menu:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "菜单信息新增") public Result add(@RequestBody @Validated MenuInfoDTO menuInfoDTO) { return toResult(menuInfoService.add(menuInfoDTO)); } @PutMapping + //@SaCheckPermission("sys:menu:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "菜单信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) MenuInfoDTO menuInfoDTO) { return toResult(menuInfoService.update(menuInfoDTO)); } @DeleteMapping("{ids}") + //@SaCheckPermission("sys:menu:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "菜单信息删除") public Result delete(@PathVariable("ids") Set ids) { return toResult(menuInfoService.delete(ids)); } @GetMapping + //@SaCheckPermission("sys:menu:list") public Result> list() { return Result.success(menuInfoService.listMenuTree()); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OrganizeInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OrganizeInfoController.java index 6b77a71..2dc9997 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OrganizeInfoController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OrganizeInfoController.java @@ -6,6 +6,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.organize.*; import org.zxwl.system.model.userInfo.UserStatusDTO; @@ -15,7 +18,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -54,11 +57,15 @@ public class OrganizeInfoController extends BaseController { } @PostMapping + //@SaCheckPermission("sys:organize:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "组织架构新增") public Result add(@RequestBody @Validated OrganizeInfoDTO organizeInfoDTO) { return toResult(organizeInfoService.add(organizeInfoDTO)); } @PutMapping + //@SaCheckPermission("sys:organize:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "组织架构修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) OrganizeInfoDTO organizeInfoDTO) { return toResult(organizeInfoService.update(organizeInfoDTO)); @@ -70,6 +77,8 @@ public class OrganizeInfoController extends BaseController { } @DeleteMapping("{id}") + //@SaCheckPermission("sys:organize:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "组织架构删除") public Result delete(@PathVariable Long id) { return organizeInfoService.deleteOrganizeInfo(id) ? Result.success() : Result.failure(); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OssController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OssController.java new file mode 100644 index 0000000..ea46436 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/OssController.java @@ -0,0 +1,93 @@ +package org.zxwl.system.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.zxwl.common.core.domain.Result; +import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; +import org.zxwl.common.web.base.BaseController; +import org.zxwl.system.entity.OssInfo; +import org.zxwl.system.model.oss.OssInfoQuery; +import org.zxwl.system.model.oss.OssInfoVO; +import org.zxwl.system.service.OssService; +import org.zxwl.system.service.UploadService; + +import java.util.List; + +/** + *

+ * 前端控制器 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@RestController +@RequestMapping("/oss") +@RequiredArgsConstructor +public class OssController extends BaseController { + + private final OssService ossService; + + private final UploadService uploadService; + + @GetMapping + //@SaCheckPermission("sys:oss:list") + public Result> list(OssInfoQuery query) { + return Result.success(ossService.queryPageList(query)); + } + + /** + * 上传OSS对象存储 + * + * @param file 文件 + */ + //@SaCheckPermission("system:oss:upload") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "上传OSS对象存储") + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public Result upload(@RequestPart("file") MultipartFile file) { + if (ObjectUtil.isNull(file)) { + return Result.failure("上传文件不能为空"); + } + + String OriginalFilename = file.getOriginalFilename(); + String suffix = StringUtils.substring(OriginalFilename, OriginalFilename.lastIndexOf("."), OriginalFilename.length()); + + OssInfo ossInfo = new OssInfo(); + ossInfo.setFileName(OriginalFilename); + ossInfo.setFileSuffix(suffix); + ossInfo.setFileSize(file.getSize()); + ossInfo.setContentType(file.getContentType()); + ossInfo.setUrl(uploadService.uploadRoute(file)); + ossService.save(ossInfo); + + return Result.success(new OssInfoVO(ossInfo)); + } + + /** + * 下载OSS对象 + * + * @param id OSS对象ID + */ + //@SaCheckPermission("system:oss:download") + @GetMapping("/download/{id}") + public void download(@PathVariable Long id, HttpServletResponse response) { + OssInfo ossInfo = ossService.getById(id); + uploadService.download(ossInfo.getFileName(), ossInfo.getUrl().replaceFirst("/bsp", ""), response); + } + + @DeleteMapping("{ids}") + //@SaCheckPermission("sys:oss:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "OSS对象存储删除") + public Result delete(@PathVariable("ids") List ids) { + return toResult(ossService.removeByIds(ValidatorUtil.checkIds(ids))); + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleInfoController.java index 98d84cb..2761d5a 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleInfoController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleInfoController.java @@ -8,6 +8,9 @@ import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.roleInfo.RoleInfoDTO; import org.zxwl.system.model.roleInfo.RoleInfoQuery; @@ -19,7 +22,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -33,48 +36,48 @@ public class RoleInfoController extends BaseController { private final RoleInfoService roleInfoService; @GetMapping + //@SaCheckPermission("sys:role:list") public Result> list(RoleInfoQuery query) { return Result.success(roleInfoService.list(query)); } @GetMapping("list") - // @SaCheckPermission("setting:role:list") public Result> list() { return Result.success(roleInfoService.listRoleName()); } @PostMapping -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.INSERT, operateExplain = "角色信息新增") + //@SaCheckPermission("sys:role:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "角色信息新增") public Result add(@RequestBody @Validated RoleInfoDTO parkInfoDTO) { return toResult(roleInfoService.add(parkInfoDTO)); } @PutMapping -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.UPDATE, operateExplain = "角色信息修改") + //@SaCheckPermission("sys:role:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "角色信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) RoleInfoDTO parkInfoDTO) { return toResult(roleInfoService.update(parkInfoDTO)); } @DeleteMapping("{ids}") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.DELETE, operateExplain = "角色信息删除") + //@SaCheckPermission("sys:role:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "角色信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(roleInfoService.delete(ValidatorUtil.checkIds(ids))); } @PutMapping("enable") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.OTHER, operateExplain = "角色信息启用") + //@SaCheckPermission("sys:role:enable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "角色信息启用") public Result enable(@RequestParam Long id) { return toResult(roleInfoService.enable(id)); } @PutMapping("disable") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.OTHER, operateExplain = "角色信息禁用") + //@SaCheckPermission("sys:role:disable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "角色信息禁用") public Result disable(@RequestParam Long id) { return toResult(roleInfoService.disable(id)); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleMenuController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleMenuController.java index d9700de..ba3a577 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleMenuController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/RoleMenuController.java @@ -3,6 +3,9 @@ package org.zxwl.system.controller; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.system.model.roleMenu.RoleMenuDTO; import org.zxwl.system.service.RoleMenuService; @@ -29,6 +32,7 @@ public class RoleMenuController { } @PostMapping + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "角色与菜单绑定") public void add(@RequestBody RoleMenuDTO roleMenuDTO) { roleMenuService.addRoleMenu(roleMenuDTO); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/SystemLogController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/SystemLogController.java index 1fd227d..8260ef8 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/SystemLogController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/SystemLogController.java @@ -1,11 +1,14 @@ package org.zxwl.system.controller; -import cn.dev33.satoken.annotation.SaCheckRole; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.zxwl.common.core.domain.Result; import org.zxwl.common.core.utils.ValidatorUtil; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.systemLog.SystemLogQuery; import org.zxwl.system.model.systemLog.SystemLogVO; @@ -29,13 +32,21 @@ public class SystemLogController extends BaseController { private final SystemLogService systemLogService; @GetMapping + //@SaCheckPermission("sys:log:list") public Result> list(SystemLogQuery query) { return Result.success(systemLogService.list(query)); } @DeleteMapping("{ids}") - @SaCheckRole("system") + //@SaCheckPermission("sys:log:delete") public Result delete(@PathVariable("ids") List ids) { return toResult(systemLogService.delete(ValidatorUtil.checkIds(ids))); } + + @PostMapping("export") + //@SaCheckPermission("sys:log:export") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.EXPORT, operateExplain = "操作日志记录导出") + public void export(@RequestBody SystemLogQuery query, HttpServletResponse response) { + systemLogService.export(query, response); + } } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/UserInfoController.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/UserInfoController.java index 87d4ce5..3c2b804 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/UserInfoController.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/controller/UserInfoController.java @@ -11,6 +11,9 @@ import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.common.core.utils.ValidatorUtil; import org.zxwl.common.core.validate.AddGroup; import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.common.log.annotation.Log; +import org.zxwl.common.log.enums.ModuleType; +import org.zxwl.common.log.enums.OperateType; import org.zxwl.common.web.base.BaseController; import org.zxwl.system.model.userInfo.*; import org.zxwl.system.service.UserInfoService; @@ -19,7 +22,7 @@ import java.util.List; /** *

- * 前端控制器 + * 前端控制器 *

* * @author Ben @@ -33,63 +36,65 @@ public class UserInfoController extends BaseController { private final UserInfoService userInfoService; @GetMapping + //@SaCheckPermission("sys:user:list") public Result> list(UserInfoQuery query) { return Result.success(userInfoService.list(query)); } @PostMapping -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.INSERT, operateExplain = "用户信息新增") + //@SaCheckPermission("sys:user:add") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.INSERT, operateExplain = "用户信息新增") public Result add(@RequestBody @Validated({AddGroup.class, Default.class}) UserInfoDTO userInfoDTO) { return toResult(userInfoService.add(userInfoDTO)); } @PutMapping -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.UPDATE, operateExplain = "用户信息修改") + //@SaCheckPermission("sys:user:update") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.UPDATE, operateExplain = "用户信息修改") public Result update(@RequestBody @Validated({UpdateGroup.class, Default.class}) UserInfoDTO userInfoDTO) { return toResult(userInfoService.update(userInfoDTO)); } @DeleteMapping("{ids}") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.DELETE, operateExplain = "用户信息删除") + //@SaCheckPermission("sys:user:delete") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.DELETE, operateExplain = "用户信息删除") public Result delete(@PathVariable("ids") List ids) { return toResult(userInfoService.delete(ValidatorUtil.checkIds(ids))); } @PutMapping("enable") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.OTHER, operateExplain = "用户信息启用") + //@SaCheckPermission("sys:user:enable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "用户信息启用") public Result enable(@RequestParam Long id) { return toResult(userInfoService.enable(id)); } @PutMapping("disable") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.OTHER, operateExplain = "用户信息禁用") + //@SaCheckPermission("sys:user:disable") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "用户信息禁用") public Result disable(@RequestParam Long id) { return toResult(userInfoService.disable(id)); } @PutMapping("resetPassword") -// @SaCheckRole("system") -// @Log(module = ModuleType.USER, operateType = OperateType.UPDATE, operateExplain = "重置密码") + //@SaCheckPermission("sys:user:resetPwd") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "重置密码") public Result resetPassword(@RequestBody PasswordDTO passwordDTO) { return toResult(userInfoService.resetPassword(passwordDTO)); } @PutMapping("password") -// @Log(module = ModuleType.USER, operateType = OperateType.UPDATE, operateExplain = "修改密码") + //@SaCheckPermission("sys:user:pwd") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "修改密码") public SaResult updatePassword(@RequestBody @Validated UserPasswordDTO userPasswordDTO) { return userInfoService.updateUserPassword(userPasswordDTO) ? SaResult.ok(SystemErrorCode.SUCCESS.getMessage()) : SaResult.error(SystemErrorCode.FAILURE.getMessage()); } @PutMapping("avatar") -// @Log(module = ModuleType.USER, operateType = OperateType.UPDATE, operateExplain = "修改头像") + @Log(module = ModuleType.SYSTEM, operateType = OperateType.OTHER, operateExplain = "修改头像") public SaResult updateAvatar(@RequestBody UserAvatarDTO userAvatarDTO) { return userInfoService.updateUserAvatar(userAvatarDTO) ? SaResult.ok(SystemErrorCode.SUCCESS.getMessage()) : SaResult.error(SystemErrorCode.FAILURE.getMessage()); @@ -97,6 +102,6 @@ public class UserInfoController extends BaseController { @GetMapping("responsibility") public Result> listResponsibility() { - return Result.success(userInfoService.listResponsibility()); + return Result.success(userInfoService.listResponsibility()); } } diff --git a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/VehicleGrid.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/ConfigInfo.java similarity index 66% rename from zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/VehicleGrid.java rename to zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/ConfigInfo.java index 499973f..756297f 100644 --- a/zxwl-modules/zxwl-sweeper/src/main/java/org/zxwl/sweeper/entity/VehicleGrid.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/ConfigInfo.java @@ -1,4 +1,4 @@ -package org.zxwl.sweeper.entity; +package org.zxwl.system.entity; import com.baomidou.mybatisplus.annotation.*; import lombok.Getter; @@ -7,20 +7,20 @@ import lombok.ToString; import java.time.LocalDateTime; + /** *

- * + * 配置管理表 *

* - * @author Ben - * @since 2025-06-20 + * @author zy + * @since 2025-09-19 */ @Getter @Setter @ToString -@TableName("info_vehicle_grid") -public class VehicleGrid { - +@TableName("sys_config") +public class ConfigInfo { /** * ID */ @@ -28,22 +28,22 @@ public class VehicleGrid { private Long id; /** - * 所属车辆Id + * 配置名称 */ - @TableField("vehicle_id") - private Integer vehicleId; + @TableField("config_name") + private String configName; /** - * 格口数量 + * 参数键名 */ - @TableField("grid_num") - private String gridNum; + @TableField("config_key") + private String configKey; /** - * 格口状态 + * 参数键值 */ - @TableField("status") - private Byte status; + @TableField("config_value") + private String configValue; /** * 创建时间 diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/DictItem.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/DictItem.java index ec4b9f7..d4db57b 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/DictItem.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/DictItem.java @@ -27,6 +27,10 @@ public class DictItem { @TableField("type_id") private Long typeId; + + @TableField("dict_code") + private String dictCode; + /** * 字典标签 */ diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/OssInfo.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/OssInfo.java new file mode 100644 index 0000000..88b6dc6 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/entity/OssInfo.java @@ -0,0 +1,83 @@ +package org.zxwl.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.time.LocalDateTime; + +/** + *

+ * oss对象存储表 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Getter +@Setter +@ToString +@TableName("sys_oss") +public class OssInfo { + /** + * ID + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 业务id + */ + @TableField("business_id") + private Long businessId; + + /** + * 文件名 + */ + @TableField("file_name") + private String fileName; + + /** + * 文件后缀名 + */ + @TableField("file_suffix") + private String fileSuffix; + + /** + * 文件大小 + */ + @TableField("file_size") + private Long fileSize; + + /** + * 文件类型 + */ + @TableField("content_type") + private String contentType; + + /** + * URL地址 + */ + @TableField("url") + private String url; + + /** + * 创建时间 + */ + @TableField(value = "created", fill = FieldFill.INSERT) + private LocalDateTime created; + + /** + * 修改时间 + */ + @TableField(value = "last", fill = FieldFill.INSERT_UPDATE) + private LocalDateTime last; + + /** + * 是否删除 0 未删除 1 已删除 + */ + @TableLogic + @TableField("deleted") + private Byte deleted; +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/ConfigMapper.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/ConfigMapper.java new file mode 100644 index 0000000..fec50c4 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/ConfigMapper.java @@ -0,0 +1,17 @@ +package org.zxwl.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.zxwl.system.entity.ConfigInfo; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zy + * @since 2025-9-19 + */ +@Mapper +public interface ConfigMapper extends BaseMapper { +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/OssMapper.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/OssMapper.java new file mode 100644 index 0000000..34e8804 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/OssMapper.java @@ -0,0 +1,17 @@ +package org.zxwl.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.zxwl.system.entity.OssInfo; + +/** + *

+ * Mapper 接口 + *

+ * + * @author zy + * @since 2025-9-19 + */ +@Mapper +public interface OssMapper extends BaseMapper { +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/SystemLogMapper.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/SystemLogMapper.java index 830f68b..7f2ae4d 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/SystemLogMapper.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/mapper/SystemLogMapper.java @@ -1,8 +1,14 @@ package org.zxwl.system.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.zxwl.system.entity.SystemLog; +import org.zxwl.system.model.systemLog.SystemLogVO; + +import java.util.List; /** *

@@ -15,4 +21,11 @@ import org.zxwl.system.entity.SystemLog; @Mapper public interface SystemLogMapper extends BaseMapper { + /** + * 操作日志导出 + * + * @param queryWrapper 查询条件 + * @return list + */ + List selectLists(@Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoDTO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoDTO.java new file mode 100644 index 0000000..87e42e3 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoDTO.java @@ -0,0 +1,44 @@ +package org.zxwl.system.model.config; + +import cn.hutool.core.bean.BeanUtil; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.system.entity.ConfigInfo; + +@Getter +@Setter +public class ConfigInfoDTO { + + /** + * ID + */ + @NotNull(message = "id不能为空", groups = UpdateGroup.class) + private Long id; + + /** + * 配置名称 + */ + @NotBlank(message = "配置名称不能为空") + private String configName; + + /** + * 参数键名 + */ + @NotBlank(message = "参数键名不能为空") + private String configKey; + + /** + * 参数键值 + */ + @NotBlank(message = "参数键值不能为空") + private String configValue; + + public ConfigInfo toConfigInfo() { + ConfigInfo configInfo = new ConfigInfo(); + BeanUtil.copyProperties(this, configInfo); + return configInfo; + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoQuery.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoQuery.java new file mode 100644 index 0000000..e310a21 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoQuery.java @@ -0,0 +1,12 @@ +package org.zxwl.system.model.config; + +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.mybatis.page.BaseQuery; +import org.zxwl.system.entity.ConfigInfo; + +@Getter +@Setter +public class ConfigInfoQuery extends BaseQuery { + +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoVO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoVO.java new file mode 100644 index 0000000..2ef0b85 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/config/ConfigInfoVO.java @@ -0,0 +1,37 @@ +package org.zxwl.system.model.config; + +import cn.hutool.core.bean.BeanUtil; +import lombok.Getter; +import lombok.Setter; +import org.zxwl.system.entity.ConfigInfo; + +@Getter +@Setter +public class ConfigInfoVO { + + /** + * ID + */ + private Long id; + + /** + * 配置名称 + */ + private String configName; + + /** + * 参数键名 + */ + private String configKey; + + /** + * 参数键值 + */ + private String configValue; + + public ConfigInfoVO(ConfigInfo configInfo) { + if (configInfo != null) { + BeanUtil.copyProperties(configInfo, this); + } + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictItem/DictItemDTO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictItem/DictItemDTO.java index e5f92ea..eec8bed 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictItem/DictItemDTO.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictItem/DictItemDTO.java @@ -11,6 +11,8 @@ public class DictItemDTO { private Long typeId; + private String dictCode; + /** * 字典标签 */ diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictType/DictTypeQuery.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictType/DictTypeQuery.java index 1f5bb5d..66978a6 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictType/DictTypeQuery.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/dictType/DictTypeQuery.java @@ -28,7 +28,8 @@ public class DictTypeQuery extends BaseQuery { return new LambdaQueryWrapper() .eq(Objects.nonNull(status), DictType::getStatus, status) .like(CharSequenceUtil.isNotEmpty(key), DictType::getDictCode, key).or() - .like(CharSequenceUtil.isNotEmpty(key), DictType::getDictName, key); + .like(CharSequenceUtil.isNotEmpty(key), DictType::getDictName, key) + .orderByDesc(DictType::getCreated); } } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/menu/MenuInfoDTO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/menu/MenuInfoDTO.java index cce22c4..c582a92 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/menu/MenuInfoDTO.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/menu/MenuInfoDTO.java @@ -31,6 +31,11 @@ public class MenuInfoDTO { */ private Integer type; + /** + * 状态 0-正常 1-禁用 + */ + private Integer status; + /** * 权限字符 */ diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoDTO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoDTO.java new file mode 100644 index 0000000..fa21683 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoDTO.java @@ -0,0 +1,55 @@ +package org.zxwl.system.model.oss; + +import cn.hutool.core.bean.BeanUtil; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.core.validate.UpdateGroup; +import org.zxwl.system.entity.OssInfo; + +@Getter +@Setter +public class OssInfoDTO { + + /** + * ID + */ + @NotNull(message = "id不能为空", groups = UpdateGroup.class) + private Long id; + + /** + * 业务id + */ + private Long businessId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件后缀名 + */ + private String fileSuffix; + + /** + * 文件大小 + */ + private Long fileSize; + + /** + * 文件类型 + */ + private String contentType; + + /** + * URL地址 + */ + private String url; + + public OssInfo toOssInfo() { + OssInfo ossInfo = new OssInfo(); + BeanUtil.copyProperties(this, ossInfo); + return ossInfo; + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoQuery.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoQuery.java new file mode 100644 index 0000000..c10c689 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoQuery.java @@ -0,0 +1,12 @@ +package org.zxwl.system.model.oss; + +import lombok.Getter; +import lombok.Setter; +import org.zxwl.common.mybatis.page.BaseQuery; +import org.zxwl.system.entity.OssInfo; + +@Getter +@Setter +public class OssInfoQuery extends BaseQuery { + +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoVO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoVO.java new file mode 100644 index 0000000..0de2d76 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/oss/OssInfoVO.java @@ -0,0 +1,52 @@ +package org.zxwl.system.model.oss; + +import cn.hutool.core.bean.BeanUtil; +import lombok.Getter; +import lombok.Setter; +import org.zxwl.system.entity.OssInfo; + +@Getter +@Setter +public class OssInfoVO { + + /** + * ID + */ + private Long id; + + /** + * 业务id + */ + private Long businessId; + + /** + * 文件名 + */ + private String fileName; + + /** + * 文件后缀名 + */ + private String fileSuffix; + + /** + * 文件大小 + */ + private Long fileSize; + + /** + * 文件类型 + */ + private String contentType; + + /** + * URL地址 + */ + private String url; + + public OssInfoVO(OssInfo ossInfo) { + if (ossInfo != null) { + BeanUtil.copyProperties(ossInfo, this); + } + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogQuery.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogQuery.java index 7b0cf0f..9a8c874 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogQuery.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogQuery.java @@ -8,6 +8,8 @@ import org.zxwl.common.mybatis.page.BaseQuery; import org.zxwl.system.entity.SystemLog; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Objects; @Getter @Setter @@ -24,9 +26,18 @@ public class SystemLogQuery extends BaseQuery { private LocalDate endDate; public LambdaQueryWrapper toWrapper() { + LocalDateTime start = null, end = null; + if (Objects.nonNull(startDate)) { + start = startDate.atStartOfDay(); + } + if (Objects.nonNull(endDate)) { + end = endDate.atTime(23, 59, 59); + } return new LambdaQueryWrapper() .eq(CharSequenceUtil.isNotEmpty(module), SystemLog::getModuleType, module) .eq(CharSequenceUtil.isNotEmpty(operate), SystemLog::getOperateType, operate) + .ge(Objects.nonNull(start), SystemLog::getCreated, start) + .le(Objects.nonNull(end), SystemLog::getCreated, end) .like(CharSequenceUtil.isNotEmpty(key), SystemLog::getOperator, key).or() .like(CharSequenceUtil.isNotEmpty(key), SystemLog::getOperateExplain, key) .orderByDesc(SystemLog::getCreated); diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogVO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogVO.java index 1c24cee..0d335bd 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogVO.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/systemLog/SystemLogVO.java @@ -1,68 +1,97 @@ package org.zxwl.system.model.systemLog; import cn.hutool.core.bean.BeanUtil; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.Setter; import org.zxwl.system.entity.SystemLog; +import java.io.Serial; +import java.io.Serializable; import java.time.LocalDateTime; @Getter @Setter -public class SystemLogVO { +@ExcelIgnoreUnannotated +public class SystemLogVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; private Long id; - /** - * 执行时间 - */ - private Long executeTime; - /** * 模块名称 */ private String moduleType; + /** + * 模块名称 + */ + @ExcelProperty(value = "模块名称") + private String moduleTypeCn; + /** * 操作类型 */ private String operateType; + /** + * 操作类型 + */ + @ExcelProperty(value = "操作类型") + private String operateTypeCn; + /** * 全限定类名 */ + @ExcelProperty(value = "全限定类名") private String classMethod; /** * 远程地址 */ + @ExcelProperty(value = "远程地址") private String remoteAddress; /** * 请求路径 */ + @ExcelProperty(value = "请求路径") private String requestUrl; + /** + * 执行时间 + */ + @ExcelProperty(value = "执行时间") + private Long executeTime; + /** * 异常信息 */ + @ExcelProperty(value = "异常信息") private String exceptionMsg; /** * 操作人 */ + @ExcelProperty(value = "操作人") private String operator; /** - * 说明 + * 操作描述 */ + @ExcelProperty(value = "操作描述") private String operateExplain; /** * 创建时间 */ + @ExcelProperty(value = "创建时间") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime created; public SystemLogVO(SystemLog systemLog) { diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoQuery.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoQuery.java index 0b36999..4d4a066 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoQuery.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoQuery.java @@ -28,6 +28,7 @@ public class UserInfoQuery extends BaseQuery { * 角色ID */ private Long roleId; + private Long organizeId; /** diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoVO.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoVO.java index 25c7d54..78fc069 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoVO.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserInfoVO.java @@ -9,6 +9,7 @@ import org.zxwl.common.core.utils.EnvUtil; import org.zxwl.system.entity.UserInfo; import java.time.LocalDateTime; +import java.util.Set; @Getter @Setter @@ -46,6 +47,16 @@ public class UserInfoVO { */ private String roleName; + /** + * 菜单权限 + */ + private Set menuPermission; + + /** + * 角色权限 + */ + private Set rolePermission; + /** * 账号状态 0 停用 1 正常 */ diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserLogin.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserLogin.java index a46a27e..5fe0b9a 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserLogin.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/UserLogin.java @@ -1,5 +1,6 @@ package org.zxwl.system.model.userInfo; +import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; @@ -7,7 +8,12 @@ import lombok.Setter; @Setter public class UserLogin { + @NotBlank(message = "用户名不能为空") private String username; + + @NotBlank(message = "密码不能为空") private String password; + + @NotBlank(message = "设备类型不能为空") private String device; } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/VehicleUserLogin.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/VehicleUserLogin.java deleted file mode 100644 index 77bfbfc..0000000 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/model/userInfo/VehicleUserLogin.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.zxwl.system.model.userInfo; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class VehicleUserLogin { - - private String username; //用户名或手机号 - private String password; - private String device; -} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/CompanyInfoService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/CompanyInfoService.java index ad53fdf..4601a34 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/CompanyInfoService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/CompanyInfoService.java @@ -11,7 +11,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -22,7 +22,9 @@ public interface CompanyInfoService extends IService { Page list(CompanyInfoQuery query); //列表 boolean add(CompanyInfoDTO dto); //新增 + boolean update(CompanyInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/ConfigService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/ConfigService.java new file mode 100644 index 0000000..c08f9cf --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/ConfigService.java @@ -0,0 +1,25 @@ +package org.zxwl.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.zxwl.system.entity.ConfigInfo; +import org.zxwl.system.model.config.ConfigInfoDTO; +import org.zxwl.system.model.config.ConfigInfoQuery; +import org.zxwl.system.model.config.ConfigInfoVO; + +/** + *

+ * 接口 + *

+ * + * @author zy + * @since 2025-9-19 + */ +public interface ConfigService extends IService { + + Page queryPageList(ConfigInfoQuery query); + + boolean add(ConfigInfoDTO dto); + + boolean edit(ConfigInfoDTO dto); +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictItemService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictItemService.java index b127752..55b582c 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictItemService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictItemService.java @@ -9,7 +9,7 @@ import java.util.List; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -18,11 +18,17 @@ import java.util.List; public interface DictItemService extends IService { List listByDictId(Long typeId); //列表 - List listByDictIdEnable(Long typeId); //列表 + + List listByDictCodeEnable(String dictCode); //列表 + boolean add(DictItemDTO dto); //新增 + boolean update(DictItemDTO dto); //编辑 + boolean delete(Long ids); //删除 + boolean enable(Long id); //启用 + boolean disable(Long id); //停用 boolean updateSorted(List dictSortedList); diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictTypeService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictTypeService.java index 6153c52..6204ab3 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictTypeService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/DictTypeService.java @@ -13,7 +13,7 @@ import java.util.List; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -22,12 +22,18 @@ import java.util.List; public interface DictTypeService extends IService { Page list(DictTypeQuery query); //列表 + boolean add(DictTypeDTO dto); //新增 + boolean update(DictTypeDTO dto); //编辑 + boolean delete(List ids); //删除 + boolean enable(Long id); //启用 + boolean disable(Long id); //停用 List listItemById(Long id); //根据字典Id查询 + List listByDictCode(String code); //根据字典码查询 } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/MenuInfoService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/MenuInfoService.java index 09b018d..23693c6 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/MenuInfoService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/MenuInfoService.java @@ -9,7 +9,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -18,15 +18,21 @@ import java.util.Set; public interface MenuInfoService extends IService { boolean add(MenuInfoDTO menuInfoDTO); //新增 + boolean update(MenuInfoDTO menuInfoDTO); //编辑 + boolean delete(Set ids); //删除 + List listMenuTree(); + List listAll(); + List listMenuInfo(); //菜单树 List listMenuByRoleId(Long roleId); //根据角色ID查询权限字符 List listParentMenuId(); //父级菜单ID列表 + List listParentMenu(); //父级菜单列表 List listVisitByRoleId(Long roleId); diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OrganizeInfoService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OrganizeInfoService.java index 61085b0..f2b928e 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OrganizeInfoService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OrganizeInfoService.java @@ -10,7 +10,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -19,6 +19,7 @@ import java.util.Set; public interface OrganizeInfoService extends IService { OrganizeInfoVO queryById(Long id); //组织详情 + List getOrganizeInfoList(OrganizeInfoQuery query); boolean deleteOrganizeInfo(Long id); @@ -34,6 +35,8 @@ public interface OrganizeInfoService extends IService { boolean updateByStatus(UserStatusDTO userStatusDTO); boolean add(OrganizeInfoDTO organizeInfoDTO); //新增 + boolean update(OrganizeInfoDTO organizeInfoDTO); //编辑 + boolean delete(Set ids); //删除 } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OssService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OssService.java new file mode 100644 index 0000000..9acc513 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/OssService.java @@ -0,0 +1,20 @@ +package org.zxwl.system.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import org.zxwl.system.entity.OssInfo; +import org.zxwl.system.model.oss.OssInfoQuery; +import org.zxwl.system.model.oss.OssInfoVO; + +/** + *

+ * 接口 + *

+ * + * @author zy + * @since 2025-9-19 + */ +public interface OssService extends IService { + + Page queryPageList(OssInfoQuery query); //分页 +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/RoleInfoService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/RoleInfoService.java index bc3a123..188d4d0 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/RoleInfoService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/RoleInfoService.java @@ -13,7 +13,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -22,16 +22,21 @@ import java.util.Set; public interface RoleInfoService extends IService { Page list(RoleInfoQuery query); //列表 + boolean add(RoleInfoDTO dto); //新增 + boolean update(RoleInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 RoleInfoVO query(Long id); boolean enable(Long id); //启用 + boolean disable(Long id); //停用 List listRoleName(); + List listRoleKey(); Set selectRolePermissionByUserId(Long userId); diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/SystemLogService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/SystemLogService.java index ab747e9..ac334e8 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/SystemLogService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/SystemLogService.java @@ -2,6 +2,7 @@ package org.zxwl.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletResponse; import org.zxwl.system.entity.SystemLog; import org.zxwl.system.model.systemLog.SystemLogQuery; import org.zxwl.system.model.systemLog.SystemLogVO; @@ -10,7 +11,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -19,5 +20,8 @@ import java.util.Set; public interface SystemLogService extends IService { Page list(SystemLogQuery query); + boolean delete(Set ids); + + void export(SystemLogQuery query, HttpServletResponse response); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UploadService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UploadService.java index 9a3ec5a..fdceded 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UploadService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UploadService.java @@ -1,5 +1,6 @@ package org.zxwl.system.service; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -7,5 +8,8 @@ import java.util.List; public interface UploadService { String uploadImage(List imageList); + String uploadRoute(MultipartFile routeFile); + + void download(String fileName, String url, HttpServletResponse response); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UserInfoService.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UserInfoService.java index 74ccdc8..5344a1a 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UserInfoService.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/UserInfoService.java @@ -10,7 +10,7 @@ import java.util.Set; /** *

- * 服务类 + * 服务类 *

* * @author Ben @@ -19,13 +19,17 @@ import java.util.Set; public interface UserInfoService extends IService { Page list(UserInfoQuery query); //列表 + boolean add(UserInfoDTO dto); //新增 + boolean update(UserInfoDTO dto); //编辑 + boolean delete(Set ids); //删除 UserInfoVO query(Long id); //根据id查询用户信息 UserInfo login(String username, String password); //用户登录 + UserInfo login(UserLogin userLogin); //用户登录 boolean resetPassword(PasswordDTO passwordDTO); //重置密码 @@ -37,6 +41,7 @@ public interface UserInfoService extends IService { UserInfo getUserByName(String username); //根据用户名获取用户 boolean enable(Long id); //启用 + boolean disable(Long id); //停用 boolean layout(String id); //登出 diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/CompanyInfoServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/CompanyInfoServiceImpl.java index f31c7eb..8d0c966 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/CompanyInfoServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/CompanyInfoServiceImpl.java @@ -16,7 +16,7 @@ import java.util.Set; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/ConfigServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/ConfigServiceImpl.java new file mode 100644 index 0000000..918fb81 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/ConfigServiceImpl.java @@ -0,0 +1,61 @@ +package org.zxwl.system.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.zxwl.common.core.exception.BusinessException; +import org.zxwl.system.entity.ConfigInfo; +import org.zxwl.system.mapper.ConfigMapper; +import org.zxwl.system.model.config.ConfigInfoDTO; +import org.zxwl.system.model.config.ConfigInfoQuery; +import org.zxwl.system.model.config.ConfigInfoVO; +import org.zxwl.system.service.ConfigService; + +import java.util.List; +import java.util.Objects; + +/** + *

+ * 服务实现类 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Service +@RequiredArgsConstructor +public class ConfigServiceImpl extends ServiceImpl implements ConfigService { + + private final ConfigMapper configMapper; + + @Override + public Page queryPageList(ConfigInfoQuery query) { + Page page = configMapper.selectPage(query.toPage(), Wrappers.emptyWrapper()); + List list = page.getRecords().stream().map(ConfigInfoVO::new).toList(); + return new Page(page.getCurrent(), page.getSize(), page.getTotal()).setRecords(list); + } + + @Override + public boolean add(ConfigInfoDTO dto) { + if (checkConfigKey(dto.getId(), dto.getConfigKey())) { + throw new BusinessException("新增参数'" + dto.getConfigName() + "'失败,参数键名已存在"); + } + return save(dto.toConfigInfo()); + } + + @Override + public boolean edit(ConfigInfoDTO dto) { + if (checkConfigKey(dto.getId(), dto.getConfigKey())) { + throw new BusinessException("修改参数'" + dto.getConfigName() + "'失败,参数键名已存在"); + } + return updateById(dto.toConfigInfo()); + } + + public boolean checkConfigKey(Long id, String configKey) { + return configMapper.exists(Wrappers.lambdaQuery() + .eq(ConfigInfo::getConfigKey, configKey) + .ne(Objects.nonNull(id), ConfigInfo::getConfigKey, id)); + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictItemServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictItemServiceImpl.java index 82eb9a2..240d63a 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictItemServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictItemServiceImpl.java @@ -9,8 +9,10 @@ import org.springframework.stereotype.Service; import org.zxwl.common.core.exception.BusinessException; import org.zxwl.common.core.exception.SystemErrorCode; import org.zxwl.system.entity.DictItem; +import org.zxwl.system.entity.DictType; import org.zxwl.system.enums.EnableEnum; import org.zxwl.system.mapper.DictItemMapper; +import org.zxwl.system.mapper.DictTypeMapper; import org.zxwl.system.model.dictItem.DictItemDTO; import org.zxwl.system.model.dictItem.DictSortedDTO; import org.zxwl.system.service.DictItemService; @@ -21,7 +23,7 @@ import java.util.Objects; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -33,6 +35,8 @@ public class DictItemServiceImpl extends ServiceImpl i private final DictItemMapper dictItemMapper; + private final DictTypeMapper dictTypeMapper; + @Override public List listByDictId(Long dictTypeId) { if (Objects.isNull(dictTypeId)) { @@ -46,12 +50,9 @@ public class DictItemServiceImpl extends ServiceImpl i } @Override - public List listByDictIdEnable(Long typeId) { - if (Objects.isNull(typeId)) { - throw new BusinessException(SystemErrorCode.DICT_ID_NOT_NULL); - } + public List listByDictCodeEnable(String dictCode) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(DictItem::getTypeId, typeId); + queryWrapper.eq(DictItem::getDictCode, dictCode); queryWrapper.eq(DictItem::getStatus, EnableEnum.ENABLE.getValue()); queryWrapper.orderByAsc(DictItem::getDictSort); return list(queryWrapper); @@ -59,6 +60,7 @@ public class DictItemServiceImpl extends ServiceImpl i @Override public boolean add(DictItemDTO dto) { + DictType dictType = dictTypeMapper.selectById(dto.getId()); if (existDictLabel(dto.getId(), dto.getTypeId(), dto.getDictLabel())) { throw new BusinessException(SystemErrorCode.DICT_ITEM_LABEL); } @@ -68,11 +70,13 @@ public class DictItemServiceImpl extends ServiceImpl i Integer sortNum = listByDictType(dto.getTypeId()).stream() .map(DictItem::getDictSort).distinct().findFirst().orElse(0); dto.setDictSort(sortNum + 1); + dto.setDictCode(dictType.getDictCode()); return dictItemMapper.insert(dto.toDictItem()) > 0; } /** * 按字典ID查询 + * * @param typeId * @return */ diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictTypeServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictTypeServiceImpl.java index a5f6694..4b1e57f 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictTypeServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/DictTypeServiceImpl.java @@ -1,7 +1,6 @@ package org.zxwl.system.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.ListUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -112,13 +111,7 @@ public class DictTypeServiceImpl extends ServiceImpl i @Override public List listByDictCode(String code) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(DictType::getDictCode, code); - DictType dictType = dictTypeMapper.selectOne(queryWrapper); - if (dictType != null) { - return dictItemService.listByDictIdEnable(dictType.getId()).stream().map(DictItemSimpleVO::new).toList(); - } - return ListUtil.empty(); + return dictItemService.listByDictCodeEnable(code).stream().map(DictItemSimpleVO::new).toList(); } @Override diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/OssServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/OssServiceImpl.java new file mode 100644 index 0000000..218454d --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/OssServiceImpl.java @@ -0,0 +1,36 @@ +package org.zxwl.system.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.zxwl.system.entity.OssInfo; +import org.zxwl.system.mapper.OssMapper; +import org.zxwl.system.model.oss.OssInfoQuery; +import org.zxwl.system.model.oss.OssInfoVO; +import org.zxwl.system.service.OssService; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @author zy + * @since 2025-09-19 + */ +@Service +@RequiredArgsConstructor +public class OssServiceImpl extends ServiceImpl implements OssService { + + private final OssMapper ossMapper; + + @Override + public Page queryPageList(OssInfoQuery query) { + Page page = ossMapper.selectPage(query.toPage(), Wrappers.emptyWrapper()); + List list = page.getRecords().stream().map(OssInfoVO::new).toList(); + return new Page(page.getCurrent(), page.getSize(), page.getTotal()).setRecords(list); + } +} diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/PermissionServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/PermissionServiceImpl.java index 703ace0..69743e7 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/PermissionServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/PermissionServiceImpl.java @@ -2,6 +2,8 @@ package org.zxwl.system.service.impl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.zxwl.common.core.constant.SystemConstants; +import org.zxwl.common.satoken.utils.LoginHelper; import org.zxwl.system.service.MenuInfoService; import org.zxwl.common.core.service.PermissionService; import org.zxwl.system.service.RoleInfoService; @@ -29,7 +31,14 @@ public class PermissionServiceImpl implements PermissionService { */ @Override public Set getRolePermission(Long userId) { - return new HashSet<>(roleInfoService.selectRolePermissionByUserId(userId)); + Set roles = new HashSet<>(); + // 系统管理者拥有所有权限 + if (LoginHelper.isSuperAdmin(userId)) { + roles.add(SystemConstants.ADMIN_ROLE_KEY); + } else { + roles.addAll(roleInfoService.selectRolePermissionByUserId(userId)); + } + return roles; } /** @@ -40,6 +49,13 @@ public class PermissionServiceImpl implements PermissionService { */ @Override public Set getMenuPermission(Long userId) { - return new HashSet<>(menuInfoService.selectMenuPermsByUserId(userId)); + Set perms = new HashSet<>(); + // 管理员拥有所有权限 + if (LoginHelper.isSuperAdmin(userId)) { + perms.add("*:*:*"); + } else { + perms.addAll(menuInfoService.selectMenuPermsByUserId(userId)); + } + return perms; } } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleInfoServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleInfoServiceImpl.java index a29bdbf..aecfb5f 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleInfoServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleInfoServiceImpl.java @@ -27,7 +27,7 @@ import java.util.Set; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleMenuServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleMenuServiceImpl.java index feafd64..867fd53 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleMenuServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/RoleMenuServiceImpl.java @@ -9,7 +9,6 @@ import org.zxwl.system.mapper.RoleMenuMapper; import org.zxwl.system.model.roleMenu.RoleMenuDTO; import org.zxwl.system.service.RoleMenuService; -import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -34,9 +33,6 @@ public class RoleMenuServiceImpl extends ServiceImpl i @Override public boolean addRoleMenu(RoleMenuDTO roleMenuDTO) { - List roleMenus = roleMenuDTO.convertRoleMenu(); -// Arrays.toString(new RoleMenuController); - roleMenus.stream().peek(System.out::println); return super.saveBatch(roleMenuDTO.convertRoleMenu()); } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/SystemLogServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/SystemLogServiceImpl.java index 6e1dac9..73ef28d 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/SystemLogServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/SystemLogServiceImpl.java @@ -3,10 +3,12 @@ package org.zxwl.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.zxwl.common.excel.utils.ExcelUtil; import org.zxwl.common.log.event.OperLogEvent; import org.zxwl.system.entity.SystemLog; import org.zxwl.system.mapper.SystemLogMapper; @@ -55,4 +57,10 @@ public class SystemLogServiceImpl extends ServiceImpl 0; } + @Override + public void export(SystemLogQuery query, HttpServletResponse response) { + List list = systemLogMapper.selectLists(query.toWrapper()); + ExcelUtil.exportExcel(list, ExcelUtil.createExcelName("操作日志记录"), SystemLogVO.class, response); + } + } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UploadServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UploadServiceImpl.java index e17572b..5d0c9ae 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UploadServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UploadServiceImpl.java @@ -1,5 +1,6 @@ package org.zxwl.system.service.impl; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -27,4 +28,9 @@ public class UploadServiceImpl implements UploadService { public String uploadRoute(MultipartFile routeFile) { return minioUtil.upload(routeFile, MinioUtil.OBJECT_PREFIX_ROUTE, bucketName); } + + @Override + public void download(String fileName, String url, HttpServletResponse response) { + minioUtil.download(fileName, url, bucketName, response); + } } diff --git a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UserInfoServiceImpl.java b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UserInfoServiceImpl.java index c9a8650..22e0403 100644 --- a/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UserInfoServiceImpl.java +++ b/zxwl-modules/zxwl-system/src/main/java/org/zxwl/system/service/impl/UserInfoServiceImpl.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; /** *

- * 服务实现类 + * 服务实现类 *

* * @author Ben @@ -163,11 +163,11 @@ public class UserInfoServiceImpl extends ServiceImpl i } String decrypt = SecureUtil.decrypt(user.getPassword(), user.getSalt()); - if (decrypt.equals(userLogin.getPassword())) { - updateUserLoginTime(user.getId()); - return user; + if (!decrypt.equals(userLogin.getPassword())) { + throw new BusinessException(SystemErrorCode.PASSWORD_NOT_CORRECT); } - return null; + updateUserLoginTime(user.getId()); + return user; } @Override diff --git a/zxwl-modules/zxwl-system/src/main/resources/mapper/ConfigMapper.xml b/zxwl-modules/zxwl-system/src/main/resources/mapper/ConfigMapper.xml new file mode 100644 index 0000000..a656a82 --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/resources/mapper/ConfigMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zxwl-modules/zxwl-system/src/main/resources/mapper/OssMapper.xml b/zxwl-modules/zxwl-system/src/main/resources/mapper/OssMapper.xml new file mode 100644 index 0000000..eb1a20d --- /dev/null +++ b/zxwl-modules/zxwl-system/src/main/resources/mapper/OssMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/zxwl-modules/zxwl-system/src/main/resources/mapper/SystemLogMapper.xml b/zxwl-modules/zxwl-system/src/main/resources/mapper/SystemLogMapper.xml index 22620c7..9be0f12 100644 --- a/zxwl-modules/zxwl-system/src/main/resources/mapper/SystemLogMapper.xml +++ b/zxwl-modules/zxwl-system/src/main/resources/mapper/SystemLogMapper.xml @@ -23,4 +23,25 @@ id, execute_time, module_type, operate_type, class_method, remote_address, request_url, exception_msg, operate_explain, operator, created, deleted + +