This commit is contained in:
六如
2024-10-17 09:41:34 +08:00
parent 35b3e6489d
commit 17bc2d5ca8
15 changed files with 330 additions and 98 deletions

View File

@@ -38,7 +38,7 @@
<commons-logging.version>1.2</commons-logging.version>
<validation-api.version>2.0.1.Final</validation-api.version>
<hibernate-validator.version>6.0.13.Final</hibernate-validator.version>
<fastmybatis.version>3.0.10</fastmybatis.version>
<fastmybatis.version>3.0.11</fastmybatis.version>
</properties>
<dependencies>

View File

@@ -0,0 +1,26 @@
package com.gitee.sop.adminbackend.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Objects;
/**
* @author 六如
*/
@AllArgsConstructor
@Getter
public enum YesOrNoEnum {
YES(1),
NO(0);
private final int value;
public static YesOrNoEnum of(Integer value) {
return Objects.equals(value, YES.value) ? YES : NO;
}
public static YesOrNoEnum of(Boolean value) {
return Objects.equals(value, true) ? YES : NO;
}
}

View File

@@ -1,6 +1,7 @@
package com.gitee.sop.adminbackend.controller.isv;
import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.query.Query;
import com.gitee.fastmybatis.core.query.param.PageParam;
import com.gitee.sop.adminbackend.common.RSATool;
@@ -8,10 +9,13 @@ import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.req.StatusUpdateParam;
import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.controller.isv.req.IsvInfoAddParam;
import com.gitee.sop.adminbackend.controller.isv.req.IsvInfoUpdateParam;
import com.gitee.sop.adminbackend.controller.isv.req.IsvKeysGenParam;
import com.gitee.sop.adminbackend.dao.entity.IsvInfo;
import com.gitee.sop.adminbackend.service.isv.IsvInfoService;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoAddDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
import com.gitee.sop.adminbackend.util.CopyUtil;
import org.springframework.validation.annotation.Validated;
@@ -35,7 +39,6 @@ public class IsvInfoController {
private IsvInfoService isvInfoService;
/**
* 分页查询
*
@@ -43,10 +46,10 @@ public class IsvInfoController {
* @return
*/
@GetMapping("/page")
public Result<PageInfo<IsvInfo>> page(PageParam param) {
Query query = param.toQuery();
PageInfo<IsvInfo> pageInfo = isvInfoService.page(query);
return Result.ok(pageInfo);
public Result<PageInfo<IsvInfoDTO>> page(PageParam param) {
LambdaQuery<IsvInfo> query = param.toLambdaQuery(IsvInfo.class);
PageInfo<IsvInfoDTO> isvInfoDTOPageInfo = isvInfoService.doPage(query);
return Result.ok(isvInfoDTOPageInfo);
}
/**
@@ -92,12 +95,13 @@ public class IsvInfoController {
/**
* 修改记录
*
* @param user 表单数据
* @param param 表单数据
* @return 返回影响行数
*/
@PostMapping("/update")
public Result<Integer> update(@Validated @RequestBody IsvInfo user) {
return Result.ok(isvInfoService.update(user));
public Result<Integer> update(@Validated @RequestBody IsvInfoUpdateParam param) {
IsvInfoUpdateDTO isvInfoUpdateDTO = CopyUtil.copyBean(param, IsvInfoUpdateDTO::new);
return Result.ok(isvInfoService.update(isvInfoUpdateDTO));
}
/**

View File

@@ -3,8 +3,6 @@ package com.gitee.sop.adminbackend.controller.isv.req;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@@ -14,13 +12,6 @@ import javax.validation.constraints.NotNull;
@Data
public class IsvInfoAddParam {
/**
* 秘钥格式1PKCS8(JAVA适用)2PKCS1(非JAVA适用)
*/
@Min(value = 1, message = "秘钥格式错误")
@Max(value = 2, message = "秘钥格式错误")
private Integer keyFormat;
/**
* 1启用2禁用
*/

View File

@@ -1,26 +1,34 @@
package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.RSATool;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.enums.StatusEnum;
import com.gitee.sop.adminbackend.common.enums.YesOrNoEnum;
import com.gitee.sop.adminbackend.dao.entity.IsvInfo;
import com.gitee.sop.adminbackend.dao.entity.IsvKeys;
import com.gitee.sop.adminbackend.dao.entity.PermIsvRole;
import com.gitee.sop.adminbackend.dao.mapper.IsvInfoMapper;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoAddDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysGenDTO;
import com.gitee.sop.adminbackend.util.CopyUtil;
import com.gitee.sop.adminbackend.util.IdGen;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -35,6 +43,38 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
@Resource
private PermIsvRoleService permIsvRoleService;
public PageInfo<IsvInfoDTO> doPage(LambdaQuery<IsvInfo> query) {
PageInfo<IsvInfo> page = this.page(query);
List<IsvInfo> list = page.getList();
if (CollectionUtils.isEmpty(list)) {
return page.convert(isvInfo -> new IsvInfoDTO());
}
List<Long> idList = list.stream()
.map(IsvInfo::getId).collect(Collectors.toList());
Map<Long, IsvKeys> isvIdMap = isvKeysService.query()
.in(IsvKeys::getIsvId, idList)
.map(IsvKeys::getIsvId, Function.identity());
// 格式转换
return page.convert(isvInfo -> {
IsvInfoDTO isvInfoDTO = CopyUtil.copyBean(isvInfo, IsvInfoDTO::new);
boolean hasKey = false;
Optional<IsvKeys> isvKeysOpt = Optional.ofNullable(isvIdMap.get(isvInfo.getId()));
if (isvKeysOpt.isPresent()) {
IsvKeys isvKeys = isvKeysOpt.get();
hasKey = !StringUtils.isAllBlank(
isvKeys.getPrivateKeyIsv(),
isvKeys.getPrivateKeyPlatform(),
isvKeys.getPublicKeyIsv(),
isvKeys.getPublicKeyPlatform()
);
}
isvInfoDTO.setHasKeys(YesOrNoEnum.of(hasKey).getValue());
return isvInfoDTO;
});
}
public RSATool.KeyStore createKeys(RSATool.KeyFormat keyFormat) throws Exception {
if (keyFormat == null) {
keyFormat = RSATool.KeyFormat.PKCS8;
@@ -45,36 +85,31 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
/**
* 添加ISV
*
* @param isvInfoAddDTO
* @return
* @throws Exception
* @return 返回id
*/
@Transactional(rollbackFor = Exception.class)
public long add(IsvInfoAddDTO isvInfoAddDTO) throws Exception {
public long add(IsvInfoAddDTO isvInfoAddDTO) {
IsvInfo rec = CopyUtil.copyBean(isvInfoAddDTO, IsvInfo::new);
String appKey = new SimpleDateFormat("yyyyMMdd").format(new Date()) + IdGen.nextId();
rec.setAppId(appKey);
rec.setStatus(StatusEnum.ENABLE.getStatus());
this.save(rec);
if (CollectionUtils.isNotEmpty(isvInfoAddDTO.getRoleCodes())) {
this.saveIsvRole(rec, isvInfoAddDTO.getRoleCodes());
}
// 生成秘钥
RSATool.KeyFormat keyFormat = RSATool.KeyFormat.of(isvInfoAddDTO.getKeyFormat());
IsvKeysGenDTO isvKeysGenVO = this.createIsvKeys(keyFormat);
IsvKeys isvKeys = new IsvKeys();
isvKeys.setIsvId(rec.getId());
CopyUtil.copyPropertiesIgnoreNull(isvKeysGenVO, isvKeys);
isvKeysService.save(isvKeys);
return rec.getId();
}
public int update(IsvInfoUpdateDTO isvInfoUpdateDTO) {
return this.query()
.eq(IsvInfo::getId, isvInfoUpdateDTO.getId())
.set(IsvInfo::getStatus, isvInfoUpdateDTO.getStatus())
.set(IsvInfo::getRemark, isvInfoUpdateDTO.getRemark())
.update();
}
private void saveIsvRole(IsvInfo isvInfo, List<String> roleCodeList) {
Long isvId = isvInfo.getId();
permIsvRoleService.query()
.eq(PermIsvRole::getIsvId, isvId)
.delete();
permIsvRoleService.deleteByColumn(PermIsvRole::getIsvId, isvId);
List<PermIsvRole> tobeSaveList = roleCodeList.stream()
.map(roleCode -> {

View File

@@ -3,10 +3,7 @@ package com.gitee.sop.adminbackend.service.isv.dto;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -15,13 +12,6 @@ import java.util.List;
@Data
public class IsvInfoAddDTO {
/**
* 秘钥格式1PKCS8(JAVA适用)2PKCS1(非JAVA适用)
*/
@Min(value = 1, message = "秘钥格式错误")
@Max(value = 2, message = "秘钥格式错误")
private Integer keyFormat;
/**
* 1启用2禁用
*/
@@ -34,9 +24,4 @@ public class IsvInfoAddDTO {
@Length(max = 500)
private String remark;
/**
* 角色code
*/
private List<String> roleCodes;
}

View File

@@ -0,0 +1,45 @@
package com.gitee.sop.adminbackend.service.isv.dto;
import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table;
import lombok.Data;
import java.time.LocalDateTime;
/**
*
* @author 六如
*/
@Data
public class IsvInfoDTO {
private Long id;
/**
* appKey
*/
private String appId;
/**
* 1启用2禁用
*/
private Integer status;
/**
* 是否有秘钥
*/
private Integer hasKeys;
/**
* 备注
*/
private String remark;
private LocalDateTime addTime;
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,13 @@
package com.gitee.sop.adminbackend.service.isv.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author 六如
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class IsvInfoUpdateDTO extends IsvInfoAddDTO {
private Long id;
}