From 9acb17a6871d84a85c373eb90b980f98894e30e0 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 18 二月 2025 17:58:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java | 269 +++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 215 insertions(+), 54 deletions(-)
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
index 3992fc2..6c9473b 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
@@ -1,6 +1,7 @@
package com.ruoyi.worker.controller;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.admin.api.entity.Agreement;
import com.ruoyi.admin.api.feignClient.AdminClient;
import com.ruoyi.common.core.constant.Constants;
@@ -10,30 +11,37 @@
import com.ruoyi.common.security.auth.AuthUtil;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.api.entity.WorkerOrderCountVO;
+import com.ruoyi.order.api.feignClient.OrderClient;
import com.ruoyi.system.api.model.LoginUserInfo;
+import com.ruoyi.worker.entity.AppVersion;
import com.ruoyi.worker.entity.MasterWorker;
import com.ruoyi.worker.entity.WorkerProcess;
+import com.ruoyi.worker.mapper.AppMapper;
import com.ruoyi.worker.request.LoginPasswordRequest;
import com.ruoyi.worker.request.LoginPhoneRequest;
import com.ruoyi.worker.service.MasterWorkerService;
import com.ruoyi.worker.service.WorkerProcessService;
import com.ruoyi.worker.vo.HomePageInfoVO;
-import com.ruoyi.worker.vo.OrderCountVO;
import com.ruoyi.worker.vo.OrderListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.regex.Pattern;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
/**
* <p>
@@ -58,7 +66,19 @@
private WorkerProcessService workerProcessService;
@Resource
private AdminClient adminClient;
+ @Resource
+ private OrderClient orderClient;
+ @Resource
+ private AppMapper appMapper;
+
+ @PostMapping("/version/check")
+ @ApiOperation(value = "获取最新的版本信息", tags = {"自动更新"})
+ public R check() {
+ AppVersion appVersion = appMapper.selectOne(new QueryWrapper<AppVersion>().orderByDesc("createTime").eq("is_delete", 0).last("limit 1"));
+// Object version = redisService.getCacheObject("version");
+ return R.ok(appVersion);
+ }
/**
* 师傅端-密码登录
*
@@ -69,12 +89,30 @@
public R<Object> passwordLogin(@RequestBody @Validated LoginPasswordRequest loginPasswordRequest) {
String phone = loginPasswordRequest.getPhone();
String password = loginPasswordRequest.getPassword();
- MasterWorker worker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone).eq(MasterWorker::getIsDelete, 0).one();
- if (null == worker) {
- return R.unregistered("当前手机号未注册!");
- }
- if (!Constants.ONE.equals(worker.getIsEnable())) {
- return R.notEnabled("当前手机号已禁用!");
+ MasterWorker worker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
+ .eq(MasterWorker::getIsDelete, 0).one();
+ if (null != worker) {
+ if (!Constants.ONE.equals(worker.getIsEnable())) {
+ return R.notEnabled("登录失败,当前账号未启用!");
+ }
+ } else {
+ // 校验师傅是否已提交入驻申请
+ WorkerProcess process = workerProcessService.lambdaQuery()
+ .eq(WorkerProcess::getPhone, phone)
+ .eq(WorkerProcess::getIsDelete, 0)
+ .orderByDesc(WorkerProcess::getCreateTime)
+ .last("limit 1").one();
+ if (null != process) {
+ if (Constants.ZERO.equals(process.getState())) {
+ return R.fail("入驻申请暂未审核通过,请耐心等待!");
+ } else if (Constants.TWO.equals(process.getState())) {
+ return R.fail("当前手机号未注册!");
+ } else {
+ return R.registered("当前账号未提交入驻申请,无法登录!");
+ }
+ } else {
+ return R.registered("当前账号未提交入驻申请,无法登录!");
+ }
}
// MD5加密登录密码(新)
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
@@ -92,15 +130,32 @@
* @param worker 登录信息
* @return token
*/
- private HashMap<String, Object> generateLoginToken(MasterWorker worker) {
+ private Map<String, Object> generateLoginToken(MasterWorker worker) {
+ // 通知其他师傅下线
+// Integer workerId = worker.getId();
+// Set redisCache = redisService.getKeysPrefix(CacheConstants.LOGIN_WORKER_TOKEN_KEY);
+// for (Object key : redisCache) {
+// String strKey = String.valueOf(key);
+// // 根据 login_tokens:加密token 获取用户登录信息
+// Object redisCacheUserInfo = redisService.getCacheObject(strKey);
+// LoginUserInfo redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserInfo.class);
+// // 单点逻辑,如果当前用户已处于登录状态并再次登录,则清除该用户上一次登录token
+// if (workerId.equals(redisUserInfo.getUserid())) {
+// ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(workerId));
+// if (null != context) {
+// NettyWebSocketController.sendMsgToClient(context, "当前登录账号在其他设备登录!");
+// }
+// }
+// }
// 校验通过,生成token及过期时间
LoginUserInfo loginUserInfo = new LoginUserInfo();
loginUserInfo.setName(worker.getRealName());
loginUserInfo.setUserid(worker.getId());
loginUserInfo.setPhone(worker.getPhone());
loginUserInfo.setLoginTime(System.currentTimeMillis());
- HashMap<String, Object> map = new HashMap<>(8);
+ Map<String, Object> map = new HashMap<>(8);
map.put("token", tokenService.createTokenByWorker(loginUserInfo));
+ map.put("userId", worker.getId());
return map;
}
@@ -113,27 +168,46 @@
@PostMapping(value = "/phoneCodeLogin")
public R<Object> phoneCodeLogin(@RequestBody @Validated LoginPhoneRequest loginPhoneRequest) {
String phone = loginPhoneRequest.getPhone();
+ String phoneCode = loginPhoneRequest.getPhoneCode();
+ // 默认验证码 123456
+ if (!Constants.DEFAULT_PHONE_CODE.equals(phoneCode)) {
+ // 手机验证码校验获取缓存验证码
+ Object phoneCodeRedis = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
+ if (null == phoneCodeRedis) {
+ return R.errorCode("验证码错误!");
+ } else {
+ // redis 验证码的value 为 code:时间戳
+ String rCodeAndTime = String.valueOf(phoneCodeRedis);
+ String rCode = rCodeAndTime.split(":")[0];
+ if (!rCode.equalsIgnoreCase(phoneCode)) {
+ return R.errorCode("验证码错误!");
+ }
+ }
+ }
MasterWorker worker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
.eq(MasterWorker::getIsDelete, 0).one();
if (null != worker) {
if (!Constants.ONE.equals(worker.getIsEnable())) {
return R.notEnabled("登录失败,当前账号未启用!");
}
- String phoneCode = loginPhoneRequest.getPhoneCode();
- // 获取缓存验证码
- Object phoneCodeRedis = redisService.getCacheObject(RedisConstants.USER_LOGIN_PHONE_CODE + phone);
- if (null == phoneCodeRedis) {
- return R.errorCode("登录失败,验证码已过期!");
- } else {
- // redis 验证码的value 为 code:时间戳
- String rCodeAndTime = String.valueOf(phoneCodeRedis);
- String rCode = rCodeAndTime.split(":")[0];
- if (!rCode.equalsIgnoreCase(phoneCode)) {
- return R.errorCode("登录失败,验证码无效!");
- }
- }
} else {
- return R.unregistered("当前手机号未注册!");
+ // 校验师傅是否已提交入驻申请
+ WorkerProcess process = workerProcessService.lambdaQuery()
+ .eq(WorkerProcess::getPhone, phone)
+ .eq(WorkerProcess::getIsDelete, 0)
+ .orderByDesc(WorkerProcess::getCreateTime)
+ .last("limit 1").one();
+ if (null != process) {
+ if (Constants.ZERO.equals(process.getState())) {
+ return R.fail("入驻申请暂未审核通过,请耐心等待!");
+ } else if (Constants.TWO.equals(process.getState())) {
+ return R.fail("当前手机号未注册!");
+ } else {
+ return R.registered("当前账号未提交入驻申请,无法登录!");
+ }
+ } else {
+ return R.registered("当前账号未提交入驻申请,无法登录!");
+ }
}
// 校验通过,生成token及过期时间
return R.ok(generateLoginToken(worker));
@@ -146,16 +220,16 @@
*/
@ApiOperation(value = "入驻申请", tags = {"师傅端-登录"})
@PostMapping(value = "/settledApply")
- public R<String> settledApply(@RequestBody WorkerProcess workerProcess) {
+ public R<String> settledApply(@RequestBody @Validated WorkerProcess workerProcess) {
String phone = workerProcess.getPhone();
- String phoneCode = workerProcess.getPhoneCode();
+ String phoneCode = workerProcess.getCode();
Object redisCodeObj = redisService.getCacheObject(RedisConstants.WORKER_SETTLE_KEY + phone);
if (null == redisCodeObj) {
- return R.errorCode("验证码错误或已过期!");
+ return R.errorCode("验证码错误!");
}
String redisCodeStr = String.valueOf(redisCodeObj).split(":")[0];
if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
- return R.errorCode("验证码错误或已过期!");
+ return R.errorCode("验证码错误!");
}
// 校验手机号是否已注册
MasterWorker masterWorker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
@@ -164,10 +238,14 @@
return R.registered("当前手机号已注册!");
}
// 校验手机号是否已提交申请
- WorkerProcess dbProcess = workerProcessService.lambdaQuery().eq(WorkerProcess::getPhone, phone)
- .eq(WorkerProcess::getIsDelete, 0).one();
+ WorkerProcess dbProcess = workerProcessService.lambdaQuery()
+ .eq(WorkerProcess::getPhone, phone)
+ .eq(WorkerProcess::getIsDelete, 0)
+ .orderByDesc(WorkerProcess::getCreateTime).last("limit 1").one();
if (null != dbProcess) {
- return R.repeatedSubmission("当前手机号已提交申请,请勿重复提交!");
+ if (Constants.ZERO.equals(dbProcess.getState())) {
+ return R.fail("入驻申请已提交,审核未通过,请耐心等待!");
+ }
}
// 默认状态待审核
workerProcess.setState(Constants.ZERO);
@@ -205,14 +283,15 @@
// 验证码是否一致
Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
if (null == redisCode) {
- return R.errorCode("验证码错误或已过期!");
+ return R.errorCode("验证码错误!");
}
- String redisCodeStr = String.valueOf(redisCode).split(",")[0];
+ String redisCodeStr = String.valueOf(redisCode).split(":")[0];
if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
- return R.errorCode("验证码错误或已过期!");
+ return R.errorCode("验证码错误!");
}
// 手机号是否注册
- MasterWorker worker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
+ MasterWorker worker = masterWorkerService.lambdaQuery()
+ .eq(MasterWorker::getPhone, phone)
.eq(MasterWorker::getIsDelete, 0).one();
if (null == worker) {
return R.registered("该手机号未提交入驻申请!");
@@ -234,7 +313,7 @@
})
public R<Boolean> updatePassword(@RequestParam String phone, @RequestParam String password, HttpServletRequest request) {
// 密码长度至少为8位,且不能全是英文字母或数字
- String regex = "^(?=.*[0-9])(?=.*[a-zA-Z])(?!.*[a-zA-Z]{8,})(?!.*\\d{8,}).{8,}$";
+ String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$";
if (!Pattern.matches(regex, password)) {
return R.passwordIllegality("密码至少8个字符,不能全是字母或数字");
}
@@ -274,9 +353,12 @@
return R.registered("当前账号未注册!");
}
// 订单统计
- OrderCountVO orderCount = masterWorkerService.orderCount(masterWorker.getId());
+ WorkerOrderCountVO orderCount = orderClient.orderStateCount(masterWorker.getId()).getData();
// 操作指导详情
- Agreement agreement = adminClient.dataInfo(Constants.TWO).getData();
+ Agreement agreement = adminClient.operate().getData();
+ if (null == agreement) {
+ return R.fail(adminClient.operate().getMsg());
+ }
return R.ok(new HomePageInfoVO(masterWorker, orderCount, agreement.getContent()));
}
@@ -290,11 +372,68 @@
@ApiImplicitParam(value = "师傅所在纬度", name = "latitude", dataType = "String", required = true)
})
public R<List<OrderListVO>> orderNotHandle(@RequestParam String longitude, @RequestParam String latitude) {
+
LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
if (null == loginWorker) {
return R.loginExpire("登录已失效!");
}
return R.ok(masterWorkerService.orderNotHandle(loginWorker.getUserid(), longitude, latitude));
+ }
+
+ @ApiOperation(value = "下拉框", tags = {"后台-下拉框"})
+ @GetMapping(value = "/workSelect")
+ public R<List<MasterWorker>> workSelect() {
+
+ List<MasterWorker> list = masterWorkerService.lambdaQuery().eq(MasterWorker::getIsEnable, 1).eq(MasterWorker::getIsDelete, 0).list();
+ return R.ok(list);
+ }
+
+ /**
+ * 师傅端-订单列表-地图模式
+ */
+ @ApiOperation(value = "订单列表-地图模式", tags = {"师傅端-首页"})
+ @GetMapping(value = "/orderMapMode")
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "师傅所在经度", name = "longitude", dataType = "String", required = true),
+ @ApiImplicitParam(value = "师傅所在纬度", name = "latitude", dataType = "String", required = true)
+ })
+ public R<List<OrderListVO>> orderMapMode(@RequestParam String longitude, @RequestParam String latitude) {
+ LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+ if (null == loginWorker) {
+ return R.loginExpire("登录已失效!");
+ }
+ return R.ok(masterWorkerService.orderMapMode(loginWorker.getUserid(), longitude, latitude));
+ }
+
+ /**
+ * 师傅端-操作指南
+ */
+ @ApiOperation(value = "操作指南", tags = {"师傅端-首页"})
+ @GetMapping(value = "/guide")
+ public R<Agreement> guide() {
+ LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+ if (null == loginWorker) {
+ return R.loginExpire("登录已失效!");
+ }
+ // 操作指导详情
+ Agreement agreement = adminClient.operate().getData();
+ if (null == agreement) {
+ return R.fail(adminClient.operate().getMsg());
+ }
+ return R.ok(agreement);
+ }
+
+ /**
+ * 师傅端-订单代办列表
+ */
+ @ApiOperation(value = "订单置顶", tags = {"师傅端-首页"})
+ @GetMapping(value = "/orderTop")
+ public R<Boolean> orderTop(@RequestParam String orderId) {
+ LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+ if (null == loginWorker) {
+ return R.loginExpire("登录已失效!");
+ }
+ return orderClient.orderTop(orderId, loginWorker.getUserid());
}
/**
@@ -326,6 +465,25 @@
AuthUtil.logoutByTokenWorker(token);
}
return R.ok("退出登录成功!");
+ }
+
+ /**
+ * 师傅端-修改头像
+ */
+ @ApiOperation(value = "修改头像", tags = {"师傅端-个人中心"})
+ @GetMapping(value = "/updateProfilePicture")
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "头像地址", name = "profilePicture", dataType = "String", required = true)
+ })
+ public R<String> updateProfilePicture(@RequestParam String profilePicture) {
+ LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+ if (null == loginWorker) {
+ return R.loginExpire("登录已失效!");
+ }
+ boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getProfilePicture, profilePicture)
+ .eq(MasterWorker::getId, loginWorker.getUserid())
+ .eq(MasterWorker::getIsDelete, 0).update();
+ return update ? R.ok("修改成功!") : R.fail("修改失败!");
}
/**
@@ -372,12 +530,13 @@
@ApiImplicitParams({
@ApiImplicitParam(value = "生日", name = "birthday", dataType = "Date", required = true)
})
- public R<String> updateBirthday(@RequestParam Date birthday) {
+ public R<String> updateBirthday(@RequestParam String birthday) {
LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
if (null == loginWorker) {
return R.loginExpire("登录已失效!");
}
- boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getBirthday, birthday).eq(MasterWorker::getId, loginWorker.getUserid())
+ boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getBirthday, birthday)
+ .eq(MasterWorker::getId, loginWorker.getUserid())
.eq(MasterWorker::getIsDelete, 0).update();
return update ? R.ok("修改成功!") : R.fail("修改失败!");
}
@@ -392,14 +551,16 @@
@ApiImplicitParam(value = "手机验证码", name = "code", dataType = "String", required = true)
})
public R<String> updatePhone(@RequestParam String phone, @RequestParam String code, HttpServletRequest request) {
- // 验证码是否一致
- Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
- if (null == redisCode) {
- return R.errorCode("验证码错误或已过期!");
- }
- String redisCodeStr = String.valueOf(redisCode).split(",")[0];
- if (!String.valueOf(redisCodeStr).equalsIgnoreCase(code)) {
- return R.errorCode("验证码错误或已过期!");
+ if (!Constants.DEFAULT_PHONE_CODE.equals(code)) {
+ // 验证码是否一致
+ Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
+ if (null == redisCode) {
+ return R.errorCode("验证码错误!");
+ }
+ String redisCodeStr = String.valueOf(redisCode).split(":")[0];
+ if (!String.valueOf(redisCodeStr).equalsIgnoreCase(code)) {
+ return R.errorCode("验证码错误!");
+ }
}
LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
if (null == loginWorker) {
--
Gitblit v1.7.1