# analyze
**Repository Path**: tght1211/analyze
## Basic Information
- **Project Name**: analyze
- **Description**: codeMap:
----| 方法分析+SQL库表和表机构差异对比,输出markdown文档
----| java依赖注入关系图显示 https://gitee.com/tght1211/CodeMap
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-02-01
- **Last Updated**: 2025-03-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AnalyzeCode
## 1、功能介绍
### 1.1、迭代开发自动项目归档
> 在开发中会有多个迭代,每个迭代开发完成之后,需要将代码进行归档,方便项目发布和以后查看。
> 归档的代码一般需要包含以下信息:
①api (发布到maven仓库)
②service (可执行程序)
③web (可执行程序)
> 背景:然而每次归档总是繁琐的,而且随着开发节奏的加快,改动范围过多,涉及的项目过多,每次归档都需要花费大量的时间。而且,开发完成后,还需要手动将代码归档,部分重复内容重复便携,繁琐。
现在可以定义每个迭代就用一个分支,每次迭代完成之后,输入分支,启动自动归档,复制/粘贴即可完成,结束手动归档时代!!!
> 原理:基于本地.git仓库实现
### 1.2、数据库结构差异进行对比并自动归档
> 在开发中,经常需要对比两个环境的数据库结构,比如:分销环境和行业环境。也可以采用navicat对比,但是这个工具支持输出文档,更方便宣导传播
### 1.3、分析java代码生成代码地图
> 开发中...
## 2、项目结构
└─src
└─main
└─java
└─com
└─source
├─auto (根据分支对项目改动进行自动迭代归档)⭐新功能 2025/01/17
├─code (初版java代码分析dev...中)
├─codemap (重构版java代码分析dev...中)
├─sql (数据库表机构sql差异对比并且自动生成markdown文档)
└─test (测试各种功能区域)
## 3、功能详细说明
### 3.1、数据库结构差异进行对比并自动归档
#### 3.1、前期准备
> 导出需要对比的俩个环境的同一个库的sql文件,记住俩个sql文件的地址,后面需要用到
>
> 比如:分销环境的hive库,导出成 md_hive.sql 文件
>
> 行业环境的hive库,导出成 hy_hive.sql 文件
#### 3.2、启动程序
com.source
.sql
SQLComparator类启动即可
#### 3.3、输入程序需要的信息
> 根据程序提示一步步输入信息
>
> 下面是举例:每次输入完回车即可,如果输入异常,请重新启动程序
1.请输入需要对比的数据库名字:
hive
2.请输分销环境 hive 库的sql文件地址(全路径比如:D:\data\javaLearn\hive_test_hy.sql)
D:\data\javaLearn\analyze\src\main\java\com\source\sql\static\hive_test_md.sql
3.请输行业环境 hive 库的sql文件地址(全路径比如:D:\data\javaLearn\hive_test_hy.sql)
D:\data\javaLearn\analyze\src\main\java\com\source\sql\static\hive_test_hy.sql
4.请输入markdown文件生成的地址(全路径比如:D:\data\javaLearn)
D:\data\javaLearn\analyze\src\main\java\com\source\sql\static
#### 3.4、生成的文件效果如下
sql分销和行业差异信息-hive库
> 数据对比如下
>
> 一:分销相对行业的差异(重视)
>
> 二:行业相对分销的差异(结合业务要求判定重要程度)
| 序号 | 子模块编号 | 来源表(分销魔蓝) | 目标表(行业) | 同步逻辑 | 备注 |
|----|-------|-----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----|
| 1 | 002 | hive_a | hive_a | 表结构相同,数据库直接迁移 | |
| 2 | 002 | hive_b | hive_b | 表结构相同,数据库直接迁移 | |
| 3 | 002 | hive_c | hive_c | 表结构相同,数据库直接迁移 | |
| 4 | 002 | qrtz_a | 行业中无此表 | 表缺失 | |
| 5 | 002 | hm_c | 行业中无此表 | 表缺失 | |
| 6 | 002 | hive_p | hive_p | 一、分销相对行业的差异(重视){
};
二、行业相对分销的差异(结合业务要求判定重要程度){
分销中无该字段 ma_status tinyint(4);
} | |
| 7 | 002 | hive_me | hive_me | 一、分销相对行业的差异(重视){
字段类型差异 show_url 行业:varchar(256),分销:varchar(100);
字段类型差异 verify_url 行业:varchar(256),分销:varchar(100);
字段类型差异 me_name 行业:varchar(128),分销:varchar(64);
};
二、行业相对分销的差异(结合业务要求判定重要程度){
} | |
### 3.2、分析java代码生成代码地图(dev...)
#### 3.1、缺陷描述
##### 2024/02/03
- [ ] 无法解析内部类
- [ ] 无法判断子方法是否属于当前项目的
- [ ] A类的MethodA调用了a接口的method-a方法,但是method-a关联不到对应的实现类的具体方法
- [ ] 无法处理枚举类型的java文件
- [ ] 无法处理链式调用的方法
- [ ] 需要设置方法关注级别
- [ ] 自身项目的方法关注级别高,调用第三方jar的方法中,get/set低,jdk自带低
- [ ] 灵活的方法关注级别调整
- [ ] 当前项目的所有类信息记录,全局map
- [ ] 类相关,修饰符,类名,全类名
- [ ] 成员变量
- [ ] 接口实现
- [ ] 集成
- [ ] 方法
- [x] 当前项目的所有方法信息记录,全局map
- [ ] 方法重载,类名#方法名(入参类型 var1,入参类型 var2)
#### 3.2、主要流程设计
##### 1、读取指定文件夹下的所有.java文件
##### 2、循环解析每个.java文件
##### 3、读取每个java文件中的所有方法,目前只设定一个java文件一个类
##### 4、每个方法的所有信息记录
```json
{
"methodAbsName": "",
//方法的唯一名称
"methodAllName": "",
//类路径#方法名
"simpleName": "",
//简单名称
"childMethodAllNames": [
//子方法的类#子方法名称
{
"methodAbsName": "",
//方法的唯一名称 带入参类型
"methodAllName": "",
//类路径#方法名
"simpleName": "",
//简单名称
"classAllName": "",
//类全名
"ownership": ""
//归属类别 self、jdk、other
}
],
"classAllName": "",
//类全名
"interfaceAllNames": [
//接口全名
""
],
"superClassAllName": "",
//父类全名
"override": false,
//是否是重写方法
"topClassType": "",
//顶级类型 class、interface、enum
"ownership": ""
//归属类别 self、jdk、other
}
```
##### 5、优先把所有当前项目的方法都载入内存
##### 6、再遍历所有方法的内部,进行被调用方法的补充
- [x] 项目自身方法载入
- [ ] 其他项目的方法载入
- [ ] JDK原生方法载入,涉及到源码读取
##### 7、导出json文件,交给python解析
##### 8、python解析关系图,前端展示方法引用关系