This commit is contained in:
六如
2024-12-21 20:16:00 +08:00
parent f7f04c28eb
commit bb2a9eb314
116 changed files with 2124 additions and 2194 deletions

View File

@@ -3,9 +3,12 @@ package com.gitee.sop.adminbackend.config;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.util.SystemUtil; import com.gitee.sop.adminbackend.common.util.SystemUtil;
import com.gitee.sop.adminbackend.interceptor.LoginInterceptor; import com.gitee.sop.adminbackend.interceptor.LoginInterceptor;
import com.gitee.sop.adminbackend.service.sys.UserCacheService;
import com.gitee.sop.adminbackend.service.sys.impl.LocalUserCacheService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -33,6 +36,12 @@ public class SopAdminConfiguration implements ApplicationContextAware, WebMvcCon
SpringContext.setApplicationContext(applicationContext); SpringContext.setApplicationContext(applicationContext);
} }
@Bean
@ConditionalOnProperty(value = "user.cache.type", havingValue = "local", matchIfMissing = true)
public UserCacheService userCacheService() {
return new LocalUserCacheService();
}
/** /**
* 配置拦截器 * 配置拦截器
* *
@@ -84,10 +93,10 @@ public class SopAdminConfiguration implements ApplicationContextAware, WebMvcCon
frontRoot = homeDir + "/dist"; frontRoot = homeDir + "/dist";
} }
log.info("前端资源目录:{}", frontRoot); log.info("前端资源目录:{}", frontRoot);
String frontLocation = "file:" + frontRoot; String location = "file:" + frontRoot;
registry.addResourceHandler("/index.html").addResourceLocations(frontLocation + "/index.html"); registry.addResourceHandler("/index.html").addResourceLocations(location + "/index.html");
registry.addResourceHandler("/favicon.ico").addResourceLocations(frontLocation + "/favicon.ico"); registry.addResourceHandler("/favicon.ico").addResourceLocations(location + "/favicon.ico");
registry.addResourceHandler("/static/**").addResourceLocations(frontLocation + "/static/"); registry.addResourceHandler("/static/**").addResourceLocations(location + "/static/");
} }
} }

View File

@@ -3,6 +3,10 @@ spring.profiles.active=dev
spring.application.name=sop-admin-backend spring.application.name=sop-admin-backend
####### admin config #######
# user cache
user.cache.type=local
dubbo.protocol.name=dubbo dubbo.protocol.name=dubbo
dubbo.protocol.port=-1 dubbo.protocol.port=-1
dubbo.application.qos-enable=false dubbo.application.qos-enable=false

View File

@@ -88,6 +88,11 @@
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -43,10 +43,10 @@ public class UserContext {
/** /**
* 获取当前登录用户id * 获取当前登录用户id
* @return 返回id,没有返回-1 * @return 返回id,没有返回null
*/ */
public static Long getUserId() { public static Long getUserId() {
return Optional.ofNullable(getUser()).map(User::getUserId).orElse(-1L); return Optional.ofNullable(getUser()).map(User::getUserId).orElse(null);
} }
/** /**

View File

@@ -0,0 +1,31 @@
package com.gitee.sop.adminbackend.common.dto;
import lombok.Data;
/**
* @author 六如
*/
@Data
public class UserDTO {
/**
* 创建人id
*/
private Long addBy;
/**
* 添加人姓名
*/
private String addByName;
/**
* 修改人id
*/
private Long updateBy;
/**
* 修改人姓名
*/
private String updateByName;
}

View File

@@ -4,6 +4,7 @@ import java.io.Serializable;
/** /**
* @author 六如 * @author 六如
* @param <T> 参数类型
*/ */
public interface IEnum<T extends Serializable> { public interface IEnum<T extends Serializable> {

View File

@@ -0,0 +1,19 @@
package com.gitee.sop.adminbackend.common.resp;
import lombok.Data;
/**
* @author 六如
*/
@Data
public class UserVO {
private Long id;
private String username;
private String nickname;
private String showName;
}

View File

@@ -0,0 +1,54 @@
package com.gitee.sop.adminbackend.common.support;
import com.gitee.fastmybatis.core.mapper.BaseMapper;
import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.context.UserContext;
import com.gitee.sop.adminbackend.common.util.DateUtil;
import java.time.LocalDateTime;
/**
* @param <E> 实体类
* @param <Mapper> Mapper
* @author 六如
*/
public interface ServiceSupport<E, Mapper extends BaseMapper<E>> extends LambdaService<E, Mapper> {
@Override
default LambdaQuery<E> query() {
return new MyLambdaQuery<>(this.getEntityClass());
}
class MyLambdaQuery<E> extends LambdaQuery<E> {
private static final long serialVersionUID = 5232128649485429495L;
private static final String UPDATE_BY_FORMAT = "update_by = %s";
private static final String UPDATE_TIME_FORMAT = "update_time = '%s'";
public MyLambdaQuery(Class<E> entityClass) {
super(entityClass);
}
@Override
public int update() {
this.appendUpdate();
return super.update();
}
@Override
public int delete() {
this.appendUpdate();
return super.delete();
}
private void appendUpdate() {
Long userId = UserContext.getUserId();
if (userId != null) {
this.setExpression(String.format(UPDATE_BY_FORMAT, userId));
}
this.setExpression(String.format(UPDATE_TIME_FORMAT, DateUtil.formatYmdhms(LocalDateTime.now())));
}
}
}

View File

@@ -12,6 +12,12 @@ public interface User {
*/ */
Long getUserId(); Long getUserId();
/**
* 返回username
* @return
*/
String getUsername();
/** /**
* 昵称 * 昵称
* @return * @return
@@ -21,4 +27,9 @@ public interface User {
Integer getStatus(); Integer getStatus();
String getToken(); String getToken();
default String getShowName() {
String nickname = getNickname();
return nickname != null && !nickname.isEmpty() ? nickname : getUsername();
}
} }

View File

@@ -8,8 +8,8 @@ import java.time.format.DateTimeFormatter;
*/ */
public class DateUtil { public class DateUtil {
static DateTimeFormatter FORMATTER_FRONT = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); static final DateTimeFormatter FORMATTER_FRONT = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
static DateTimeFormatter FORMATTER_YMDHMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); static final DateTimeFormatter FORMATTER_YMDHMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static String formatFrontDate(LocalDateTime localDateTime) { public static String formatFrontDate(LocalDateTime localDateTime) {
return FORMATTER_FRONT.format(localDateTime); return FORMATTER_FRONT.format(localDateTime);

View File

@@ -350,6 +350,14 @@ public class RSATool {
public void setPrivateKey(String privateKey) { public void setPrivateKey(String privateKey) {
this.privateKey = privateKey; this.privateKey = privateKey;
} }
@Override
public String toString() {
return "KeyStore{" +
"publicKey='" + publicKey + '\'' +
", privateKey='" + privateKey + '\'' +
'}';
}
} }
@AllArgsConstructor @AllArgsConstructor

View File

@@ -0,0 +1,19 @@
package com.gitee.sop.adminbackend.common;
import com.gitee.sop.adminbackend.common.util.RSATool;
import org.junit.Test;
/**
* @author 六如
*/
public class RSAToolTest {
@Test
public void create() throws Exception {
RSATool.KeyStore keys = new RSATool(RSATool.KeyFormat.PKCS1, RSATool.KeyLength.LENGTH_2048).createKeys();
System.out.println(keys.getPrivateKey());
System.out.println(keys.getPublicKey());
}
}

View File

@@ -1,6 +1,7 @@
package com.gitee.sop.adminbackend.service.doc; package com.gitee.sop.adminbackend.service.doc;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.DocApp; import com.gitee.sop.adminbackend.dao.entity.DocApp;
import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper; import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper;
@@ -16,7 +17,7 @@ import java.util.List;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class DocAppService implements LambdaService<DocApp, DocAppMapper> { public class DocAppService implements ServiceSupport<DocApp, DocAppMapper> {
@Autowired @Autowired
private TornaClient tornaClient; private TornaClient tornaClient;
@@ -26,7 +27,7 @@ public class DocAppService implements LambdaService<DocApp, DocAppMapper> {
@Autowired @Autowired
private DocInfoSyncService docInfoSyncService; private DocInfoSyncService docInfoSyncService;
public Long addDocApp(String token) { public Long addDocApp(String token, User user) {
TornaModuleDTO tornaModuleDTO = tornaClient.execute("module.get", null, token, TornaModuleDTO.class); TornaModuleDTO tornaModuleDTO = tornaClient.execute("module.get", null, token, TornaModuleDTO.class);
DocApp docApp = this.get(DocApp::getToken, token); DocApp docApp = this.get(DocApp::getToken, token);
if (docApp == null) { if (docApp == null) {
@@ -39,7 +40,7 @@ public class DocAppService implements LambdaService<DocApp, DocAppMapper> {
this.update(docApp); this.update(docApp);
} }
// 同步文档 // 同步文档
docInfoSyncService.syncDocInfo(docApp, null); docInfoSyncService.syncDocInfo(docApp, null, user);
return docApp.getId(); return docApp.getId();
} }

View File

@@ -1,6 +1,6 @@
package com.gitee.sop.adminbackend.service.doc; package com.gitee.sop.adminbackend.service.doc;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.DocContent; import com.gitee.sop.adminbackend.dao.entity.DocContent;
import com.gitee.sop.adminbackend.dao.mapper.DocContentMapper; import com.gitee.sop.adminbackend.dao.mapper.DocContentMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -10,7 +10,7 @@ import org.springframework.stereotype.Service;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class DocContentService implements LambdaService<DocContent, DocContentMapper> { public class DocContentService implements ServiceSupport<DocContent, DocContentMapper> {
public void saveContent(Long docInfoId, String content) { public void saveContent(Long docInfoId, String content) {
DocContent docContent = this.get(DocContent::getDocInfoId, docInfoId); DocContent docContent = this.get(DocContent::getDocInfoId, docInfoId);

View File

@@ -1,10 +1,10 @@
package com.gitee.sop.adminbackend.service.doc; package com.gitee.sop.adminbackend.service.doc;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.fastmybatis.core.util.TreeUtil; import com.gitee.fastmybatis.core.util.TreeUtil;
import com.gitee.sop.adminbackend.common.constants.YesOrNo; import com.gitee.sop.adminbackend.common.constants.YesOrNo;
import com.gitee.sop.adminbackend.common.exception.BizException; import com.gitee.sop.adminbackend.common.exception.BizException;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.DocApp; import com.gitee.sop.adminbackend.dao.entity.DocApp;
import com.gitee.sop.adminbackend.dao.entity.DocInfo; import com.gitee.sop.adminbackend.dao.entity.DocInfo;
@@ -13,6 +13,8 @@ import com.gitee.sop.adminbackend.dao.mapper.DocInfoMapper;
import com.gitee.sop.adminbackend.service.doc.dto.DocInfoPublishUpdateDTO; import com.gitee.sop.adminbackend.service.doc.dto.DocInfoPublishUpdateDTO;
import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO; import com.gitee.sop.adminbackend.service.doc.dto.DocInfoTreeDTO;
import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoViewDTO; import com.gitee.sop.adminbackend.service.doc.dto.torna.TornaDocInfoViewDTO;
import com.gitee.sop.adminbackend.service.sys.SysUserService;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -27,12 +29,14 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class DocInfoService implements LambdaService<DocInfo, DocInfoMapper> { public class DocInfoService implements ServiceSupport<DocInfo, DocInfoMapper> {
@Autowired @Autowired
private DocAppMapper docAppMapper; private DocAppMapper docAppMapper;
@Autowired @Autowired
private DocContentService docContentService; private DocContentService docContentService;
@Autowired
private SysUserService sysUserService;
public List<DocInfo> listChildDoc(Long parentId) { public List<DocInfo> listChildDoc(Long parentId) {
return this.list(DocInfo::getParentId, parentId); return this.list(DocInfo::getParentId, parentId);
@@ -43,7 +47,11 @@ public class DocInfoService implements LambdaService<DocInfo, DocInfoMapper> {
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>(0); return new ArrayList<>(0);
} }
Set<Long> userIds = list.stream().flatMap(docInfo -> Lists.newArrayList(docInfo.getAddBy(), docInfo.getUpdateBy()).stream())
.filter(val -> val != null && val > 0)
.collect(Collectors.toSet());
List<DocInfoTreeDTO> docInfoTreeDTOS = CopyUtil.copyList(list, DocInfoTreeDTO::new); List<DocInfoTreeDTO> docInfoTreeDTOS = CopyUtil.copyList(list, DocInfoTreeDTO::new);
sysUserService.fillShowName(docInfoTreeDTOS);
return TreeUtil.convertTree(docInfoTreeDTOS, 0L); return TreeUtil.convertTree(docInfoTreeDTOS, 0L);
} }

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
import com.gitee.fastmybatis.core.util.TreeUtil; import com.gitee.fastmybatis.core.util.TreeUtil;
import com.gitee.sop.adminbackend.common.constants.YesOrNo; import com.gitee.sop.adminbackend.common.constants.YesOrNo;
import com.gitee.sop.adminbackend.common.enums.DocSourceTypeEnum; import com.gitee.sop.adminbackend.common.enums.DocSourceTypeEnum;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.dao.entity.DocApp; import com.gitee.sop.adminbackend.dao.entity.DocApp;
import com.gitee.sop.adminbackend.dao.entity.DocInfo; import com.gitee.sop.adminbackend.dao.entity.DocInfo;
import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper; import com.gitee.sop.adminbackend.dao.mapper.DocAppMapper;
@@ -42,18 +43,18 @@ public class DocInfoSyncService {
@Autowired @Autowired
private DocContentService docContentService; private DocContentService docContentService;
public void syncAppDoc(Long docAppId) { public void syncAppDoc(Long docAppId, User user) {
DocApp docApp = docAppMapper.getById(docAppId); DocApp docApp = docAppMapper.getById(docAppId);
this.syncDocInfo(docApp, null); this.syncDocInfo(docApp, null, user);
} }
public void syncDoc(Long docInfoId) { public void syncDoc(Long docInfoId, User user) {
DocInfo docInfo = docInfoService.getById(docInfoId); DocInfo docInfo = docInfoService.getById(docInfoId);
DocApp docApp = docAppMapper.getById(docInfo.getDocAppId()); DocApp docApp = docAppMapper.getById(docInfo.getDocAppId());
this.syncDocInfo(docApp, docInfoId); this.syncDocInfo(docApp, docInfoId, user);
} }
public void syncDocInfo(DocApp docApp, Long docInfoId) { public void syncDocInfo(DocApp docApp, Long docInfoId, User user) {
Long docAppId = docApp.getId(); Long docAppId = docApp.getId();
Map<String, DocInfo> nameVersionMap = docInfoService.list(DocInfo::getDocAppId, docAppId) Map<String, DocInfo> nameVersionMap = docInfoService.list(DocInfo::getDocAppId, docAppId)
.stream() .stream()
@@ -86,6 +87,7 @@ public class DocInfoSyncService {
docInfo.setDescription(tornaDocInfoDTO.getDescription()); docInfo.setDescription(tornaDocInfoDTO.getDescription());
docInfo.setIsFolder(tornaDocInfoDTO.getIsFolder().intValue()); docInfo.setIsFolder(tornaDocInfoDTO.getIsFolder().intValue());
docInfo.setParentId(tornaDocInfoDTO.getParentId()); docInfo.setParentId(tornaDocInfoDTO.getParentId());
docInfo.setUpdateBy(user.getUserId());
updateList.add(docInfo); updateList.add(docInfo);
} }
} }
@@ -118,6 +120,7 @@ public class DocInfoSyncService {
docInfo.setDescription(tornaDocInfoDTO.getDescription()); docInfo.setDescription(tornaDocInfoDTO.getDescription());
docInfo.setIsFolder(tornaDocInfoDTO.getIsFolder().intValue()); docInfo.setIsFolder(tornaDocInfoDTO.getIsFolder().intValue());
docInfo.setParentId(tornaDocInfoDTO.getParentId()); docInfo.setParentId(tornaDocInfoDTO.getParentId());
docInfo.setAddBy(user.getUserId());
return docInfo; return docInfo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@@ -1,9 +1,9 @@
package com.gitee.sop.adminbackend.service.doc.dto; package com.gitee.sop.adminbackend.service.doc.dto;
import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 备注:文档应用 * 备注:文档应用

View File

@@ -1,6 +1,7 @@
package com.gitee.sop.adminbackend.service.doc.dto; package com.gitee.sop.adminbackend.service.doc.dto;
import com.gitee.fastmybatis.core.support.TreeNode; import com.gitee.fastmybatis.core.support.TreeNode;
import com.gitee.sop.adminbackend.common.dto.UserDTO;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -13,7 +14,7 @@ import java.util.List;
* @author 六如 * @author 六如
*/ */
@Data @Data
public class DocInfoTreeDTO implements TreeNode<DocInfoTreeDTO, Long> { public class DocInfoTreeDTO extends UserDTO implements TreeNode<DocInfoTreeDTO, Long> {
/** /**
* id * id
@@ -90,16 +91,6 @@ public class DocInfoTreeDTO implements TreeNode<DocInfoTreeDTO, Long> {
*/ */
private LocalDateTime updateTime; private LocalDateTime updateTime;
/**
* 创建人id
*/
private Long addBy;
/**
* 修改人id
*/
private Long updateBy;
private List<DocInfoTreeDTO> children; private List<DocInfoTreeDTO> children;

View File

@@ -2,12 +2,14 @@ package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.constants.YesOrNo;
import com.gitee.sop.adminbackend.common.util.RSATool;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.enums.StatusEnum; import com.gitee.sop.adminbackend.common.enums.StatusEnum;
import com.gitee.sop.adminbackend.common.constants.YesOrNo; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.common.util.IdGen;
import com.gitee.sop.adminbackend.common.util.RSATool;
import com.gitee.sop.adminbackend.dao.entity.IsvInfo; import com.gitee.sop.adminbackend.dao.entity.IsvInfo;
import com.gitee.sop.adminbackend.dao.entity.IsvKeys; import com.gitee.sop.adminbackend.dao.entity.IsvKeys;
import com.gitee.sop.adminbackend.dao.mapper.IsvInfoMapper; import com.gitee.sop.adminbackend.dao.mapper.IsvInfoMapper;
@@ -17,8 +19,6 @@ import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvInfoEvent; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvInfoEvent;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.common.util.IdGen;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -38,7 +38,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> { public class IsvInfoService implements ServiceSupport<IsvInfo, IsvInfoMapper> {
@Autowired @Autowired
private IsvKeysService isvKeysService; private IsvKeysService isvKeysService;
@@ -107,11 +107,11 @@ public class IsvInfoService implements LambdaService<IsvInfo, IsvInfoMapper> {
} }
public int update(IsvInfoUpdateDTO isvInfoUpdateDTO) { public int update(IsvInfoUpdateDTO isvInfoUpdateDTO) {
int cnt = this.query() IsvInfo isvInfo = new IsvInfo();
.eq(IsvInfo::getId, isvInfoUpdateDTO.getId()) isvInfo.setId(isvInfoUpdateDTO.getId());
.set(IsvInfo::getStatus, isvInfoUpdateDTO.getStatus()) isvInfo.setStatus(isvInfoUpdateDTO.getStatus());
.set(IsvInfo::getRemark, isvInfoUpdateDTO.getRemark()) isvInfo.setRemark(isvInfoUpdateDTO.getRemark());
.update(); int cnt = this.update(isvInfo);
sendChangeEvent(isvInfoUpdateDTO.getId()); sendChangeEvent(isvInfoUpdateDTO.getId());
return cnt; return cnt;
} }

View File

@@ -1,12 +1,12 @@
package com.gitee.sop.adminbackend.service.isv; package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.IsvKeys; import com.gitee.sop.adminbackend.dao.entity.IsvKeys;
import com.gitee.sop.adminbackend.dao.mapper.IsvKeysMapper; import com.gitee.sop.adminbackend.dao.mapper.IsvKeysMapper;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvKeyEvent; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvKeyEvent;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections; import java.util.Collections;
@@ -16,7 +16,7 @@ import java.util.Collections;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class IsvKeysService implements LambdaService<IsvKeys, IsvKeysMapper> { public class IsvKeysService implements ServiceSupport<IsvKeys, IsvKeysMapper> {
public int saveKeys(IsvInfoUpdateKeysDTO isvInfoUpdateKeysDTO) { public int saveKeys(IsvInfoUpdateKeysDTO isvInfoUpdateKeysDTO) {
IsvKeys isvKeys = this.get(IsvKeys::getIsvId, isvInfoUpdateKeysDTO.getIsvId()); IsvKeys isvKeys = this.get(IsvKeys::getIsvId, isvInfoUpdateKeysDTO.getIsvId());

View File

@@ -2,8 +2,8 @@ package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.entity.ApiInfo;
import com.gitee.sop.adminbackend.dao.entity.PermGroupPermission; import com.gitee.sop.adminbackend.dao.entity.PermGroupPermission;
import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup; import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup;
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class PermGroupPermissionService implements LambdaService<PermGroupPermission, PermGroupPermissionMapper> { public class PermGroupPermissionService implements ServiceSupport<PermGroupPermission, PermGroupPermissionMapper> {
@Autowired @Autowired
private ApiInfoMapper apiInfoMapper; private ApiInfoMapper apiInfoMapper;

View File

@@ -2,8 +2,8 @@ package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.exception.BizException; import com.gitee.sop.adminbackend.common.exception.BizException;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.PermGroup; import com.gitee.sop.adminbackend.dao.entity.PermGroup;
import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup; import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup;
import com.gitee.sop.adminbackend.dao.mapper.PermGroupMapper; import com.gitee.sop.adminbackend.dao.mapper.PermGroupMapper;
@@ -19,7 +19,7 @@ import java.util.Map;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class PermGroupService implements LambdaService<PermGroup, PermGroupMapper> { public class PermGroupService implements ServiceSupport<PermGroup, PermGroupMapper> {
@Autowired @Autowired
PermIsvGroupMapper permIsvGroupMapper; PermIsvGroupMapper permIsvGroupMapper;

View File

@@ -2,7 +2,7 @@ package com.gitee.sop.adminbackend.service.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup; import com.gitee.sop.adminbackend.dao.entity.PermIsvGroup;
import com.gitee.sop.adminbackend.dao.mapper.PermIsvGroupMapper; import com.gitee.sop.adminbackend.dao.mapper.PermIsvGroupMapper;
import com.gitee.sop.adminbackend.service.isv.dto.IsvGroupSettingDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvGroupSettingDTO;
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class PermIsvGroupService implements LambdaService<PermIsvGroup, PermIsvGroupMapper> { public class PermIsvGroupService implements ServiceSupport<PermIsvGroup, PermIsvGroupMapper> {
@Autowired @Autowired
private PermGroupService permGroupService; private PermGroupService permGroupService;

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.adminbackend.service.isv.dto; package com.gitee.sop.adminbackend.service.isv.dto;
import com.gitee.sop.adminbackend.service.jackson.convert.annotation.UserFormat;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -40,5 +41,16 @@ public class IsvInfoDTO {
private LocalDateTime updateTime; private LocalDateTime updateTime;
/**
* 创建人id
*/
@UserFormat
private Long addBy;
/**
* 修改人id
*/
@UserFormat
private Long updateBy;
} }

View File

@@ -0,0 +1,31 @@
package com.gitee.sop.adminbackend.service.jackson.convert.annotation;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.gitee.sop.adminbackend.service.jackson.convert.serde.UserFormatSerializer;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 序列化自动转换成用户名称
*
* @author 六如
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = UserFormatSerializer.class)
public @interface UserFormat {
/**
* 显示用户名称
* @return
*/
boolean showName() default true;
}

View File

@@ -0,0 +1,43 @@
package com.gitee.sop.adminbackend.service.jackson.convert.serde;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.resp.UserVO;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.service.sys.UserCacheService;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.util.Objects;
import java.util.Optional;
/**
* @author 六如
*/
@Slf4j
public class UserFormatSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) {
gen.writeNull();
return;
}
Long userId = (Long) value;
if (Objects.equals(userId, 0L)) {
gen.writeNumber(userId);
return;
}
Optional<User> userOpt = SpringContext.getBean(UserCacheService.class).getUser(userId);
if (userOpt.isPresent()) {
User user = userOpt.get();
UserVO userVO = CopyUtil.copyBean(user, UserVO::new);
gen.writeObject(userVO);
} else {
gen.writeObject(value);
}
}
}

View File

@@ -0,0 +1 @@
package com.gitee.sop.adminbackend.service.jackson;

View File

@@ -1,8 +1,8 @@
package com.gitee.sop.adminbackend.service.serve; package com.gitee.sop.adminbackend.service.serve;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.entity.ApiInfo;
import com.gitee.sop.adminbackend.dao.mapper.ApiInfoMapper; import com.gitee.sop.adminbackend.dao.mapper.ApiInfoMapper;
import com.gitee.sop.adminbackend.service.isv.event.ChangeApiInfoEvent; import com.gitee.sop.adminbackend.service.isv.event.ChangeApiInfoEvent;
@@ -15,7 +15,7 @@ import java.util.Collections;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class ApiInfoService implements LambdaService<ApiInfo, ApiInfoMapper> { public class ApiInfoService implements ServiceSupport<ApiInfo, ApiInfoMapper> {
/** /**
* 修改状态 * 修改状态
@@ -34,11 +34,13 @@ public class ApiInfoService implements LambdaService<ApiInfo, ApiInfoMapper> {
@Override @Override
public int update(ApiInfo entity) { public int update(ApiInfo entity) {
int cnt = LambdaService.super.update(entity); int cnt = ServiceSupport.super.update(entity);
sendChangeEvent(entity.getId()); sendChangeEvent(entity.getId());
return cnt; return cnt;
} }
private void sendChangeEvent(Long id) { private void sendChangeEvent(Long id) {
SpringContext.publishEvent(new ChangeApiInfoEvent(Collections.singletonList(id))); SpringContext.publishEvent(new ChangeApiInfoEvent(Collections.singletonList(id)));
} }

View File

@@ -2,10 +2,10 @@ package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.BaseLambdaService; import com.gitee.fastmybatis.core.support.BaseLambdaService;
import com.gitee.sop.adminbackend.common.config.IConfig; import com.gitee.sop.adminbackend.common.config.IConfig;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysConfig; import com.gitee.sop.adminbackend.dao.entity.SysConfig;
import com.gitee.sop.adminbackend.dao.mapper.SysConfigMapper; import com.gitee.sop.adminbackend.dao.mapper.SysConfigMapper;
import com.gitee.sop.adminbackend.service.sys.dto.SystemConfigDTO; import com.gitee.sop.adminbackend.service.sys.dto.SystemConfigDTO;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;

View File

@@ -1,11 +1,10 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.fastmybatis.core.util.TreeUtil; import com.gitee.fastmybatis.core.util.TreeUtil;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.exception.BizException; import com.gitee.sop.adminbackend.common.exception.BizException;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysDept; import com.gitee.sop.adminbackend.dao.entity.SysDept;
import com.gitee.sop.adminbackend.dao.mapper.SysDeptMapper; import com.gitee.sop.adminbackend.dao.mapper.SysDeptMapper;
@@ -20,7 +19,7 @@ import java.util.Objects;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysDeptService implements LambdaService<SysDept, SysDeptMapper> { public class SysDeptService implements ServiceSupport<SysDept, SysDeptMapper> {
public Long addDept(SysDept sysDept) { public Long addDept(SysDept sysDept) {
long count = this.query() long count = this.query()

View File

@@ -1,6 +1,6 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.SysResource; import com.gitee.sop.adminbackend.dao.entity.SysResource;
import com.gitee.sop.adminbackend.dao.mapper.SysResourceMapper; import com.gitee.sop.adminbackend.dao.mapper.SysResourceMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -10,6 +10,6 @@ import org.springframework.stereotype.Service;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysResourceService implements LambdaService<SysResource, SysResourceMapper> { public class SysResourceService implements ServiceSupport<SysResource, SysResourceMapper> {
} }

View File

@@ -1,6 +1,6 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.SysRoleResource; import com.gitee.sop.adminbackend.dao.entity.SysRoleResource;
import com.gitee.sop.adminbackend.dao.mapper.SysRoleResourceMapper; import com.gitee.sop.adminbackend.dao.mapper.SysRoleResourceMapper;
import com.gitee.sop.adminbackend.service.sys.dto.SysRoleResourceDTO; import com.gitee.sop.adminbackend.service.sys.dto.SysRoleResourceDTO;
@@ -16,7 +16,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysRoleResourceService implements LambdaService<SysRoleResource, SysRoleResourceMapper> { public class SysRoleResourceService implements ServiceSupport<SysRoleResource, SysRoleResourceMapper> {
/** /**

View File

@@ -1,7 +1,7 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.dao.entity.SysRole; import com.gitee.sop.adminbackend.dao.entity.SysRole;
import com.gitee.sop.adminbackend.dao.mapper.SysRoleMapper; import com.gitee.sop.adminbackend.dao.mapper.SysRoleMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysRoleService implements LambdaService<SysRole, SysRoleMapper> { public class SysRoleService implements ServiceSupport<SysRole, SysRoleMapper> {
/** /**

View File

@@ -1,6 +1,6 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysDept; import com.gitee.sop.adminbackend.dao.entity.SysDept;
import com.gitee.sop.adminbackend.dao.entity.SysUserDept; import com.gitee.sop.adminbackend.dao.entity.SysUserDept;
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysUserDeptService implements LambdaService<SysUserDept, SysUserDeptMapper> { public class SysUserDeptService implements ServiceSupport<SysUserDept, SysUserDeptMapper> {
@Autowired @Autowired
SysDeptMapper sysDeptMapper; SysDeptMapper sysDeptMapper;

View File

@@ -1,6 +1,6 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.support.LambdaService; import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.user.User; import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysRole; import com.gitee.sop.adminbackend.dao.entity.SysRole;
@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysUserRoleService implements LambdaService<SysUserRole, SysUserRoleMapper> { public class SysUserRoleService implements ServiceSupport<SysUserRole, SysUserRoleMapper> {
@Autowired @Autowired
private SysRoleMapper sysRoleMapper; private SysRoleMapper sysRoleMapper;

View File

@@ -2,11 +2,12 @@ package com.gitee.sop.adminbackend.service.sys;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.support.LambdaService;
import com.gitee.sop.adminbackend.common.config.Configs; import com.gitee.sop.adminbackend.common.config.Configs;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateBatchDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateBatchDTO;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.dto.UserDTO;
import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum;
import com.gitee.sop.adminbackend.common.support.ServiceSupport;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.common.util.GenerateUtil; import com.gitee.sop.adminbackend.common.util.GenerateUtil;
import com.gitee.sop.adminbackend.dao.entity.SysUser; import com.gitee.sop.adminbackend.dao.entity.SysUser;
@@ -24,6 +25,7 @@ import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -35,11 +37,40 @@ import java.util.stream.Collectors;
* @author 六如 * @author 六如
*/ */
@Service @Service
public class SysUserService implements LambdaService<SysUser, SysUserMapper> { public class SysUserService implements ServiceSupport<SysUser, SysUserMapper> {
@Autowired @Autowired
SysUserDeptService sysUserDeptService; SysUserDeptService sysUserDeptService;
public <T extends UserDTO> void fillShowName(Collection<T> userDTOS) {
if (CollectionUtils.isEmpty(userDTOS)) {
return;
}
Set<Long> userIds = userDTOS.stream().flatMap(docInfo -> Lists.newArrayList(docInfo.getAddBy(), docInfo.getUpdateBy()).stream())
.filter(val -> val != null && val > 0)
.collect(Collectors.toSet());
Map<Long, SysUserDTO> userIdMap = this.getUserInfo(userIds);
for (T userDTO : userDTOS) {
SysUserDTO addUser = userIdMap.get(userDTO.getAddBy());
if (addUser != null) {
userDTO.setAddByName(addUser.getShowName());
}
SysUserDTO updateUser = userIdMap.get(userDTO.getUpdateBy());
if (updateUser != null) {
userDTO.setUpdateByName(updateUser.getShowName());
}
}
}
public Map<Long, SysUserDTO> getUserInfo(Collection<Long> userIds) {
if (CollectionUtils.isEmpty(userIds)) {
return Collections.emptyMap();
}
return this.query()
.in(SysUser::getId, userIds)
.map(SysUser::getId, sysUser -> CopyUtil.copyBean(sysUser, SysUserDTO::new));
}
public PageInfo<SysUserDTO> doPage(SysUserSearchDTO sysUserSearchDTO) { public PageInfo<SysUserDTO> doPage(SysUserSearchDTO sysUserSearchDTO) {
LambdaQuery<SysUser> query = sysUserSearchDTO.toLambdaQuery(SysUser.class); LambdaQuery<SysUser> query = sysUserSearchDTO.toLambdaQuery(SysUser.class);
Long deptId = sysUserSearchDTO.getDeptId(); Long deptId = sysUserSearchDTO.getDeptId();

View File

@@ -1,10 +1,10 @@
package com.gitee.sop.adminbackend.service.sys; package com.gitee.sop.adminbackend.service.sys;
import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum; import com.gitee.sop.adminbackend.common.enums.ConfigKeyEnum;
import com.gitee.sop.adminbackend.common.util.PasswordUtil;
import com.gitee.sop.adminbackend.dao.entity.SysUser; import com.gitee.sop.adminbackend.dao.entity.SysUser;
import com.gitee.sop.adminbackend.dao.mapper.UpgradeMapper; import com.gitee.sop.adminbackend.dao.mapper.UpgradeMapper;
import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum; import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum;
import com.gitee.sop.adminbackend.common.util.PasswordUtil;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -0,0 +1,14 @@
package com.gitee.sop.adminbackend.service.sys;
import com.gitee.sop.adminbackend.common.user.User;
import java.util.Optional;
/**
* @author 六如
*/
public interface UserCacheService {
Optional<User> getUser(Long userId);
}

View File

@@ -3,7 +3,6 @@ package com.gitee.sop.adminbackend.service.sys.dto;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.gitee.fastmybatis.core.support.TreeNode; import com.gitee.fastmybatis.core.support.TreeNode;
import com.gitee.sop.adminbackend.common.jackson.convert.annotation.Bool; import com.gitee.sop.adminbackend.common.jackson.convert.annotation.Bool;
import com.google.common.collect.Lists;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;

View File

@@ -1,9 +1,8 @@
package com.gitee.sop.adminbackend.service.sys.dto; package com.gitee.sop.adminbackend.service.sys.dto;
import com.gitee.sop.adminbackend.common.user.User;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -12,7 +11,7 @@ import java.time.LocalDateTime;
* @author 六如 * @author 六如
*/ */
@Data @Data
public class SysUserDTO { public class SysUserDTO implements User {
/** /**
* id * id
@@ -94,5 +93,17 @@ public class SysUserDTO {
*/ */
private SysDeptDTO dept; private SysDeptDTO dept;
@Override
public Long getUserId() {
return id;
}
@Override
public String getToken() {
return "";
}
public String getShowName() {
return nickname != null && !nickname.isEmpty() ? nickname : username;
}
} }

View File

@@ -1,8 +1,9 @@
package com.gitee.sop.adminbackend.service.sys.dto; package com.gitee.sop.adminbackend.service.sys.dto;
import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.Data;
/** /**

View File

@@ -0,0 +1,56 @@
package com.gitee.sop.adminbackend.service.sys.impl;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysUser;
import com.gitee.sop.adminbackend.service.sys.SysUserService;
import com.gitee.sop.adminbackend.service.sys.UserCacheService;
import com.gitee.sop.adminbackend.service.sys.dto.SysUserDTO;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
/**
* @author 六如
*/
public class LocalUserCacheService implements UserCacheService {
@Autowired
private SysUserService sysUserService;
// key: configKey, value: configValue
private final LoadingCache<Long, Optional<User>> configCache = CacheBuilder.newBuilder()
.expireAfterAccess(30, TimeUnit.MINUTES)
.build(new CacheLoader<Long, Optional<User>>() {
@Override
public Optional<User> load(Long key) throws Exception {
return Optional.ofNullable(loadFromDb(key));
}
});
@Override
public Optional<User> getUser(Long userId) {
return configCache.getUnchecked(userId);
}
private User loadFromDb(Long userId) {
SysUser sysUser = sysUserService.getById(userId);
return CopyUtil.copyBean(sysUser, SysUserDTO::new);
}
@PostConstruct
public void init() {
List<SysUser> sysUsers = sysUserService.listAll();
List<SysUserDTO> sysUserDTOS = CopyUtil.copyList(sysUsers, SysUserDTO::new);
for (SysUserDTO sysUserDTO : sysUserDTOS) {
configCache.put(sysUserDTO.getUserId(), Optional.of(sysUserDTO));
}
}
}

View File

@@ -1,12 +1,12 @@
package com.gitee.sop.adminbackend.service.sys.login.impl; package com.gitee.sop.adminbackend.service.sys.login.impl;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.enums.StatusEnum; import com.gitee.sop.adminbackend.common.enums.StatusEnum;
import com.gitee.sop.adminbackend.common.manager.UserCacheManager;
import com.gitee.sop.adminbackend.common.user.User;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.dao.entity.SysUser; import com.gitee.sop.adminbackend.dao.entity.SysUser;
import com.gitee.sop.adminbackend.service.sys.SysUserService; import com.gitee.sop.adminbackend.service.sys.SysUserService;
import com.gitee.sop.adminbackend.common.manager.UserCacheManager;
import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;

View File

@@ -1,5 +1,6 @@
package com.gitee.sop.adminbackend.controller.doc; package com.gitee.sop.adminbackend.controller.doc;
import com.gitee.sop.adminbackend.common.context.UserContext;
import com.gitee.sop.adminbackend.common.req.IdParam; import com.gitee.sop.adminbackend.common.req.IdParam;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil; import com.gitee.sop.adminbackend.common.util.CopyUtil;
@@ -47,19 +48,19 @@ public class DocController {
@PostMapping("app/add") @PostMapping("app/add")
public Result<Long> addApp(@Validated @RequestBody DocAppAddParam param) { public Result<Long> addApp(@Validated @RequestBody DocAppAddParam param) {
Long docAppId = docAppService.addDocApp(param.getTornaToken()); Long docAppId = docAppService.addDocApp(param.getTornaToken(), UserContext.getUser());
return Result.ok(docAppId); return Result.ok(docAppId);
} }
@PostMapping("app/syncAppDoc") @PostMapping("app/syncAppDoc")
public Result<Integer> syncAppDoc(@Validated @RequestBody IdParam param) { public Result<Integer> syncAppDoc(@Validated @RequestBody IdParam param) {
docInfoSyncService.syncAppDoc(param.getId()); docInfoSyncService.syncAppDoc(param.getId(), UserContext.getUser());
return Result.ok(1); return Result.ok(1);
} }
@PostMapping("app/syncDoc") @PostMapping("app/syncDoc")
public Result<Integer> syncDoc(@Validated @RequestBody IdParam param) { public Result<Integer> syncDoc(@Validated @RequestBody IdParam param) {
docInfoSyncService.syncDoc(param.getId()); docInfoSyncService.syncDoc(param.getId(), UserContext.getUser());
return Result.ok(1); return Result.ok(1);
} }

View File

@@ -2,6 +2,7 @@ package com.gitee.sop.adminbackend.controller.doc.vo;
import com.gitee.fastmybatis.core.support.TreeNode; import com.gitee.fastmybatis.core.support.TreeNode;
import com.gitee.sop.adminbackend.common.constants.YesOrNo; import com.gitee.sop.adminbackend.common.constants.YesOrNo;
import com.gitee.sop.adminbackend.service.jackson.convert.annotation.UserFormat;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -95,11 +96,13 @@ public class DocInfoTreeVO implements TreeNode<DocInfoTreeVO, Long> {
/** /**
* 创建人id * 创建人id
*/ */
@UserFormat
private Long addBy; private Long addBy;
/** /**
* 修改人id * 修改人id
*/ */
@UserFormat
private Long updateBy; private Long updateBy;

View File

@@ -3,14 +3,16 @@ package com.gitee.sop.adminbackend.controller.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.fastmybatis.core.query.param.PageParam; import com.gitee.fastmybatis.core.query.param.PageParam;
import com.gitee.sop.adminbackend.common.util.RSATool;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.req.StatusUpdateParam; import com.gitee.sop.adminbackend.common.req.StatusUpdateParam;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.common.util.RSATool;
import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoAddParam; import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoAddParam;
import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoUpdateKeysParam; import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoUpdateKeysParam;
import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoUpdateParam; import com.gitee.sop.adminbackend.controller.isv.param.IsvInfoUpdateParam;
import com.gitee.sop.adminbackend.controller.isv.param.IsvKeysGenParam; import com.gitee.sop.adminbackend.controller.isv.param.IsvKeysGenParam;
import com.gitee.sop.adminbackend.controller.isv.vo.IsvInfoVO;
import com.gitee.sop.adminbackend.dao.entity.IsvInfo; import com.gitee.sop.adminbackend.dao.entity.IsvInfo;
import com.gitee.sop.adminbackend.service.isv.IsvInfoService; import com.gitee.sop.adminbackend.service.isv.IsvInfoService;
import com.gitee.sop.adminbackend.service.isv.PermIsvGroupService; import com.gitee.sop.adminbackend.service.isv.PermIsvGroupService;
@@ -19,7 +21,6 @@ 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.IsvInfoUpdateDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvInfoUpdateKeysDTO;
import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvKeysDTO;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -49,10 +50,11 @@ public class IsvInfoController {
* @return * @return
*/ */
@GetMapping("/page") @GetMapping("/page")
public Result<PageInfo<IsvInfoDTO>> page(PageParam param) { public Result<PageInfo<IsvInfoVO>> page(PageParam param) {
LambdaQuery<IsvInfo> query = param.toLambdaQuery(IsvInfo.class); LambdaQuery<IsvInfo> query = param.toLambdaQuery(IsvInfo.class);
PageInfo<IsvInfoDTO> isvInfoDTOPageInfo = isvInfoService.doPage(query); PageInfo<IsvInfoDTO> isvInfoDTOPageInfo = isvInfoService.doPage(query);
return Result.ok(isvInfoDTOPageInfo); PageInfo<IsvInfoVO> retPage = isvInfoDTOPageInfo.convert(isvInfoDTO -> CopyUtil.copyBean(isvInfoDTO, IsvInfoVO::new));
return Result.ok(retPage);
} }
/** /**
@@ -63,7 +65,7 @@ public class IsvInfoController {
* @throws Exception * @throws Exception
*/ */
@PostMapping("createKeys") @PostMapping("createKeys")
public Result<RSATool.KeyStore> createKeys(IsvKeysGenParam param) throws Exception { public Result<RSATool.KeyStore> createKeys(@Validated @RequestBody IsvKeysGenParam param) throws Exception {
RSATool.KeyFormat format = RSATool.KeyFormat.of(param.getKeyFormat()); RSATool.KeyFormat format = RSATool.KeyFormat.of(param.getKeyFormat());
RSATool.KeyStore keyStore = isvInfoService.createKeys(format); RSATool.KeyStore keyStore = isvInfoService.createKeys(format);
return Result.ok(keyStore); return Result.ok(keyStore);

View File

@@ -3,12 +3,12 @@ package com.gitee.sop.adminbackend.controller.isv;
import com.gitee.fastmybatis.core.PageInfo; import com.gitee.fastmybatis.core.PageInfo;
import com.gitee.fastmybatis.core.query.LambdaQuery; import com.gitee.fastmybatis.core.query.LambdaQuery;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.isv.param.PermGroupApiInfoParam; import com.gitee.sop.adminbackend.controller.isv.param.PermGroupApiInfoParam;
import com.gitee.sop.adminbackend.controller.isv.param.PermGroupPermissionParam; import com.gitee.sop.adminbackend.controller.isv.param.PermGroupPermissionParam;
import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.entity.ApiInfo;
import com.gitee.sop.adminbackend.service.isv.PermGroupPermissionService; import com.gitee.sop.adminbackend.service.isv.PermGroupPermissionService;
import com.gitee.sop.adminbackend.service.isv.dto.PermGroupPermissionDTO; import com.gitee.sop.adminbackend.service.isv.dto.PermGroupPermissionDTO;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View File

@@ -2,11 +2,11 @@ package com.gitee.sop.adminbackend.controller.isv;
import com.gitee.sop.adminbackend.common.context.SpringContext; import com.gitee.sop.adminbackend.common.context.SpringContext;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.isv.param.IsvGroupSettingParam; import com.gitee.sop.adminbackend.controller.isv.param.IsvGroupSettingParam;
import com.gitee.sop.adminbackend.service.isv.PermIsvGroupService; import com.gitee.sop.adminbackend.service.isv.PermIsvGroupService;
import com.gitee.sop.adminbackend.service.isv.dto.IsvGroupSettingDTO; import com.gitee.sop.adminbackend.service.isv.dto.IsvGroupSettingDTO;
import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvPermEvent; import com.gitee.sop.adminbackend.service.isv.event.ChangeIsvPermEvent;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;

View File

@@ -0,0 +1,56 @@
package com.gitee.sop.adminbackend.controller.isv.vo;
import com.gitee.sop.adminbackend.service.jackson.convert.annotation.UserFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
*
* @author 六如
*/
@Data
public class IsvInfoVO {
private Long id;
/**
* appKey
*/
private String appId;
/**
* 1启用2禁用
*/
private Integer status;
/**
* 是否有秘钥
*/
private Integer hasKeys;
/**
* 备注
*/
private String remark;
private String groupNames;
private LocalDateTime addTime;
private LocalDateTime updateTime;
/**
* 创建人id
*/
@UserFormat
private Long addBy;
/**
* 修改人id
*/
@UserFormat
private Long updateBy;
}

View File

@@ -5,10 +5,11 @@ import com.gitee.fastmybatis.core.query.Query;
import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO; import com.gitee.sop.adminbackend.common.dto.StatusUpdateDTO;
import com.gitee.sop.adminbackend.common.req.StatusUpdateParam; import com.gitee.sop.adminbackend.common.req.StatusUpdateParam;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.serve.param.ApiInfoPageParam; import com.gitee.sop.adminbackend.controller.serve.param.ApiInfoPageParam;
import com.gitee.sop.adminbackend.controller.serve.vo.ApiInfoVO;
import com.gitee.sop.adminbackend.dao.entity.ApiInfo; import com.gitee.sop.adminbackend.dao.entity.ApiInfo;
import com.gitee.sop.adminbackend.service.serve.ApiInfoService; import com.gitee.sop.adminbackend.service.serve.ApiInfoService;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@@ -43,6 +44,7 @@ public class ApiInfoController {
Query query = param.toQuery(); Query query = param.toQuery();
query.orderByDesc("id"); query.orderByDesc("id");
PageInfo<ApiInfo> pageInfo = apiInfoService.page(query); PageInfo<ApiInfo> pageInfo = apiInfoService.page(query);
pageInfo.convert(apiInfo -> CopyUtil.copyBean(apiInfo, ApiInfoVO::new));
return Result.ok(pageInfo); return Result.ok(pageInfo);
} }
@@ -53,11 +55,11 @@ public class ApiInfoController {
* @return * @return
*/ */
@GetMapping("/listAll") @GetMapping("/listAll")
public Result<List<ApiInfo>> listAll(ApiInfoPageParam param) { public Result<List<ApiInfoVO>> listAll(ApiInfoPageParam param) {
Query query = param.toQuery(); Query query = param.toQuery();
query.orderByDesc("id"); query.orderByDesc("id");
List<ApiInfo> list = apiInfoService.list(query); List<ApiInfo> list = apiInfoService.list(query);
return Result.ok(list); return Result.ok(CopyUtil.copyList(list, ApiInfoVO::new));
} }
/** /**

View File

@@ -0,0 +1,107 @@
package com.gitee.sop.adminbackend.controller.serve.vo;
import com.gitee.sop.adminbackend.service.jackson.convert.annotation.UserFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author 六如
*/
@Data
public class ApiInfoVO {
/**
* id
*/
private Long id;
/**
* 所属应用
*/
private String application;
/**
* 接口名称
*/
private String apiName;
/**
* 版本号
*/
private String apiVersion;
/**
* 接口描述
*/
private String description;
/**
* 备注
*/
private String remark;
/**
* 接口class
*/
private String interfaceClassName;
/**
* 方法名称
*/
private String methodName;
/**
* 参数信息
*/
private String paramInfo;
/**
* 接口是否需要授权访问
*/
private Integer isPermission;
/**
* 是否需要appAuthToken
*/
private Integer isNeedToken;
/**
* 是否有公共响应参数
*/
private Integer hasCommonResponse;
/**
* 注册来源1-系统注册,2-手动注册
*/
private Integer regSource;
/**
* 1启用0禁用
*/
private Integer status;
/**
* 添加时间
*/
private LocalDateTime addTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 创建人id
*/
@UserFormat
private Long addBy;
/**
* 最后更新人id
*/
@UserFormat
private Long updateBy;
}

View File

@@ -2,13 +2,13 @@ package com.gitee.sop.adminbackend.controller.sys;
import com.gitee.sop.adminbackend.common.annotation.NoToken; import com.gitee.sop.adminbackend.common.annotation.NoToken;
import com.gitee.sop.adminbackend.common.resp.Result; import com.gitee.sop.adminbackend.common.resp.Result;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import com.gitee.sop.adminbackend.controller.sys.param.LoginParam; import com.gitee.sop.adminbackend.controller.sys.param.LoginParam;
import com.gitee.sop.adminbackend.controller.sys.vo.LoginResultVO; import com.gitee.sop.adminbackend.controller.sys.vo.LoginResultVO;
import com.gitee.sop.adminbackend.service.sys.login.LoginService; import com.gitee.sop.adminbackend.service.sys.login.LoginService;
import com.gitee.sop.adminbackend.service.sys.login.dto.LoginDTO; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginDTO;
import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser; import com.gitee.sop.adminbackend.service.sys.login.dto.LoginUser;
import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum; import com.gitee.sop.adminbackend.service.sys.login.enums.RegTypeEnum;
import com.gitee.sop.adminbackend.common.util.CopyUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;

View File

@@ -1,7 +1,5 @@
package com.gitee.sop.adminbackend.controller.sys.param; package com.gitee.sop.adminbackend.controller.sys.param;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.core.query.Operator; import com.gitee.fastmybatis.core.query.Operator;
import com.gitee.fastmybatis.core.query.annotation.Condition; import com.gitee.fastmybatis.core.query.annotation.Condition;
import com.gitee.fastmybatis.core.query.param.PageParam; import com.gitee.fastmybatis.core.query.param.PageParam;

View File

@@ -1,11 +1,10 @@
package com.gitee.sop.adminbackend.controller.sys.param; package com.gitee.sop.adminbackend.controller.sys.param;
import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/** /**

View File

@@ -3,7 +3,6 @@ package com.gitee.sop.adminbackend.controller.sys.vo;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author 六如 * @author 六如

View File

@@ -2,8 +2,6 @@ package com.gitee.sop.adminbackend.controller.sys.vo;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@@ -1,306 +0,0 @@
import { computed, ref } from "vue";
import {
type ButtonsCallBackParams,
type FieldValues,
type PageInfo,
type PlusColumn,
useTable
} from "plus-pro-components";
import { ElMessage } from "element-plus";
import { api } from "@/api/sysAdminUser";
const isAdd = ref(false);
// ========= search form =========
// 查询表单对象
export const searchFormData = ref({
id: "",
username: "",
password: "",
nickname: "",
email: "",
avatar: "",
status: "",
regType: "",
addTime: "",
updateTime: "",
pageIndex: 1,
pageSize: 10
});
// 查询表单字段定义
export const searchFormColumns: PlusColumn[] = [
{
label: "用户名",
prop: "username"
},
{
label: "密码",
prop: "password"
},
{
label: "用户名",
prop: "nickname"
},
{
label: "邮箱",
prop: "email"
},
{
label: "头像",
prop: "avatar"
},
{
label: "状态1启用2禁用",
prop: "status"
},
{
label: "注册类型",
prop: "regType"
},
{
label: "addTime",
prop: "addTime"
},
{
label: "updateTime",
prop: "updateTime"
}
];
// ========= table =========
// 表格对象
export const {
tableData,
total,
pageInfo,
buttons: actionButtons
} = useTable<any[]>();
// 默认每页条数,默认10
pageInfo.value.pageSize = 10;
// 表格字段定义
export const tableColumns: PlusColumn[] = [
{
label: "用户名",
prop: "username"
},
{
label: "密码",
prop: "password"
},
{
label: "用户名",
prop: "nickname"
},
{
label: "邮箱",
prop: "email"
},
{
label: "头像",
prop: "avatar"
},
{
label: "状态1启用2禁用",
prop: "status"
},
{
label: "注册类型",
prop: "regType"
},
{
label: "addTime",
prop: "addTime"
},
{
label: "updateTime",
prop: "updateTime"
}
];
// 表格按钮定义
actionButtons.value = [
{
// 修改
text: "修改",
code: "edit",
props: {
type: "primary"
},
show: computed(() => true),
onClick(params: ButtonsCallBackParams) {
isAdd.value = false;
editFormData.value = Object.assign({}, params.row);
dlgTitle.value = "修改";
dlgShow.value = true;
}
},
{
// 删除
text: "删除",
code: "delete",
props: {
type: "danger"
},
confirm: {
options: { draggable: false }
},
onConfirm(params: ButtonsCallBackParams) {
api.del(params).then(() => {
ElMessage({
message: "删除成功",
type: "success"
});
dlgShow.value = false;
search();
});
}
}
];
// ========= dialog form =========
// 弹窗显示
export const dlgShow = ref(false);
export const dlgTitle = ref("");
// 表单值
const editFormDataGen = () => {
return {
username: "",
password: "",
nickname: "",
email: "",
avatar: "",
status: "",
regType: "",
addTime: "",
updateTime: ""
};
};
export const editFormData = ref<FieldValues>(editFormDataGen());
export const editFormRules = {
id: [{ required: true, message: "请输入id" }],
username: [{ required: true, message: "请输入用户名" }],
password: [{ required: true, message: "请输入密码" }],
nickname: [{ required: true, message: "请输入用户名" }],
email: [{ required: true, message: "请输入邮箱" }],
avatar: [{ required: true, message: "请输入头像" }],
status: [{ required: true, message: "请输入状态1启用2禁用" }],
regType: [{ required: true, message: "请输入注册类型" }],
addTime: [{ required: true, message: "请输入addTime" }],
updateTime: [{ required: true, message: "请输入updateTime" }]
};
// 表单内容
export const editFormColumns: PlusColumn[] = [
{
label: "id",
prop: "id",
valueType: "copy"
},
{
label: "用户名",
prop: "username",
valueType: "copy"
},
{
label: "密码",
prop: "password",
valueType: "copy"
},
{
label: "用户名",
prop: "nickname",
valueType: "copy"
},
{
label: "邮箱",
prop: "email",
valueType: "copy"
},
{
label: "头像",
prop: "avatar",
valueType: "copy"
},
{
label: "状态1启用2禁用",
prop: "status",
valueType: "copy"
},
{
label: "注册类型",
prop: "regType",
valueType: "copy"
},
{
label: "addTime",
prop: "addTime",
valueType: "copy"
},
{
label: "updateTime",
prop: "updateTime",
valueType: "copy"
}
];
// ========= event =========
// 添加按钮事件
export const handleAdd = () => {
isAdd.value = true;
editFormData.value = editFormDataGen();
dlgTitle.value = "新增";
dlgShow.value = true;
};
// 保存按钮事件,校验成功后触发
export const handleSave = () => {
const postData = editFormData.value;
const pms = isAdd.value ? api.add(postData) : api.update(postData);
pms.then(() => {
ElMessage({
message: "保存成功",
type: "success"
});
dlgShow.value = false;
search();
});
};
// 点击查询按钮
export const handleSearch = () => {
pageInfo.value.page = 1;
search();
};
// 分页事件
export const handlePaginationChange = (_pageInfo: PageInfo): void => {
pageInfo.value = _pageInfo;
search();
};
// 查询
const search = async () => {
try {
const { data } = await doSearch();
tableData.value = data.list;
total.value = data.total;
} catch (error) {}
};
// 请求接口
const doSearch = async () => {
// 查询参数
const data = searchFormData.value;
// 添加分页参数
data.pageIndex = pageInfo.value.page;
data.pageSize = pageInfo.value.pageSize;
return api.page(data);
};
// 页面加载
search();

View File

@@ -1,63 +0,0 @@
<script setup lang="ts">
import {
actionButtons,
dlgShow,
dlgTitle,
editFormColumns,
editFormData,
editFormRules,
handleAdd,
handlePaginationChange,
handleSave,
handleSearch,
pageInfo,
searchFormColumns,
searchFormData,
tableColumns,
tableData,
total
} from "./index";
</script>
<template>
<el-card shadow="never">
<template #header>
<PlusSearch
v-model="searchFormData"
:columns="searchFormColumns"
:show-number="2"
label-position="right"
:has-reset="false"
@search="handleSearch"
/>
</template>
<PlusTable
:columns="tableColumns"
:table-data="tableData"
:action-bar="{ buttons: actionButtons, width: 120 }"
:pagination="{
total,
modelValue: pageInfo,
pageSizeList: [10, 20, 50, 100],
align: 'right'
}"
@paginationChange="handlePaginationChange"
>
<template #title>
<el-button type="primary" @click="handleAdd">新增</el-button>
</template>
</PlusTable>
<PlusDialogForm
v-model:visible="dlgShow"
v-model="editFormData"
:dialog="{ title: dlgTitle }"
:form="{
columns: editFormColumns,
rules: editFormRules,
labelWidth: '100px',
labelPosition: 'right'
}"
:hasErrorTip="false"
@confirm="handleSave"
/>
</el-card>
</template>

View File

@@ -66,10 +66,7 @@ export function useDocList() {
}, },
{ {
label: "描述", label: "描述",
prop: "description", prop: "description"
tableColumnProps: {
showOverflowTooltip: true
}
}, },
{ {
label: "发布状态", label: "发布状态",
@@ -98,12 +95,22 @@ export function useDocList() {
} }
}, },
{ {
width: 160, width: 100,
label: "添加人",
prop: "addBy.showName"
},
{
width: 100,
label: "修改人",
prop: "updateBy.showName"
},
{
width: 120,
label: "添加时间", label: "添加时间",
prop: "addTime" prop: "addTime"
}, },
{ {
width: 160, width: 120,
label: "修改时间", label: "修改时间",
prop: "updateTime" prop: "updateTime"
} }

View File

@@ -46,6 +46,7 @@ const {
v-show="tabsData.length > 0" v-show="tabsData.length > 0"
:columns="tableColumns" :columns="tableColumns"
:table-data="tableRows" :table-data="tableRows"
showOverflowTooltip
:action-bar="{ :action-bar="{
buttons: actionButtons, buttons: actionButtons,
confirmType: 'popconfirm', confirmType: 'popconfirm',

View File

@@ -1,53 +1,59 @@
import { ref } from "vue"; import { onMounted, ref } from "vue";
import type { PlusColumn, FieldValues } from "plus-pro-components"; import type { PlusColumn, FieldValues } from "plus-pro-components";
import { api } from "@/api/docSetting"; import { api } from "@/api/docSetting";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
export const state = ref<FieldValues>({ export function useDocSetting() {
tornaServerAddr: "", const state = ref<FieldValues>({
openProdUrl: "", tornaServerAddr: "",
openSandboxUrl: "" openProdUrl: "",
}); openSandboxUrl: ""
export const rules = {};
export const columns: PlusColumn[] = [
{
label: "Torna地址",
prop: "tornaServerAddr",
valueType: "copy",
fieldProps: {
placeholder: "Torna地址,到端口号,如:https://torna.xxx.com:7700"
}
},
{
label: "开放平台线上环境地址",
prop: "openProdUrl",
valueType: "copy",
fieldProps: {
placeholder: "开放平台线上环境地址,如:https://open.xxx.com/api"
}
},
{
label: "开放平台沙箱环境地址",
prop: "openSandboxUrl",
valueType: "copy",
fieldProps: {
placeholder: "开放平台沙箱环境地址, 如:https://open-sandbox.xxx.com/api"
}
}
];
export const handleSubmit = (values: FieldValues) => {
api.save(values).then(() => {
ElMessage.success("保存成功");
}); });
};
const loadSetting = () => { const rules = {};
api.get().then(resp => {
state.value = resp.data; const columns: PlusColumn[] = [
{
label: "Torna地址",
prop: "tornaServerAddr",
valueType: "copy",
fieldProps: {
placeholder: "Torna地址,到端口号,如:https://torna.xxx.com:7700"
}
},
{
label: "开放平台线上环境地址",
prop: "openProdUrl",
valueType: "copy",
fieldProps: {
placeholder: "开放平台线上环境地址,如:https://open.xxx.com/api"
}
},
{
label: "开放平台沙箱环境地址",
prop: "openSandboxUrl",
valueType: "copy",
fieldProps: {
placeholder: "开放平台沙箱环境地址, 如:https://open-sandbox.xxx.com/api"
}
}
];
const handleSubmit = (values: FieldValues) => {
api.save(values).then(() => {
ElMessage.success("保存成功");
});
};
const loadSetting = () => {
api.get().then(resp => {
state.value = resp.data;
});
};
onMounted(() => {
loadSetting();
}); });
};
loadSetting(); return { state, rules, columns, handleSubmit };
}

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { state, rules, columns, handleSubmit } from "./index"; import { useDocSetting } from "./index";
const { state, rules, columns, handleSubmit } = useDocSetting();
defineOptions({ defineOptions({
name: "DocSetting" name: "DocSetting"
}); });

View File

@@ -1,4 +1,4 @@
import { ref } from "vue"; import { onMounted, ref } from "vue";
import { import {
type ButtonsCallBackParams, type ButtonsCallBackParams,
type FieldValues, type FieldValues,
@@ -11,281 +11,320 @@ import { KeyFormatEnum, StatusEnum } from "@/model/enums";
import { api } from "@/api/isvList"; import { api } from "@/api/isvList";
import { settingKeys } from "@/views/isv/list/isvKeys"; import { settingKeys } from "@/views/isv/list/isvKeys";
import { settingGroup } from "@/views/isv/list/isvGroup"; import { settingGroup } from "@/views/isv/list/isvGroup";
export function useIsvList() {
const isAdd = ref(false);
const isAdd = ref(false); // ========= search form =========
// ========= search form ========= // 查询表单对象
const searchFormData = ref({
appId: "",
status: "",
pageIndex: 1,
pageSize: 10
});
// 查询表单对象 // 查询表单字段定义
export const searchFormData = ref({ const searchFormColumns: PlusColumn[] = [
appId: "", {
status: "", label: "AppID",
pageIndex: 1, prop: "appId"
pageSize: 10 },
}); {
label: "状态",
prop: "status",
valueType: "select",
options: [
{
label: "启用",
value: StatusEnum.ENABLE,
color: "green"
},
{
label: "禁用",
value: StatusEnum.DISABLE,
color: "red"
}
]
}
];
// 查询表单字段定义 // ========= table =========
export const searchFormColumns: PlusColumn[] = [
{ // 表格对象
label: "AppID", const {
prop: "appId" tableData,
}, total,
{ pageInfo,
label: "状态", buttons: actionButtons
prop: "status", } = useTable<any[]>();
valueType: "select", // 默认每页条数,默认10
options: [ pageInfo.value.pageSize = 10;
{
label: "启用", // 表格字段定义
value: StatusEnum.ENABLE, const tableColumns: PlusColumn[] = [
color: "green" {
}, label: "AppID",
{ prop: "appId",
label: "禁用", width: 250
value: StatusEnum.DISABLE, },
color: "red" {
label: "秘钥",
prop: "keys",
width: 80
},
{
label: "所属分组",
prop: "groupNames",
width: 120,
tableColumnProps: {
showOverflowTooltip: true
} }
] },
} {
]; label: "状态",
prop: "status",
// ========= table ========= width: 80,
valueType: "select",
// 表格对象 options: [
export const { {
tableData, label: "启用",
total, value: StatusEnum.ENABLE,
pageInfo, color: "green"
buttons: actionButtons },
} = useTable<any[]>(); {
// 默认每页条数,默认10 label: "禁用",
pageInfo.value.pageSize = 10; value: StatusEnum.DISABLE,
color: "red"
// 表格字段定义 }
export const tableColumns: PlusColumn[] = [ ]
{ },
label: "AppID", {
prop: "appId", label: "备注",
width: 250 prop: "remark",
}, tableColumnProps: {
{ showOverflowTooltip: true
label: "秘钥",
prop: "keys",
width: 80
},
{
label: "所属分组",
prop: "groupNames",
width: 200,
tableColumnProps: {
showOverflowTooltip: true
}
},
{
label: "状态",
prop: "status",
width: 80,
valueType: "select",
options: [
{
label: "启用",
value: StatusEnum.ENABLE,
color: "green"
},
{
label: "禁用",
value: StatusEnum.DISABLE,
color: "red"
} }
]
},
{
label: "备注",
prop: "remark",
tableColumnProps: {
showOverflowTooltip: true
}
},
{
label: "添加时间",
prop: "addTime",
width: 160
},
{
label: "修改时间",
prop: "updateTime",
width: 160
}
];
// 表格按钮定义
actionButtons.value = [
{
// 修改
text: "修改",
code: "edit",
props: {
type: "primary"
}, },
onClick(params: ButtonsCallBackParams) { {
isAdd.value = false; width: 100,
editFormData.value = Object.assign({}, params.row); label: "添加人",
dlgTitle.value = "修改"; prop: "addBy.showName"
dlgShow.value = true;
}
},
{
text: "设置秘钥",
code: "edit",
props: {
type: "primary"
}, },
onClick(params: ButtonsCallBackParams) { {
settingKeys(params.row); width: 100,
} label: "修改人",
}, prop: "updateBy.showName"
{
text: "设置分组",
code: "edit",
props: {
type: "primary"
}, },
onClick(params: ButtonsCallBackParams) { {
settingGroup(params.row); width: 120,
label: "添加时间",
prop: "addTime",
tableColumnProps: {
showOverflowTooltip: true
}
},
{
width: 120,
label: "修改时间",
prop: "updateTime",
tableColumnProps: {
showOverflowTooltip: true
}
} }
}, ];
{ // 表格按钮定义
// 启用/禁用 actionButtons.value = [
text: row => (row.status === StatusEnum.ENABLE ? "禁用" : "启用"), {
confirm: { // 修改
message: data => { text: "修改",
const opt = data.row.status === StatusEnum.ENABLE ? "禁用" : "启用"; code: "edit",
return `确定${opt}吗?`; props: {
type: "primary"
}, },
options: { draggable: false } onClick(params: ButtonsCallBackParams) {
isAdd.value = false;
editFormData.value = Object.assign({}, params.row);
dlgTitle.value = "修改";
dlgShow.value = true;
}
}, },
onConfirm(params: ButtonsCallBackParams) { {
const data = { text: "设置秘钥",
id: params.row.id, code: "edit",
status: props: {
params.row.status === StatusEnum.ENABLE type: "primary"
? StatusEnum.DISABLE },
: StatusEnum.ENABLE onClick(params: ButtonsCallBackParams) {
}; settingKeys(params.row);
api.updateStatus(data).then(() => { }
ElMessage.success("修改成功"); },
dlgShow.value = false; {
search(); text: "设置分组",
}); code: "edit",
props: {
type: "primary"
},
onClick(params: ButtonsCallBackParams) {
settingGroup(params.row);
}
},
{
// 启用/禁用
text: row => (row.status === StatusEnum.ENABLE ? "禁用" : "启用"),
confirm: {
message: data => {
const opt = data.row.status === StatusEnum.ENABLE ? "禁用" : "启用";
return `确定${opt}吗?`;
},
options: { draggable: false }
},
onConfirm(params: ButtonsCallBackParams) {
const data = {
id: params.row.id,
status:
params.row.status === StatusEnum.ENABLE
? StatusEnum.DISABLE
: StatusEnum.ENABLE
};
api.updateStatus(data).then(() => {
ElMessage.success("修改成功");
dlgShow.value = false;
search();
});
}
} }
} ];
];
// ========= dialog form ========= // ========= dialog form =========
// 弹窗显示 // 弹窗显示
export const dlgShow = ref(false); const dlgShow = ref(false);
export const dlgTitle = ref(""); const dlgTitle = ref("");
// 表单值 // 表单值
const editFormDataGen = () => { const editFormDataGen = () => {
return { return {
id: 0, id: 0,
status: StatusEnum.ENABLE, status: StatusEnum.ENABLE,
keyFormat: KeyFormatEnum.PKCS8, keyFormat: KeyFormatEnum.PKCS8,
remark: "" remark: ""
};
}; };
}; const editFormData = ref<FieldValues>(editFormDataGen());
export const editFormData = ref<FieldValues>(editFormDataGen()); const editFormRules = {};
export const editFormRules = {};
// 表单内容 // 表单内容
export const editFormColumns: PlusColumn[] = [ const editFormColumns: PlusColumn[] = [
{ {
label: "AppID", label: "AppID",
prop: "appId", prop: "appId",
valueType: "copy", valueType: "copy",
fieldProps: { fieldProps: {
disabled: true, disabled: true,
placeholder: "自动生成" placeholder: "自动生成"
} }
}, },
{ {
label: "状态", label: "状态",
prop: "status", prop: "status",
valueType: "radio", valueType: "radio",
options: [ options: [
{ {
label: "启用", label: "启用",
value: StatusEnum.ENABLE value: StatusEnum.ENABLE
}, },
{ {
label: "禁用", label: "禁用",
value: StatusEnum.DISABLE value: StatusEnum.DISABLE
}
]
},
{
label: "备注",
prop: "remark",
valueType: "textarea",
fieldProps: {
maxlength: 300,
showWordLimit: true,
autosize: { minRows: 2, maxRows: 4 }
} }
]
},
{
label: "备注",
prop: "remark",
valueType: "textarea",
fieldProps: {
maxlength: 300,
showWordLimit: true,
autosize: { minRows: 2, maxRows: 4 }
} }
} ];
];
// ========= event ========= // ========= event =========
// 添加按钮事件 // 添加按钮事件
export const handleAdd = () => { const handleAdd = () => {
isAdd.value = true; isAdd.value = true;
editFormData.value = editFormDataGen(); editFormData.value = editFormDataGen();
dlgTitle.value = "新增"; dlgTitle.value = "新增";
dlgShow.value = true; dlgShow.value = true;
}; };
// 保存按钮事件,校验成功后触发 // 保存按钮事件,校验成功后触发
export const handleSave = () => { const handleSave = () => {
const postData = editFormData.value; const postData = editFormData.value;
const pms = isAdd.value ? api.add(postData) : api.update(postData); const pms = isAdd.value ? api.add(postData) : api.update(postData);
pms.then(() => { pms.then(() => {
ElMessage.success("保存成功"); ElMessage.success("保存成功");
dlgShow.value = false; dlgShow.value = false;
search();
});
};
// 点击查询按钮
const handleSearch = () => {
pageInfo.value.page = 1;
search();
};
// 分页事件
const handlePaginationChange = (_pageInfo: PageInfo): void => {
pageInfo.value = _pageInfo;
search();
};
// 查询
const search = async () => {
try {
const { data } = await doSearch();
tableData.value = data.list;
total.value = data.total;
} catch (error) {}
};
// 请求接口
const doSearch = async () => {
// 查询参数
const data = searchFormData.value;
// 添加分页参数
data.pageIndex = pageInfo.value.page;
data.pageSize = pageInfo.value.pageSize;
return api.page(data);
};
onMounted(() => {
// 页面加载
search(); search();
}); });
};
// 点击查询按钮 return {
export const handleSearch = () => { search,
pageInfo.value.page = 1; actionButtons,
search(); dlgShow,
}; dlgTitle,
editFormColumns,
// 分页事件 editFormData,
export const handlePaginationChange = (_pageInfo: PageInfo): void => { editFormRules,
pageInfo.value = _pageInfo; handleAdd,
search(); handlePaginationChange,
}; handleSave,
handleSearch,
// 查询 pageInfo,
export const search = async () => { searchFormColumns,
try { searchFormData,
const { data } = await doSearch(); tableColumns,
tableData.value = data.list; tableData,
total.value = data.total; total
} catch (error) {} };
}; }
// 请求接口
const doSearch = async () => {
// 查询参数
const data = searchFormData.value;
// 添加分页参数
data.pageIndex = pageInfo.value.page;
data.pageSize = pageInfo.value.pageSize;
return api.page(data);
};
// 页面加载
search();

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { import { useIsvList } from "./index";
const {
actionButtons, actionButtons,
dlgShow, dlgShow,
dlgTitle, dlgTitle,
@@ -16,7 +17,7 @@ import {
tableColumns, tableColumns,
tableData, tableData,
total total
} from "./index"; } = useIsvList();
import { import {
dlgKeysShow, dlgKeysShow,
showKeysFormColumns, showKeysFormColumns,
@@ -67,6 +68,7 @@ defineOptions({
pageSizeList: [10, 20, 50, 100], pageSizeList: [10, 20, 50, 100],
align: 'right' align: 'right'
}" }"
showOverflowTooltip
@paginationChange="handlePaginationChange" @paginationChange="handlePaginationChange"
> >
<template #title> <template #title>

View File

@@ -5,7 +5,9 @@ import { type OptionsRow, type PlusColumn } from "plus-pro-components";
import { api } from "@/api/isvList"; import { api } from "@/api/isvList";
import { api as groupApi } from "@/api/permGroup"; import { api as groupApi } from "@/api/permGroup";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { search } from "@/views/isv/list/index"; import { useIsvList } from "@/views/isv/list/index";
const { search } = useIsvList();
// 弹窗显示 // 弹窗显示
export const dlgGroupSetting = ref(false); export const dlgGroupSetting = ref(false);

View File

@@ -3,7 +3,9 @@ import type { PlusFormGroupRow } from "plus-pro-components";
import { api } from "@/api/isvList"; import { api } from "@/api/isvList";
import { KeyFormatEnum } from "@/model/enums"; import { KeyFormatEnum } from "@/model/enums";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { search } from "./index"; import { useIsvList } from "./index";
const { search } = useIsvList();
// 弹窗显示 // 弹窗显示
export const dlgKeysSetting = ref(false); export const dlgKeysSetting = ref(false);

View File

@@ -1,4 +1,4 @@
import { ref } from "vue"; import { onMounted, ref } from "vue";
import { import {
type ButtonsCallBackParams, type ButtonsCallBackParams,
type PlusColumn, type PlusColumn,
@@ -8,149 +8,173 @@ import { ElMessage } from "element-plus";
import { api } from "@/api/permGroup"; import { api } from "@/api/permGroup";
import { searchTable } from "@/views/isv/perm/permGroupApi"; import { searchTable } from "@/views/isv/perm/permGroupApi";
const isAdd = ref(false); export function usePermGroup() {
const isAdd = ref(false);
// ========= search form ========= // ========= search form =========
// 查询表单对象 // 查询表单对象
export const searchFormData = ref({ const searchFormData = ref({
groupName: ""
});
// 查询表单字段定义
export const searchFormColumns: PlusColumn[] = [
{
label: "分组描述",
prop: "groupName"
}
];
// ========= table =========
// 表格对象
export const { tableData, buttons: actionButtons } = useTable<any[]>();
export const selectedGroupId = ref(0);
// 表格字段定义
export const tableColumns: PlusColumn[] = [
{
label: "分组名称",
prop: "groupName"
}
];
// 表格按钮定义
actionButtons.value = [
{
// 修改
text: "修改",
code: "edit",
props: {
type: "primary"
},
onClick(params: ButtonsCallBackParams) {
params.e.stopPropagation();
isAdd.value = false;
editFormData.value = Object.assign({}, params.row);
dlgTitle.value = "修改";
dlgShow.value = true;
}
},
{
// 删除
text: "删除",
code: "delete",
props: {
type: "danger"
},
confirm: {
options: { draggable: false }
},
onConfirm(params: ButtonsCallBackParams) {
params.e.stopPropagation();
api.del(params.row).then(() => {
ElMessage({
message: "删除成功",
type: "success"
});
dlgShow.value = false;
search();
});
}
}
];
// ========= dialog form =========
// 弹窗显示
export const dlgShow = ref(false);
export const dlgTitle = ref("");
// 表单值
const editFormDataGen = () => {
return {
groupName: "" groupName: ""
});
// 查询表单字段定义
const searchFormColumns: PlusColumn[] = [
{
label: "分组描述",
prop: "groupName"
}
];
// ========= table =========
// 表格对象
const { tableData, buttons: actionButtons } = useTable<any[]>();
const selectedGroupId = ref(0);
// 表格字段定义
const tableColumns: PlusColumn[] = [
{
label: "分组名称",
prop: "groupName"
}
];
// 表格按钮定义
actionButtons.value = [
{
// 修改
text: "修改",
code: "edit",
props: {
type: "primary"
},
onClick(params: ButtonsCallBackParams) {
params.e.stopPropagation();
isAdd.value = false;
editFormData.value = Object.assign({}, params.row);
dlgTitle.value = "修改";
dlgShow.value = true;
}
},
{
// 删除
text: "删除",
code: "delete",
props: {
type: "danger"
},
confirm: {
options: { draggable: false }
},
onConfirm(params: ButtonsCallBackParams) {
params.e.stopPropagation();
api.del(params.row).then(() => {
ElMessage({
message: "删除成功",
type: "success"
});
dlgShow.value = false;
search();
});
}
}
];
// ========= dialog form =========
// 弹窗显示
const dlgShow = ref(false);
const dlgTitle = ref("");
// 表单值
const editFormDataGen = () => {
return {
groupName: ""
};
};
const editFormData = ref<any>(editFormDataGen());
const editFormRules = {
groupName: [{ required: true, message: "请输入分组名称" }]
}; };
};
export const editFormData = ref<any>(editFormDataGen());
export const editFormRules = {
groupName: [{ required: true, message: "请输入分组名称" }]
};
// 表单内容 // 表单内容
export const editFormColumns: PlusColumn[] = [ const editFormColumns: PlusColumn[] = [
{ {
label: "分组名称", label: "分组名称",
prop: "groupName", prop: "groupName",
valueType: "input" valueType: "input"
} }
]; ];
// ========= event ========= // ========= event =========
// 点击行 // 点击行
export const handleRowClick = row => { const handleRowClick = row => {
const groupId = row.id; const groupId = row.id;
selectedGroupId.value = groupId; selectedGroupId.value = groupId;
searchTable(groupId); searchTable(groupId);
}; };
// 添加按钮事件 // 添加按钮事件
export const handleAdd = () => { const handleAdd = () => {
isAdd.value = true; isAdd.value = true;
editFormData.value = editFormDataGen(); editFormData.value = editFormDataGen();
dlgTitle.value = "新增"; dlgTitle.value = "新增";
dlgShow.value = true; dlgShow.value = true;
}; };
// 保存按钮事件,校验成功后触发 // 保存按钮事件,校验成功后触发
export const handleSave = () => { const handleSave = () => {
const postData = editFormData.value; const postData = editFormData.value;
const pms = isAdd.value ? api.add(postData) : api.update(postData); const pms = isAdd.value ? api.add(postData) : api.update(postData);
pms.then(() => { pms.then(() => {
ElMessage.success("保存成功"); ElMessage.success("保存成功");
dlgShow.value = false; dlgShow.value = false;
search();
});
};
// 点击查询按钮
const handleSearch = () => {
search();
};
// 查询
const search = async () => {
try {
const { data } = await doSearch();
tableData.value = data;
} catch (error) {}
};
// 请求接口
const doSearch = async () => {
// 查询参数
const data = searchFormData.value;
return api.listAll(data);
};
// 页面加载
search();
onMounted(() => {
search(); search();
}); });
};
// 点击查询按钮 return {
export const handleSearch = () => { actionButtons,
search(); dlgShow,
}; dlgTitle,
editFormColumns,
// 查询 editFormData,
const search = async () => { editFormRules,
try { handleAdd,
const { data } = await doSearch(); handleRowClick,
tableData.value = data; handleSave,
} catch (error) {} handleSearch,
}; searchFormColumns,
// 请求接口 searchFormData,
const doSearch = async () => { selectedGroupId,
// 查询参数 tableColumns,
const data = searchFormData.value; tableData
return api.listAll(data); };
}; }
// 页面加载
search();

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { import { usePermGroup } from "./permGroup";
const {
actionButtons, actionButtons,
dlgShow, dlgShow,
dlgTitle, dlgTitle,
@@ -15,7 +16,7 @@ import {
selectedGroupId, selectedGroupId,
tableColumns, tableColumns,
tableData tableData
} from "./permGroup"; } = usePermGroup();
import PermGroupApi from "./permGroupApi.vue"; import PermGroupApi from "./permGroupApi.vue";
defineOptions({ defineOptions({
name: "IsvPermPermGroup" name: "IsvPermPermGroup"

View File

@@ -39,6 +39,7 @@ defineOptions({
pageSizeList: [10, 20, 50, 100], pageSizeList: [10, 20, 50, 100],
align: 'right' align: 'right'
}" }"
showOverflowTooltip
@paginationChange="handlePaginationChange" @paginationChange="handlePaginationChange"
> >
<template #title> <template #title>

View File

@@ -1,99 +0,0 @@
<script setup lang="ts">
import { hasAuth, getAuths } from "@/router/utils";
defineOptions({
name: "PermissionButtonRouter"
});
</script>
<template>
<div>
<p class="mb-2">当前拥有的code列表{{ getAuths() }}</p>
<el-card shadow="never" class="mb-2">
<template #header>
<div class="card-header">组件方式判断权限</div>
</template>
<el-space wrap>
<Auth value="permission:btn:add">
<el-button plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
</Auth>
<Auth :value="['permission:btn:edit']">
<el-button plain type="primary">
拥有code['permission:btn:edit'] 权限可见
</el-button>
</Auth>
<Auth
:value="[
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
]"
>
<el-button plain type="danger">
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</Auth>
</el-space>
</el-card>
<el-card shadow="never" class="mb-2">
<template #header>
<div class="card-header">函数方式判断权限</div>
</template>
<el-space wrap>
<el-button v-if="hasAuth('permission:btn:add')" plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
<el-button v-if="hasAuth(['permission:btn:edit'])" plain type="primary">
拥有code['permission:btn:edit'] 权限可见
</el-button>
<el-button
v-if="
hasAuth([
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
])
"
plain
type="danger"
>
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</el-space>
</el-card>
<el-card shadow="never">
<template #header>
<div class="card-header">
指令方式判断权限(该方式不能动态修改权限)
</div>
</template>
<el-space wrap>
<el-button v-auth="'permission:btn:add'" plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
<el-button v-auth="['permission:btn:edit']" plain type="primary">
拥有code['permission:btn:edit'] 权限可见
</el-button>
<el-button
v-auth="[
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
]"
plain
type="danger"
>
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</el-space>
</el-card>
</div>
</template>

View File

@@ -1,109 +0,0 @@
<script setup lang="ts">
import { hasPerms } from "@/utils/auth";
import { useUserStoreHook } from "@/store/modules/user";
const { permissions } = useUserStoreHook();
defineOptions({
name: "PermissionButtonLogin"
});
</script>
<template>
<div>
<p class="mb-2">当前拥有的code列表{{ permissions }}</p>
<p v-show="permissions?.[0] === '*:*:*'" class="mb-2">
*:*:* 代表拥有全部按钮级别权限
</p>
<el-card shadow="never" class="mb-2">
<template #header>
<div class="card-header">组件方式判断权限</div>
</template>
<el-space wrap>
<Perms value="permission:btn:add">
<el-button plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
</Perms>
<Perms :value="['permission:btn:edit']">
<el-button plain type="primary">
拥有code['permission:btn:edit'] 权限可见
</el-button>
</Perms>
<Perms
:value="[
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
]"
>
<el-button plain type="danger">
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</Perms>
</el-space>
</el-card>
<el-card shadow="never" class="mb-2">
<template #header>
<div class="card-header">函数方式判断权限</div>
</template>
<el-space wrap>
<el-button v-if="hasPerms('permission:btn:add')" plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
<el-button
v-if="hasPerms(['permission:btn:edit'])"
plain
type="primary"
>
拥有code['permission:btn:edit'] 权限可见
</el-button>
<el-button
v-if="
hasPerms([
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
])
"
plain
type="danger"
>
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</el-space>
</el-card>
<el-card shadow="never">
<template #header>
<div class="card-header">
指令方式判断权限(该方式不能动态修改权限)
</div>
</template>
<el-space wrap>
<el-button v-perms="'permission:btn:add'" plain type="warning">
拥有code'permission:btn:add' 权限可见
</el-button>
<el-button v-perms="['permission:btn:edit']" plain type="primary">
拥有code['permission:btn:edit'] 权限可见
</el-button>
<el-button
v-perms="[
'permission:btn:add',
'permission:btn:edit',
'permission:btn:delete'
]"
plain
type="danger"
>
拥有code['permission:btn:add', 'permission:btn:edit',
'permission:btn:delete'] 权限可见
</el-button>
</el-space>
</el-card>
</div>
</template>

View File

@@ -1,66 +0,0 @@
<script setup lang="ts">
import { initRouter } from "@/router/utils";
import { storageLocal } from "@pureadmin/utils";
import { type CSSProperties, ref, computed } from "vue";
import { useUserStoreHook } from "@/store/modules/user";
import { usePermissionStoreHook } from "@/store/modules/permission";
defineOptions({
name: "PermissionPage"
});
const elStyle = computed((): CSSProperties => {
return {
width: "85vw",
justifyContent: "start"
};
});
const username = ref(useUserStoreHook()?.username);
const options = [
{
value: "admin",
label: "管理员角色"
},
{
value: "common",
label: "普通角色"
}
];
function onChange() {
useUserStoreHook()
.loginByUsername({ username: username.value, password: "admin123" })
.then(res => {
if (res.success) {
storageLocal().removeItem("async-routes");
usePermissionStoreHook().clearAllCachePage();
initRouter();
}
});
}
</script>
<template>
<div>
<p class="mb-2">
模拟后台根据不同角色返回对应路由观察左侧菜单变化管理员角色可查看系统管理菜单普通角色不可查看系统管理菜单
</p>
<el-card shadow="never" :style="elStyle">
<template #header>
<div class="card-header">
<span>当前角色{{ username }}</span>
</div>
</template>
<el-select v-model="username" class="!w-[160px]" @change="onChange">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-card>
</div>
</template>

View File

@@ -66,18 +66,12 @@ export const tableColumns: PlusColumn[] = [
{ {
label: "所属应用", label: "所属应用",
prop: "application", prop: "application",
minWidth: 150, minWidth: 150
tableColumnProps: {
showOverflowTooltip: true
}
}, },
{ {
label: "接口名称", label: "接口名称",
prop: "apiName", prop: "apiName",
minWidth: 200, minWidth: 200
tableColumnProps: {
showOverflowTooltip: true
}
}, },
{ {
label: "版本号", label: "版本号",
@@ -87,17 +81,11 @@ export const tableColumns: PlusColumn[] = [
{ {
label: "接口描述", label: "接口描述",
prop: "description", prop: "description",
minWidth: 100, minWidth: 100
tableColumnProps: {
showOverflowTooltip: true
}
}, },
{ {
label: "备注", label: "备注",
prop: "remark", prop: "remark"
tableColumnProps: {
showOverflowTooltip: true
}
}, },
{ {
label: "需要授权", label: "需要授权",
@@ -187,14 +175,14 @@ export const tableColumns: PlusColumn[] = [
] ]
}, },
{ {
width: 120,
label: "添加时间", label: "添加时间",
prop: "addTime", prop: "addTime"
width: 160
}, },
{ {
width: 120,
label: "修改时间", label: "修改时间",
prop: "updateTime", prop: "updateTime"
width: 160
} }
]; ];
// 表格按钮权限 // 表格按钮权限

View File

@@ -44,6 +44,7 @@ defineOptions({
pageSizeList: [10, 20, 50, 100], pageSizeList: [10, 20, 50, 100],
align: 'right' align: 'right'
}" }"
showOverflowTooltip
adaptive adaptive
@paginationChange="handlePaginationChange" @paginationChange="handlePaginationChange"
> >

View File

@@ -1,4 +1,3 @@
import dayjs from "dayjs";
import editForm from "../form.vue"; import editForm from "../form.vue";
import { handleTree } from "@/utils/tree"; import { handleTree } from "@/utils/tree";
import { message } from "@/utils/message"; import { message } from "@/utils/message";
@@ -44,10 +43,9 @@ export function useDept() {
}, },
{ {
label: "创建时间", label: "创建时间",
minWidth: 200, width: 120,
prop: "createTime", prop: "addTime",
formatter: ({ createTime }) => showOverflowTooltip: true
dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
}, },
{ {
label: "备注", label: "备注",

View File

@@ -1,4 +1,3 @@
import dayjs from "dayjs";
import editForm from "../form.vue"; import editForm from "../form.vue";
import { handleTree } from "@/utils/tree"; import { handleTree } from "@/utils/tree";
import { message } from "@/utils/message"; import { message } from "@/utils/message";
@@ -90,10 +89,9 @@ export function useRole(treeRef: Ref) {
}, },
{ {
label: "创建时间", label: "创建时间",
prop: "createTime", prop: "addTime",
minWidth: 160, width: 120,
formatter: ({ createTime }) => showOverflowTooltip: true
dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
}, },
{ {
label: "操作", label: "操作",

View File

@@ -1,5 +1,4 @@
import "./reset.css"; import "./reset.css";
import dayjs from "dayjs";
import roleForm from "../form/role.vue"; import roleForm from "../form/role.vue";
import editForm from "../form/index.vue"; import editForm from "../form/index.vue";
import { zxcvbn } from "@zxcvbn-ts/core"; import { zxcvbn } from "@zxcvbn-ts/core";
@@ -157,10 +156,9 @@ export function useUser(tableRef: Ref, treeRef: Ref) {
}, },
{ {
label: "创建时间", label: "创建时间",
minWidth: 90, width: 120,
prop: "createTime", prop: "addTime",
formatter: ({ createTime }) => showOverflowTooltip: true
dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
}, },
{ {
label: "操作", label: "操作",

View File

@@ -15,7 +15,7 @@
"isReplace": true, "isReplace": true,
// 第三方jar中的class配置 // 第三方jar中的class配置
"jarClass": { "jarClass": {
"com.baomidou.mybatisplus.extension.plugins.pagination.Page": { "com.xx.Page": {
"records": { "value": "查询数据列表", "example": "" }, "records": { "value": "查询数据列表", "example": "" },
"total": { "value": "总数", "example": "100" }, "total": { "value": "总数", "example": "100" },
"size": { "value": "页数", "example": "10" }, "size": { "value": "页数", "example": "10" },

View File

@@ -5,6 +5,8 @@ import com.gitee.sop.storyweb.open.resp.StoryResponse;
import com.gitee.sop.support.annotation.Open; import com.gitee.sop.support.annotation.Open;
import com.gitee.sop.support.context.OpenContext; import com.gitee.sop.support.context.OpenContext;
import com.gitee.sop.support.dto.FileData; import com.gitee.sop.support.dto.FileData;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
@@ -15,6 +17,7 @@ import java.util.List;
* *
* @author 六如 * @author 六如
*/ */
@Api("故事服务")
public interface OpenStory { public interface OpenStory {
@Open("story.save") @Open("story.save")
@@ -27,6 +30,7 @@ public interface OpenStory {
@Open("story.updateError") @Open("story.updateError")
Integer updateError(Integer id); Integer updateError(Integer id);
@ApiOperation(value = "根据id获取故事")
@Open("story.get") @Open("story.get")
StoryResponse getById(@NotNull(message = "id必填") Integer id); StoryResponse getById(@NotNull(message = "id必填") Integer id);
@@ -46,6 +50,14 @@ public interface OpenStory {
return storyResponse; return storyResponse;
} }
// 默认方法,注解放在这里也有效
@Open("alipay.story.find")
default StoryResponse findByName(String name) {
StoryResponse storyResponse = new StoryResponse();
storyResponse.setName(name);
return storyResponse;
}
// 演示单文件上传 // 演示单文件上传
@Open("story.upload") @Open("story.upload")
StoryResponse upload(StorySaveRequest storySaveRequest, FileData file); StoryResponse upload(StorySaveRequest storySaveRequest, FileData file);

View File

@@ -0,0 +1,27 @@
{
// 开启推送
"enable": true,
// 扫描package多个用;隔开
"basePackage": "com.gitee.sop.storyweb.open",
// 推送URLIP端口对应Torna服务器
"url": "http://localhost:7700/api",
// 模块token
"token": "d4f07434c9cf4a989e4c6d301684b357",
// 推送人
"author": "Jim",
// 打开调试:true/false
"debug": true,
// 是否替换文档true替换false不替换追加。默认true
"isReplace": true,
// 第三方jar中的class配置
"jarClass": {
"com.xx.Page": {
"records": { "value": "查询数据列表", "example": "" },
"total": { "value": "总数", "example": "100" },
"size": { "value": "页数", "example": "10" },
"current": { "value": "当前页", "example": "1" },
"countId": { "hidden": true },
"orders": { "hidden": true }
}
}
}

View File

@@ -0,0 +1,14 @@
package com.gitee.sop.storyweb;
import cn.torna.swaggerplugin.SwaggerPlugin;
/**
* 推送swagger文档
* @author thc
*/
public class DocPushTest {
public static void main(String[] args) {
SwaggerPlugin.pushDoc();
}
}

View File

@@ -1,13 +1,12 @@
package com.gitee.sop.gateway.dao.entity; package com.gitee.sop.gateway.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table; import com.gitee.fastmybatis.annotation.Table;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 表名api_info * 表名api_info

View File

@@ -1,13 +1,12 @@
package com.gitee.sop.gateway.dao.entity; package com.gitee.sop.gateway.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table; import com.gitee.fastmybatis.annotation.Table;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 表名isv_keys * 表名isv_keys

View File

@@ -1,13 +1,12 @@
package com.gitee.sop.gateway.dao.entity; package com.gitee.sop.gateway.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table; import com.gitee.fastmybatis.annotation.Table;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 表名perm_group_permission * 表名perm_group_permission

View File

@@ -1,13 +1,12 @@
package com.gitee.sop.gateway.dao.entity; package com.gitee.sop.gateway.dao.entity;
import java.time.LocalDateTime;
import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.Pk;
import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.PkStrategy;
import com.gitee.fastmybatis.annotation.Table; import com.gitee.fastmybatis.annotation.Table;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 表名perm_isv_group * 表名perm_isv_group

View File

@@ -1,7 +1,7 @@
package com.gitee.sop.gateway.exception; package com.gitee.sop.gateway.exception;
import com.gitee.sop.gateway.response.ApiResponse;
import com.gitee.sop.gateway.message.ErrorEnum; import com.gitee.sop.gateway.message.ErrorEnum;
import com.gitee.sop.gateway.response.ApiResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;

View File

@@ -1,9 +1,9 @@
package com.gitee.sop.gateway.interceptor.internal; package com.gitee.sop.gateway.interceptor.internal;
import com.gitee.sop.gateway.common.ApiInfoDTO; import com.gitee.sop.gateway.common.ApiInfoDTO;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.interceptor.RouteInterceptor; import com.gitee.sop.gateway.interceptor.RouteInterceptor;
import com.gitee.sop.gateway.interceptor.RouteInterceptorOrders; import com.gitee.sop.gateway.interceptor.RouteInterceptorOrders;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.support.dto.CommonFileData; import com.gitee.sop.support.dto.CommonFileData;
import com.gitee.sop.support.dto.FileData; import com.gitee.sop.support.dto.FileData;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -7,8 +7,8 @@ import com.gitee.sop.gateway.service.manager.SecretManager;
import com.gitee.sop.support.service.RefreshService; import com.gitee.sop.support.service.RefreshService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collection; import java.util.Collection;
/** /**

View File

@@ -11,8 +11,6 @@ import com.gitee.sop.gateway.service.ResultWrapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Objects;
/** /**
* @author 六如 * @author 六如
*/ */

View File

@@ -35,7 +35,6 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,7 +1,6 @@
package com.gitee.sop.gateway.service.impl; package com.gitee.sop.gateway.service.impl;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.JSONWriter;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.gitee.sop.gateway.config.ApiConfig; import com.gitee.sop.gateway.config.ApiConfig;
@@ -11,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.Collections;
import java.util.Map; import java.util.Map;
/** /**
@@ -19,7 +17,7 @@ import java.util.Map;
*/ */
public class SerdeImpl implements Serde { public class SerdeImpl implements Serde {
static JSONWriter.Context WRITE_CONTEXT; static JSONWriter.Context writeContext;
@Autowired @Autowired
protected ApiConfig apiConfig; protected ApiConfig apiConfig;
@@ -29,7 +27,7 @@ public class SerdeImpl implements Serde {
@Override @Override
public String toJson(Object object) { public String toJson(Object object) {
return JSON.toJSONString(object); return JSON.toJSONString(object, writeContext);
} }
@Override @Override
@@ -48,8 +46,8 @@ public class SerdeImpl implements Serde {
@PostConstruct @PostConstruct
public void init() { public void init() {
WRITE_CONTEXT = new JSONWriter.Context(); writeContext = new JSONWriter.Context();
WRITE_CONTEXT.setDateFormat(dateFormat); writeContext.setDateFormat(dateFormat);
this.doInit(); this.doInit();
} }

View File

@@ -10,9 +10,9 @@ import com.gitee.sop.gateway.dao.mapper.PermGroupPermissionMapper;
import com.gitee.sop.gateway.dao.mapper.PermIsvGroupMapper; import com.gitee.sop.gateway.dao.mapper.PermIsvGroupMapper;
import com.gitee.sop.gateway.service.manager.IsvApiPermissionManager; import com.gitee.sop.gateway.service.manager.IsvApiPermissionManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -6,9 +6,9 @@ import com.gitee.sop.gateway.service.manager.IsvManager;
import com.gitee.sop.gateway.service.manager.dto.IsvDTO; import com.gitee.sop.gateway.service.manager.dto.IsvDTO;
import com.gitee.sop.gateway.util.CopyUtil; import com.gitee.sop.gateway.util.CopyUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -4,9 +4,9 @@ import com.gitee.sop.gateway.dao.entity.IsvKeys;
import com.gitee.sop.gateway.dao.mapper.IsvKeysMapper; import com.gitee.sop.gateway.dao.mapper.IsvKeysMapper;
import com.gitee.sop.gateway.service.manager.SecretManager; import com.gitee.sop.gateway.service.manager.SecretManager;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -6,12 +6,12 @@ import com.gitee.sop.gateway.dao.entity.ApiInfo;
import com.gitee.sop.gateway.util.CopyUtil; import com.gitee.sop.gateway.util.CopyUtil;
import com.gitee.sop.gateway.util.JsonUtil; import com.gitee.sop.gateway.util.JsonUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List; import java.util.List;
/** /**

View File

@@ -7,11 +7,11 @@ import com.gitee.sop.gateway.dao.entity.IsvInfo;
import com.gitee.sop.gateway.dao.mapper.IsvInfoMapper; import com.gitee.sop.gateway.dao.mapper.IsvInfoMapper;
import com.gitee.sop.gateway.util.JsonUtil; import com.gitee.sop.gateway.util.JsonUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -7,10 +7,10 @@ import com.gitee.sop.gateway.service.manager.dto.IsvDTO;
import com.gitee.sop.gateway.util.CopyUtil; import com.gitee.sop.gateway.util.CopyUtil;
import com.gitee.sop.gateway.util.JsonUtil; import com.gitee.sop.gateway.util.JsonUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -4,10 +4,10 @@ import com.gitee.sop.gateway.common.CacheKey;
import com.gitee.sop.gateway.common.SopConstants; import com.gitee.sop.gateway.common.SopConstants;
import com.gitee.sop.gateway.dao.entity.IsvKeys; import com.gitee.sop.gateway.dao.entity.IsvKeys;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@@ -1,9 +1,9 @@
package com.gitee.sop.gateway.service.validate; package com.gitee.sop.gateway.service.validate;
import com.gitee.sop.gateway.request.ApiRequest;
import com.gitee.sop.gateway.request.ApiRequestContext;
import com.gitee.sop.gateway.exception.ApiException; import com.gitee.sop.gateway.exception.ApiException;
import com.gitee.sop.gateway.message.ErrorEnum; import com.gitee.sop.gateway.message.ErrorEnum;
import com.gitee.sop.gateway.request.ApiRequest;
import com.gitee.sop.gateway.request.ApiRequestContext;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.common.utils.StringUtils;

View File

@@ -17,6 +17,7 @@ import com.gitee.sop.gateway.service.manager.SecretManager;
import com.gitee.sop.gateway.service.manager.dto.IsvDTO; import com.gitee.sop.gateway.service.manager.dto.IsvDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
@@ -24,7 +25,6 @@ import org.springframework.util.unit.DataSize;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;

Some files were not shown because too many files have changed in this diff Show More