Explorar el Código

Merge remote-tracking branch 'origin/master'

master
PoffyZhang hace 1 año
padre
commit
ed567f310c
Se han modificado 8 ficheros con 177 adiciones y 72 borrados
  1. +5
    -0
      pmapi/pom.xml
  2. +27
    -3
      pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/GovBusinessStripController.java
  3. +10
    -9
      pmapi/src/main/java/com/ningdatech/pmapi/organization/entity/GovBusinessStrip.java
  4. +42
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/organization/manage/GovBusinessStripManage.java
  5. +28
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/organization/model/vo/GovBusinessStripTreeVO.java
  6. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/sms/controller/VerificationCodeController.java
  7. +62
    -59
      pmapi/src/main/java/com/ningdatech/pmapi/sms/manage/SmsManage.java
  8. +2
    -0
      pmapi/src/main/resources/security/auth-dev.yml

+ 5
- 0
pmapi/pom.xml Ver fichero

@@ -191,6 +191,11 @@
<artifactId>nd-basic</artifactId>
</dependency>
<dependency>
<groupId>com.ningdatech</groupId>
<artifactId>nd-yxt-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-core</artifactId>
</dependency>


+ 27
- 3
pmapi/src/main/java/com/ningdatech/pmapi/organization/controller/GovBusinessStripController.java Ver fichero

@@ -1,20 +1,44 @@
package com.ningdatech.pmapi.organization.controller;


import com.ningdatech.pmapi.organization.manage.GovBusinessStripManage;
import com.ningdatech.pmapi.organization.model.vo.GovBusinessStripTreeVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import org.springframework.stereotype.Controller;
import java.util.List;

/**
* <p>
* 前端控制器
* 前端控制器
* </p>
*
* @author Liuxinxin
* @since 2023-03-08
*/
@Controller
@RequestMapping("/pmapi.organization/gov-business-strip")
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@Api(value = "GovBusinessStripController", tags = "条线管理")
@RequestMapping("/api/v1/gov-business-strip")
public class GovBusinessStripController {

private final GovBusinessStripManage govBusinessStripManage;

@GetMapping("/get-child-list")
@ApiOperation("获取条线标签的的树状结构")
public List<GovBusinessStripTreeVO> getChildOrganizationList(@RequestParam(value = "parentCode", required = false) String parentCode) {
return govBusinessStripManage.getChildOrganizationList(parentCode);
}

}

+ 10
- 9
pmapi/src/main/java/com/ningdatech/pmapi/organization/entity/GovBusinessStrip.java Ver fichero

@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModel;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
* <p>
@@ -24,14 +23,6 @@ public class GovBusinessStrip implements Serializable {

private Long id;

private LocalDateTime createOn;

private LocalDateTime updateOn;

private Long createBy;

private Long updateBy;

/**
* 条线code
*/
@@ -41,4 +32,14 @@ public class GovBusinessStrip implements Serializable {
* 条线名称
*/
private String businessStripName;

/**
* 父级条线code
*/
private String parentCode;

/**
* 父级条线名称
*/
private String parentName;
}

+ 42
- 0
pmapi/src/main/java/com/ningdatech/pmapi/organization/manage/GovBusinessStripManage.java Ver fichero

@@ -0,0 +1,42 @@
package com.ningdatech.pmapi.organization.manage;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.pmapi.organization.entity.GovBusinessStrip;
import com.ningdatech.pmapi.organization.model.vo.GovBusinessStripTreeVO;
import com.ningdatech.pmapi.organization.service.IGovBusinessStripService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2023/3/14 下午4:48
*/

@Component
@RequiredArgsConstructor
public class GovBusinessStripManage {

private final IGovBusinessStripService iGovBusinessStripService;


public List<GovBusinessStripTreeVO> getChildOrganizationList(String parentCode) {
if (Objects.isNull(parentCode)) {
parentCode = "-1";
}
List<GovBusinessStrip> govBusinessStripList = iGovBusinessStripService.list(Wrappers.lambdaQuery(GovBusinessStrip.class)
.eq(GovBusinessStrip::getParentCode, parentCode));

return govBusinessStripList.stream().map(r -> {
GovBusinessStripTreeVO govBusinessStripTreeVO = new GovBusinessStripTreeVO();
govBusinessStripTreeVO.setBusinessStripCode(r.getBusinessStripCode());
govBusinessStripTreeVO.setBusinessStripName(r.getBusinessStripName());
govBusinessStripTreeVO.setParentCode(r.getParentCode());
govBusinessStripTreeVO.setParentName(r.getParentName());
return govBusinessStripTreeVO;
}).collect(Collectors.toList());
}
}

+ 28
- 0
pmapi/src/main/java/com/ningdatech/pmapi/organization/model/vo/GovBusinessStripTreeVO.java Ver fichero

@@ -0,0 +1,28 @@
package com.ningdatech.pmapi.organization.model.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
* @author Liuxinxin
* @since 2023-03-08
*/
@Data
@ApiModel(value = "条线树形 responseVO", description = "")
public class GovBusinessStripTreeVO {

private Long id;

@ApiModelProperty("条线code")
private String businessStripCode;

@ApiModelProperty("条线名称")
private String businessStripName;

@ApiModelProperty("父级条线code")
private String parentCode;

@ApiModelProperty("父级条线名称")
private String parentName;
}

+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/sms/controller/VerificationCodeController.java Ver fichero

@@ -35,7 +35,7 @@ public class VerificationCodeController {
@ApiOperation(value = "发送验证码", notes = "发送验证码")
@PostMapping(value = "/send")
public void send(@Validated @RequestBody ReqVerificationCodePO request) {
// smsManage.sendVerificationCode(request);
smsManage.sendVerificationCode(request);
}

}

+ 62
- 59
pmapi/src/main/java/com/ningdatech/pmapi/sms/manage/SmsManage.java Ver fichero

@@ -11,6 +11,9 @@ import com.ningdatech.pmapi.sms.model.dto.VerifyCodeCacheDTO;
import com.ningdatech.pmapi.sms.model.po.ReqVerificationCodePO;
import com.ningdatech.pmapi.sms.utils.DateUtil;
import com.ningdatech.pmapi.sms.utils.SmsRedisKeyUtils;
import com.ningdatech.yxt.client.YxtClient;
import com.ningdatech.yxt.constants.YxtSmsSignEnum;
import com.ningdatech.yxt.model.cmd.SendSmsCmd;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -29,65 +32,65 @@ import java.util.Collections;
@Component
@RequiredArgsConstructor
public class SmsManage {
//
// private final YxtClient yxtClient;
// private final CachePlusOps cachePlusOps;
//
// public void sendVerificationCode(ReqVerificationCodePO request) {
// Assert.isTrue(PhoneUtil.isMobile(request.getMobile()), "手机号码格式不正确");
// String verificationType = request.getVerificationType();
// VerificationCodeType verificationCodeTypeEnum = VerificationCodeType.of(verificationType);
//
// // 验证是否被锁定
// String lockKey = SmsRedisKeyUtils.smsSendLockKey(verificationCodeTypeEnum, request.getMobile());
// if (StringUtils.isNotBlank(cachePlusOps.get(lockKey))) {
// throw BizException.wrap("今日" + verificationCodeTypeEnum.getDesc() + "的验证码发送次数过多,已被锁定");
// }
// // 验证发送间隔
// String cacheKey = SmsRedisKeyUtils.smsCodeVerifyKey(verificationCodeTypeEnum, request.getMobile());
// VerifyCodeCacheDTO preCache = (VerifyCodeCacheDTO) cachePlusOps.get(cacheKey);
// if (preCache != null) {
// if (LocalDateTime.now().minusMinutes(verificationCodeTypeEnum.getSendInterval())
// .isBefore(preCache.getSendTime())) {
// throw BizException.wrap(verificationCodeTypeEnum.getSendInterval() + "分钟之内已发送过验证码,请稍后重试");
// }
// }
// String code = RandomUtil.randomNumbers(6);
// VerifyCodeCacheDTO cache = VerifyCodeCacheDTO.builder()
// .code(code)
// .sendTime(LocalDateTime.now())
// .mobile(request.getMobile())
// .build();
//
// // 创建短信内容
// SendSmsCmd sendSmsCmd = new SendSmsCmd();
// switch (verificationCodeTypeEnum) {
// case LOGIN:
// SendSmsCmd.SendSmsContext sendSmsContext = new SendSmsCmd.SendSmsContext();
// sendSmsContext.setReceiveNumber(request.getMobile());
// sendSmsContext.setContent(String.format(YxtSmsTemplateConst.SMS_LOGIN_TEMPLATE, code, verificationCodeTypeEnum.getExpireTime()));
// sendSmsCmd.setContextList(Collections.singletonList(sendSmsContext));
// sendSmsCmd.setSmsSignEnum(YxtSmsSignEnum.ZJS_ELECTRONIC_EXPERT_LIB);
// break;
// default:
// throw new IllegalArgumentException("非法的短信发送类型");
// }
// // 发送 短信
// yxtClient.submitSmsTask(sendSmsCmd);
// log.info("send verificationCode mobile = {},code = {}", request.getMobile(), code);
//
// cachePlusOps.set(new CacheKey(cacheKey, Duration.ofMinutes(verificationCodeTypeEnum.getExpireTime())), cache);
// String limitKey = SmsRedisKeyUtils.smsSendLimitKey(verificationCodeTypeEnum, request.getMobile());
// if (StringUtils.isNotBlank(cachePlusOps.get(limitKey))) {
// long limitCount = cachePlusOps.incr(new CacheKey(limitKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())));
// // 超出单日发送次数之后直接锁定
// if (limitCount >= verificationCodeTypeEnum.getSendTimesByDay().longValue()) {
// cachePlusOps.set(new CacheKey(lockKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())), request.getMobile());
// }
// } else {
// cachePlusOps.set(new CacheKey(limitKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())), 1);
// }
// }
private final YxtClient yxtClient;
private final CachePlusOps cachePlusOps;
public void sendVerificationCode(ReqVerificationCodePO request) {
Assert.isTrue(PhoneUtil.isMobile(request.getMobile()), "手机号码格式不正确");
String verificationType = request.getVerificationType();
VerificationCodeType verificationCodeTypeEnum = VerificationCodeType.of(verificationType);
// 验证是否被锁定
String lockKey = SmsRedisKeyUtils.smsSendLockKey(verificationCodeTypeEnum, request.getMobile());
if (StringUtils.isNotBlank(cachePlusOps.get(lockKey))) {
throw BizException.wrap("今日" + verificationCodeTypeEnum.getDesc() + "的验证码发送次数过多,已被锁定");
}
// 验证发送间隔
String cacheKey = SmsRedisKeyUtils.smsCodeVerifyKey(verificationCodeTypeEnum, request.getMobile());
VerifyCodeCacheDTO preCache = (VerifyCodeCacheDTO) cachePlusOps.get(cacheKey);
if (preCache != null) {
if (LocalDateTime.now().minusMinutes(verificationCodeTypeEnum.getSendInterval())
.isBefore(preCache.getSendTime())) {
throw BizException.wrap(verificationCodeTypeEnum.getSendInterval() + "分钟之内已发送过验证码,请稍后重试");
}
}
String code = RandomUtil.randomNumbers(6);
VerifyCodeCacheDTO cache = VerifyCodeCacheDTO.builder()
.code(code)
.sendTime(LocalDateTime.now())
.mobile(request.getMobile())
.build();
// 创建短信内容
SendSmsCmd sendSmsCmd = new SendSmsCmd();
switch (verificationCodeTypeEnum) {
case LOGIN:
SendSmsCmd.SendSmsContext sendSmsContext = new SendSmsCmd.SendSmsContext();
sendSmsContext.setReceiveNumber(request.getMobile());
sendSmsContext.setContent(String.format(YxtSmsTemplateConst.SMS_LOGIN_TEMPLATE, code, verificationCodeTypeEnum.getExpireTime()));
sendSmsCmd.setContextList(Collections.singletonList(sendSmsContext));
sendSmsCmd.setSmsSignEnum(YxtSmsSignEnum.ZJS_ELECTRONIC_EXPERT_LIB);
break;
default:
throw new IllegalArgumentException("非法的短信发送类型");
}
// 发送 短信
yxtClient.submitSmsTask(sendSmsCmd);
log.info("send verificationCode mobile = {},code = {}", request.getMobile(), code);
cachePlusOps.set(new CacheKey(cacheKey, Duration.ofMinutes(verificationCodeTypeEnum.getExpireTime())), cache);
String limitKey = SmsRedisKeyUtils.smsSendLimitKey(verificationCodeTypeEnum, request.getMobile());
if (StringUtils.isNotBlank(cachePlusOps.get(limitKey))) {
long limitCount = cachePlusOps.incr(new CacheKey(limitKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())));
// 超出单日发送次数之后直接锁定
if (limitCount >= verificationCodeTypeEnum.getSendTimesByDay().longValue()) {
cachePlusOps.set(new CacheKey(lockKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())), request.getMobile());
}
} else {
cachePlusOps.set(new CacheKey(limitKey, Duration.ofSeconds(DateUtil.restSecondsFromNowToNoon())), 1);
}
}


}

+ 2
- 0
pmapi/src/main/resources/security/auth-dev.yml Ver fichero

@@ -21,6 +21,7 @@ security:
- /oa/**
- /wflow/**
- /sys/**
- /api/v1/verification/**
ignore-csrf-urls:
- /api/v1/user/auth/**
- /v2/api-docs
@@ -37,6 +38,7 @@ security:
- /oa/**
- /wflow/**
- /sys/**
- /api/v1/verification/**
role-map:
"engineer":
"project_manager":


Cargando…
Cancelar
Guardar