测试环境部署

This commit is contained in:
lianjie111 2025-11-16 12:54:09 +08:00
parent 663f607823
commit ecf5e697cf
11 changed files with 184 additions and 82 deletions

View File

@ -1,5 +1,6 @@
server:
port: 8000
# port: 8000
port: 8003
spring:
profiles:
active: dev

View File

@ -6,7 +6,7 @@ spring:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://101.35.149.39:3306/fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://123.60.153.169:8001/fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: Aa615243
hikari:
@ -16,8 +16,8 @@ spring:
max-lifetime: 1800000
connection-test-query: SELECT 1
redis:
host: 101.35.149.39
port: 6379
host: 123.60.153.169
port: 8002
password:
jackson:
date-format: yyyy-MM-dd HH:mm:ss

View File

@ -1,5 +1,6 @@
server:
port: 8100
# port: 8100
port: 8004
spring:
profiles:
active: dev

View File

@ -6,7 +6,7 @@ spring:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://101.35.149.39:3306/kaijiang_fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://123.60.153.169:8001/kaijiang_fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: Aa615243
hikari:
@ -16,8 +16,8 @@ spring:
max-lifetime: 1800000
connection-test-query: SELECT 1
redis:
host: 101.35.149.39
port: 6379
host: 123.60.153.169
port: 8002
password:
jackson:
date-format: yyyy-MM-dd HH:mm:ss

View File

@ -95,7 +95,10 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 过滤请求
.authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/marriage/common/login", "/marriage/common/sms", "/marriage/common/checkCode", "/marriage/ocr/**", "/marriage/activity/current", "/marriage/receiveCheck2").permitAll()
.antMatchers("/marriage/common/login", "/marriage/common/sms", "/marriage/common/checkCode",
"/marriage/ocr/**", "/marriage/activity/current",
"/marriage/receiveCheck2",
"/marriage/receiveCode").permitAll()
// .antMatchers("/**", "/captchaImage").anonymous()
.antMatchers(
HttpMethod.GET,

View File

@ -103,8 +103,8 @@ public class CommonController {
}
}
// String verifyCode = RandomUtil.randomDigit(6);
String verifyCode = "123456";
String verifyCode = RandomUtil.randomDigit(6);
// String verifyCode = "123456";
SMSClient smsClient = new SMSClient(masterSecret, appKey);
SMSPayload payload = SMSPayload.newBuilder()
.setMobileNumber(mobile)
@ -146,7 +146,7 @@ public class CommonController {
}
LambdaQueryWrapper<MarriageCode> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(MarriageCode::getCode, dto.getMobile());
queryWrapper1.eq(MarriageCode::getReceiveMobile, dto.getMobile());
queryWrapper1.orderByDesc(MarriageCode::getCreateTime);
queryWrapper1.last("limit 1");
MarriageCode code = iMarriageCodeService.getOne(queryWrapper1);
@ -162,7 +162,7 @@ public class CommonController {
if (act == null) {
return ResultUtil.failedMessage("活动已过期!");
}
if (Objects.equals(act.hashCode(), code.getCode())) {
if (Objects.equals(act.getId(), code.getActivityId())) {
return ResultUtil.success(code);
}
return ResultUtil.failedMessage("活动已过期!");

View File

@ -25,10 +25,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.springframework.web.bind.annotation.*;
import java.io.File;
import java.io.FileOutputStream;
@ -83,6 +80,16 @@ public class MarriageController {
return ResultUtil.success(marriageCodeVO);
}
@GetMapping("/codeInfo")
public ResultObject codeList(@RequestParam String code) {
MarriageCode one = iMarriageCodeService.getOne(new LambdaQueryWrapper<MarriageCode>().eq(MarriageCode::getCode, code));
if (one == null) {
return ResultUtil.failedMessage("数据不存在");
}
return ResultUtil.success(one);
}
@org.springframework.web.bind.annotation.GetMapping("/activity/current")
public ResultObject currentActivity() {
Date now = DateTimeUtil.now();
@ -107,12 +114,26 @@ public class MarriageController {
@PostMapping("/leftOverCount")
public ResultObject leftOverCount() {
Date now = DateTimeUtil.now();
LambdaQueryWrapper<MarriageActivity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MarriageActivity::getStatus, 0)
.le(MarriageActivity::getActivityStartTime, now)
.ge(MarriageActivity::getActivityEndTime, now)
.orderByDesc(MarriageActivity::getCreateTime)
.last("limit 1");
MarriageActivity act = iMarriageActivityService.getOne(wrapper);
if (act == null) {
return ResultUtil.success("0");
}
LambdaQueryWrapper<MarriageCode> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.isNull(MarriageCode::getSalesNo);
queryWrapper.isNull(MarriageCode::getMarriageNo);
queryWrapper.isNull(MarriageCode::getReceiveMobile);
queryWrapper.isNull(MarriageCode::getReceiveName);
queryWrapper.isNull(MarriageCode::getReceiveTime);
queryWrapper.eq(MarriageCode::getActivityId, act.getId());
queryWrapper.orderByDesc(MarriageCode::getCreateTime);
int count = iMarriageCodeService.count(queryWrapper);
return ResultUtil.success(count);
@ -146,6 +167,7 @@ public class MarriageController {
canReceive = true;
}
return canReceive;
// return true;
}
@PostMapping("/receiveCheck2")
@ -168,6 +190,12 @@ public class MarriageController {
if (StringUtils.isBlank(dto.getReceiveMobile())) {
return ResultUtil.failedMessage("领取人手机号不能为空!");
}
String key = RedisCacheKey.VERICODE_MOBILE + "3-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
Date now = DateTimeUtil.now();
LambdaQueryWrapper<MarriageActivity> wrapper = new LambdaQueryWrapper<>();
@ -208,25 +236,19 @@ public class MarriageController {
queryWrapper.orderByDesc(MarriageCode::getCreateTime);
queryWrapper.last("limit 1");
marriageCode = iMarriageCodeService.getOne(queryWrapper);
if (Objects.isNull(marriageCode)) {
return ResultUtil.failedMessage("代金券已发完,请下次活动再来!");
}
marriageCode.setMarriageNo(dto.getMarriageNo());
marriageCode.setMarriageNo(dto.getReceiveMobile());
marriageCode.setReceiveMobile(dto.getReceiveMobile());
marriageCode.setReceiveMoney((int) (long) act.getMoney());
marriageCode.setReceiveTime(new Date());
marriageCode.setSalesNo(dto.getSalesNo());
marriageCode.setReceiveName(dto.getReceiveName());
iMarriageCodeService.saveOrUpdate(marriageCode);
String key = RedisCacheKey.VERICODE_MOBILE + "3-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
MarriageCodeVO vo = new MarriageCodeVO();
BeanUtils.copyProperties(marriageCode, vo);
return ResultUtil.success(vo);
return ResultUtil.success(marriageCode);
}
@PostMapping("/receiveCheck")
@ -253,6 +275,11 @@ public class MarriageController {
if (StringUtils.isBlank(dto.getCode())) {
return ResultUtil.failedMessage("核验码不能为空!");
}
String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
LambdaQueryWrapper<MarriageCode> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.and(wrap -> {
wrap.or().eq(MarriageCode::getMarriageNo, dto.getMarriageNo());
@ -263,33 +290,23 @@ public class MarriageController {
queryWrapper.last("limit 1");
MarriageCode marriageCode = iMarriageCodeService.getOne(queryWrapper);
if (Objects.nonNull(marriageCode)) {
if (dto.getReceiveMobile().equals(marriageCode.getReceiveMobile())) {
return ResultUtil.failedMessage("该领取人已领取过新婚送福活动刮刮乐!");
if (Objects.isNull(marriageCode)) {
return ResultUtil.failedMessage("此代金卷无效!");
}
if (dto.getMarriageNo().equals(marriageCode.getMarriageNo())) {
return ResultUtil.failedMessage("这个证号已参与过活动!");
}
if (StringUtils.isNotBlank(marriageCode.getMarriageNo())) {
if (marriageCode.getStatus() == 1) {
return ResultUtil.failedMessage("此代金卷已使用过!");
}
}
String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
Date now = DateTimeUtil.now();
marriageCode = MarriageCode.builder()
.marriageNo(dto.getMarriageNo())
.receiveName(dto.getReceiveName())
.code(dto.getCode())
.receiveMobile(dto.getReceiveMobile())
.signImage(dto.getSignImage())
.receiveTime(now)
.salesNo(dto.getSalesNo())
.build();
// Date now = DateTimeUtil.now();
// marriageCode = MarriageCode.builder()
// .marriageNo(dto.getMarriageNo())
// .receiveName(dto.getReceiveName())
// .code(dto.getCode())
// .receiveMobile(dto.getReceiveMobile())
// .signImage(dto.getSignImage())
// .receiveTime(now)
// .salesNo(dto.getSalesNo())
// .build();
MarriageCodeVO vo = new MarriageCodeVO();
BeanUtils.copyProperties(marriageCode, vo);
return ResultUtil.success(vo);
@ -322,6 +339,13 @@ public class MarriageController {
if (StringUtils.isBlank(dto.getSignImage())) {
return ResultUtil.failedMessage("领取人签字不能为空!");
}
String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
LambdaQueryWrapper<MarriageCode> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.and(wrap -> {
wrap.or().eq(MarriageCode::getMarriageNo, dto.getMarriageNo());
@ -331,14 +355,14 @@ public class MarriageController {
queryWrapper.last("limit 1");
MarriageCode marriageCode = iMarriageCodeService.getOne(queryWrapper);
if (Objects.nonNull(marriageCode)) {
if (dto.getReceiveMobile().equals(marriageCode.getReceiveMobile())) {
return ResultUtil.failedMessage("该领取人已领取过新婚送福活动刮刮乐!");
}
if (dto.getMarriageNo().equals(marriageCode.getMarriageNo())) {
return ResultUtil.failedMessage("这个证号已参与过活动!");
}
}
// if (Objects.nonNull(marriageCode)) {
// if (dto.getReceiveMobile().equals(marriageCode.getReceiveMobile())) {
// return ResultUtil.failedMessage("该领取人已领取过新婚送福活动刮刮乐!");
// }
// if (dto.getMarriageNo().equals(marriageCode.getMarriageNo())) {
// return ResultUtil.failedMessage("这个证号已参与过活动!");
// }
// }
LambdaQueryWrapper<MarriageCode> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(MarriageCode::getCode, dto.getCode());
@ -352,13 +376,19 @@ public class MarriageController {
return ResultUtil.failedMessage("此代金卷已使用过!");
}
}
String key = RedisCacheKey.VERICODE_MOBILE + "1-" + dto.getReceiveMobile();
String verifyCode = (String) redisCacheManager.getObject(RedisCacheKey.DBINDEX_DEFAULT, key);
if (!StringUtils.equals(dto.getSmsCode(), verifyCode)) {
return ResultUtil.failedMessage("验证码错误,请重新输入!");
}
Date now = DateTimeUtil.now();
LambdaQueryWrapper<MarriageActivity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MarriageActivity::getStatus, 0)
.le(MarriageActivity::getActivityStartTime, now)
.ge(MarriageActivity::getActivityEndTime, now)
.orderByDesc(MarriageActivity::getCreateTime)
.last("limit 1");
MarriageActivity act = iMarriageActivityService.getOne(wrapper);
if (act == null) {
return ResultUtil.failed("活动已结束");
}
code1.setMarriageNo(dto.getMarriageNo());
code1.setReceiveName(dto.getReceiveName());
code1.setReceiveMobile(dto.getReceiveMobile());
@ -366,7 +396,7 @@ public class MarriageController {
// code1.setSignImage(dto.getSignImage());
code1.setSalesNo(dto.getSalesNo());
code1.setReceiveMoney(6000);
code1.setReceiveMoney((int)(long)act.getMoney());
code1.setReceiveTime(now);
code1.setStatus(1);
iMarriageCodeService.updateById(code1);

View File

@ -108,7 +108,10 @@ public class OcrController {
result.put("raw", ocrResp);
List<String> words = extractWords(ocrResp);
result.put("words", words);
Map<String, String> parsed = parseMarriageFields(words);
Map<String, String> parsed = parseMarriageFieldsFromRaw(ocrResp);
if (parsed == null || parsed.isEmpty()) {
parsed = parseMarriageFields(words);
}
result.put("parsed", parsed);
return ResultUtil.success(result);
} catch (Exception e) {
@ -163,7 +166,7 @@ public class OcrController {
}
for (String w : words) {
if (StringUtils.contains(w, "字号") || StringUtils.contains(w, "证字号")) {
map.put("marriageNo", w.replaceAll("[^0-9A-Za-z\\u4e00-\\u9fa5]", ""));
map.put("marriageNo", normalizeMarriageNo(w));
}
if (StringUtils.contains(w, "男方") || StringUtils.contains(w, "")) {
map.put("husbandName", w.replace("男方", "").replace("", ""));
@ -176,7 +179,7 @@ public class OcrController {
}
java.util.regex.Matcher mNo = java.util.regex.Pattern.compile("[A-Z][0-9]{6}-[0-9]{4}-[0-9]{6}").matcher(w);
if (mNo.find()) {
map.put("marriageNo", mNo.group());
map.put("marriageNo", normalizeMarriageNo(mNo.group()));
}
java.util.regex.Matcher mDate = java.util.regex.Pattern.compile("(\\d{4})([年/-])(\\d{2})([月/-]?)(\\d{2})").matcher(w);
if (mDate.find()) {
@ -189,6 +192,62 @@ public class OcrController {
return map;
}
private Map<String, String> parseMarriageFieldsFromRaw(String ocrResp) {
Map<String, String> map = new HashMap<>();
try {
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(ocrResp);
com.fasterxml.jackson.databind.JsonNode res = root.get("words_result");
if (res == null || !res.isObject()) {
return map;
}
String marriageNo = extractFirstWord(res.get("结婚证字号"));
marriageNo = normalizeMarriageNo(marriageNo);
String husbandName = extractFirstWord(res.get("姓名_男"));
String wifeName = extractFirstWord(res.get("姓名_女"));
String registerDate = normalizeDate(extractFirstWord(res.get("登记日期")));
if (org.apache.commons.lang3.StringUtils.isNotBlank(marriageNo)) {
map.put("marriageNo", marriageNo);
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(husbandName)) {
map.put("husbandName", husbandName);
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(wifeName)) {
map.put("wifeName", wifeName);
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(registerDate)) {
map.put("registerDate", registerDate);
}
} catch (Exception e) {
}
return map;
}
private String extractFirstWord(com.fasterxml.jackson.databind.JsonNode arr) {
if (arr == null || !arr.isArray() || arr.size() == 0) {
return null;
}
return arr.get(0).path("word").asText("");
}
private String normalizeMarriageNo(String s) {
if (org.apache.commons.lang3.StringUtils.isBlank(s)) {
return null;
}
return s.replaceAll("[^0-9]", "");
}
private String normalizeDate(String s) {
if (org.apache.commons.lang3.StringUtils.isBlank(s)) {
return null;
}
java.util.regex.Matcher m = java.util.regex.Pattern.compile("(\\d{4})年(\\d{2})月(\\d{2})日").matcher(s);
if (m.find()) {
return m.group(1) + "-" + m.group(2) + "-" + m.group(3);
}
return s;
}
private String getExtension(String name) {
if (StringUtils.isBlank(name) || !name.contains(".")) {
return null;

View File

@ -1,5 +1,6 @@
server:
port: 8200
# port: 8200
port: 8005
spring:
profiles:
active: dev

View File

@ -6,7 +6,7 @@ spring:
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://101.35.149.39:3306/fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://123.60.153.169:8001/fucai?autoReconnect=true&useUnicode=true&useSSL=false&allowMultiQueries=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: Aa615243
hikari:
@ -16,8 +16,8 @@ spring:
max-lifetime: 1800000
connection-test-query: SELECT 1
redis:
host: 101.35.149.39
port: 6379
host: 123.60.153.169
port: 8002
password:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
@ -79,7 +79,7 @@ token:
baidu:
ocr:
appId: ${BAIDU_OCR_APP_ID:120787041}
apiKey: ${BAIDU_OCR_API_KEY:nQnKdxJZJs6UycitAauLMcUW}
secretKey: ${BAIDU_OCR_SECRET_KEY:HTEVDoN3mN5J8usjAABt9k8euZ5cPJyr}
apiKey: ${BAIDU_OCR_API_KEY:UnLQozPRAaXefoMxZMkmqUpe}
secretKey: ${BAIDU_OCR_SECRET_KEY:eKE1Gyll6AXf9DtDVT8yDUWrAUWD6fOz}
# 存储上传的结婚证图片目录
storagePath: ${OCR_STORAGE_PATH:data/ocr}

View File

@ -75,3 +75,10 @@
# # 令牌有效期默认30分钟
# expireTime: 30
#
#baidu:
# ocr:
# appId: ${BAIDU_OCR_APP_ID:120787041}
# apiKey: ${BAIDU_OCR_API_KEY:UnLQozPRAaXefoMxZMkmqUpe}
# secretKey: ${BAIDU_OCR_SECRET_KEY:eKE1Gyll6AXf9DtDVT8yDUWrAUWD6fOz}
# # 存储上传的结婚证图片目录
# storagePath: ${OCR_STORAGE_PATH:data/ocr}