# ApiFormatMd
**Repository Path**: lurenpeng/ApiFormatMd
## Basic Information
- **Project Name**: ApiFormatMd
- **Description**: java接口转换为MarkDown接口文档
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-11
- **Last Updated**: 2022-09-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ApiFormatMd 轻量级Java接口文档生成工具
## 特点
- 完全基于本地代码执行 Java代码无需引用额外依赖
- 生成MarkDown格式文档 可使用ShowDoc生成在线文档
## 配置项
### main.py
- 作者 author = '江火似流萤' (对应Md文档作者信息)
- 载入类根目录 root_path = r"/Users/xxx" (指定Java项目根目录,程序以此为起点遍历Java文件)
- 生成md文件目录 write_path = r"/Users/xxx/Desktop" (Md文档写入路径)
### param.txt
- 参数 param.txt (Controller层接口信息 具体参考文件内容)
## 依赖
- python3
## 如何使用
### 方式一生成文件到本地
1. 本地安装python3环境
2. clone本项目到本地
3. 修改main.py 'author' 'root_path' 'write_path'配置(首次使用配置)
4. API信息写入 param.txt 文件
5. 执行 ```python3 main.py``` 终端输出 'success' 则执行成功
---
### 方式二生成文档到showDoc
1. 基于方式一的配置 执行 ```python3 request_show_doc.py```
2. 打开 https://www.showdoc.com.cn/2040347871634336/ 查看文档
3. 如果报错```ModuleNotFoundError: No module named 'requests'``` 需要导入request包执行 ```pip3 install requests```
---
## 例子
### java接口
查看代码
```java
@RequestMapping(value = "/v1/test/{userId}", method = RequestMethod.POST)
public JsonResult>> test(
@PathVariable(value = "userId") int userId,
@RequestParam(value = "roleCode", required = true) String roleCode,
@RequestBody QuoteStrategyRule quoteStrategyRule) {
return new JsonResult<>();
}
```
##### QuoteStrategyRule(参数)
```java
package com.peng.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("quote_strategy_rule")
public class QuoteStrategyRule implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 所属策略ID
*/
private Long quoteStrategyId;
/**
* 所属渠道ID
*/
private Long resellerChannelId;
/**
* 所属分类 1 生活服务;2 酒店业务;3 飞机票价
*/
private Byte quoteStrategyCategory;
/**
* 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID
*/
private Byte type;
/**
* 类型为1是【分类名称】; 类型为2是【分类名称>大类名称】;
* 类型为3是【分类名称>大类名称>子类名称】;
* 类型为4是【分类名称>商品id】;类型为5是【分类名称>商品id>规格id】;
* 类型为6是【分类名称>商品id>规格id>开始时间~结束时间】
*/
private String name;
/**
* 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID
*/
private Long refId;
/**
* 生效时间,类型为6时有值否则为null,格式yyyy-MM-dd HH:mm:ss
*/
private Date startDate;
/**
* 失效时间,类型为6时有值否则为nu,格式yyyy-MM-dd HH:mm:ss
*/
private Date endDate;
/**
* 加价类型 1百分比 2固定金额
*/
private Byte priceType;
/**
* 加价百分比,当加价类型为1时,该字段有值
*/
private Integer rate;
/**
* 加价金额,当加价类型为2时,该字段有值
*/
private Integer amount;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 操作人
*/
private String operator;
}
```
##### InvoiceVO(返回主体)
```java
@Data
public class InvoiceVO extends Invoice {
//发票编号-子
private Long invoiceNo;
//发票标题-子
private String invoiceTitle;
/**
* 发票类型-子
*/
private InvoiceEnum invoiceEnum;
//扩展信息
private ExtendSub extendSub;
@Data
public static class Extend {
//标题-父
private String title;
//内容-父
private String content;
}
@Data
public static class ExtendSub extends Extend {
//spu集合-子
private List spuList;
//spu信息-子
private Spu spu;
/**
* spu Map-子
*/
private Map spuMap;
//渠道枚举
private SpecialChannelEnum specialChannelEnum;
}
}
```
##### Invoice (InvoiceVO父类)
```java
package com.peng.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
@JsonInclude(value = JsonInclude.Include.NON_NULL)//为NULL的字段不返回为(JSON)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("trade_invoice")
public class Invoice implements Serializable {
@TableId(value = "invoice_id", type = IdType.AUTO)
private Long invoiceId;
/**
* 发票抬头类型 1:个人 2:单位
*/
private Byte invoiceTitleType;
/**
* 发票类型 1:国内纸质发票 2:国内电子发票 3:国际电子发票
*/
private Byte invoiceType;
/**
* 个人名称
*/
private String name;
/**
* 单位名称
*/
private String companyName;
/**
* 发票状态 1:处理中 2:已开发票
*/
private Byte status;
/**
* 纳税人识别号
*/
private String taxRegisterNumber;
/**
* 发票编号
*/
private String invoiceCode;
/**
* 发票金额
*/
private Long invoiceAmount;
/**
* 单位注册地址
*/
private String registerAddress;
/**
* 单位注册电话
*/
private String registerPhone;
/**
* 开户银行
*/
private String bankName;
/**
* 银行卡号
*/
private String bankNo;
/**
* 收件人姓名
*/
private String contactName;
/**
* 收件人手机号
*/
private String contactPhone;
/**
* 收件人地址
*/
private String contactAddress;
/**
* 收件人邮箱
*/
private String contactEmail;
/**
* 快递单号
*/
private String expressNo;
/**
* 快递公司
*/
private String expressName;
/**
* 发票电子文件地址
*/
private String fileUrl;
/**
* 发票电子文件地址
*/
private String filePath;
/**
* 实际供应商id
*/
private Integer supplierId;
/**
* ownerId
*/
private Integer ownerId;
/**
* userId
*/
private Integer userId;
/**
* 备注
*/
private String remark;
/**
* 删除标识
*/
private Boolean yn;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建人
*/
private String createPin;
/**
* 更新人
*/
private String updatePin;
}
```
##### Spu(InvoiceVO.ExtendSub 依赖)
```java
@Data
public class Spu implements Serializable {
private static final long serialVersionUID = 128833531741299945L;
/**
* 主键ID
*/
private long id;
/**
* 商品类别
*/
private byte productType;
/**
* 商品子类别
*/
private int productSubType;
/**
* spu中文名称
*/
private String nameCn;
/**
* spu英文名称
*/
private String nameEn;
/**
* poiId,按照poi_id顺序逗号分隔,eg:1,3,12
*/
private String poiIds;
/****** 业务字段 ********/
/**
* 多语言处理后显示的name,v1.5.1新增
*/
private String name;
/**
* 创建人
*/
private String createPin;
/**
* 更新人
*/
private String updatePin;
//key集合
private List keyList;
}
```
##### Key (Spu,Key 依赖)
```java
@Data
public class Key implements Serializable {
private static final long serialVersionUID = 7585869752216827433L;
private Integer pageSize;
/**
* 要素类别
*/
private byte type;
/**
* 要素名称
*/
private String name;
/****** 业务字段 *******/
/**
* 要素名称多语言map
* Map
*/
private Map names;
private List keyList;
}
```
### 生成内容
查看内容
## 接口说明
|名称|描述|
|:--:|:--:|
|功能|**找不到名字了用这个吧**|
|负责人|**江火似流萤**|
## HTTP请求地址
- 地址: `http://domain//v1/test/{userId}`
### 请求方式
- POST
## 参数说明
### 请求参数说明
|参数名|类型|必填|示例|说明|
| :----: | :----: | :----: | :----: | :----: |
|roleCode|String|-|-|-|
|quoteStrategyRule|[QuoteStrategyRule](#QuoteStrategyRule)|-|-|-|
|userId|int|-|-|-|
### 返回参数说明
|参数名|类型|示例|说明|
| :----: | :----: | :----: | :----: |
|code|String|"0"|状态码(非0为异常情况)|
|message |String|请求成功|信息描述|
|data|[JsonResult](#JsonResult)>>|-|- |
### 补充实体说明
QuoteStrategyRule
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|id|Long|-|-|-|
|quoteStrategyId|Long|-|-| 所属策略ID|
|resellerChannelId|Long|-|-| 所属渠道ID|
|quoteStrategyCategory|Byte|-|-| 所属分类 1 生活服务;2 酒店业务;3 飞机票价|
|type|Byte|-|-| 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID|
|name|String|-|-| 类型为1是【分类名称】; 类型为2是【分类名称>大类名称】;, 类型为3是【分类名称>大类名称>子类名称】;, 类型为4是【分类名称>商品id】;类型为5是【分类名称>商品id>规格id】;, 类型为6是【分类名称>商品id>规格id>开始时间~结束时间】|
|refId|Long|-|-| 引用ID,类型为1是0; 类型为2是大类枚举值; 类型为3是子类枚举值;类型为4商品ID;类型为5是规格ID;类型为6是规格ID|
|startDate|Date|-|-| 生效时间,类型为6时有值否则为null,格式yyyy-MM-dd HH:mm:ss|
|endDate|Date|-|-| 失效时间,类型为6时有值否则为nu,格式yyyy-MM-dd HH:mm:ss|
|priceType|Byte|-|-| 加价类型 1百分比 2固定金额|
|rate|Integer|-|-| 加价百分比,当加价类型为1时,该字段有值|
|amount|Integer|-|-| 加价金额,当加价类型为2时,该字段有值|
|createTime|Date|-|-| 创建时间|
|updateTime|Date|-|-| 更新时间|
|operator|String|-|-| 操作人|
---
InvoiceVO
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|invoiceId|Long|-|-|-|
|invoiceTitleType|Byte|-|-| 发票抬头类型 1:个人 2:单位|
|invoiceType|Byte|-|-| 发票类型 1:国内纸质发票 2:国内电子发票 3:国际电子发票|
|name|String|-|-| 个人名称|
|companyName|String|-|-| 单位名称|
|status|Byte|-|-| 发票状态 1:处理中 2:已开发票|
|taxRegisterNumber|String|-|-| 纳税人识别号|
|invoiceCode|String|-|-| 发票编号|
|invoiceAmount|Long|-|-| 发票金额|
|registerAddress|String|-|-| 单位注册地址|
|registerPhone|String|-|-| 单位注册电话|
|bankName|String|-|-| 开户银行|
|bankNo|String|-|-| 银行卡号|
|contactName|String|-|-| 收件人姓名|
|contactPhone|String|-|-| 收件人手机号|
|contactAddress|String|-|-| 收件人地址|
|contactEmail|String|-|-| 收件人邮箱|
|expressNo|String|-|-| 快递单号|
|expressName|String|-|-| 快递公司|
|fileUrl|String|-|-| 发票电子文件地址|
|filePath|String|-|-| 发票电子文件地址|
|supplierId|Integer|-|-| 实际供应商id|
|ownerId|Integer|-|-| ownerId|
|userId|Integer|-|-| userId|
|remark|String|-|-| 备注|
|yn|Boolean|-|-| 删除标识|
|createTime|Date|-|-| 创建时间|
|updateTime|Date|-|-| 更新时间|
|createPin|String|-|-| 创建人|
|updatePin|String|-|-| 更新人|
|invoiceNo|Long|-|-|发票编号-子|
|invoiceTitle|String|-|-|发票标题-子|
|invoiceEnum|[InvoiceEnum](#InvoiceEnum)|-|-| 发票类型-子|
|extendSub|[ExtendSub](#ExtendSub)|-|-|扩展信息|
---
JsonResult
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|code|Integer|-|-| code 为"0"则无异常|
|msg|String|-|-| msg|
|data|T|-|-| data 返回体对象|
---
Extend
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|title|String|-|-|标题-父|
|content|String|-|-|内容-父|
---
InvoiceEnum
```java
enum InvoiceEnum {
PERSON(1, "抬头为个人"),
COMPANY(2, "抬头为单位"),
BEING(1, "发票状态处理中"),
COMPLETE(2, "发票状态已完成"),
PAPER(1, "纸质发票"),
ELECTRONIC(2, "电子发票");
```
ExtendSub
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|title|String|-|-|标题-父|
|content|String|-|-|内容-父|
|spuList|List<[Spu](#Spu)>|-|-|spu集合-子|
|spu|[Spu](#Spu)|-|-|spu信息-子|
|spuMap|Map|-|-| spu Map-子|
|specialChannelEnum|[SpecialChannelEnum](#SpecialChannelEnum)|-|-|渠道枚举|
---
Spu
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|id|long|-|-| 主键ID|
|productType|byte|-|-| 商品类别|
|productSubType|int|-|-| 商品子类别|
|nameCn|String|-|-| spu中文名称|
|nameEn|String|-|-| spu英文名称|
|poiIds|String|-|-| poiId,按照poi_id顺序逗号分隔,eg:1,3,12|
|name|String|-|-| 业务字段 , 多语言处理后显示的name,v1.5.1新增|
|createPin|String|-|-| 创建人|
|updatePin|String|-|-| 更新人|
|keyList|List<[Key](#Key)>|-|-|key集合|
---
SpecialChannelEnum
```java
enum SpecialChannelEnum implements CommonEnum{
DEFAULT("DEFAULT", "默认渠道"),
SASS("SASS", "SASS平台"),
UNKNOWN("UNKNOWN", "UNKNOWN"),
;
```
Key
|字段|类型|必填|说明|备注|
| :----: | :----: | :----: | :----: | :----: |
|pageSize|Integer|-|-|-|
|type|byte|-|-| 要素类别|
|name|String|-|-| 要素名称|
|names|Map|-|-| 业务字段 , 要素名称多语言map, Map|
|keyList|List<[Key](#Key)>|-|-|-|
---