fix: 优化逻辑
This commit is contained in:
parent
6a0216c3bf
commit
3a7f89b9a0
@ -95,6 +95,19 @@ public class FishDraftData implements Serializable {
|
||||
*/
|
||||
private String picpth;
|
||||
|
||||
/**
|
||||
* 过鱼视频文件路径
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String vdpthName;
|
||||
|
||||
/**
|
||||
* 图片文件路径
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String picpthName;
|
||||
|
||||
|
||||
/**
|
||||
* 是否鱼苗(0否 1是)
|
||||
*/
|
||||
|
||||
@ -42,16 +42,21 @@ public class FishImportResult {
|
||||
private FishDraftData data;
|
||||
private List<String> unrecognizedFields;
|
||||
private List<String> warnings;
|
||||
|
||||
private List<String> vdpthsWarnings;
|
||||
private List<String> picpthsWarnings;
|
||||
public FishImportRow() {
|
||||
this.unrecognizedFields = new ArrayList<>();
|
||||
this.warnings = new ArrayList<>();
|
||||
this.vdpthsWarnings = new ArrayList<>();
|
||||
this.picpthsWarnings = new ArrayList<>();
|
||||
}
|
||||
|
||||
public FishImportRow(int rowIndex) {
|
||||
this.rowIndex = rowIndex;
|
||||
this.unrecognizedFields = new ArrayList<>();
|
||||
this.warnings = new ArrayList<>();
|
||||
this.vdpthsWarnings = new ArrayList<>();
|
||||
this.picpthsWarnings = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,8 +1,12 @@
|
||||
package com.yfd.platform.data.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
@ -10,6 +14,8 @@ import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.file.Files;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@ -42,37 +48,51 @@ public class AttachmentUploadService {
|
||||
"Content-Type: application/octet-stream\r\n\r\n";
|
||||
String footer = "\r\n--" + boundary + "--\r\n";
|
||||
|
||||
byte[] body;
|
||||
if (fileName.toLowerCase().endsWith(".mp4") || fileName.toLowerCase().endsWith(".avi") ||
|
||||
fileName.toLowerCase().endsWith(".mov") || fileName.toLowerCase().endsWith(".wmv")) {
|
||||
body = new byte[header.getBytes().length + fileContent.length + footer.getBytes().length];
|
||||
System.arraycopy(header.getBytes(), 0, body, 0, header.getBytes().length);
|
||||
System.arraycopy(fileContent, 0, body, header.getBytes().length, fileContent.length);
|
||||
System.arraycopy(footer.getBytes(), 0, body, header.getBytes().length + fileContent.length, footer.getBytes().length);
|
||||
} else {
|
||||
body = new byte[header.getBytes().length + fileContent.length + footer.getBytes().length];
|
||||
System.arraycopy(header.getBytes(), 0, body, 0, header.getBytes().length);
|
||||
System.arraycopy(fileContent, 0, body, header.getBytes().length, fileContent.length);
|
||||
System.arraycopy(footer.getBytes(), 0, body, header.getBytes().length + fileContent.length, footer.getBytes().length);
|
||||
}
|
||||
byte[] body = new byte[header.getBytes().length + fileContent.length + footer.getBytes().length];
|
||||
System.arraycopy(header.getBytes(), 0, body, 0, header.getBytes().length);
|
||||
System.arraycopy(fileContent, 0, body, header.getBytes().length, fileContent.length);
|
||||
System.arraycopy(footer.getBytes(), 0, body, header.getBytes().length + fileContent.length, footer.getBytes().length);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(UPLOAD_URL))
|
||||
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
|
||||
.POST(HttpRequest.BodyPublishers.ofByteArray(body))
|
||||
.build();
|
||||
try {
|
||||
// 1. 创建信任所有证书的 TrustManager
|
||||
TrustManager[] trustAllCerts = new TrustManager[]{
|
||||
new X509TrustManager() {
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
|
||||
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; }
|
||||
}
|
||||
};
|
||||
|
||||
HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
// 2. 初始化 SSLContext
|
||||
SSLContext sc = SSLContext.getInstance("TLS");
|
||||
sc.init(null, trustAllCerts, new SecureRandom());
|
||||
|
||||
if (response.statusCode() == 200) {
|
||||
String responseBody = response.body();
|
||||
return parseAttachmentId(responseBody);
|
||||
} else {
|
||||
log.error("上传文件失败: {}, 状态码: {}", fileName, response.statusCode());
|
||||
// 3. 构建支持 HTTPS 且忽略证书验证的 HttpClient
|
||||
HttpClient secureClient = HttpClient.newBuilder()
|
||||
.sslContext(sc)
|
||||
.build();
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(UPLOAD_URL))
|
||||
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
|
||||
.POST(HttpRequest.BodyPublishers.ofByteArray(body))
|
||||
.build();
|
||||
|
||||
// 4. 使用新的 secureClient 发送请求
|
||||
HttpResponse<String> response = secureClient.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
if (response.statusCode() == 200) {
|
||||
String responseBody = response.body();
|
||||
return parseAttachmentId(responseBody);
|
||||
} else {
|
||||
log.error("上传文件失败: {}, 状态码: {}", fileName, response.statusCode());
|
||||
return null;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("文件上传过程中发生异常: {}", e.getMessage(), e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String uploadVideo(File file) throws IOException, InterruptedException {
|
||||
return uploadFile(file);
|
||||
}
|
||||
@ -137,19 +157,14 @@ public class AttachmentUploadService {
|
||||
}
|
||||
|
||||
try {
|
||||
if (jsonResponse.contains("\"message\":")) {
|
||||
int start = jsonResponse.indexOf("\"message\":\"") + 11;
|
||||
int end = jsonResponse.indexOf("\"", start);
|
||||
if (start > 10 && end > start) {
|
||||
return jsonResponse.substring(start, end);
|
||||
}
|
||||
}
|
||||
if (jsonResponse.contains("\"message\":\"")) {
|
||||
int start = jsonResponse.indexOf("\"message\":\"") + 11;
|
||||
int end = jsonResponse.indexOf("\"", start);
|
||||
if (start > 10 && end > start) {
|
||||
return jsonResponse.substring(start, end);
|
||||
}
|
||||
JSONObject json = JSONObject.parseObject(jsonResponse);
|
||||
// 尝试从常见的返回字段中获取 ID,根据实际接口返回调整 key
|
||||
if (json.containsKey("message")) {
|
||||
return json.getString("message");
|
||||
} else if (json.containsKey("data")) {
|
||||
return json.getString("data");
|
||||
} else if (json.containsKey("id")) {
|
||||
return json.getString("id");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("解析附件ID失败: {}", jsonResponse, e);
|
||||
|
||||
@ -22,6 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
@ -105,6 +106,8 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
EXCEL_COLUMN_INDEX_MAPPING.put(8, "fsz");
|
||||
EXCEL_COLUMN_INDEX_MAPPING.put(9, "fwet");
|
||||
EXCEL_COLUMN_INDEX_MAPPING.put(10, "wt");
|
||||
EXCEL_COLUMN_INDEX_MAPPING.put(11, "picpth");
|
||||
EXCEL_COLUMN_INDEX_MAPPING.put(12, "vdpth");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -269,6 +272,19 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
data.setFcnt(fcnt);
|
||||
}
|
||||
break;
|
||||
case "wt":
|
||||
if (!StringUtils.hasText(cellValue)) {
|
||||
importRow.getWarnings().add(fieldName);
|
||||
data.setWt(parseBigDecimal(cellValue));
|
||||
} else {
|
||||
BigDecimal wt = parseBigDecimal(cellValue);
|
||||
if (wt == null) {
|
||||
importRow.getWarnings().add(fieldName);
|
||||
data.setWt(parseBigDecimal(cellValue));
|
||||
}
|
||||
data.setWt(wt);
|
||||
}
|
||||
break;
|
||||
case "fwet":
|
||||
data.setFwet(cellValue.trim());
|
||||
break;
|
||||
@ -303,14 +319,16 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
break;
|
||||
case "vdpth":
|
||||
data.setVdpth(cellValue.trim());
|
||||
data.setVdpthName(cellValue.trim());
|
||||
break;
|
||||
case "picpth":
|
||||
data.setPicpth(cellValue.trim());
|
||||
data.setPicpthName(cellValue.trim());
|
||||
break;
|
||||
case "isfs":
|
||||
if (StringUtils.hasText(cellValue)) {
|
||||
String isfs = resolveIsfs(cellValue.trim(), importRow);
|
||||
data.setIsfs("是".equals(isfs) ? 1 : 0);
|
||||
data.setIsfs("1".equals(isfs) ? 1 : 0);
|
||||
}
|
||||
break;
|
||||
case "sourceType":
|
||||
@ -525,13 +543,13 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
String lowerName = direction.toLowerCase().trim();
|
||||
|
||||
if (lowerName.contains("上行") && lowerName.contains("折返")) {
|
||||
return "03";
|
||||
return "2";
|
||||
} else if (lowerName.contains("下行") && lowerName.contains("折返")) {
|
||||
return "04";
|
||||
return "3";
|
||||
} else if (lowerName.contains("上行")) {
|
||||
return "01";
|
||||
return "0";
|
||||
} else if (lowerName.contains("下行")) {
|
||||
return "02";
|
||||
return "1";
|
||||
}
|
||||
importRow.getWarnings().add("direction");
|
||||
return direction;
|
||||
@ -677,6 +695,23 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析 BigDecimal 类型数据
|
||||
* @param value 字符串数值
|
||||
* @return BigDecimal 对象,解析失败或为空时返回 null
|
||||
*/
|
||||
private BigDecimal parseBigDecimal(String value) {
|
||||
if (!StringUtils.hasText(value)) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return new BigDecimal(value.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String parseSourceType(String value) {
|
||||
if (!StringUtils.hasText(value)) {
|
||||
return "IMPORT";
|
||||
@ -732,8 +767,24 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
}
|
||||
|
||||
private void processAttachments(FishImportResult result, ZipFileUtil.ZipContent zipContent) {
|
||||
if (result.getSuccessRows() == null || result.getSuccessRows().isEmpty()) {
|
||||
return;
|
||||
for (FishImportResult.FishImportRow importRow : result.getFailedRows()) {
|
||||
FishDraftData data = importRow.getData();
|
||||
if (data == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String vdpth = data.getVdpth();
|
||||
String picpth = data.getPicpth();
|
||||
|
||||
if (StringUtils.hasText(vdpth)) {
|
||||
String uploadedVdpth = processVideoAttachments(importRow,vdpth, zipContent.videos);
|
||||
data.setVdpth(uploadedVdpth);
|
||||
}
|
||||
|
||||
if (StringUtils.hasText(picpth)) {
|
||||
String uploadedPicpth = processImageAttachments(importRow,picpth, zipContent.images);
|
||||
data.setPicpth(uploadedPicpth);
|
||||
}
|
||||
}
|
||||
|
||||
for (FishImportResult.FishImportRow importRow : result.getSuccessRows()) {
|
||||
@ -746,18 +797,18 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
String picpth = data.getPicpth();
|
||||
|
||||
if (StringUtils.hasText(vdpth)) {
|
||||
String uploadedVdpth = processVideoAttachments(vdpth, zipContent.videos);
|
||||
String uploadedVdpth = processVideoAttachments(importRow,vdpth, zipContent.videos);
|
||||
data.setVdpth(uploadedVdpth);
|
||||
}
|
||||
|
||||
if (StringUtils.hasText(picpth)) {
|
||||
String uploadedPicpth = processImageAttachments(picpth, zipContent.images);
|
||||
String uploadedPicpth = processImageAttachments(importRow,picpth, zipContent.images);
|
||||
data.setPicpth(uploadedPicpth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String processVideoAttachments(String videoNames, Map<String, String> videoMap) {
|
||||
private String processVideoAttachments(FishImportResult.FishImportRow importRow, String videoNames, Map<String, String> videoMap) {
|
||||
if (videoNames == null || videoNames.isEmpty() || videoMap == null || videoMap.isEmpty()) {
|
||||
return videoNames;
|
||||
}
|
||||
@ -778,20 +829,24 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
if (attachmentId != null) {
|
||||
attachmentIds.add(attachmentId);
|
||||
} else {
|
||||
attachmentIds.add(fileName);
|
||||
importRow.getVdpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
attachmentIds.add(fileName);
|
||||
e.printStackTrace();
|
||||
importRow.getVdpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
} else {
|
||||
attachmentIds.add(fileName);
|
||||
importRow.getVdpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
return String.join(",", attachmentIds);
|
||||
}
|
||||
|
||||
private String processImageAttachments(String imageNames, Map<String, String> imageMap) {
|
||||
private String processImageAttachments(FishImportResult.FishImportRow importRow,String imageNames, Map<String, String> imageMap) {
|
||||
if (imageNames == null || imageNames.isEmpty() || imageMap == null || imageMap.isEmpty()) {
|
||||
return imageNames;
|
||||
}
|
||||
@ -812,13 +867,17 @@ public class FishImportServiceImpl implements IFishImportService {
|
||||
if (attachmentId != null) {
|
||||
attachmentIds.add(attachmentId);
|
||||
} else {
|
||||
attachmentIds.add(fileName);
|
||||
importRow.getPicpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
attachmentIds.add(fileName);
|
||||
e.printStackTrace();
|
||||
importRow.getPicpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
} else {
|
||||
attachmentIds.add(fileName);
|
||||
importRow.getPicpthsWarnings().add(fileName);
|
||||
// attachmentIds.add(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -96,4 +96,12 @@ public class SdHbrvDicController {
|
||||
boolean result = hbrvDicService.deleteHbrvDic(hbrvcd, baseid);
|
||||
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
|
||||
}
|
||||
|
||||
@GetMapping("/selectForDropdown")
|
||||
@Operation(summary = "下拉框列表查询")
|
||||
public ResponseResult selectForDropdown(
|
||||
@RequestParam(required = false) String hbrvnm,
|
||||
@RequestParam(required = false) String baseid) {
|
||||
return ResponseResult.successData(hbrvDicService.selectForDropdown(hbrvnm, baseid));
|
||||
}
|
||||
}
|
||||
@ -47,4 +47,9 @@ public interface ISdHbrvDicService extends IService<SdHbrvDic> {
|
||||
* 删除流域
|
||||
*/
|
||||
boolean deleteHbrvDic(String hbrvcd, String baseid);
|
||||
|
||||
/**
|
||||
* 下拉框列表查询(支持名称模糊查询)
|
||||
*/
|
||||
List<SdHbrvDic> selectForDropdown(String hbrvnm, String baseid);
|
||||
}
|
||||
@ -71,4 +71,14 @@ public class SdHbrvDicServiceImpl extends ServiceImpl<SdHbrvDicMapper, SdHbrvDic
|
||||
public boolean deleteHbrvDic(String hbrvcd, String baseid) {
|
||||
return this.removeById(hbrvcd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SdHbrvDic> selectForDropdown(String hbrvnm, String baseid) {
|
||||
return this.lambdaQuery()
|
||||
.like(hbrvnm != null && !hbrvnm.isEmpty(), SdHbrvDic::getHbrvnm, hbrvnm)
|
||||
.eq(baseid != null && !baseid.isEmpty(), SdHbrvDic::getBaseid, baseid)
|
||||
.eq(SdHbrvDic::getEnabled, 1)
|
||||
.orderByAsc(SdHbrvDic::getOrderIndex)
|
||||
.list();
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,30 @@
|
||||
package com.yfd.platform.system.controller;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.hutool.jwt.JWTUtil;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.system.domain.SmsVerifyCode;
|
||||
import com.yfd.platform.system.domain.SysUser;
|
||||
import com.yfd.platform.config.WebConfig;
|
||||
import com.yfd.platform.system.domain.*;
|
||||
import com.yfd.platform.system.service.ISmsVerifyCodeService;
|
||||
import com.yfd.platform.system.service.ISysLogService;
|
||||
import com.yfd.platform.system.service.IUserService;
|
||||
import com.yfd.platform.utils.RequestHolder;
|
||||
import com.yfd.platform.utils.StringUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@ -31,6 +42,12 @@ public class SmsVerifyCodeController {
|
||||
@Resource
|
||||
private IUserService userService;
|
||||
|
||||
@Resource
|
||||
private WebConfig webConfig;
|
||||
|
||||
@Resource
|
||||
private ISysLogService sysLogService;
|
||||
|
||||
@Value("${rsa.private_key}")
|
||||
private String privateKey;
|
||||
|
||||
@ -39,8 +56,9 @@ public class SmsVerifyCodeController {
|
||||
*/
|
||||
@PostMapping("/sendCode")
|
||||
@Operation(summary = "发送验证码")
|
||||
public ResponseResult sendVerifyCode(@RequestParam String phone,
|
||||
@RequestParam Integer type) {
|
||||
public ResponseResult sendVerifyCode(@RequestBody SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
String phone = smsVerifyCodeRequest.getPhone();
|
||||
Integer type = smsVerifyCodeRequest.getType();
|
||||
if (phone == null || phone.isEmpty()) {
|
||||
return ResponseResult.error("手机号不能为空");
|
||||
}
|
||||
@ -75,8 +93,9 @@ public class SmsVerifyCodeController {
|
||||
*/
|
||||
@PostMapping("/register")
|
||||
@Operation(summary = "注册用户")
|
||||
public ResponseResult register(@RequestBody SysUser user,
|
||||
@RequestParam String code) {
|
||||
public ResponseResult register(@RequestBody SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
SysUser user = smsVerifyCodeRequest.getUser();
|
||||
String code = smsVerifyCodeRequest.getCode();
|
||||
if (user.getPhone() == null || user.getPhone().isEmpty()) {
|
||||
return ResponseResult.error("手机号不能为空");
|
||||
}
|
||||
@ -126,9 +145,10 @@ public class SmsVerifyCodeController {
|
||||
*/
|
||||
@PostMapping("/resetPassword")
|
||||
@Operation(summary = "找回密码")
|
||||
public ResponseResult resetPassword(@RequestParam String phone,
|
||||
@RequestParam String code,
|
||||
@RequestParam String password) {
|
||||
public ResponseResult resetPassword(@RequestBody SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
String password = smsVerifyCodeRequest.getPassword();
|
||||
String phone = smsVerifyCodeRequest.getPhone();
|
||||
String code = smsVerifyCodeRequest.getCode();
|
||||
if (phone == null || phone.isEmpty()) {
|
||||
return ResponseResult.error("手机号不能为空");
|
||||
}
|
||||
@ -165,9 +185,10 @@ public class SmsVerifyCodeController {
|
||||
*/
|
||||
@GetMapping("/verifyCode")
|
||||
@Operation(summary = "验证验证码")
|
||||
public ResponseResult verifyCode(@RequestParam String phone,
|
||||
@RequestParam String code,
|
||||
@RequestParam Integer type) {
|
||||
public ResponseResult verifyCode(@RequestBody SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
String phone = smsVerifyCodeRequest.getPhone();
|
||||
String code = smsVerifyCodeRequest.getCode();
|
||||
Integer type = smsVerifyCodeRequest.getType();
|
||||
boolean valid = smsVerifyCodeService.verifyCode(phone, code, type);
|
||||
if (valid) {
|
||||
return ResponseResult.success();
|
||||
@ -175,4 +196,87 @@ public class SmsVerifyCodeController {
|
||||
return ResponseResult.error("验证码错误或已过期");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信验证码登录
|
||||
*/
|
||||
@PostMapping("/login")
|
||||
@Operation(summary = "短信验证码登录")
|
||||
public ResponseResult smsLogin(@RequestBody SmsVerifyCodeRequest smsVerifyCodeRequest) {
|
||||
String phone = smsVerifyCodeRequest.getPhone();
|
||||
String code = smsVerifyCodeRequest.getCode();
|
||||
if (phone == null || phone.isEmpty()) {
|
||||
return ResponseResult.error("手机号不能为空");
|
||||
}
|
||||
if (code == null || code.isEmpty()) {
|
||||
return ResponseResult.error("验证码不能为空");
|
||||
}
|
||||
|
||||
boolean verified = smsVerifyCodeService.verifyCode(phone, code, SmsVerifyCode.TYPE_REGISTER);
|
||||
if (!verified) {
|
||||
return ResponseResult.error("验证码错误或已过期");
|
||||
}
|
||||
|
||||
SysUser user = userService.getUserByPhone(phone);
|
||||
if (user == null) {
|
||||
return ResponseResult.error("该手机号未注册");
|
||||
}
|
||||
|
||||
if (user.getStatus() != null && user.getStatus() == 0) {
|
||||
return ResponseResult.error("账号已停用");
|
||||
}
|
||||
|
||||
if (user.getRegStatus() != null && user.getRegStatus() == 0) {
|
||||
return ResponseResult.error("账号待审核,请联系管理员");
|
||||
}
|
||||
|
||||
if (user.getRegStatus() != null && user.getRegStatus() == 2) {
|
||||
return ResponseResult.error("账号审核未通过");
|
||||
}
|
||||
|
||||
UsernamePasswordAuthenticationToken authenticationToken =
|
||||
new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword());
|
||||
Authentication authenticate = new UsernamePasswordAuthenticationToken(user, null, authenticationToken.getAuthorities());
|
||||
SecurityContextHolder.getContext().setAuthentication(authenticate);
|
||||
|
||||
LoginUser loginUser = new LoginUser();
|
||||
loginUser.setUser(user);
|
||||
loginUser.setUsername(user.getUsername());
|
||||
|
||||
HttpServletRequest request = RequestHolder.getHttpServletRequest();
|
||||
SysLog sysLog = new SysLog();
|
||||
sysLog.setUsercode(user.getUsername());
|
||||
sysLog.setUsername(user.getNickname());
|
||||
sysLog.setRequestip(StringUtils.getIp(request));
|
||||
sysLog.setBrowser(StringUtils.getBrowser(request));
|
||||
sysLog.setOpttype("登录(login)");
|
||||
sysLog.setModule("短信验证码登录");
|
||||
sysLog.setMethod(this.getClass().getName() + ".smsLogin()");
|
||||
sysLog.setDescription(user.getNickname() + "使用短信验证码登录系统!");
|
||||
sysLog.setLogtime(new Timestamp(System.currentTimeMillis()));
|
||||
sysLogService.save(sysLog);
|
||||
|
||||
String userId = user.getId();
|
||||
Map<String, Object> map = new HashMap<>(10) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
{
|
||||
put("userid", userId);
|
||||
put("username", loginUser.getUsername());
|
||||
long expireTime = System.currentTimeMillis() + (30L * 24L * 60L * 60L * 1000L);
|
||||
put("expire_time", expireTime);
|
||||
}
|
||||
};
|
||||
|
||||
String token = JWTUtil.createToken(map, "12345678".getBytes());
|
||||
map.put("token", token);
|
||||
|
||||
String jsonStr = JSONUtil.toJsonStr(loginUser);
|
||||
webConfig.loginuserCache().put("login:" + userId, jsonStr);
|
||||
webConfig.loginuserCache().put("expire_time:" + userId, map.get("expire_time").toString());
|
||||
|
||||
map.put("user", user);
|
||||
|
||||
return ResponseResult.successData(map);
|
||||
}
|
||||
}
|
||||
@ -20,6 +20,8 @@ public class LoginUser implements UserDetails {
|
||||
|
||||
private SysUser user;
|
||||
|
||||
private String username;
|
||||
|
||||
private List<String> permissions;
|
||||
|
||||
public LoginUser(SysUser user, List<String> permissions) {
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
package com.yfd.platform.system.domain;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SmsVerifyCodeRequest {
|
||||
|
||||
/**
|
||||
* 验证码类型
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
private SysUser user;
|
||||
}
|
||||
@ -21,7 +21,7 @@ import java.util.Random;
|
||||
@Service
|
||||
public class SmsVerifyCodeServiceImpl extends ServiceImpl<SmsVerifyCodeMapper, SmsVerifyCode> implements ISmsVerifyCodeService {
|
||||
|
||||
private static final int CODE_VALID_MINUTES = 5;
|
||||
private static final int CODE_VALID_MINUTES = 1;
|
||||
private static final Random RANDOM = new Random();
|
||||
|
||||
@Resource
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: prod
|
||||
active: devtw
|
||||
|
||||
jasypt:
|
||||
encryptor:
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
<resultMap id="BaseResultMap" type="com.yfd.platform.data.domain.FishDraftData">
|
||||
<id column="ID" property="id"/>
|
||||
<result column="STCD" property="stcd"/>
|
||||
<result column="WT" property="wt"/>
|
||||
<result column="TM" property="tm"/>
|
||||
<result column="FTP" property="ftp"/>
|
||||
<result column="FSZ" property="fsz"/>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user