diff --git a/src/main/java/com/dsideal/FengHuang/Base/Controller/BaseController.java b/src/main/java/com/dsideal/FengHuang/Base/Controller/BaseController.java index 34ce373..26dfaba 100644 --- a/src/main/java/com/dsideal/FengHuang/Base/Controller/BaseController.java +++ b/src/main/java/com/dsideal/FengHuang/Base/Controller/BaseController.java @@ -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 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() { //模板文件 diff --git a/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java b/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java index a317e63..04853c9 100644 --- a/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java +++ b/src/main/java/com/dsideal/FengHuang/LoginPerson/Controller/LoginPersonController.java @@ -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 diff --git a/src/main/java/com/dsideal/FengHuang/Start.java b/src/main/java/com/dsideal/FengHuang/Start.java index 86e40bc..5b03b00 100644 --- a/src/main/java/com/dsideal/FengHuang/Start.java +++ b/src/main/java/com/dsideal/FengHuang/Start.java @@ -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 diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/ActionApi.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/ActionApi.java deleted file mode 100644 index 7fa656c..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/ActionApi.java +++ /dev/null @@ -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; - -/** - * Controller类下Action的API注解 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface ActionApi { - - /** - * Action接口标签,用于归属分类(非必需,默认通过遍历JFinal所有Action自动设置,多个标签以英文半角逗号隔开,只有一个标签时,与Controller类的标签一致) - */ - String tag() default ""; - - /** - * 说明 - */ - String remark() default ""; - - /** - * 请求方法(默认为post,多个请求方式以英文半角逗号隔开,可选值:get、post、head、put、delete) - */ - String httpMethod() default "post"; - - /** - * 用于同一Controller类下的Action接口API排序 - */ - int sort() default 0; - - /** - * Action访问地址(不用指定,通过遍历JFinal所有Action自动设置) - */ - String url() default ""; - - /** - * API 请求MIME类型(默认为application/json,可选值application/json、application/xml) - */ - String consumes() default "application/json"; - - /** - * Action操作的一个简短的总结 - */ - String summary() default ""; - - /** - * 暂未支持 - */ - Class response() default Void.class; -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Api.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Api.java deleted file mode 100644 index 3a7e181..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Api.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.dsideal.FengHuang.Swagger.annotation; - -import java.lang.annotation.*; - -/** - * Controller类API注解 - */ -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Inherited -public @interface Api { - - /** - * 用于接口类排序 - */ - int sort() default 0; - - /** - * 接口标签,用于归属分类(多个标签以英文半角逗号隔开,只有一个标签时,Controller类下的action标签与该标签相同) - */ - String tag() default ""; - - /** - * 说明 - */ - String remark() default ""; - - /*********** 分隔符:以下两项用于externalDocs信息 *********/ - /** - * externalDocs的链接地址 - */ - String outerUrl() default ""; - - /** - * externalDocs的链接名称说明 - */ - String outerRemark() default "了解更多"; -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/External.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/External.java deleted file mode 100644 index 09e2888..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/External.java +++ /dev/null @@ -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; - -/** - * API注解externalDocs属性 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface External { - - String url() default ""; - - String remark() default ""; -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Item.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Item.java deleted file mode 100644 index 11ad58c..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Item.java +++ /dev/null @@ -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 ""; -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Param.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Param.java deleted file mode 100644 index 02d5b44..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Param.java +++ /dev/null @@ -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; - -/** - * Action参数API注解(参数顺序由参数先后顺序决定) - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface Param { - - /** - * 参数名称 - */ - String name(); - - /** - * 参数说明 - */ - String remark() default ""; - - /** - * 参数值类型(默认为string) - * 可选值:integer(签署了32位)、long(签署了64位)、float、double、string、byte(base64编码的字符)、
- * binary(任何的八位字节序列)、boolean、date(所定义的full-date)、dateTime(所定义的date-time)、password - */ - String dataType() default "string"; - - /** - * 默认值 - */ - String defaultValue() default ""; - - /** - * 是否必填(默认非必填) - */ - boolean required() default false; - - /** - * 参数格式 - */ - String format() default ""; - - /** - * 请求参数传输类型(默认为query,可选值InType.HEADER、InType.BODY、InType.QUERY、InType.FORM_DATA,当有文件上传时,文件发送类型为InType.FORM_DATA) - */ - InType in() default InType.QUERY; - - /** - * 传输协议的操作(默认值为http,可选值:http、https、ws、wss) - */ - String schema() default "http"; - - /** - * 最大值 - */ - String maximum() default ""; - - /** - * 最小值 - */ - String minimum() default ""; - - /** - * 暂不支持,例如:multi - */ - String collectionFormat() default ""; - -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Params.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Params.java deleted file mode 100644 index 9b91a81..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Params.java +++ /dev/null @@ -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; - -/** - * Action参数集合API注解 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface Params { - Param[] value(); -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Responses.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Responses.java deleted file mode 100644 index 474de7e..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/Responses.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.dsideal.FengHuang.Swagger.annotation; - -import java.lang.annotation.*; - -/** - * Action响应结果API注解 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@Inherited -public @interface Responses { - - /** - * 响应结果属性 - */ - String key() default ""; - - /** - * 说明 - */ - String remark() default ""; - - /** - * 暂不支持 - */ - String schemaType() default ""; - - /** - * 暂不支持 - */ - Item[] schemaItems() default @Item(); -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/SecurityApi.java b/src/main/java/com/dsideal/FengHuang/Swagger/annotation/SecurityApi.java deleted file mode 100644 index 5ff1f2a..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/annotation/SecurityApi.java +++ /dev/null @@ -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 ""; -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/config/SwaggerConfig.java b/src/main/java/com/dsideal/FengHuang/Swagger/config/SwaggerConfig.java deleted file mode 100644 index e78f551..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/config/SwaggerConfig.java +++ /dev/null @@ -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 globalParamList = new ArrayList<>(); - private final static Kv apiInfo = initApiInfo(); - private final static List securityDefinition = new ArrayList<>(); - private final static Set 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 contact, Map 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 传输协议(可选值:http、https、ws、wss) - */ - public static void setSchemes(String... schemes) { - List 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 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 getGlobalParamList() { - return globalParamList; - } - /** - * 获取API基本信息 - */ - public static Kv getApiInfo() { - return apiInfo; - } - /** - * 获取安全认证信息定义 - */ - public static List getSecurityDefinition() { - return securityDefinition; - } - /** - * 获取传输协议 - */ - public static Set 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")); - } -} diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/controller/SwaggerController.java b/src/main/java/com/dsideal/FengHuang/Swagger/controller/SwaggerController.java deleted file mode 100644 index db68bfa..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/controller/SwaggerController.java +++ /dev/null @@ -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 tags = new ArrayList<>(); - // 所有接口路径 - Map> paths = new LinkedHashMap<>(); - - // 扫描所有API类Action注解 - Map, List> classMap = scanAllApiAction(); - classMap.keySet().forEach(clazz -> { - List 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 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 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 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 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())// 传输协议Scheme:HTTP、HTTPS - .set("paths", paths) - .set("securityDefinitions", SwaggerConfig.getSecurityDefinition()) - .set("definitions", SwaggerConfig.getDefinition()) - .set("externalDocs", SwaggerConfig.getExternalDocs()); - renderJson(allApi); - } - - /** - * 扫描所有API类Action注解 - * - * @return - */ - private static Map, List> scanAllApiAction() { - Map, List> apiMap = new HashMap<>(); - // 获取遍历所有action - JFinal.me().getAllActionKeys().forEach(actionKey -> { - Action action = JFinal.me().getAction(actionKey, new String[1]); - Class controller = action.getControllerClass(); - - if (apiMap.containsKey(controller)) { - if (action.getMethod().isAnnotationPresent(ActionApi.class)) { - List 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 actions = new ArrayList<>(); - actions.add(action); - apiMap.put(controller, actions); - } - } - } - }); - List> list = new ArrayList<>(apiMap.keySet()); - list.sort(comparingInt((Class clazz) -> clazz.getAnnotation(Api.class).sort())); - - Map, List> result = new LinkedHashMap<>(); - for (Class i : list) { - List 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 toSet(String value) { - Set 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()); - } -} \ No newline at end of file diff --git a/src/main/java/com/dsideal/FengHuang/Swagger/enums/InType.java b/src/main/java/com/dsideal/FengHuang/Swagger/enums/InType.java deleted file mode 100644 index de75ebc..0000000 --- a/src/main/java/com/dsideal/FengHuang/Swagger/enums/InType.java +++ /dev/null @@ -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; - } -} \ No newline at end of file diff --git a/src/main/java/com/dsideal/FengHuang/Util/Base64Util.java b/src/main/java/com/dsideal/FengHuang/Util/Base64Util.java new file mode 100644 index 0000000..1f0eced --- /dev/null +++ b/src/main/java/com/dsideal/FengHuang/Util/Base64Util.java @@ -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; + } + /** + * 文件File类型转BASE64 + * + * @param file + * @return + */ + public static String fileToBase64(File file) { + return "data:image/png;base64," + Base64.encodeBase64String(fileToByte(file)); + } + + /** + * 文件File类型转byte[] + * + * @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; + } +} diff --git a/src/main/java/com/dsideal/FengHuang/Yp/Controller/YpController.java b/src/main/java/com/dsideal/FengHuang/Yp/Controller/YpController.java index b6f22e5..152826d 100644 --- a/src/main/java/com/dsideal/FengHuang/Yp/Controller/YpController.java +++ b/src/main/java/com/dsideal/FengHuang/Yp/Controller/YpController.java @@ -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" + } + } \ No newline at end of file