Pārlūkot izejas kodu

商家端 律师端登录修改

fcw 1 nedēļu atpakaļ
vecāks
revīzija
b78dd0f155

+ 3 - 2
alien-entity/src/main/java/shop/alien/entity/store/LawyerUser.java

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import shop.alien.util.encryption.EncryptTypeHandler;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -23,7 +24,7 @@ import java.util.List;
  */
 @Data
 @JsonInclude
-@TableName("lawyer_user")
+@TableName(value = "lawyer_user", autoResultMap = true)
 @ApiModel(value = "LawyerUser对象", description = "律师用户")
 public class LawyerUser extends Model<LawyerUser> {
 
@@ -69,7 +70,7 @@ public class LawyerUser extends Model<LawyerUser> {
     private String idCard;
 
     @ApiModelProperty(value = "密码")
-    @TableField("password")
+    @TableField(value = "password", typeHandler = EncryptTypeHandler.class)
     private String password;
 
     @ApiModelProperty(value = "支付密码")

+ 16 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/StoreUserPasswordDto.java

@@ -0,0 +1,16 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("商户端密码相关请求")
+public class StoreUserPasswordDto {
+
+    @ApiModelProperty("登录密码")
+    private String password;
+
+    @ApiModelProperty("确认密码")
+    private String confirmPassword;
+}

+ 19 - 6
alien-gateway/src/main/java/shop/alien/gateway/controller/StoreUserController.java

@@ -12,6 +12,7 @@ import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.mapper.StoreUserGatewayMapper;
 import shop.alien.gateway.service.StoreUserService;
 
+import java.util.Date;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -40,16 +41,16 @@ public class StoreUserController {
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "password", value = "密码", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "password", value = "密码", dataType = "String", paramType = "query", required = false),
             @ApiImplicitParam(name = "isPassword", value = "是否密码登录", dataType = "Boolean", paramType = "query", required = true),
-            @ApiImplicitParam(name = "code", value = "验证码", dataType = "String", paramType = "query", required = true)
+            @ApiImplicitParam(name = "code", value = "验证码", dataType = "String", paramType = "query", required = false)
     })
     @GetMapping("/login")
     public R<StoreUserVo> login(
             @RequestParam("phone") String phone,
-            @RequestParam("password") String password,
+            @RequestParam(value ="password",required = false) String password,
             @RequestParam("isPassword") Boolean isPassword,
-            @RequestParam("code") String code) {
+            @RequestParam(value ="code",required = false) String code) {
         log.info("StoreUserController.login?phone={}&password={}&isPassword={}&code={}", phone, password, isPassword, code);
         if (!isPassword) {
             // 2025-11-04 验证码-商户端登录
@@ -61,10 +62,22 @@ public class StoreUserController {
                 return R.fail("验证码错误,请重新输入");
             }
         }
-        StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>()
+        StoreUser storeUser = new StoreUser();
+        storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>()
                 .eq(StoreUser::getPhone, phone));
         if (null == storeUser) {
-            return R.fail("当前账号不存在,请先去注册账号!");
+            StoreUser user = new StoreUser();
+            user.setPhone(phone);
+            user.setPassType(2);
+            user.setNickName(phone);
+            user.setCreatedTime(new Date());
+            user.setPassword("");
+            int num = storeUserMapper.insert(user);
+            if(num > 0){
+                storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>()
+                        .eq(StoreUser::getPhone, phone));
+                storeUserService.createToKen(storeUser);
+            }
         }
         if (storeUser.getStatus() == 1) {
             return R.fail("账号被禁用");

+ 10 - 35
alien-lawyer/src/main/java/shop/alien/lawyer/controller/LawyerUserLogInController.java

@@ -1,27 +1,19 @@
 package shop.alien.lawyer.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperationSupport;
 import io.swagger.annotations.ApiSort;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerUser;
 import shop.alien.entity.store.dto.LawyerUserDto;
 import shop.alien.entity.store.vo.LawyerUserVo;
-import shop.alien.lawyer.config.BaseRedisService;
 import shop.alien.lawyer.service.LawyerUserLogInService;
 import shop.alien.lawyer.service.LawyerUserService;
-import shop.alien.mapper.LawyerUserMapper;
-
-import java.util.Objects;
-import java.util.Optional;
 
 /**
  * 门店用户 前端控制器
@@ -40,8 +32,6 @@ public class LawyerUserLogInController {
 
     private final LawyerUserLogInService lawyerUserService;
     private final LawyerUserService lawyerUserBizService;
-    private final LawyerUserMapper lawyerUserMapper;
-    private final BaseRedisService baseRedisService;
 
     @ApiOperation("律师用户注册")
     @ApiOperationSupport(order = 1)
@@ -51,6 +41,14 @@ public class LawyerUserLogInController {
         return lawyerUserService.register(lawyerUserDto);
     }
 
+    @ApiOperation(value = "完善律师个人信息", notes = "登录后补全资料,返回更新后的用户信息,不重新签发 token")
+    @ApiOperationSupport(order = 8)
+    @PostMapping("/completeProfile")
+    public R<LawyerUserVo> completeProfile(@RequestBody LawyerUserDto lawyerUserDto) {
+        log.info("LawyerUserLogInController.completeProfile?lawyerUserDto={}", lawyerUserDto);
+        return lawyerUserService.completeProfile(lawyerUserDto);
+    }
+
     @ApiOperation("律师用户验证码校验")
     @ApiOperationSupport(order = 2)
     @PostMapping("/checkMsgCode")
@@ -64,25 +62,7 @@ public class LawyerUserLogInController {
     @PostMapping("/login")
     public R<LawyerUserVo> login(@RequestBody LawyerUserDto lawyerUserDto) {
         log.info("LawyerUserLogInController.login?lawyerUserDto={}", lawyerUserDto);
-        LawyerUser lawyerUser = lawyerUserMapper.selectOne(new LambdaQueryWrapper<LawyerUser>()
-                .eq(LawyerUser::getPhone, lawyerUserDto.getPhone()).eq(LawyerUser::getDeleteFlag, 0));
-        if (null == lawyerUser) {
-            return R.fail("当前账号不存在,请先去注册账号!");
-        }
-        R<LawyerUser> loginCheck = lawyerUserBizService.checkLogin(lawyerUserDto.getPhone());
-        if ("账号已注销".equals(loginCheck.getMsg())) {
-            return R.fail("账号已注销");
-        }
-        if ("账号已被禁用".equals(loginCheck.getMsg())) {
-            return R.fail("账号被禁用");
-        }
-        LawyerUser lawyerUser1 = new LawyerUser();
-        lawyerUser1.setId(lawyerUser.getId());
-        lawyerUser1.setIsOnline(1);
-        lawyerUserMapper.updateById(lawyerUser1);
-        return Optional.ofNullable(lawyerUser).
-                map(user -> lawyerUserDto.getIsPassword() ? checkPassword(user, lawyerUserDto.getPassword()) : lawyerUserService.createToKen(user)).
-                orElseGet(() -> R.fail("手机号不存在"));
+        return lawyerUserService.login(lawyerUserDto);
     }
 
     @ApiOperation("律师登录前校验")
@@ -108,7 +88,7 @@ public class LawyerUserLogInController {
     public R updatePassWord(@RequestBody LawyerUserDto lawyerUserDto) {
         log.info("LawyerUserLogInController.updatePassWord?lawyerUserDto={}", lawyerUserDto);
         try {
-            LawyerUser lawyerUser = lawyerUserMapper.selectOne(new LambdaQueryWrapper<LawyerUser>()
+            LawyerUser lawyerUser = lawyerUserBizService.getOne(new LambdaQueryWrapper<LawyerUser>()
                     .eq(LawyerUser::getPhone, lawyerUserDto.getPhone()));
             if (null == lawyerUser) {
                 return R.fail("当前账号不存在,请先去注册账号!");
@@ -135,9 +115,4 @@ public class LawyerUserLogInController {
         }
     }
 
-    private R<LawyerUserVo> checkPassword(LawyerUser lawyerUser, String password) {
-        return Objects.equals(password, lawyerUser.getPassword())
-                ? lawyerUserService.createToKen(lawyerUser)
-                : R.fail("密码错误");
-    }
 }

+ 5 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/LawyerUserLogInService.java

@@ -20,8 +20,13 @@ public interface LawyerUserLogInService extends IService<LawyerUser> {
      */
     R<LawyerUserVo> createToKen(LawyerUser lawyerUser);
     R<LawyerUserVo> register(LawyerUserDto lawyerUserDto);
+
+    R<LawyerUserVo> completeProfile(LawyerUserDto lawyerUserDto);
+
     R checkMsgCode(LawyerUserDto lawyerUserDto);
 
+    R<LawyerUserVo> login(LawyerUserDto lawyerUserDto);
+
     R logout(LawyerUserDto lawyerUserDto);
     R updatePassWord(LawyerUserDto lawyerUserDto);
 

+ 148 - 8
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerUserLogInServiceImpl.java

@@ -2,6 +2,7 @@ package shop.alien.lawyer.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,21 +13,21 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import shop.alien.entity.result.R;
-import shop.alien.entity.store.LawFirm;
+
 import shop.alien.entity.store.LawyerServiceArea;
 import shop.alien.entity.store.LawyerUser;
-import shop.alien.entity.store.StoreUser;
+
 import shop.alien.entity.store.dto.LawyerUserDto;
 import shop.alien.entity.store.vo.LawyerUserVo;
 import shop.alien.lawyer.config.BaseRedisService;
 import shop.alien.lawyer.service.LawyerUserLogInService;
-import shop.alien.mapper.LawFirmMapper;
+import shop.alien.lawyer.service.LawyerUserService;
 import shop.alien.mapper.LawyerServiceAreaMapper;
 import shop.alien.mapper.LawyerUserMapper;
 import shop.alien.util.common.JwtUtil;
 
 import java.util.*;
-import java.util.stream.Collectors;
+
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 
@@ -53,7 +54,7 @@ public class LawyerUserLogInServiceImpl extends ServiceImpl<LawyerUserMapper, La
     private final BaseRedisService baseRedisService;
     private final LawyerUserMapper lawyerUserMapper;
     private final LawyerServiceAreaMapper lawyerServiceAreaMapper;
-    private final LawFirmMapper lawFirmMapper;
+    private final LawyerUserService lawyerUserService;
 
     /**
      * token
@@ -96,6 +97,8 @@ public class LawyerUserLogInServiceImpl extends ServiceImpl<LawyerUserMapper, La
         tokenMap.put("passType", lawyerUser.getPassType().toString());
         lawyerUserVo.setToken(JwtUtil.createJWT("lawyer_" + lawyerUser.getPhone(), lawyerUser.getName(), JSONObject.toJSONString(tokenMap), effectiveTimeIntLong));
         baseRedisService.setString("lawyer_" + lawyerUser.getPhone(), lawyerUserVo.getToken());
+        log.debug("token:-------------------------------------------");
+        log.debug(lawyerUserVo.getToken());
         return R.data(lawyerUserVo);
     }
 
@@ -175,6 +178,85 @@ public class LawyerUserLogInServiceImpl extends ServiceImpl<LawyerUserMapper, La
     }
 
     @Override
+    public R<LawyerUserVo> completeProfile(LawyerUserDto lawyerUserDto) {
+        if (lawyerUserDto == null || StringUtils.isEmpty(lawyerUserDto.getPhone())) {
+            return R.fail("手机号不能为空");
+        }
+        LawyerUser lawyerUser = lawyerUserMapper.selectOne(new LambdaQueryWrapper<LawyerUser>()
+                .eq(LawyerUser::getPhone, lawyerUserDto.getPhone())
+                .eq(LawyerUser::getDeleteFlag, 0)
+                .last("limit 1"));
+        if (ObjectUtils.isEmpty(lawyerUser)) {
+            return R.fail("当前账号不存在,请先登录");
+        }
+        if (lawyerUser.getStatus() != null && lawyerUser.getStatus() == 0) {
+            return R.fail("账号被禁用");
+        }
+        if (lawyerUser.getLogoutFlag() != null && LawyerUser.LOGOUT_FLAG_DONE == lawyerUser.getLogoutFlag()) {
+            return R.fail("账号已注销");
+        }
+
+        String certNo = lawyerUserDto.getLawyerCertificateNo();
+        if (certNo != null && !certNo.trim().isEmpty()) {
+            certNo = certNo.trim();
+            LawyerUser certDup = lawyerUserMapper.selectOne(new LambdaQueryWrapper<LawyerUser>()
+                    .eq(LawyerUser::getLawyerCertificateNo, certNo)
+                    .eq(LawyerUser::getDeleteFlag, 0)
+                    .ne(LawyerUser::getId, lawyerUser.getId())
+                    .last("limit 1"));
+            if (certDup != null) {
+                return R.fail("该律师执业证号已被使用,无法重复注册");
+            }
+        }
+
+        LawyerUser update = new LawyerUser();
+        BeanUtils.copyProperties(lawyerUserDto, update);
+        update.setId(lawyerUser.getId());
+        update.setPhone(lawyerUser.getPhone());
+        update.setLogoutFlag(lawyerUser.getLogoutFlag());
+        update.setStatus(lawyerUser.getStatus());
+        update.setDeleteFlag(lawyerUser.getDeleteFlag());
+        if (certNo != null && !certNo.isEmpty()) {
+            update.setLawyerCertificateNo(certNo);
+        }
+        if (update.getName() != null && !update.getName().isEmpty()) {
+            update.setNickName(update.getName().charAt(0) + "律师");
+        }
+        if (update.getPassType() == null) {
+            update.setPassType(lawyerUser.getPassType() != null ? lawyerUser.getPassType() : 2);
+        }
+        if (update.getIsOnline() == null) {
+            update.setIsOnline(lawyerUser.getIsOnline() != null ? lawyerUser.getIsOnline() : 1);
+        }
+        if (update.getIsRecommended() == null) {
+            update.setIsRecommended(0);
+        }
+        if (update.getOrderReceivingStatus() == null) {
+            update.setOrderReceivingStatus(1);
+        }
+        lawyerUserMapper.updateById(update);
+
+        List<Integer> problemScenarioIds = lawyerUserDto.getProblemScenarioIds();
+        if (!CollectionUtils.isEmpty(problemScenarioIds)) {
+            UpdateWrapper<LawyerServiceArea> deleteWrapper = new UpdateWrapper<>();
+            deleteWrapper.eq("lawyer_user_id", lawyerUser.getId())
+                    .set("delete_flag", 1)
+                    .set("updated_time", new Date());
+            lawyerServiceAreaMapper.update(null, deleteWrapper);
+            for (int i = 0; i < problemScenarioIds.size(); i++) {
+                LawyerServiceArea lawyerServiceArea = new LawyerServiceArea();
+                lawyerServiceArea.setLawyerUserId(lawyerUser.getId());
+                lawyerServiceArea.setProblemScenarioId(problemScenarioIds.get(i));
+                lawyerServiceArea.setSortOrder(i);
+                lawyerServiceArea.setCreatedTime(new Date());
+                lawyerServiceAreaMapper.insert(lawyerServiceArea);
+            }
+        }
+
+        return lawyerUserService.getLawyerInfo(lawyerUser.getId());
+    }
+
+    @Override
     public R checkMsgCode(LawyerUserDto lawyerUserDto) {
         String string = baseRedisService.getString("verification_lawyer_" + lawyerUserDto.getPhone());
         if (StringUtils.isNotEmpty(string)) {
@@ -204,6 +286,66 @@ public class LawyerUserLogInServiceImpl extends ServiceImpl<LawyerUserMapper, La
     }
 
     @Override
+    public R<LawyerUserVo> login(LawyerUserDto lawyerUserDto) {
+        if (lawyerUserDto == null || StringUtils.isEmpty(lawyerUserDto.getPhone())) {
+            return R.fail("手机号不能为空");
+        }
+        boolean passwordLogin = Boolean.TRUE.equals(lawyerUserDto.getIsPassword());
+        LawyerUser lawyerUser = findActiveLawyerByPhone(lawyerUserDto.getPhone());
+        if (lawyerUser == null) {
+            if (passwordLogin) {
+                return R.fail("当前账号不存在,请先去注册账号");
+            }
+            lawyerUser = createLawyerOnLogin(lawyerUserDto.getPhone());
+        }
+        R<LawyerUser> loginCheck = lawyerUserService.checkLogin(lawyerUserDto.getPhone());
+        if ("账号已注销".equals(loginCheck.getMsg())) {
+            return R.fail("账号已注销");
+        }
+        if ("账号已被禁用".equals(loginCheck.getMsg())) {
+            return R.fail("账号被禁用");
+        }
+        LawyerUser onlineUpdate = new LawyerUser();
+        onlineUpdate.setId(lawyerUser.getId());
+        onlineUpdate.setIsOnline(1);
+        lawyerUserMapper.updateById(onlineUpdate);
+        if (passwordLogin) {
+            return checkPassword(lawyerUser, lawyerUserDto.getPassword());
+        }
+        return createToKen(lawyerUser);
+    }
+
+    private LawyerUser findActiveLawyerByPhone(String phone) {
+        return lawyerUserMapper.selectOne(new LambdaQueryWrapper<LawyerUser>()
+                .eq(LawyerUser::getPhone, phone)
+                .eq(LawyerUser::getDeleteFlag, 0)
+                .orderByDesc(LawyerUser::getCreatedTime)
+                .last("LIMIT 1"));
+    }
+
+    private LawyerUser createLawyerOnLogin(String phone) {
+        LawyerUser user = new LawyerUser();
+        user.setIsOnline(1);
+        user.setPhone(phone);
+        user.setName(phone);
+        user.setPassType(2);
+        lawyerUserMapper.insert(user);
+        return user;
+    }
+
+    private R<LawyerUserVo> checkPassword(LawyerUser lawyerUser, String password) {
+        if (StringUtils.isEmpty(password)) {
+            return R.fail("密码不能为空");
+        }
+        if (StringUtils.isEmpty(lawyerUser.getPassword())) {
+            return R.fail("尚未设置登录密码,请使用验证码登录或设置密码");
+        }
+        return Objects.equals(password, lawyerUser.getPassword())
+                ? createToKen(lawyerUser)
+                : R.fail("密码错误");
+    }
+
+    @Override
     public R logout(LawyerUserDto lawyerUserDto) {
         LawyerUser lawyerUser = new LawyerUser();
         lawyerUser.setId(lawyerUserDto.getId());
@@ -224,11 +366,9 @@ public class LawyerUserLogInServiceImpl extends ServiceImpl<LawyerUserMapper, La
                 LawyerUserVo vo = new LawyerUserVo();
                 if (ObjectUtils.isNotEmpty(lawyerUser)) {
                     LawyerUser update = new LawyerUser();
-                    update.setPassword(lawyerUserDto.getPassword());
                     update.setId(lawyerUser.getId());
+                    update.setPassword(lawyerUserDto.getPassword());
                     lawyerUserMapper.updateById(update);
-                    BeanUtils.copyProperties(lawyerUser, vo);
-                    return createToKen(lawyerUser);
                 }
                 return R.data(ObjectUtils.isNotEmpty(lawyerUser) ? vo : "null");
             }else {

+ 17 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreUserController.java

@@ -12,6 +12,8 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.StoreImg;
 import shop.alien.entity.store.StorePlatformMenu;
 import shop.alien.entity.store.StoreUser;
+import shop.alien.entity.store.UserLoginInfo;
+import shop.alien.entity.store.dto.StoreUserPasswordDto;
 import shop.alien.entity.store.vo.StoreInfoVo;
 import shop.alien.entity.store.vo.StoreUserVo;
 import shop.alien.entity.store.vo.StoreUserWithStoreVo;
@@ -21,8 +23,11 @@ import shop.alien.mapper.StoreUserMapper;
 import shop.alien.store.config.BaseRedisService;
 import shop.alien.store.service.RoleMenuService;
 import shop.alien.store.service.StoreInfoService;
+import shop.alien.store.service.StoreUserPasswordService;
 import shop.alien.store.service.StoreUserService;
 import shop.alien.store.service.SubAccountStoreService;
+import shop.alien.util.common.TokenInfo;
+import springfox.documentation.annotations.ApiIgnore;
 
 import java.io.IOException;
 import java.util.List;
@@ -45,6 +50,8 @@ public class StoreUserController {
 
     private final StoreUserService storeUserService;
 
+    private final StoreUserPasswordService storeUserPasswordService;
+
     private final StoreUserMapper storeUserMapper;
 
     private final StoreInfoService storeInfoService;
@@ -106,6 +113,16 @@ public class StoreUserController {
         return storeUserService.forgetOrModifyPassword(phone, newPhone, oldPassword, newPassword, confirmNewPassword, verificationCode, type);
     }
 
+    @ApiOperation("设置当前商户账号登录密码(需登录)")
+    @ApiOperationSupport(order = 3)
+    @PostMapping("/password/set")
+    public R<String> setPassword(@ApiIgnore @TokenInfo UserLoginInfo userLoginInfo,
+                                 @RequestBody StoreUserPasswordDto dto) {
+        log.info("StoreUserController.setPassword, userId={}",
+                userLoginInfo == null ? null : userLoginInfo.getUserId());
+        return storeUserPasswordService.setPassword(userLoginInfo, dto);
+    }
+
     @ApiOperation("更换绑定手机号效验原密码或验证码")
     @ApiOperationSupport(order = 2)
     @ApiImplicitParams({@ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "oldPassword", value = "旧密码", dataType = "String", paramType = "query"), @ApiImplicitParam(name = "verificationCode", value = "验证码", dataType = "String", paramType = "query")})

+ 10 - 0
alien-store/src/main/java/shop/alien/store/service/StoreUserPasswordService.java

@@ -0,0 +1,10 @@
+package shop.alien.store.service;
+
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.UserLoginInfo;
+import shop.alien.entity.store.dto.StoreUserPasswordDto;
+
+public interface StoreUserPasswordService {
+
+    R<String> setPassword(UserLoginInfo login, StoreUserPasswordDto dto);
+}

+ 54 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreUserPasswordServiceImpl.java

@@ -0,0 +1,54 @@
+package shop.alien.store.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.StoreUser;
+import shop.alien.entity.store.UserLoginInfo;
+import shop.alien.entity.store.dto.StoreUserPasswordDto;
+import shop.alien.mapper.StoreUserMapper;
+import shop.alien.store.service.StoreUserPasswordService;
+
+import java.util.Objects;
+
+@Service
+@RequiredArgsConstructor
+public class StoreUserPasswordServiceImpl implements StoreUserPasswordService {
+
+    private final StoreUserMapper storeUserMapper;
+
+    @Override
+    public R<String> setPassword(UserLoginInfo login, StoreUserPasswordDto dto) {
+        if (login == null || login.getUserId() <= 0) {
+            return R.fail("请先登录");
+        }
+        if (!"store".equals(login.getType())) {
+            return R.fail("仅支持商户端操作");
+        }
+        if (dto == null || StringUtils.isBlank(dto.getPassword())) {
+            return R.fail("密码不能为空");
+        }
+        if (!Objects.equals(dto.getPassword(), dto.getConfirmPassword())) {
+            return R.fail("两次密码输入不一致");
+        }
+        StoreUser storeUser = storeUserMapper.selectById(login.getUserId());
+        if (storeUser == null || (storeUser.getDeleteFlag() != null && storeUser.getDeleteFlag() == 1)) {
+            return R.fail("商户账号不存在");
+        }
+        if (storeUser.getStatus() != null && storeUser.getStatus() == 1) {
+            return R.fail("账号被禁用");
+        }
+        if (storeUser.getLogoutFlag() != null && storeUser.getLogoutFlag() == StoreUser.LOGOUT_FLAG_DONE) {
+            return R.fail("账号已注销");
+        }
+        StoreUser update = new StoreUser();
+        update.setId(login.getUserId());
+        update.setPassword(dto.getPassword());
+        update.setPassType(1);
+        if (storeUserMapper.updateById(update) <= 0) {
+            return R.fail("设置密码失败");
+        }
+        return R.success("设置密码成功");
+    }
+}