Commit 936f6421 by henry

修改服务名

1 parent 633883d7
Showing with 8877 additions and 8877 deletions
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.common.web.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("查询参数对象")
public abstract class QueryParam implements Serializable{
private static final long serialVersionUID = -3263921252635611410L;
@ApiModelProperty(value = "页码,默认为1")
private Integer page =1;
@ApiModelProperty(value = "页大小,默认为10")
private Integer limit = 10;
@ApiModelProperty(value = "搜索字符串")
private String keyword;
public void setCurrent(Integer current) {
if (current == null || current <= 0){
this.page = 1;
}else{
this.page = current;
}
}
public void setSize(Integer size) {
if (size == null || size <= 0){
this.limit = 10;
}else{
this.limit = size;
}
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.common.web.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@ApiModel("分页")
@SuppressWarnings("unchecked")
public class Paging<T> implements Serializable {
private static final long serialVersionUID = -1683800405530086022L;
@ApiModelProperty("总行数")
@JSONField(name = "total")
@JsonProperty("total")
private long total = 0;
@ApiModelProperty("数据列表")
@JSONField(name = "records")
@JsonProperty("records")
private List<T> records = Collections.emptyList();
public Paging() {
}
public Paging(IPage page) {
this.total = page.getTotal();
this.records = page.getRecords();
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<T> getRecords() {
return records;
}
public void setRecords(List<T> records) {
this.records = records;
}
@Override
public String toString() {
return "Paging{" +
"total=" + total +
", records=" + records +
'}';
}
}
package org.arch.mybatis.config;
import com.alibaba.fastjson2.JSONArray;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonArrayHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONArray getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONArray getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONArray getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONArray parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONArray.parse(json);
}
}
package org.arch.mybatis.config;
import com.alibaba.fastjson2.JSONObject;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonTypeHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONObject getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONObject getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONObject getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONObject parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONObject.parseObject(json);
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
*/
@Slf4j
@Component
public class MyMetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.config;
/**
* @author :LionCity
* @date :Created in 2020-04-10 15:11
* @description:MybatisConfig
* @modified By:
* @version:
*/
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Slf4j
@Configuration
@MapperScan(basePackages = {"org.arch.*.*.mapper","org.arch.**.mapper"})
public class MybatisConfig {
public MybatisConfig() {
log.info("加载MybatisPlus配置...");
}
/**
* 配置mybatis的分页插件pageHelper
* @return
*/
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
//配置mysql数据库的方言
properties.setProperty("dialect","mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.mybatis.config.MybatisConfig
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>nacos</artifactId>
<name>注册中心</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--openfeign-->
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>-->
<!--sentinel依赖-->
<!--<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>-->
</dependencies>
</project>
\ No newline at end of file
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.nacos.NacosRegisterConfig
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>office</artifactId>
<name>在线文档</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>storage</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.arch.office.config;/*
package com.eadc.office.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") // SpringBoot2.4.0 [allowedOriginPatterns]代替[allowedOrigins]
.allowedMethods("*")
.maxAge(3600)
.allowCredentials(true);
}
}
*/
package org.arch.office.config;
import org.arch.office.model.documentServer.EditorConfig;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Data
@ConfigurationProperties(prefix = "office")
@Component
public class OnlyOfficeProperties {
// 本地服务ip地址
private String ip;
/**
* 编辑器默认语言【只允许中文!】
*/
private String lang;
/**
* logo信息
*/
private EditorConfig.Customization.Logo logo;
/**
* 文档服务器回调接口【交互接口非常非常重要】
*
*/
private String callbackUrl;
private String downloadUrl;
private String goBack;
/**
* 文档服务器js文件
*/
private String api;
// 可编辑、查看、转换的文件类型
private List<String> viewedDocs;
private List<String> editedDocs;
private List<String> convertDocs;
public Set<String> getFillExts(){
HashSet<String> result = new HashSet<>();
result.addAll(viewedDocs);
result.addAll(editedDocs);
result.addAll(convertDocs);
return result;
}
public String getCallbackUrl(){
return ip + callbackUrl;
}
public String getDownloadUrl(){
return ip + downloadUrl;
}
}
package org.arch.office.model.documentServer;
import lombok.Data;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 针对DocEditor需要的配置项
*/
@Data
public class Config {
// 文档配置项目
private Document document;
// 编辑类型
private DocumentType documentType;
// 文档编辑器定制化配置项
private EditorConfig editorConfig;
//token
private String token;
//显示类型
private String type;
public static class ConfigBuildr{
// 文件名称
private String filename;
// 文件后缀
private String fileSuffix;
}
public static Config build(){
Config config = new Config();
EditorConfig editorConfig = new EditorConfig();
Document document = new Document();
EditorConfig.Customization customization = new EditorConfig.Customization();
EditorConfig.Customization.Goback goBack = new EditorConfig.Customization.Goback();
EditorConfig.Customization.Logo logo = new EditorConfig.Customization.Logo();
editorConfig.setTemplates(new ArrayList<>(1));
editorConfig.setCoEditing(new HashMap<>());
customization.setLogo(logo);
customization.setGoback(goBack);
editorConfig.setCustomization(customization);
config.setEditorConfig(editorConfig);
document.setInfo(new Document.Info());
config.setDocument(document);
return config;
}
}
package org.arch.office.model.documentServer;
import lombok.Data;
import java.util.List;
@Data
public class Document {
// 文档的附加参数(文档所有者、存储文档的文件夹、上传日期,共享设置)
private Info info;
// 文档是否被编辑和下载的权限
private Permission permissions;
// 文件类型 docx ppt
private String fileType;
// 文档服务器唯一标识
private String key;
// 文件名称
private String title;
// 文档服务器下载文件的地址
private String url;
@Data
public static class Info {
// 文件创建人的名称
private String owner;
// 收藏图标的高亮显示状态
private Boolean favorite;
// 文件上传日期
private String uploaded;
}
@Data
public static class Permission {
// 文档注释功能
private Boolean comment = true;
// 文档注释权限控制功能,根据用户组
private CommentGroup commentGroup;
// 文档copy功能
private Boolean copy = true;
// 文档下载功能
private Boolean download = true;
// 文档编辑功能(在model为view时这个设置不起作用)
private Boolean edit = true;
// 文档打印功能
private Boolean print = true;
// 文档填写表单功能
private Boolean fillForms = true;
// 文档过滤器功能
private Boolean modifyFilter = true;
// 文档更改内容控件设置功能
private Boolean modifyContentControl = true;
// 文档审阅模式功能
private Boolean review = true;
// 文档聊天功能
private Boolean chat = true;
// 定义用户可以接受/拒绝其更改的组
private List<String> reviewGroups;
private List<String> userInfoGroups;
@Data
public static class CommentGroup{
private List<String> view;
private List<String> edit;
private List<String> remove;
}
}
}
package org.arch.office.model.documentServer;
public enum DocumentType {
word,
cell,
slide
}
package org.arch.office.model.dto;
import org.arch.office.model.documentServer.EditorConfig;
import lombok.Data;
import java.util.List;
/**
* 文档服务器callback数据
*/
@Data
public class Callback {
// 文件类型 docx
private String filetype;
// 最新文档下载地址
private String url;
// 唯一key值
private String key;
// ...
private String changesurl;
// 历史记录
private History history;
// token
private String token;
// 定义执行强制保存请求时启动器的类型
private Integer forcesavetype;
// 当前的操作状态
private Integer status;
//全部用户存储用户id
private List<String> users;
// 只有当前操作人的信息
private List<Action> actions;
//
private String userdata;
//
private String lastsave;
private Boolean notmodified;
@Data
public static class History {
private String serverVersion;
private String key;
private Integer version;
private String created;
private EditorConfig.User user;
// private List<ChangesHistory> changes;
}
@Data
public static class Action {
// 用户id
private String userid;
// 操作类型
private org.arch.office.model.documentServer.Action type;
}
}
package org.arch.office.model.entity;
import lombok.Data;
/**
* 附件(aid, aname, apath, rid)
*
* ClassName: Attach
* Function: TODO
* Date: 2020/2/12 0012 20:25
* author XieWenYing
* version V1.0
*/
@Data
public class Attach {
private String aid;//附件Id
private String aname;//附件名
private String apath;//附件文件路径
//private String rid;//对应需求id
private String fileId;
}
package org.arch.office.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class OnlyOfficeFile implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 文件id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 文件唯一标识
*/
private String fileKey;
/**
* 文件名称
*/
private String title;
/**
* 文件名称
*/
private String name;
/**
* 文件后缀
*/
private String suffix;
/**
* 文件content-type
*/
private String contentType;
/**
* 文件大小
*/
private Long length;
/**
* 文件真实地址
*/
private String url;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
private String creater;
/**
* 跟新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 跟新人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updater;
/**
* 状态
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer status;
/**
* 版本
*/
@Version
private Integer version;
/**
* md5值
*/
private String md5;
/**
* 过期时间
*/
private Long expiry;
}
package org.arch.office.model.entity;
import lombok.Data;
import java.util.List;
/**
* 每条需求(id, title, content, outline)
* ClassName: ReqBase
* Date: 2020/2/12 0012 19:36
* author XieWenYing
* version V1.0
*/
@Data
public class Reqbase {
private String rid;
private String title;
private String content;
private Integer outline;
private String pid;
private List<String> headingNotes;
private List<Attach> attachList;
}
package org.arch.office.model.vo;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.arch.office.service.Flag;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class OnlyOfficeFileVo {
@NotNull(message = "id不能为空",groups = Runnable.class)
private Long id;
@NotEmpty(message = "fileKey不能为空",groups = Flag.class)
private String fileKey;
@NotEmpty(message = "title不能为空",groups = Flag.class)
private String title;
@NotEmpty(message = "url不能为空",groups = Flag.class)
private String url;
private Long length;
private String contentType;
private String md5;
public String getName() {
if (StringUtils.isNotBlank(title)) {
return title.substring(0, title.lastIndexOf("."));
}
return StringUtils.EMPTY;
}
public String getSuffix() {
if (StringUtils.isNotBlank(title)) {
// 获取文件后缀
String suffix = title.substring(title.lastIndexOf(".") + 1);
return suffix;
}
return StringUtils.EMPTY;
}
}
package org.arch.office.service;
import org.arch.office.service.impl.CallbackHandler;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 处理文档服务器返回的数据
*/
public interface Callback {
int handle(org.arch.office.model.dto.Callback body, Long fileId);
int getStatus();
@Autowired
default void selfRegistration(CallbackHandler callbackHandler) {
callbackHandler.register(getStatus(), this);
}
}
package org.arch.office.service;
import org.arch.office.model.documentServer.Config;
import java.io.UnsupportedEncodingException;
public interface FileConfigurer<W> extends Configurer<Config, W>{
void configure(Config model, W wrapper) throws UnsupportedEncodingException;
Config getFileModel(W wrapper) throws UnsupportedEncodingException;
}
package org.arch.office.service;
public interface Flag {
}
package org.arch.office.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.arch.office.model.documentServer.Config;
import org.arch.office.model.entity.OnlyOfficeFile;
import org.arch.office.model.vo.OnlyOfficeFileVo;
import java.util.List;
public interface OnlyOfficeFileService {
Integer removeByIds(List<Long> ids);
OnlyOfficeFile updateById(OnlyOfficeFileVo onlyOfficeFileVo);
IPage<OnlyOfficeFile> queryByPage(Long current, Integer rows, OnlyOfficeFileVo onlyOfficeFileVo);
List<OnlyOfficeFile> queryByIds(List<Long> ids);
OnlyOfficeFile queryById(Long id);
OnlyOfficeFile saveOnlyOfficeFile(OnlyOfficeFileVo onlyOfficeFileVo);
/**
* 根据文件的id构建文档编辑器需要的config对象
*/
Config buildConfigByFileId(Long fileId);
}
package org.arch.office.service.impl;
import org.arch.office.service.Callback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class CallbackHandler {
private final Logger logger = LoggerFactory.getLogger(CallbackHandler.class);
private final Map<Integer, Callback> callbackHandlers = new HashMap<>();
public void register(int code, Callback callback) {
callbackHandlers.put(code, callback);
}
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
Callback callback = callbackHandlers.get(body.getStatus());
if (callback == null) {
logger.warn("Callback status " + body.getStatus() + " is not supported yet");
return 0;
}
return callback.handle(body, fileId);
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.DefaultCustomizationWrapper;
import org.arch.office.model.documentServer.EditorConfig;
import org.arch.office.service.CustomizationConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CustomizationConfigurerImpl implements CustomizationConfigurer<DefaultCustomizationWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Override
public void configure(EditorConfig.Customization customization, DefaultCustomizationWrapper wrapper) {
customization.setSubmitForm(false);
customization.setLogo(onlyOfficeProperties.getLogo());
EditorConfig.Customization.Goback goback = new EditorConfig.Customization.Goback();
goback.setUrl(onlyOfficeProperties.getGoBack());
customization.setGoback(goback);
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.DefaultDocumentWrapper;
import org.arch.office.model.documentServer.Document;
import org.arch.office.service.DocumentConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DocumentConfigurerImpl implements DocumentConfigurer<DefaultDocumentWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Override
public void configure(Document document, DefaultDocumentWrapper wrapper) {
String fileName = wrapper.getFileName();
Document.Permission permission = wrapper.getPermission();
// 设置文件名称
document.setTitle(fileName);
// 设置访问地址
document.setUrl(onlyOfficeProperties.getDownloadUrl() + wrapper.getOnlyOfficeFile().getId());
document.setFileType(wrapper.getOnlyOfficeFile().getSuffix());
Document.Info info = document.getInfo();
info.setFavorite(wrapper.getFavorite());
info.setOwner(wrapper.getOnlyOfficeFile().getCreateMan().toString());
info.setUploaded(wrapper.getOnlyOfficeFile().getCreateTime().toString());
document.setKey(wrapper.getOnlyOfficeFile().getFileKey());
document.setPermissions(permission);
}
}
package org.arch.office.service.impl;
import org.arch.office.model.documentServer.Status;
import org.arch.office.service.Callback;
import org.springframework.stereotype.Service;
@Service
public class EditCallback implements Callback {
@Override
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
return 0;
}
@Override
public int getStatus() {
return Status.EDITING.getCode();
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.Action;
import org.arch.office.model.documentServer.DefaultCustomizationWrapper;
import org.arch.office.model.documentServer.DefaultFileWrapper;
import org.arch.office.model.documentServer.EditorConfig;
import org.arch.office.service.EditorConfigConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@Service
public class EditorConfigConfigurerImpl implements EditorConfigConfigurer<DefaultFileWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Autowired
private CustomizationConfigurerImpl customizationConfigurer;
@Override
public void configure(EditorConfig editorConfig, DefaultFileWrapper wrapper) {
// 不显示新建
editorConfig.setTemplates(null);
editorConfig.setCreateUrl(null);
// 设置回调接口
editorConfig.setCallbackUrl(onlyOfficeProperties.getCallbackUrl() + wrapper.getOnlyOfficeFile().getId());
editorConfig.setLang("zh"); // 语言,写死不允许修改
Boolean canEdit = wrapper.getCanEdit();
Action action = wrapper.getAction();
editorConfig.setCoEditing(action.equals(Action.view) ? new HashMap<String, Object>() {{
put("mode", "strict");
put("change", false);
}} : new HashMap<String, Object>() {{
put("mode", "fast");
put("change", true);
}});
// define the customization configurer
customizationConfigurer.configure(editorConfig.getCustomization(),
DefaultCustomizationWrapper.builder()
.action(action)
.build());
// 设置Model
editorConfig.setMode(canEdit && !action.equals(Action.view) ? EditorConfig.Mode.edit : EditorConfig.Mode.view);
editorConfig.setUser(wrapper.getUser());
// 设置embedded
editorConfig.setEmbedded(null);
}
}
package org.arch.office.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.mapper.OnlyOfficeFileMapper;
import org.arch.office.model.documentServer.Config;
import org.arch.office.model.entity.OnlyOfficeFile;
import org.arch.office.model.vo.OnlyOfficeFileVo;
import org.arch.office.service.OnlyOfficeFileService;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.List;
@Service
public class OnlyOfficeFileServiceImpl implements OnlyOfficeFileService {
private final OnlyOfficeFileMapper onlyOfficeFileMapper;
private final OnlyOfficeProperties onlyOfficeProperties;
public OnlyOfficeFileServiceImpl (OnlyOfficeFileMapper onlyOfficeFileMapper,OnlyOfficeProperties onlyOfficeProperties){
this.onlyOfficeFileMapper = onlyOfficeFileMapper;
this.onlyOfficeProperties = onlyOfficeProperties;
}
@Override
public Integer removeByIds(List<Long> ids) {
return onlyOfficeFileMapper.deleteById(ids.get(0));
}
@Override
public OnlyOfficeFile updateById(OnlyOfficeFileVo onlyOfficeFileVo) {
Assert.isTrue(onlyOfficeFileVo.getId() != null,"file id is null!");
OnlyOfficeFile onlyOfficeFile = new OnlyOfficeFile();
BeanUtils.copyProperties(onlyOfficeFileVo,onlyOfficeFile);
String title = onlyOfficeFileVo.getTitle();
if(StringUtils.isNotBlank(title)) {
onlyOfficeFile.setName(onlyOfficeFileVo.getName());
onlyOfficeFile.setSuffix(onlyOfficeFileVo.getSuffix());
}
return onlyOfficeFileMapper.updateById(onlyOfficeFile) > 0 ? onlyOfficeFile : null;
}
@Override
public IPage<OnlyOfficeFile> queryByPage(Long current, Integer rows, OnlyOfficeFileVo onlyOfficeFileVo) {
LambdaQueryWrapper<OnlyOfficeFile> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ObjectUtils.isNotEmpty(onlyOfficeFileVo.getId()),OnlyOfficeFile::getId,onlyOfficeFileVo.getId());
wrapper.eq(StringUtils.isNotBlank(onlyOfficeFileVo.getTitle()),OnlyOfficeFile::getTitle,onlyOfficeFileVo.getTitle());
wrapper.eq(StringUtils.isNotBlank(onlyOfficeFileVo.getFileKey()),OnlyOfficeFile::getFileKey,onlyOfficeFileVo.getFileKey());
return onlyOfficeFileMapper.selectPage(new Page<>(current, rows), wrapper);
}
@Override
public List<OnlyOfficeFile> queryByIds(List<Long> ids) {
LambdaQueryWrapper<OnlyOfficeFile> wrapper = new LambdaQueryWrapper<>();
return new ArrayList<>();
}
@Override
public OnlyOfficeFile queryById(Long id) {
return onlyOfficeFileMapper.selectById(id);
}
@Override
public OnlyOfficeFile saveOnlyOfficeFile(OnlyOfficeFileVo onlyOfficeFileVo) {
OnlyOfficeFile onlyOfficeFile = new OnlyOfficeFile();
BeanUtils.copyProperties(onlyOfficeFileVo,onlyOfficeFile);
onlyOfficeFile.setId(null);
if(StringUtils.isNotBlank(onlyOfficeFileVo.getTitle())) {
onlyOfficeFile.setName(onlyOfficeFileVo.getName());
onlyOfficeFile.setSuffix(onlyOfficeFileVo.getSuffix());
}
return onlyOfficeFileMapper.insert(onlyOfficeFile) > 0 ? onlyOfficeFile : null;
}
@Override
public Config buildConfigByFileId(Long fileId) {
Config config = new Config();
return config;
}
}
package org.arch.office.service.impl;
import cn.hutool.core.lang.Assert;
import org.arch.base.utils.FileUtils;
import org.arch.common.modules.base.entity.File;
import org.arch.office.model.documentServer.Status;
import org.arch.office.service.Callback;
import org.arch.office.utils.HttpUtil;
import org.arch.office.utils.MD5Util;
import org.arch.office.utils.MockMultipartFile;
import lombok.RequiredArgsConstructor;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@Service
@RequiredArgsConstructor
public class SaveCallback implements Callback {
private final MD5Util md5Util;
private final FileMapper sysFileMapper;
private final FileStorageService fileStorageService;
@Override
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
File file = sysFileMapper.selectById(fileId);
Assert.notNull(file, "上传文件不能为空");
byte[] bytes = HttpUtil.downloadFile(body.getUrl(), null);
MultipartFile multipartFile = new MockMultipartFile(file.getTitle(), file.getTitle(), file.getContentType(), bytes);
FileInfo upload = fileStorageService.of(multipartFile)
.setPath(FileUtils.filePath()).upload();
Assert.notNull(file, "上传失败");
//DateTime dateTime = DateUtil.offsetDay(new Date(), 7);
//String url = fileStorageService.generatePresignedUrl(upload, dateTime);
String url = upload.getUrl();
File temp = new File();
temp.setId(file.getId());
temp.setUrl(url);
temp.setStoreFileName(upload.getObjectId());
String md5 = md5Util.encrypt(bytes);
temp.setMd5(md5);
temp.setFileKey(md5Util.key(md5));
temp.setTitle(file.getTitle());
sysFileMapper.updateById(temp);
// 历史记录信息
return 0;
}
@Override
public int getStatus() {
return Status.SAVE.getCode();
}
}
package org.arch.office.utils;
import org.arch.office.model.documentServer.DocumentType;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class FileUtility {
private List<String> extsDocument = Arrays.asList(
"doc", "docx", "docm",
"dot", "dotx", "dotm",
"odt", "fodt", "ott", "rtf", "txt",
"html", "htm", "mht", "xml",
"pdf", "djvu", "fb2", "epub", "xps", "oform");
private List<String> extsSpreadsheet = Arrays.asList(
"xls", "xlsx", "xlsm", "xlsb",
"xlt", "xltx", "xltm",
"ods", "fods", "ots", "csv");
private List<String> extsPresentation = Arrays.asList(
"pps", "ppsx", "ppsm",
"ppt", "pptx", "pptm",
"pot", "potx", "potm",
"odp", "fodp", "otp");
/**
* 根据后缀名称返回文档类型
*/
public DocumentType getDocumentType(String suffix) {
suffix = suffix.toLowerCase();
if (extsDocument.contains(suffix)) {
return DocumentType.word;
}
if (extsSpreadsheet.contains(suffix)) {
return DocumentType.cell;
}
if (extsPresentation.contains(suffix)) {
return DocumentType.slide;
}
return DocumentType.word;
}
}
package org.arch.office.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
@Component
public class JWTUtil {
@Value("${token.secret}")
private String secret;
@Value("${token.expire}")
private Integer expire;
/**
* only office获取token
*/
public String onlyOfficeCreateToken(Map<String,Object> params) {
try {
JWTCreator.Builder builder = JWT.create();
builder.withExpiresAt(getExpire());
Class<? extends JWTCreator.Builder> aClass = builder.getClass();
Method addClaim = aClass.getDeclaredMethod("addClaim", String.class,Object.class);
addClaim.setAccessible(true);
for (Map.Entry<String, Object> entry : params.entrySet()) {
addClaim.invoke(builder,entry.getKey(),entry.getValue());
}
return builder.sign(Algorithm.HMAC256(secret));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Date getExpire() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, expire);
return calendar.getTime();
}
}
package org.arch.office.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Random;
@Component
public class MD5Util {
/**
* 获取md5字符串
*/
public String encrypt(String dataStr) {
return encrypt(dataStr.getBytes(StandardCharsets.UTF_8));
}
public String encrypt(byte[] bytes){
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes);
byte s[] = m.digest();
String result = "";
for (int i = 0; i < s.length; i++) {
result += Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6);
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return StringUtils.EMPTY;
}
public String key(String u){
Random random = new Random();
StringBuilder sbr = new StringBuilder();
for (int i = 0; i < 10; i++) {
sbr.append(u.charAt(random.nextInt(u.length())));
}
return sbr.toString();
}
}
package org.arch.office.utils;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class MockMultipartFile implements MultipartFile {
private final String name;
private String originalFilename;
@Nullable
private String contentType;
private final byte[] content;
public MockMultipartFile(String name, @Nullable byte[] content) {
this(name, "", (String)null, (byte[])content);
}
public MockMultipartFile(String name, InputStream contentStream) throws IOException {
this(name, "", (String)null, (byte[])FileCopyUtils.copyToByteArray(contentStream));
}
public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) {
Assert.hasLength(name, "Name must not be null");
this.name = name;
this.originalFilename = originalFilename != null ? originalFilename : "";
this.contentType = contentType;
this.content = content != null ? content : new byte[0];
}
public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream) throws IOException {
this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
}
public String getName() {
return this.name;
}
public String getOriginalFilename() {
return this.originalFilename;
}
@Nullable
public String getContentType() {
return this.contentType;
}
public boolean isEmpty() {
return this.content.length == 0;
}
public long getSize() {
return (long)this.content.length;
}
public byte[] getBytes() throws IOException {
return this.content;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(this.content);
}
public void transferTo(File dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.content, dest);
}
}
package org.arch.office.utils;
import cn.hutool.core.lang.Assert;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.arch.common.modules.base.entity.File;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.Downloader;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
/**
* 解析pdf工具类【对于扫描版的pdf是无法解析的】
*/
@Service
public class PrasePdfUtils {
public static PrasePdfUtils prasePdfUtils;
@Resource
private FileStorageService fileStorageService;
@Resource
private FileMapper sysFileMapper;
@PostConstruct
public void init() {
prasePdfUtils = this;
prasePdfUtils.fileStorageService = this.fileStorageService;
prasePdfUtils.sysFileMapper = this.sysFileMapper;
}
public static String prasePdf(String fileId) throws IOException {
PDDocument document = null;
ByteArrayInputStream byteArrayInputStream = null;
String text = "";
try{
File file = prasePdfUtils.sysFileMapper.selectById(fileId);
Assert.notNull(file, "文件不存在");
Downloader download = prasePdfUtils.fileStorageService.download(file.getUrl());
byte[] bytes = download.bytes();
byteArrayInputStream = new ByteArrayInputStream(bytes);
document = PDDocument.load(byteArrayInputStream);
// 创建PDFTextStripper对象并从文档中提取文本
PDFTextStripper pdfStripper = new PDFTextStripper();
text = pdfStripper.getText(document);
return text;
}catch (Exception e){
e.printStackTrace();
} finally {
if(null!=document){
document.close();
}
if(null!=byteArrayInputStream){
byteArrayInputStream.close();
}
}
return null;
}
}
package org.arch.office.utils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.util.UUID;
/**
* word转图片工具类
*/
public class WordConvertImageUtils {
public static void wordChangeImage(InputStream fileStream, String targetPath){
ZipSecureFile.setMinInflateRatio(-1.0d);
try {
PDDocument document = PDDocument.load(fileStream);
String dirName = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();
String filePath = targetPath +File.separator + dirName;
File file = new File(filePath);
if(!file.exists()){
file.mkdir();
}
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 70); // 设置DPI,可以调整输出图片的分辨率
ImageIO.write(bim, "PNG", new File(filePath+ File.separator + (UUID.randomUUID()
.toString().replaceAll("-","")+"-"+(page + 1)) + ".png"));
}
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/* public static void main(String[] args) throws Exception {
String targetPath="C:\\测试pdf转图片.pdf";
File file = new File(targetPath);
FileInputStream fileInputStream = new FileInputStream(file);
wordChangeImage(fileInputStream,"F:\\");
}*/
}
package org.arch.office.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
public class WordUtils {
public static MultipartFile convertToMultipartFile(String filename, String contentType, InputStream inputStream) throws IOException {
return new MockMultipartFile(filename, filename, contentType, inputStream);
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.office.OfficeConfig
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<name>微服务组件</name>
<packaging>pom</packaging>
<artifactId>arch-clouds</artifactId>
<modules>
<module>log</module>
<module>office</module>
<module>storage</module>
<module>mybatis</module>
<module>nacos</module>
<module>filters</module>
<module>common</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.arch</groupId>
<artifactId>arch-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<version>1.0-SNAPSHOT</version>
<name>文件存储</name>
<artifactId>storage</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.arch.storage.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
@ComponentScan("org.arch.storage")
public class StoreConfiguration {
public StoreConfiguration(){
log.info("加载StoreConfiguration~~~");
}
}
package org.arch.storage.mapper;
import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.SneakyThrows;
import org.apache.ibatis.annotations.Mapper;
import org.arch.base.utils.MD5Utils;
import org.arch.common.modules.base.entity.File;
import org.dromara.x.file.storage.core.FileInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* <p>
* 附件表 Mapper 接口
* </p>
*
* @author audit
* @since 2020-09-12
*/
@Mapper
public interface FileMapper extends BaseMapper<File> {
@SneakyThrows
default File saveFile(FileInfo upload, MultipartFile file) {
File sysFile = new File();
String suffix = FileUtil.getSuffix(upload.getOriginalFilename());
String prefix = FileUtil.getPrefix(upload.getOriginalFilename());
sysFile.setFileName(upload.getOriginalFilename());
sysFile.setContentType(upload.getContentType());
sysFile.setUrl(upload.getUrl());
sysFile.setFileType(suffix);
sysFile.setSuffix(suffix);
String encrypt = MD5Utils.encrypt(file.getBytes());
sysFile.setMd5(encrypt);
sysFile.setFileKey(MD5Utils.key(encrypt));
sysFile.setLength(upload.getSize());
sysFile.setTitle(upload.getOriginalFilename());
sysFile.setName(prefix);
sysFile.setStoreFileName(upload.getFilename());
sysFile.setPlatform(upload.getPlatform());
sysFile.setBasePath(upload.getBasePath());
insert(sysFile);
return sysFile;
}
}
package org.arch.storage.service;
import org.arch.common.modules.base.dto.DelDTO;
import org.arch.common.modules.base.dto.DownloadObjectDTO;
import org.arch.common.modules.base.vo.UpLoadVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:23
*/
public interface OssService {
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
UpLoadVO upload(MultipartFile file);
/**
* 下载对象
*/
void downloadObject(DownloadObjectDTO params, HttpServletResponse response);
/**
* oss对象存储删除
*
* @param dto 参数
* @return {@link UpLoadVO}
*/
Boolean delObject(DelDTO dto);
}
package org.arch.storage.service.impl;
import cn.hutool.core.io.file.FileNameUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.arch.common.modules.base.entity.File;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.recorder.FileRecorder;
import org.dromara.x.file.storage.core.upload.FilePartInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Component
public class FileRecorderImpl implements FileRecorder {
@Autowired
private FileMapper fileMapper;
@Override
public boolean save(FileInfo fileInfo) {
return true;
}
@Override
public void update(FileInfo fileInfo) {
}
@Override
public FileInfo getByUrl(String s) {
FileInfo fileInfo = new FileInfo();
File file = fileMapper.selectOne(Wrappers.lambdaQuery(File.class).eq(File::getUrl, s));
if (Objects.nonNull(file)) {
fileInfo.setPlatform(file.getPlatform());
fileInfo.setUrl(s);
fileInfo.setPath(extractDateFromUrl(s) + "/");
fileInfo.setBasePath(file.getBasePath());
fileInfo.setFilename(FileNameUtil.getName(s));
}
return fileInfo;
}
@Override
public boolean delete(String s) {
return true;
}
@Override
public void saveFilePart(FilePartInfo filePartInfo) {
}
@Override
public void deleteFilePartByUploadId(String s) {
}
public static String extractDateFromUrl(String url) {
// 使用正则表达式来匹配日期部分
String regex = "/(\\d{4}/\\d{2}/\\d{2})/";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return matcher.group(1);
} else {
return "Date not found";
}
}
}
package org.arch.storage.service.impl;
import cn.hutool.core.lang.Assert;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.arch.base.utils.FileUtils;
import org.arch.common.modules.base.entity.File;
import org.arch.common.modules.base.dto.DelDTO;
import org.arch.common.modules.base.dto.DownloadObjectDTO;
import org.arch.common.modules.base.vo.UpLoadVO;
import org.arch.storage.mapper.FileMapper;
import org.arch.storage.service.OssService;
import org.dromara.x.file.storage.core.Downloader;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:24
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class OssServiceImpl implements OssService {
private final FileMapper sysFileMapper;
private final FileStorageService fileStorageService;
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
@SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public UpLoadVO upload(MultipartFile file) {
UpLoadVO uploadFileVO = new UpLoadVO();
Assert.notNull(file, "上传文件不能为空");
FileInfo upload = fileStorageService.of(file)
.setPath(FileUtils.filePath()).upload();
Assert.notNull(uploadFileVO, "上传失败");
File saveFile = sysFileMapper.saveFile(upload, file);
uploadFileVO.setFileId(saveFile.getId());
return uploadFileVO;
}
@SneakyThrows
@Override
public void downloadObject(DownloadObjectDTO params, HttpServletResponse response) {
File file = sysFileMapper.selectById(params.getFileId());
Assert.notNull(file, "文件不存在");
Downloader download = fileStorageService.download(file.getUrl());
response.setContentType(file.getFileType());
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getFileName(), StandardCharsets.UTF_8.name()));
response.getOutputStream().write(download.bytes());
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delObject(DelDTO dto) {
boolean flag = false;
Long fileId = dto.getFileId();
File file = sysFileMapper.selectById(fileId);
Assert.notNull(file, "文件不存在");
// 判断文件是否存在
FileInfo fileInfo = fileStorageService.getFileInfoByUrl(file.getUrl());
boolean exists = fileStorageService.exists(fileInfo);
Assert.isTrue(exists, "文件不存在");
boolean delete = fileStorageService.delete(fileInfo);
if (delete) {
// 删除文件数据表sys_file里的记录信息
int i = this.sysFileMapper.deleteById(file.getId());
if (i >= 0) {
flag = true;
}
}
return flag;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.storage.config.StoreConfiguration
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>arch-gateway</artifactId>
<name>微服务网关</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--gateway依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--jwt-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
<!--SM4-CBC加密需要-->
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.arch</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package org.arch.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
* Hello world!
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GatewayApp {
public static void main(String[] args) {
SpringApplication.run(GatewayApp.class, args);
}
}
package org.arch.gateway.common;
public class Constant {
/**
* redis过期时间,以秒为单位,一分钟
*/
public static final int EXRP_MINUTE = 60;
/**
* redis过期时间,以秒为单位,一小时
*/
public static final int EXRP_HOUR = 60 * 60;
/**
* redis过期时间,以秒为单位,一天
*/
public static final int EXRP_DAY = 60 * 60 * 24;
/**
* redis-key-前缀-shiro:cache:
*/
public static final String PREFIX_SHIRO_CACHE = "shiro:cache:";
/**
* 用户信息缓存
*/
public static final String USER_ACCOUNT = "user_account:";
/**
* redis-key-前缀-shiro:access_token:
*/
public static final String PREFIX_SHIRO_ACCESS_TOKEN = "shiro:access_token:";
/**
* redis-key-前缀-shiro:refresh_token:
*/
public static final String PREFIX_SHIRO_REFRESH_TOKEN = "shiro:refresh_token:";
/**
* redis-key-前缀-tkv:refresh_token:
*/
public static final String PREFIX_TKV_REFRESH_TOKEN = "tkv:refresh_token:";
/**
* JWT-account:
*/
public static final String ACCOUNT = "account";
/**
* JWT-currentTimeMillis:
*/
public static final String CURRENT_TIME_MILLIS = "currentTimeMillis";
/**
* PASSWORD_MAX_LEN
*/
public static final Integer PASSWORD_MAX_LEN = 8;
//token
public static final int RESCODE_REFTOKEN_MSG = 1006; //刷新TOKEN(有返回数据)
public static final int RESCODE_REFTOKEN = 1007; //刷新TOKEN
public static final int JWT_ERRCODE_NULL = 4000; //Token不存在
public static final int JWT_ERRCODE_EXPIRE = 4001; //Token过期
public static final int JWT_ERRCODE_FAIL = 4002; //验证不通过
//密匙
public static final String JWT_SECRET = "8677df7fc87d23u87k61c89s54312hpk";
public static final String TOKEN_ISSUER="IT4IT";
//token失效的时间,单位:秒,默认设置3天
public static final Long ACCESS_TOKEN_EXPIRE = 7*24*60*60L;
//accessToken在header中的key
public static final String ACCESS_TOKEN_HEADER_KEY = "accessToken";
//用户sessionKey前缀
public static final String USER_SESSION_KEY = "User:Session:key:";
//用户令牌前缀
public static final String JWT_TOKEN_REDIS_KEY_PREFIX = "UserAuth:JWT:Key:";
//省市区redis key,缓存7天
public static final String AREA_REDIS_KEY = "areaKey";
public static final Long AREA_REDIS_EXPEPIRE = 7*24*60*60L;
//一次最多只能两个时段
public static final Integer EVERY_TIME_MAX_TWO_TIMES = 2;
//排队受理业务人均时长,单位:分钟
public static final Integer LINE_PER_TIMES = 3;
//订单到期规定的时间不能取消订单(分钟)
public static final Integer VALID_EXPIRE_TIME = 120;
//演示系统账户
public static String DEMO_ACCOUNT = "test";
//自动去除表前缀
public static String AUTO_REOMVE_PRE = "true";
//停止计划任务
public static String STATUS_RUNNING_STOP = "stop";
//开启计划任务
public static String STATUS_RUNNING_START = "start";
//通知公告阅读状态-未读
public static String OA_NOTIFY_READ_NO = "0";
//通知公告阅读状态-已读
public static int OA_NOTIFY_READ_YES = 1;
//部门根节点id
public static Long DEPT_ROOT_ID = 0l;
//缓存方式
public static String CACHE_TYPE_REDIS ="redis";
public static String LOG_ERROR = "error";
}
package org.arch.gateway.config;
import org.springframework.util.AntPathMatcher;
import java.util.ArrayList;
import java.util.List;
/**
* 不需要登录的请求路径
*/
public class AnonFilterChainDefinitionMap {
//不需要登录的路径
public static List<String> anonUrlList = new ArrayList<>();
static{
anonUrlList.add("/project/updateFile2");
anonUrlList.add("/adsproject/updateFile2");
anonUrlList.add("/file/webDownload");
anonUrlList.add("/directoryList/getJiagoutu");
anonUrlList.add("/project/getTableDatas");//架构表/
anonUrlList.add("/psrPlan/getPsrPlansByFsrId");////插入需求
anonUrlList.add("/expose/getEquipmentList");
anonUrlList.add("/expose/getBusList");
anonUrlList.add("/expose/getRelatedList");
anonUrlList.add("/auth/isclogin");////插入需求
anonUrlList.add("/auth/login");////插入需求
anonUrlList.add("/file/upload");////插入需求
anonUrlList.add("/version/getCurrentVersion");////插入需求
// 架构元模型管理
anonUrlList.add("/architecture/vi/file/getById");
}
/**
* 验证是否不需要登录
* @param url 路径
* @return 是否需要登录
*/
public static boolean isNotPermission(String url) {
AntPathMatcher matcher = new AntPathMatcher();
for (String p : anonUrlList) {
if (matcher.match(p,url)) {
return true;
}
}
return false;
}
}
package org.arch.gateway.config;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* 把body中的数据缓存起来
* @author zg_xl920
* @create 2022-05-26 19:43
*/
@Component
public class CacheBodyGlobalFilter implements Ordered, GlobalFilter {
// public static final String CACHE_REQUEST_BODY_OBJECT_KEY = "cachedRequestBodyObject";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
if (exchange.getRequest().getHeaders().getContentType() == null) {
return chain.filter(exchange);
} else {
return DataBufferUtils.join(exchange.getRequest().getBody())
.flatMap(dataBuffer -> {
DataBufferUtils.retain(dataBuffer);
Flux<DataBuffer> cachedFlux = Flux
.defer(() -> Flux.just(dataBuffer.slice(0, dataBuffer.readableByteCount())));
ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
exchange.getRequest()) {
@Override
public Flux<DataBuffer> getBody() {
return cachedFlux;
}
};
//exchange.getAttributes().put(CACHE_REQUEST_BODY_OBJECT_KEY, cachedFlux);
return chain.filter(exchange.mutate().request(mutatedRequest).build());
});
}
}
@Override
public int getOrder() {
return -2;
}
}
package org.arch.gateway.config;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import org.arch.gateway.config.sm4jm.SM4Utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 国网SM4加密
*/
@Component
@ConditionalOnProperty(value = "sm4.enable", havingValue = "true")
public class ParamsSM4EncryptionFilter implements GlobalFilter, Ordered {
@Value("${sm4.CBCSecretKey}")
private String CBCSecretKey;
@Value("${sm4.CBCIV}")
private String CBCIV;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest serverHttpRequest = exchange.getRequest();
HttpMethod method = serverHttpRequest.getMethod();
String uri = serverHttpRequest.getURI().toString();
if (uri.contains("upload") || method != HttpMethod.POST) {
return chain.filter(exchange);
}
String bodyStr = serverHttpRequest.getBody().toString();
String plainParams = SM4Utils.decryptData_CBC(bodyStr, CBCSecretKey, CBCIV);
if (StrUtil.isBlank(plainParams)) {
return errorResponse(exchange, "已开启加密模式,请先加密");
}
return chain.filter(exchange);
}
private Mono<Void> errorResponse(ServerWebExchange exchange, String message) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.BAD_REQUEST);
response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
JSONObject json = new JSONObject();
json.put("code", 500);
json.put("msg", message);
json.put("data", "");
return response.writeWith(Mono.just(response.bufferFactory().wrap(json.toString().getBytes())));
}
@Override
public int getOrder() {
return -1;
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
/**
* 限值文件上传
*/
public class FileUploadInterceptor implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 检查请求是否包含文件
if (request.getHeaders().getContentType() != null
&& request.getHeaders().getContentType().includes(MediaType.MULTIPART_FORM_DATA)) {
// 文件上传拦截逻辑
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
return response.writeWith(Mono.just(response.bufferFactory().wrap("File upload is not allowed.".getBytes(StandardCharsets.UTF_8))));
}
// 继续过滤器链
return chain.filter(exchange);
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Objects;
/**
* 文件上传大小限制
*/
public class FileUploadSizeLimitFilter implements GlobalFilter {
private final int maxFileSize = 100 * 1024 * 1024; // 设置最大文件大小为100MB
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 如果是POST请求且内容类型是multipart/form-data,则检查文件大小
if ("POST".equals(request.getMethodValue()) && request.getHeaders().getContentType().includes(MediaType.MULTIPART_FORM_DATA)) {
return DataBufferUtils.join(exchange.getRequest().getBody())
.flatMap(dataBuffer -> {
try {
// 此处可以获取文件数据,进行大小校验
// 示例仅为检查是否超出最大文件大小
long contentLength = request.getHeaders().getContentLength();
if (!Objects.isNull(contentLength) && contentLength > maxFileSize) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(org.springframework.http.HttpStatus.PAYLOAD_TOO_LARGE);
// 可以返回错误信息到客户端
return response.writeWith(
Mono.just(response.bufferFactory().wrap(
"File size exceeds the maximum allowed limit.".getBytes()))
);
}
} catch (Exception e) {
// 处理异常
}
return chain.filter(exchange);
});
}
return chain.filter(exchange);
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
//@Configuration
public class FilterConfig {
@Bean
public GlobalFilter fileUploadSizeLimitFilter() {
return new FileUploadSizeLimitFilter();
}
}
\ No newline at end of file
package org.arch.gateway.config.sm4jm;
class SM4Context {
public int mode;
public int[] sk;
public boolean isPadding;
public SM4Context() {
this.mode = 1;
this.isPadding = true;
this.sk = new int[32];
}
}
package org.arch.gateway.systemLog;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GatewayLog {
/**请求来源**/
private String origin;
/**访问实例*/
private String targetServer;
/**请求路径*/
private String requestPath;
/**请求方法*/
private String requestMethod;
/**协议 */
private String schema;
/**请求类型 */
private String requestContentType;
/**请求头 */
private String headers;
/**请求体*/
private String requestBody;
/**响应体*/
private String responseData;
/**请求ip*/
private String ip;
/**IP所属城市*/
private String city;
/**开始时间*/
private Long startTime;
/**结束时间*/
private Long endTime;
/**请求时间*/
private String requestTime;
/**响应时间*/
private String responseTime;
/**执行时间*/
private long executeTime;
/**路由配置*/
private String routeConfig;
/**响应状态*/
private String status;
}
server:
port: 19000
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
config:
activate:
on-profile: dev
server:
port: 19000
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
# - data-id: common-isc.${nacos.file-extension}
# refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
server:
port: 19000
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
# - data-id: common-isc.${nacos.file-extension}
# refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
config:
activate:
on-profile: sit
spring:
application:
name: arch-gateway
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>arch-knowledge</artifactId>
<name>知识库</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>arch-overall</artifactId>
<name>总体架构</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.davidfantasy</groupId>
<artifactId>mybatis-plus-generator-ui</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>office</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>log</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>filters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.nasdanika.core</groupId>
<artifactId>mxgraph</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package org.arch.overall;
import org.dromara.x.file.storage.spring.EnableFileStorage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.jmx.support.RegistrationPolicy;
@SpringBootApplication
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
@EnableFileStorage
public class ArchOverallApp {
public static void main(String[] args) {
SpringApplication.run(ArchOverallApp.class, args);
}
}
package org.arch.overall.controller;
import io.swagger.annotations.ApiOperation;
import org.arch.base.Result;
import org.arch.log.entity.DescContent;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import org.arch.overall.service.ArchiElePropertyService;
import org.arch.overall.service.ArchiEleRelaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("ele-rel")
public class ArchiEleRelaController {
@Autowired
private ArchiEleRelaService archiEleRelaService;
@Autowired
private ArchiElePropertyService archiElePropertyService;
@PostMapping(value = "/")
@ApiOperation(DescContent.QUERY_LIST_ELEMENT_RELATIONSHIPS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素关系",moduleName = "元素管理")
public Result gtArchiEleRela(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.gtArchiEleRela(dto));
}
@PostMapping("/ad-ele-rel")
@ApiOperation(value = "新增元素关系")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "新增元素关系")
public Result addArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.insert(archiEleRelas));
}
@PostMapping(value = "/upd-ele-rel")
@ApiOperation(value = "修改元素关系")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "修改元素关系")
public Result updArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.update(archiEleRelas));
}
@PostMapping(value = "/del-ele-rel")
@ApiOperation(value = "根据Id删除元素关系")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "根据id删除元素关系")
public Result delArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.del(archiEleRelas));
}
@PostMapping(value = "/batchupd-ele-rel")
@ApiOperation(value = "批量发布版本")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "批量发布版本")
public Result updateEleRelBatch(@RequestBody BatchUpdateRelaDTO requestMap) {
return Result.success(archiEleRelaService.updBatch(requestMap));
}
@ApiOperation("根据元素关系查询元素信息")
@PostMapping(value = "/qEle")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes="根据元素关系查询元素信息")
public Result qEle(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.findEleRelaConstrainList(dto.getEleRelaId()));
}
@ApiOperation("查询元素关系(只包含元素关系名称)")
@PostMapping(value = "/qEleRela")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes="询元素关系(只包含元素关系名称)")
public Result qEleRela() {
return Result.success(archiEleRelaService.findEleRelaList());
}
@ApiOperation("批量新增/修改元素")
@PostMapping(value = "/updEleBatch")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes = "批量新增/修改元素")
public Result updEleBatch(@RequestBody List<Map<String, Object>> requestList) {
return Result.success(archiElePropertyService.updateEleRelBatch(requestList));
}
@PostMapping(value = "/rel-list")
@ApiOperation(value = "获取元素关系列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "获取元素关系列表")
public Result gtEleRelList(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.gtEleRelList(dto));
}
}
package org.arch.overall.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.arch.base.Result;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.service.ArchiElementService;
import org.springframework.web.bind.annotation.*;
@Api(tags = {"元素管理"})
@RestController
@RequestMapping("ele")
@RequiredArgsConstructor
public class ArchiElementController {
private final ArchiElementService archiElementService;
@PostMapping(value = "/")
// @ApiOperation(DescContent.QUERY_PAGINATED_LIST_ELEMENTS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素信息",moduleName = "元素管理")
public Result gtArchiElement(@RequestBody ArchiElementDTO dto) {
return Result.success(archiElementService.gtArchiElement(dto));
}
@PostMapping("/ad-ele")
@ApiOperation("新增元素")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "新增元素",moduleName = "元素管理")
public Result adEle(@RequestBody ArchiElement archiElements) {
return Result.success(archiElementService.insert(archiElements));
}
@PostMapping("/upd-ele")
@ApiOperation("修改元素")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "更新元素",moduleName = "元素管理")
public Result updEle(@RequestBody ArchiElement archiElement) {
return Result.success(archiElementService.update(archiElement));
}
@PostMapping("/del-ele")
@ApiOperation("根据Id删除元素")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "删除元素",moduleName = "元素管理")
public Result delEle(@RequestBody ArchiElement archiElement) {
return Result.success(archiElementService.delete(archiElement));
}
@PostMapping(value = "/updEleBatch")
@ApiOperation(value = "批量发布版本")
@OperLog(value = LogOperTypeEnum.OTHER, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "批量发布版本",moduleName = "元素管理")
public Result updEleBatch(@RequestBody BatchUpdateDTO requestMap) {
return Result.success(archiElementService.updEleBatch(requestMap));
}
@PostMapping(value = "/archi-ele-list")
@ApiOperation(value = "查询元素列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "查询元素列表",moduleName = "元素管理")
public Result gtEleList(@RequestBody ArchiElement params) {
return Result.success(archiElementService.gtEle(params));
}
@PostMapping(value = "/ele-list")
@ApiOperation(value = "获取元素列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素列表",moduleName = "元素管理")
public Result getEleList(@RequestBody ArchiElementDTO dto) {
return Result.success(archiElementService.gtEleList(dto));
}
}
package org.arch.overall.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.arch.base.Result;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.dto.MetaModel;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import org.arch.overall.service.ArchiAssetInfoService;
import org.arch.overall.service.ArchiAssetService;
import org.arch.overall.service.ArchiMetaModelService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@Api(tags = "元模型管理")
@RestController
@RequestMapping("ma-ml")
@RequiredArgsConstructor
public class ArchiMetaModelController {
private final ArchiMetaModelService archiMetaModelService;
private final ArchiAssetInfoService archiAssetInfoService;
private final ArchiAssetService archiAssetService;
@ApiOperation("新增元模型")
@PostMapping("/add")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "新增元模型",moduleName = "元模型管理")
public Result addArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.insert(archiMetaModels));
}
@ApiOperation("修改元模型")
@PostMapping("/updArchiMetaModel")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "修改元模型",moduleName = "元模型管理")
public Result updArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.update(archiMetaModels));
}
@ApiOperation("查询元模型列表")
@PostMapping("/")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "查询元模型列表",moduleName = "元模型管理")
public Result gtArchiMetaModel(@RequestBody ArchiMetaModelDTO dto) {
return Result.success(archiMetaModelService.gtArchiMetaModel(dto));
}
@ApiOperation(value = "根据Id删除", notes = "根据Id删除", httpMethod = "POST")
@PostMapping(value = "/del")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据Id删除",moduleName = "元模型管理")
public Result delArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.del(archiMetaModels));
}
@ApiOperation("根据元模型ID查询元模型")
@PostMapping("/gBMMId")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据元模型ID查询元模型",moduleName = "元模型管理")
public Result gBMMId(@RequestBody ArchiMetaModelDTO dto) {
Long metaModelId = dto.getMetaModelId();
return Result.success(archiMetaModelService.findMetaModelById(metaModelId));
}
@ApiOperation("更新画布信息")
@PostMapping("/upMxGraph")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "更新画布信息",moduleName = "元模型管理")
public Result updateMxGraph(@RequestBody ArchiMetaModelDTO dto) {
return Result.success(archiMetaModelService.updateMxGraphModel(dto));
}
@ApiOperation("根据元模型获取结构化数据")
@PostMapping("/fdBmd")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据元模型获取结构化数据",moduleName = "元模型管理")
public Result getMxCellByMetaModelId(@RequestBody MetaModel model) {
return Result.success(archiAssetService.getMxCellByMetaModelId(model.getMetaModelId()));
}
@ApiOperation("加载画布左侧元素资产列表接口")
@PostMapping(value = "/archi-asset-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧元素资产列表接口",moduleName = "元模型管理")
public Result getArchiAssetList(@RequestBody ArchiAssetInfoDTO params) {
return Result.success(archiMetaModelService.getArchiAssetList(params));
}
@ApiOperation("加载画布右侧清单列表")
@PostMapping("/asset-ele-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布右侧清单列表",moduleName = "元模型管理")
public Result gtAssetByEleList(@RequestBody ArchiAssetInfoDTO params) {
params.setArchiStage(1);
params.setArchiAssetState(2);
params.setLimit(10L);
return Result.success(archiAssetInfoService.assetList(params));
}
@ApiOperation("加载画布左侧元素资产列表")
@PostMapping("/archi-asset-list1")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧元素资产列表",moduleName = "元模型管理")
public Result getArchiAssetList1(@RequestBody ArchiAssetInfoDTO params) {
return Result.success(archiMetaModelService.getArchiAssetList1(params));
}
@ApiOperation("加载画布左侧列表(标准图元)接口")
@PostMapping(value = "/archi-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧列表(标准图元)接口",moduleName = "元模型管理")
public Result getArchiList() {
Integer type = 1;
return Result.success(archiMetaModelService.getEleListLeft(type));
}
@ApiOperation("加载画布左侧列表(常规图元)接口")
@PostMapping(value = "/archi-list2")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧列表(常规图元)接口",moduleName = "元模型管理")
public Result getArchiList2() {
Integer type = 2;
return Result.success(archiMetaModelService.getEleListLeft(type));
}
}
package org.arch.overall.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.arch.base.Result;
import org.arch.common.modules.archoverall.dto.BatchRemoveDTO;
import org.arch.log.annotation.OperLog;
import org.arch.log.entity.DescContent;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.common.modules.archoverall.dto.ArchiViewDTO;
import org.arch.common.modules.archoverall.entity.ArchiView;
import org.arch.overall.service.ArchiViewService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 架构视图
*
* @author lizhen
* @date 2024/05/22
*/
@Api(value = "/archi-vw", tags = {"架构视图"})
@RestController
@RequestMapping("archi-vw")
@RequiredArgsConstructor
public class ArchiViewController {
private final ArchiViewService archiViewService;
@PostMapping(value = "/")
@ApiOperation(DescContent.QUERY_LIST_VIEWS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "架构视图设计", operDes = "架构视图设计查询")
public Result gtArchiView(@RequestBody ArchiViewDTO dto) {
return Result.success(archiViewService.gtArchiView(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize())));
}
@PostMapping("/ad-archi-vw")
@ApiOperation(value = "新增架构视图")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "新增架构视图")
public Result adArchiView(@RequestBody ArchiView vwDiss) {
return Result.success(archiViewService.insert(vwDiss));
}
@PostMapping(value = "/upd-archi-vw")
@ApiOperation(value = "修改视图配置")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "修改视图配置")
public Result updArchiView(@RequestBody ArchiView vwDiss) {
return Result.success(archiViewService.update(vwDiss));
}
@PostMapping(value = "/del-vw")
@ApiOperation("根据Id删除视图")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "根据Id删除视图")
public Result delArchiView(@RequestBody ArchiView vwDis) {
return archiViewService.delArchiView(vwDis) ? Result.success("删除成功") : Result.error("删除失败");
}
@PostMapping(value = "/batchupd-vw")
@ApiOperation(value = "批量发布版本", notes = "批量发布版本")
@OperLog(value = LogOperTypeEnum.OTHER, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "架构视图设计批量发布")
public Result updateVwDisBatch(@RequestBody @Validated BatchRemoveDTO requestMap) {
return Result.success(archiViewService.updEleBatch(requestMap));
}
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ability.ArchiAbilityInventoryDataDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationQueryDTO;
import org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO;
import org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation;
import java.util.List;
/**
* 中台服务清单关联资产(资产关联,中台架构服务,其他四大架构资产)(ArchiAbilityAssetsRelation)表数据库访问层
*
* @author makejava
* @since 2024-04-29 14:27:33
*/
public interface ArchiAbilityAssetsRelationMapper extends BaseMapper<ArchiAbilityAssetsRelation> {
void addBach(@Param("entities") List<ArchiAbilityAssetsRelation> assetsList);
/**
* 批量删除
*
* @param assetsList 资产清单
* @return {@link Boolean }
*/
Boolean removeBatchIds(@Param("list") List<Long> assetsList);
IPage<ArchiAbilityAssetsRelation> qryDataListPage(@Param("dto") ArchiAbilityInventoryDataDTO params, Page<ArchiAbilityAssetsRelation> page);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
IPage<ArchiAbilityAssetsRelationQueryVO> queryAssetRelation(@Param("params") ArchiAssetsRelationQueryDTO params, Page<ArchiAssetsRelationQueryDTO> page);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
ArchiAbilityAssetsRelationQueryVO queryAssetRelation(@Param("params") ArchiAssetsRelationQueryDTO params);
/**
* 资产关系数量
*
* @param assetRelaId 资产关系ID
* @return {@link Long }
*/
Long queryAssetRelationCountByTypeId(long assetRelaId);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.NeedInfoDTO;
import org.arch.common.modules.archoverall.dto.OnlineReviewCountQueryDTO;
import org.arch.common.modules.archoverall.dto.OnlineReviewWriteDTO;
import org.arch.common.modules.archoverall.vo.NeedReviewVo;
import org.arch.common.modules.archoverall.vo.OnlineReviewCountVO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.entity.OnlineReviewWrite;
import java.util.List;
public interface ArchiAssertMapper extends BaseMapper<AssetInfo> {
List<AssetInfo> maxVer(ArchiAssetInfoDTO params);
IPage<NeedReviewVo> qyNeedReview(@Param("page") Page<Object> page, @Param("nigr") NeedInfoDTO nigr);
IPage<OnlineReviewWrite> qyOnlineReview(@Param("onl") OnlineReviewWriteDTO params, @Param("page") Page<OnlineReviewWrite> page);
List<OnlineReviewWrite> qyOnlineReview(@Param("onl") OnlineReviewWriteDTO params);
/**
* 概设关联业务管理-概设统计分析-各单位概设统计
*/
IPage<OnlineReviewCountVO> qyneedCount(@Param("orcy") OnlineReviewCountQueryDTO params, @Param("page") Page<OnlineReviewCountVO> page);
List<OnlineReviewCountVO> qyreviewPassCount(@Param("orcy") OnlineReviewCountQueryDTO params);
IPage<OnlineReviewCountVO> qybatNeedCount(@Param("orqy") OnlineReviewCountQueryDTO params, @Param("page") Page<OnlineReviewCountVO> page);
List<OnlineReviewCountVO> qybatReviewPassCount(@Param("orqy") OnlineReviewCountQueryDTO params);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiAssetAppPrj;
/**
* <p>
* 系统项目资产关联表 Mapper 接口
* </p>
*
* @author java
* @since 2024-02-28
*/
public interface ArchiAssetAppPrjMapper extends BaseMapper<ArchiAssetAppPrj> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.dto.WordContentDTO;
import java.util.List;
import java.util.Map;
/**
* <p>
* 业务架构 Mapper 接口
* </p>
*
* @author author
* @since 2024-01-09
*/
@Mapper
public interface ArchiAssetInfoMapper extends MPJBaseMapper<AssetInfo> {
@Select("select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')),CHAR(45),'')),'-V',(SELECT (select date_format(now(), '%Y')) - 2023 +1),'.',(select date_format(now(), '%m')),'.','1'))\r\n" +
" as version")
String selectVer();
/**
* 分页列表查询
*
* @param params 参数
* @param page 页
* @return {@link IPage}<{@link AssetInfo}>
*/
IPage<AssetInfo> query(@Param("params") ArchiAssetInfoDTO params, Page<AssetInfo> page);
/**
* 列表查询
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> query(@Param("params") ArchiAssetInfoDTO params);
/**
* 架构资产信息详情
*
* @param assetId 资产 ID
* @return {@link AssetInfo}
*/
AssetInfo info(Long assetId);
/**
* 自动生成编号
* @param superiorAssetCode 上级编码
* @param rchiType 架构类型
* @param num 级别层次
* @return
*/
Integer getArchiAssetMaxNum(@Param("rchiType")String rchiType,
@Param("superiorAssetCode")String superiorAssetCode,
@Param("num")int num,
@Param("archiStage") String archiStage);
/**
* @param params 查询
* @return
*/
Map<String,String> searhByKeyword(@Param("params") WordContentDTO params);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.archoverall.entity.ArchiAssetSystem;
/**
* <p>
* 架构版本 Mapper 接口
* </p>
*
* @author author
* @since 2024-01-16
*/
@Mapper
public interface ArchiAssetSystemMapper extends MPJBaseMapper<ArchiAssetSystem> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import java.util.List;
public interface ArchiElePropertyMapper extends BaseMapper<ArchiEleProperty> {
List<ArchiEleProperty> gtArchiElePropertyList(@Param("yp") ArchiEleProperty ynMolProyls);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain;
import java.util.List;
public interface ArchiEleRelaConstrainMapper extends BaseMapper<ArchiEleRelaConstrain> {
/**
* 批量添加
*/
void batchInsert(List<ArchiEleRelaConstrain> list);
/**
* 根据元素关系,删除元素关系
*
* @param eleRelaId 元素关系 ID
*/
void delByRelaId(Long eleRelaId);
/**
* 根据元素关系编码查询约束条件
*
* @param eleRelaId 元素关系ID
* @return {@link List}<{@link ArchiEleRelaConstrain}>
*/
List<ArchiEleRelaConstrain> getArchiEleRelaConstraint(Long eleRelaId);
/**
* 根据元素关系ID查询元素关系
* 元素带属性
*
* @param constrainId 约束 ID
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import java.util.List;
public interface ArchiEleRelaMapper extends BaseMapper<ArchiEleRela> {
/**
* 分页
*
* @param dto 参数
* @param page 页
* @return {@link IPage }<{@link ArchiEleRela }>
*/
IPage<ArchiEleRela> gtArchiEleRela(@Param("dto") ArchiEleRelaDTO dto, Page<Object> page);
/**
* 列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiEleRela }>
*/
List<ArchiEleRela> gtEleRelList(@Param("dto") ArchiEleRelaDTO dto);
/**
* 查询资产关系
*
*/
List<ArchiEleRelaNameVO> findEleRelaList();
/**
* 获取版本
*
* @param eleRelaId 元素关系 ID
* @return {@link String }
*/
String getVersion(@Param("eleRelaId") Long eleRelaId);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import java.util.List;
public interface ArchiElementMapper extends MPJBaseMapper<ArchiElement> {
/**
* 初始化版本
*
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> initVersion();
/**
* 获取版本
*
* @return {@link List }<{@link ArchiElement }>
*/
String getVersion(@Param("elementId") Long elementId);
/**
* 元素列表
*
* @param dto DTO
* @param page 页
* @return {@link IPage }<{@link ArchiElement }>
*/
IPage<ArchiElement> gtArchiElement(@Param("dto") ArchiElementDTO dto, Page<Object> page);
/**
* 根据元素名称查询元素
*
* @param archiElements Archi 元素
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtArcEleByName(@Param("do") ArchiElement archiElements);
/**
* 获取元素列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEleList(@Param("dto") ArchiElementDTO dto);
List<ArchiElement> maxVer(ArchiElement archiElement);
/**
* 根据视图配置查询架构元素
*
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> queryEleByAssertView(Long viewId);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.archoverall.entity.ArchiElementNestRelation;
/**
* <p>
* 需求管理信息 Mapper 接口
* </p>
*
* @author java
* @since 2024-03-05
*/
@Mapper
public interface ArchiElementNestRelationMapper extends MPJBaseMapper<ArchiElementNestRelation> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import java.util.List;
public interface ArchiMetaModelMapper extends MPJBaseMapper<ArchiMetaModel> {
List<ArchiMetaModel> selectVer();
/**
* 元模型列表
*
* @param dto DTO
* @param page 页
* @return {@link IPage }<{@link ArchiMetaModel }>
*/
IPage<ArchiMetaModel> getYnMol(@Param("dto") ArchiMetaModelDTO dto, Page<Object> page);
/**
* 更新 MX 图形模型
*
* @param metaModelId 元模型 ID
* @param graphId 图形 ID
* @return {@link Boolean}
*/
Boolean updateMxGraphModel(@Param("metaModelId") Long metaModelId, @Param("graphId") Long graphId);
/**
* 根据元模型id获取mxCell
*
* @param metaModelId 元模型id
* @return {@link String}
*/
String getMxCellByMetaModelId(Long metaModelId);
/**
* 查询架构原模型
*
* @param id 同上
* @return {@link ArchiMetaModel}
*/
ArchiMetaModel findMetaModelById(Long id);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
/**
* <p>
* 元模型数据字典详情 Mapper 接口
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictDetailMapper extends MPJBaseMapper<ArchiModelDictDetail> {
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
/**
* <p>
* 元模型数据字典 Mapper 接口
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictMapper extends MPJBaseMapper<ArchiModelDict> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetDTO;
import org.arch.common.modules.archoverall.dto.design.ArchiViewDTO;
import org.arch.common.modules.archoverall.vo.ArchiAssetVO;
import org.arch.common.modules.archoverall.vo.ArchiVersionVO;
import org.arch.common.modules.archoverall.vo.ArchiViewVO;
import java.util.List;
@Mapper
public interface ArchiTotalAssetMapper extends BaseMapper {
/**
* 总体架构资产自动图形化
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> automaticGraphing(ArchiAssetDTO model);
/**
* 总体架构资产智能搜索
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeList(ArchiAssetDTO model);
/**
* 总体架构可视化展示
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeListView(ArchiAssetDTO model);
/**
* 查询视图
*
* @param params 参数
* @return {@link List}<{@link ArchiViewVO}>
*/
List<ArchiViewVO> queryView(ArchiViewDTO params);
/**
* 查询架构版本
*
* @param params 参数
* @return {@link List}<{@link ArchiVersionVO}>
*/
List<ArchiVersionVO> queryArchiVersion(ArchiVersionVO params);
/**
* 根据元素查询对应的资产
*
* @param elementId 元素 ID
* @return {@link List }<{@link ArchiAssetVO }>
*/
List<ArchiAssetVO> findAssertByElementId(@Param("elementId") Long elementId);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
public interface ArchiViewEleMapper extends BaseMapper<ArchiViewEle> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.archoverall.entity.ArchiView;
import java.util.List;
public interface ArchiViewMapper extends BaseMapper<ArchiView> {
@Select("select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')),CHAR(45),'')),'-V',(SELECT (select date_format(now(), '%Y')) - 2023 +1),'.',(select date_format(now(), '%m')),'.','1')) as version")
List<ArchiView> selectVer();
List<ArchiView> maxVer(ArchiView vwDiss);
/**
* 获取版本
*
* @param id id
* @return {@link List }<{@link ArchiElement }>
*/
String getVersion(@Param("id") Long id);
}
package org.arch.overall.mapper;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.base.utils.Constant;
import org.arch.common.modules.archoverall.entity.GraphRepository;
public interface GraphRepositoryMapper extends BaseMapper<GraphRepository> {
/**
* 初始化架构视图
*
* @return {@link Long }
*/
default Long initArchiView() {
GraphRepository repository = new GraphRepository();
repository.setGraphCode(IdUtil.fastUUID());
repository.setContent(Constant.MX_MODEL_GRAPH);
repository.setGraphType(Constant.ARCHI_VIEW_DATA);
insert(repository);
return repository.getGraphId();
}
/**
* 初始化原模型
*
* @return {@link Long }
*/
default Long initArchiModel() {
GraphRepository repository = new GraphRepository();
repository.setGraphCode(IdUtil.fastUUID());
repository.setContent(Constant.MX_MODEL_GRAPH);
repository.setGraphType(Constant.META_MODEL_DATA);
insert(repository);
return repository.getGraphId();
}
}
\ No newline at end of file
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetVisalDTO;
import org.arch.common.modules.archoverall.dto.DelDTO;
import org.arch.common.modules.archoverall.vo.ArchVisualVO;
import org.arch.common.modules.archoverall.dto.ArchiDto;
import org.arch.common.modules.archoverall.entity.ArchiElementNestRelation;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import java.util.List;
import java.util.Map;
/**
* <p>
* 资产架构 服务类
* </p>
*
* @author author
* @since 2024-01-09
*/
public interface ArchiAssetInfoService extends IService<AssetInfo> {
/**
* 资产分页
*
* @param params 参数
* @return {@link IPage }<{@link AssetInfo }>
*/
IPage<AssetInfo> iPage(ArchiAssetInfoDTO params);
/**
* 资产列表
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> assetList(ArchiAssetInfoDTO params);
Boolean inster(ArchiAssetInfoDTO params);
/**
* 架构资产信息详情
*
* @param assetId 资产 ID
* @return {@link AssetInfo}
*/
AssetInfo info(Long assetId);
Boolean update(ArchiAssetInfoDTO params);
/**
* 批量删除
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean delBatch(DelDTO requestMap);
String selectVer();
List<AssetInfo> qryTree(ArchiDto frameworkDto);
List<ArchiElementNestRelation> qyLastEle(ArchiAssetInfoDTO params);
Map<ArchiAssetInfoDTO, List<ArchiAssetInfoDTO>> getArchVisual(ArchVisualVO archVisualVO);
List<Map<String, Object>> getAssetVisalFirst(ArchiAssetVisalDTO archiAssetVisalDTO);
}
package org.arch.overall.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.arch.common.modules.archoverall.dto.*;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationQueryDTO;
import org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO;
import org.arch.common.modules.archoverall.vo.ArchiAssetVO;
import org.arch.common.modules.archoverall.vo.ArchiVersionVO;
import org.arch.common.modules.archoverall.vo.MxCellVO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import java.util.List;
/**
* 资产服务
*
* @author admin
* @date 2024/01/24
*/
public interface ArchiAssetService {
/**
* 总体架构资产自动图形化
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<Tree<String>> automaticGraphing(ArchiAssetDTO model);
/**
* 总体架构资产智能搜索
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeList(ArchiAssetDTO model);
/**
* 根据元素查询对应的资产
*
* @param elementId 元素 ID
* @return {@link List }<{@link ArchiAssetVO }>
*/
List<ArchiAssetVO> findAssertByElementId(Long elementId);
/**
* 总体架构可视化展示
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeListView(ArchiAssetDTO model);
/**
* 根据元模型id获取mxCell
*
* @param metaModelId 元模型id
*/
List<MxCellVO> getMxCellByMetaModelId(Long metaModelId);
/**
* 架构资产版本
*
* @param params 参数
* @return {@link List}<{@link ArchiVersionVO}>
*/
List<ArchiVersionVO> queryArchiVersion(ArchiVersionVO params);
//------------------------------------资产关系------------------------------------
/**
* 添加资产关系
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean addAssetRelation(ArchiAssetsRelationDTO params);
/**
* 修改资产
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean updateAssetRelation(ArchiAssetsRelationDTO params);
/**
* 删除资产关系
*
* @param dto DTO
* @return {@link Boolean }
*/
Boolean del(BatchRemoveDTO dto);
/**
* 发布/停用
*
* @param dto DTO
* @return {@link Boolean }
*/
Boolean post(ArchiRelaSatePostDTO dto);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
IPage<ArchiAbilityAssetsRelationQueryVO> queryAssetRelation(ArchiAssetsRelationQueryDTO params);
/**
* 查询资产关系详情
*
* @param params 参数
* @return {@link List}<{@link ArchiAbilityAssetsRelationQueryVO}>
*/
ArchiAbilityAssetsRelationQueryVO queryAssetRelationDetail(ArchiAssetsRelationQueryDTO params);
/**
* 最大版本
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> maxVer(ArchiAssetInfoDTO params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.DelDTO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.vo.AssetInfoLevelVO;
import java.util.List;
/**
* <p>
* 资产架构 服务类
* </p>
*
* @author author
* @since 2024-01-09
*/
public interface ArchiAssetSysService extends IService<AssetInfo> {
/**
* 分页查询
*
* @param params 参数
* @return {@link IPage }<{@link AssetInfo }>
*/
IPage<AssetInfo> iPage(ArchiAssetInfoDTO params);
/**
* 列表查询
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> assetList(ArchiAssetInfoDTO params);
Boolean inster(ArchiAssetInfoDTO params);
Boolean update(ArchiAssetInfoDTO params);
/**
* 批量删除
*
* @param params 参数
*/
Boolean delBatch(DelDTO params);
Boolean extend(ArchiAssetInfoDTO params);
List<AssetInfoLevelVO> assetInfoLevel(ArchiAssetInfoDTO params);
/**
* 停用
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean stop(ArchiAssetInfoDTO params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import java.util.List;
import java.util.Map;
public interface ArchiElePropertyService extends IService<ArchiEleProperty>{
List<ArchiEleProperty> gtArchiElePropertyList(ArchiEleProperty ynMolProyls);
/**
* 批量修改属性
*
* @param requestList 请求列表
* @return {@link Boolean }
*/
Boolean updateEleRelBatch(List<Map<String, Object>> requestList);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaConstrainDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import java.util.List;
public interface ArchiEleRelaService extends IService<ArchiEleRela> {
/**
* 分页查询元素关系
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiEleRela }>
*/
IPage<ArchiEleRela> gtArchiEleRela(ArchiEleRelaDTO dto);
/**
* 列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiEleRela }>
*/
List<ArchiEleRela> gtEleRelList(ArchiEleRelaDTO dto);
/**
* 根据元素关系编码查询约束条件
*
* @param eleRelaId 元素关系ID
*/
List<ArchiEleRelaConstrainDTO> getArchiEleRelaConstraint(Long eleRelaId);
/**
* 根据元素关系ID查询元素关系
* 元素带属性
*
* @param constrainId 约束 ID
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId);
/**
* 查询资产关系
*
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaNameVO> findEleRelaList();
/**
* 批量发布
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean updBatch(BatchUpdateRelaDTO requestMap);
/**
* 删除
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean del(ArchiEleRela params);
/**
* 插入
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean insert(ArchiEleRela params);
/**
* 更新
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean update(ArchiEleRela params);
/**
* 批量新增元素和元素关系
*
* @param archiEleRelas 对象
*/
void addArchiEleRelaConstraint(ArchiEleRela archiEleRelas);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import java.util.List;
public interface ArchiElementService extends IService<ArchiElement> {
/**
* 元素列表
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiElement }>
*/
IPage<ArchiElement> gtArchiElement(ArchiElementDTO dto);
/**
* 新增元素
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean insert(ArchiElement params);
/**
* 更新
*
* @param archiElement Archi 元素
* @return {@link Boolean }
*/
Boolean update(ArchiElement archiElement);
/**
* 删除
*
* @param archiElement Archi 元素
* @return {@link Boolean }
*/
Boolean delete(ArchiElement archiElement);
/**
* 批量发布
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean updEleBatch(BatchUpdateDTO requestMap);
/**
* 元素列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEleList(ArchiElementDTO dto);
/**
* 查找元模型属性
*
* @param type 类型
* @param idList ID 列表
* @return {@link List }<{@link ArchiEleProperty }>
*/
List<ArchiEleProperty> findMetaModelProperties(int type, List<Long> idList);
/**
* 查询元素列表
*
* @param params 参数
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEle(ArchiElement params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.ArchiListResultDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import java.util.List;
public interface ArchiMetaModelService extends IService<ArchiMetaModel> {
/**
* 删除
*
* @param archiMetaModels Archi 元模型
* @return {@link Boolean }
*/
Boolean del(ArchiMetaModel archiMetaModels);
List<ArchiMetaModel> selectVer();
/**
* 插入
*
* @param dto DTO
* @return {@link Boolean }
*/
Long insert(ArchiMetaModel dto);
/**
* 更新
*
* @return {@link Boolean }
*/
Boolean update(ArchiMetaModel dto);
/**
* 更新 MX 图形模型
*
* @param dto DTO
* @return int
*/
Boolean updateMxGraphModel(ArchiMetaModelDTO dto);
/**
* 查询架构原模型
*
* @param id 同上
* @return {@link ArchiMetaModel}
*/
ArchiMetaModel findMetaModelById(Long id);
/**
* 获取画布左侧资产列表
*
* @param params 参数
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getArchiAssetList(ArchiAssetInfoDTO params);
/**
* 分页列表
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiMetaModel }>
*/
IPage<ArchiMetaModel> gtArchiMetaModel(ArchiMetaModelDTO dto);
/**
* 获取画布左侧资产列表
*
* @param params 参数
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getArchiAssetList1(ArchiAssetInfoDTO params);
/**
* 获取画布左侧标准元素列表
*
* @param type 类型 1:常规图元 2:标准图元
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getEleListLeft(Integer type);
}
package org.arch.overall.service;
import org.arch.common.modules.archoverall.vo.ArchiModelDictVO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.mapstruct.Mapper;
/**
* <p>
*
* </p>
*
* @author makejava
* @since 2023-12-25
*/
@Mapper(componentModel = "spring")
public interface ArchiModelDictCovert {
ArchiModelDictVO convertToVO(ArchiModelDict archiModelDict);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDetailDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
import java.util.List;
/**
* <p>
* 元模型数据字典详情 服务类
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictDetailService extends IService<ArchiModelDictDetail> {
Boolean insert(List<ArchiModelDictDetailDTO> dto);
Boolean update(ArchiModelDictDetailDTO dto);
Boolean del(BathRemoveDTO dto);
List<ArchiModelDictDetailVO> getDictDetails(String key);
List<ArchiModelDict> getAllDict();
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import java.util.List;
/**
* <p>
* 元模型数据字典 服务类
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictService extends IService<ArchiModelDict> {
IPage<ArchiModelDictVO> page(ArchiModelDictDTO dto);
Boolean insert(ArchiModelDictDTO dto);
Boolean update(ArchiModelDictDTO dto);
ArchiModelDictVO detail(ArchiModelDictDTO dto);
Boolean post(ArchiModelDictDTO dto);
Boolean del(BathRemoveDTO dto);
/**
* 获取元模型字典详情
*
* @param value 字典值
* @return {@link List }<{@link ArchiModelDictDetailVO }>
*/
List<ArchiModelDictDetailVO> getDictDetails(String value);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.entity.ArchiView;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
import org.jetbrains.annotations.NotNull;
import org.springframework.transaction.annotation.Transactional;
public interface ArchiViewEleService extends IService<ArchiViewEle> {
@Transactional(rollbackFor = Exception.class)
default Boolean createArchiViewEle(@NotNull ArchiView params) {
ArchiViewEle archiViewEles = new ArchiViewEle();
archiViewEles.setArchiViewId(params.getViewId());
archiViewEles.setArchiEleId(params.getArchiEleId());
archiViewEles.setEleName(params.getEleName());
archiViewEles.setArchiEleRelId(params.getArchiEleRelId());
archiViewEles.setRelName(params.getRelName());
archiViewEles.setType(params.getType());
return save(archiViewEles);
}
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ArchiViewDTO;
import org.arch.common.modules.archoverall.dto.BatchRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiView;
public interface ArchiViewService extends IService<ArchiView> {
IPage<ArchiView> gtArchiView(ArchiViewDTO dto, Page<ArchiView> page);
Boolean insert(ArchiView vwDiss);
Boolean update(ArchiView vwDiss);
Boolean updEleBatch(BatchRemoveDTO requestMap);
Boolean delArchiView(ArchiView vwDis);
}
package org.arch.overall.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.overall.mapper.ArchiElePropertyMapper;
import org.arch.overall.service.ArchiElePropertyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class ArchiElePropertyImpl extends ServiceImpl<ArchiElePropertyMapper, ArchiEleProperty> implements ArchiElePropertyService {
@Autowired
private ArchiElePropertyMapper archiElePropertyMapper;
@Override
public List<ArchiEleProperty> gtArchiElePropertyList(ArchiEleProperty ynMolProyls) {
List<ArchiEleProperty> YnMolProyList = archiElePropertyMapper.gtArchiElePropertyList(ynMolProyls);
return YnMolProyList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateEleRelBatch(List<Map<String, Object>> requestList) {
List<ArchiEleProperty> updatedDataList = new ArrayList<>();
for (Map<String, Object> requestData : requestList) {
Integer propertyId = (Integer) requestData.get("propertyId");
String propertyValue = (String) requestData.get("propertyValue");
QueryWrapper<ArchiEleProperty> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("property_id", propertyId);
ArchiEleProperty archiEleProperty = getOne(queryWrapper);
if (archiEleProperty != null) {
archiEleProperty.setPropertyValue(propertyValue);
updatedDataList.add(archiEleProperty);
}
}
return updateBatchById(updatedDataList);
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.base.utils.VersionUtil;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaConstrainDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.mapper.ArchiEleRelaConstrainMapper;
import org.arch.overall.mapper.ArchiEleRelaMapper;
import org.arch.overall.mapper.ArchiElementMapper;
import org.arch.overall.service.ArchiEleRelaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service
public class ArchiEleRelaImpl extends ServiceImpl<ArchiEleRelaMapper, ArchiEleRela> implements ArchiEleRelaService {
@Autowired
private ArchiEleRelaService archiEleRelaService;
@Autowired
private ArchiEleRelaMapper archiEleRelaMapper;
@Autowired
private ArchiEleRelaConstrainMapper archiEleRelaConstrainMapper;
@Autowired
private ArchiElementMapper archiElementMapper;
@Override
public IPage<ArchiEleRela> gtArchiEleRela(ArchiEleRelaDTO dto) {
IPage<ArchiEleRela> page = archiEleRelaMapper.gtArchiEleRela(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize()));
List<ArchiEleRela> records = page.getRecords();
for (ArchiEleRela record : records) {
record.setArrList(archiEleRelaService.getArchiEleRelaConstraint(record.getEleRelaId()));
}
return page;
}
@Override
public List<ArchiEleRela> gtEleRelList(ArchiEleRelaDTO dto) {
return archiEleRelaMapper.gtEleRelList(dto);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addArchiEleRelaConstraint(ArchiEleRela archiEleRelas) {
List<ArchiEleRelaConstrainDTO> arrList = archiEleRelas.getArrList();
if (CollUtil.isNotEmpty(arrList)) {
List<ArchiEleRelaConstrain> list = new ArrayList<>();
arrList.forEach(it -> {
ArchiEleRelaConstrain item = new ArchiEleRelaConstrain();
ArchiElement source = archiElementMapper.selectById(it.getEleGtId());
ArchiElement target = archiElementMapper.selectById(it.getEleLtId());
if (Objects.nonNull(source)) {
item.setEleGtId(it.getEleGtId());
item.setEleGtName(source.getElementName());
}
if (Objects.nonNull(target)) {
item.setEleLtId(it.getEleLtId());
item.setEleLtName(target.getElementName());
}
item.setLastUpdateTime(new Date());
item.setCreateTime(Calendar.getInstance().getTime());
item.setScope(it.getScope());
item.setEleRelaId(archiEleRelas.getEleRelaId());
item.setEleRelaName(archiEleRelas.getRsName());
list.add(item);
});
// 新增或者更新时删除之前历史
archiEleRelaConstrainMapper.delByRelaId(archiEleRelas.getEleRelaId());
archiEleRelaConstrainMapper.batchInsert(list);
}
}
@Override
public List<ArchiEleRelaConstrainDTO> getArchiEleRelaConstraint(Long eleRelaId) {
List<ArchiEleRelaConstrain> archiEleRelaConstraint = archiEleRelaConstrainMapper.getArchiEleRelaConstraint(eleRelaId);
return BeanUtil.copyToList(archiEleRelaConstraint, ArchiEleRelaConstrainDTO.class);
}
@Override
public List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId) {
return archiEleRelaConstrainMapper.findEleRelaConstrainList(constrainId);
}
@Override
public List<ArchiEleRelaNameVO> findEleRelaList() {
return baseMapper.findEleRelaList();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updBatch(BatchUpdateRelaDTO requestMap) {
List<Long> eleRelaId = requestMap.getEleRelaId();
Assert.isFalse(CollectionUtils.isEmpty(eleRelaId), "元素关系ID不能为空");
eleRelaId.forEach(it -> {
ArchiEleRela archiEleRela = baseMapper.selectById(it);
Assert.notNull(archiEleRela, "未找到元素关系");
Integer state = archiEleRela.getState();
Assert.isFalse(1 == state, "当前状态下不可发布!");
String version = baseMapper.getVersion(it);
archiEleRela.setState(1);
archiEleRela.setVersion(VersionUtil.getNextVersion(version));
archiEleRela.updateById();
});
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean del(ArchiEleRela params) {
Long eleRelaId = params.getEleRelaId();
ArchiEleRela eleRela = getById(eleRelaId);
Assert.notNull(eleRela, "未找到元素关系");
return eleRela.deleteById();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insert(ArchiEleRela archiEleRelas) {
archiEleRelas.setEleRelaCode(UUID.fastUUID().toString());
archiEleRelas.setDelFlag(0);
Assert.isFalse(archiEleRelas.getRsName().length() > 100,
"元素关系名称太长请修改为100个字符以内再提交!");
return save(archiEleRelas);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean update(ArchiEleRela params) {
Long eleRelaId = params.getEleRelaId();
ArchiEleRela eleRela = getById(eleRelaId);
Assert.notNull(eleRela, "未找到元素关系");
Integer state = params.getState();
if (1 == state) {
String ver = VersionUtil.getNextVersion(baseMapper.getVersion(eleRelaId));
params.setVersion(ver);
}
BeanUtil.copyProperties(params, eleRela, "createTime");
return eleRela.updateById();
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import org.arch.base.utils.VersionUtil;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.mapper.ArchiElePropertyMapper;
import org.arch.overall.mapper.ArchiElementMapper;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.overall.service.ArchiElementService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service
public class ArchiElementImpl extends ServiceImpl<ArchiElementMapper, ArchiElement> implements ArchiElementService {
@Resource
private ArchiElementMapper archiElementMapper;
@Resource
private ArchiElePropertyMapper archiElePropertyMapper;
public IPage<ArchiElement> gtArchiElement(ArchiElementDTO dto) {
return archiElementMapper.gtArchiElement(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize()));
}
@Override
public Boolean insert(ArchiElement archiElements) {
archiElements.setElementCode(UUID.fastUUID().toString());
if (archiElements.getState() == 1) {
List<ArchiElement> list = archiElementMapper.initVersion();
for (ArchiElement element : list) {
if (element.getVersion() != null) {
archiElements.setVersion(element.getVersion());
break;
}
}
LambdaQueryWrapper<ArchiElement> wrapper = Wrappers.lambdaQuery(ArchiElement.class).select().eq(StrUtil.isNotBlank(archiElements.getElementName()), ArchiElement::getElementName, archiElements.getElementName()).eq(Objects.nonNull(archiElements.getArchiBelongId()), ArchiElement::getArchiBelongId, archiElements.getArchiBelongId()).ne(Objects.nonNull(archiElements.getElementId()), ArchiElement::getElementId, archiElements.getElementId());
List<ArchiElement> eleList = archiElementMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(eleList)) {
eleList.forEach(e -> {
e.setState(0);
archiElementMapper.updateById(e);
});
}
List<ArchiElement> maxVer = archiElementMapper.maxVer(archiElements);
if (!CollectionUtils.isEmpty(maxVer)) {
String lastMaxVer = maxVer.get(0).getVersion();
String ver = VersionUtil.getNextVersion(lastMaxVer);
archiElements.setVersion(ver);
}
}
archiElements.setDelFlag(0);
return save(archiElements);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delete(ArchiElement archiElement) {
ArchiElement model = getById(archiElement.getElementId());
Assert.notNull(model, "未找到元素");
Integer state = model.getState();
Assert.isFalse(1 == state, "当前状态下不可删除!");
return removeById(archiElement);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updEleBatch(BatchUpdateDTO requestMap) {
List<Long> elementId = requestMap.getElementId();
Assert.isFalse(CollectionUtils.isEmpty(elementId), "元素ID不能为空");
elementId.forEach(it -> {
ArchiElement archiElement = archiElementMapper.selectById(it);
Assert.notNull(archiElement, "未找到元素");
Integer state = archiElement.getState();
Assert.isFalse(1 == state, "当前状态下不可发布!");
String version = archiElementMapper.getVersion(it);
archiElement.setState(1);
archiElement.setVersion(VersionUtil.getNextVersion(version));
archiElement.updateById();
});
return Boolean.TRUE;
}
@Override
public List<ArchiElement> gtEleList(ArchiElementDTO dto) {
return archiElementMapper.gtEleList(dto);
}
@Override
public List<ArchiEleProperty> findMetaModelProperties(int type, List<Long> eleIdList) {
LambdaQueryWrapper<ArchiEleProperty> wrapper = new LambdaQueryWrapper<ArchiEleProperty>().eq(ArchiEleProperty::getType, type).in(ArchiEleProperty::getTypeId, eleIdList).eq(ArchiEleProperty::getDelFlag, 0);
return archiElePropertyMapper.selectList(wrapper);
}
@Override
public List<ArchiElement> gtEle(ArchiElement params) {
LambdaQueryWrapper<ArchiElement> wrapper = new LambdaQueryWrapper<ArchiElement>().like(StrUtil.isNotBlank(params.getElementName()), ArchiElement::getElementName, params.getElementName()).eq(Objects.nonNull(params.getArchiBelongId()), ArchiElement::getArchiBelongId, params.getArchiBelongId()).eq(Objects.nonNull(params.getEaLevel()), ArchiElement::getEaLevel, params.getEaLevel()).eq(Objects.nonNull(params.getEleType()), ArchiElement::getEleType, params.getEleType()).eq(Objects.nonNull(params.getState()), ArchiElement::getState, params.getState()).eq(ArchiElement::getDelFlag, 0).orderByDesc(ArchiElement::getCreateTime);
return archiElementMapper.selectList(wrapper);
}
@Override
public Boolean update(ArchiElement archiElement) {
Integer state = archiElement.getState();
if (archiElement.getElementId() == null) {
throw new IllegalArgumentException("修改元素主键不能为空!");
}
// 发布生成新版本,须传元素名称
List<ArchiElement> lists = archiElementMapper.gtArcEleByName(archiElement);
if (state == 1 && !lists.isEmpty() && lists.get(0).getVersion() == null) {
List<ArchiElement> list = archiElementMapper.initVersion();
for (ArchiElement element : list) {
if (element.getVersion() != null) {
archiElement.setVersion(element.getVersion());
break;
}
}
} else if (state == 1 && !lists.isEmpty() && lists.get(0).getVersion() != null) {
LambdaQueryWrapper<ArchiElement> wrapper = Wrappers.lambdaQuery(ArchiElement.class).select().eq(StrUtil.isNotBlank(archiElement.getElementName()), ArchiElement::getElementName, archiElement.getElementName()).eq(Objects.nonNull(archiElement.getArchiBelongId()), ArchiElement::getArchiBelongId, archiElement.getArchiBelongId()).ne(Objects.nonNull(archiElement.getElementId()), ArchiElement::getElementId, archiElement.getElementId());
List<ArchiElement> eleList = archiElementMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(eleList)) {
eleList.forEach(e -> {
e.setState(0);
archiElementMapper.updateById(e);
});
}
List<ArchiElement> maxVer = archiElementMapper.maxVer(archiElement);
if (!CollectionUtils.isEmpty(maxVer)) {
String lastMaxVer = maxVer.get(0).getVersion();
String ver = VersionUtil.getNextVersion(lastMaxVer);
archiElement.setVersion(ver);
}
}
archiElement.setLastUpdateTime(new Date());
archiElementMapper.updateById(archiElement);
return true;
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDetailDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
import org.arch.overall.mapper.ArchiModelDictDetailMapper;
import org.arch.overall.mapper.ArchiModelDictMapper;
import org.arch.overall.service.ArchiModelDictDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 元模型数据字典详情 服务实现类
* </p>
*
* @author
* @since 2024-02-22
*/
@Service
@RequiredArgsConstructor
public class ArchiModelDictDetailServiceImpl extends ServiceImpl<ArchiModelDictDetailMapper, ArchiModelDictDetail> implements ArchiModelDictDetailService {
private final ArchiModelDictMapper archiModelDictMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insert(List<ArchiModelDictDetailDTO> dto) {
List<ArchiModelDictDetail> details = new ArrayList<>();
dto.forEach(it -> {
ArchiModelDictDetail detail = new ArchiModelDictDetail();
Long dictId = it.getDictId();
String label = it.getLabel();
String value = it.getValue();
Assert.notNull(dictId, "数据字典ID不能为空");
Assert.notBlank(label, "字段中文名不能为空");
Assert.notBlank(value, "字段值不能为空");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDictDetail::getDictId, it.getDictId());
wrapper.eq(ArchiModelDictDetail::getLabel, it.getLabel());
Assert.isFalse(count(wrapper) > 0, "字典中文名已存在");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper1 = Wrappers.lambdaQuery();
wrapper1.eq(ArchiModelDictDetail::getDictId, it.getDictId());
wrapper1.eq(ArchiModelDictDetail::getValue, it.getValue());
Assert.isFalse(count(wrapper1) > 0, "字段值已存在");
detail.setDictId(dictId);
detail.setLabel(label);
detail.setValue(value);
detail.setSort(it.getSort());
detail.setRemark(it.getRemark());
details.add(detail);
});
return saveBatch(details);
}
@Override
public Boolean update(ArchiModelDictDetailDTO dto) {
ArchiModelDictDetail detail = new ArchiModelDictDetail();
Long id = dto.getId();
String label = dto.getLabel();
String value = dto.getValue();
ArchiModelDictDetail model = baseMapper.selectById(id);
Assert.notNull(id, "数据字典详情ID不能为空");
Assert.notBlank(label, "字段中文名不能为空");
Assert.notBlank(value, "字段值不能为空");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDictDetail::getLabel, dto.getLabel());
wrapper.eq(ArchiModelDictDetail::getDictId, model.getDictId());
wrapper.notIn(ArchiModelDictDetail::getId, dto.getId());
Assert.isFalse(count(wrapper) > 0, "字典中文名已存在");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper1 = Wrappers.lambdaQuery();
wrapper1.eq(ArchiModelDictDetail::getValue, dto.getValue());
wrapper1.eq(ArchiModelDictDetail::getDictId, model.getDictId());
wrapper1.notIn(ArchiModelDictDetail::getId, dto.getId());
Assert.isFalse(count(wrapper1) > 0, "字段值已存在");
BeanUtil.copyProperties(dto, detail);
return updateById(detail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean del(BathRemoveDTO dto) {
List<Long> ids = dto.getIds();
Assert.isFalse(CollUtil.isEmpty(ids), "请至少选择一条记录");
ids.forEach(it -> {
ArchiModelDictDetail detail = baseMapper.selectById(it);
Assert.notNull(detail, "该数据不存在");
});
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<ArchiModelDictDetailVO> getDictDetails(String key) {
return baseMapper.selectJoinList(ArchiModelDictDetailVO.class,
new MPJLambdaWrapper<ArchiModelDictDetail>()
.selectAll(ArchiModelDictDetail.class)
.leftJoin(ArchiModelDict.class, ArchiModelDict::getId, ArchiModelDictDetail::getDictId)
.eq(ArchiModelDict::getTypeValue, key)
.eq(ArchiModelDict::getState, 1)
.orderByAsc(ArchiModelDictDetail::getSort));
}
@Override
public List<ArchiModelDict> getAllDict() {
LambdaQueryWrapper<ArchiModelDict> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDict::getState, 1);
return archiModelDictMapper.selectList(wrapper);
}
}
package org.arch.overall.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
import org.arch.overall.mapper.ArchiViewEleMapper;
import org.arch.overall.service.ArchiViewEleService;
import org.springframework.stereotype.Service;
@Service
public class ArchiViewEleImpl extends ServiceImpl<ArchiViewEleMapper, ArchiViewEle> implements ArchiViewEleService {
}
package org.arch.overall.utils;
import org.apache.commons.lang3.StringUtils;
import org.arch.base.utils.Constant;
import org.arch.overall.mapper.ArchiAssetInfoMapper;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.stream.IntStream;
/**
* 生成资产编码工具类
*/
@Service
public class GenerateAssetCodeUtils {
public static GenerateAssetCodeUtils assetUtils;
@Resource
private ArchiAssetInfoMapper assetInfoMapper;
@PostConstruct
public void init() {
assetUtils = this;
assetUtils.assetInfoMapper = this.assetInfoMapper;
}
/**
* @param archiType 架构类型
* @param superiorAssetCode 所选的上级资产编号
* @param assetCode 资产编码,当创建资产为根节点时 该参数必传
* @return
*/
public static String getTotalityAssetCode(String archiType, String superiorAssetCode, String assetCode,String archiStage) {
String code = "";
if (StringUtils.isEmpty(archiType)) {
throw new NullPointerException("架构类型不能为空!");
}
//判断选择的节点是否为根节点,如果选择的是无则代表该节点未根节点,编码前端创建,否则自动生成
if (StringUtils.isEmpty(superiorAssetCode)) {
throw new NullPointerException("请选择上级资产!");
}
//选择无代表为根节点
if (Constant.NO.equals(superiorAssetCode)) {
if (StringUtils.isEmpty(assetCode)) {
throw new NullPointerException("当上级节点选择无时,资产编码必输!");
} else {
return assetCode.toUpperCase();
}
}
//如果有上级资产则通过编码获取该所选级别下一级末尾最大的值
int num = getNum(superiorAssetCode, '-') + 1;
Integer maxNum = assetUtils.assetInfoMapper.getArchiAssetMaxNum(archiType, superiorAssetCode, num,archiStage);
if (null == maxNum) {
maxNum = 0;
}
StringBuilder sb = new StringBuilder();
if (maxNum < 9) {
code = sb.append(superiorAssetCode).append("-").append("0").append(maxNum + 1).toString();
} else {
code = sb.append(superiorAssetCode).append("-").append(maxNum + 1).toString();
}
return code.toUpperCase();
}
/**
* 获取指定字符的数量
*
* @param input 输入的内容
* @param charCode
* @return
*/
public static int getNum(String input, char charCode) {
return IntStream.range(0, input.length())
.filter(i -> input.charAt(i) == charCode)
.map(i -> 1)
.sum();
}
}
server:
port: 17003
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-filters.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
- data-id: common-mybatis.${nacos.file-extension}
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: dev
server:
port: 17003
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
server:
port: 17003
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: sit
spring:
application:
name: arch-overall
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="./logs"/>
<property name="LOG_NAME" value="arch-overall"/>
<!--从配置中心加载数据-->
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<springProperty scope="context" name="logstashDestination" source="logstash.destination"/>
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件INFO -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件ERROR -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--nacos 心跳 INFO 屏蔽-->
<logger name="com.alibaba.nacos" level="OFF">
<appender-ref ref="ERROR_FILE"/>
</logger>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="com.xxl.job.core" level="DEBUG"/>
<logger name="org.apache.http.impl.conn" level="INFO"/>
<logger name="springfox.documentation" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="com.baomidou.mybatisplus" level="INFO" />
<!-- 本地环境 -->
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- 其它环境 -->
<springProfile name="dev,test,stage,prod,sit,uat,default">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiAbilityAssetsRelationMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation">
<!--@Table archi_ability_assets_relation-->
<result property="relaId" column="rela_id" jdbcType="INTEGER"/>
<result property="assetId" column="asset_id" jdbcType="INTEGER"/>
<result property="assetCode" column="asset_code" jdbcType="VARCHAR"/>
<result property="assetName" column="asset_name" jdbcType="VARCHAR"/>
<result property="relaAssetId" column="rela_asset_id" jdbcType="INTEGER"/>
<result property="relaAssetCode" column="rela_asset_code" jdbcType="VARCHAR"/>
<result property="relaAssetName" column="rela_asset_name" jdbcType="VARCHAR"/>
<result property="archiTypeId" column="archi_type_id" jdbcType="INTEGER"/>
<result property="archiType" column="archi_type" jdbcType="VARCHAR"/>
<result property="versionId" column="version_id" jdbcType="INTEGER"/>
<result property="viewId" column="view_id" jdbcType="INTEGER"/>
<result property="creator" column="creator" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateby" column="updateby" jdbcType="INTEGER"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
<result property="eleName" column="ele_name" jdbcType="VARCHAR"/>
<result property="parentAssetIds" column="parent_asset_ids" jdbcType="VARCHAR"/>
<result property="parentAssetNames" column="parent_asset_names" jdbcType="VARCHAR"/>
<result property="state" column="state" jdbcType="INTEGER"/>
<result property="eleRelaId" column="ele_rela_id" jdbcType="INTEGER"/>
<result property="iconId" column="icon_id" jdbcType="INTEGER"/>
<result property="assetRelaId" column="asset_rela_id" jdbcType="INTEGER"/>
</resultMap>
<insert id="addBach" keyProperty="relaId" useGeneratedKeys="true">
<foreach collection="entities" item="entity" separator=";">
insert into archi_ability_assets_relation(
<trim suffixOverrides=",">
<if test="entity.assetId != null">asset_id,</if>
<if test="entity.assetCode != null">asset_code,</if>
<if test="entity.assetName != null">asset_name,</if>
<if test="entity.relaAssetId != null">rela_asset_id,</if>
<if test="entity.relaAssetCode != null">rela_asset_code,</if>
<if test="entity.relaAssetName != null">rela_asset_name,</if>
<if test="entity.archiTypeId != null">archi_type_id,</if>
<if test="entity.archiType != null">archi_type,</if>
<if test="entity.versionId != null">version_id,</if>
<if test="entity.viewId != null">view_id,</if>
<if test="entity.creator != null">creator,</if>
<if test="entity.createTime != null">create_time,</if>
<if test="entity.updateby != null">updateby,</if>
<if test="entity.updateTime != null">update_time,</if>
<if test="entity.delFlag != null">del_flag,</if>
<if test="entity.parentAssetIds != null">parent_asset_ids,</if>
<if test="entity.parentAssetNames != null">parent_asset_names</if>
</trim>
)
values
<!-- <trim prefix="(" suffix=")" suffixOverrides=",">-->
<trim suffixOverrides=",">
(
<if test="entity.assetId != null">#{entity.assetId},</if>
<if test="entity.assetCode != null">#{entity.assetCode},</if>
<if test="entity.assetName != null">#{entity.assetName},</if>
<if test="entity.relaAssetId != null">#{entity.relaAssetId},</if>
<if test="entity.relaAssetCode != null">#{entity.relaAssetCode},</if>
<if test="entity.relaAssetName != null">#{entity.relaAssetName},</if>
<if test="entity.archiTypeId != null">#{entity.archiTypeId},</if>
<if test="entity.archiType != null">#{entity.archiType},</if>
<if test="entity.versionId != null">#{entity.versionId},</if>
<if test="entity.viewId != null">#{entity.viewId},</if>
<if test="entity.creator != null">#{entity.creator},</if>
<if test="entity.createTime != null">#{entity.createTime},</if>
<if test="entity.updateby != null"> #{entity.updateby},</if>
<if test="entity.updateTime != null">#{entity.updateTime},</if>
<if test="entity.delFlag != null">#{entity.delFlag},</if>
<if test="entity.parentAssetIds != null">#{entity.parentAssetIds},</if>
<if test="entity.parentAssetNames != null">#{entity.parentAssetNames}</if>
)
</trim>
</foreach>
</insert>
<delete id="removeBatchIds" parameterType="java.util.List">
DELETE FROM archi_ability_assets_relation WHERE rela_id IN
<foreach item="id" index="index" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="qryDataListPage" resultType="org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation">
SELECT *
FROM (
SELECT DISTINCT
aaa.*,
aai.fields_value AS fieldsValue
FROM
archi_ability_assets_relation aaa
JOIN archi_asset_info aai ON aaa.asset_id = aai.asset_id
WHERE
aaa.archi_type_id = aai.archi_belong_id
<if test=" dto.archiTypeId != null "> AND aaa.archi_type_id = #{dto.archiTypeId} </if>
<if test=" dto.assetName != null and dto.assetName != '' "> AND aai.asset_name LIKE CONCAT('%',#{dto.assetName},'%') </if>
<if test=" dto.beginTime != null "> AND aaa.create_time &gt;= #{dto.beginTime} </if>
<if test=" dto.endTime != null "> AND aaa.create_time &lt;= #{dto.endTime} </if>
AND aaa.del_flag = 0
AND aai.del_flag = 0
ORDER BY aaa.update_time DESC
) AS subquery
GROUP BY asset_name
</select>
<!--资产关系-->
<select id="queryAssetRelation" resultType="org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO">
select aaar.rela_id,
aaar.asset_id,
aaar.asset_code,
aaar.asset_name,
aaar.rela_asset_id,
aaar.rela_asset_code,
aaar.rela_asset_name,
aaar.archi_type_id,
aaar.archi_type,
aaar.version_id,
aaar.view_id,
aaar.creator,
aaar.create_time,
aaar.updateby,
aaar.update_time,
aaar.del_flag,
aaar.ele_name,
aaar.parent_asset_ids,
aaar.parent_asset_names,
aaar.ele_rela_id,
aaar.`state`,
aaar.icon_id,
aaer.rs_name
from archi_ability_assets_relation aaar
left join archi_asset_ele_rela aaer on aaar.asset_rela_id = aaer.asset_rela_id
<where>
<if test="params.relaAssetName != null and params.relaAssetName != ''">
and aaar.rela_asset_name like concat('%', #{params.relaAssetName}, '%')
</if>
<if test="params.assetName != null and params.assetName != ''">
and aaar.asset_name like concat('%', #{params.assetName}, '%')
</if>
<if test="params.rcName != null and params.rcName != ''">
and aaer.rs_name like concat('%', #{params.rcName}, '%')
</if>
<if test="params.state != null">
and aaar.state = #{params.state}
</if>
<if test="params.relaId != null">
and aaar.rela_id = #{params.relaId}
</if>
<if test="params.assetRelaId != null">
and aaar.asset_rela_id = #{params.assetRelaId}
</if>
and aaar.del_flag = 0
</where>
order by aaar.create_time desc
</select>
<!--资产关系数量-->
<select id="queryAssetRelationCountByTypeId" resultType="java.lang.Long">
select count(1)
from archi_ability_assets_relation aaar
where aaar.asset_rela_id = #{assetRelaId}
and aaar.del_flag = 0
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiElePropertyMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleProperty">
<result column="property_id" property="propertyId"/>
<result column="type_id" property="typeId"/>
<result column="type" property="type"/>
<result column="field_name" property="fieldName"/>
<result column="cn_name" property="cnName"/>
<result column="property_value" property="propertyValue"/>
<result column="display_order" property="displayOrder"/>
<result column="content_length" property="contentLength"/>
<result column="control_type" property="controlType"/>
<result column="dict_key" property="dictKey"/>
<result column="dicy_id" property="dicyId"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="default_value" property="defaultValue"/>
<result column="not_null" property="notNull"/>
<result column="is_show" property="isShow"/>
<result column="data_type" property="dataType"/>
<result column="data_type_name" property="dataTypeName"/>
<result column="sort" property="sort"/>
</resultMap>
<select id="gtArchiElePropertyList" resultMap="BaseResultMap">
SELECT aep.property_id,
aep.type_id,
aep.type,
aep.field_name,
aep.cn_name,
aep.display_order,
aep.content_length,
aep.control_type,
aep.dict_key,
aep.dicy_id,
aep.create_man,
aep.create_time,
aep.last_update_time,
aep.last_update_man,
aep.del_flag,
aep.default_value,
aep.not_null,
aep.is_show,
aep.data_type,
aep.data_type_name,
aep.sort,
aep.property_value
FROM archi_ele_property aep
<where>
AND aep.del_flag = 0
<if test="yp.typeId != null">
AND aep.type_id = #{yp.typeId}
</if>
<if test="yp.type != null">
AND aep.type = #{yp.type}
</if>
</where>
ORDER BY aep.sort
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiEleRelaConstrainMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain">
<!--@mbg.generated-->
<!--@Table archi_ele_rela_constrain-->
<id column="constrain_id" jdbcType="BIGINT" property="constrainId"/>
<result column="ele_gt_id" jdbcType="BIGINT" property="eleGtId"/>
<result column="ele_lt_id" jdbcType="BIGINT" property="eleLtId"/>
<result column="ele_gt_name" jdbcType="VARCHAR" property="eleGtName"/>
<result column="ele_lt_name" jdbcType="VARCHAR" property="eleLtName"/>
<result column="ele_rela_id" jdbcType="BIGINT" property="eleRelaId"/>
<result column="ele_rela_name" jdbcType="VARCHAR" property="eleRelaName"/>
<result column="scope" jdbcType="TINYINT" property="scope"/>
<result column="state" jdbcType="TINYINT" property="state"/>
<result column="create_man" jdbcType="BIGINT" property="createMan"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="last_update_time" jdbcType="TIMESTAMP" property="lastUpdateTime"/>
<result column="last_update_man" jdbcType="BIGINT" property="lastUpdateMan"/>
<result column="del_flag" jdbcType="TINYINT" property="delFlag"/>
</resultMap>
<!--元素和元素关系列表-->
<resultMap id="EleBaseResultMap" type="org.arch.common.modules.archoverall.vo.ArchiEleRelaVO">
<id column="ele_rela_id" jdbcType="BIGINT" property="eleRelaId"/>
<result column="ele_rela_name" jdbcType="VARCHAR" property="eleRelaName"/>
<result column="source_element_id" property="sourceElementId"/>
<result column="source_element_name" property="sourceElementName"/>
<result column="source_icon" property="sourceIcon"/>
<result column="source_icon_name" property="sourceIconName"/>
<result column="source_color" property="sourceIcon"/>
<result column="target_element_id" property="targetElementId"/>
<result column="target_element_name" property="targetElementName"/>
<result column="target_icon" property="targetIcon"/>
<result column="target_icon_name" property="targetIconName"/>
<result column="target_color" property="targetColor"/>
</resultMap>
<!--批量添加-->
<insert id="batchInsert">
insert into archi_ele_rela_constrain (ele_gt_id, ele_lt_id, ele_gt_name, ele_lt_name, ele_rela_id, ele_rela_name,
`scope`, create_man, create_time, last_update_time, last_update_man)
values
<foreach collection="list" item="item" separator=",">
(#{item.eleGtId}, #{item.eleLtId}, #{item.eleGtName}, #{item.eleLtName}, #{item.eleRelaId}, #{item.eleRelaName},
#{item.scope}, #{item.createMan}, #{item.createTime}, #{item.lastUpdateTime}, #{item.lastUpdateMan})
</foreach>
</insert>
<!--根据元素关系编码查询约束条件-->
<select id="getArchiEleRelaConstraint" resultMap="BaseResultMap">
select aerc.constrain_id,
aerc.ele_gt_id,
aerc.ele_lt_id,
aerc.ele_gt_name,
aerc.ele_lt_name,
aerc.ele_rela_id,
aerc.ele_rela_name,
aerc.`scope`
from archi_ele_rela_constrain aerc
where aerc.ele_rela_id = #{eleRelaId}
and aerc.del_flag = 0
</select>
<!--根据元素关系,删除元素关系-->
<delete id="delByRelaId">
delete
from archi_ele_rela_constrain aerc
where aerc.ele_rela_id = #{eleRelaId}
</delete>
<!--根据元素关系ID查询元素关系-->
<select id="findEleRelaConstrainList" resultMap="EleBaseResultMap">
select aerc.ele_rela_id,
aerc.ele_rela_name,
ae.element_id as source_element_id,
ae.element_name as source_element_name,
ae.icon as source_icon,
ae.icon_name as source_icon_name,
ae.color as source_color,
ae1.element_id as target_element_id,
ae1.element_name as target_element_name,
ae1.icon as target_icon,
ae1.icon_name as target_icon_name,
ae1.color as target_color
from archi_ele_rela_constrain aerc
left join archi_element ae on ae.element_id = aerc.ele_gt_id
left join archi_element ae1 on ae1.element_id = aerc.ele_lt_id
where aerc.ele_rela_id = #{eleRelaId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiEleRelaMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleRela">
<result column="ele_rela_id" property="eleRelaId"/>
<result column="ele_rela_code" property="eleRelaCode"/>
<result column="rs_name" property="rsName"/>
<result column="object1" property="object1"/>
<result column="object2" property="object2"/>
<result column="content" property="content"/>
<result column="icon" property="icon"/>
<result column="icon_name" property="iconName"/>
<result column="icon_id" property="iconId"/>
<result column="version" property="version"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="scope" property="scope"/>
</resultMap>
<!--分页-->
<select id="gtArchiEleRela" resultMap="BaseResultMap">
SELECT er.ele_rela_id,
er.ele_rela_code,
er.rs_name,
er.object1,
er.object2,
er.scope,
er.content,
er.icon,
er.icon_name,
er.version,
er.state,
er.create_man,
er.create_time,
er.last_update_time,
er.last_update_man,
er.del_flag,
er.icon_id
from archi_ele_rela er
where er.del_flag = '0'
<if test="dto.rsName != null and dto.rsName != ''">
and er.rs_name LIKE CONCAT('%', #{dto.rsName}, '%')
</if>
<if test="dto.state != null">
and er.state = #{dto.state}
</if>
order by er.create_time desc
</select>
<!--列表-->
<select id="gtEleRelList" resultMap="BaseResultMap">
select er.ele_rela_id,
er.ele_rela_code,
er.rs_name,
er.object1,
er.object2,
er.`scope`,
er.content,
er.icon,
er.icon_name,
er.version,
er.`state`,
er.create_man,
er.create_time,
er.last_update_time,
er.last_update_man,
er.del_flag,
er.icon_id,
er.shape_width,
er.shape_height
from archi_ele_rela er
<where>
and er.del_flag = '0'
<if test="dto.rsName != null and dto.rsName != ''">
and er.rs_name = #{dto.rsName}
</if>
<if test="dto.scope != null and dto.scope != ''">
and er.scope = #{dto.scope}
</if>
<if test="dto.state != null">
and er.state = #{dto.state}
</if>
</where>
order by er.create_time desc
</select>
<!--查询资产关系-->
<select id="findEleRelaList" resultType="org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO">
select aer.ele_rela_id,
aer.rs_name
from archi_ele_rela aer
where del_flag = '0'
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiElementMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiElement">
<result column="element_id" property="elementId"/>
<result column="element_code" property="elementCode"/>
<result column="element_name" property="elementName"/>
<result column="archi_level_id" property="archiLevelId"/>
<result column="archi_belong_id" property="archiBelongId"/>
<result column="ea_level" property="eaLevel"/>
<result column="ele_type" property="eleType"/>
<result column="content" property="content"/>
<result column="icon" property="icon"/>
<result column="icon_name" property="iconName"/>
<result column="color" property="color"/>
<result column="version" property="version"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="archi_level_code" property="archiLevelCode"/>
<result column="archi_belong_code" property="archiBelongCode"/>
</resultMap>
<select id="initVersion" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
SELECT CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-V', YEAR(NOW()) - 2023 - 1, '.', DATE_FORMAT(NOW(), '%m'), '.0') AS version;
</select>
<!--元素列表-->
<select id="gtArchiElement" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.*,
gm.graph_name as iconName,
gm.icon
from archi_element se
left join graph_meta_info gm on se.graph_id = gm.graph_id
<where>
<if test="dto.elementName != null and dto.elementName != ''">
and se.element_name like concat('%', #{dto.elementName}, '%')
</if>
<if test="dto.archiBelongId != null">
and se.archi_belong_id = #{dto.archiBelongId}
</if>
<if test="dto.state != null">
and se.state = #{dto.state}
</if>
<if test="dto.scope != null">
and se.scope = #{dto.scope}
</if>
and se.del_flag = '0'
</where>
order by se.create_time desc
</select>
<!--根据元素名称查询元素-->
<select id="gtArcEleByName" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.element_id,
se.element_name,
se.archi_belong_id,
se.color,
se.version
from archi_element se
<where>
and se.del_flag = '0'
<if test="do.elementName != null and do.elementName != ''">
and se.element_name = #{do.elementName}
</if>
<if test="do.elementId != null and do.elementId != ''">
and se.element_id = #{do.elementId}
</if>
</where>
order by se.create_time desc
</select>
<select id="gtEleList" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.*,
gm.graph_name as iconName,
gm.icon
from archi_element se
left join graph_meta_info gm ON se.graph_id = gm.graph_id
<where>
and se.del_flag = '0'
<if test="dto.elementName != null and dto.elementName != ''">
and se.element_name = #{dto.elementName}
</if>
<if test="dto.elementId != null">
and se.element_id = #{dto.elementId}
</if>
<if test="dto.archiBelongId != null">
and se.archi_belong_id = #{dto.archiBelongId}
</if>
<if test="dto.eleType != null">
and se.ele_type = #{dto.eleType}
</if>
<if test="dto.state != null">
and se.state = #{dto.state}
</if>
<if test="dto.eleIdList != null and dto.eleIdList.size() > 0">
and se.element_id in
<foreach item="eleId" collection="dto.eleIdList" open="(" separator="," close=")">
#{eleId}
</foreach>
</if>
<if test="dto.belongIdList != null and dto.belongIdList.size() > 0">
and se.archi_belong_id in
<foreach item="belongId" collection="dto.belongIdList" open="(" separator="," close=")">
#{belongId}
</foreach>
</if>
<if test="dto.scopeList != null and dto.scopeList.size() > 0">
and se.scope in
<foreach item="scope" collection="dto.scopeList" open="(" separator="," close=")">
#{scope}
</foreach>
</if>
</where>
order by se.create_time desc
</select>
<select id="maxVer" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
SELECT a.version
FROM archi_element a
<where>
<if test="elementName != null and elementName != ''">
and a.element_name = #{elementName}
</if>
<if test="archiBelongId != null">
and a.archi_belong_id = #{archiBelongId}
</if>
and a.del_flag = 0
</where>
ORDER BY CAST(SUBSTRING_INDEX(version, '.', -1) AS DECIMAL) DESC
LIMIT 1
</select>
<!-- 根据视图配置查询架构元素-->
<select id="queryEleByAssertView" resultMap="BaseResultMap">
select ae.element_id,
ae.element_code,
ae.element_name,
ae.archi_level_id,
ae.archi_belong_id,
ae.ea_level,
ae.content,
ae.color,
ae.version,
ae.`state`,
ae.ele_type,
ae.create_man,
ae.create_time,
ae.last_update_time,
ae.last_update_man,
ae.del_flag,
ae.archi_level_code,
ae.archi_belong_code,
ae.shape_width,
ae.shape_height,
ae.reference_relationship,
ae.example,
ae.`definition`,
ae.`scope`,
ae.graph_id
from archi_element ae
where find_in_set(ae.element_id,
(select ave.archi_ele_id from archi_view_ele ave where archi_view_id = #{viewId}))
and ae.state = 1
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
select ifnull(version, @i) from archi_element where element_id = #{elementId} for update
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiMetaModelMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiMetaModel">
<result column="meta_model_id" property="metaModelId"/>
<result column="meta_model_code" property="metaModelCode"/>
<result column="version" property="version"/>
<result column="ver_name" property="verName"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="meta_model_data" property="metaModelData"/>
<result column="meta_model_svg" property="metaModelSvg"/>
<result column="graph_id" property="graphId"/>
</resultMap>
<select id="selectVer" resultMap="BaseResultMap">
select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')), CHAR(45), '')), '-V', (SELECT (select date_format(now(), '%Y')) - 2023 + 1), '.',
(select date_format(now(), '%m')), '.', '1')) as version
</select>
<!--列表-->
<select id="getYnMol" resultMap="BaseResultMap">
Select mm.meta_model_id,
mm.meta_model_code,
mm.version,
mm.ver_name,
mm.create_man,
mm.create_time,
mm.last_update_time,
mm.last_update_man,
mm.del_flag,
mm.state,
gr.graph_id,
gr.icon as meta_model_svg,
gr.content as meta_model_data
FROM archi_meta_model mm
left join graph_repository gr on mm.graph_id = gr.graph_id
<where>
AND mm.del_flag = 0
<if test="dto.verName != null and dto.verName != ''">
AND mm.ver_name LIKE CONCAT('%', #{dto.verName}, '%')
</if>
<if test="dto.state != null">
AND mm.state = #{dto.state}
</if>
</where>
order by mm.create_time desc
</select>
<!--更新画布信息和svg缩略图-->
<update id="updateMxGraphModel">
update archi_meta_model
set graph_id = #{graphId},
last_update_time = now()
where meta_model_id = #{metaModelId}
</update>
<!-- 元模型画布细信息-->
<select id="getMxCellByMetaModelId" resultType="java.lang.String">
select gr.content
from archi_meta_model amm
left join graph_repository gr on amm.graph_id = gr.graph_id
where amm.meta_model_id = #{metaModelId}
and amm.del_flag = '0'
</select>
<!-- 元模型画布缩略图-->
<select id="findMetaModelById" resultMap="BaseResultMap">
select amm.meta_model_id,
amm.meta_model_code,
amm.ver_name,
amm.version,
amm.state,
amm.graph_id,
gr.icon as meta_model_svg,
ifnull(gr.content, '${@com.eadc.common.Constant@MX_MODEL_GRAPH}') as meta_model_data
from archi_meta_model amm
left join graph_repository gr on amm.graph_id = gr.graph_id
where amm.meta_model_id = #{metaModelId}
and amm.del_flag = '0'
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiTotalAssetMapper">
<resultMap id="ArchiAssetResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="archi_belong_id" property="archiBelongId"/>
<collection property="subList" ofType="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="sub_asset_id" property="assetId"/>
<result column="sub_asset_code" property="assetCode"/>
<result column="sub_asset_name" property="assetName"/>
<result column="sub_parent_asset_id" property="parentAssetId"/>
<result column="sub_icon" property="icon"/>
<result column="sub_icon_name" property="iconName"/>
<result column="sub_color" property="color"/>
</collection>
</resultMap>
<resultMap id="ArchiAssetTreeResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="archi_ele_id" property="archiEleId"/>
<result column="ele_name" property="eleName"/>
<result column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="parent_asset_id" property="parentAssetId"/>
</resultMap>
<resultMap id="AutoArchiAssetResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="asset_number" property="assetNumber"/>
<result column="archi_belong_id" property="archiBelongId"/>
<result column="asset_code" property="assetCode"/>
<result column="parent_asset_id" property="parentAssetId"/>
<result column="parent_asset_name" property="parentAssetName"/>
<result column="element_id" property="elementId"/>
<result column="element_name" property="elementName"/>
</resultMap>
<!--总体架构资产-->
<sql id="assetSql">
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
</sql>
<!--总体架构可视化展示-->
<select id="treeListView" resultMap="ArchiAssetTreeResulMap">
SELECT aai.archi_ele_id,
aai.ele_name,
aai.asset_id,
aai.asset_name,
aai.parent_asset_id
from archi_asset_info aai
<where>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="versionId != null">
and aai.version_id = #{versionId}
</if>
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
<if test="archiAssetState != null">
and aai.archi_asset_state = #{archiAssetState}
</if>
<include refid="assetSql"/>
and aai.parent_asset_id is not null
</where>
order by aai.sort
</select>
<!--总体架构资产智能搜索-->
<select id="treeList" resultMap="ArchiAssetResulMap">
with archi_belong as (select amdd.value as belong_id,
amdd.label as name
from archi_model_dict_detail amdd
left join archi_model_dict amd on (amd.id = amdd.dict_id)
where amd.type_value = 'archi_belong'
and amd.del_flag = 0
and amd.state = 1
and amdd.del_flag = 0
order by amdd.sort)
SELECT ab.belong_id as asset_id,
ab.name as asset_name,
aai.archi_belong_id,
aai.asset_id as sub_asset_id,
concat(aai.archi_belong_id, '-', aai.asset_id) as sub_asset_code,
aai.asset_name as sub_asset_name,
aai.parent_asset_id as sub_parent_asset_id,
gmi.graph_name as sub_icon_name,
gmi.icon as sub_icon,
aai.color as sub_color
from archi_belong ab
left join archi_asset_info aai on
(aai.archi_belong_id = ab.belong_id and aai.state = 1
and aai.del_flag = 0 and aai.archi_asset_state = 2 and aai.archi_stage = 1)
left join graph_meta_info gmi on (aai.graph_id = gmi.graph_id)
<where>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="versionId != null">
and aai.version_id = #{versionId}
</if>
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
</where>
</select>
<!--根据项目查询架构视图-->
<select id="queryView" resultType="org.arch.common.modules.archoverall.vo.ArchiViewVO">
select avd.view_details_id,
avd.version as view_detail_name,
av.view_id,
av.view_name,
gr.icon as meta_model_svg,
gr.content as meta_model_data
from archi_view_relation avr
left join archi_view_details avd on (avr.archi_views_detail_id = avd.view_details_id)
left join archi_view av on (avd.view_id = av.view_id)
left join graph_repository gr on (avd.graph_id = gr.graph_id)
<where>
<if test="prjId != null">
and avr.prj_id = #{prjId}
</if>
<if test="archiBelongId != null">
and av.archi_belong_id = #{archiBelongId}
</if>
<if test="archiStage != null">
and av.archi_stage = #{archiStage}
</if>
</where>
</select>
<!--查询架构版本-->
<select id="queryArchiVersion" resultType="org.arch.common.modules.archoverall.vo.ArchiVersionVO">
select aav.version_id,
aav.version_name
from archi_asset_version aav
group by aav.version_id
</select>
<!-- 总体架构资产自动图形 -->
<select id="automaticGraphing" resultMap="AutoArchiAssetResulMap">
select aai.archi_belong_id,
aai.asset_id,
aai.asset_code,
aai.asset_name,
aai.parent_asset_id,
aai2.asset_name as parent_asset_name,
ae.element_id,
ae.element_name
from archi_asset_info aai
left join archi_asset_info aai2 on aai.parent_asset_id = aai2.asset_id
left join archi_element ae on aai.archi_ele_id = ae.element_id
<where>
and aai.archi_asset_state = 2
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="parentAssetId != null">
and aai.parent_asset_id = #{parentAssetId}
</if>
</where>
</select>
<!--根据元素查询对应的资产-->
<select id="findAssertByElementId" resultMap="AutoArchiAssetResulMap">
select aai.asset_id,
aai.asset_number,
aai.asset_name
from archi_asset_info aai
left join archi_element ae on aai.archi_ele_id = ae.element_id
<where>
and aai.archi_asset_state = 2
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
<if test="elementId != null">
and ae.element_id = #{elementId}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiViewEleMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiViewEle">
<result column="archi_view_id" property="archiViewId"/>
<result column="archi_ele_id" property="archiEleId"/>
<result column="ele_name" property="eleName"/>
<result column="type" property="type"/>
</resultMap>
<sql id="Base_Column_List">
<!--@sql select -->
archi_view_id,
archi_ele_id,
ele_name,
type
<!--@sql from archi_view_ele-->
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiViewMapper">
<select id="maxVer" resultType="org.arch.common.modules.archoverall.entity.ArchiView">
SELECT a.version
FROM archi_view a
<where>
<if test="viewName != null and viewName != ''">
and a.view_name = #{viewName}
</if>
<if test="archiBelongId != null ">
and a.archi_belong_id = #{archiBelongId}
</if>
<if test="archiStage != null ">
and a.archi_stage = #{archiStage}
</if>
<if test="archiLevelId != null ">
and a.archi_level_id = #{archiLevelId}
</if>
and a.del_flag = 0
</where>
ORDER BY CAST(SUBSTRING_INDEX(version, '.', -1) AS DECIMAL) DESC
LIMIT 1
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
select ifnull(version, @i) from archi_view where view_id = #{id} for update
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.VersionInitMapper">
<sql id="versionInit">
SELECT CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-V', YEAR(NOW()) - 2023, '.', DATE_FORMAT(NOW(), '%m'), '.0') AS version
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>arch-system</artifactId>
<name>系统架构</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch</artifactId> <artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>arch-analysis</artifactId> <artifactId>framework-analysis</artifactId>
<name>综合分析</name> <name>综合分析</name>
<properties> <properties>
<maven.compiler.source>8</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch</artifactId> <artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>arch-base</artifactId> <artifactId>framework-base</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<name>基础功能公共服务</name> <name>基础功能公共服务</name>
<properties> <properties>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId> <artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId> <artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId> <artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch-clouds</artifactId> <artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
......
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.common.web.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("查询参数对象")
public abstract class QueryParam implements Serializable{
private static final long serialVersionUID = -3263921252635611410L;
@ApiModelProperty(value = "页码,默认为1")
private Integer page =1;
@ApiModelProperty(value = "页大小,默认为10")
private Integer limit = 10;
@ApiModelProperty(value = "搜索字符串")
private String keyword;
public void setCurrent(Integer current) {
if (current == null || current <= 0){
this.page = 1;
}else{
this.page = current;
}
}
public void setSize(Integer size) {
if (size == null || size <= 0){
this.limit = 10;
}else{
this.limit = size;
}
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.common.web.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@ApiModel("分页")
@SuppressWarnings("unchecked")
public class Paging<T> implements Serializable {
private static final long serialVersionUID = -1683800405530086022L;
@ApiModelProperty("总行数")
@JSONField(name = "total")
@JsonProperty("total")
private long total = 0;
@ApiModelProperty("数据列表")
@JSONField(name = "records")
@JsonProperty("records")
private List<T> records = Collections.emptyList();
public Paging() {
}
public Paging(IPage page) {
this.total = page.getTotal();
this.records = page.getRecords();
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<T> getRecords() {
return records;
}
public void setRecords(List<T> records) {
this.records = records;
}
@Override
public String toString() {
return "Paging{" +
"total=" + total +
", records=" + records +
'}';
}
}
package org.arch.mybatis.config;
import com.alibaba.fastjson2.JSONArray;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonArrayHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONArray getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONArray getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONArray getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONArray parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONArray.parse(json);
}
}
package org.arch.mybatis.config;
import com.alibaba.fastjson2.JSONObject;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonTypeHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONObject getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONObject getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONObject getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONObject parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONObject.parseObject(json);
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
*/
@Slf4j
@Component
public class MyMetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.mybatis.config;
/**
* @author :LionCity
* @date :Created in 2020-04-10 15:11
* @description:MybatisConfig
* @modified By:
* @version:
*/
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Slf4j
@Configuration
@MapperScan(basePackages = {"org.arch.*.*.mapper","org.arch.**.mapper"})
public class MybatisConfig {
public MybatisConfig() {
log.info("加载MybatisPlus配置...");
}
/**
* 配置mybatis的分页插件pageHelper
* @return
*/
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
//配置mysql数据库的方言
properties.setProperty("dialect","mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.mybatis.config.MybatisConfig
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>nacos</artifactId>
<name>注册中心</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--openfeign-->
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>-->
<!--sentinel依赖-->
<!--<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>-->
</dependencies>
</project>
\ No newline at end of file
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.nacos.NacosRegisterConfig
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>office</artifactId>
<name>在线文档</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>storage</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.arch.office.config;/*
package com.eadc.office.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") // SpringBoot2.4.0 [allowedOriginPatterns]代替[allowedOrigins]
.allowedMethods("*")
.maxAge(3600)
.allowCredentials(true);
}
}
*/
package org.arch.office.config;
import org.arch.office.model.documentServer.EditorConfig;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Data
@ConfigurationProperties(prefix = "office")
@Component
public class OnlyOfficeProperties {
// 本地服务ip地址
private String ip;
/**
* 编辑器默认语言【只允许中文!】
*/
private String lang;
/**
* logo信息
*/
private EditorConfig.Customization.Logo logo;
/**
* 文档服务器回调接口【交互接口非常非常重要】
*
*/
private String callbackUrl;
private String downloadUrl;
private String goBack;
/**
* 文档服务器js文件
*/
private String api;
// 可编辑、查看、转换的文件类型
private List<String> viewedDocs;
private List<String> editedDocs;
private List<String> convertDocs;
public Set<String> getFillExts(){
HashSet<String> result = new HashSet<>();
result.addAll(viewedDocs);
result.addAll(editedDocs);
result.addAll(convertDocs);
return result;
}
public String getCallbackUrl(){
return ip + callbackUrl;
}
public String getDownloadUrl(){
return ip + downloadUrl;
}
}
package org.arch.office.model.documentServer;
import lombok.Data;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 针对DocEditor需要的配置项
*/
@Data
public class Config {
// 文档配置项目
private Document document;
// 编辑类型
private DocumentType documentType;
// 文档编辑器定制化配置项
private EditorConfig editorConfig;
//token
private String token;
//显示类型
private String type;
public static class ConfigBuildr{
// 文件名称
private String filename;
// 文件后缀
private String fileSuffix;
}
public static Config build(){
Config config = new Config();
EditorConfig editorConfig = new EditorConfig();
Document document = new Document();
EditorConfig.Customization customization = new EditorConfig.Customization();
EditorConfig.Customization.Goback goBack = new EditorConfig.Customization.Goback();
EditorConfig.Customization.Logo logo = new EditorConfig.Customization.Logo();
editorConfig.setTemplates(new ArrayList<>(1));
editorConfig.setCoEditing(new HashMap<>());
customization.setLogo(logo);
customization.setGoback(goBack);
editorConfig.setCustomization(customization);
config.setEditorConfig(editorConfig);
document.setInfo(new Document.Info());
config.setDocument(document);
return config;
}
}
package org.arch.office.model.documentServer;
import lombok.Data;
import java.util.List;
@Data
public class Document {
// 文档的附加参数(文档所有者、存储文档的文件夹、上传日期,共享设置)
private Info info;
// 文档是否被编辑和下载的权限
private Permission permissions;
// 文件类型 docx ppt
private String fileType;
// 文档服务器唯一标识
private String key;
// 文件名称
private String title;
// 文档服务器下载文件的地址
private String url;
@Data
public static class Info {
// 文件创建人的名称
private String owner;
// 收藏图标的高亮显示状态
private Boolean favorite;
// 文件上传日期
private String uploaded;
}
@Data
public static class Permission {
// 文档注释功能
private Boolean comment = true;
// 文档注释权限控制功能,根据用户组
private CommentGroup commentGroup;
// 文档copy功能
private Boolean copy = true;
// 文档下载功能
private Boolean download = true;
// 文档编辑功能(在model为view时这个设置不起作用)
private Boolean edit = true;
// 文档打印功能
private Boolean print = true;
// 文档填写表单功能
private Boolean fillForms = true;
// 文档过滤器功能
private Boolean modifyFilter = true;
// 文档更改内容控件设置功能
private Boolean modifyContentControl = true;
// 文档审阅模式功能
private Boolean review = true;
// 文档聊天功能
private Boolean chat = true;
// 定义用户可以接受/拒绝其更改的组
private List<String> reviewGroups;
private List<String> userInfoGroups;
@Data
public static class CommentGroup{
private List<String> view;
private List<String> edit;
private List<String> remove;
}
}
}
package org.arch.office.model.documentServer;
public enum DocumentType {
word,
cell,
slide
}
package org.arch.office.model.dto;
import org.arch.office.model.documentServer.EditorConfig;
import lombok.Data;
import java.util.List;
/**
* 文档服务器callback数据
*/
@Data
public class Callback {
// 文件类型 docx
private String filetype;
// 最新文档下载地址
private String url;
// 唯一key值
private String key;
// ...
private String changesurl;
// 历史记录
private History history;
// token
private String token;
// 定义执行强制保存请求时启动器的类型
private Integer forcesavetype;
// 当前的操作状态
private Integer status;
//全部用户存储用户id
private List<String> users;
// 只有当前操作人的信息
private List<Action> actions;
//
private String userdata;
//
private String lastsave;
private Boolean notmodified;
@Data
public static class History {
private String serverVersion;
private String key;
private Integer version;
private String created;
private EditorConfig.User user;
// private List<ChangesHistory> changes;
}
@Data
public static class Action {
// 用户id
private String userid;
// 操作类型
private org.arch.office.model.documentServer.Action type;
}
}
package org.arch.office.model.entity;
import lombok.Data;
/**
* 附件(aid, aname, apath, rid)
*
* ClassName: Attach
* Function: TODO
* Date: 2020/2/12 0012 20:25
* author XieWenYing
* version V1.0
*/
@Data
public class Attach {
private String aid;//附件Id
private String aname;//附件名
private String apath;//附件文件路径
//private String rid;//对应需求id
private String fileId;
}
package org.arch.office.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class OnlyOfficeFile implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 文件id
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 文件唯一标识
*/
private String fileKey;
/**
* 文件名称
*/
private String title;
/**
* 文件名称
*/
private String name;
/**
* 文件后缀
*/
private String suffix;
/**
* 文件content-type
*/
private String contentType;
/**
* 文件大小
*/
private Long length;
/**
* 文件真实地址
*/
private String url;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
private String creater;
/**
* 跟新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 跟新人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updater;
/**
* 状态
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer status;
/**
* 版本
*/
@Version
private Integer version;
/**
* md5值
*/
private String md5;
/**
* 过期时间
*/
private Long expiry;
}
package org.arch.office.model.entity;
import lombok.Data;
import java.util.List;
/**
* 每条需求(id, title, content, outline)
* ClassName: ReqBase
* Date: 2020/2/12 0012 19:36
* author XieWenYing
* version V1.0
*/
@Data
public class Reqbase {
private String rid;
private String title;
private String content;
private Integer outline;
private String pid;
private List<String> headingNotes;
private List<Attach> attachList;
}
package org.arch.office.model.vo;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.arch.office.service.Flag;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class OnlyOfficeFileVo {
@NotNull(message = "id不能为空",groups = Runnable.class)
private Long id;
@NotEmpty(message = "fileKey不能为空",groups = Flag.class)
private String fileKey;
@NotEmpty(message = "title不能为空",groups = Flag.class)
private String title;
@NotEmpty(message = "url不能为空",groups = Flag.class)
private String url;
private Long length;
private String contentType;
private String md5;
public String getName() {
if (StringUtils.isNotBlank(title)) {
return title.substring(0, title.lastIndexOf("."));
}
return StringUtils.EMPTY;
}
public String getSuffix() {
if (StringUtils.isNotBlank(title)) {
// 获取文件后缀
String suffix = title.substring(title.lastIndexOf(".") + 1);
return suffix;
}
return StringUtils.EMPTY;
}
}
package org.arch.office.service;
import org.arch.office.service.impl.CallbackHandler;
import org.springframework.beans.factory.annotation.Autowired;
/**
* 处理文档服务器返回的数据
*/
public interface Callback {
int handle(org.arch.office.model.dto.Callback body, Long fileId);
int getStatus();
@Autowired
default void selfRegistration(CallbackHandler callbackHandler) {
callbackHandler.register(getStatus(), this);
}
}
package org.arch.office.service;
import org.arch.office.model.documentServer.Config;
import java.io.UnsupportedEncodingException;
public interface FileConfigurer<W> extends Configurer<Config, W>{
void configure(Config model, W wrapper) throws UnsupportedEncodingException;
Config getFileModel(W wrapper) throws UnsupportedEncodingException;
}
package org.arch.office.service;
public interface Flag {
}
package org.arch.office.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.arch.office.model.documentServer.Config;
import org.arch.office.model.entity.OnlyOfficeFile;
import org.arch.office.model.vo.OnlyOfficeFileVo;
import java.util.List;
public interface OnlyOfficeFileService {
Integer removeByIds(List<Long> ids);
OnlyOfficeFile updateById(OnlyOfficeFileVo onlyOfficeFileVo);
IPage<OnlyOfficeFile> queryByPage(Long current, Integer rows, OnlyOfficeFileVo onlyOfficeFileVo);
List<OnlyOfficeFile> queryByIds(List<Long> ids);
OnlyOfficeFile queryById(Long id);
OnlyOfficeFile saveOnlyOfficeFile(OnlyOfficeFileVo onlyOfficeFileVo);
/**
* 根据文件的id构建文档编辑器需要的config对象
*/
Config buildConfigByFileId(Long fileId);
}
package org.arch.office.service.impl;
import org.arch.office.service.Callback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class CallbackHandler {
private final Logger logger = LoggerFactory.getLogger(CallbackHandler.class);
private final Map<Integer, Callback> callbackHandlers = new HashMap<>();
public void register(int code, Callback callback) {
callbackHandlers.put(code, callback);
}
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
Callback callback = callbackHandlers.get(body.getStatus());
if (callback == null) {
logger.warn("Callback status " + body.getStatus() + " is not supported yet");
return 0;
}
return callback.handle(body, fileId);
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.DefaultCustomizationWrapper;
import org.arch.office.model.documentServer.EditorConfig;
import org.arch.office.service.CustomizationConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CustomizationConfigurerImpl implements CustomizationConfigurer<DefaultCustomizationWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Override
public void configure(EditorConfig.Customization customization, DefaultCustomizationWrapper wrapper) {
customization.setSubmitForm(false);
customization.setLogo(onlyOfficeProperties.getLogo());
EditorConfig.Customization.Goback goback = new EditorConfig.Customization.Goback();
goback.setUrl(onlyOfficeProperties.getGoBack());
customization.setGoback(goback);
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.DefaultDocumentWrapper;
import org.arch.office.model.documentServer.Document;
import org.arch.office.service.DocumentConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DocumentConfigurerImpl implements DocumentConfigurer<DefaultDocumentWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Override
public void configure(Document document, DefaultDocumentWrapper wrapper) {
String fileName = wrapper.getFileName();
Document.Permission permission = wrapper.getPermission();
// 设置文件名称
document.setTitle(fileName);
// 设置访问地址
document.setUrl(onlyOfficeProperties.getDownloadUrl() + wrapper.getOnlyOfficeFile().getId());
document.setFileType(wrapper.getOnlyOfficeFile().getSuffix());
Document.Info info = document.getInfo();
info.setFavorite(wrapper.getFavorite());
info.setOwner(wrapper.getOnlyOfficeFile().getCreateMan().toString());
info.setUploaded(wrapper.getOnlyOfficeFile().getCreateTime().toString());
document.setKey(wrapper.getOnlyOfficeFile().getFileKey());
document.setPermissions(permission);
}
}
package org.arch.office.service.impl;
import org.arch.office.model.documentServer.Status;
import org.arch.office.service.Callback;
import org.springframework.stereotype.Service;
@Service
public class EditCallback implements Callback {
@Override
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
return 0;
}
@Override
public int getStatus() {
return Status.EDITING.getCode();
}
}
package org.arch.office.service.impl;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.model.documentServer.Action;
import org.arch.office.model.documentServer.DefaultCustomizationWrapper;
import org.arch.office.model.documentServer.DefaultFileWrapper;
import org.arch.office.model.documentServer.EditorConfig;
import org.arch.office.service.EditorConfigConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
@Service
public class EditorConfigConfigurerImpl implements EditorConfigConfigurer<DefaultFileWrapper> {
@Autowired
private OnlyOfficeProperties onlyOfficeProperties;
@Autowired
private CustomizationConfigurerImpl customizationConfigurer;
@Override
public void configure(EditorConfig editorConfig, DefaultFileWrapper wrapper) {
// 不显示新建
editorConfig.setTemplates(null);
editorConfig.setCreateUrl(null);
// 设置回调接口
editorConfig.setCallbackUrl(onlyOfficeProperties.getCallbackUrl() + wrapper.getOnlyOfficeFile().getId());
editorConfig.setLang("zh"); // 语言,写死不允许修改
Boolean canEdit = wrapper.getCanEdit();
Action action = wrapper.getAction();
editorConfig.setCoEditing(action.equals(Action.view) ? new HashMap<String, Object>() {{
put("mode", "strict");
put("change", false);
}} : new HashMap<String, Object>() {{
put("mode", "fast");
put("change", true);
}});
// define the customization configurer
customizationConfigurer.configure(editorConfig.getCustomization(),
DefaultCustomizationWrapper.builder()
.action(action)
.build());
// 设置Model
editorConfig.setMode(canEdit && !action.equals(Action.view) ? EditorConfig.Mode.edit : EditorConfig.Mode.view);
editorConfig.setUser(wrapper.getUser());
// 设置embedded
editorConfig.setEmbedded(null);
}
}
package org.arch.office.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.arch.office.config.OnlyOfficeProperties;
import org.arch.office.mapper.OnlyOfficeFileMapper;
import org.arch.office.model.documentServer.Config;
import org.arch.office.model.entity.OnlyOfficeFile;
import org.arch.office.model.vo.OnlyOfficeFileVo;
import org.arch.office.service.OnlyOfficeFileService;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.List;
@Service
public class OnlyOfficeFileServiceImpl implements OnlyOfficeFileService {
private final OnlyOfficeFileMapper onlyOfficeFileMapper;
private final OnlyOfficeProperties onlyOfficeProperties;
public OnlyOfficeFileServiceImpl (OnlyOfficeFileMapper onlyOfficeFileMapper,OnlyOfficeProperties onlyOfficeProperties){
this.onlyOfficeFileMapper = onlyOfficeFileMapper;
this.onlyOfficeProperties = onlyOfficeProperties;
}
@Override
public Integer removeByIds(List<Long> ids) {
return onlyOfficeFileMapper.deleteById(ids.get(0));
}
@Override
public OnlyOfficeFile updateById(OnlyOfficeFileVo onlyOfficeFileVo) {
Assert.isTrue(onlyOfficeFileVo.getId() != null,"file id is null!");
OnlyOfficeFile onlyOfficeFile = new OnlyOfficeFile();
BeanUtils.copyProperties(onlyOfficeFileVo,onlyOfficeFile);
String title = onlyOfficeFileVo.getTitle();
if(StringUtils.isNotBlank(title)) {
onlyOfficeFile.setName(onlyOfficeFileVo.getName());
onlyOfficeFile.setSuffix(onlyOfficeFileVo.getSuffix());
}
return onlyOfficeFileMapper.updateById(onlyOfficeFile) > 0 ? onlyOfficeFile : null;
}
@Override
public IPage<OnlyOfficeFile> queryByPage(Long current, Integer rows, OnlyOfficeFileVo onlyOfficeFileVo) {
LambdaQueryWrapper<OnlyOfficeFile> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ObjectUtils.isNotEmpty(onlyOfficeFileVo.getId()),OnlyOfficeFile::getId,onlyOfficeFileVo.getId());
wrapper.eq(StringUtils.isNotBlank(onlyOfficeFileVo.getTitle()),OnlyOfficeFile::getTitle,onlyOfficeFileVo.getTitle());
wrapper.eq(StringUtils.isNotBlank(onlyOfficeFileVo.getFileKey()),OnlyOfficeFile::getFileKey,onlyOfficeFileVo.getFileKey());
return onlyOfficeFileMapper.selectPage(new Page<>(current, rows), wrapper);
}
@Override
public List<OnlyOfficeFile> queryByIds(List<Long> ids) {
LambdaQueryWrapper<OnlyOfficeFile> wrapper = new LambdaQueryWrapper<>();
return new ArrayList<>();
}
@Override
public OnlyOfficeFile queryById(Long id) {
return onlyOfficeFileMapper.selectById(id);
}
@Override
public OnlyOfficeFile saveOnlyOfficeFile(OnlyOfficeFileVo onlyOfficeFileVo) {
OnlyOfficeFile onlyOfficeFile = new OnlyOfficeFile();
BeanUtils.copyProperties(onlyOfficeFileVo,onlyOfficeFile);
onlyOfficeFile.setId(null);
if(StringUtils.isNotBlank(onlyOfficeFileVo.getTitle())) {
onlyOfficeFile.setName(onlyOfficeFileVo.getName());
onlyOfficeFile.setSuffix(onlyOfficeFileVo.getSuffix());
}
return onlyOfficeFileMapper.insert(onlyOfficeFile) > 0 ? onlyOfficeFile : null;
}
@Override
public Config buildConfigByFileId(Long fileId) {
Config config = new Config();
return config;
}
}
package org.arch.office.service.impl;
import cn.hutool.core.lang.Assert;
import org.arch.base.utils.FileUtils;
import org.arch.common.modules.base.entity.File;
import org.arch.office.model.documentServer.Status;
import org.arch.office.service.Callback;
import org.arch.office.utils.HttpUtil;
import org.arch.office.utils.MD5Util;
import org.arch.office.utils.MockMultipartFile;
import lombok.RequiredArgsConstructor;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@Service
@RequiredArgsConstructor
public class SaveCallback implements Callback {
private final MD5Util md5Util;
private final FileMapper sysFileMapper;
private final FileStorageService fileStorageService;
@Override
public int handle(org.arch.office.model.dto.Callback body, Long fileId) {
File file = sysFileMapper.selectById(fileId);
Assert.notNull(file, "上传文件不能为空");
byte[] bytes = HttpUtil.downloadFile(body.getUrl(), null);
MultipartFile multipartFile = new MockMultipartFile(file.getTitle(), file.getTitle(), file.getContentType(), bytes);
FileInfo upload = fileStorageService.of(multipartFile)
.setPath(FileUtils.filePath()).upload();
Assert.notNull(file, "上传失败");
//DateTime dateTime = DateUtil.offsetDay(new Date(), 7);
//String url = fileStorageService.generatePresignedUrl(upload, dateTime);
String url = upload.getUrl();
File temp = new File();
temp.setId(file.getId());
temp.setUrl(url);
temp.setStoreFileName(upload.getObjectId());
String md5 = md5Util.encrypt(bytes);
temp.setMd5(md5);
temp.setFileKey(md5Util.key(md5));
temp.setTitle(file.getTitle());
sysFileMapper.updateById(temp);
// 历史记录信息
return 0;
}
@Override
public int getStatus() {
return Status.SAVE.getCode();
}
}
package org.arch.office.utils;
import org.arch.office.model.documentServer.DocumentType;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class FileUtility {
private List<String> extsDocument = Arrays.asList(
"doc", "docx", "docm",
"dot", "dotx", "dotm",
"odt", "fodt", "ott", "rtf", "txt",
"html", "htm", "mht", "xml",
"pdf", "djvu", "fb2", "epub", "xps", "oform");
private List<String> extsSpreadsheet = Arrays.asList(
"xls", "xlsx", "xlsm", "xlsb",
"xlt", "xltx", "xltm",
"ods", "fods", "ots", "csv");
private List<String> extsPresentation = Arrays.asList(
"pps", "ppsx", "ppsm",
"ppt", "pptx", "pptm",
"pot", "potx", "potm",
"odp", "fodp", "otp");
/**
* 根据后缀名称返回文档类型
*/
public DocumentType getDocumentType(String suffix) {
suffix = suffix.toLowerCase();
if (extsDocument.contains(suffix)) {
return DocumentType.word;
}
if (extsSpreadsheet.contains(suffix)) {
return DocumentType.cell;
}
if (extsPresentation.contains(suffix)) {
return DocumentType.slide;
}
return DocumentType.word;
}
}
package org.arch.office.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
@Component
public class JWTUtil {
@Value("${token.secret}")
private String secret;
@Value("${token.expire}")
private Integer expire;
/**
* only office获取token
*/
public String onlyOfficeCreateToken(Map<String,Object> params) {
try {
JWTCreator.Builder builder = JWT.create();
builder.withExpiresAt(getExpire());
Class<? extends JWTCreator.Builder> aClass = builder.getClass();
Method addClaim = aClass.getDeclaredMethod("addClaim", String.class,Object.class);
addClaim.setAccessible(true);
for (Map.Entry<String, Object> entry : params.entrySet()) {
addClaim.invoke(builder,entry.getKey(),entry.getValue());
}
return builder.sign(Algorithm.HMAC256(secret));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Date getExpire() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, expire);
return calendar.getTime();
}
}
package org.arch.office.utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Random;
@Component
public class MD5Util {
/**
* 获取md5字符串
*/
public String encrypt(String dataStr) {
return encrypt(dataStr.getBytes(StandardCharsets.UTF_8));
}
public String encrypt(byte[] bytes){
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes);
byte s[] = m.digest();
String result = "";
for (int i = 0; i < s.length; i++) {
result += Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6);
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return StringUtils.EMPTY;
}
public String key(String u){
Random random = new Random();
StringBuilder sbr = new StringBuilder();
for (int i = 0; i < 10; i++) {
sbr.append(u.charAt(random.nextInt(u.length())));
}
return sbr.toString();
}
}
package org.arch.office.utils;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class MockMultipartFile implements MultipartFile {
private final String name;
private String originalFilename;
@Nullable
private String contentType;
private final byte[] content;
public MockMultipartFile(String name, @Nullable byte[] content) {
this(name, "", (String)null, (byte[])content);
}
public MockMultipartFile(String name, InputStream contentStream) throws IOException {
this(name, "", (String)null, (byte[])FileCopyUtils.copyToByteArray(contentStream));
}
public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, @Nullable byte[] content) {
Assert.hasLength(name, "Name must not be null");
this.name = name;
this.originalFilename = originalFilename != null ? originalFilename : "";
this.contentType = contentType;
this.content = content != null ? content : new byte[0];
}
public MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream) throws IOException {
this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
}
public String getName() {
return this.name;
}
public String getOriginalFilename() {
return this.originalFilename;
}
@Nullable
public String getContentType() {
return this.contentType;
}
public boolean isEmpty() {
return this.content.length == 0;
}
public long getSize() {
return (long)this.content.length;
}
public byte[] getBytes() throws IOException {
return this.content;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(this.content);
}
public void transferTo(File dest) throws IOException, IllegalStateException {
FileCopyUtils.copy(this.content, dest);
}
}
package org.arch.office.utils;
import cn.hutool.core.lang.Assert;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.arch.common.modules.base.entity.File;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.Downloader;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
/**
* 解析pdf工具类【对于扫描版的pdf是无法解析的】
*/
@Service
public class PrasePdfUtils {
public static PrasePdfUtils prasePdfUtils;
@Resource
private FileStorageService fileStorageService;
@Resource
private FileMapper sysFileMapper;
@PostConstruct
public void init() {
prasePdfUtils = this;
prasePdfUtils.fileStorageService = this.fileStorageService;
prasePdfUtils.sysFileMapper = this.sysFileMapper;
}
public static String prasePdf(String fileId) throws IOException {
PDDocument document = null;
ByteArrayInputStream byteArrayInputStream = null;
String text = "";
try{
File file = prasePdfUtils.sysFileMapper.selectById(fileId);
Assert.notNull(file, "文件不存在");
Downloader download = prasePdfUtils.fileStorageService.download(file.getUrl());
byte[] bytes = download.bytes();
byteArrayInputStream = new ByteArrayInputStream(bytes);
document = PDDocument.load(byteArrayInputStream);
// 创建PDFTextStripper对象并从文档中提取文本
PDFTextStripper pdfStripper = new PDFTextStripper();
text = pdfStripper.getText(document);
return text;
}catch (Exception e){
e.printStackTrace();
} finally {
if(null!=document){
document.close();
}
if(null!=byteArrayInputStream){
byteArrayInputStream.close();
}
}
return null;
}
}
package org.arch.office.utils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.util.UUID;
/**
* word转图片工具类
*/
public class WordConvertImageUtils {
public static void wordChangeImage(InputStream fileStream, String targetPath){
ZipSecureFile.setMinInflateRatio(-1.0d);
try {
PDDocument document = PDDocument.load(fileStream);
String dirName = UUID.randomUUID().toString().replaceAll("-","").toUpperCase();
String filePath = targetPath +File.separator + dirName;
File file = new File(filePath);
if(!file.exists()){
file.mkdir();
}
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 70); // 设置DPI,可以调整输出图片的分辨率
ImageIO.write(bim, "PNG", new File(filePath+ File.separator + (UUID.randomUUID()
.toString().replaceAll("-","")+"-"+(page + 1)) + ".png"));
}
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/* public static void main(String[] args) throws Exception {
String targetPath="C:\\测试pdf转图片.pdf";
File file = new File(targetPath);
FileInputStream fileInputStream = new FileInputStream(file);
wordChangeImage(fileInputStream,"F:\\");
}*/
}
package org.arch.office.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
public class WordUtils {
public static MultipartFile convertToMultipartFile(String filename, String contentType, InputStream inputStream) throws IOException {
return new MockMultipartFile(filename, filename, contentType, inputStream);
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.office.OfficeConfig
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<name>微服务组件</name>
<packaging>pom</packaging>
<artifactId>framework-clouds</artifactId>
<modules>
<module>log</module>
<module>office</module>
<module>storage</module>
<module>mybatis</module>
<module>nacos</module>
<module>filters</module>
<module>common</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.arch</groupId>
<artifactId>framework-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-clouds</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<version>1.0-SNAPSHOT</version>
<name>文件存储</name>
<artifactId>storage</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package org.arch.storage.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
@ComponentScan("org.arch.storage")
public class StoreConfiguration {
public StoreConfiguration(){
log.info("加载StoreConfiguration~~~");
}
}
package org.arch.storage.mapper;
import cn.hutool.core.io.FileUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.SneakyThrows;
import org.apache.ibatis.annotations.Mapper;
import org.arch.base.utils.MD5Utils;
import org.arch.common.modules.base.entity.File;
import org.dromara.x.file.storage.core.FileInfo;
import org.springframework.web.multipart.MultipartFile;
/**
* <p>
* 附件表 Mapper 接口
* </p>
*
* @author audit
* @since 2020-09-12
*/
@Mapper
public interface FileMapper extends BaseMapper<File> {
@SneakyThrows
default File saveFile(FileInfo upload, MultipartFile file) {
File sysFile = new File();
String suffix = FileUtil.getSuffix(upload.getOriginalFilename());
String prefix = FileUtil.getPrefix(upload.getOriginalFilename());
sysFile.setFileName(upload.getOriginalFilename());
sysFile.setContentType(upload.getContentType());
sysFile.setUrl(upload.getUrl());
sysFile.setFileType(suffix);
sysFile.setSuffix(suffix);
String encrypt = MD5Utils.encrypt(file.getBytes());
sysFile.setMd5(encrypt);
sysFile.setFileKey(MD5Utils.key(encrypt));
sysFile.setLength(upload.getSize());
sysFile.setTitle(upload.getOriginalFilename());
sysFile.setName(prefix);
sysFile.setStoreFileName(upload.getFilename());
sysFile.setPlatform(upload.getPlatform());
sysFile.setBasePath(upload.getBasePath());
insert(sysFile);
return sysFile;
}
}
package org.arch.storage.service;
import org.arch.common.modules.base.dto.DelDTO;
import org.arch.common.modules.base.dto.DownloadObjectDTO;
import org.arch.common.modules.base.vo.UpLoadVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:23
*/
public interface OssService {
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
UpLoadVO upload(MultipartFile file);
/**
* 下载对象
*/
void downloadObject(DownloadObjectDTO params, HttpServletResponse response);
/**
* oss对象存储删除
*
* @param dto 参数
* @return {@link UpLoadVO}
*/
Boolean delObject(DelDTO dto);
}
package org.arch.storage.service.impl;
import cn.hutool.core.io.file.FileNameUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.arch.common.modules.base.entity.File;
import org.arch.storage.mapper.FileMapper;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.recorder.FileRecorder;
import org.dromara.x.file.storage.core.upload.FilePartInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Component
public class FileRecorderImpl implements FileRecorder {
@Autowired
private FileMapper fileMapper;
@Override
public boolean save(FileInfo fileInfo) {
return true;
}
@Override
public void update(FileInfo fileInfo) {
}
@Override
public FileInfo getByUrl(String s) {
FileInfo fileInfo = new FileInfo();
File file = fileMapper.selectOne(Wrappers.lambdaQuery(File.class).eq(File::getUrl, s));
if (Objects.nonNull(file)) {
fileInfo.setPlatform(file.getPlatform());
fileInfo.setUrl(s);
fileInfo.setPath(extractDateFromUrl(s) + "/");
fileInfo.setBasePath(file.getBasePath());
fileInfo.setFilename(FileNameUtil.getName(s));
}
return fileInfo;
}
@Override
public boolean delete(String s) {
return true;
}
@Override
public void saveFilePart(FilePartInfo filePartInfo) {
}
@Override
public void deleteFilePartByUploadId(String s) {
}
public static String extractDateFromUrl(String url) {
// 使用正则表达式来匹配日期部分
String regex = "/(\\d{4}/\\d{2}/\\d{2})/";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(url);
if (matcher.find()) {
return matcher.group(1);
} else {
return "Date not found";
}
}
}
package org.arch.storage.service.impl;
import cn.hutool.core.lang.Assert;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.arch.base.utils.FileUtils;
import org.arch.common.modules.base.entity.File;
import org.arch.common.modules.base.dto.DelDTO;
import org.arch.common.modules.base.dto.DownloadObjectDTO;
import org.arch.common.modules.base.vo.UpLoadVO;
import org.arch.storage.mapper.FileMapper;
import org.arch.storage.service.OssService;
import org.dromara.x.file.storage.core.Downloader;
import org.dromara.x.file.storage.core.FileInfo;
import org.dromara.x.file.storage.core.FileStorageService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:24
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class OssServiceImpl implements OssService {
private final FileMapper sysFileMapper;
private final FileStorageService fileStorageService;
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
@SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public UpLoadVO upload(MultipartFile file) {
UpLoadVO uploadFileVO = new UpLoadVO();
Assert.notNull(file, "上传文件不能为空");
FileInfo upload = fileStorageService.of(file)
.setPath(FileUtils.filePath()).upload();
Assert.notNull(uploadFileVO, "上传失败");
File saveFile = sysFileMapper.saveFile(upload, file);
uploadFileVO.setFileId(saveFile.getId());
return uploadFileVO;
}
@SneakyThrows
@Override
public void downloadObject(DownloadObjectDTO params, HttpServletResponse response) {
File file = sysFileMapper.selectById(params.getFileId());
Assert.notNull(file, "文件不存在");
Downloader download = fileStorageService.download(file.getUrl());
response.setContentType(file.getFileType());
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getFileName(), StandardCharsets.UTF_8.name()));
response.getOutputStream().write(download.bytes());
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delObject(DelDTO dto) {
boolean flag = false;
Long fileId = dto.getFileId();
File file = sysFileMapper.selectById(fileId);
Assert.notNull(file, "文件不存在");
// 判断文件是否存在
FileInfo fileInfo = fileStorageService.getFileInfoByUrl(file.getUrl());
boolean exists = fileStorageService.exists(fileInfo);
Assert.isTrue(exists, "文件不存在");
boolean delete = fileStorageService.delete(fileInfo);
if (delete) {
// 删除文件数据表sys_file里的记录信息
int i = this.sysFileMapper.deleteById(file.getId());
if (i >= 0) {
flag = true;
}
}
return flag;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.storage.config.StoreConfiguration
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>framework-gateway</artifactId>
<name>微服务网关</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--gateway依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--jwt-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
<!--SM4-CBC加密需要-->
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.arch</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package org.arch.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
* Hello world!
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GatewayApp {
public static void main(String[] args) {
SpringApplication.run(GatewayApp.class, args);
}
}
package org.arch.gateway.common;
public class Constant {
/**
* redis过期时间,以秒为单位,一分钟
*/
public static final int EXRP_MINUTE = 60;
/**
* redis过期时间,以秒为单位,一小时
*/
public static final int EXRP_HOUR = 60 * 60;
/**
* redis过期时间,以秒为单位,一天
*/
public static final int EXRP_DAY = 60 * 60 * 24;
/**
* redis-key-前缀-shiro:cache:
*/
public static final String PREFIX_SHIRO_CACHE = "shiro:cache:";
/**
* 用户信息缓存
*/
public static final String USER_ACCOUNT = "user_account:";
/**
* redis-key-前缀-shiro:access_token:
*/
public static final String PREFIX_SHIRO_ACCESS_TOKEN = "shiro:access_token:";
/**
* redis-key-前缀-shiro:refresh_token:
*/
public static final String PREFIX_SHIRO_REFRESH_TOKEN = "shiro:refresh_token:";
/**
* redis-key-前缀-tkv:refresh_token:
*/
public static final String PREFIX_TKV_REFRESH_TOKEN = "tkv:refresh_token:";
/**
* JWT-account:
*/
public static final String ACCOUNT = "account";
/**
* JWT-currentTimeMillis:
*/
public static final String CURRENT_TIME_MILLIS = "currentTimeMillis";
/**
* PASSWORD_MAX_LEN
*/
public static final Integer PASSWORD_MAX_LEN = 8;
//token
public static final int RESCODE_REFTOKEN_MSG = 1006; //刷新TOKEN(有返回数据)
public static final int RESCODE_REFTOKEN = 1007; //刷新TOKEN
public static final int JWT_ERRCODE_NULL = 4000; //Token不存在
public static final int JWT_ERRCODE_EXPIRE = 4001; //Token过期
public static final int JWT_ERRCODE_FAIL = 4002; //验证不通过
//密匙
public static final String JWT_SECRET = "8677df7fc87d23u87k61c89s54312hpk";
public static final String TOKEN_ISSUER="IT4IT";
//token失效的时间,单位:秒,默认设置3天
public static final Long ACCESS_TOKEN_EXPIRE = 7*24*60*60L;
//accessToken在header中的key
public static final String ACCESS_TOKEN_HEADER_KEY = "accessToken";
//用户sessionKey前缀
public static final String USER_SESSION_KEY = "User:Session:key:";
//用户令牌前缀
public static final String JWT_TOKEN_REDIS_KEY_PREFIX = "UserAuth:JWT:Key:";
//省市区redis key,缓存7天
public static final String AREA_REDIS_KEY = "areaKey";
public static final Long AREA_REDIS_EXPEPIRE = 7*24*60*60L;
//一次最多只能两个时段
public static final Integer EVERY_TIME_MAX_TWO_TIMES = 2;
//排队受理业务人均时长,单位:分钟
public static final Integer LINE_PER_TIMES = 3;
//订单到期规定的时间不能取消订单(分钟)
public static final Integer VALID_EXPIRE_TIME = 120;
//演示系统账户
public static String DEMO_ACCOUNT = "test";
//自动去除表前缀
public static String AUTO_REOMVE_PRE = "true";
//停止计划任务
public static String STATUS_RUNNING_STOP = "stop";
//开启计划任务
public static String STATUS_RUNNING_START = "start";
//通知公告阅读状态-未读
public static String OA_NOTIFY_READ_NO = "0";
//通知公告阅读状态-已读
public static int OA_NOTIFY_READ_YES = 1;
//部门根节点id
public static Long DEPT_ROOT_ID = 0l;
//缓存方式
public static String CACHE_TYPE_REDIS ="redis";
public static String LOG_ERROR = "error";
}
package org.arch.gateway.config;
import org.springframework.util.AntPathMatcher;
import java.util.ArrayList;
import java.util.List;
/**
* 不需要登录的请求路径
*/
public class AnonFilterChainDefinitionMap {
//不需要登录的路径
public static List<String> anonUrlList = new ArrayList<>();
static{
anonUrlList.add("/project/updateFile2");
anonUrlList.add("/adsproject/updateFile2");
anonUrlList.add("/file/webDownload");
anonUrlList.add("/directoryList/getJiagoutu");
anonUrlList.add("/project/getTableDatas");//架构表/
anonUrlList.add("/psrPlan/getPsrPlansByFsrId");////插入需求
anonUrlList.add("/expose/getEquipmentList");
anonUrlList.add("/expose/getBusList");
anonUrlList.add("/expose/getRelatedList");
anonUrlList.add("/auth/isclogin");////插入需求
anonUrlList.add("/auth/login");////插入需求
anonUrlList.add("/file/upload");////插入需求
anonUrlList.add("/version/getCurrentVersion");////插入需求
// 架构元模型管理
anonUrlList.add("/architecture/vi/file/getById");
}
/**
* 验证是否不需要登录
* @param url 路径
* @return 是否需要登录
*/
public static boolean isNotPermission(String url) {
AntPathMatcher matcher = new AntPathMatcher();
for (String p : anonUrlList) {
if (matcher.match(p,url)) {
return true;
}
}
return false;
}
}
package org.arch.gateway.config;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
* 把body中的数据缓存起来
* @author zg_xl920
* @create 2022-05-26 19:43
*/
@Component
public class CacheBodyGlobalFilter implements Ordered, GlobalFilter {
// public static final String CACHE_REQUEST_BODY_OBJECT_KEY = "cachedRequestBodyObject";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
if (exchange.getRequest().getHeaders().getContentType() == null) {
return chain.filter(exchange);
} else {
return DataBufferUtils.join(exchange.getRequest().getBody())
.flatMap(dataBuffer -> {
DataBufferUtils.retain(dataBuffer);
Flux<DataBuffer> cachedFlux = Flux
.defer(() -> Flux.just(dataBuffer.slice(0, dataBuffer.readableByteCount())));
ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
exchange.getRequest()) {
@Override
public Flux<DataBuffer> getBody() {
return cachedFlux;
}
};
//exchange.getAttributes().put(CACHE_REQUEST_BODY_OBJECT_KEY, cachedFlux);
return chain.filter(exchange.mutate().request(mutatedRequest).build());
});
}
}
@Override
public int getOrder() {
return -2;
}
}
package org.arch.gateway.config;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import org.arch.gateway.config.sm4jm.SM4Utils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
/**
* 国网SM4加密
*/
@Component
@ConditionalOnProperty(value = "sm4.enable", havingValue = "true")
public class ParamsSM4EncryptionFilter implements GlobalFilter, Ordered {
@Value("${sm4.CBCSecretKey}")
private String CBCSecretKey;
@Value("${sm4.CBCIV}")
private String CBCIV;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest serverHttpRequest = exchange.getRequest();
HttpMethod method = serverHttpRequest.getMethod();
String uri = serverHttpRequest.getURI().toString();
if (uri.contains("upload") || method != HttpMethod.POST) {
return chain.filter(exchange);
}
String bodyStr = serverHttpRequest.getBody().toString();
String plainParams = SM4Utils.decryptData_CBC(bodyStr, CBCSecretKey, CBCIV);
if (StrUtil.isBlank(plainParams)) {
return errorResponse(exchange, "已开启加密模式,请先加密");
}
return chain.filter(exchange);
}
private Mono<Void> errorResponse(ServerWebExchange exchange, String message) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.BAD_REQUEST);
response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
JSONObject json = new JSONObject();
json.put("code", 500);
json.put("msg", message);
json.put("data", "");
return response.writeWith(Mono.just(response.bufferFactory().wrap(json.toString().getBytes())));
}
@Override
public int getOrder() {
return -1;
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
/**
* 限值文件上传
*/
public class FileUploadInterceptor implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 检查请求是否包含文件
if (request.getHeaders().getContentType() != null
&& request.getHeaders().getContentType().includes(MediaType.MULTIPART_FORM_DATA)) {
// 文件上传拦截逻辑
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
return response.writeWith(Mono.just(response.bufferFactory().wrap("File upload is not allowed.".getBytes(StandardCharsets.UTF_8))));
}
// 继续过滤器链
return chain.filter(exchange);
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Objects;
/**
* 文件上传大小限制
*/
public class FileUploadSizeLimitFilter implements GlobalFilter {
private final int maxFileSize = 100 * 1024 * 1024; // 设置最大文件大小为100MB
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
// 如果是POST请求且内容类型是multipart/form-data,则检查文件大小
if ("POST".equals(request.getMethodValue()) && request.getHeaders().getContentType().includes(MediaType.MULTIPART_FORM_DATA)) {
return DataBufferUtils.join(exchange.getRequest().getBody())
.flatMap(dataBuffer -> {
try {
// 此处可以获取文件数据,进行大小校验
// 示例仅为检查是否超出最大文件大小
long contentLength = request.getHeaders().getContentLength();
if (!Objects.isNull(contentLength) && contentLength > maxFileSize) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(org.springframework.http.HttpStatus.PAYLOAD_TOO_LARGE);
// 可以返回错误信息到客户端
return response.writeWith(
Mono.just(response.bufferFactory().wrap(
"File size exceeds the maximum allowed limit.".getBytes()))
);
}
} catch (Exception e) {
// 处理异常
}
return chain.filter(exchange);
});
}
return chain.filter(exchange);
}
}
\ No newline at end of file
package org.arch.gateway.config.fileFilter;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Bean;
//@Configuration
public class FilterConfig {
@Bean
public GlobalFilter fileUploadSizeLimitFilter() {
return new FileUploadSizeLimitFilter();
}
}
\ No newline at end of file
package org.arch.gateway.config.sm4jm;
class SM4Context {
public int mode;
public int[] sk;
public boolean isPadding;
public SM4Context() {
this.mode = 1;
this.isPadding = true;
this.sk = new int[32];
}
}
package org.arch.gateway.systemLog;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GatewayLog {
/**请求来源**/
private String origin;
/**访问实例*/
private String targetServer;
/**请求路径*/
private String requestPath;
/**请求方法*/
private String requestMethod;
/**协议 */
private String schema;
/**请求类型 */
private String requestContentType;
/**请求头 */
private String headers;
/**请求体*/
private String requestBody;
/**响应体*/
private String responseData;
/**请求ip*/
private String ip;
/**IP所属城市*/
private String city;
/**开始时间*/
private Long startTime;
/**结束时间*/
private Long endTime;
/**请求时间*/
private String requestTime;
/**响应时间*/
private String responseTime;
/**执行时间*/
private long executeTime;
/**路由配置*/
private String routeConfig;
/**响应状态*/
private String status;
}
server:
port: 19000
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
config:
activate:
on-profile: dev
server:
port: 19000
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
# - data-id: common-isc.${nacos.file-extension}
# refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
server:
port: 19000
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
# - data-id: common-isc.${nacos.file-extension}
# refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
- data-id: common-gateway.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 动态服务转发
gateway:
discovery:
locator:
enabled: true # 启用动态路由服务名称转发功能
lower-case-service-id: true #开启服务名称小写
# 网关全局跨域配置
globals:
cors-configurations:
'[/**]':
allowedOriginPatterns: "*"
allowedMethods: "*"
allowedHeaders: "*"
allowCredentials: true
# 解决options请求被拦截的问题
add-to-simple-url-handler-mapping: true
config:
activate:
on-profile: sit
spring:
application:
name: arch-gateway
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>framework-knowledge</artifactId>
<name>知识库</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>framework-overall</artifactId>
<name>总体架构</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.davidfantasy</groupId>
<artifactId>mybatis-plus-generator-ui</artifactId>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>office</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>log</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>filters</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.nasdanika.core</groupId>
<artifactId>mxgraph</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package org.arch.overall;
import org.dromara.x.file.storage.spring.EnableFileStorage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.jmx.support.RegistrationPolicy;
@SpringBootApplication
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
@EnableFileStorage
public class ArchOverallApp {
public static void main(String[] args) {
SpringApplication.run(ArchOverallApp.class, args);
}
}
package org.arch.overall.controller;
import io.swagger.annotations.ApiOperation;
import org.arch.base.Result;
import org.arch.log.entity.DescContent;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import org.arch.overall.service.ArchiElePropertyService;
import org.arch.overall.service.ArchiEleRelaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("ele-rel")
public class ArchiEleRelaController {
@Autowired
private ArchiEleRelaService archiEleRelaService;
@Autowired
private ArchiElePropertyService archiElePropertyService;
@PostMapping(value = "/")
@ApiOperation(DescContent.QUERY_LIST_ELEMENT_RELATIONSHIPS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素关系",moduleName = "元素管理")
public Result gtArchiEleRela(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.gtArchiEleRela(dto));
}
@PostMapping("/ad-ele-rel")
@ApiOperation(value = "新增元素关系")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "新增元素关系")
public Result addArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.insert(archiEleRelas));
}
@PostMapping(value = "/upd-ele-rel")
@ApiOperation(value = "修改元素关系")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "修改元素关系")
public Result updArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.update(archiEleRelas));
}
@PostMapping(value = "/del-ele-rel")
@ApiOperation(value = "根据Id删除元素关系")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "根据id删除元素关系")
public Result delArchiEleRela(@RequestBody ArchiEleRela archiEleRelas) {
return Result.success(archiEleRelaService.del(archiEleRelas));
}
@PostMapping(value = "/batchupd-ele-rel")
@ApiOperation(value = "批量发布版本")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "批量发布版本")
public Result updateEleRelBatch(@RequestBody BatchUpdateRelaDTO requestMap) {
return Result.success(archiEleRelaService.updBatch(requestMap));
}
@ApiOperation("根据元素关系查询元素信息")
@PostMapping(value = "/qEle")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes="根据元素关系查询元素信息")
public Result qEle(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.findEleRelaConstrainList(dto.getEleRelaId()));
}
@ApiOperation("查询元素关系(只包含元素关系名称)")
@PostMapping(value = "/qEleRela")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes="询元素关系(只包含元素关系名称)")
public Result qEleRela() {
return Result.success(archiEleRelaService.findEleRelaList());
}
@ApiOperation("批量新增/修改元素")
@PostMapping(value = "/updEleBatch")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理",operDes = "批量新增/修改元素")
public Result updEleBatch(@RequestBody List<Map<String, Object>> requestList) {
return Result.success(archiElePropertyService.updateEleRelBatch(requestList));
}
@PostMapping(value = "/rel-list")
@ApiOperation(value = "获取元素关系列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "元素管理", operDes = "获取元素关系列表")
public Result gtEleRelList(@RequestBody ArchiEleRelaDTO dto) {
return Result.success(archiEleRelaService.gtEleRelList(dto));
}
}
package org.arch.overall.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.arch.base.Result;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.service.ArchiElementService;
import org.springframework.web.bind.annotation.*;
@Api(tags = {"元素管理"})
@RestController
@RequestMapping("ele")
@RequiredArgsConstructor
public class ArchiElementController {
private final ArchiElementService archiElementService;
@PostMapping(value = "/")
// @ApiOperation(DescContent.QUERY_PAGINATED_LIST_ELEMENTS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素信息",moduleName = "元素管理")
public Result gtArchiElement(@RequestBody ArchiElementDTO dto) {
return Result.success(archiElementService.gtArchiElement(dto));
}
@PostMapping("/ad-ele")
@ApiOperation("新增元素")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "新增元素",moduleName = "元素管理")
public Result adEle(@RequestBody ArchiElement archiElements) {
return Result.success(archiElementService.insert(archiElements));
}
@PostMapping("/upd-ele")
@ApiOperation("修改元素")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "更新元素",moduleName = "元素管理")
public Result updEle(@RequestBody ArchiElement archiElement) {
return Result.success(archiElementService.update(archiElement));
}
@PostMapping("/del-ele")
@ApiOperation("根据Id删除元素")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "删除元素",moduleName = "元素管理")
public Result delEle(@RequestBody ArchiElement archiElement) {
return Result.success(archiElementService.delete(archiElement));
}
@PostMapping(value = "/updEleBatch")
@ApiOperation(value = "批量发布版本")
@OperLog(value = LogOperTypeEnum.OTHER, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "批量发布版本",moduleName = "元素管理")
public Result updEleBatch(@RequestBody BatchUpdateDTO requestMap) {
return Result.success(archiElementService.updEleBatch(requestMap));
}
@PostMapping(value = "/archi-ele-list")
@ApiOperation(value = "查询元素列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "查询元素列表",moduleName = "元素管理")
public Result gtEleList(@RequestBody ArchiElement params) {
return Result.success(archiElementService.gtEle(params));
}
@PostMapping(value = "/ele-list")
@ApiOperation(value = "获取元素列表")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "获取元素列表",moduleName = "元素管理")
public Result getEleList(@RequestBody ArchiElementDTO dto) {
return Result.success(archiElementService.gtEleList(dto));
}
}
package org.arch.overall.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.arch.base.Result;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.dto.MetaModel;
import org.arch.log.annotation.OperLog;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import org.arch.overall.service.ArchiAssetInfoService;
import org.arch.overall.service.ArchiAssetService;
import org.arch.overall.service.ArchiMetaModelService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@Api(tags = "元模型管理")
@RestController
@RequestMapping("ma-ml")
@RequiredArgsConstructor
public class ArchiMetaModelController {
private final ArchiMetaModelService archiMetaModelService;
private final ArchiAssetInfoService archiAssetInfoService;
private final ArchiAssetService archiAssetService;
@ApiOperation("新增元模型")
@PostMapping("/add")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "新增元模型",moduleName = "元模型管理")
public Result addArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.insert(archiMetaModels));
}
@ApiOperation("修改元模型")
@PostMapping("/updArchiMetaModel")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "修改元模型",moduleName = "元模型管理")
public Result updArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.update(archiMetaModels));
}
@ApiOperation("查询元模型列表")
@PostMapping("/")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "查询元模型列表",moduleName = "元模型管理")
public Result gtArchiMetaModel(@RequestBody ArchiMetaModelDTO dto) {
return Result.success(archiMetaModelService.gtArchiMetaModel(dto));
}
@ApiOperation(value = "根据Id删除", notes = "根据Id删除", httpMethod = "POST")
@PostMapping(value = "/del")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据Id删除",moduleName = "元模型管理")
public Result delArchiMetaModel(@RequestBody ArchiMetaModel archiMetaModels) {
return Result.success(archiMetaModelService.del(archiMetaModels));
}
@ApiOperation("根据元模型ID查询元模型")
@PostMapping("/gBMMId")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据元模型ID查询元模型",moduleName = "元模型管理")
public Result gBMMId(@RequestBody ArchiMetaModelDTO dto) {
Long metaModelId = dto.getMetaModelId();
return Result.success(archiMetaModelService.findMetaModelById(metaModelId));
}
@ApiOperation("更新画布信息")
@PostMapping("/upMxGraph")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "更新画布信息",moduleName = "元模型管理")
public Result updateMxGraph(@RequestBody ArchiMetaModelDTO dto) {
return Result.success(archiMetaModelService.updateMxGraphModel(dto));
}
@ApiOperation("根据元模型获取结构化数据")
@PostMapping("/fdBmd")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "根据元模型获取结构化数据",moduleName = "元模型管理")
public Result getMxCellByMetaModelId(@RequestBody MetaModel model) {
return Result.success(archiAssetService.getMxCellByMetaModelId(model.getMetaModelId()));
}
@ApiOperation("加载画布左侧元素资产列表接口")
@PostMapping(value = "/archi-asset-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧元素资产列表接口",moduleName = "元模型管理")
public Result getArchiAssetList(@RequestBody ArchiAssetInfoDTO params) {
return Result.success(archiMetaModelService.getArchiAssetList(params));
}
@ApiOperation("加载画布右侧清单列表")
@PostMapping("/asset-ele-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布右侧清单列表",moduleName = "元模型管理")
public Result gtAssetByEleList(@RequestBody ArchiAssetInfoDTO params) {
params.setArchiStage(1);
params.setArchiAssetState(2);
params.setLimit(10L);
return Result.success(archiAssetInfoService.assetList(params));
}
@ApiOperation("加载画布左侧元素资产列表")
@PostMapping("/archi-asset-list1")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧元素资产列表",moduleName = "元模型管理")
public Result getArchiAssetList1(@RequestBody ArchiAssetInfoDTO params) {
return Result.success(archiMetaModelService.getArchiAssetList1(params));
}
@ApiOperation("加载画布左侧列表(标准图元)接口")
@PostMapping(value = "/archi-list")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧列表(标准图元)接口",moduleName = "元模型管理")
public Result getArchiList() {
Integer type = 1;
return Result.success(archiMetaModelService.getEleListLeft(type));
}
@ApiOperation("加载画布左侧列表(常规图元)接口")
@PostMapping(value = "/archi-list2")
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, operDes = "加载画布左侧列表(常规图元)接口",moduleName = "元模型管理")
public Result getArchiList2() {
Integer type = 2;
return Result.success(archiMetaModelService.getEleListLeft(type));
}
}
package org.arch.overall.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.arch.base.Result;
import org.arch.common.modules.archoverall.dto.BatchRemoveDTO;
import org.arch.log.annotation.OperLog;
import org.arch.log.entity.DescContent;
import org.arch.log.logenum.LogOperTypeEnum;
import org.arch.log.logenum.LogTypeEnum;
import org.arch.common.modules.archoverall.dto.ArchiViewDTO;
import org.arch.common.modules.archoverall.entity.ArchiView;
import org.arch.overall.service.ArchiViewService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 架构视图
*
* @author lizhen
* @date 2024/05/22
*/
@Api(value = "/archi-vw", tags = {"架构视图"})
@RestController
@RequestMapping("archi-vw")
@RequiredArgsConstructor
public class ArchiViewController {
private final ArchiViewService archiViewService;
@PostMapping(value = "/")
@ApiOperation(DescContent.QUERY_LIST_VIEWS)
@OperLog(value = LogOperTypeEnum.QUERY, logTypeValue = LogTypeEnum.BUSI_LOG, moduleName = "架构视图设计", operDes = "架构视图设计查询")
public Result gtArchiView(@RequestBody ArchiViewDTO dto) {
return Result.success(archiViewService.gtArchiView(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize())));
}
@PostMapping("/ad-archi-vw")
@ApiOperation(value = "新增架构视图")
@OperLog(value = LogOperTypeEnum.ADD, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "新增架构视图")
public Result adArchiView(@RequestBody ArchiView vwDiss) {
return Result.success(archiViewService.insert(vwDiss));
}
@PostMapping(value = "/upd-archi-vw")
@ApiOperation(value = "修改视图配置")
@OperLog(value = LogOperTypeEnum.UPDATE, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "修改视图配置")
public Result updArchiView(@RequestBody ArchiView vwDiss) {
return Result.success(archiViewService.update(vwDiss));
}
@PostMapping(value = "/del-vw")
@ApiOperation("根据Id删除视图")
@OperLog(value = LogOperTypeEnum.DELETE, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "根据Id删除视图")
public Result delArchiView(@RequestBody ArchiView vwDis) {
return archiViewService.delArchiView(vwDis) ? Result.success("删除成功") : Result.error("删除失败");
}
@PostMapping(value = "/batchupd-vw")
@ApiOperation(value = "批量发布版本", notes = "批量发布版本")
@OperLog(value = LogOperTypeEnum.OTHER, logTypeValue = LogTypeEnum.BUSI_LOG,moduleName = "架构视图设计", operDes = "架构视图设计批量发布")
public Result updateVwDisBatch(@RequestBody @Validated BatchRemoveDTO requestMap) {
return Result.success(archiViewService.updEleBatch(requestMap));
}
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ability.ArchiAbilityInventoryDataDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationQueryDTO;
import org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO;
import org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation;
import java.util.List;
/**
* 中台服务清单关联资产(资产关联,中台架构服务,其他四大架构资产)(ArchiAbilityAssetsRelation)表数据库访问层
*
* @author makejava
* @since 2024-04-29 14:27:33
*/
public interface ArchiAbilityAssetsRelationMapper extends BaseMapper<ArchiAbilityAssetsRelation> {
void addBach(@Param("entities") List<ArchiAbilityAssetsRelation> assetsList);
/**
* 批量删除
*
* @param assetsList 资产清单
* @return {@link Boolean }
*/
Boolean removeBatchIds(@Param("list") List<Long> assetsList);
IPage<ArchiAbilityAssetsRelation> qryDataListPage(@Param("dto") ArchiAbilityInventoryDataDTO params, Page<ArchiAbilityAssetsRelation> page);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
IPage<ArchiAbilityAssetsRelationQueryVO> queryAssetRelation(@Param("params") ArchiAssetsRelationQueryDTO params, Page<ArchiAssetsRelationQueryDTO> page);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
ArchiAbilityAssetsRelationQueryVO queryAssetRelation(@Param("params") ArchiAssetsRelationQueryDTO params);
/**
* 资产关系数量
*
* @param assetRelaId 资产关系ID
* @return {@link Long }
*/
Long queryAssetRelationCountByTypeId(long assetRelaId);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.NeedInfoDTO;
import org.arch.common.modules.archoverall.dto.OnlineReviewCountQueryDTO;
import org.arch.common.modules.archoverall.dto.OnlineReviewWriteDTO;
import org.arch.common.modules.archoverall.vo.NeedReviewVo;
import org.arch.common.modules.archoverall.vo.OnlineReviewCountVO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.entity.OnlineReviewWrite;
import java.util.List;
public interface ArchiAssertMapper extends BaseMapper<AssetInfo> {
List<AssetInfo> maxVer(ArchiAssetInfoDTO params);
IPage<NeedReviewVo> qyNeedReview(@Param("page") Page<Object> page, @Param("nigr") NeedInfoDTO nigr);
IPage<OnlineReviewWrite> qyOnlineReview(@Param("onl") OnlineReviewWriteDTO params, @Param("page") Page<OnlineReviewWrite> page);
List<OnlineReviewWrite> qyOnlineReview(@Param("onl") OnlineReviewWriteDTO params);
/**
* 概设关联业务管理-概设统计分析-各单位概设统计
*/
IPage<OnlineReviewCountVO> qyneedCount(@Param("orcy") OnlineReviewCountQueryDTO params, @Param("page") Page<OnlineReviewCountVO> page);
List<OnlineReviewCountVO> qyreviewPassCount(@Param("orcy") OnlineReviewCountQueryDTO params);
IPage<OnlineReviewCountVO> qybatNeedCount(@Param("orqy") OnlineReviewCountQueryDTO params, @Param("page") Page<OnlineReviewCountVO> page);
List<OnlineReviewCountVO> qybatReviewPassCount(@Param("orqy") OnlineReviewCountQueryDTO params);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiAssetAppPrj;
/**
* <p>
* 系统项目资产关联表 Mapper 接口
* </p>
*
* @author java
* @since 2024-02-28
*/
public interface ArchiAssetAppPrjMapper extends BaseMapper<ArchiAssetAppPrj> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.dto.WordContentDTO;
import java.util.List;
import java.util.Map;
/**
* <p>
* 业务架构 Mapper 接口
* </p>
*
* @author author
* @since 2024-01-09
*/
@Mapper
public interface ArchiAssetInfoMapper extends MPJBaseMapper<AssetInfo> {
@Select("select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')),CHAR(45),'')),'-V',(SELECT (select date_format(now(), '%Y')) - 2023 +1),'.',(select date_format(now(), '%m')),'.','1'))\r\n" +
" as version")
String selectVer();
/**
* 分页列表查询
*
* @param params 参数
* @param page 页
* @return {@link IPage}<{@link AssetInfo}>
*/
IPage<AssetInfo> query(@Param("params") ArchiAssetInfoDTO params, Page<AssetInfo> page);
/**
* 列表查询
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> query(@Param("params") ArchiAssetInfoDTO params);
/**
* 架构资产信息详情
*
* @param assetId 资产 ID
* @return {@link AssetInfo}
*/
AssetInfo info(Long assetId);
/**
* 自动生成编号
* @param superiorAssetCode 上级编码
* @param rchiType 架构类型
* @param num 级别层次
* @return
*/
Integer getArchiAssetMaxNum(@Param("rchiType")String rchiType,
@Param("superiorAssetCode")String superiorAssetCode,
@Param("num")int num,
@Param("archiStage") String archiStage);
/**
* @param params 查询
* @return
*/
Map<String,String> searhByKeyword(@Param("params") WordContentDTO params);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.archoverall.entity.ArchiAssetSystem;
/**
* <p>
* 架构版本 Mapper 接口
* </p>
*
* @author author
* @since 2024-01-16
*/
@Mapper
public interface ArchiAssetSystemMapper extends MPJBaseMapper<ArchiAssetSystem> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import java.util.List;
public interface ArchiElePropertyMapper extends BaseMapper<ArchiEleProperty> {
List<ArchiEleProperty> gtArchiElePropertyList(@Param("yp") ArchiEleProperty ynMolProyls);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain;
import java.util.List;
public interface ArchiEleRelaConstrainMapper extends BaseMapper<ArchiEleRelaConstrain> {
/**
* 批量添加
*/
void batchInsert(List<ArchiEleRelaConstrain> list);
/**
* 根据元素关系,删除元素关系
*
* @param eleRelaId 元素关系 ID
*/
void delByRelaId(Long eleRelaId);
/**
* 根据元素关系编码查询约束条件
*
* @param eleRelaId 元素关系ID
* @return {@link List}<{@link ArchiEleRelaConstrain}>
*/
List<ArchiEleRelaConstrain> getArchiEleRelaConstraint(Long eleRelaId);
/**
* 根据元素关系ID查询元素关系
* 元素带属性
*
* @param constrainId 约束 ID
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import java.util.List;
public interface ArchiEleRelaMapper extends BaseMapper<ArchiEleRela> {
/**
* 分页
*
* @param dto 参数
* @param page 页
* @return {@link IPage }<{@link ArchiEleRela }>
*/
IPage<ArchiEleRela> gtArchiEleRela(@Param("dto") ArchiEleRelaDTO dto, Page<Object> page);
/**
* 列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiEleRela }>
*/
List<ArchiEleRela> gtEleRelList(@Param("dto") ArchiEleRelaDTO dto);
/**
* 查询资产关系
*
*/
List<ArchiEleRelaNameVO> findEleRelaList();
/**
* 获取版本
*
* @param eleRelaId 元素关系 ID
* @return {@link String }
*/
String getVersion(@Param("eleRelaId") Long eleRelaId);
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import java.util.List;
public interface ArchiElementMapper extends MPJBaseMapper<ArchiElement> {
/**
* 初始化版本
*
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> initVersion();
/**
* 获取版本
*
* @return {@link List }<{@link ArchiElement }>
*/
String getVersion(@Param("elementId") Long elementId);
/**
* 元素列表
*
* @param dto DTO
* @param page 页
* @return {@link IPage }<{@link ArchiElement }>
*/
IPage<ArchiElement> gtArchiElement(@Param("dto") ArchiElementDTO dto, Page<Object> page);
/**
* 根据元素名称查询元素
*
* @param archiElements Archi 元素
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtArcEleByName(@Param("do") ArchiElement archiElements);
/**
* 获取元素列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEleList(@Param("dto") ArchiElementDTO dto);
List<ArchiElement> maxVer(ArchiElement archiElement);
/**
* 根据视图配置查询架构元素
*
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> queryEleByAssertView(Long viewId);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.archoverall.entity.ArchiElementNestRelation;
/**
* <p>
* 需求管理信息 Mapper 接口
* </p>
*
* @author java
* @since 2024-03-05
*/
@Mapper
public interface ArchiElementNestRelationMapper extends MPJBaseMapper<ArchiElementNestRelation> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import java.util.List;
public interface ArchiMetaModelMapper extends MPJBaseMapper<ArchiMetaModel> {
List<ArchiMetaModel> selectVer();
/**
* 元模型列表
*
* @param dto DTO
* @param page 页
* @return {@link IPage }<{@link ArchiMetaModel }>
*/
IPage<ArchiMetaModel> getYnMol(@Param("dto") ArchiMetaModelDTO dto, Page<Object> page);
/**
* 更新 MX 图形模型
*
* @param metaModelId 元模型 ID
* @param graphId 图形 ID
* @return {@link Boolean}
*/
Boolean updateMxGraphModel(@Param("metaModelId") Long metaModelId, @Param("graphId") Long graphId);
/**
* 根据元模型id获取mxCell
*
* @param metaModelId 元模型id
* @return {@link String}
*/
String getMxCellByMetaModelId(Long metaModelId);
/**
* 查询架构原模型
*
* @param id 同上
* @return {@link ArchiMetaModel}
*/
ArchiMetaModel findMetaModelById(Long id);
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
/**
* <p>
* 元模型数据字典详情 Mapper 接口
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictDetailMapper extends MPJBaseMapper<ArchiModelDictDetail> {
}
package org.arch.overall.mapper;
import com.github.yulichang.base.MPJBaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
/**
* <p>
* 元模型数据字典 Mapper 接口
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictMapper extends MPJBaseMapper<ArchiModelDict> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetDTO;
import org.arch.common.modules.archoverall.dto.design.ArchiViewDTO;
import org.arch.common.modules.archoverall.vo.ArchiAssetVO;
import org.arch.common.modules.archoverall.vo.ArchiVersionVO;
import org.arch.common.modules.archoverall.vo.ArchiViewVO;
import java.util.List;
@Mapper
public interface ArchiTotalAssetMapper extends BaseMapper {
/**
* 总体架构资产自动图形化
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> automaticGraphing(ArchiAssetDTO model);
/**
* 总体架构资产智能搜索
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeList(ArchiAssetDTO model);
/**
* 总体架构可视化展示
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeListView(ArchiAssetDTO model);
/**
* 查询视图
*
* @param params 参数
* @return {@link List}<{@link ArchiViewVO}>
*/
List<ArchiViewVO> queryView(ArchiViewDTO params);
/**
* 查询架构版本
*
* @param params 参数
* @return {@link List}<{@link ArchiVersionVO}>
*/
List<ArchiVersionVO> queryArchiVersion(ArchiVersionVO params);
/**
* 根据元素查询对应的资产
*
* @param elementId 元素 ID
* @return {@link List }<{@link ArchiAssetVO }>
*/
List<ArchiAssetVO> findAssertByElementId(@Param("elementId") Long elementId);
}
\ No newline at end of file
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
public interface ArchiViewEleMapper extends BaseMapper<ArchiViewEle> {
}
package org.arch.overall.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.archoverall.entity.ArchiView;
import java.util.List;
public interface ArchiViewMapper extends BaseMapper<ArchiView> {
@Select("select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')),CHAR(45),'')),'-V',(SELECT (select date_format(now(), '%Y')) - 2023 +1),'.',(select date_format(now(), '%m')),'.','1')) as version")
List<ArchiView> selectVer();
List<ArchiView> maxVer(ArchiView vwDiss);
/**
* 获取版本
*
* @param id id
* @return {@link List }<{@link ArchiElement }>
*/
String getVersion(@Param("id") Long id);
}
package org.arch.overall.mapper;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.arch.base.utils.Constant;
import org.arch.common.modules.archoverall.entity.GraphRepository;
public interface GraphRepositoryMapper extends BaseMapper<GraphRepository> {
/**
* 初始化架构视图
*
* @return {@link Long }
*/
default Long initArchiView() {
GraphRepository repository = new GraphRepository();
repository.setGraphCode(IdUtil.fastUUID());
repository.setContent(Constant.MX_MODEL_GRAPH);
repository.setGraphType(Constant.ARCHI_VIEW_DATA);
insert(repository);
return repository.getGraphId();
}
/**
* 初始化原模型
*
* @return {@link Long }
*/
default Long initArchiModel() {
GraphRepository repository = new GraphRepository();
repository.setGraphCode(IdUtil.fastUUID());
repository.setContent(Constant.MX_MODEL_GRAPH);
repository.setGraphType(Constant.META_MODEL_DATA);
insert(repository);
return repository.getGraphId();
}
}
\ No newline at end of file
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetVisalDTO;
import org.arch.common.modules.archoverall.dto.DelDTO;
import org.arch.common.modules.archoverall.vo.ArchVisualVO;
import org.arch.common.modules.archoverall.dto.ArchiDto;
import org.arch.common.modules.archoverall.entity.ArchiElementNestRelation;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import java.util.List;
import java.util.Map;
/**
* <p>
* 资产架构 服务类
* </p>
*
* @author author
* @since 2024-01-09
*/
public interface ArchiAssetInfoService extends IService<AssetInfo> {
/**
* 资产分页
*
* @param params 参数
* @return {@link IPage }<{@link AssetInfo }>
*/
IPage<AssetInfo> iPage(ArchiAssetInfoDTO params);
/**
* 资产列表
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> assetList(ArchiAssetInfoDTO params);
Boolean inster(ArchiAssetInfoDTO params);
/**
* 架构资产信息详情
*
* @param assetId 资产 ID
* @return {@link AssetInfo}
*/
AssetInfo info(Long assetId);
Boolean update(ArchiAssetInfoDTO params);
/**
* 批量删除
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean delBatch(DelDTO requestMap);
String selectVer();
List<AssetInfo> qryTree(ArchiDto frameworkDto);
List<ArchiElementNestRelation> qyLastEle(ArchiAssetInfoDTO params);
Map<ArchiAssetInfoDTO, List<ArchiAssetInfoDTO>> getArchVisual(ArchVisualVO archVisualVO);
List<Map<String, Object>> getAssetVisalFirst(ArchiAssetVisalDTO archiAssetVisalDTO);
}
package org.arch.overall.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.arch.common.modules.archoverall.dto.*;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationDTO;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetsRelationQueryDTO;
import org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO;
import org.arch.common.modules.archoverall.vo.ArchiAssetVO;
import org.arch.common.modules.archoverall.vo.ArchiVersionVO;
import org.arch.common.modules.archoverall.vo.MxCellVO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import java.util.List;
/**
* 资产服务
*
* @author admin
* @date 2024/01/24
*/
public interface ArchiAssetService {
/**
* 总体架构资产自动图形化
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<Tree<String>> automaticGraphing(ArchiAssetDTO model);
/**
* 总体架构资产智能搜索
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeList(ArchiAssetDTO model);
/**
* 根据元素查询对应的资产
*
* @param elementId 元素 ID
* @return {@link List }<{@link ArchiAssetVO }>
*/
List<ArchiAssetVO> findAssertByElementId(Long elementId);
/**
* 总体架构可视化展示
*
* @param model 参数
* @return {@link List}<{@link ArchiAssetVO}>
*/
List<ArchiAssetVO> treeListView(ArchiAssetDTO model);
/**
* 根据元模型id获取mxCell
*
* @param metaModelId 元模型id
*/
List<MxCellVO> getMxCellByMetaModelId(Long metaModelId);
/**
* 架构资产版本
*
* @param params 参数
* @return {@link List}<{@link ArchiVersionVO}>
*/
List<ArchiVersionVO> queryArchiVersion(ArchiVersionVO params);
//------------------------------------资产关系------------------------------------
/**
* 添加资产关系
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean addAssetRelation(ArchiAssetsRelationDTO params);
/**
* 修改资产
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean updateAssetRelation(ArchiAssetsRelationDTO params);
/**
* 删除资产关系
*
* @param dto DTO
* @return {@link Boolean }
*/
Boolean del(BatchRemoveDTO dto);
/**
* 发布/停用
*
* @param dto DTO
* @return {@link Boolean }
*/
Boolean post(ArchiRelaSatePostDTO dto);
/**
* 查询资产关系
*
* @param params 参数
* @return {@link IPage }<{@link ArchiAbilityAssetsRelationQueryVO }>
*/
IPage<ArchiAbilityAssetsRelationQueryVO> queryAssetRelation(ArchiAssetsRelationQueryDTO params);
/**
* 查询资产关系详情
*
* @param params 参数
* @return {@link List}<{@link ArchiAbilityAssetsRelationQueryVO}>
*/
ArchiAbilityAssetsRelationQueryVO queryAssetRelationDetail(ArchiAssetsRelationQueryDTO params);
/**
* 最大版本
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> maxVer(ArchiAssetInfoDTO params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.DelDTO;
import org.arch.common.modules.archoverall.entity.AssetInfo;
import org.arch.common.modules.archoverall.vo.AssetInfoLevelVO;
import java.util.List;
/**
* <p>
* 资产架构 服务类
* </p>
*
* @author author
* @since 2024-01-09
*/
public interface ArchiAssetSysService extends IService<AssetInfo> {
/**
* 分页查询
*
* @param params 参数
* @return {@link IPage }<{@link AssetInfo }>
*/
IPage<AssetInfo> iPage(ArchiAssetInfoDTO params);
/**
* 列表查询
*
* @param params 参数
* @return {@link List }<{@link AssetInfo }>
*/
List<AssetInfo> assetList(ArchiAssetInfoDTO params);
Boolean inster(ArchiAssetInfoDTO params);
Boolean update(ArchiAssetInfoDTO params);
/**
* 批量删除
*
* @param params 参数
*/
Boolean delBatch(DelDTO params);
Boolean extend(ArchiAssetInfoDTO params);
List<AssetInfoLevelVO> assetInfoLevel(ArchiAssetInfoDTO params);
/**
* 停用
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean stop(ArchiAssetInfoDTO params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import java.util.List;
import java.util.Map;
public interface ArchiElePropertyService extends IService<ArchiEleProperty>{
List<ArchiEleProperty> gtArchiElePropertyList(ArchiEleProperty ynMolProyls);
/**
* 批量修改属性
*
* @param requestList 请求列表
* @return {@link Boolean }
*/
Boolean updateEleRelBatch(List<Map<String, Object>> requestList);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaConstrainDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import java.util.List;
public interface ArchiEleRelaService extends IService<ArchiEleRela> {
/**
* 分页查询元素关系
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiEleRela }>
*/
IPage<ArchiEleRela> gtArchiEleRela(ArchiEleRelaDTO dto);
/**
* 列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiEleRela }>
*/
List<ArchiEleRela> gtEleRelList(ArchiEleRelaDTO dto);
/**
* 根据元素关系编码查询约束条件
*
* @param eleRelaId 元素关系ID
*/
List<ArchiEleRelaConstrainDTO> getArchiEleRelaConstraint(Long eleRelaId);
/**
* 根据元素关系ID查询元素关系
* 元素带属性
*
* @param constrainId 约束 ID
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId);
/**
* 查询资产关系
*
* @return {@link List}<{@link ArchiEleRelaVO}>
*/
List<ArchiEleRelaNameVO> findEleRelaList();
/**
* 批量发布
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean updBatch(BatchUpdateRelaDTO requestMap);
/**
* 删除
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean del(ArchiEleRela params);
/**
* 插入
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean insert(ArchiEleRela params);
/**
* 更新
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean update(ArchiEleRela params);
/**
* 批量新增元素和元素关系
*
* @param archiEleRelas 对象
*/
void addArchiEleRelaConstraint(ArchiEleRela archiEleRelas);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import java.util.List;
public interface ArchiElementService extends IService<ArchiElement> {
/**
* 元素列表
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiElement }>
*/
IPage<ArchiElement> gtArchiElement(ArchiElementDTO dto);
/**
* 新增元素
*
* @param params 参数
* @return {@link Boolean }
*/
Boolean insert(ArchiElement params);
/**
* 更新
*
* @param archiElement Archi 元素
* @return {@link Boolean }
*/
Boolean update(ArchiElement archiElement);
/**
* 删除
*
* @param archiElement Archi 元素
* @return {@link Boolean }
*/
Boolean delete(ArchiElement archiElement);
/**
* 批量发布
*
* @param requestMap 参数
* @return {@link Boolean }
*/
Boolean updEleBatch(BatchUpdateDTO requestMap);
/**
* 元素列表
*
* @param dto DTO
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEleList(ArchiElementDTO dto);
/**
* 查找元模型属性
*
* @param type 类型
* @param idList ID 列表
* @return {@link List }<{@link ArchiEleProperty }>
*/
List<ArchiEleProperty> findMetaModelProperties(int type, List<Long> idList);
/**
* 查询元素列表
*
* @param params 参数
* @return {@link List }<{@link ArchiElement }>
*/
List<ArchiElement> gtEle(ArchiElement params);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.asset.ArchiAssetInfoDTO;
import org.arch.common.modules.archoverall.dto.ArchiListResultDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiMetaModelDTO;
import org.arch.common.modules.archoverall.entity.ArchiMetaModel;
import java.util.List;
public interface ArchiMetaModelService extends IService<ArchiMetaModel> {
/**
* 删除
*
* @param archiMetaModels Archi 元模型
* @return {@link Boolean }
*/
Boolean del(ArchiMetaModel archiMetaModels);
List<ArchiMetaModel> selectVer();
/**
* 插入
*
* @param dto DTO
* @return {@link Boolean }
*/
Long insert(ArchiMetaModel dto);
/**
* 更新
*
* @return {@link Boolean }
*/
Boolean update(ArchiMetaModel dto);
/**
* 更新 MX 图形模型
*
* @param dto DTO
* @return int
*/
Boolean updateMxGraphModel(ArchiMetaModelDTO dto);
/**
* 查询架构原模型
*
* @param id 同上
* @return {@link ArchiMetaModel}
*/
ArchiMetaModel findMetaModelById(Long id);
/**
* 获取画布左侧资产列表
*
* @param params 参数
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getArchiAssetList(ArchiAssetInfoDTO params);
/**
* 分页列表
*
* @param dto DTO
* @return {@link IPage }<{@link ArchiMetaModel }>
*/
IPage<ArchiMetaModel> gtArchiMetaModel(ArchiMetaModelDTO dto);
/**
* 获取画布左侧资产列表
*
* @param params 参数
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getArchiAssetList1(ArchiAssetInfoDTO params);
/**
* 获取画布左侧标准元素列表
*
* @param type 类型 1:常规图元 2:标准图元
* @return {@link ArchiListResultDTO }
*/
ArchiListResultDTO getEleListLeft(Integer type);
}
package org.arch.overall.service;
import org.arch.common.modules.archoverall.vo.ArchiModelDictVO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.mapstruct.Mapper;
/**
* <p>
*
* </p>
*
* @author makejava
* @since 2023-12-25
*/
@Mapper(componentModel = "spring")
public interface ArchiModelDictCovert {
ArchiModelDictVO convertToVO(ArchiModelDict archiModelDict);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDetailDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
import java.util.List;
/**
* <p>
* 元模型数据字典详情 服务类
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictDetailService extends IService<ArchiModelDictDetail> {
Boolean insert(List<ArchiModelDictDetailDTO> dto);
Boolean update(ArchiModelDictDetailDTO dto);
Boolean del(BathRemoveDTO dto);
List<ArchiModelDictDetailVO> getDictDetails(String key);
List<ArchiModelDict> getAllDict();
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import java.util.List;
/**
* <p>
* 元模型数据字典 服务类
* </p>
*
* @author
* @since 2024-02-22
*/
public interface ArchiModelDictService extends IService<ArchiModelDict> {
IPage<ArchiModelDictVO> page(ArchiModelDictDTO dto);
Boolean insert(ArchiModelDictDTO dto);
Boolean update(ArchiModelDictDTO dto);
ArchiModelDictVO detail(ArchiModelDictDTO dto);
Boolean post(ArchiModelDictDTO dto);
Boolean del(BathRemoveDTO dto);
/**
* 获取元模型字典详情
*
* @param value 字典值
* @return {@link List }<{@link ArchiModelDictDetailVO }>
*/
List<ArchiModelDictDetailVO> getDictDetails(String value);
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.entity.ArchiView;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
import org.jetbrains.annotations.NotNull;
import org.springframework.transaction.annotation.Transactional;
public interface ArchiViewEleService extends IService<ArchiViewEle> {
@Transactional(rollbackFor = Exception.class)
default Boolean createArchiViewEle(@NotNull ArchiView params) {
ArchiViewEle archiViewEles = new ArchiViewEle();
archiViewEles.setArchiViewId(params.getViewId());
archiViewEles.setArchiEleId(params.getArchiEleId());
archiViewEles.setEleName(params.getEleName());
archiViewEles.setArchiEleRelId(params.getArchiEleRelId());
archiViewEles.setRelName(params.getRelName());
archiViewEles.setType(params.getType());
return save(archiViewEles);
}
}
package org.arch.overall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.archoverall.dto.ArchiViewDTO;
import org.arch.common.modules.archoverall.dto.BatchRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiView;
public interface ArchiViewService extends IService<ArchiView> {
IPage<ArchiView> gtArchiView(ArchiViewDTO dto, Page<ArchiView> page);
Boolean insert(ArchiView vwDiss);
Boolean update(ArchiView vwDiss);
Boolean updEleBatch(BatchRemoveDTO requestMap);
Boolean delArchiView(ArchiView vwDis);
}
package org.arch.overall.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.overall.mapper.ArchiElePropertyMapper;
import org.arch.overall.service.ArchiElePropertyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class ArchiElePropertyImpl extends ServiceImpl<ArchiElePropertyMapper, ArchiEleProperty> implements ArchiElePropertyService {
@Autowired
private ArchiElePropertyMapper archiElePropertyMapper;
@Override
public List<ArchiEleProperty> gtArchiElePropertyList(ArchiEleProperty ynMolProyls) {
List<ArchiEleProperty> YnMolProyList = archiElePropertyMapper.gtArchiElePropertyList(ynMolProyls);
return YnMolProyList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateEleRelBatch(List<Map<String, Object>> requestList) {
List<ArchiEleProperty> updatedDataList = new ArrayList<>();
for (Map<String, Object> requestData : requestList) {
Integer propertyId = (Integer) requestData.get("propertyId");
String propertyValue = (String) requestData.get("propertyValue");
QueryWrapper<ArchiEleProperty> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("property_id", propertyId);
ArchiEleProperty archiEleProperty = getOne(queryWrapper);
if (archiEleProperty != null) {
archiEleProperty.setPropertyValue(propertyValue);
updatedDataList.add(archiEleProperty);
}
}
return updateBatchById(updatedDataList);
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.base.utils.VersionUtil;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaConstrainDTO;
import org.arch.common.modules.archoverall.dto.ele.ArchiEleRelaDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateRelaDTO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO;
import org.arch.common.modules.archoverall.vo.ArchiEleRelaVO;
import org.arch.common.modules.archoverall.entity.ArchiEleRela;
import org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.mapper.ArchiEleRelaConstrainMapper;
import org.arch.overall.mapper.ArchiEleRelaMapper;
import org.arch.overall.mapper.ArchiElementMapper;
import org.arch.overall.service.ArchiEleRelaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service
public class ArchiEleRelaImpl extends ServiceImpl<ArchiEleRelaMapper, ArchiEleRela> implements ArchiEleRelaService {
@Autowired
private ArchiEleRelaService archiEleRelaService;
@Autowired
private ArchiEleRelaMapper archiEleRelaMapper;
@Autowired
private ArchiEleRelaConstrainMapper archiEleRelaConstrainMapper;
@Autowired
private ArchiElementMapper archiElementMapper;
@Override
public IPage<ArchiEleRela> gtArchiEleRela(ArchiEleRelaDTO dto) {
IPage<ArchiEleRela> page = archiEleRelaMapper.gtArchiEleRela(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize()));
List<ArchiEleRela> records = page.getRecords();
for (ArchiEleRela record : records) {
record.setArrList(archiEleRelaService.getArchiEleRelaConstraint(record.getEleRelaId()));
}
return page;
}
@Override
public List<ArchiEleRela> gtEleRelList(ArchiEleRelaDTO dto) {
return archiEleRelaMapper.gtEleRelList(dto);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void addArchiEleRelaConstraint(ArchiEleRela archiEleRelas) {
List<ArchiEleRelaConstrainDTO> arrList = archiEleRelas.getArrList();
if (CollUtil.isNotEmpty(arrList)) {
List<ArchiEleRelaConstrain> list = new ArrayList<>();
arrList.forEach(it -> {
ArchiEleRelaConstrain item = new ArchiEleRelaConstrain();
ArchiElement source = archiElementMapper.selectById(it.getEleGtId());
ArchiElement target = archiElementMapper.selectById(it.getEleLtId());
if (Objects.nonNull(source)) {
item.setEleGtId(it.getEleGtId());
item.setEleGtName(source.getElementName());
}
if (Objects.nonNull(target)) {
item.setEleLtId(it.getEleLtId());
item.setEleLtName(target.getElementName());
}
item.setLastUpdateTime(new Date());
item.setCreateTime(Calendar.getInstance().getTime());
item.setScope(it.getScope());
item.setEleRelaId(archiEleRelas.getEleRelaId());
item.setEleRelaName(archiEleRelas.getRsName());
list.add(item);
});
// 新增或者更新时删除之前历史
archiEleRelaConstrainMapper.delByRelaId(archiEleRelas.getEleRelaId());
archiEleRelaConstrainMapper.batchInsert(list);
}
}
@Override
public List<ArchiEleRelaConstrainDTO> getArchiEleRelaConstraint(Long eleRelaId) {
List<ArchiEleRelaConstrain> archiEleRelaConstraint = archiEleRelaConstrainMapper.getArchiEleRelaConstraint(eleRelaId);
return BeanUtil.copyToList(archiEleRelaConstraint, ArchiEleRelaConstrainDTO.class);
}
@Override
public List<ArchiEleRelaVO> findEleRelaConstrainList(Long constrainId) {
return archiEleRelaConstrainMapper.findEleRelaConstrainList(constrainId);
}
@Override
public List<ArchiEleRelaNameVO> findEleRelaList() {
return baseMapper.findEleRelaList();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updBatch(BatchUpdateRelaDTO requestMap) {
List<Long> eleRelaId = requestMap.getEleRelaId();
Assert.isFalse(CollectionUtils.isEmpty(eleRelaId), "元素关系ID不能为空");
eleRelaId.forEach(it -> {
ArchiEleRela archiEleRela = baseMapper.selectById(it);
Assert.notNull(archiEleRela, "未找到元素关系");
Integer state = archiEleRela.getState();
Assert.isFalse(1 == state, "当前状态下不可发布!");
String version = baseMapper.getVersion(it);
archiEleRela.setState(1);
archiEleRela.setVersion(VersionUtil.getNextVersion(version));
archiEleRela.updateById();
});
return Boolean.TRUE;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean del(ArchiEleRela params) {
Long eleRelaId = params.getEleRelaId();
ArchiEleRela eleRela = getById(eleRelaId);
Assert.notNull(eleRela, "未找到元素关系");
return eleRela.deleteById();
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insert(ArchiEleRela archiEleRelas) {
archiEleRelas.setEleRelaCode(UUID.fastUUID().toString());
archiEleRelas.setDelFlag(0);
Assert.isFalse(archiEleRelas.getRsName().length() > 100,
"元素关系名称太长请修改为100个字符以内再提交!");
return save(archiEleRelas);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean update(ArchiEleRela params) {
Long eleRelaId = params.getEleRelaId();
ArchiEleRela eleRela = getById(eleRelaId);
Assert.notNull(eleRela, "未找到元素关系");
Integer state = params.getState();
if (1 == state) {
String ver = VersionUtil.getNextVersion(baseMapper.getVersion(eleRelaId));
params.setVersion(ver);
}
BeanUtil.copyProperties(params, eleRela, "createTime");
return eleRela.updateById();
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
import org.arch.base.utils.VersionUtil;
import org.arch.common.modules.archoverall.entity.ArchiEleProperty;
import org.arch.common.modules.archoverall.entity.ArchiElement;
import org.arch.overall.mapper.ArchiElePropertyMapper;
import org.arch.overall.mapper.ArchiElementMapper;
import org.arch.common.modules.archoverall.dto.ele.ArchiElementDTO;
import org.arch.common.modules.archoverall.dto.BatchUpdateDTO;
import org.arch.overall.service.ArchiElementService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service
public class ArchiElementImpl extends ServiceImpl<ArchiElementMapper, ArchiElement> implements ArchiElementService {
@Resource
private ArchiElementMapper archiElementMapper;
@Resource
private ArchiElePropertyMapper archiElePropertyMapper;
public IPage<ArchiElement> gtArchiElement(ArchiElementDTO dto) {
return archiElementMapper.gtArchiElement(dto, PageDTO.of(dto.getCurrent(), dto.getPageSize()));
}
@Override
public Boolean insert(ArchiElement archiElements) {
archiElements.setElementCode(UUID.fastUUID().toString());
if (archiElements.getState() == 1) {
List<ArchiElement> list = archiElementMapper.initVersion();
for (ArchiElement element : list) {
if (element.getVersion() != null) {
archiElements.setVersion(element.getVersion());
break;
}
}
LambdaQueryWrapper<ArchiElement> wrapper = Wrappers.lambdaQuery(ArchiElement.class).select().eq(StrUtil.isNotBlank(archiElements.getElementName()), ArchiElement::getElementName, archiElements.getElementName()).eq(Objects.nonNull(archiElements.getArchiBelongId()), ArchiElement::getArchiBelongId, archiElements.getArchiBelongId()).ne(Objects.nonNull(archiElements.getElementId()), ArchiElement::getElementId, archiElements.getElementId());
List<ArchiElement> eleList = archiElementMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(eleList)) {
eleList.forEach(e -> {
e.setState(0);
archiElementMapper.updateById(e);
});
}
List<ArchiElement> maxVer = archiElementMapper.maxVer(archiElements);
if (!CollectionUtils.isEmpty(maxVer)) {
String lastMaxVer = maxVer.get(0).getVersion();
String ver = VersionUtil.getNextVersion(lastMaxVer);
archiElements.setVersion(ver);
}
}
archiElements.setDelFlag(0);
return save(archiElements);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean delete(ArchiElement archiElement) {
ArchiElement model = getById(archiElement.getElementId());
Assert.notNull(model, "未找到元素");
Integer state = model.getState();
Assert.isFalse(1 == state, "当前状态下不可删除!");
return removeById(archiElement);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updEleBatch(BatchUpdateDTO requestMap) {
List<Long> elementId = requestMap.getElementId();
Assert.isFalse(CollectionUtils.isEmpty(elementId), "元素ID不能为空");
elementId.forEach(it -> {
ArchiElement archiElement = archiElementMapper.selectById(it);
Assert.notNull(archiElement, "未找到元素");
Integer state = archiElement.getState();
Assert.isFalse(1 == state, "当前状态下不可发布!");
String version = archiElementMapper.getVersion(it);
archiElement.setState(1);
archiElement.setVersion(VersionUtil.getNextVersion(version));
archiElement.updateById();
});
return Boolean.TRUE;
}
@Override
public List<ArchiElement> gtEleList(ArchiElementDTO dto) {
return archiElementMapper.gtEleList(dto);
}
@Override
public List<ArchiEleProperty> findMetaModelProperties(int type, List<Long> eleIdList) {
LambdaQueryWrapper<ArchiEleProperty> wrapper = new LambdaQueryWrapper<ArchiEleProperty>().eq(ArchiEleProperty::getType, type).in(ArchiEleProperty::getTypeId, eleIdList).eq(ArchiEleProperty::getDelFlag, 0);
return archiElePropertyMapper.selectList(wrapper);
}
@Override
public List<ArchiElement> gtEle(ArchiElement params) {
LambdaQueryWrapper<ArchiElement> wrapper = new LambdaQueryWrapper<ArchiElement>().like(StrUtil.isNotBlank(params.getElementName()), ArchiElement::getElementName, params.getElementName()).eq(Objects.nonNull(params.getArchiBelongId()), ArchiElement::getArchiBelongId, params.getArchiBelongId()).eq(Objects.nonNull(params.getEaLevel()), ArchiElement::getEaLevel, params.getEaLevel()).eq(Objects.nonNull(params.getEleType()), ArchiElement::getEleType, params.getEleType()).eq(Objects.nonNull(params.getState()), ArchiElement::getState, params.getState()).eq(ArchiElement::getDelFlag, 0).orderByDesc(ArchiElement::getCreateTime);
return archiElementMapper.selectList(wrapper);
}
@Override
public Boolean update(ArchiElement archiElement) {
Integer state = archiElement.getState();
if (archiElement.getElementId() == null) {
throw new IllegalArgumentException("修改元素主键不能为空!");
}
// 发布生成新版本,须传元素名称
List<ArchiElement> lists = archiElementMapper.gtArcEleByName(archiElement);
if (state == 1 && !lists.isEmpty() && lists.get(0).getVersion() == null) {
List<ArchiElement> list = archiElementMapper.initVersion();
for (ArchiElement element : list) {
if (element.getVersion() != null) {
archiElement.setVersion(element.getVersion());
break;
}
}
} else if (state == 1 && !lists.isEmpty() && lists.get(0).getVersion() != null) {
LambdaQueryWrapper<ArchiElement> wrapper = Wrappers.lambdaQuery(ArchiElement.class).select().eq(StrUtil.isNotBlank(archiElement.getElementName()), ArchiElement::getElementName, archiElement.getElementName()).eq(Objects.nonNull(archiElement.getArchiBelongId()), ArchiElement::getArchiBelongId, archiElement.getArchiBelongId()).ne(Objects.nonNull(archiElement.getElementId()), ArchiElement::getElementId, archiElement.getElementId());
List<ArchiElement> eleList = archiElementMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(eleList)) {
eleList.forEach(e -> {
e.setState(0);
archiElementMapper.updateById(e);
});
}
List<ArchiElement> maxVer = archiElementMapper.maxVer(archiElement);
if (!CollectionUtils.isEmpty(maxVer)) {
String lastMaxVer = maxVer.get(0).getVersion();
String ver = VersionUtil.getNextVersion(lastMaxVer);
archiElement.setVersion(ver);
}
}
archiElement.setLastUpdateTime(new Date());
archiElementMapper.updateById(archiElement);
return true;
}
}
package org.arch.overall.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import org.arch.common.modules.archoverall.dto.ele.ArchiModelDictDetailDTO;
import org.arch.common.modules.archoverall.vo.ArchiModelDictDetailVO;
import org.arch.common.modules.base.dto.BathRemoveDTO;
import org.arch.common.modules.archoverall.entity.ArchiModelDict;
import org.arch.common.modules.archoverall.entity.ArchiModelDictDetail;
import org.arch.overall.mapper.ArchiModelDictDetailMapper;
import org.arch.overall.mapper.ArchiModelDictMapper;
import org.arch.overall.service.ArchiModelDictDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 元模型数据字典详情 服务实现类
* </p>
*
* @author
* @since 2024-02-22
*/
@Service
@RequiredArgsConstructor
public class ArchiModelDictDetailServiceImpl extends ServiceImpl<ArchiModelDictDetailMapper, ArchiModelDictDetail> implements ArchiModelDictDetailService {
private final ArchiModelDictMapper archiModelDictMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insert(List<ArchiModelDictDetailDTO> dto) {
List<ArchiModelDictDetail> details = new ArrayList<>();
dto.forEach(it -> {
ArchiModelDictDetail detail = new ArchiModelDictDetail();
Long dictId = it.getDictId();
String label = it.getLabel();
String value = it.getValue();
Assert.notNull(dictId, "数据字典ID不能为空");
Assert.notBlank(label, "字段中文名不能为空");
Assert.notBlank(value, "字段值不能为空");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDictDetail::getDictId, it.getDictId());
wrapper.eq(ArchiModelDictDetail::getLabel, it.getLabel());
Assert.isFalse(count(wrapper) > 0, "字典中文名已存在");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper1 = Wrappers.lambdaQuery();
wrapper1.eq(ArchiModelDictDetail::getDictId, it.getDictId());
wrapper1.eq(ArchiModelDictDetail::getValue, it.getValue());
Assert.isFalse(count(wrapper1) > 0, "字段值已存在");
detail.setDictId(dictId);
detail.setLabel(label);
detail.setValue(value);
detail.setSort(it.getSort());
detail.setRemark(it.getRemark());
details.add(detail);
});
return saveBatch(details);
}
@Override
public Boolean update(ArchiModelDictDetailDTO dto) {
ArchiModelDictDetail detail = new ArchiModelDictDetail();
Long id = dto.getId();
String label = dto.getLabel();
String value = dto.getValue();
ArchiModelDictDetail model = baseMapper.selectById(id);
Assert.notNull(id, "数据字典详情ID不能为空");
Assert.notBlank(label, "字段中文名不能为空");
Assert.notBlank(value, "字段值不能为空");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDictDetail::getLabel, dto.getLabel());
wrapper.eq(ArchiModelDictDetail::getDictId, model.getDictId());
wrapper.notIn(ArchiModelDictDetail::getId, dto.getId());
Assert.isFalse(count(wrapper) > 0, "字典中文名已存在");
LambdaQueryWrapper<ArchiModelDictDetail> wrapper1 = Wrappers.lambdaQuery();
wrapper1.eq(ArchiModelDictDetail::getValue, dto.getValue());
wrapper1.eq(ArchiModelDictDetail::getDictId, model.getDictId());
wrapper1.notIn(ArchiModelDictDetail::getId, dto.getId());
Assert.isFalse(count(wrapper1) > 0, "字段值已存在");
BeanUtil.copyProperties(dto, detail);
return updateById(detail);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean del(BathRemoveDTO dto) {
List<Long> ids = dto.getIds();
Assert.isFalse(CollUtil.isEmpty(ids), "请至少选择一条记录");
ids.forEach(it -> {
ArchiModelDictDetail detail = baseMapper.selectById(it);
Assert.notNull(detail, "该数据不存在");
});
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<ArchiModelDictDetailVO> getDictDetails(String key) {
return baseMapper.selectJoinList(ArchiModelDictDetailVO.class,
new MPJLambdaWrapper<ArchiModelDictDetail>()
.selectAll(ArchiModelDictDetail.class)
.leftJoin(ArchiModelDict.class, ArchiModelDict::getId, ArchiModelDictDetail::getDictId)
.eq(ArchiModelDict::getTypeValue, key)
.eq(ArchiModelDict::getState, 1)
.orderByAsc(ArchiModelDictDetail::getSort));
}
@Override
public List<ArchiModelDict> getAllDict() {
LambdaQueryWrapper<ArchiModelDict> wrapper = Wrappers.lambdaQuery();
wrapper.eq(ArchiModelDict::getState, 1);
return archiModelDictMapper.selectList(wrapper);
}
}
package org.arch.overall.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.archoverall.entity.ArchiViewEle;
import org.arch.overall.mapper.ArchiViewEleMapper;
import org.arch.overall.service.ArchiViewEleService;
import org.springframework.stereotype.Service;
@Service
public class ArchiViewEleImpl extends ServiceImpl<ArchiViewEleMapper, ArchiViewEle> implements ArchiViewEleService {
}
package org.arch.overall.utils;
import org.apache.commons.lang3.StringUtils;
import org.arch.base.utils.Constant;
import org.arch.overall.mapper.ArchiAssetInfoMapper;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.stream.IntStream;
/**
* 生成资产编码工具类
*/
@Service
public class GenerateAssetCodeUtils {
public static GenerateAssetCodeUtils assetUtils;
@Resource
private ArchiAssetInfoMapper assetInfoMapper;
@PostConstruct
public void init() {
assetUtils = this;
assetUtils.assetInfoMapper = this.assetInfoMapper;
}
/**
* @param archiType 架构类型
* @param superiorAssetCode 所选的上级资产编号
* @param assetCode 资产编码,当创建资产为根节点时 该参数必传
* @return
*/
public static String getTotalityAssetCode(String archiType, String superiorAssetCode, String assetCode,String archiStage) {
String code = "";
if (StringUtils.isEmpty(archiType)) {
throw new NullPointerException("架构类型不能为空!");
}
//判断选择的节点是否为根节点,如果选择的是无则代表该节点未根节点,编码前端创建,否则自动生成
if (StringUtils.isEmpty(superiorAssetCode)) {
throw new NullPointerException("请选择上级资产!");
}
//选择无代表为根节点
if (Constant.NO.equals(superiorAssetCode)) {
if (StringUtils.isEmpty(assetCode)) {
throw new NullPointerException("当上级节点选择无时,资产编码必输!");
} else {
return assetCode.toUpperCase();
}
}
//如果有上级资产则通过编码获取该所选级别下一级末尾最大的值
int num = getNum(superiorAssetCode, '-') + 1;
Integer maxNum = assetUtils.assetInfoMapper.getArchiAssetMaxNum(archiType, superiorAssetCode, num,archiStage);
if (null == maxNum) {
maxNum = 0;
}
StringBuilder sb = new StringBuilder();
if (maxNum < 9) {
code = sb.append(superiorAssetCode).append("-").append("0").append(maxNum + 1).toString();
} else {
code = sb.append(superiorAssetCode).append("-").append(maxNum + 1).toString();
}
return code.toUpperCase();
}
/**
* 获取指定字符的数量
*
* @param input 输入的内容
* @param charCode
* @return
*/
public static int getNum(String input, char charCode) {
return IntStream.range(0, input.length())
.filter(i -> input.charAt(i) == charCode)
.map(i -> 1)
.sum();
}
}
server:
port: 17003
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-filters.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
- data-id: common-mybatis.${nacos.file-extension}
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: dev
server:
port: 17003
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
server:
port: 17003
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: sit
spring:
application:
name: arch-overall
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="./logs"/>
<property name="LOG_NAME" value="arch-overall"/>
<!--从配置中心加载数据-->
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<springProperty scope="context" name="logstashDestination" source="logstash.destination"/>
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件INFO -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件ERROR -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--nacos 心跳 INFO 屏蔽-->
<logger name="com.alibaba.nacos" level="OFF">
<appender-ref ref="ERROR_FILE"/>
</logger>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="com.xxl.job.core" level="DEBUG"/>
<logger name="org.apache.http.impl.conn" level="INFO"/>
<logger name="springfox.documentation" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="com.baomidou.mybatisplus" level="INFO" />
<!-- 本地环境 -->
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- 其它环境 -->
<springProfile name="dev,test,stage,prod,sit,uat,default">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiAbilityAssetsRelationMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation">
<!--@Table archi_ability_assets_relation-->
<result property="relaId" column="rela_id" jdbcType="INTEGER"/>
<result property="assetId" column="asset_id" jdbcType="INTEGER"/>
<result property="assetCode" column="asset_code" jdbcType="VARCHAR"/>
<result property="assetName" column="asset_name" jdbcType="VARCHAR"/>
<result property="relaAssetId" column="rela_asset_id" jdbcType="INTEGER"/>
<result property="relaAssetCode" column="rela_asset_code" jdbcType="VARCHAR"/>
<result property="relaAssetName" column="rela_asset_name" jdbcType="VARCHAR"/>
<result property="archiTypeId" column="archi_type_id" jdbcType="INTEGER"/>
<result property="archiType" column="archi_type" jdbcType="VARCHAR"/>
<result property="versionId" column="version_id" jdbcType="INTEGER"/>
<result property="viewId" column="view_id" jdbcType="INTEGER"/>
<result property="creator" column="creator" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateby" column="updateby" jdbcType="INTEGER"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="INTEGER"/>
<result property="eleName" column="ele_name" jdbcType="VARCHAR"/>
<result property="parentAssetIds" column="parent_asset_ids" jdbcType="VARCHAR"/>
<result property="parentAssetNames" column="parent_asset_names" jdbcType="VARCHAR"/>
<result property="state" column="state" jdbcType="INTEGER"/>
<result property="eleRelaId" column="ele_rela_id" jdbcType="INTEGER"/>
<result property="iconId" column="icon_id" jdbcType="INTEGER"/>
<result property="assetRelaId" column="asset_rela_id" jdbcType="INTEGER"/>
</resultMap>
<insert id="addBach" keyProperty="relaId" useGeneratedKeys="true">
<foreach collection="entities" item="entity" separator=";">
insert into archi_ability_assets_relation(
<trim suffixOverrides=",">
<if test="entity.assetId != null">asset_id,</if>
<if test="entity.assetCode != null">asset_code,</if>
<if test="entity.assetName != null">asset_name,</if>
<if test="entity.relaAssetId != null">rela_asset_id,</if>
<if test="entity.relaAssetCode != null">rela_asset_code,</if>
<if test="entity.relaAssetName != null">rela_asset_name,</if>
<if test="entity.archiTypeId != null">archi_type_id,</if>
<if test="entity.archiType != null">archi_type,</if>
<if test="entity.versionId != null">version_id,</if>
<if test="entity.viewId != null">view_id,</if>
<if test="entity.creator != null">creator,</if>
<if test="entity.createTime != null">create_time,</if>
<if test="entity.updateby != null">updateby,</if>
<if test="entity.updateTime != null">update_time,</if>
<if test="entity.delFlag != null">del_flag,</if>
<if test="entity.parentAssetIds != null">parent_asset_ids,</if>
<if test="entity.parentAssetNames != null">parent_asset_names</if>
</trim>
)
values
<!-- <trim prefix="(" suffix=")" suffixOverrides=",">-->
<trim suffixOverrides=",">
(
<if test="entity.assetId != null">#{entity.assetId},</if>
<if test="entity.assetCode != null">#{entity.assetCode},</if>
<if test="entity.assetName != null">#{entity.assetName},</if>
<if test="entity.relaAssetId != null">#{entity.relaAssetId},</if>
<if test="entity.relaAssetCode != null">#{entity.relaAssetCode},</if>
<if test="entity.relaAssetName != null">#{entity.relaAssetName},</if>
<if test="entity.archiTypeId != null">#{entity.archiTypeId},</if>
<if test="entity.archiType != null">#{entity.archiType},</if>
<if test="entity.versionId != null">#{entity.versionId},</if>
<if test="entity.viewId != null">#{entity.viewId},</if>
<if test="entity.creator != null">#{entity.creator},</if>
<if test="entity.createTime != null">#{entity.createTime},</if>
<if test="entity.updateby != null"> #{entity.updateby},</if>
<if test="entity.updateTime != null">#{entity.updateTime},</if>
<if test="entity.delFlag != null">#{entity.delFlag},</if>
<if test="entity.parentAssetIds != null">#{entity.parentAssetIds},</if>
<if test="entity.parentAssetNames != null">#{entity.parentAssetNames}</if>
)
</trim>
</foreach>
</insert>
<delete id="removeBatchIds" parameterType="java.util.List">
DELETE FROM archi_ability_assets_relation WHERE rela_id IN
<foreach item="id" index="index" collection="list" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="qryDataListPage" resultType="org.arch.common.modules.archoverall.entity.ArchiAbilityAssetsRelation">
SELECT *
FROM (
SELECT DISTINCT
aaa.*,
aai.fields_value AS fieldsValue
FROM
archi_ability_assets_relation aaa
JOIN archi_asset_info aai ON aaa.asset_id = aai.asset_id
WHERE
aaa.archi_type_id = aai.archi_belong_id
<if test=" dto.archiTypeId != null "> AND aaa.archi_type_id = #{dto.archiTypeId} </if>
<if test=" dto.assetName != null and dto.assetName != '' "> AND aai.asset_name LIKE CONCAT('%',#{dto.assetName},'%') </if>
<if test=" dto.beginTime != null "> AND aaa.create_time &gt;= #{dto.beginTime} </if>
<if test=" dto.endTime != null "> AND aaa.create_time &lt;= #{dto.endTime} </if>
AND aaa.del_flag = 0
AND aai.del_flag = 0
ORDER BY aaa.update_time DESC
) AS subquery
GROUP BY asset_name
</select>
<!--资产关系-->
<select id="queryAssetRelation" resultType="org.arch.common.modules.archoverall.vo.ArchiAbilityAssetsRelationQueryVO">
select aaar.rela_id,
aaar.asset_id,
aaar.asset_code,
aaar.asset_name,
aaar.rela_asset_id,
aaar.rela_asset_code,
aaar.rela_asset_name,
aaar.archi_type_id,
aaar.archi_type,
aaar.version_id,
aaar.view_id,
aaar.creator,
aaar.create_time,
aaar.updateby,
aaar.update_time,
aaar.del_flag,
aaar.ele_name,
aaar.parent_asset_ids,
aaar.parent_asset_names,
aaar.ele_rela_id,
aaar.`state`,
aaar.icon_id,
aaer.rs_name
from archi_ability_assets_relation aaar
left join archi_asset_ele_rela aaer on aaar.asset_rela_id = aaer.asset_rela_id
<where>
<if test="params.relaAssetName != null and params.relaAssetName != ''">
and aaar.rela_asset_name like concat('%', #{params.relaAssetName}, '%')
</if>
<if test="params.assetName != null and params.assetName != ''">
and aaar.asset_name like concat('%', #{params.assetName}, '%')
</if>
<if test="params.rcName != null and params.rcName != ''">
and aaer.rs_name like concat('%', #{params.rcName}, '%')
</if>
<if test="params.state != null">
and aaar.state = #{params.state}
</if>
<if test="params.relaId != null">
and aaar.rela_id = #{params.relaId}
</if>
<if test="params.assetRelaId != null">
and aaar.asset_rela_id = #{params.assetRelaId}
</if>
and aaar.del_flag = 0
</where>
order by aaar.create_time desc
</select>
<!--资产关系数量-->
<select id="queryAssetRelationCountByTypeId" resultType="java.lang.Long">
select count(1)
from archi_ability_assets_relation aaar
where aaar.asset_rela_id = #{assetRelaId}
and aaar.del_flag = 0
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiElePropertyMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleProperty">
<result column="property_id" property="propertyId"/>
<result column="type_id" property="typeId"/>
<result column="type" property="type"/>
<result column="field_name" property="fieldName"/>
<result column="cn_name" property="cnName"/>
<result column="property_value" property="propertyValue"/>
<result column="display_order" property="displayOrder"/>
<result column="content_length" property="contentLength"/>
<result column="control_type" property="controlType"/>
<result column="dict_key" property="dictKey"/>
<result column="dicy_id" property="dicyId"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="default_value" property="defaultValue"/>
<result column="not_null" property="notNull"/>
<result column="is_show" property="isShow"/>
<result column="data_type" property="dataType"/>
<result column="data_type_name" property="dataTypeName"/>
<result column="sort" property="sort"/>
</resultMap>
<select id="gtArchiElePropertyList" resultMap="BaseResultMap">
SELECT aep.property_id,
aep.type_id,
aep.type,
aep.field_name,
aep.cn_name,
aep.display_order,
aep.content_length,
aep.control_type,
aep.dict_key,
aep.dicy_id,
aep.create_man,
aep.create_time,
aep.last_update_time,
aep.last_update_man,
aep.del_flag,
aep.default_value,
aep.not_null,
aep.is_show,
aep.data_type,
aep.data_type_name,
aep.sort,
aep.property_value
FROM archi_ele_property aep
<where>
AND aep.del_flag = 0
<if test="yp.typeId != null">
AND aep.type_id = #{yp.typeId}
</if>
<if test="yp.type != null">
AND aep.type = #{yp.type}
</if>
</where>
ORDER BY aep.sort
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiEleRelaConstrainMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleRelaConstrain">
<!--@mbg.generated-->
<!--@Table archi_ele_rela_constrain-->
<id column="constrain_id" jdbcType="BIGINT" property="constrainId"/>
<result column="ele_gt_id" jdbcType="BIGINT" property="eleGtId"/>
<result column="ele_lt_id" jdbcType="BIGINT" property="eleLtId"/>
<result column="ele_gt_name" jdbcType="VARCHAR" property="eleGtName"/>
<result column="ele_lt_name" jdbcType="VARCHAR" property="eleLtName"/>
<result column="ele_rela_id" jdbcType="BIGINT" property="eleRelaId"/>
<result column="ele_rela_name" jdbcType="VARCHAR" property="eleRelaName"/>
<result column="scope" jdbcType="TINYINT" property="scope"/>
<result column="state" jdbcType="TINYINT" property="state"/>
<result column="create_man" jdbcType="BIGINT" property="createMan"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="last_update_time" jdbcType="TIMESTAMP" property="lastUpdateTime"/>
<result column="last_update_man" jdbcType="BIGINT" property="lastUpdateMan"/>
<result column="del_flag" jdbcType="TINYINT" property="delFlag"/>
</resultMap>
<!--元素和元素关系列表-->
<resultMap id="EleBaseResultMap" type="org.arch.common.modules.archoverall.vo.ArchiEleRelaVO">
<id column="ele_rela_id" jdbcType="BIGINT" property="eleRelaId"/>
<result column="ele_rela_name" jdbcType="VARCHAR" property="eleRelaName"/>
<result column="source_element_id" property="sourceElementId"/>
<result column="source_element_name" property="sourceElementName"/>
<result column="source_icon" property="sourceIcon"/>
<result column="source_icon_name" property="sourceIconName"/>
<result column="source_color" property="sourceIcon"/>
<result column="target_element_id" property="targetElementId"/>
<result column="target_element_name" property="targetElementName"/>
<result column="target_icon" property="targetIcon"/>
<result column="target_icon_name" property="targetIconName"/>
<result column="target_color" property="targetColor"/>
</resultMap>
<!--批量添加-->
<insert id="batchInsert">
insert into archi_ele_rela_constrain (ele_gt_id, ele_lt_id, ele_gt_name, ele_lt_name, ele_rela_id, ele_rela_name,
`scope`, create_man, create_time, last_update_time, last_update_man)
values
<foreach collection="list" item="item" separator=",">
(#{item.eleGtId}, #{item.eleLtId}, #{item.eleGtName}, #{item.eleLtName}, #{item.eleRelaId}, #{item.eleRelaName},
#{item.scope}, #{item.createMan}, #{item.createTime}, #{item.lastUpdateTime}, #{item.lastUpdateMan})
</foreach>
</insert>
<!--根据元素关系编码查询约束条件-->
<select id="getArchiEleRelaConstraint" resultMap="BaseResultMap">
select aerc.constrain_id,
aerc.ele_gt_id,
aerc.ele_lt_id,
aerc.ele_gt_name,
aerc.ele_lt_name,
aerc.ele_rela_id,
aerc.ele_rela_name,
aerc.`scope`
from archi_ele_rela_constrain aerc
where aerc.ele_rela_id = #{eleRelaId}
and aerc.del_flag = 0
</select>
<!--根据元素关系,删除元素关系-->
<delete id="delByRelaId">
delete
from archi_ele_rela_constrain aerc
where aerc.ele_rela_id = #{eleRelaId}
</delete>
<!--根据元素关系ID查询元素关系-->
<select id="findEleRelaConstrainList" resultMap="EleBaseResultMap">
select aerc.ele_rela_id,
aerc.ele_rela_name,
ae.element_id as source_element_id,
ae.element_name as source_element_name,
ae.icon as source_icon,
ae.icon_name as source_icon_name,
ae.color as source_color,
ae1.element_id as target_element_id,
ae1.element_name as target_element_name,
ae1.icon as target_icon,
ae1.icon_name as target_icon_name,
ae1.color as target_color
from archi_ele_rela_constrain aerc
left join archi_element ae on ae.element_id = aerc.ele_gt_id
left join archi_element ae1 on ae1.element_id = aerc.ele_lt_id
where aerc.ele_rela_id = #{eleRelaId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiEleRelaMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiEleRela">
<result column="ele_rela_id" property="eleRelaId"/>
<result column="ele_rela_code" property="eleRelaCode"/>
<result column="rs_name" property="rsName"/>
<result column="object1" property="object1"/>
<result column="object2" property="object2"/>
<result column="content" property="content"/>
<result column="icon" property="icon"/>
<result column="icon_name" property="iconName"/>
<result column="icon_id" property="iconId"/>
<result column="version" property="version"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="scope" property="scope"/>
</resultMap>
<!--分页-->
<select id="gtArchiEleRela" resultMap="BaseResultMap">
SELECT er.ele_rela_id,
er.ele_rela_code,
er.rs_name,
er.object1,
er.object2,
er.scope,
er.content,
er.icon,
er.icon_name,
er.version,
er.state,
er.create_man,
er.create_time,
er.last_update_time,
er.last_update_man,
er.del_flag,
er.icon_id
from archi_ele_rela er
where er.del_flag = '0'
<if test="dto.rsName != null and dto.rsName != ''">
and er.rs_name LIKE CONCAT('%', #{dto.rsName}, '%')
</if>
<if test="dto.state != null">
and er.state = #{dto.state}
</if>
order by er.create_time desc
</select>
<!--列表-->
<select id="gtEleRelList" resultMap="BaseResultMap">
select er.ele_rela_id,
er.ele_rela_code,
er.rs_name,
er.object1,
er.object2,
er.`scope`,
er.content,
er.icon,
er.icon_name,
er.version,
er.`state`,
er.create_man,
er.create_time,
er.last_update_time,
er.last_update_man,
er.del_flag,
er.icon_id,
er.shape_width,
er.shape_height
from archi_ele_rela er
<where>
and er.del_flag = '0'
<if test="dto.rsName != null and dto.rsName != ''">
and er.rs_name = #{dto.rsName}
</if>
<if test="dto.scope != null and dto.scope != ''">
and er.scope = #{dto.scope}
</if>
<if test="dto.state != null">
and er.state = #{dto.state}
</if>
</where>
order by er.create_time desc
</select>
<!--查询资产关系-->
<select id="findEleRelaList" resultType="org.arch.common.modules.archoverall.vo.ArchiEleRelaNameVO">
select aer.ele_rela_id,
aer.rs_name
from archi_ele_rela aer
where del_flag = '0'
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiElementMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiElement">
<result column="element_id" property="elementId"/>
<result column="element_code" property="elementCode"/>
<result column="element_name" property="elementName"/>
<result column="archi_level_id" property="archiLevelId"/>
<result column="archi_belong_id" property="archiBelongId"/>
<result column="ea_level" property="eaLevel"/>
<result column="ele_type" property="eleType"/>
<result column="content" property="content"/>
<result column="icon" property="icon"/>
<result column="icon_name" property="iconName"/>
<result column="color" property="color"/>
<result column="version" property="version"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="archi_level_code" property="archiLevelCode"/>
<result column="archi_belong_code" property="archiBelongCode"/>
</resultMap>
<select id="initVersion" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
SELECT CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-V', YEAR(NOW()) - 2023 - 1, '.', DATE_FORMAT(NOW(), '%m'), '.0') AS version;
</select>
<!--元素列表-->
<select id="gtArchiElement" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.*,
gm.graph_name as iconName,
gm.icon
from archi_element se
left join graph_meta_info gm on se.graph_id = gm.graph_id
<where>
<if test="dto.elementName != null and dto.elementName != ''">
and se.element_name like concat('%', #{dto.elementName}, '%')
</if>
<if test="dto.archiBelongId != null">
and se.archi_belong_id = #{dto.archiBelongId}
</if>
<if test="dto.state != null">
and se.state = #{dto.state}
</if>
<if test="dto.scope != null">
and se.scope = #{dto.scope}
</if>
and se.del_flag = '0'
</where>
order by se.create_time desc
</select>
<!--根据元素名称查询元素-->
<select id="gtArcEleByName" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.element_id,
se.element_name,
se.archi_belong_id,
se.color,
se.version
from archi_element se
<where>
and se.del_flag = '0'
<if test="do.elementName != null and do.elementName != ''">
and se.element_name = #{do.elementName}
</if>
<if test="do.elementId != null and do.elementId != ''">
and se.element_id = #{do.elementId}
</if>
</where>
order by se.create_time desc
</select>
<select id="gtEleList" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
select se.*,
gm.graph_name as iconName,
gm.icon
from archi_element se
left join graph_meta_info gm ON se.graph_id = gm.graph_id
<where>
and se.del_flag = '0'
<if test="dto.elementName != null and dto.elementName != ''">
and se.element_name = #{dto.elementName}
</if>
<if test="dto.elementId != null">
and se.element_id = #{dto.elementId}
</if>
<if test="dto.archiBelongId != null">
and se.archi_belong_id = #{dto.archiBelongId}
</if>
<if test="dto.eleType != null">
and se.ele_type = #{dto.eleType}
</if>
<if test="dto.state != null">
and se.state = #{dto.state}
</if>
<if test="dto.eleIdList != null and dto.eleIdList.size() > 0">
and se.element_id in
<foreach item="eleId" collection="dto.eleIdList" open="(" separator="," close=")">
#{eleId}
</foreach>
</if>
<if test="dto.belongIdList != null and dto.belongIdList.size() > 0">
and se.archi_belong_id in
<foreach item="belongId" collection="dto.belongIdList" open="(" separator="," close=")">
#{belongId}
</foreach>
</if>
<if test="dto.scopeList != null and dto.scopeList.size() > 0">
and se.scope in
<foreach item="scope" collection="dto.scopeList" open="(" separator="," close=")">
#{scope}
</foreach>
</if>
</where>
order by se.create_time desc
</select>
<select id="maxVer" resultType="org.arch.common.modules.archoverall.entity.ArchiElement">
SELECT a.version
FROM archi_element a
<where>
<if test="elementName != null and elementName != ''">
and a.element_name = #{elementName}
</if>
<if test="archiBelongId != null">
and a.archi_belong_id = #{archiBelongId}
</if>
and a.del_flag = 0
</where>
ORDER BY CAST(SUBSTRING_INDEX(version, '.', -1) AS DECIMAL) DESC
LIMIT 1
</select>
<!-- 根据视图配置查询架构元素-->
<select id="queryEleByAssertView" resultMap="BaseResultMap">
select ae.element_id,
ae.element_code,
ae.element_name,
ae.archi_level_id,
ae.archi_belong_id,
ae.ea_level,
ae.content,
ae.color,
ae.version,
ae.`state`,
ae.ele_type,
ae.create_man,
ae.create_time,
ae.last_update_time,
ae.last_update_man,
ae.del_flag,
ae.archi_level_code,
ae.archi_belong_code,
ae.shape_width,
ae.shape_height,
ae.reference_relationship,
ae.example,
ae.`definition`,
ae.`scope`,
ae.graph_id
from archi_element ae
where find_in_set(ae.element_id,
(select ave.archi_ele_id from archi_view_ele ave where archi_view_id = #{viewId}))
and ae.state = 1
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
select ifnull(version, @i) from archi_element where element_id = #{elementId} for update
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiMetaModelMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiMetaModel">
<result column="meta_model_id" property="metaModelId"/>
<result column="meta_model_code" property="metaModelCode"/>
<result column="version" property="version"/>
<result column="ver_name" property="verName"/>
<result column="state" property="state"/>
<result column="create_man" property="createMan"/>
<result column="create_time" property="createTime"/>
<result column="last_update_time" property="lastUpdateTime"/>
<result column="last_update_man" property="lastUpdateMan"/>
<result column="del_flag" property="delFlag"/>
<result column="meta_model_data" property="metaModelData"/>
<result column="meta_model_svg" property="metaModelSvg"/>
<result column="graph_id" property="graphId"/>
</resultMap>
<select id="selectVer" resultMap="BaseResultMap">
select (SELECT CONCAT((SELECT REPLACE((select date_format(now(), '%Y-%m-%d')), CHAR(45), '')), '-V', (SELECT (select date_format(now(), '%Y')) - 2023 + 1), '.',
(select date_format(now(), '%m')), '.', '1')) as version
</select>
<!--列表-->
<select id="getYnMol" resultMap="BaseResultMap">
Select mm.meta_model_id,
mm.meta_model_code,
mm.version,
mm.ver_name,
mm.create_man,
mm.create_time,
mm.last_update_time,
mm.last_update_man,
mm.del_flag,
mm.state,
gr.graph_id,
gr.icon as meta_model_svg,
gr.content as meta_model_data
FROM archi_meta_model mm
left join graph_repository gr on mm.graph_id = gr.graph_id
<where>
AND mm.del_flag = 0
<if test="dto.verName != null and dto.verName != ''">
AND mm.ver_name LIKE CONCAT('%', #{dto.verName}, '%')
</if>
<if test="dto.state != null">
AND mm.state = #{dto.state}
</if>
</where>
order by mm.create_time desc
</select>
<!--更新画布信息和svg缩略图-->
<update id="updateMxGraphModel">
update archi_meta_model
set graph_id = #{graphId},
last_update_time = now()
where meta_model_id = #{metaModelId}
</update>
<!-- 元模型画布细信息-->
<select id="getMxCellByMetaModelId" resultType="java.lang.String">
select gr.content
from archi_meta_model amm
left join graph_repository gr on amm.graph_id = gr.graph_id
where amm.meta_model_id = #{metaModelId}
and amm.del_flag = '0'
</select>
<!-- 元模型画布缩略图-->
<select id="findMetaModelById" resultMap="BaseResultMap">
select amm.meta_model_id,
amm.meta_model_code,
amm.ver_name,
amm.version,
amm.state,
amm.graph_id,
gr.icon as meta_model_svg,
ifnull(gr.content, '${@com.eadc.common.Constant@MX_MODEL_GRAPH}') as meta_model_data
from archi_meta_model amm
left join graph_repository gr on amm.graph_id = gr.graph_id
where amm.meta_model_id = #{metaModelId}
and amm.del_flag = '0'
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiTotalAssetMapper">
<resultMap id="ArchiAssetResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="archi_belong_id" property="archiBelongId"/>
<collection property="subList" ofType="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="sub_asset_id" property="assetId"/>
<result column="sub_asset_code" property="assetCode"/>
<result column="sub_asset_name" property="assetName"/>
<result column="sub_parent_asset_id" property="parentAssetId"/>
<result column="sub_icon" property="icon"/>
<result column="sub_icon_name" property="iconName"/>
<result column="sub_color" property="color"/>
</collection>
</resultMap>
<resultMap id="ArchiAssetTreeResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="archi_ele_id" property="archiEleId"/>
<result column="ele_name" property="eleName"/>
<result column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="parent_asset_id" property="parentAssetId"/>
</resultMap>
<resultMap id="AutoArchiAssetResulMap" type="org.arch.common.modules.archoverall.vo.ArchiAssetVO">
<id column="asset_id" property="assetId"/>
<result column="asset_name" property="assetName"/>
<result column="asset_number" property="assetNumber"/>
<result column="archi_belong_id" property="archiBelongId"/>
<result column="asset_code" property="assetCode"/>
<result column="parent_asset_id" property="parentAssetId"/>
<result column="parent_asset_name" property="parentAssetName"/>
<result column="element_id" property="elementId"/>
<result column="element_name" property="elementName"/>
</resultMap>
<!--总体架构资产-->
<sql id="assetSql">
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
</sql>
<!--总体架构可视化展示-->
<select id="treeListView" resultMap="ArchiAssetTreeResulMap">
SELECT aai.archi_ele_id,
aai.ele_name,
aai.asset_id,
aai.asset_name,
aai.parent_asset_id
from archi_asset_info aai
<where>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="versionId != null">
and aai.version_id = #{versionId}
</if>
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
<if test="archiAssetState != null">
and aai.archi_asset_state = #{archiAssetState}
</if>
<include refid="assetSql"/>
and aai.parent_asset_id is not null
</where>
order by aai.sort
</select>
<!--总体架构资产智能搜索-->
<select id="treeList" resultMap="ArchiAssetResulMap">
with archi_belong as (select amdd.value as belong_id,
amdd.label as name
from archi_model_dict_detail amdd
left join archi_model_dict amd on (amd.id = amdd.dict_id)
where amd.type_value = 'archi_belong'
and amd.del_flag = 0
and amd.state = 1
and amdd.del_flag = 0
order by amdd.sort)
SELECT ab.belong_id as asset_id,
ab.name as asset_name,
aai.archi_belong_id,
aai.asset_id as sub_asset_id,
concat(aai.archi_belong_id, '-', aai.asset_id) as sub_asset_code,
aai.asset_name as sub_asset_name,
aai.parent_asset_id as sub_parent_asset_id,
gmi.graph_name as sub_icon_name,
gmi.icon as sub_icon,
aai.color as sub_color
from archi_belong ab
left join archi_asset_info aai on
(aai.archi_belong_id = ab.belong_id and aai.state = 1
and aai.del_flag = 0 and aai.archi_asset_state = 2 and aai.archi_stage = 1)
left join graph_meta_info gmi on (aai.graph_id = gmi.graph_id)
<where>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="versionId != null">
and aai.version_id = #{versionId}
</if>
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
</where>
</select>
<!--根据项目查询架构视图-->
<select id="queryView" resultType="org.arch.common.modules.archoverall.vo.ArchiViewVO">
select avd.view_details_id,
avd.version as view_detail_name,
av.view_id,
av.view_name,
gr.icon as meta_model_svg,
gr.content as meta_model_data
from archi_view_relation avr
left join archi_view_details avd on (avr.archi_views_detail_id = avd.view_details_id)
left join archi_view av on (avd.view_id = av.view_id)
left join graph_repository gr on (avd.graph_id = gr.graph_id)
<where>
<if test="prjId != null">
and avr.prj_id = #{prjId}
</if>
<if test="archiBelongId != null">
and av.archi_belong_id = #{archiBelongId}
</if>
<if test="archiStage != null">
and av.archi_stage = #{archiStage}
</if>
</where>
</select>
<!--查询架构版本-->
<select id="queryArchiVersion" resultType="org.arch.common.modules.archoverall.vo.ArchiVersionVO">
select aav.version_id,
aav.version_name
from archi_asset_version aav
group by aav.version_id
</select>
<!-- 总体架构资产自动图形 -->
<select id="automaticGraphing" resultMap="AutoArchiAssetResulMap">
select aai.archi_belong_id,
aai.asset_id,
aai.asset_code,
aai.asset_name,
aai.parent_asset_id,
aai2.asset_name as parent_asset_name,
ae.element_id,
ae.element_name
from archi_asset_info aai
left join archi_asset_info aai2 on aai.parent_asset_id = aai2.asset_id
left join archi_element ae on aai.archi_ele_id = ae.element_id
<where>
and aai.archi_asset_state = 2
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
<if test="archiBelongId != null">
and aai.archi_belong_id = #{archiBelongId}
</if>
<if test="assetName != null and assetName != ''">
and aai.asset_name like concat('%', #{assetName}, '%')
</if>
<if test="parentAssetId != null">
and aai.parent_asset_id = #{parentAssetId}
</if>
</where>
</select>
<!--根据元素查询对应的资产-->
<select id="findAssertByElementId" resultMap="AutoArchiAssetResulMap">
select aai.asset_id,
aai.asset_number,
aai.asset_name
from archi_asset_info aai
left join archi_element ae on aai.archi_ele_id = ae.element_id
<where>
and aai.archi_asset_state = 2
and aai.state = 1
and aai.del_flag = 0
and aai.archi_stage = 1
<if test="elementId != null">
and ae.element_id = #{elementId}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiViewEleMapper">
<resultMap id="BaseResultMap" type="org.arch.common.modules.archoverall.entity.ArchiViewEle">
<result column="archi_view_id" property="archiViewId"/>
<result column="archi_ele_id" property="archiEleId"/>
<result column="ele_name" property="eleName"/>
<result column="type" property="type"/>
</resultMap>
<sql id="Base_Column_List">
<!--@sql select -->
archi_view_id,
archi_ele_id,
ele_name,
type
<!--@sql from archi_view_ele-->
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.ArchiViewMapper">
<select id="maxVer" resultType="org.arch.common.modules.archoverall.entity.ArchiView">
SELECT a.version
FROM archi_view a
<where>
<if test="viewName != null and viewName != ''">
and a.view_name = #{viewName}
</if>
<if test="archiBelongId != null ">
and a.archi_belong_id = #{archiBelongId}
</if>
<if test="archiStage != null ">
and a.archi_stage = #{archiStage}
</if>
<if test="archiLevelId != null ">
and a.archi_level_id = #{archiLevelId}
</if>
and a.del_flag = 0
</where>
ORDER BY CAST(SUBSTRING_INDEX(version, '.', -1) AS DECIMAL) DESC
LIMIT 1
</select>
<!--获取最新版本-->
<select id="getVersion" resultType="java.lang.String">
set @i := (<include refid="org.arch.overall.mapper.VersionInitMapper.versionInit"/>);
select ifnull(version, @i) from archi_view where view_id = #{id} for update
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.overall.mapper.VersionInitMapper">
<sql id="versionInit">
SELECT CONCAT(DATE_FORMAT(NOW(), '%Y%m%d'), '-V', YEAR(NOW()) - 2023, '.', DATE_FORMAT(NOW(), '%m'), '.0') AS version
</sql>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>framework-system-manage</artifactId>
<name>系统管理</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.arch</groupId>
<artifactId>log</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
package org.arch.manage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.jmx.support.RegistrationPolicy;
@SpringBootApplication
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class SystemManageApp {
public static void main(String[] args) {
SpringApplication.run(SystemManageApp.class, args);
}
}
\ No newline at end of file
package org.arch.manage.conterller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.arch.base.utils.RequestUtils;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.*;
import org.arch.manage.service.AdsProjectService;
import org.arch.manage.service.BackLogService;
import org.arch.manage.service.ProjectService;
import org.arch.manage.service.PsrPlanService;
import org.arch.manage.util.UserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* BaseController
*/
public class BaseController {
@Autowired
private UserUtil userUtil;
@Autowired
private BackLogService backlogservice;
@Autowired
private ProjectService projectService;
@Autowired
private PsrPlanService psrPlanService;
@Autowired
private AdsProjectService adsProjectService;
/**
* 获取用户基础信息
* @return
*/
public User getUser(){
return userUtil.getUser();
// return new User();
}
/**
* 获取用户详细信息
* 包括用户组织机构、部门、权限等信息
* @return
*/
public UserDto getUserDto(){
return userUtil.getUserDto();
}
/**
* 获取用户id
* @return 用户id
*/
public Long getUserId(){
return userUtil.getUserId();
}
/**
* 获取用户名称
* @return 用户名称
*/
public String getUserName(){
return userUtil.getUserDto().getName();
}
/**
* 获取ISC用户名称
* @return 用户名称
*/
public String getUserIscId(){
return userUtil.getUserDto().getIscUserId();
}
/**
* 获取ISC用户名称
* @return 用户名称
*/
public String getUserDataPermission(){
return userUtil.getUserDto().getDataPermission();
}
/**
* 添加查询数据权限
* @param queryWrapper queryWrapper声明对象
* @param mainTableAlias 主表别名
* @param datatype 文档类别(fsr可研,ads概设)
* @param isAudit 是否审核页面
*/
public <T> void queryAddDataPermission(QueryWrapper<T> queryWrapper,String mainTableAlias,String datatype,boolean isAudit){
// Class c=t.getClass()
UserDto user=getUserDto();
List<RoleSmallDto> roles=user.getRoles();
//如果有管理员权限不做数据权限控制
boolean bs=roles.stream().anyMatch(RoleSmallDto -> RoleSmallDto.getRoleSign().equals("admin"));
if(bs)return;
boolean bc=roles.stream().anyMatch(RoleSmallDto -> RoleSmallDto.getRoleSign().contains("controuser"));// .equals("contro_user")
/**
* 数据权限控制
* 1获取用户的dataPermission
*/
if (!isAudit){
//非审核页面查询
if(mainTableAlias==null){
queryWrapper.eq("creater_id", user.getIscUserId());
if(StringUtils.isNotBlank(user.getDataPermission())){
queryWrapper.or()
.likeRight("org_num", user.getDataPermission());
}
}else{
//如果多表关联查询,主表有别名,加别名查询
queryWrapper.eq(mainTableAlias+".creater_id", user.getIscUserId());
if(StringUtils.isNotBlank(user.getDataPermission())){
queryWrapper.or()
.likeRight(mainTableAlias+".org_num", user.getDataPermission());
}
}
}else{
//审核页面查询
// queryWrapper.ge("state", 1);
//可研或者概设审核且为专家
if(!bc&&datatype!=null){
// queryWrapper.eq("state", 3);
queryWrapper.or();
queryWrapper.inSql(datatype+"_id", "select id from com_review_report where creater_id='"+user.getIscUserId()+"'");
}
}
}
//待办处理rid--文档ID、 type--类型(0审核待办,1专家待办) docType--类型(0规划,1可研 2概设)flag(0驳回,1通过)
public void addBackLog(String rid,String type,String docType,String flag,String state){
String docName="";
String doc="";
String accepterId="";
if("0".equals(docType)){
QueryWrapper<PsrPlan> wrapper = Wrappers.query();
wrapper.eq("id", rid);
PsrPlan p=psrPlanService.getOne(wrapper);
docName=p.getName();
doc="规划审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="规划驳回";
}
}else if("1".equals(docType)){
QueryWrapper<Project> wrapper = Wrappers.query();
wrapper.eq("fsr_id", rid);
Project p=projectService.getOne(wrapper);
docName=p.getPrjName();
doc="可研审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="可研驳回";
}
}else if("2".equals(docType)){
QueryWrapper<AdsProject> wrapper = Wrappers.query();
wrapper.eq("ads_id", rid);
AdsProject p=adsProjectService.getOne(wrapper);
docName=p.getAdsName();
doc="概设审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="概设驳回";
}
}
BackLog bl=new BackLog();
bl.setBId(UUID.randomUUID().toString());
bl.setRId(rid);
bl.setResult("0");
bl.setName(doc+"_"+docName);
bl.setType(docType);
bl.setStepType(doc);
bl.setSubmitterId(getUserIscId()+"");
bl.setAccepterId(accepterId);
bl.setSubmitTime(new Date());
bl.setState(state);
backlogservice.save(bl);
}
//待办处理rid--文档ID、 type--类型(0审核代办,1专家代办)
public void updateBackLog(String rid,String type,String docType){
QueryWrapper<BackLog> bWrapper = Wrappers.query();
bWrapper.eq("r_id", rid);
bWrapper.eq("result", "0");
if("1".equals(type)){
bWrapper.eq("accepter_id", getUserIscId());
}
List<BackLog> list=backlogservice.list(bWrapper);
for(BackLog bl:list){
bl.setResult("1");
bl.setApprovalTime(new Date());
//bl.setType(docType);
bl.setApprover(getUserName());
bl.setApproverId(getUserIscId()+"");
QueryWrapper<BackLog> updateWrapper = Wrappers.query();
updateWrapper.eq("b_id", bl.getBId());
backlogservice.update(bl, updateWrapper);
}
}
//待办处理rid--文档ID、 type--类型(0规划,1可研,2概设)
public void addBackLogbyExpert(String rid,String eid,String type,String state){
String docName="";
String doc="";
if("0".equals(type)){
QueryWrapper<PsrPlan> wrapper = Wrappers.query();
wrapper.eq("id", rid);
PsrPlan p=psrPlanService.getOne(wrapper);
docName=p.getName();
doc="规划审核";
}else if("1".equals(type)){
QueryWrapper<Project> wrapper = Wrappers.query();
wrapper.eq("fsr_id", rid);
Project p=projectService.getOne(wrapper);
docName=p.getPrjName();
doc="可研专家报告";
}else if("2".equals(type)){
QueryWrapper<AdsProject> wrapper = Wrappers.query();
wrapper.eq("ads_id", rid);
AdsProject p=adsProjectService.getOne(wrapper);
docName=p.getAdsName();
doc="概设专家报告";
}
BackLog bl=new BackLog();
bl.setBId(UUID.randomUUID().toString());
bl.setRId(rid);
bl.setResult("0");
bl.setName(doc+"_"+docName);
bl.setType(type);
bl.setStepType(doc);
bl.setSubmitterId(getUserIscId()+"");
bl.setAccepterId(eid);
bl.setSubmitTime(new Date());
bl.setState(state);
backlogservice.save(bl);
}
public HttpServletRequest getRequest() {
return RequestUtils.getRequest();
}
public HttpServletResponse getResponse() {
return RequestUtils.getResponse();
}
}
package org.arch.manage.conterller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import lombok.extern.java.Log;
import org.arch.base.Result;
import org.arch.base.exception.BaseException;
import org.arch.common.modules.sysmange.entity.Org;
import org.arch.manage.service.OrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author audit
* @since 2020-08-21
*/
@RestController
@RequestMapping("/org")
@Api(tags = "组织机构管理")
@Log
public class OrgController extends MenuController.BaseController {
@Autowired
private OrgService orgService;
@GetMapping(value = "/")
@ApiOperation(value = "列表查询接口", notes = "多条件产讯组织结构列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "current", value = "当前页数",required = true, defaultValue = "1", dataType = "int", paramType = "query"),
@ApiImplicitParam(name = "pageSize", value = "页面显示数量", required = true, defaultValue = "10", dataType = "int", paramType = "query"),
@ApiImplicitParam(name = "orgName", value = "组织名称", required = false, dataType = "string", paramType = "query"),
})
public Result<Page<Org>> list(@RequestParam(required = true, defaultValue = "1", name = "current") Integer current,
@RequestParam(required = true, defaultValue = "10", name = "pageSize") Integer pageSize,
Org org) {
if (current == null) {
current = 1;
}
if (pageSize == null) {
pageSize = 10;
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(ObjectUtil.isNotNull(org))queryWrapper.like(StrUtil.isNotBlank(org.getOrgName()), "a.org_name", org.getOrgName());
if(ObjectUtil.isNotNull(org) && ObjectUtil.isNotNull(org.getParentOrgId())){
queryWrapper.and(wrapper -> wrapper.eq("a.parent_org_id", org.getParentOrgId()).or().eq("a.org_id", org.getParentOrgId()));
}
queryWrapper.orderByAsc("a.parent_org_id");
queryWrapper.orderByAsc("a.org_sort");
Page<Org> aPage = orgService.selectForPage(new Page<>(current, pageSize), queryWrapper);
return Result.success(aPage);
}
@GetMapping(value = "/details")
@ApiOperation(value = "获取单条组织详情", notes = "获取单条组织详情")
@ApiImplicitParam(name = "id", value = "组织的主键ID", required = true, dataType = "Long", paramType = "path")
public Result<Org> getById(Long id) {
Org byId = orgService.getById(id);
if(byId != null && byId.getParentOrgId() != null && byId.getParentOrgId() > 0){
Org byId1 = orgService.getById(byId.getParentOrgId());
byId.setParentOrgName(byId1.getOrgName());
}
return Result.success(byId);
}
@PostMapping(value = "/create")
@ApiOperation(value = "保存组织详情", notes = "新增组织详情")
public Result<Object> create(@RequestBody Org params) {
if(ObjectUtil.isNotNull(params.getParentOrgId()) && params.getParentOrgId() != 0){
Org byId = orgService.getById(params.getParentOrgId());
params.setIds(byId.getIds() + byId.getOrgId() + ",");
} else {
params.setParentOrgId(Long.parseLong("0"));
params.setIds("0,");
}
if(ObjectUtil.isNotNull(params.getOrgId()) && params.getOrgId() != 0){
params.setLastUpdateMan(getUserId());
params.setLastUpdateTime(new Date());
orgService.updateById(params);
} else {
params.setOrgId(null);
params.setCreateMan(getUserId());
params.setCreateTime(new Date());
orgService.save(params);
}
return Result.success();
}
@PostMapping(value = "/delete")
@ApiOperation(value = "删除单条组织", notes = "删除单条组织")
@ApiImplicitParam(name = "id", value = "组织的主键ID", required = true, dataType = "Long", paramType = "path")
public Result<Object> delete(@RequestBody String id) throws BaseException {
JSONObject jsonObject = JSONObject.parseObject(id);
id = jsonObject.getString("id");
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_org_id", id);
List<Org> list = orgService.list(queryWrapper);
if(list != null && !list.isEmpty()){
throw new BaseException(201, "删除组织存在下级组织!");
}
orgService.removeById(id);
return Result.success();
}
@PostMapping(value = "/batchDelete")
@ApiOperation(value = "批量删除组织", notes = "批量删除组织")
public Result<Object> batchDelete(@ApiParam(value = "组织ID集合", required = true) @RequestBody List<Long> ids) throws BaseException {
if(ids == null || ids.size() < 1){
throw new BaseException(201, "参数错误");
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.in("parent_org_id", ids);
List<Org> list = orgService.list(queryWrapper);
if(list != null && !list.isEmpty()){
throw new BaseException(201, "删除组织存在下级组织!");
}
orgService.removeByIds(ids);
return Result.success();
}
/*@PostMapping(value = "/update")
@ApiOperation(value = "修改组织信息", notes = "修改组织信息")
public Result<Object> update(@RequestBody Org params) {
orgService.updateById(params);
return Result.success();
}*/
@GetMapping(value = "/tree")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> tree(Long parentOrgId, String orgStatus) {
List<Org> orgs = orgService.tree(parentOrgId, orgStatus);
return Result.success(orgs);
}
@GetMapping(value = "/treeNew")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> treeNew(Long parentOrgId, String deptFlag) {
List<Org> orgs = orgService.treeNew(parentOrgId, deptFlag);
return Result.success(orgs);
}
@GetMapping(value = "/treeNewForDepet")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> treeNewForDepet(Long parentOrgId, String deptFlag) {
List<Org> orgs = orgService.treeNewForDepet(parentOrgId, deptFlag);
return Result.success(orgs);
}
@GetMapping(value = "/getSelect")
@ApiOperation(value = "获取组织下拉", notes = "获取组织下拉")
public Result<List<Org>> getSelect() {
List<Org> orgs = orgService.getSelect();
return Result.success(orgs);
}
@GetMapping(value = "/getdeptList")
@ApiOperation(value = "获取本部下的所有部门", notes = "获取本部下的所有部门")
public Result<List<Org>> getdeptList() {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("parent_org_id",51);
List<Org> orgs = orgService.getBaseMapper().selectList(wrapper);
return Result.success(orgs);
}
@GetMapping(value = "/getdepttmentList")
@ApiImplicitParam(name = "id", value = "部门id", required = true, dataType = "Long", paramType = "path")
@ApiOperation(value = "获取本部下部门的处室", notes = "获取本部下部门的处室")
public Result<List<Org>> getdepttmentList(Long id) {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("parent_org_id",id);
List<Org> orgs = orgService.getBaseMapper().selectList(wrapper);
return Result.success(orgs);
}
}
package org.arch.manage.conterller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import org.arch.base.Result;
import org.arch.base.exception.BDException;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.*;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.manage.service.RoleService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* 角色controller
*/
@RestController
@RequestMapping("/role")
@Api(tags = "角色管理相关接口")
public class RoleController{
@Autowired
private RoleService roleService;
/**
* 根据条件分页查询
* @param user
* @return
*/
@ApiOperation(value = "根据条件分页查询", notes = "根据条件分页查询")
@PostMapping("/page")
public Result<Page<RoleDto>> page(@RequestBody RoleQueryDto roleQueryDto){
IPage<Role> queryPage = new Page<>();
queryPage.setCurrent((roleQueryDto.getCurrPage()==null || roleQueryDto.getCurrPage()<=0)?1:roleQueryDto.getCurrPage());
queryPage.setSize((roleQueryDto.getPageSize()==null || roleQueryDto.getPageSize()<=0)?20:roleQueryDto.getPageSize());
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(roleQueryDto.getName())){
queryWrapper.like("role_name",roleQueryDto.getName());
}
if(StringUtils.isNotBlank(roleQueryDto.getSelectVal())){
final String selectVal = roleQueryDto.getSelectVal();
queryWrapper.and(qw-> {
QueryWrapper<Role> like = qw.like("role_name", selectVal);
});
}
IPage<Role> iPage = roleService.page(queryPage,queryWrapper);
Page<RoleDto> page = new Page<>();
BeanUtils.copyProperties(iPage,page);
if(iPage.getRecords() != null && iPage.getRecords().size() > 0){
List<RoleDto> roleDtos = new ArrayList<>();
for (Role role : iPage.getRecords()){
RoleDto roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
roleDtos.add(roleDto);
}
page.setRecords(roleDtos);
}
return Result.success(page);
}
/**
* 角色添加
* @param role 角色添加相关
* @return 添加結果
*/
@ApiOperation(value = "添加角色信息", notes = "添加角色信息")
@PostMapping("/add")
public Result create(@RequestBody RoleAddDto roleAdd){
boolean flag = roleService.create(roleAdd);
if(flag){
return Result.success();
}
return Result.error("创建角色失败!");
}
/**
* 用户更新
* @param user
* @return
*/
@ApiOperation(value = "编辑用户信息", notes = "编辑用户信息")
@PostMapping("/update")
public Result update(@RequestBody RoleUpdateDto roleUpdate){
boolean flag = roleService.update(roleUpdate);
if(flag){
return Result.success();
}
return Result.error("修改角色失败!");
}
/**
* 根据id删除角色
* @param id id
* @return 删除结果
*/
@ApiOperation(value = "根据id删除角色", notes = "根据id删除角色")
@GetMapping("/delete")
@ApiImplicitParam(name = "id", value = "角色id", required = true, dataType = "Long", paramType = "path")
public Result delete(Long id){
if(id == null){
return Result.error("角色id不能为空");
}
List<Long> ids = new ArrayList<>();
ids.add(id);
boolean flag = roleService.delete(ids);
if(flag){
return Result.success();
}
return Result.error("删除角色失败!");
}
/**
* 批量删除
* @param ids
* @return
*/
@PostMapping(value = "/batchDelete")
@ApiOperation(value = "批量删除角色", notes = "批量删除角色")
public Result batchDelete(@ApiParam(value = "用户ID集合", required = true) @RequestBody List<Long> ids){
if(ids == null || ids.size() < 1){
throw new BDException("角色id不能为空");
}
boolean flag = roleService.delete(ids);
if(flag){
return Result.success();
}
return Result.error("删除用户失败!");
}
/**
* 获取所有的角色信息
* @return
*/
@GetMapping(value = "/getAll")
@ApiOperation(value = "获取所有角色", notes = "获取所有角色")
public Result<List<RoleSmallDto>> getAll(){
List<Role> roles = roleService.list();
List<RoleSmallDto> roleSmallDtos = new ArrayList<>();
if(roles!= null){
for (Role role : roles){
RoleSmallDto rs = new RoleSmallDto();
BeanUtils.copyProperties(role,rs);
roleSmallDtos.add(rs);
}
}
return Result.success(roleSmallDtos);
}
@GetMapping(value = "/getById")
@ApiOperation(value = "根据id获取角色信息", notes = "根据id获取角色信息")
@ApiImplicitParam(name = "roleId", value = "角色id", required = true, dataType = "Long", paramType = "path")
public Result<RoleDto> getById(Long roleId){
RoleDto roleDto = roleService.getRoleDtoById(roleId);
return Result.success(roleDto);
}
/**
* 启用或者禁用
* @return
*/
@GetMapping(value = "/enableOrUnEnable")
@ApiOperation(value = "启用或者禁用角色", notes = "启用或者禁用角色")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "角色id",required = true, dataType = "long", paramType = "path"),
@ApiImplicitParam(name = "enable", value = "禁用或者启用 0:禁用 1:启用", required = true, dataType = "long", paramType = "path"),
})
public Result enableOrUnEnable( Long roleId
,Integer enable){
boolean flag = roleService.enableOrUnEnable(roleId,enable);
if(!flag){
return Result.error();
}
return Result.success();
}
/**
* 用户更新
* @param user
* @return
*/
@ApiOperation(value = "编辑用户信息", notes = "编辑用户信息")
@PostMapping("/updateUserRoles")
public Result updateUserRoles(@RequestBody RoleUpdateDto roleUpdate){
boolean flag = roleService.update(roleUpdate);
if(flag){
return Result.success();
}
return Result.error("修改角色失败!");
}
}
package org.arch.manage.converter;
import org.arch.common.modules.sysmange.dto.MenuDto;
import org.arch.common.modules.sysmange.entity.Menu;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import java.util.List;
@Mapper(componentModel = "spring")
public interface MenuConverter {
@Mappings({})
Menu dto2Menu(MenuDto menuDto);
@Mappings({})
MenuDto men2Dto(Menu menuDto);
List<MenuDto> men2Dto_list(List<Menu> menuDto);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.AdsProject;
import java.util.List;
/**
* <p>
* 可行性研究报告 Mapper 接口
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
@Mapper
public interface AdsProjectMapper extends BaseMapper<AdsProject> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.BackLog;
/**
* <p>
* 部门 Mapper 接口
* </p>
*
* @author audit
* @since 2020-11-07
*/
@Mapper
public interface BackLogMapper extends BaseMapper<BackLog> {
@Select("<script>" +
"SELECT a.*, b.name AS submitter, c.name AS accepter " +
"FROM com_backlog a " +
"LEFT JOIN sys_user b ON a.submitter_id = b.`isc_user_id` " +
"LEFT JOIN sys_user c ON a.accepter_id = c.`isc_user_id` " +
"${ew.customSqlSegment}" +
"</script>")
@Override
<E extends IPage<BackLog>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<BackLog> queryWrapper);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.sysmange.entity.Dept;
/**
* <p>
* 部门 Mapper 接口
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Mapper
public interface DeptMapper extends BaseMapper<Dept> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.boot.autoconfigure.batch.BatchProperties;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface JobMapper extends CoreMapper<BatchProperties.Job> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Menu;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface MenuMapper extends CoreMapper<Menu> {
/**
* 根据用户id查询菜单
* @param userId 用户id
* @return 菜单集合
*/
@Select("SELECT * FROM sys_menu m WHERE EXISTS (SELECT 1 FROM sys_roles_menus rm LEFT JOIN sys_users_roles ur ON rm.role_id = ur.role_id WHERE ur.user_id = #{userId} and rm.menu_id = m.id);")
List<Menu> findByUserId(@Param("userId") Long userId);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Org;
/**
* <p>
* Mapper 接口
* </p>
*
* @author audit
* @since 2020-08-21
*/
@Mapper
public interface OrgMapper extends BaseMapper<Org> {
@Select("select a.*, b.name as createManName from sys_org a left join sys_user b on a.create_man = b.id " +
"${ew.customSqlSegment}")
Page<Org> selectForPage(Page<Object> objectPage, @Param(Constants.WRAPPER) QueryWrapper<Org> queryWrapper);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Project;
import java.util.List;
/**
* <p>
* 可行性研究报告 Mapper 接口
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
@Mapper
public interface ProjectMapper extends BaseMapper<Project> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import java.util.List;
/**
* <p>
* 规划设计研究-规划表 Mapper 接口
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
@Mapper
public interface PsrPlanMapper extends BaseMapper<PsrPlan> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface RoleMapper extends CoreMapper<Role> {
/**
* 根据用户ID查询
*
* @param id 用户ID
* @return
*/
@Select("select m.* from sys_role m LEFT JOIN sys_users_roles t on m.id= t.role_id LEFT JOIN sys_user r on r.id = t.user_id where r.id = #{id}")
List<Role> selectListByUserId(@Param("id") Long id);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-16
*/
@Repository
@Mapper
public interface RolesMenusMapper extends CoreMapper<RolesMenus> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.User;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 系统用户 Mapper 接口
* </p>
*
* @author liulei
* @since 2020-09-02
*/
@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<UserDto> getUserList(RoleUpdateDto roleUpdate);
@Select("SELECT\n" +
"\tsu.*,s.org_simple_name\n" +
"FROM\n" +
"\tsys_users_roles sur\n" +
"LEFT JOIN sys_role sr ON sr.id = sur.role_id\n" +
"LEFT JOIN sys_user su ON sur.user_id = su.id\n" +
"LEFT JOIN sys_org s on s.org_id = su.org_id\n" +
"WHERE\n" +
"\tsr.role_sign = #{roleSign} and su.id is not null and su.is_delete = '0'")
List<UserDto> getUserList2(RoleUpdateDto roleUpdate);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-16
*/
@Repository
@Mapper
public interface UsersRolesMapper extends CoreMapper<UsersRoles> {
/**
* 解绑人员角色菜
* @param id 人员ID
*/
@Delete("delete from sys_users_roles where user_id = #{id}")
void removeRoles(@Param("id") Long id);
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.AdsProject;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
/**
* <p>
* 可行性研究报告 服务类
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
public interface AdsProjectService extends IService<AdsProject> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.BackLog;
/**
* <p>
* 待办 服务类
* </p>
*
* @author audit
* @since 2020-08-27
*/
public interface BackLogService extends IService<BackLog> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Dept;
/**
* <p>
* 部门 服务类
* </p>
*
* @author audit
* @since 2020-08-27
*/
public interface DeptService extends IService<Dept> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Menu;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface MenuService extends IService<Menu> {
/**
* 根据用户id查询菜单
* @param userId 用户id
* @return 菜单
*/
Set<Menu> findByUserId(Long userId);
/**
* 查询所有的权限,返回set集合
* @return
*/
Set<Menu> findAllForSet();
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Org;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author audit
* @since 2020-08-21
*/
public interface OrgService extends IService<Org> {
List<Org> tree(Long parentOrgId, String orgStatus);
List<Org> treeNew(Long parentOrgId, String deptFlag);
List<Org> treeNewForDepet(Long parentOrgId, String deptFlag);
Page<Org> selectForPage(Page<Object> objectPage, QueryWrapper<Org> queryWrapper);
List<Org> getSelect();
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Project;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* <p>
* 可行性研究报告 服务类
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
public interface ProjectService extends IService<Project> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* <p>
* 规划设计研究-规划表 服务类
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
public interface PsrPlanService extends IService<PsrPlan> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.dto.RoleAddDto;
import org.arch.common.modules.sysmange.dto.RoleDto;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.mybatis.common.service.BaseService;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface RoleService extends BaseService<Role> {
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<RoleDto> all, HttpServletResponse response) throws IOException;
/**
* 根据角色ID查询
* @param id 角色ID
* @return /
*/
List<RoleSmallDto> findRoleSmallListByUserId(Long id);
/**
* 根据ID查询
* @param id /
* @return /
*/
RoleDto findById(long id);
/**
* 创建
* @param roleAdd 角色添加信息
* @return 是否添加成功
*/
boolean create(RoleAddDto roleAdd);
/**
* 编辑
* @param resources /
*/
boolean update(RoleUpdateDto roleUpdate);
boolean delete(List<Long> ids);
/**
* 根据角色id查询角色角色
* @param id 角色id
* @return 角色信息集合
*/
Set<RoleSmallDto> findRoleSmallSetByUserId(Long id);
/**
* 根据用戶id查询角色信息
* @param id 角色id
* @return 角色简略细腻西
*/
List<Role> findByUserId(Long id);
/**
* 禁用或者启用角色
* @param roleId 角色id
* @param enable 禁用或者启用状态
* @return 是否操作成功
*/
boolean enableOrUnEnable(Long roleId, Integer enable);
/**
* 根据id获取角色信息
* @param roleId 角色id
* @return 角色信息
*/
RoleDto getRoleDtoById(Long roleId);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.mybatis.common.service.BaseService;
import java.util.List;
/**
* @author hupeng
* @date 2020-05-16
*/
public interface RolesMenusService extends BaseService<RolesMenus> {
/**
* 根据角色id获取菜单集合id
* @param roleId 角色id
* @return 菜单集合id
*/
List<Long> queryByRoleId(long roleId);
/**
* 保存角色菜单信息
* @param menuIds 菜单id
* @param roleId 角色id
*/
void save(List<Long> menuIds, Long roleId);
/**
* 修改角色菜单信息
* @param menuIds 菜单集合
* @param roleId 角色id
*/
void update(List<Long> menuIds, Long roleId);
/**
* 根据角色id删除
* @param roleIds 角色id集合
*/
void deleteByRoleId(List<Long> roleIds);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.base.exception.BaseException;
import org.arch.common.modules.sysmange.dto.*;
import org.arch.common.modules.sysmange.entity.User;
import org.arch.mybatis.common.service.BaseService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface UserService extends BaseService<User> {
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<UserDto> all, HttpServletResponse response) throws IOException;
/**
* 根据用户账户查询
* @param phone 用户手机号
* @return 用户详细
*/
UserDto findByPhone(String phone);
/**
* 根据用户id 查询用户详情
* @param id id
* @return 用户信息
*/
UserDto findById(Long id);
/**
* 新增用户
* @param resources /
* @return /
*/
boolean create(UserAddDto resources);
/**
* 编辑用户
* @param resources /
*/
boolean update(UserUpdateDto user);
/**
* 删除用户
* @param ids
*/
boolean delete(List<Long> ids);
/**
* 用户登录
* @param authUser 登录用户
* @param request
* @return 用户登录信息
*/
UserLoginDto login(AuthUser authUser, HttpServletRequest request) throws BaseException, UnsupportedEncodingException;
/**
* 根据用户信息获取用户Dto
* @param user 用户信息
* @return 用户dto
*/
UserDto getUserDtoByUser(User user);
/**
* 根据手机号查下用户信息
* @param phone 手机号
* @return 用户信息
*/
public User selectByPhone(String phone);
/**
* 根据用户编码查下用户信息
* @param userCode 用户编码
* @return 用户信息
*/
public User selectByUserCode(String userCode);
/**
* 根据isc用户编码查下用户信息
* @param isc_user_id 用户编码
* @return 用户信息
*/
public User selectByIscUserId(String isc_user_id);
/**
* 根据isc用户编码查下用户信息
* @param isc_user_id 用户编码
* @return 用户信息
*/
UserDto getUserIsc(String isc_user_id);
public User selectAllByIscUserId(String isc_user_id);
/*
* 根据角色查询用户集合
* */
List<UserDto> getUserList(RoleUpdateDto roleUpdate);
/*
* 根据角色查询用户集合
* */
List<UserDto> getUserList2(RoleUpdateDto roleUpdate);
List<UserDto> getUserListAll(RoleUpdateDto roleUpdate);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.mybatis.common.service.BaseService;
/**
* @author hupeng
* @date 2020-05-16
*/
public interface UsersRolesService extends BaseService<UsersRoles> {
/**
* 编辑用户角色
* @param long id /
*/
boolean removeRoles(Long userId);
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.AdsProject;
import org.arch.manage.mapper.AdsProjectMapper;
import org.arch.manage.service.AdsProjectService;
import org.springframework.stereotype.Service;
/**
* <p>
* 可行性研究报告 服务实现类
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
@Service
public class AdsProjectServiceImpl extends ServiceImpl<AdsProjectMapper, AdsProject> implements AdsProjectService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.BackLog;
import org.arch.manage.mapper.BackLogMapper;
import org.arch.manage.service.BackLogService;
import org.springframework.stereotype.Service;
/**
* <p>
* 部门 服务实现类
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Service
public class BackLogServiceImpl extends ServiceImpl<BackLogMapper, BackLog> implements BackLogService {
@Override
public <E extends IPage<BackLog>> E page(E page, Wrapper<BackLog> queryWrapper) {
return getBaseMapper().selectPage(page, queryWrapper);
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Dept;
import org.arch.manage.mapper.DeptMapper;
import org.arch.manage.service.DeptService;
import org.springframework.stereotype.Service;
/**
* <p>
* 部门 服务实现类
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Menu;
import org.arch.manage.mapper.MenuMapper;
import org.arch.manage.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
@Autowired
private MenuMapper menuMapper;
@Override
public Set<Menu> findByUserId(Long userId) {
if(userId == null){
return null;
}
List<Menu> menus = menuMapper.findByUserId(userId);
if(menus == null || menus.size() == 0){
return null;
}
return menuList2Set(menus);
}
private Set<Menu> menuList2Set(List<Menu> menus) {
Set<Menu> menuSet = new HashSet<>();
for (Menu menu : menus){
menuSet.add(menu);
}
return menuSet;
}
@Override
public Set<Menu> findAllForSet() {
QueryWrapper<Menu> queryWrapper = new QueryWrapper<>();
List<Menu> menus = menuMapper.selectList(queryWrapper);
if(menus == null || menus.size() == 0){
return null;
}
return menuList2Set(menus);
}
}
package org.arch.manage.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.arch.common.modules.sysmange.entity.Org;
import org.arch.manage.mapper.OrgMapper;
import org.arch.manage.service.OrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author audit
* @since 2020-08-21
*/
@Service
public class OrgServiceImpl extends ServiceImpl<OrgMapper, Org> implements OrgService {
@Autowired
OrgMapper orgMapper;
@Override
public List<Org> tree(Long parentOrgId, String orgStatus) {
List<Org> orgs = null;
Org parent = null;
if(parentOrgId != null && parentOrgId != 0){
parent = orgMapper.selectById(parentOrgId);
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(parentOrgId != null && parentOrgId != 0){
queryWrapper.like("ids", "," + String.valueOf(parentOrgId) + ",");
}
if(StrUtil.isNotBlank(orgStatus)){
queryWrapper.eq("org_status", orgStatus);
}
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
orgs = orgMapper.selectList(queryWrapper);
if(CollectionUtil.isEmpty(orgs)){
orgs = new ArrayList<>();
if(parent != null)orgs.add(parent);
return orgs;
}
if(parent != null)orgs.add(parent);
if (CollectionUtils.isEmpty(orgs) || orgs.size() == 1) {
return orgs;
}
Org org = new Org();
if(parentOrgId != null && parentOrgId != 0 && parent != null){
org.setOrgId(parent.getParentOrgId());
} else {
org.setOrgId(Long.parseLong("0"));
}
org.setChildren(new ArrayList<>());
this.createTreeData(org, orgs);
return org.getChildren();
}
@Override
public List<Org> treeNew(Long parentOrgId, String deptFlag) {
List<Org> orgs = null;
Org parent = null;
if(parentOrgId != null && parentOrgId != 0){
parent = orgMapper.selectById(parentOrgId);
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(parentOrgId != null && parentOrgId != 0){
queryWrapper.like("ids", "," + String.valueOf(parentOrgId) + ",");
}
if(StrUtil.isNotBlank(deptFlag)){
queryWrapper.eq("dept_flag", deptFlag);
}
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
orgs = orgMapper.selectList(queryWrapper);
if(CollectionUtil.isEmpty(orgs)){
orgs = new ArrayList<>();
if(parent != null)orgs.add(parent);
return orgs;
}
if(parent != null)orgs.add(parent);
if (CollectionUtils.isEmpty(orgs) || orgs.size() == 1) {
return orgs;
}
Org org = new Org();
if(parentOrgId != null && parentOrgId != 0 && parent != null){
org.setOrgId(parent.getParentOrgId());
} else {
// org.setOrgId(Long.parseLong("0"));
org.setOrgId(Long.parseLong("50"));
}
org.setChildren(new ArrayList<>());
this.createTreeData1(org, orgs);
List<Org> children = org.getChildren();
Org org1 = new Org();
for (Org child : children) {
if(Long.valueOf(child.getOrgId()) == 51){
org1.setChildren(child.getChildren());
}else {
org1.getChildren().add(child);
}
}
// return org.getChildren();
return org1.getChildren();
}
@Override
public List<Org> treeNewForDepet(Long parentOrgId, String deptFlag) {
List<Org> orgs = this.treeNew(null, "1");
List<Org> collect = orgs.stream().map(item -> {
Org org = new Org();
org.setOrgId(item.getOrgId());
org.setOrgName(item.getOrgName());
return org;
}).collect(Collectors.toList());
return collect;
}
@Override
public Page<Org> selectForPage(Page<Object> objectPage, QueryWrapper<Org> queryWrapper) {
return orgMapper.selectForPage(objectPage, queryWrapper);
}
@Override
public List<Org> getSelect() {
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("org_status", 1);
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
List<Org> orgs = orgMapper.selectList(queryWrapper);
return orgs;
}
private void createTreeData(Org parent, List<Org> officeList) {
if (officeList == null) return;
Iterator<Org> iterator = officeList.iterator();
while (iterator.hasNext()) {
Org next = iterator.next();
if (next == null) continue;
if (next.getParentOrgId().equals(parent.getOrgId())) {
List<Org> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>();
parent.setChildren(children);
}
children.add(next);
iterator.remove();
this.createTreeData(next, officeList);
iterator = officeList.iterator();
}
}
}
private void createTreeData1(Org parent, List<Org> officeList) {
if (officeList == null) return;
Iterator<Org> iterator = officeList.iterator();
while (iterator.hasNext()) {
Org next = iterator.next();
if (next == null) continue;
if (next.getParentOrgId().equals(parent.getOrgId())) {
List<Org> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>();
parent.setChildren(children);
}
children.add(next);
iterator.remove();
this.createTreeData(next, officeList);
iterator = officeList.iterator();
}
}
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Project;
import org.arch.manage.mapper.ProjectMapper;
import org.arch.manage.service.ProjectService;
import org.springframework.stereotype.Service;
/**
* <p>
* 可行性研究报告 服务实现类
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
@Service
public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import org.arch.manage.mapper.PsrPlanMapper;
import org.arch.manage.service.PsrPlanService;
import org.springframework.stereotype.Service;
/**
* <p>
* 规划设计研究-规划表 服务实现类
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
@Service
public class PsrPlanServiceImpl extends ServiceImpl<PsrPlanMapper, PsrPlan> implements PsrPlanService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.arch.base.enums.EnableEnum;
import org.arch.base.exception.BDException;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.RoleAddDto;
import org.arch.common.modules.sysmange.dto.RoleDto;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.manage.mapper.RoleMapper;
import org.arch.manage.service.RoleService;
import org.arch.manage.service.RolesMenusService;
import org.arch.manage.util.UserUtil;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, Role> implements RoleService {
@Autowired
private RoleMapper roleMapper;
@Autowired
private RolesMenusService rolesMenusService;
@Autowired
private UserUtil userUtil;
@Override
public void download(List<RoleDto> all, HttpServletResponse response) throws IOException {
}
@Override
public List<RoleSmallDto> findRoleSmallListByUserId(Long id) {
if(id == null){
return null;
}
List<Role> roles = findByUserId(id);
if(roles == null || roles.size() == 0){
return null;
}
List<RoleSmallDto> roleSmallDtoList = new ArrayList<>();
for(Role role : roles){
RoleSmallDto roleSmallDto = new RoleSmallDto();
BeanUtils.copyProperties(role,roleSmallDto);
roleSmallDtoList.add(roleSmallDto);
}
return roleSmallDtoList;
}
@Override
public RoleDto findById(long id) {
Role role = roleMapper.selectById(id);
if(role == null){
return null;
}
RoleDto roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
//查询所有的订单id
List<Long> menuIds = rolesMenusService.queryByRoleId(id);
roleDto.setMenuIds(menuIds);
return roleDto;
}
@Override
public boolean create(RoleAddDto roleAdd) {
//验证角色信息
valid(roleAdd);
//验证角色标识是否唯一
validRoleSign(roleAdd.getRoleSign(),null);
//插入角色信息
Role role = new Role();
BeanUtils.copyProperties(roleAdd,role);
role.setCreateTime(new Date());
role.setUserIdCreate(userUtil.getUserId());
//设置默认的启用状态
if(role.getEnabled() == null){
role.setEnabled(EnableEnum.ENABLE.getCode());
}
save(role);
rolesMenusService.save(roleAdd.getMenuIds(),role.getId());
return true;
}
@Override
public boolean update(RoleUpdateDto roleUpdate) {
if(roleUpdate.getId() == null){
throw new BDException("角色id不能为空!");
}
//验证角色信息
valid(roleUpdate);
//验证角色标识是否唯一
validRoleSign(roleUpdate.getRoleSign(),roleUpdate.getId());
//插入角色信息
Role role = new Role();
BeanUtils.copyProperties(roleUpdate,role);
role.setUpdateTime(new Date());
role.setUserIdUpdate(userUtil.getUserId());
roleMapper.updateById(role);
rolesMenusService.update(roleUpdate.getMenuIds(),roleUpdate.getId());
return true;
}
@Override
public boolean delete(List<Long> ids) {
if(ids == null || ids.size() == 0){
throw new BDException("角色id不能为空!");
}
if(ids.size() == 1){
roleMapper.deleteById(ids.get(0));
}else{
roleMapper.deleteBatchIds(ids);
}
rolesMenusService.deleteByRoleId(ids);
return true;
}
@Override
public Set<RoleSmallDto> findRoleSmallSetByUserId(Long id) {
if(id == null){
return null;
}
List<Role> roles = findByUserId(id);
if(roles == null || roles.size() == 0){
return null;
}
Set<RoleSmallDto> roleSmallDtoSet = new HashSet<>();
for(Role role : roles){
RoleSmallDto roleSmallDto = new RoleSmallDto();
BeanUtils.copyProperties(role,roleSmallDto);
roleSmallDtoSet.add(roleSmallDto);
}
return roleSmallDtoSet;
}
@Override
public List<Role> findByUserId(Long id) {
return roleMapper.selectListByUserId(id);
}
@Override
public boolean enableOrUnEnable(Long roleId, Integer enable) {
if(roleId == null){
throw new BDException("角色id不能为空!");
}
if(enable == null){
throw new BDException("禁用或者启用状态不能为空!");
}
if(enable != 0 && enable != 1){
throw new BDException("禁用或者启用状态错误!");
}
Role role = new Role();
role.setId(roleId);
role.setEnabled(enable);
return roleMapper.updateById(role) > 0;
}
@Override
public RoleDto getRoleDtoById(Long roleId) {
RoleDto roleDto = null;
//获取角色信息
Role role = roleMapper.selectById(roleId);
if(role == null){
return null;
}
roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
//获取菜单id集合
List<Long> menuIds = rolesMenusService.queryByRoleId(roleId);
roleDto.setMenuIds(menuIds);
return roleDto;
}
/**
* 验证角色信息
* @param role 角色信息
*/
private void valid(RoleAddDto role){
if(role == null){
throw new BDException("角色信息不能为空!");
}
if(StringUtils.isBlank(role.getRoleName())){
throw new BDException("角色名称不能为空!");
}
}
/**
* 验证角色标识是否唯一
* @param roleSign 角色标识
* @param 是否唯一
*/
private void validRoleSign(String roleSign, Long roleId) {
QueryWrapper<Role> queryWrapper = new QueryWrapper();
queryWrapper.eq("role_sign",roleSign);
if(roleId != null){
queryWrapper.ne("id",roleId);
}
if(roleMapper.selectCount(queryWrapper) > 0){
throw new BDException("角色标识已经存在!");
}
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.arch.base.exception.BDException;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.manage.mapper.RolesMenusMapper;
import org.arch.manage.service.RolesMenusService;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RolesMenusServiceImpl extends BaseServiceImpl<RolesMenusMapper, RolesMenus> implements RolesMenusService {
@Autowired
private RolesMenusMapper rolesMenusMapper;
@Override
public List<Long> queryByRoleId(long roleId) {
QueryWrapper<RolesMenus> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",roleId);
List<RolesMenus> rolesMenusList = this.list(queryWrapper);
if(rolesMenusList == null || rolesMenusList.size() == 0){
return null;
}
List<Long> ids = new ArrayList<>();
for (RolesMenus rolesMenus : rolesMenusList){
ids.add(rolesMenus.getMenuId());
}
return ids;
}
@Override
public void save(List<Long> menuIds, Long roleId) {
if(roleId == null){
throw new BDException("角色id不能为空!");
}
if(menuIds != null && menuIds.size() >0){
List<RolesMenus> rolesMenusList = new ArrayList<>();
for (Long menuId : menuIds){
RolesMenus rolesMenus = new RolesMenus();
rolesMenus.setRoleId(roleId);
rolesMenus.setMenuId(menuId);
rolesMenusList.add(rolesMenus);
}
saveBatch(rolesMenusList);
}
}
@Override
public void update(List<Long> menuIds, Long roleId) {
List<Long> oldMenuId = queryByRoleId(roleId);
//找出需要新增的菜单
addRoleMenu(menuIds,oldMenuId,roleId);
deleteRoleMenu(menuIds,oldMenuId,roleId);
}
@Override
public void deleteByRoleId(List<Long> roleIds) {
if(roleIds == null || roleIds.size() == 0){
return;
}
UpdateWrapper<RolesMenus> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("role_id",roleIds);
rolesMenusMapper.delete(updateWrapper);
}
private void deleteRoleMenu(List<Long> menuIds, List<Long> oldMenuId, Long roleId) {
if(oldMenuId == null || oldMenuId.size() == 0){
return;
}
//全部删除
if(menuIds == null || menuIds.size() == 0){
delete(menuIds,roleId);
return;
}
List<Long> deleteMenuId = new ArrayList<>();
for (Long menuId : oldMenuId){
if(menuIds.contains(menuId)){
continue;
}
deleteMenuId.add(menuId);
}
delete(deleteMenuId,roleId);
}
/**
* 根据角色id和菜单id删除
* @param menuIds 菜单id集合
* @param roleId 角色id
*/
private void delete(List<Long> menuIds, Long roleId) {
if(menuIds == null || menuIds.size() == 0 || roleId == null){
return;
}
UpdateWrapper<RolesMenus> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("role_id",roleId);
updateWrapper.in("menu_id",menuIds);
rolesMenusMapper.delete(updateWrapper);
}
/**
* 对比原来的菜单id和现在的菜单id,将不存在的新增
* @param menuIds 现在的菜单id
* @param oldMenuId 原来的菜单id
* @param roleId 角色id
*/
private void addRoleMenu(List<Long> menuIds, List<Long> oldMenuId, Long roleId) {
if(menuIds == null || menuIds.size() == 0){
return;
}
if(oldMenuId == null){
save(menuIds,roleId);
return;
}
List<Long> addMenuId = new ArrayList<>();
for (Long menuId : menuIds){
if(oldMenuId.contains(menuId)){
continue;
}
addMenuId.add(menuId);
}
save(addMenuId,roleId);
}
}
package org.arch.manage.service.impl;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.manage.mapper.UsersRolesMapper;
import org.arch.manage.service.UsersRolesService;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 用户角色
*/
@Service
public class UsersRolesServiceImpl extends BaseServiceImpl<UsersRolesMapper, UsersRoles> implements UsersRolesService {
@Autowired
UsersRolesMapper usersRolesMapper;
@Override
public boolean removeRoles(Long id) {
// TODO Auto-generated method stub
usersRolesMapper.removeRoles(id);
return true;
}
}
package org.arch.manage.util;
import org.apache.shiro.SecurityUtils;
import org.arch.base.utils.Constant;
import org.arch.base.utils.JwtUtil;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.User;
import org.arch.common.redis.RedisService;
import org.arch.manage.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
/**
* 获取当前登录用户工具类
*
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:45
*/
@Component
public class UserUtil {
@Autowired
private UserService userService;
/* @Value("${isc.start}")
private Boolean isc_start;*/
@Autowired
private RedisService redisService;
/**
* 获取当前登录用户
* 包括用户的菜单、角色、组织机构、部门
*
* @param
* @return com.wang.model.UserDto
* @throws Exception
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public UserDto getUserDto() {
User user = getUser();
UserDto userDto = null;
if (!redisService.exists(Constant.USER_ACCOUNT + user.getId())) {
userDto = userService.getUserDtoByUser(user);
redisService.set(Constant.USER_ACCOUNT + user.getId(), userDto, Long.valueOf(Constant.EXRP_HOUR));
} else {
userDto = (UserDto) redisService.getObject(Constant.USER_ACCOUNT + user.getId());
}
return userDto;
}
/**
* 获取用户信息
* @return 用户信息
*/
// public User getUser() {
// String token = SecurityUtils.getSubject().getPrincipal().toString();
// // 解密获得Account
// String account = JwtUtil.getClaim(token, Constant.ACCOUNT);
// User user = userService.selectByUserCode(account);
// // 用户是否存在
// if (user == null) {
// throw new RuntimeException("该帐号不存在(The account does not exist.)");
// }
// return user;
// }
/**
* 获取ISC用户信息
*
* @return 用户信息
* @throws Exception
*/
public User getUser() {
//使用isc获取信息
/* if (isc_start) {
IscSSOUserBean userbean = null;
String IscUserId = null;
User user = null;
String token = RequestHolderUtil.getRequest().getHeader("Authorization");
user = userService.selectByIscUserId(token);
// 用户是否存在
if (user == null) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
return user;
} else {
//使用shiro解密认证
Object principal = SecurityUtils.getSubject().getPrincipal();
if (ObjectUtils.isEmpty(principal)) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
// 解密获得Account
String account = JwtUtil.getClaim(principal.toString(), Constant.ACCOUNT);
User user = userService.selectByUserCode(account);
// 用户是否存在
if (user == null) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
return user;
}*/
return null;
}
/**
* 获取当前登录用户Id
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public Long getUserId() {
//return getUser().getId();
return 1L;
//return 1L;
}
/**
* 获取当前登录用户Token
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public String getToken() {
return SecurityUtils.getSubject().getPrincipal().toString();
}
/**
* 获取当前登录用户Account
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public String getAccount() {
String token = SecurityUtils.getSubject().getPrincipal().toString();
// 解密获得Account
return JwtUtil.getClaim(token, Constant.ACCOUNT);
}
}
server:
port: 17008
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-filters.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
- data-id: common-mybatis.${nacos.file-extension}
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: dev
server:
port: 17007
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
server:
port: 17007
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: sit
spring:
application:
name: arch-manage
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="./logs"/>
<property name="LOG_NAME" value="arch-overall"/>
<!--从配置中心加载数据-->
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<springProperty scope="context" name="logstashDestination" source="logstash.destination"/>
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件INFO -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件ERROR -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--nacos 心跳 INFO 屏蔽-->
<logger name="com.alibaba.nacos" level="OFF">
<appender-ref ref="ERROR_FILE"/>
</logger>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="com.xxl.job.core" level="DEBUG"/>
<logger name="org.apache.http.impl.conn" level="INFO"/>
<logger name="springfox.documentation" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="com.baomidou.mybatisplus" level="INFO" />
<!-- 本地环境 -->
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- 其它环境 -->
<springProfile name="dev,test,stage,prod,sit,uat,default">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.manage.mapper.UserMapper">
<select id="getUserList3" resultType="org.arch.common.modules.sysmange.dto.UserDto">
SELECT DISTINCT
( sur.user_id ) AS xx,
su.*,
s.org_simple_name ,a.role_name
FROM
sys_users_roles sur
LEFT JOIN sys_user su ON sur.user_id = su.id
LEFT JOIN sys_org s ON s.org_id = su.org_id
LEFT JOIN (SELECT u.user_id, GROUP_CONCAT( r.role_name ) role_name FROM sys_users_roles u LEFT JOIN sys_role r on u.role_id = r.id where u.role_id IN
<foreach item="item" index="index" collection="roleList" open="(" separator="," close=")">
#{item}
</foreach>
GROUP BY user_id)a on a.user_id = sur.user_id
WHERE
( sur.role_id IN
<foreach item="item" index="index" collection="roleList" open="(" separator="," close=")">
#{item}
</foreach>
AND su.id IS NOT NULL AND is_delete = '0' )
</select>
<select id="getUserList" resultType="org.arch.common.modules.sysmange.dto.UserDto">
SELECT
su.*,
s.org_simple_name
FROM
sys_users_roles sur
left join sys_role sr on sr.id = sur.role_id
LEFT JOIN sys_user su ON sur.user_id = su.id
LEFT JOIN sys_org s ON s.org_id = su.org_id
WHERE
su.id IS NOT NULL
AND su.is_delete = '0'
<if test="id != null and id != ''">
and sur.role_id = #{id}
</if>
<if test="roleSign != null and roleSign != ''">
and sr.role_sign = #{roleSign}
</if>
<if test="orgNum != null and orgNum != ''">
and su.org_num like CONCAT('%',#{orgNum},'%')
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>framework-system</artifactId>
<name>系统架构</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
...@@ -5,18 +5,18 @@ ...@@ -5,18 +5,18 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.arch</groupId> <groupId>org.arch</groupId>
<artifactId>arch</artifactId> <artifactId>framework-tool</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>arch-clouds</module> <module>framework-clouds</module>
<module>arch-system</module> <module>framework-system</module>
<module>arch-overall</module> <module>framework-overall</module>
<module>arch-analysis</module> <module>framework-analysis</module>
<module>system-manage</module> <module>framework-system-manage</module>
<module>arch-gateway</module> <module>framework-gateway</module>
<module>arch-base</module> <module>framework-base</module>
<module>arch-knowledge</module> <module>framework-knowledge</module>
</modules> </modules>
<name>数字化架构管理工具</name> <name>数字化架构管理工具</name>
<properties> <properties>
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>arch</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>system-manage</artifactId>
<name>系统管理</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.arch</groupId>
<artifactId>log</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.arch</groupId>
<artifactId>nacos</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
package org.arch.manage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.jmx.support.RegistrationPolicy;
@SpringBootApplication
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class SystemManageApp {
public static void main(String[] args) {
SpringApplication.run(SystemManageApp.class, args);
}
}
\ No newline at end of file
package org.arch.manage.conterller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.arch.base.utils.RequestUtils;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.*;
import org.arch.manage.service.AdsProjectService;
import org.arch.manage.service.BackLogService;
import org.arch.manage.service.ProjectService;
import org.arch.manage.service.PsrPlanService;
import org.arch.manage.util.UserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* BaseController
*/
public class BaseController {
@Autowired
private UserUtil userUtil;
@Autowired
private BackLogService backlogservice;
@Autowired
private ProjectService projectService;
@Autowired
private PsrPlanService psrPlanService;
@Autowired
private AdsProjectService adsProjectService;
/**
* 获取用户基础信息
* @return
*/
public User getUser(){
return userUtil.getUser();
// return new User();
}
/**
* 获取用户详细信息
* 包括用户组织机构、部门、权限等信息
* @return
*/
public UserDto getUserDto(){
return userUtil.getUserDto();
}
/**
* 获取用户id
* @return 用户id
*/
public Long getUserId(){
return userUtil.getUserId();
}
/**
* 获取用户名称
* @return 用户名称
*/
public String getUserName(){
return userUtil.getUserDto().getName();
}
/**
* 获取ISC用户名称
* @return 用户名称
*/
public String getUserIscId(){
return userUtil.getUserDto().getIscUserId();
}
/**
* 获取ISC用户名称
* @return 用户名称
*/
public String getUserDataPermission(){
return userUtil.getUserDto().getDataPermission();
}
/**
* 添加查询数据权限
* @param queryWrapper queryWrapper声明对象
* @param mainTableAlias 主表别名
* @param datatype 文档类别(fsr可研,ads概设)
* @param isAudit 是否审核页面
*/
public <T> void queryAddDataPermission(QueryWrapper<T> queryWrapper,String mainTableAlias,String datatype,boolean isAudit){
// Class c=t.getClass()
UserDto user=getUserDto();
List<RoleSmallDto> roles=user.getRoles();
//如果有管理员权限不做数据权限控制
boolean bs=roles.stream().anyMatch(RoleSmallDto -> RoleSmallDto.getRoleSign().equals("admin"));
if(bs)return;
boolean bc=roles.stream().anyMatch(RoleSmallDto -> RoleSmallDto.getRoleSign().contains("controuser"));// .equals("contro_user")
/**
* 数据权限控制
* 1获取用户的dataPermission
*/
if (!isAudit){
//非审核页面查询
if(mainTableAlias==null){
queryWrapper.eq("creater_id", user.getIscUserId());
if(StringUtils.isNotBlank(user.getDataPermission())){
queryWrapper.or()
.likeRight("org_num", user.getDataPermission());
}
}else{
//如果多表关联查询,主表有别名,加别名查询
queryWrapper.eq(mainTableAlias+".creater_id", user.getIscUserId());
if(StringUtils.isNotBlank(user.getDataPermission())){
queryWrapper.or()
.likeRight(mainTableAlias+".org_num", user.getDataPermission());
}
}
}else{
//审核页面查询
// queryWrapper.ge("state", 1);
//可研或者概设审核且为专家
if(!bc&&datatype!=null){
// queryWrapper.eq("state", 3);
queryWrapper.or();
queryWrapper.inSql(datatype+"_id", "select id from com_review_report where creater_id='"+user.getIscUserId()+"'");
}
}
}
//待办处理rid--文档ID、 type--类型(0审核待办,1专家待办) docType--类型(0规划,1可研 2概设)flag(0驳回,1通过)
public void addBackLog(String rid,String type,String docType,String flag,String state){
String docName="";
String doc="";
String accepterId="";
if("0".equals(docType)){
QueryWrapper<PsrPlan> wrapper = Wrappers.query();
wrapper.eq("id", rid);
PsrPlan p=psrPlanService.getOne(wrapper);
docName=p.getName();
doc="规划审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="规划驳回";
}
}else if("1".equals(docType)){
QueryWrapper<Project> wrapper = Wrappers.query();
wrapper.eq("fsr_id", rid);
Project p=projectService.getOne(wrapper);
docName=p.getPrjName();
doc="可研审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="可研驳回";
}
}else if("2".equals(docType)){
QueryWrapper<AdsProject> wrapper = Wrappers.query();
wrapper.eq("ads_id", rid);
AdsProject p=adsProjectService.getOne(wrapper);
docName=p.getAdsName();
doc="概设审核";
if("0".equals(flag)){
accepterId=p.getCreaterId();
doc="概设驳回";
}
}
BackLog bl=new BackLog();
bl.setBId(UUID.randomUUID().toString());
bl.setRId(rid);
bl.setResult("0");
bl.setName(doc+"_"+docName);
bl.setType(docType);
bl.setStepType(doc);
bl.setSubmitterId(getUserIscId()+"");
bl.setAccepterId(accepterId);
bl.setSubmitTime(new Date());
bl.setState(state);
backlogservice.save(bl);
}
//待办处理rid--文档ID、 type--类型(0审核代办,1专家代办)
public void updateBackLog(String rid,String type,String docType){
QueryWrapper<BackLog> bWrapper = Wrappers.query();
bWrapper.eq("r_id", rid);
bWrapper.eq("result", "0");
if("1".equals(type)){
bWrapper.eq("accepter_id", getUserIscId());
}
List<BackLog> list=backlogservice.list(bWrapper);
for(BackLog bl:list){
bl.setResult("1");
bl.setApprovalTime(new Date());
//bl.setType(docType);
bl.setApprover(getUserName());
bl.setApproverId(getUserIscId()+"");
QueryWrapper<BackLog> updateWrapper = Wrappers.query();
updateWrapper.eq("b_id", bl.getBId());
backlogservice.update(bl, updateWrapper);
}
}
//待办处理rid--文档ID、 type--类型(0规划,1可研,2概设)
public void addBackLogbyExpert(String rid,String eid,String type,String state){
String docName="";
String doc="";
if("0".equals(type)){
QueryWrapper<PsrPlan> wrapper = Wrappers.query();
wrapper.eq("id", rid);
PsrPlan p=psrPlanService.getOne(wrapper);
docName=p.getName();
doc="规划审核";
}else if("1".equals(type)){
QueryWrapper<Project> wrapper = Wrappers.query();
wrapper.eq("fsr_id", rid);
Project p=projectService.getOne(wrapper);
docName=p.getPrjName();
doc="可研专家报告";
}else if("2".equals(type)){
QueryWrapper<AdsProject> wrapper = Wrappers.query();
wrapper.eq("ads_id", rid);
AdsProject p=adsProjectService.getOne(wrapper);
docName=p.getAdsName();
doc="概设专家报告";
}
BackLog bl=new BackLog();
bl.setBId(UUID.randomUUID().toString());
bl.setRId(rid);
bl.setResult("0");
bl.setName(doc+"_"+docName);
bl.setType(type);
bl.setStepType(doc);
bl.setSubmitterId(getUserIscId()+"");
bl.setAccepterId(eid);
bl.setSubmitTime(new Date());
bl.setState(state);
backlogservice.save(bl);
}
public HttpServletRequest getRequest() {
return RequestUtils.getRequest();
}
public HttpServletResponse getResponse() {
return RequestUtils.getResponse();
}
}
package org.arch.manage.conterller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import lombok.extern.java.Log;
import org.arch.base.Result;
import org.arch.base.exception.BaseException;
import org.arch.common.modules.sysmange.entity.Org;
import org.arch.manage.service.OrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author audit
* @since 2020-08-21
*/
@RestController
@RequestMapping("/org")
@Api(tags = "组织机构管理")
@Log
public class OrgController extends MenuController.BaseController {
@Autowired
private OrgService orgService;
@GetMapping(value = "/")
@ApiOperation(value = "列表查询接口", notes = "多条件产讯组织结构列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "current", value = "当前页数",required = true, defaultValue = "1", dataType = "int", paramType = "query"),
@ApiImplicitParam(name = "pageSize", value = "页面显示数量", required = true, defaultValue = "10", dataType = "int", paramType = "query"),
@ApiImplicitParam(name = "orgName", value = "组织名称", required = false, dataType = "string", paramType = "query"),
})
public Result<Page<Org>> list(@RequestParam(required = true, defaultValue = "1", name = "current") Integer current,
@RequestParam(required = true, defaultValue = "10", name = "pageSize") Integer pageSize,
Org org) {
if (current == null) {
current = 1;
}
if (pageSize == null) {
pageSize = 10;
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(ObjectUtil.isNotNull(org))queryWrapper.like(StrUtil.isNotBlank(org.getOrgName()), "a.org_name", org.getOrgName());
if(ObjectUtil.isNotNull(org) && ObjectUtil.isNotNull(org.getParentOrgId())){
queryWrapper.and(wrapper -> wrapper.eq("a.parent_org_id", org.getParentOrgId()).or().eq("a.org_id", org.getParentOrgId()));
}
queryWrapper.orderByAsc("a.parent_org_id");
queryWrapper.orderByAsc("a.org_sort");
Page<Org> aPage = orgService.selectForPage(new Page<>(current, pageSize), queryWrapper);
return Result.success(aPage);
}
@GetMapping(value = "/details")
@ApiOperation(value = "获取单条组织详情", notes = "获取单条组织详情")
@ApiImplicitParam(name = "id", value = "组织的主键ID", required = true, dataType = "Long", paramType = "path")
public Result<Org> getById(Long id) {
Org byId = orgService.getById(id);
if(byId != null && byId.getParentOrgId() != null && byId.getParentOrgId() > 0){
Org byId1 = orgService.getById(byId.getParentOrgId());
byId.setParentOrgName(byId1.getOrgName());
}
return Result.success(byId);
}
@PostMapping(value = "/create")
@ApiOperation(value = "保存组织详情", notes = "新增组织详情")
public Result<Object> create(@RequestBody Org params) {
if(ObjectUtil.isNotNull(params.getParentOrgId()) && params.getParentOrgId() != 0){
Org byId = orgService.getById(params.getParentOrgId());
params.setIds(byId.getIds() + byId.getOrgId() + ",");
} else {
params.setParentOrgId(Long.parseLong("0"));
params.setIds("0,");
}
if(ObjectUtil.isNotNull(params.getOrgId()) && params.getOrgId() != 0){
params.setLastUpdateMan(getUserId());
params.setLastUpdateTime(new Date());
orgService.updateById(params);
} else {
params.setOrgId(null);
params.setCreateMan(getUserId());
params.setCreateTime(new Date());
orgService.save(params);
}
return Result.success();
}
@PostMapping(value = "/delete")
@ApiOperation(value = "删除单条组织", notes = "删除单条组织")
@ApiImplicitParam(name = "id", value = "组织的主键ID", required = true, dataType = "Long", paramType = "path")
public Result<Object> delete(@RequestBody String id) throws BaseException {
JSONObject jsonObject = JSONObject.parseObject(id);
id = jsonObject.getString("id");
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_org_id", id);
List<Org> list = orgService.list(queryWrapper);
if(list != null && !list.isEmpty()){
throw new BaseException(201, "删除组织存在下级组织!");
}
orgService.removeById(id);
return Result.success();
}
@PostMapping(value = "/batchDelete")
@ApiOperation(value = "批量删除组织", notes = "批量删除组织")
public Result<Object> batchDelete(@ApiParam(value = "组织ID集合", required = true) @RequestBody List<Long> ids) throws BaseException {
if(ids == null || ids.size() < 1){
throw new BaseException(201, "参数错误");
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.in("parent_org_id", ids);
List<Org> list = orgService.list(queryWrapper);
if(list != null && !list.isEmpty()){
throw new BaseException(201, "删除组织存在下级组织!");
}
orgService.removeByIds(ids);
return Result.success();
}
/*@PostMapping(value = "/update")
@ApiOperation(value = "修改组织信息", notes = "修改组织信息")
public Result<Object> update(@RequestBody Org params) {
orgService.updateById(params);
return Result.success();
}*/
@GetMapping(value = "/tree")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> tree(Long parentOrgId, String orgStatus) {
List<Org> orgs = orgService.tree(parentOrgId, orgStatus);
return Result.success(orgs);
}
@GetMapping(value = "/treeNew")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> treeNew(Long parentOrgId, String deptFlag) {
List<Org> orgs = orgService.treeNew(parentOrgId, deptFlag);
return Result.success(orgs);
}
@GetMapping(value = "/treeNewForDepet")
@ApiOperation(value = "获取组织树形", notes = "获取组织树形")
@ApiImplicitParams({
@ApiImplicitParam(name = "parentOrgId", value = "组织的ID", required = false, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "orgStatus", value = "组织状态:1启用 0禁用", required = false, dataType = "String", paramType = "query")
})
public Result<List<Org>> treeNewForDepet(Long parentOrgId, String deptFlag) {
List<Org> orgs = orgService.treeNewForDepet(parentOrgId, deptFlag);
return Result.success(orgs);
}
@GetMapping(value = "/getSelect")
@ApiOperation(value = "获取组织下拉", notes = "获取组织下拉")
public Result<List<Org>> getSelect() {
List<Org> orgs = orgService.getSelect();
return Result.success(orgs);
}
@GetMapping(value = "/getdeptList")
@ApiOperation(value = "获取本部下的所有部门", notes = "获取本部下的所有部门")
public Result<List<Org>> getdeptList() {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("parent_org_id",51);
List<Org> orgs = orgService.getBaseMapper().selectList(wrapper);
return Result.success(orgs);
}
@GetMapping(value = "/getdepttmentList")
@ApiImplicitParam(name = "id", value = "部门id", required = true, dataType = "Long", paramType = "path")
@ApiOperation(value = "获取本部下部门的处室", notes = "获取本部下部门的处室")
public Result<List<Org>> getdepttmentList(Long id) {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("parent_org_id",id);
List<Org> orgs = orgService.getBaseMapper().selectList(wrapper);
return Result.success(orgs);
}
}
package org.arch.manage.conterller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.*;
import org.arch.base.Result;
import org.arch.base.exception.BDException;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.*;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.manage.service.RoleService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* 角色controller
*/
@RestController
@RequestMapping("/role")
@Api(tags = "角色管理相关接口")
public class RoleController{
@Autowired
private RoleService roleService;
/**
* 根据条件分页查询
* @param user
* @return
*/
@ApiOperation(value = "根据条件分页查询", notes = "根据条件分页查询")
@PostMapping("/page")
public Result<Page<RoleDto>> page(@RequestBody RoleQueryDto roleQueryDto){
IPage<Role> queryPage = new Page<>();
queryPage.setCurrent((roleQueryDto.getCurrPage()==null || roleQueryDto.getCurrPage()<=0)?1:roleQueryDto.getCurrPage());
queryPage.setSize((roleQueryDto.getPageSize()==null || roleQueryDto.getPageSize()<=0)?20:roleQueryDto.getPageSize());
QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
if(StringUtils.isNotBlank(roleQueryDto.getName())){
queryWrapper.like("role_name",roleQueryDto.getName());
}
if(StringUtils.isNotBlank(roleQueryDto.getSelectVal())){
final String selectVal = roleQueryDto.getSelectVal();
queryWrapper.and(qw-> {
QueryWrapper<Role> like = qw.like("role_name", selectVal);
});
}
IPage<Role> iPage = roleService.page(queryPage,queryWrapper);
Page<RoleDto> page = new Page<>();
BeanUtils.copyProperties(iPage,page);
if(iPage.getRecords() != null && iPage.getRecords().size() > 0){
List<RoleDto> roleDtos = new ArrayList<>();
for (Role role : iPage.getRecords()){
RoleDto roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
roleDtos.add(roleDto);
}
page.setRecords(roleDtos);
}
return Result.success(page);
}
/**
* 角色添加
* @param role 角色添加相关
* @return 添加結果
*/
@ApiOperation(value = "添加角色信息", notes = "添加角色信息")
@PostMapping("/add")
public Result create(@RequestBody RoleAddDto roleAdd){
boolean flag = roleService.create(roleAdd);
if(flag){
return Result.success();
}
return Result.error("创建角色失败!");
}
/**
* 用户更新
* @param user
* @return
*/
@ApiOperation(value = "编辑用户信息", notes = "编辑用户信息")
@PostMapping("/update")
public Result update(@RequestBody RoleUpdateDto roleUpdate){
boolean flag = roleService.update(roleUpdate);
if(flag){
return Result.success();
}
return Result.error("修改角色失败!");
}
/**
* 根据id删除角色
* @param id id
* @return 删除结果
*/
@ApiOperation(value = "根据id删除角色", notes = "根据id删除角色")
@GetMapping("/delete")
@ApiImplicitParam(name = "id", value = "角色id", required = true, dataType = "Long", paramType = "path")
public Result delete(Long id){
if(id == null){
return Result.error("角色id不能为空");
}
List<Long> ids = new ArrayList<>();
ids.add(id);
boolean flag = roleService.delete(ids);
if(flag){
return Result.success();
}
return Result.error("删除角色失败!");
}
/**
* 批量删除
* @param ids
* @return
*/
@PostMapping(value = "/batchDelete")
@ApiOperation(value = "批量删除角色", notes = "批量删除角色")
public Result batchDelete(@ApiParam(value = "用户ID集合", required = true) @RequestBody List<Long> ids){
if(ids == null || ids.size() < 1){
throw new BDException("角色id不能为空");
}
boolean flag = roleService.delete(ids);
if(flag){
return Result.success();
}
return Result.error("删除用户失败!");
}
/**
* 获取所有的角色信息
* @return
*/
@GetMapping(value = "/getAll")
@ApiOperation(value = "获取所有角色", notes = "获取所有角色")
public Result<List<RoleSmallDto>> getAll(){
List<Role> roles = roleService.list();
List<RoleSmallDto> roleSmallDtos = new ArrayList<>();
if(roles!= null){
for (Role role : roles){
RoleSmallDto rs = new RoleSmallDto();
BeanUtils.copyProperties(role,rs);
roleSmallDtos.add(rs);
}
}
return Result.success(roleSmallDtos);
}
@GetMapping(value = "/getById")
@ApiOperation(value = "根据id获取角色信息", notes = "根据id获取角色信息")
@ApiImplicitParam(name = "roleId", value = "角色id", required = true, dataType = "Long", paramType = "path")
public Result<RoleDto> getById(Long roleId){
RoleDto roleDto = roleService.getRoleDtoById(roleId);
return Result.success(roleDto);
}
/**
* 启用或者禁用
* @return
*/
@GetMapping(value = "/enableOrUnEnable")
@ApiOperation(value = "启用或者禁用角色", notes = "启用或者禁用角色")
@ApiImplicitParams({
@ApiImplicitParam(name = "roleId", value = "角色id",required = true, dataType = "long", paramType = "path"),
@ApiImplicitParam(name = "enable", value = "禁用或者启用 0:禁用 1:启用", required = true, dataType = "long", paramType = "path"),
})
public Result enableOrUnEnable( Long roleId
,Integer enable){
boolean flag = roleService.enableOrUnEnable(roleId,enable);
if(!flag){
return Result.error();
}
return Result.success();
}
/**
* 用户更新
* @param user
* @return
*/
@ApiOperation(value = "编辑用户信息", notes = "编辑用户信息")
@PostMapping("/updateUserRoles")
public Result updateUserRoles(@RequestBody RoleUpdateDto roleUpdate){
boolean flag = roleService.update(roleUpdate);
if(flag){
return Result.success();
}
return Result.error("修改角色失败!");
}
}
package org.arch.manage.converter;
import org.arch.common.modules.sysmange.dto.MenuDto;
import org.arch.common.modules.sysmange.entity.Menu;
import org.mapstruct.Mapper;
import org.mapstruct.Mappings;
import java.util.List;
@Mapper(componentModel = "spring")
public interface MenuConverter {
@Mappings({})
Menu dto2Menu(MenuDto menuDto);
@Mappings({})
MenuDto men2Dto(Menu menuDto);
List<MenuDto> men2Dto_list(List<Menu> menuDto);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.AdsProject;
import java.util.List;
/**
* <p>
* 可行性研究报告 Mapper 接口
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
@Mapper
public interface AdsProjectMapper extends BaseMapper<AdsProject> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.BackLog;
/**
* <p>
* 部门 Mapper 接口
* </p>
*
* @author audit
* @since 2020-11-07
*/
@Mapper
public interface BackLogMapper extends BaseMapper<BackLog> {
@Select("<script>" +
"SELECT a.*, b.name AS submitter, c.name AS accepter " +
"FROM com_backlog a " +
"LEFT JOIN sys_user b ON a.submitter_id = b.`isc_user_id` " +
"LEFT JOIN sys_user c ON a.accepter_id = c.`isc_user_id` " +
"${ew.customSqlSegment}" +
"</script>")
@Override
<E extends IPage<BackLog>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<BackLog> queryWrapper);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.sysmange.entity.Dept;
/**
* <p>
* 部门 Mapper 接口
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Mapper
public interface DeptMapper extends BaseMapper<Dept> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.boot.autoconfigure.batch.BatchProperties;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface JobMapper extends CoreMapper<BatchProperties.Job> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Menu;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface MenuMapper extends CoreMapper<Menu> {
/**
* 根据用户id查询菜单
* @param userId 用户id
* @return 菜单集合
*/
@Select("SELECT * FROM sys_menu m WHERE EXISTS (SELECT 1 FROM sys_roles_menus rm LEFT JOIN sys_users_roles ur ON rm.role_id = ur.role_id WHERE ur.user_id = #{userId} and rm.menu_id = m.id);")
List<Menu> findByUserId(@Param("userId") Long userId);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Org;
/**
* <p>
* Mapper 接口
* </p>
*
* @author audit
* @since 2020-08-21
*/
@Mapper
public interface OrgMapper extends BaseMapper<Org> {
@Select("select a.*, b.name as createManName from sys_org a left join sys_user b on a.create_man = b.id " +
"${ew.customSqlSegment}")
Page<Org> selectForPage(Page<Object> objectPage, @Param(Constants.WRAPPER) QueryWrapper<Org> queryWrapper);
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Project;
import java.util.List;
/**
* <p>
* 可行性研究报告 Mapper 接口
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
@Mapper
public interface ProjectMapper extends BaseMapper<Project> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import java.util.List;
/**
* <p>
* 规划设计研究-规划表 Mapper 接口
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
@Mapper
public interface PsrPlanMapper extends BaseMapper<PsrPlan> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
@Repository
@Mapper
public interface RoleMapper extends CoreMapper<Role> {
/**
* 根据用户ID查询
*
* @param id 用户ID
* @return
*/
@Select("select m.* from sys_role m LEFT JOIN sys_users_roles t on m.id= t.role_id LEFT JOIN sys_user r on r.id = t.user_id where r.id = #{id}")
List<Role> selectListByUserId(@Param("id") Long id);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-16
*/
@Repository
@Mapper
public interface RolesMenusMapper extends CoreMapper<RolesMenus> {
}
package org.arch.manage.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.User;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 系统用户 Mapper 接口
* </p>
*
* @author liulei
* @since 2020-09-02
*/
@Repository
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<UserDto> getUserList(RoleUpdateDto roleUpdate);
@Select("SELECT\n" +
"\tsu.*,s.org_simple_name\n" +
"FROM\n" +
"\tsys_users_roles sur\n" +
"LEFT JOIN sys_role sr ON sr.id = sur.role_id\n" +
"LEFT JOIN sys_user su ON sur.user_id = su.id\n" +
"LEFT JOIN sys_org s on s.org_id = su.org_id\n" +
"WHERE\n" +
"\tsr.role_sign = #{roleSign} and su.id is not null and su.is_delete = '0'")
List<UserDto> getUserList2(RoleUpdateDto roleUpdate);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.mybatis.common.mapper.CoreMapper;
import org.springframework.stereotype.Repository;
/**
* @author hupeng
* @date 2020-05-16
*/
@Repository
@Mapper
public interface UsersRolesMapper extends CoreMapper<UsersRoles> {
/**
* 解绑人员角色菜
* @param id 人员ID
*/
@Delete("delete from sys_users_roles where user_id = #{id}")
void removeRoles(@Param("id") Long id);
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.AdsProject;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
/**
* <p>
* 可行性研究报告 服务类
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
public interface AdsProjectService extends IService<AdsProject> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.BackLog;
/**
* <p>
* 待办 服务类
* </p>
*
* @author audit
* @since 2020-08-27
*/
public interface BackLogService extends IService<BackLog> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Dept;
/**
* <p>
* 部门 服务类
* </p>
*
* @author audit
* @since 2020-08-27
*/
public interface DeptService extends IService<Dept> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Menu;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface MenuService extends IService<Menu> {
/**
* 根据用户id查询菜单
* @param userId 用户id
* @return 菜单
*/
Set<Menu> findByUserId(Long userId);
/**
* 查询所有的权限,返回set集合
* @return
*/
Set<Menu> findAllForSet();
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Org;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author audit
* @since 2020-08-21
*/
public interface OrgService extends IService<Org> {
List<Org> tree(Long parentOrgId, String orgStatus);
List<Org> treeNew(Long parentOrgId, String deptFlag);
List<Org> treeNewForDepet(Long parentOrgId, String deptFlag);
Page<Org> selectForPage(Page<Object> objectPage, QueryWrapper<Org> queryWrapper);
List<Org> getSelect();
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.Project;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* <p>
* 可行性研究报告 服务类
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
public interface ProjectService extends IService<Project> {
}
package org.arch.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* <p>
* 规划设计研究-规划表 服务类
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
public interface PsrPlanService extends IService<PsrPlan> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.dto.RoleAddDto;
import org.arch.common.modules.sysmange.dto.RoleDto;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.mybatis.common.service.BaseService;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface RoleService extends BaseService<Role> {
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<RoleDto> all, HttpServletResponse response) throws IOException;
/**
* 根据角色ID查询
* @param id 角色ID
* @return /
*/
List<RoleSmallDto> findRoleSmallListByUserId(Long id);
/**
* 根据ID查询
* @param id /
* @return /
*/
RoleDto findById(long id);
/**
* 创建
* @param roleAdd 角色添加信息
* @return 是否添加成功
*/
boolean create(RoleAddDto roleAdd);
/**
* 编辑
* @param resources /
*/
boolean update(RoleUpdateDto roleUpdate);
boolean delete(List<Long> ids);
/**
* 根据角色id查询角色角色
* @param id 角色id
* @return 角色信息集合
*/
Set<RoleSmallDto> findRoleSmallSetByUserId(Long id);
/**
* 根据用戶id查询角色信息
* @param id 角色id
* @return 角色简略细腻西
*/
List<Role> findByUserId(Long id);
/**
* 禁用或者启用角色
* @param roleId 角色id
* @param enable 禁用或者启用状态
* @return 是否操作成功
*/
boolean enableOrUnEnable(Long roleId, Integer enable);
/**
* 根据id获取角色信息
* @param roleId 角色id
* @return 角色信息
*/
RoleDto getRoleDtoById(Long roleId);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.mybatis.common.service.BaseService;
import java.util.List;
/**
* @author hupeng
* @date 2020-05-16
*/
public interface RolesMenusService extends BaseService<RolesMenus> {
/**
* 根据角色id获取菜单集合id
* @param roleId 角色id
* @return 菜单集合id
*/
List<Long> queryByRoleId(long roleId);
/**
* 保存角色菜单信息
* @param menuIds 菜单id
* @param roleId 角色id
*/
void save(List<Long> menuIds, Long roleId);
/**
* 修改角色菜单信息
* @param menuIds 菜单集合
* @param roleId 角色id
*/
void update(List<Long> menuIds, Long roleId);
/**
* 根据角色id删除
* @param roleIds 角色id集合
*/
void deleteByRoleId(List<Long> roleIds);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.base.exception.BaseException;
import org.arch.common.modules.sysmange.dto.*;
import org.arch.common.modules.sysmange.entity.User;
import org.arch.mybatis.common.service.BaseService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* @author hupeng
* @date 2020-05-14
*/
public interface UserService extends BaseService<User> {
/**
* 导出数据
* @param all 待导出的数据
* @param response /
* @throws IOException /
*/
void download(List<UserDto> all, HttpServletResponse response) throws IOException;
/**
* 根据用户账户查询
* @param phone 用户手机号
* @return 用户详细
*/
UserDto findByPhone(String phone);
/**
* 根据用户id 查询用户详情
* @param id id
* @return 用户信息
*/
UserDto findById(Long id);
/**
* 新增用户
* @param resources /
* @return /
*/
boolean create(UserAddDto resources);
/**
* 编辑用户
* @param resources /
*/
boolean update(UserUpdateDto user);
/**
* 删除用户
* @param ids
*/
boolean delete(List<Long> ids);
/**
* 用户登录
* @param authUser 登录用户
* @param request
* @return 用户登录信息
*/
UserLoginDto login(AuthUser authUser, HttpServletRequest request) throws BaseException, UnsupportedEncodingException;
/**
* 根据用户信息获取用户Dto
* @param user 用户信息
* @return 用户dto
*/
UserDto getUserDtoByUser(User user);
/**
* 根据手机号查下用户信息
* @param phone 手机号
* @return 用户信息
*/
public User selectByPhone(String phone);
/**
* 根据用户编码查下用户信息
* @param userCode 用户编码
* @return 用户信息
*/
public User selectByUserCode(String userCode);
/**
* 根据isc用户编码查下用户信息
* @param isc_user_id 用户编码
* @return 用户信息
*/
public User selectByIscUserId(String isc_user_id);
/**
* 根据isc用户编码查下用户信息
* @param isc_user_id 用户编码
* @return 用户信息
*/
UserDto getUserIsc(String isc_user_id);
public User selectAllByIscUserId(String isc_user_id);
/*
* 根据角色查询用户集合
* */
List<UserDto> getUserList(RoleUpdateDto roleUpdate);
/*
* 根据角色查询用户集合
* */
List<UserDto> getUserList2(RoleUpdateDto roleUpdate);
List<UserDto> getUserListAll(RoleUpdateDto roleUpdate);
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.manage.service;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.mybatis.common.service.BaseService;
/**
* @author hupeng
* @date 2020-05-16
*/
public interface UsersRolesService extends BaseService<UsersRoles> {
/**
* 编辑用户角色
* @param long id /
*/
boolean removeRoles(Long userId);
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.AdsProject;
import org.arch.manage.mapper.AdsProjectMapper;
import org.arch.manage.service.AdsProjectService;
import org.springframework.stereotype.Service;
/**
* <p>
* 可行性研究报告 服务实现类
* </p>
*
* @author wangchen
* @since 2020-10-29
*/
@Service
public class AdsProjectServiceImpl extends ServiceImpl<AdsProjectMapper, AdsProject> implements AdsProjectService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.BackLog;
import org.arch.manage.mapper.BackLogMapper;
import org.arch.manage.service.BackLogService;
import org.springframework.stereotype.Service;
/**
* <p>
* 部门 服务实现类
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Service
public class BackLogServiceImpl extends ServiceImpl<BackLogMapper, BackLog> implements BackLogService {
@Override
public <E extends IPage<BackLog>> E page(E page, Wrapper<BackLog> queryWrapper) {
return getBaseMapper().selectPage(page, queryWrapper);
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Dept;
import org.arch.manage.mapper.DeptMapper;
import org.arch.manage.service.DeptService;
import org.springframework.stereotype.Service;
/**
* <p>
* 部门 服务实现类
* </p>
*
* @author audit
* @since 2020-08-27
*/
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Menu;
import org.arch.manage.mapper.MenuMapper;
import org.arch.manage.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
@Autowired
private MenuMapper menuMapper;
@Override
public Set<Menu> findByUserId(Long userId) {
if(userId == null){
return null;
}
List<Menu> menus = menuMapper.findByUserId(userId);
if(menus == null || menus.size() == 0){
return null;
}
return menuList2Set(menus);
}
private Set<Menu> menuList2Set(List<Menu> menus) {
Set<Menu> menuSet = new HashSet<>();
for (Menu menu : menus){
menuSet.add(menu);
}
return menuSet;
}
@Override
public Set<Menu> findAllForSet() {
QueryWrapper<Menu> queryWrapper = new QueryWrapper<>();
List<Menu> menus = menuMapper.selectList(queryWrapper);
if(menus == null || menus.size() == 0){
return null;
}
return menuList2Set(menus);
}
}
package org.arch.manage.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.arch.common.modules.sysmange.entity.Org;
import org.arch.manage.mapper.OrgMapper;
import org.arch.manage.service.OrgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author audit
* @since 2020-08-21
*/
@Service
public class OrgServiceImpl extends ServiceImpl<OrgMapper, Org> implements OrgService {
@Autowired
OrgMapper orgMapper;
@Override
public List<Org> tree(Long parentOrgId, String orgStatus) {
List<Org> orgs = null;
Org parent = null;
if(parentOrgId != null && parentOrgId != 0){
parent = orgMapper.selectById(parentOrgId);
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(parentOrgId != null && parentOrgId != 0){
queryWrapper.like("ids", "," + String.valueOf(parentOrgId) + ",");
}
if(StrUtil.isNotBlank(orgStatus)){
queryWrapper.eq("org_status", orgStatus);
}
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
orgs = orgMapper.selectList(queryWrapper);
if(CollectionUtil.isEmpty(orgs)){
orgs = new ArrayList<>();
if(parent != null)orgs.add(parent);
return orgs;
}
if(parent != null)orgs.add(parent);
if (CollectionUtils.isEmpty(orgs) || orgs.size() == 1) {
return orgs;
}
Org org = new Org();
if(parentOrgId != null && parentOrgId != 0 && parent != null){
org.setOrgId(parent.getParentOrgId());
} else {
org.setOrgId(Long.parseLong("0"));
}
org.setChildren(new ArrayList<>());
this.createTreeData(org, orgs);
return org.getChildren();
}
@Override
public List<Org> treeNew(Long parentOrgId, String deptFlag) {
List<Org> orgs = null;
Org parent = null;
if(parentOrgId != null && parentOrgId != 0){
parent = orgMapper.selectById(parentOrgId);
}
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
if(parentOrgId != null && parentOrgId != 0){
queryWrapper.like("ids", "," + String.valueOf(parentOrgId) + ",");
}
if(StrUtil.isNotBlank(deptFlag)){
queryWrapper.eq("dept_flag", deptFlag);
}
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
orgs = orgMapper.selectList(queryWrapper);
if(CollectionUtil.isEmpty(orgs)){
orgs = new ArrayList<>();
if(parent != null)orgs.add(parent);
return orgs;
}
if(parent != null)orgs.add(parent);
if (CollectionUtils.isEmpty(orgs) || orgs.size() == 1) {
return orgs;
}
Org org = new Org();
if(parentOrgId != null && parentOrgId != 0 && parent != null){
org.setOrgId(parent.getParentOrgId());
} else {
// org.setOrgId(Long.parseLong("0"));
org.setOrgId(Long.parseLong("50"));
}
org.setChildren(new ArrayList<>());
this.createTreeData1(org, orgs);
List<Org> children = org.getChildren();
Org org1 = new Org();
for (Org child : children) {
if(Long.valueOf(child.getOrgId()) == 51){
org1.setChildren(child.getChildren());
}else {
org1.getChildren().add(child);
}
}
// return org.getChildren();
return org1.getChildren();
}
@Override
public List<Org> treeNewForDepet(Long parentOrgId, String deptFlag) {
List<Org> orgs = this.treeNew(null, "1");
List<Org> collect = orgs.stream().map(item -> {
Org org = new Org();
org.setOrgId(item.getOrgId());
org.setOrgName(item.getOrgName());
return org;
}).collect(Collectors.toList());
return collect;
}
@Override
public Page<Org> selectForPage(Page<Object> objectPage, QueryWrapper<Org> queryWrapper) {
return orgMapper.selectForPage(objectPage, queryWrapper);
}
@Override
public List<Org> getSelect() {
QueryWrapper<Org> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("org_status", 1);
queryWrapper.orderByAsc("parent_org_id");
queryWrapper.orderByAsc("org_sort");
List<Org> orgs = orgMapper.selectList(queryWrapper);
return orgs;
}
private void createTreeData(Org parent, List<Org> officeList) {
if (officeList == null) return;
Iterator<Org> iterator = officeList.iterator();
while (iterator.hasNext()) {
Org next = iterator.next();
if (next == null) continue;
if (next.getParentOrgId().equals(parent.getOrgId())) {
List<Org> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>();
parent.setChildren(children);
}
children.add(next);
iterator.remove();
this.createTreeData(next, officeList);
iterator = officeList.iterator();
}
}
}
private void createTreeData1(Org parent, List<Org> officeList) {
if (officeList == null) return;
Iterator<Org> iterator = officeList.iterator();
while (iterator.hasNext()) {
Org next = iterator.next();
if (next == null) continue;
if (next.getParentOrgId().equals(parent.getOrgId())) {
List<Org> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>();
parent.setChildren(children);
}
children.add(next);
iterator.remove();
this.createTreeData(next, officeList);
iterator = officeList.iterator();
}
}
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.Project;
import org.arch.manage.mapper.ProjectMapper;
import org.arch.manage.service.ProjectService;
import org.springframework.stereotype.Service;
/**
* <p>
* 可行性研究报告 服务实现类
* </p>
*
* @author zhenxu
* @since 2020-10-29
*/
@Service
public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.arch.common.modules.sysmange.entity.PsrPlan;
import org.arch.manage.mapper.PsrPlanMapper;
import org.arch.manage.service.PsrPlanService;
import org.springframework.stereotype.Service;
/**
* <p>
* 规划设计研究-规划表 服务实现类
* </p>
*
* @author wubaoliang
* @since 2020-10-29
*/
@Service
public class PsrPlanServiceImpl extends ServiceImpl<PsrPlanMapper, PsrPlan> implements PsrPlanService {
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.arch.base.enums.EnableEnum;
import org.arch.base.exception.BDException;
import org.arch.base.utils.StringUtils;
import org.arch.common.modules.sysmange.dto.RoleAddDto;
import org.arch.common.modules.sysmange.dto.RoleDto;
import org.arch.common.modules.sysmange.dto.RoleSmallDto;
import org.arch.common.modules.sysmange.dto.RoleUpdateDto;
import org.arch.common.modules.sysmange.entity.Role;
import org.arch.manage.mapper.RoleMapper;
import org.arch.manage.service.RoleService;
import org.arch.manage.service.RolesMenusService;
import org.arch.manage.util.UserUtil;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, Role> implements RoleService {
@Autowired
private RoleMapper roleMapper;
@Autowired
private RolesMenusService rolesMenusService;
@Autowired
private UserUtil userUtil;
@Override
public void download(List<RoleDto> all, HttpServletResponse response) throws IOException {
}
@Override
public List<RoleSmallDto> findRoleSmallListByUserId(Long id) {
if(id == null){
return null;
}
List<Role> roles = findByUserId(id);
if(roles == null || roles.size() == 0){
return null;
}
List<RoleSmallDto> roleSmallDtoList = new ArrayList<>();
for(Role role : roles){
RoleSmallDto roleSmallDto = new RoleSmallDto();
BeanUtils.copyProperties(role,roleSmallDto);
roleSmallDtoList.add(roleSmallDto);
}
return roleSmallDtoList;
}
@Override
public RoleDto findById(long id) {
Role role = roleMapper.selectById(id);
if(role == null){
return null;
}
RoleDto roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
//查询所有的订单id
List<Long> menuIds = rolesMenusService.queryByRoleId(id);
roleDto.setMenuIds(menuIds);
return roleDto;
}
@Override
public boolean create(RoleAddDto roleAdd) {
//验证角色信息
valid(roleAdd);
//验证角色标识是否唯一
validRoleSign(roleAdd.getRoleSign(),null);
//插入角色信息
Role role = new Role();
BeanUtils.copyProperties(roleAdd,role);
role.setCreateTime(new Date());
role.setUserIdCreate(userUtil.getUserId());
//设置默认的启用状态
if(role.getEnabled() == null){
role.setEnabled(EnableEnum.ENABLE.getCode());
}
save(role);
rolesMenusService.save(roleAdd.getMenuIds(),role.getId());
return true;
}
@Override
public boolean update(RoleUpdateDto roleUpdate) {
if(roleUpdate.getId() == null){
throw new BDException("角色id不能为空!");
}
//验证角色信息
valid(roleUpdate);
//验证角色标识是否唯一
validRoleSign(roleUpdate.getRoleSign(),roleUpdate.getId());
//插入角色信息
Role role = new Role();
BeanUtils.copyProperties(roleUpdate,role);
role.setUpdateTime(new Date());
role.setUserIdUpdate(userUtil.getUserId());
roleMapper.updateById(role);
rolesMenusService.update(roleUpdate.getMenuIds(),roleUpdate.getId());
return true;
}
@Override
public boolean delete(List<Long> ids) {
if(ids == null || ids.size() == 0){
throw new BDException("角色id不能为空!");
}
if(ids.size() == 1){
roleMapper.deleteById(ids.get(0));
}else{
roleMapper.deleteBatchIds(ids);
}
rolesMenusService.deleteByRoleId(ids);
return true;
}
@Override
public Set<RoleSmallDto> findRoleSmallSetByUserId(Long id) {
if(id == null){
return null;
}
List<Role> roles = findByUserId(id);
if(roles == null || roles.size() == 0){
return null;
}
Set<RoleSmallDto> roleSmallDtoSet = new HashSet<>();
for(Role role : roles){
RoleSmallDto roleSmallDto = new RoleSmallDto();
BeanUtils.copyProperties(role,roleSmallDto);
roleSmallDtoSet.add(roleSmallDto);
}
return roleSmallDtoSet;
}
@Override
public List<Role> findByUserId(Long id) {
return roleMapper.selectListByUserId(id);
}
@Override
public boolean enableOrUnEnable(Long roleId, Integer enable) {
if(roleId == null){
throw new BDException("角色id不能为空!");
}
if(enable == null){
throw new BDException("禁用或者启用状态不能为空!");
}
if(enable != 0 && enable != 1){
throw new BDException("禁用或者启用状态错误!");
}
Role role = new Role();
role.setId(roleId);
role.setEnabled(enable);
return roleMapper.updateById(role) > 0;
}
@Override
public RoleDto getRoleDtoById(Long roleId) {
RoleDto roleDto = null;
//获取角色信息
Role role = roleMapper.selectById(roleId);
if(role == null){
return null;
}
roleDto = new RoleDto();
BeanUtils.copyProperties(role,roleDto);
//获取菜单id集合
List<Long> menuIds = rolesMenusService.queryByRoleId(roleId);
roleDto.setMenuIds(menuIds);
return roleDto;
}
/**
* 验证角色信息
* @param role 角色信息
*/
private void valid(RoleAddDto role){
if(role == null){
throw new BDException("角色信息不能为空!");
}
if(StringUtils.isBlank(role.getRoleName())){
throw new BDException("角色名称不能为空!");
}
}
/**
* 验证角色标识是否唯一
* @param roleSign 角色标识
* @param 是否唯一
*/
private void validRoleSign(String roleSign, Long roleId) {
QueryWrapper<Role> queryWrapper = new QueryWrapper();
queryWrapper.eq("role_sign",roleSign);
if(roleId != null){
queryWrapper.ne("id",roleId);
}
if(roleMapper.selectCount(queryWrapper) > 0){
throw new BDException("角色标识已经存在!");
}
}
}
package org.arch.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.arch.base.exception.BDException;
import org.arch.common.modules.sysmange.entity.RolesMenus;
import org.arch.manage.mapper.RolesMenusMapper;
import org.arch.manage.service.RolesMenusService;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class RolesMenusServiceImpl extends BaseServiceImpl<RolesMenusMapper, RolesMenus> implements RolesMenusService {
@Autowired
private RolesMenusMapper rolesMenusMapper;
@Override
public List<Long> queryByRoleId(long roleId) {
QueryWrapper<RolesMenus> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("role_id",roleId);
List<RolesMenus> rolesMenusList = this.list(queryWrapper);
if(rolesMenusList == null || rolesMenusList.size() == 0){
return null;
}
List<Long> ids = new ArrayList<>();
for (RolesMenus rolesMenus : rolesMenusList){
ids.add(rolesMenus.getMenuId());
}
return ids;
}
@Override
public void save(List<Long> menuIds, Long roleId) {
if(roleId == null){
throw new BDException("角色id不能为空!");
}
if(menuIds != null && menuIds.size() >0){
List<RolesMenus> rolesMenusList = new ArrayList<>();
for (Long menuId : menuIds){
RolesMenus rolesMenus = new RolesMenus();
rolesMenus.setRoleId(roleId);
rolesMenus.setMenuId(menuId);
rolesMenusList.add(rolesMenus);
}
saveBatch(rolesMenusList);
}
}
@Override
public void update(List<Long> menuIds, Long roleId) {
List<Long> oldMenuId = queryByRoleId(roleId);
//找出需要新增的菜单
addRoleMenu(menuIds,oldMenuId,roleId);
deleteRoleMenu(menuIds,oldMenuId,roleId);
}
@Override
public void deleteByRoleId(List<Long> roleIds) {
if(roleIds == null || roleIds.size() == 0){
return;
}
UpdateWrapper<RolesMenus> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("role_id",roleIds);
rolesMenusMapper.delete(updateWrapper);
}
private void deleteRoleMenu(List<Long> menuIds, List<Long> oldMenuId, Long roleId) {
if(oldMenuId == null || oldMenuId.size() == 0){
return;
}
//全部删除
if(menuIds == null || menuIds.size() == 0){
delete(menuIds,roleId);
return;
}
List<Long> deleteMenuId = new ArrayList<>();
for (Long menuId : oldMenuId){
if(menuIds.contains(menuId)){
continue;
}
deleteMenuId.add(menuId);
}
delete(deleteMenuId,roleId);
}
/**
* 根据角色id和菜单id删除
* @param menuIds 菜单id集合
* @param roleId 角色id
*/
private void delete(List<Long> menuIds, Long roleId) {
if(menuIds == null || menuIds.size() == 0 || roleId == null){
return;
}
UpdateWrapper<RolesMenus> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("role_id",roleId);
updateWrapper.in("menu_id",menuIds);
rolesMenusMapper.delete(updateWrapper);
}
/**
* 对比原来的菜单id和现在的菜单id,将不存在的新增
* @param menuIds 现在的菜单id
* @param oldMenuId 原来的菜单id
* @param roleId 角色id
*/
private void addRoleMenu(List<Long> menuIds, List<Long> oldMenuId, Long roleId) {
if(menuIds == null || menuIds.size() == 0){
return;
}
if(oldMenuId == null){
save(menuIds,roleId);
return;
}
List<Long> addMenuId = new ArrayList<>();
for (Long menuId : menuIds){
if(oldMenuId.contains(menuId)){
continue;
}
addMenuId.add(menuId);
}
save(addMenuId,roleId);
}
}
package org.arch.manage.service.impl;
import org.arch.common.modules.sysmange.vo.UsersRoles;
import org.arch.manage.mapper.UsersRolesMapper;
import org.arch.manage.service.UsersRolesService;
import org.arch.mybatis.common.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 用户角色
*/
@Service
public class UsersRolesServiceImpl extends BaseServiceImpl<UsersRolesMapper, UsersRoles> implements UsersRolesService {
@Autowired
UsersRolesMapper usersRolesMapper;
@Override
public boolean removeRoles(Long id) {
// TODO Auto-generated method stub
usersRolesMapper.removeRoles(id);
return true;
}
}
package org.arch.manage.util;
import org.apache.shiro.SecurityUtils;
import org.arch.base.utils.Constant;
import org.arch.base.utils.JwtUtil;
import org.arch.common.modules.sysmange.dto.UserDto;
import org.arch.common.modules.sysmange.entity.User;
import org.arch.common.redis.RedisService;
import org.arch.manage.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
/**
* 获取当前登录用户工具类
*
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:45
*/
@Component
public class UserUtil {
@Autowired
private UserService userService;
/* @Value("${isc.start}")
private Boolean isc_start;*/
@Autowired
private RedisService redisService;
/**
* 获取当前登录用户
* 包括用户的菜单、角色、组织机构、部门
*
* @param
* @return com.wang.model.UserDto
* @throws Exception
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public UserDto getUserDto() {
User user = getUser();
UserDto userDto = null;
if (!redisService.exists(Constant.USER_ACCOUNT + user.getId())) {
userDto = userService.getUserDtoByUser(user);
redisService.set(Constant.USER_ACCOUNT + user.getId(), userDto, Long.valueOf(Constant.EXRP_HOUR));
} else {
userDto = (UserDto) redisService.getObject(Constant.USER_ACCOUNT + user.getId());
}
return userDto;
}
/**
* 获取用户信息
* @return 用户信息
*/
// public User getUser() {
// String token = SecurityUtils.getSubject().getPrincipal().toString();
// // 解密获得Account
// String account = JwtUtil.getClaim(token, Constant.ACCOUNT);
// User user = userService.selectByUserCode(account);
// // 用户是否存在
// if (user == null) {
// throw new RuntimeException("该帐号不存在(The account does not exist.)");
// }
// return user;
// }
/**
* 获取ISC用户信息
*
* @return 用户信息
* @throws Exception
*/
public User getUser() {
//使用isc获取信息
/* if (isc_start) {
IscSSOUserBean userbean = null;
String IscUserId = null;
User user = null;
String token = RequestHolderUtil.getRequest().getHeader("Authorization");
user = userService.selectByIscUserId(token);
// 用户是否存在
if (user == null) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
return user;
} else {
//使用shiro解密认证
Object principal = SecurityUtils.getSubject().getPrincipal();
if (ObjectUtils.isEmpty(principal)) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
// 解密获得Account
String account = JwtUtil.getClaim(principal.toString(), Constant.ACCOUNT);
User user = userService.selectByUserCode(account);
// 用户是否存在
if (user == null) {
throw new RuntimeException("该帐号不存在(The account does not exist.)");
}
return user;
}*/
return null;
}
/**
* 获取当前登录用户Id
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public Long getUserId() {
//return getUser().getId();
return 1L;
//return 1L;
}
/**
* 获取当前登录用户Token
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public String getToken() {
return SecurityUtils.getSubject().getPrincipal().toString();
}
/**
* 获取当前登录用户Account
*
* @param
* @return com.wang.model.UserDto
* @author wliduo[i@dolyw.com]
* @date 2019/3/15 11:48
*/
public String getAccount() {
String token = SecurityUtils.getSubject().getPrincipal().toString();
// 解密获得Account
return JwtUtil.getClaim(token, Constant.ACCOUNT);
}
}
server:
port: 17008
nacos:
server-addr: 192.168.0.200:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:arch}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-filters.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
- data-id: common-mybatis.${nacos.file-extension}
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: dev
server:
port: 17007
nacos:
server-addr: localhost:8848
username: nacos
password: nacos
namespace: ${NAMESPACE:public}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
ip: localhost
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
server:
port: 17007
nacos:
server-addr: 192.168.0.120:18848
username: nacos
password: nacos
namespace: ${NAMESPACE:sit}
file-extension: yaml
spring:
cloud:
nacos:
config:
group: DEFAULT_GROUP
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
# 公共配置
shared-configs:
- data-id: common-storage.${nacos.file-extension}
refresh: true
- data-id: common-config.${nacos.file-extension}
refresh: true
- data-id: common-log.${nacos.file-extension}
refresh: true
- data-id: common-datasource.${nacos.file-extension}
refresh: true
- data-id: common-mybatis.${nacos.file-extension}
refresh: true
- data-id: common-isc.${nacos.file-extension}
refresh: true
- data-id: common-redis.${nacos.file-extension}
refresh: true
discovery:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.password}
namespace: ${nacos.namespace}
config:
activate:
on-profile: sit
spring:
application:
name: arch-manage
main:
# 解决升级 Spring Boot 2.6后,因循环引用导致启动时报错是否允许循环引用
allow-circular-references: true
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
profiles:
active: dev
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 -->
<property name="LOG_HOME" value="./logs"/>
<property name="LOG_NAME" value="arch-overall"/>
<!--从配置中心加载数据-->
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<springProperty scope="context" name="logstashDestination" source="logstash.destination"/>
<!--<property name="COLOR_PATTERN" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta( %replace(%caller{1}){'\t|Caller.{1}0|\r\n', ''})- %gray(%msg%xEx%n)" />-->
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件INFO -->
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件ERROR -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_HOME}/${LOG_NAME}_error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/${LOG_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--nacos 心跳 INFO 屏蔽-->
<logger name="com.alibaba.nacos" level="OFF">
<appender-ref ref="ERROR_FILE"/>
</logger>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="com.xxl.job.core" level="DEBUG"/>
<logger name="org.apache.http.impl.conn" level="INFO"/>
<logger name="springfox.documentation" level="INFO" />
<logger name="org.springframework" level="INFO" />
<logger name="com.baomidou.mybatisplus" level="INFO" />
<!-- 本地环境 -->
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!-- 其它环境 -->
<springProfile name="dev,test,stage,prod,sit,uat,default">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.arch.manage.mapper.UserMapper">
<select id="getUserList3" resultType="org.arch.common.modules.sysmange.dto.UserDto">
SELECT DISTINCT
( sur.user_id ) AS xx,
su.*,
s.org_simple_name ,a.role_name
FROM
sys_users_roles sur
LEFT JOIN sys_user su ON sur.user_id = su.id
LEFT JOIN sys_org s ON s.org_id = su.org_id
LEFT JOIN (SELECT u.user_id, GROUP_CONCAT( r.role_name ) role_name FROM sys_users_roles u LEFT JOIN sys_role r on u.role_id = r.id where u.role_id IN
<foreach item="item" index="index" collection="roleList" open="(" separator="," close=")">
#{item}
</foreach>
GROUP BY user_id)a on a.user_id = sur.user_id
WHERE
( sur.role_id IN
<foreach item="item" index="index" collection="roleList" open="(" separator="," close=")">
#{item}
</foreach>
AND su.id IS NOT NULL AND is_delete = '0' )
</select>
<select id="getUserList" resultType="org.arch.common.modules.sysmange.dto.UserDto">
SELECT
su.*,
s.org_simple_name
FROM
sys_users_roles sur
left join sys_role sr on sr.id = sur.role_id
LEFT JOIN sys_user su ON sur.user_id = su.id
LEFT JOIN sys_org s ON s.org_id = su.org_id
WHERE
su.id IS NOT NULL
AND su.is_delete = '0'
<if test="id != null and id != ''">
and sur.role_id = #{id}
</if>
<if test="roleSign != null and roleSign != ''">
and sr.role_sign = #{roleSign}
</if>
<if test="orgNum != null and orgNum != ''">
and su.org_num like CONCAT('%',#{orgNum},'%')
</if>
</select>
</mapper>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!