kgdxpr 2 years ago
commit aec268e953

@ -14,10 +14,6 @@ import com.dsideal.FengHuang.Util.CommonUtil;
import com.dsideal.FengHuang.Util.ExcelCommonUtil;
import com.dsideal.FengHuang.Util.FileUtil;
import com.dsideal.FengHuang.Interceptor.*;
import com.dsideal.FengHuang.Swagger.annotation.ActionApi;
import com.dsideal.FengHuang.Swagger.annotation.Api;
import com.dsideal.FengHuang.Swagger.annotation.Param;
import com.dsideal.FengHuang.Swagger.annotation.Params;
import net.sf.json.JSONArray;
import org.apache.commons.lang.StringUtils;
@ -25,7 +21,6 @@ import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
@Api(remark = "基础信息管理", sort = 1)
public class BaseController extends Controller {
//实例化model
BaseModel model = new BaseModel();
@ -34,7 +29,6 @@ public class BaseController extends Controller {
*
* 2018-12-22
*/
@ActionApi(remark = "获取当前登录人员的cookie信息", summary = "获取当前登录人员的cookie信息", httpMethod = "get", sort = 1)
@Before({GET.class})
public void getCurrentPersonInfo() {
Map map = new HashMap<>();
@ -50,7 +44,6 @@ public class BaseController extends Controller {
*
* :2018-11-22
*/
@ActionApi(remark = "获取整个单位类型与职务+分管信息树数据", summary = "获取整个单位类型与职务+分管信息树数据", httpMethod = "get", sort = 2)
@Before({GET.class})
@IsSysAdminInterface({"1"})
public void getOrgTypePrincipalshipTree() {
@ -83,10 +76,6 @@ public class BaseController extends Controller {
@Before({GET.class})
@IsNumericInterface({"id"})
@IsSysAdminInterface({"1"})
@ActionApi(remark = "获取单位类型与职务+分管信息树数据指定结点的信息", summary = "获取单位类型与职务+分管信息树数据指定结点的信息", httpMethod = "get", sort = 3)
@Params({
@Param(name = "id", remark = "结点id", required = true),
})
public void getOrgTypePrincipalshipById(String id) {
List<Record> dt = model.getOrgTypePrincipalshipById(id);
renderJson(CommonUtil.renderJsonForLayUI(dt, dt.size()));
@ -96,14 +85,6 @@ public class BaseController extends Controller {
*
* 2018-11-22
*/
@ActionApi(remark = "获取单位类型与职务+分管信息树数据指定结点下一级的数据ById",
summary = "获取单位类型与职务+分管信息树数据指定结点下一级的数据ById",
httpMethod = "get",
sort = 3)
@Params({
@Param(name = "type_id", remark = "类型id", required = true),
@Param(name = "parent_id", remark = "父结点id", required = true),
})
@Before({GET.class})
@IsNumericInterface({"parent_id", "type_id"})
@IsSysAdminInterface({"1", "2", "3", "4"})
@ -117,13 +98,6 @@ public class BaseController extends Controller {
*
* 2018-11-22
*/
@ActionApi(remark = "获取单位类型与职务+分管信息树数据指定结点下一级的数据ByCode",
summary = "获取单位类型与职务+分管信息树数据指定结点下一级的数据ByCode",
httpMethod = "get",
sort = 5)
@Params({
@Param(name = "parent_code", remark = "父结点code", required = true),
})
@Before({GET.class})
@IsNumericInterface({"parent_code"})
@IsSysAdminInterface({"1"})
@ -136,14 +110,6 @@ public class BaseController extends Controller {
*
* 2018-11-26
*/
@ActionApi(remark = "添加一个OrgTypePrincipalship节点", summary = "添加一个OrgTypePrincipalship节点", sort = 6)
@Params({
@Param(name = "name", remark = "名称", required = true),
@Param(name = "parent_id", remark = "父结点id", required = true),
@Param(name = "sort_id", remark = "排序号", required = true, dataType = "int"),
@Param(name = "is_school", remark = "是不是中小学", required = true, dataType = "int"),
@Param(name = "code", remark = "代码", required = true),
})
@Before({POST.class})
@EmptyInterface({"code", "name"})
@IsNumericInterface({"parent_id", "sort_id"})
@ -185,10 +151,6 @@ public class BaseController extends Controller {
@Before({POST.class})
@IsNumericInterface({"id"})
@IsSysAdminInterface({"1"})
@ActionApi(remark = "删除一个OrgTypePrincipalship节点", summary = "删除一个OrgTypePrincipalship节点", sort = 8)
@Params({
@Param(name = "id", remark = "结点id", required = true),
})
public void delOrgTypePrincipalshipById(String id) {
if (id.equals("1")) {
renderJson(CommonUtil.returnMessageJson(false, "删除失败,您不能删除根节点!"));
@ -210,16 +172,6 @@ public class BaseController extends Controller {
*
* 2018-11-26
*/
@ActionApi(remark = "修改一个OrgTypePrincipalship节点", summary = "修改一个OrgTypePrincipalship节点", sort = 3)
@Params({
@Param(name = "id", remark = "结点id", required = true),
@Param(name = "b_use", remark = "是否可用", required = true, dataType = "int"),
@Param(name = "name", remark = "结点名称", required = true),
@Param(name = "parent_id", remark = "父结点id", required = true),
@Param(name = "sort_id", remark = "排序号", required = true),
@Param(name = "code", remark = "代码", required = true),
@Param(name = "is_school", remark = "是不是学校", required = true, dataType = "int"),
})
@Before({POST.class})
@EmptyInterface({"code", "name"})
@IsNumericInterface({"id", "parent_id", "sort_id", "b_use"})
@ -261,13 +213,6 @@ public class BaseController extends Controller {
*
* 2018-12-13
*/
@ActionApi(remark = "传入一个单位ID返回它的职务与分管工作树",
summary = "传入一个单位ID返回它的职务与分管工作树",
httpMethod = "get",
sort = 9)
@Params({
@Param(name = "bureau_id", remark = "单位id", required = true),
})
@Before({GET.class})
@EmptyInterface({"bureau_id"})
@IsGuidInterface({"bureau_id"})
@ -281,10 +226,6 @@ public class BaseController extends Controller {
*
* 2018-12-14
*/
@ActionApi(remark = "输出打印职务与分管工作的数据方便第三方系统接入时提供填写EXCEL示例",
summary = "输出打印职务与分管工作的数据方便第三方系统接入时提供填写EXCEL示例",
httpMethod = "get",
sort = 3)
@Before(GET.class)
public void getPrincipalshipThirdParty() {
Page<?> dt = model.getPrincipalshipThirdParty(1, 10000);
@ -295,10 +236,6 @@ public class BaseController extends Controller {
*
* 2018-12-14
*/
@ActionApi(remark = "输出打印职务与分管工作的数据",
summary = "方便第三方系统接入时提供填写EXCEL示例(打印EXCEL)",
httpMethod = "get",
sort = 11)
@Before(GET.class)
public void getPrincipalshipThirdPartyForExcel() {
//模板文件

@ -5,10 +5,6 @@ import cn.hutool.captcha.LineCaptcha;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.FengHuang.Interceptor.*;
import com.dsideal.FengHuang.LoginPerson.Model.LoginPersonModel;
import com.dsideal.FengHuang.Swagger.annotation.ActionApi;
import com.dsideal.FengHuang.Swagger.annotation.Api;
import com.dsideal.FengHuang.Swagger.annotation.Param;
import com.dsideal.FengHuang.Swagger.annotation.Params;
import com.dsideal.FengHuang.Base.Model.BaseModel;
import com.dsideal.FengHuang.Util.*;
import com.jfinal.aop.Before;
@ -18,7 +14,6 @@ import com.jfinal.ext.interceptor.POST;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.redis.Redis;
@ -33,17 +28,10 @@ import java.util.Map;
import java.util.UUID;
@SuppressWarnings("unchecked")
@Api(tag = "登录模块", remark = "登录模块", sort = 1)
public class LoginPersonController extends Controller {
//实例化model
LoginPersonModel model = new LoginPersonModel();
@ActionApi(remark = "验证登录", summary = "验证登录", sort = 1)
@Params({
@Param(name = "username", remark = "用户名", required = true),
@Param(name = "password", remark = "密码", required = true),
@Param(name = "captcha", remark = "验证码", required = true)
})
@Before({POST.class})
public void doLogin(String username, String password, String captcha) {
JSONObject resultJson = new JSONObject();
@ -222,11 +210,6 @@ public class LoginPersonController extends Controller {
@IsLoginInterface({})
@EmptyInterface({"old_pwd", "new_pwd"})
@LengthInterface({"new_pwd,7,18", "old_pwd,7,18"})
@ActionApi(remark = "修改密码", summary = "修改密码", sort = 2)
@Params({
@Param(name = "old_pwd", remark = "原密码"),
@Param(name = "new_pwd", remark = "新密码"),
})
public void changePwd(String old_pwd, String new_pwd) {
String person_id = getCookie("person_id");
//客户端ip_address

@ -14,7 +14,6 @@ import com.dsideal.FengHuang.Menu.Controller.MenuController;
import com.dsideal.FengHuang.Organization.Controller.OrganizationController;
import com.dsideal.FengHuang.Student.Controller.StudentController;
import com.dsideal.FengHuang.StudentYd.Controller.StudentYdController;
import com.dsideal.FengHuang.Swagger.controller.SwaggerController;
import com.dsideal.FengHuang.Teacher.Controller.TeacherController;
import com.dsideal.FengHuang.TeacherYd.Controller.TeacherYdController;
import com.dsideal.FengHuang.Util.FileUtil;
@ -85,9 +84,6 @@ public class Start extends JFinalConfig {
me.add("/menu", MenuController.class);
//杨浦学校
me.add("/yp", YpController.class);
// 配置Swagger UI访问路由
// http://127.0.0.1:9000/FengHuang/swagger/index
me.add("/swagger", SwaggerController.class, "swagger");
}
@Override

@ -1,54 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* ControllerActionAPI
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionApi {
/**
* Action(JFinalActionController)
*/
String tag() default "";
/**
*
*/
String remark() default "";
/**
* (postgetpostheadputdelete)
*/
String httpMethod() default "post";
/**
* ControllerActionAPI
*/
int sort() default 0;
/**
* Action访(JFinalAction)
*/
String url() default "";
/**
* API MIME(application/json,application/jsonapplication/xml)
*/
String consumes() default "application/json";
/**
* Action
*/
String summary() default "";
/**
*
*/
Class<?> response() default Void.class;
}

@ -1,38 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.*;
/**
* ControllerAPI
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Api {
/**
*
*/
int sort() default 0;
/**
* (Controlleraction)
*/
String tag() default "";
/**
*
*/
String remark() default "";
/*********** 分隔符:以下两项用于externalDocs信息 *********/
/**
* externalDocs
*/
String outerUrl() default "";
/**
* externalDocs
*/
String outerRemark() default "了解更多";
}

@ -1,18 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* APIexternalDocs
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface External {
String url() default "";
String remark() default "";
}

@ -1,29 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Item {
/**
* ()
*/
String key() default "";
/**
* key
*/
String value() default "";
/**
* (swagger)
*/
String remark() default "";
}

@ -1,74 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.dsideal.FengHuang.Swagger.enums.InType;
/**
* ActionAPI()
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Param {
/**
*
*/
String name();
/**
*
*/
String remark() default "";
/**
* (string)
* integer(32)long(64)floatdoublestringbyte(base64)<br>
* binary()booleandate(full-date)dateTime(date-time)password
*/
String dataType() default "string";
/**
*
*/
String defaultValue() default "";
/**
* ()
*/
boolean required() default false;
/**
*
*/
String format() default "";
/**
* (query,InType.HEADERInType.BODYInType.QUERYInType.FORM_DATA,InType.FORM_DATA)
*/
InType in() default InType.QUERY;
/**
* (http,httphttpswswss)
*/
String schema() default "http";
/**
*
*/
String maximum() default "";
/**
*
*/
String minimum() default "";
/**
* multi
*/
String collectionFormat() default "";
}

@ -1,15 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* ActionAPI
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Params {
Param[] value();
}

@ -1,32 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.*;
/**
* ActionAPI
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Responses {
/**
*
*/
String key() default "";
/**
*
*/
String remark() default "";
/**
*
*/
String schemaType() default "";
/**
*
*/
Item[] schemaItems() default @Item();
}

@ -1,22 +0,0 @@
package com.dsideal.FengHuang.Swagger.annotation;
import java.lang.annotation.*;
/**
* API
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SecurityApi {
/**
*
*/
String key() default "";
/**
* ()
*/
String value() default "";
}

@ -1,163 +0,0 @@
package com.dsideal.FengHuang.Swagger.config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.jfinal.kit.Kv;
import com.dsideal.FengHuang.Swagger.enums.InType;
/**
* Swagger UI
*
*/
public class SwaggerConfig {
// 全局参数(如:token)
private final static List<Kv> globalParamList = new ArrayList<>();
private final static Kv apiInfo = initApiInfo();
private final static List<Kv> securityDefinition = new ArrayList<>();
private final static Set<String> scheme = new LinkedHashSet<>(Arrays.asList("http", "https"));
private final static Kv definition = Kv.create();
private final static Kv externalDocs = Kv.by("description", "了解更多信息").set("url", "https://swagger.io/");
/**
* (:token)
* @param name
* @param remark
* @param dataType
* @param defaultValue
* @param required
* @param format
* @param in
*/
public static void addGlobalParam(String name, String remark, String dataType, String defaultValue, boolean required, String format, InType in) {
Kv kv = Kv.by("name", name).set("description", remark)
.set("type", dataType)
.set("default", defaultValue)
.set("required", required)
.set("format", format);
if (in == null) {
kv.set("in", InType.QUERY.getValue());
} else {
for (InType item : InType.values()) {
if (item == in) {
kv.set("in", item.getValue());
break;
}
}
}
globalParamList.add(kv);
}
/**
* API
* @param remark API
* @param version
* @param title
* @param termsOfService
* @param contact ({"email" : "apiteam@Swagger.io"})
* @param license ({"name" : "Apache 2.0", "url" : "http://www.apache.org/licenses/LICENSE-2.0.html"})
*/
public static void setApiInfo(String remark, String version, String title, String termsOfService, Map<String, String> contact, Map<String, String> license) {
apiInfo.set("description", remark).set("version", version).set("title", title).set("termsOfService", termsOfService);
if (contact != null) {
apiInfo.set("contact", contact);
}
if (license != null) {
apiInfo.set("license", license);
}
}
/**
*
* @param schemes (httphttpswswss)
*/
public static void setSchemes(String... schemes) {
List<String> list = Arrays.asList("http", "https", "ws", "wss");
if (scheme != null && schemes.length > 0) {
boolean isClear = false;
for (String item : schemes) {
if (list.contains(item)) {
if (!isClear) {
scheme.clear();
isClear = true;
}
scheme.add(item);
}
}
}
}
/**
*
* @param definitionKey (KEY)
* @param definitionInfo (swagger ui)
*/
public static void addDefinition(String definitionKey, Map<String, Object> definitionInfo) {
definition.set("definitionKey", definitionInfo);
}
/**
*
* @param text
* @param url
*/
public static void setExternalDocs(String text, String url) {
externalDocs.set("description", (text == null || "".equals(text.trim())) ? "了解更多信息" : text)
.set("url", url);
}
/**
*
*/
public static List<Kv> getGlobalParamList() {
return globalParamList;
}
/**
* API
*/
public static Kv getApiInfo() {
return apiInfo;
}
/**
*
*/
public static List<Kv> getSecurityDefinition() {
return securityDefinition;
}
/**
*
*/
public static Set<String> getScheme() {
return scheme;
}
/**
*
*/
public static Kv getDefinition() {
return definition;
}
/**
*
*/
public static Kv getExternalDocs() {
return externalDocs;
}
/**
*
*/
private static Kv initApiInfo() {
return Kv.by("description", "挂图作战API文档")
.set("version", "1.0.0")
.set("title", "挂图作战API文档")
.set("termsOfService", "http://swagger.io/terms/")
.set("contact", Kv.by("email", "10402852@qq.com"))
.set("license", Kv.by("name", "Apache 2.0")
.set("url", "http://www.apache.org/licenses/LICENSE-2.0.html"));
}
}

@ -1,251 +0,0 @@
package com.dsideal.FengHuang.Swagger.controller;
import com.dsideal.FengHuang.Swagger.annotation.Api;
import com.dsideal.FengHuang.Swagger.annotation.Item;
import com.dsideal.FengHuang.Swagger.annotation.ActionApi;
import com.dsideal.FengHuang.Swagger.annotation.Param;
import com.dsideal.FengHuang.Swagger.annotation.Params;
import com.dsideal.FengHuang.Swagger.annotation.Responses;
import com.dsideal.FengHuang.Swagger.annotation.SecurityApi;
import com.dsideal.FengHuang.Swagger.config.SwaggerConfig;
import com.dsideal.FengHuang.Swagger.enums.InType;
import com.jfinal.core.Action;
import com.jfinal.core.Controller;
import com.jfinal.core.JFinal;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Okv;
import java.lang.reflect.Method;
import java.util.*;
import static java.util.Comparator.*;
/**
* Swagger UI Controller
*/
public class SwaggerController extends Controller {
// 请求方法
private static final String HTTP_METHOD = "get,post,head,put,delete";
/**
* api
*/
//@IsLoginInterface({})
public void index() {
String theme = getPara(0);
if (theme == null) {
theme = "layui";
} else {
theme = theme.trim();
}
switch (theme) {
case "default":
render("_default/index.html");
break;
default:
render("layui/index.html");
break;
}
}
/**
* api
*/
public void api() {
// 所有接口类tag描述信息
List<Kv> tags = new ArrayList<>();
// 所有接口路径
Map<String, Map<String, Kv>> paths = new LinkedHashMap<>();
// 扫描所有API类Action注解
Map<Class<? extends Controller>, List<Action>> classMap = scanAllApiAction();
classMap.keySet().forEach(clazz -> {
List<Action> actions = classMap.get(clazz);
actions.forEach(action -> {
Method method = action.getMethod();
ActionApi ApiAction = method.getAnnotation(ActionApi.class);
String httpMethod = ApiAction.httpMethod();
if (httpMethod == null || "".equals(httpMethod.trim())) {
// 请求方法HEAD请求页面的首部、GET查看, POST创建, PUT更新, DELETE删除
httpMethod = HTTP_METHOD;
}
Map<String, Kv> methodApiMap = new HashMap<>();
String[] httpMethods = httpMethod.split(",");// 支持多个请求方法
for (String methodItem : httpMethods) {
methodItem = methodItem.trim().toLowerCase();
if (!Arrays.asList(HTTP_METHOD.split(",")).contains(methodItem)) {
continue;
}
// 获取参数注解信息
List<Param> params = new ArrayList<>();
if (method.isAnnotationPresent(Params.class)) {
params.addAll(Arrays.asList(method.getAnnotation(Params.class).value()));
}
if (method.isAnnotationPresent(Param.class)) {
// Java8新特性支持多注解
Param[] paramArray = method.getAnnotationsByType(Param.class);
params.addAll(Arrays.asList(paramArray));
}
// 构建参数列表(包含全局参数)
List<Kv> paramList = new ArrayList<>(SwaggerConfig.getGlobalParamList());
params.forEach(i -> {
// 注意swaggerUI 使用Java的关键字default作为默认值,此处将defaultValue转换为default
Kv kv = Kv.by("name", i.name()).set("description", i.remark()).set("required", i.required())
.set("type", i.dataType()).set("format", i.format()).set("default", i.defaultValue());
if ("file".equals(i.dataType())) {
kv.set("in", InType.FORM_DATA.getValue());
} else {
kv.set("in", i.in().getValue());
}
kv.set("schema", i.schema());//
kv.set("items", "");//{type:"string",enum:["a","b","c"],default:""}
kv.set("collectionFormat", i.collectionFormat());
paramList.add(kv);
});
// 每个action注解信息
Kv actionKv = Kv.by("parameters", paramList)
.set("operationId", method.getName())
.set("tags", toSet(notBlank(ApiAction.tag()) ? ApiAction.tag() : actions.get(0).getActionKey()))
.set("description", ApiAction.remark())
.set("summary", ApiAction.summary())
.set("consumes", toSet("application/json" + "," + ApiAction.consumes()))
.set("produces", toSet(ApiAction.consumes() + "," + "application/json"));
// response
Kv responseKv = Kv.by("200", Kv.by("description", "Success"))
.set("400", Kv.by("description", "Invalid ID supplied"))
.set("403", Kv.by("description", "Forbiden"))
.set("404", Kv.by("description", "Not found"))
.set("405", Kv.by("description", "Validation exception"))
.set("500", Kv.by("description", "Interneral error"));
if (method.isAnnotationPresent(Responses.class)) {
Responses response = method.getAnnotation(Responses.class);
responseKv.set(response.key(), Kv.by("description", response.remark()));
Kv itemKv = Kv.create();
for (Item i : response.schemaItems()) {
itemKv.set(i.key(), i.value());
}
responseKv.set("schema", Kv.by("type", response.schemaType()).set("items", itemKv));
actionKv.set("responses", responseKv);
}
// security
if (method.isAnnotationPresent(SecurityApi.class)) {
// Java8新特性支持多注解
SecurityApi[] securityApis = method.getAnnotationsByType(SecurityApi.class);
List<Kv> securitys = new ArrayList<>();
for (SecurityApi item : securityApis) {
Kv security = Kv.by(item.key(), toSet(item.value()));
securitys.add(security);
}
actionKv.set("security", securitys);
}
methodApiMap.put(methodItem, actionKv);
}
paths.put(notBlank(ApiAction.url()) ? ApiAction.url() : action.getActionKey(), methodApiMap);
});
Api api = clazz.getAnnotation(Api.class);
Kv tag = Kv.by("name", actions.get(0).getActionKey()).set("description", api.remark() + " (" + clazz.getSimpleName() + ")");
//Kv tag = Kv.by("name", api.remark()).set("description", api.remark() + " (" + clazz.getSimpleName() + ")");
if (notBlank(api.outerUrl()) || notBlank(api.outerRemark())) {
tag.set("externalDocs", Kv.by("description", api.outerRemark()).set("url", api.outerUrl()));
}
tags.add(tag);
});
// 获取host
String host = getRequest().getServerName();
if (this.getRequest().getServerPort() != 80) {
host += ":" + getRequest().getServerPort();
}
Okv allApi = Okv.by("Swagger", "2.0")
.set("info", SwaggerConfig.getApiInfo())
.set("host", host)
.set("basePath", "")
.set("tags", tags)
.set("schemes", SwaggerConfig.getScheme())// 传输协议SchemeHTTP、HTTPS
.set("paths", paths)
.set("securityDefinitions", SwaggerConfig.getSecurityDefinition())
.set("definitions", SwaggerConfig.getDefinition())
.set("externalDocs", SwaggerConfig.getExternalDocs());
renderJson(allApi);
}
/**
* APIAction
*
* @return
*/
private static Map<Class<? extends Controller>, List<Action>> scanAllApiAction() {
Map<Class<? extends Controller>, List<Action>> apiMap = new HashMap<>();
// 获取遍历所有action
JFinal.me().getAllActionKeys().forEach(actionKey -> {
Action action = JFinal.me().getAction(actionKey, new String[1]);
Class<? extends Controller> controller = action.getControllerClass();
if (apiMap.containsKey(controller)) {
if (action.getMethod().isAnnotationPresent(ActionApi.class)) {
List<Action> actions = apiMap.get(controller);
if (!actions.contains(action)) {
actions.add(action);
apiMap.put(controller, actions);
}
}
} else {
if (controller.isAnnotationPresent(Api.class)) {
if (action.getMethod().isAnnotationPresent(ActionApi.class)) {
List<Action> actions = new ArrayList<>();
actions.add(action);
apiMap.put(controller, actions);
}
}
}
});
List<Class<? extends Controller>> list = new ArrayList<>(apiMap.keySet());
list.sort(comparingInt((Class<? extends Controller> clazz) -> clazz.getAnnotation(Api.class).sort()));
Map<Class<? extends Controller>, List<Action>> result = new LinkedHashMap<>();
for (Class<? extends Controller> i : list) {
List<Action> actions = apiMap.get(i);
actions.sort(comparingInt((Action action) -> action.getMethod().getAnnotation(ActionApi.class).sort()));
result.put(i, actions);
}
return result;
}
/**
* set
*
* @param value
* @return
*/
private static Set<String> toSet(String value) {
Set<String> result = new LinkedHashSet<>();
if (value != null) {
String[] values = value.split(",");
for (String item : values) {
if (notBlank(item)) {
result.add(item.trim());
}
}
}
return result;
}
/**
*
*
* @param value
* @return
*/
private static boolean notBlank(String value) {
return value != null && !"".equals(value.trim());
}
}

@ -1,42 +0,0 @@
package com.dsideal.FengHuang.Swagger.enums;
/**
*
*/
public enum InType {
/**
*
*/
HEADER("header"),
/**
* body
*/
BODY("body"),
/**
*
*/
QUERY("query"),
/**
*
*/
FORM_DATA("formData");
private String code;
InType(String code){
this.code = code;
}
public String getValue() {
return code;
}
public InType getName(String code) {
for (InType item : InType.values()) {
if (item.code == code) {
return item;
}
}
return null;
}
}

@ -0,0 +1,56 @@
package com.dsideal.FengHuang.Util;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Base64Util {
public static String imageToBase64(BufferedImage bufferedImage) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
try {
ImageIO.write(bufferedImage, "jpg", baos);//写入流中
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = baos.toByteArray();//转换成字节
BASE64Encoder encoder = new BASE64Encoder();
String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
return "data:image/jpg;base64," + png_base64;
}
/**
* FileBASE64
*
* @param file
* @return
*/
public static String fileToBase64(File file) {
return "data:image/png;base64," + Base64.encodeBase64String(fileToByte(file));
}
/**
* Filebyte[]
*
* @param file
* @return
*/
private static byte[] fileToByte(File file) {
byte[] fileBytes = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
fileBytes = new byte[(int) file.length()];
fis.read(fileBytes);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
return fileBytes;
}
}

@ -1,30 +1,36 @@
package com.dsideal.FengHuang.Yp.Controller;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.FengHuang.ExcelImportTemplate.StudentImportExcelUtil;
import com.dsideal.FengHuang.Interceptor.*;
import com.dsideal.FengHuang.LoginPerson.Model.LoginPersonModel;
import com.dsideal.FengHuang.Swagger.annotation.ActionApi;
import com.dsideal.FengHuang.Swagger.annotation.Api;
import com.dsideal.FengHuang.Util.CommonUtil;
import com.dsideal.FengHuang.Util.ExcelExportUtil;
import com.dsideal.FengHuang.Util.FileUtil;
import com.dsideal.FengHuang.Util.IpUtil;
import com.dsideal.FengHuang.Util.*;
import com.dsideal.FengHuang.Yp.Model.YpModel;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
import com.jfinal.ext.interceptor.GET;
import com.jfinal.ext.interceptor.POST;
import com.jfinal.kit.Kv;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.upload.UploadFile;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@Api(remark = "杨浦学校幼儿园招生管理", sort = 3)
public class YpController extends Controller {
YpModel model = new YpModel();
@ -197,4 +203,41 @@ public class YpController extends Controller {
String filename = "招生.xls";
renderFile(new File(excelFile), filename);
}
/**
*
*/
@Before({POST.class})
public void uploadPic() {
UploadFile picFile = getFile();//得到 文件对象
String fileName = picFile.getFileName();
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).trim();
if (!suffix.equals("jpg")) {
renderJson(CommonUtil.returnMessageJson(false, "上传文件类型错误系统只允许上传jpg格式"));
return;
}
String sfzh = get("sfzh");
if (StrKit.isBlank(sfzh)) {
Kv kv = Kv.by("success", false);
kv.set("message", "没有传入sfzh数据");
renderJson(kv);
return;
}
//判断目录是不是存在
File file = new File(PathKit.getWebRootPath() + "/upload");
if (!file.exists()) {
file.mkdirs();// 创建文件夹
}
String finalPic = PathKit.getWebRootPath() + "/upload/" + sfzh + ".jpg";
picFile.getFile().renameTo(new File(finalPic));
//输出base64编码的jpg文件
String base64 = Base64Util.fileToBase64(new File(finalPic));
Kv kv = Kv.by("success", true);
kv.set("message", "上传成功!");
kv.set("base64", base64);
renderJson(kv);
//path : /FengHuang/upload/sfzh+".jpg"
}
}
Loading…
Cancel
Save