From ebe1ef83099e29b5973d36bd668da056f5d3afc4 Mon Sep 17 00:00:00 2001 From: 18980591175 <470162950@qq.com> Date: Fri, 15 May 2026 10:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=B4=9F=E8=B4=A3=E4=BA=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A9=BE=E9=A9=B6=E5=91=98=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HotDriverController.java | 18 ++++++ .../driver/domain/bo/HotDriverPasswordBo.java | 26 +++++++++ .../driver/service/IHotDriverService.java | 9 +++ .../service/impl/HotDriverServiceImpl.java | 55 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 src/main/java/com/hotwj/platform/driverManagement/driver/domain/bo/HotDriverPasswordBo.java diff --git a/src/main/java/com/hotwj/platform/driverManagement/driver/controller/HotDriverController.java b/src/main/java/com/hotwj/platform/driverManagement/driver/controller/HotDriverController.java index 9520b9a..06e5232 100644 --- a/src/main/java/com/hotwj/platform/driverManagement/driver/controller/HotDriverController.java +++ b/src/main/java/com/hotwj/platform/driverManagement/driver/controller/HotDriverController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; import com.hotwj.platform.driverManagement.driver.domain.bo.DriverRegisterBo; import com.hotwj.platform.driverManagement.driver.domain.bo.HotDriverBo; +import com.hotwj.platform.driverManagement.driver.domain.bo.HotDriverPasswordBo; import com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverImportVo; import com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverLedgerExportVo; import com.hotwj.platform.driverManagement.driver.domain.vo.HotDriverVo; @@ -19,6 +20,7 @@ import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.encrypt.annotation.ApiEncrypt; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; @@ -251,6 +253,22 @@ public class HotDriverController extends BaseController { return toAjax(hotDriverService.updateByBo(bo)); } + /** + * 企业负责人修改驾驶员登录密码 + * + * @param id 驾驶员ID + * @param bo 密码信息 + * @return 是否成功 + */ + @ApiEncrypt + @Log(title = "驾驶员密码", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/{id}/password") + @Operation(summary = "企业负责人修改驾驶员登录密码") + public R updatePassword(@PathVariable String id, @Validated @RequestBody HotDriverPasswordBo bo) { + return toAjax(hotDriverService.updatePassword(id, bo.getNewPassword())); + } + /** * 删除驾驶员基本信息 * diff --git a/src/main/java/com/hotwj/platform/driverManagement/driver/domain/bo/HotDriverPasswordBo.java b/src/main/java/com/hotwj/platform/driverManagement/driver/domain/bo/HotDriverPasswordBo.java new file mode 100644 index 0000000..b661921 --- /dev/null +++ b/src/main/java/com/hotwj/platform/driverManagement/driver/domain/bo/HotDriverPasswordBo.java @@ -0,0 +1,26 @@ +package com.hotwj.platform.driverManagement.driver.domain.bo; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 驾驶员密码修改对象 + * + * @author shihongwei + * @date 2026-05-15 + */ +@Data +public class HotDriverPasswordBo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 新密码 + */ + @NotBlank(message = "新密码不能为空") + private String newPassword; +} diff --git a/src/main/java/com/hotwj/platform/driverManagement/driver/service/IHotDriverService.java b/src/main/java/com/hotwj/platform/driverManagement/driver/service/IHotDriverService.java index e2f149a..c028238 100644 --- a/src/main/java/com/hotwj/platform/driverManagement/driver/service/IHotDriverService.java +++ b/src/main/java/com/hotwj/platform/driverManagement/driver/service/IHotDriverService.java @@ -110,4 +110,13 @@ public interface IHotDriverService { * @return */ boolean updateUserFaceInitialOssId(String businessUserId, Long ossId); + + /** + * 企业负责人修改驾驶员登录密码 + * + * @param driverId 驾驶员ID + * @param newPassword 新密码 + * @return 是否成功 + */ + Boolean updatePassword(String driverId, String newPassword); } diff --git a/src/main/java/com/hotwj/platform/driverManagement/driver/service/impl/HotDriverServiceImpl.java b/src/main/java/com/hotwj/platform/driverManagement/driver/service/impl/HotDriverServiceImpl.java index a5b6a28..2598e69 100644 --- a/src/main/java/com/hotwj/platform/driverManagement/driver/service/impl/HotDriverServiceImpl.java +++ b/src/main/java/com/hotwj/platform/driverManagement/driver/service/impl/HotDriverServiceImpl.java @@ -54,6 +54,7 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; @@ -168,6 +169,35 @@ public class HotDriverServiceImpl implements IHotDriverService { .eq(HotDriver::getId, businessUserId)) > 0; } + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updatePassword(String driverId, String newPassword) { + HotDriver driver = baseMapper.selectById(driverId); + if (driver == null || Long.valueOf(1L).equals(driver.getIsDeleted())) { + throw new ServiceException("驾驶员不存在"); + } + if (driver.getCompanyId() == null) { + throw new ServiceException("驾驶员未关联企业,无法修改密码"); + } + validateCompanyHeadPermission(driver.getCompanyId()); + + if (StringUtils.isBlank(driver.getPhone())) { + throw new ServiceException("驾驶员手机号为空,无法修改密码"); + } + SysUserVo sysUser = sysUserService.selectUserByPhonenumber(driver.getPhone()); + if (sysUser == null || sysUser.getUserId() == null) { + throw new ServiceException("未找到驾驶员关联账号"); + } + + int rows = sysUserService.resetUserPwd(sysUser.getUserId(), PasswordUtils.createPassword(newPassword), driver.getCompanyId()); + if (rows <= 0) { + throw new ServiceException("修改失败,请确认驾驶员账号已开通"); + } + log.info("[驾驶员修改密码] driverId={}, userId={}, operator={}, companyId={}", + driverId, sysUser.getUserId(), LoginHelper.getUserId(), driver.getCompanyId()); + return true; + } + /** * 分页查询驾驶员基本信息列表 * @@ -254,6 +284,31 @@ public class HotDriverServiceImpl implements IHotDriverService { return lqw; } + private void validateCompanyHeadPermission(Long targetCompanyId) { + Long loginUserId = LoginHelper.getUserId(); + Long loginCompanyId = LoginHelper.getCompanyId(); + if (loginUserId == null) { + throw new ServiceException("当前登录信息已失效"); + } + if (loginCompanyId == null || !Objects.equals(loginCompanyId, targetCompanyId)) { + throw new ServiceException("仅可修改本企业驾驶员密码"); + } + String loginPort = LoginHelper.getLoginUser() != null ? LoginHelper.getLoginUser().getLoginPort() : null; + if (!ISysUserLoginPortService.ENTERPRISE_PORT.equals(loginPort)) { + throw new ServiceException("仅企业端负责人可修改驾驶员密码"); + } + Long count = managerMapper.selectCount(Wrappers.lambdaQuery() + .eq(HotCompanySafetyManager::getUserId, loginUserId) + .eq(HotCompanySafetyManager::getCompanyId, targetCompanyId) + .eq(HotCompanySafetyManager::getCompanyHead, 1L) + .eq(HotCompanySafetyManager::getIsDeleted, 0L) + .eq(HotCompanySafetyManager::getIsResigned, 0L) + .eq(HotCompanySafetyManager::getStatus, 1L)); + if (count == null || count == 0) { + throw new ServiceException("仅企业负责人可修改驾驶员密码"); + } + } + /** * 新增驾驶员基本信息 *