Commit 5734b399 authored by 赵啸非's avatar 赵啸非

添加feign接口自动生成

parent 488bb754
......@@ -30,6 +30,7 @@
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"showdown": "^2.1.0",
"sockjs-client": "^1.5.1",
"sortablejs": "1.10.2",
"stompjs": "^2.3.3",
......
......@@ -50,6 +50,8 @@ export default {
columns: [
{ type: "selection", width: 60 },
{ label: "应用名称", prop: "name" },
{ label: "应用标识", prop: "code" },
{ label: "应用访问路径", prop: "path" },
{ label: "备注", prop: "remark" },
{ label: "创建用户名称", prop: "createUserName" },
{
......
......@@ -3,6 +3,10 @@
<el-form :model="form" :loading="loading" :rules="rules" size='small' style="width:100%" label-width='120px' ref="form">
<el-row>
<Field label="应用名称" :span="18" prop="name" v-model="form.name" placeholder="请输入应用名称"/>
<Field label="应用标识" :span="18" prop="code" v-model="form.code" placeholder="微服务中标识名,如base-platform"/>
<Field label="应用请求路径" :span="18" prop="path" v-model="form.path" placeholder="微服务中访问路径,如/zwfw"/>
<Field label="备注" prop="remark" :span="18" type="textarea" v-model="form.remark" placeholder="请输入备注"/>
</el-row>
......
......@@ -220,6 +220,7 @@ export default {
"genType",
"isGenExport",
"isShowControl",
"genFeign",
], // 需要把number转化为string的表单字段name数组
};
},
......@@ -245,8 +246,6 @@ export default {
console.log("info",this.info)
}
this.tables = res.data.tables;
this.dict = Object.assign({}, this.dict, res.data.dict);
this.loading = false;
......
......@@ -44,7 +44,6 @@
<el-col :span="12">
<el-form-item prop="genFeign">
<span slot="label">是否生成Feign</span>
<el-select v-model="info.genFeign">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
......@@ -52,7 +51,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item prop="feignAppName">
<span slot="label">
feign应用工程名
......@@ -65,9 +64,9 @@
</span>
<el-input v-model="info.feignAppName" />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item prop="genApi">
<span slot="label">是否生成对外api</span>
<el-select v-model="info.genApi">
......@@ -75,7 +74,7 @@
<el-option label="否" value="0" />
</el-select>
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="12">
<el-form-item prop="isGenExport">
......@@ -87,7 +86,7 @@
</span>
<el-select v-model="info.isGenExport">
<el-select v-model="info.isGenExport">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select>
......
......@@ -248,6 +248,7 @@ hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml"));
hljs.registerLanguage("html", require("highlight.js/lib/languages/xml"));
hljs.registerLanguage("vue", require("highlight.js/lib/languages/xml"));
hljs.registerLanguage("test", require("highlight.js/lib/languages/xml"));
hljs.registerLanguage("md", require("highlight.js/lib/languages/xml"));
hljs.registerLanguage(
"javascript",
require("highlight.js/lib/languages/javascript")
......
......@@ -67,6 +67,12 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.qdox/qdox -->
<dependency>
<groupId>com.thoughtworks.qdox</groupId>
<artifactId>qdox</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
......
......@@ -28,6 +28,10 @@ public class GentableEntityExt extends BaseEntityLong {
private String requestMapping;
private String code;
private String path;
/**
* 表列信息
*/
......
......@@ -27,6 +27,8 @@ import com.mortals.xhx.common.utils.FreeMarkerUtils;
import com.mortals.xhx.common.utils.GenUtils;
import com.mortals.xhx.common.utils.ReadDoc;
import com.mortals.xhx.common.utils.StringUtils;
import com.mortals.xhx.module.app.model.AppEntity;
import com.mortals.xhx.module.app.service.AppService;
import freemarker.template.Template;
import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;
......@@ -60,24 +62,12 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
@Autowired
private GentableColumnService gentableColumnService;
@Autowired
private AppService appService;
String headStr = "版本 | 创建时间 | 作者 | 备注信息\n" +
"---|---|---|---\n" +
"v1.0|" + DateUtils.getCurrStrDate() + "|zxfei| 接口文档\n\n" +
"## 数据类型\n" +
"类型名称|类型描述|参考样例\n" +
"---|---|---\n" +
"String |字符串|A、a、ab\n" +
"Integer|数字类型|1、12、-1\n" +
"Long|长整型数字|1、12、-1\n" +
"date|时间类型,单位纳秒数字|167988745573\n" +
"BigDecimal|小数类型|545.256\n" +
"object|对象类型|{\"name\":\"zhang3\"}\n" +
"arrays|数组类型|[{\"name\":\"zhang3\"},{\"name\":\"zhang2\"}]\n";
@Override
public List<GentableEntity> selectDbTableList(GentableQuery query) {
//query to dao
ParamDto paramDto = new ParamDto();
Map map = new HashMap();
EntityUtil.entityToMap(query, map);
......@@ -104,6 +94,7 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
GenUtils.initTable(table, operName);
table.setGenType(0);
table.setIsGenExport(0);
table.setGenFeign(0);
table.setIsShowControl(2);
table.setGenPath("/");
table.setTplCategory("crud");
......@@ -159,7 +150,9 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
setSubTable(gentableEntity);
// 设置主键列信息
setPkColumn(gentableEntity);
String requestMapping = Arrays.stream(getBusinessNameExt(gentableEntity.getTableName()).split("\\.")).collect(Collectors.joining("/"));
gentableEntity.setRequestMapping(requestMapping);
buildAppInfo(gentableEntity);
//生成模板基础数据
Map data = FreeMarkerUtils.prepareSetFreeMarkerData(gentableEntity);
//输出合成模板
......@@ -168,16 +161,40 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
if (temp.equals("enum.java.ftl")) {
continue;
}
if (temp.equals("api.md.ftl")) {
continue;
//如果开启feign生成模式,加载feign生成模板
if (gentableEntity.getGenFeign() == 0) {
if (temp.contains("feign.java.ftl") || temp.contains("pdu.java.ftl")) {
continue;
}
}
if (gentableEntity.getIsShowControl() == 2) {
if (temp.contains("webForm.java.ftl")) {
continue;
}
}
if (gentableEntity.getIsShowControl() == 0) {
if (temp.contains("webBody.java.ftl")) {
continue;
}
}
// if (temp.equals("api-two.md.ftl")) {
// continue;
// }
// if (temp.equals("apidict.md.ftl")) {
// continue;
// }
if (temp.equals("menu.sql.ftl")||temp.equals("db.sql.ftl")||temp.equals("api.md.ftl")) {
try {
List<GentableEntity> tableList = new ArrayList<>();
tableList.add(gentableEntity);
data.put("tableList", tableList);
//初始化freeMarkers
FreeMarkerUtils.initFreeMarker(genFreePath(temp));
// 渲染模板
StringWriter sw = new StringWriter();
Template template = FreeMarkerUtils.getTemplate(temp);
template.process(data, sw);
dataMap.put(temp, sw.toString());
} catch (Exception e) {
log.error("异常", e);
}
continue;
}
try {
//初始化freeMarkers
FreeMarkerUtils.initFreeMarker(genFreePath(temp));
......@@ -216,10 +233,10 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
Map data = new HashMap();
data.put("tableList", tableList);
FreeMarkerUtils.initFreeMarker(genFreePath("menu.sql.ftl"));
zipTemplate("menu.sql.ftl","db/menu.sql",data,zip);
zipTemplate("db.sql.ftl","db/db.sql",data,zip);
zipTemplate("menu.sql.ftl", "db/menu.sql", data, zip);
zipTemplate("db.sql.ftl", "db/db.sql", data, zip);
FreeMarkerUtils.initFreeMarker(genFreePath("api.md.ftl"));
zipTemplate("api.md.ftl","doc/api.md",data,zip);
zipTemplate("api.md.ftl", "doc/api.md", data, zip);
IOUtils.closeQuietly(zip);
return outputStream.toByteArray();
......@@ -238,10 +255,10 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
Map data = new HashMap();
data.put("tableList", tableList);
FreeMarkerUtils.initFreeMarker(genFreePath("menu.sql.ftl"));
zipTemplate("menu.sql.ftl","db/menu.sql",data,zip);
zipTemplate("db.sql.ftl","db/db.sql",data,zip);
zipTemplate("menu.sql.ftl", "db/menu.sql", data, zip);
zipTemplate("db.sql.ftl", "db/db.sql", data, zip);
FreeMarkerUtils.initFreeMarker(genFreePath("api.md.ftl"));
zipTemplate("api.md.ftl","doc/api.md",data,zip);
zipTemplate("api.md.ftl", "doc/api.md", data, zip);
IOUtils.closeQuietly(zip);
return outputStream.toByteArray();
}
......@@ -333,6 +350,7 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
GenUtils.initTable(table, operName);
table.setAppId(appId);
table.setGenType(0);
table.setGenFeign(0);
table.setIsGenExport(0);
table.setIsShowControl(2);
table.setGenPath("/");
......@@ -417,6 +435,8 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
String requestMapping = Arrays.stream(getBusinessNameExt(gentableEntity.getTableName()).split("\\.")).collect(Collectors.joining("/"));
gentableEntity.setRequestMapping(requestMapping);
buildAppInfo(gentableEntity);
//生成模板基础数据
Map data = FreeMarkerUtils.prepareSetFreeMarkerData(gentableEntity);
......@@ -465,11 +485,17 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
if (temp.contains("web.java.ftl") || temp.contains("webForm.java.ftl")) {
continue;
}
}else{
} else {
if (temp.contains("webBody.java.ftl")) {
continue;
}
}
//如果开启feign生成模式,加载feign生成模板
if (gentableEntity.getGenFeign() == 0) {
if (temp.contains("feign.java.ftl") || temp.contains("pdu.java.ftl")) {
continue;
}
}
if (temp.equals("menu.sql.ftl")) {
continue;
......@@ -499,6 +525,12 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
return gentableEntity;
}
private void buildAppInfo(GentableEntity gentableEntity) {
AppEntity appEntity = appService.get(gentableEntity.getAppId());
gentableEntity.setCode(appEntity.getCode());
gentableEntity.setPath(appEntity.getPath());
}
/**
* 生成文档
*/
......@@ -510,6 +542,7 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
for (Long tableId : tableIds) {
GentableEntity gentableEntity = this.get(tableId);
if (!ObjectUtils.isEmpty(gentableEntity)) {
buildAppInfo(gentableEntity);
List<GentableColumnEntity> columnEntities = this.gentableColumnService.find(new GentableColumnQuery().tableId(gentableEntity.getId()));
gentableEntity.setColumns(columnEntities);
// 设置主子表信息
......@@ -542,22 +575,7 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
} catch (IOException e) {
log.error("ioEx:", e);
}
}
//通过模板生成不同的业务类
/* String temp = "db.doc.ftl";
try {
FreeMarkerUtils.initFreeMarker(genFreePath(temp));
StringWriter sw = new StringWriter();
Template template = FreeMarkerUtils.getTemplate(temp);
template.process(data, sw);
return sw.toString().getBytes(Constant.UTF8);
} catch (Exception e) {
log.error("渲染模板失败:" , e);
return null;
}*/
}
/**
......
......@@ -25,32 +25,25 @@ import java.util.stream.Collectors;
import static com.mortals.xhx.common.utils.GenUtils.getBusinessNameExt;
public class FreeMarkerUtils {
/**
* 项目空间路径
*/
private static final String PROJECT_PATH = "main/java";
private static final String TEST_PATH = "test/java/com/mortals/httpclient";
private static final String FEIGN_PATH = "feign/main/java/com/mortals/xhx/feign";
private static final String PDU_PATH = "feign/main/java/com/mortals/xhx/common/pdu";
/**
* mybatis空间路径
*/
private static final String MYBATIS_PATH = "main/resources/sqlmap";
/**
* 默认上级菜单,系统工具
*/
private static final String DEFAULT_PARENT_MENU_ID = "3";
public static Configuration cfg = null;
public static StringBuilder dbSql = new StringBuilder();
public static StringBuilder menuSql = new StringBuilder();
public static StringBuilder paramsSql = new StringBuilder();
public static StringBuilder apimd = new StringBuilder();
public static StringBuilder apitwomd = new StringBuilder();
public static StringBuilder apidict = new StringBuilder();
/**
* 初始化freeMaker方法
......@@ -100,29 +93,28 @@ public class FreeMarkerUtils {
templates.add("dao.java.ftl");
templates.add("daoImpl.java.ftl");
templates.add("web.java.ftl");
templates.add("feign.java.ftl");
templates.add("pdu.java.ftl");
templates.add("webBody.java.ftl");
templates.add("webForm.java.ftl");
templates.add("sqlMap.xml.ftl");
templates.add("db.sql.ftl");
templates.add("menu.sql.ftl");
// templates.add("params.sql.ftl");
templates.add("api.md.ftl");
// templates.add("api-two.md.ftl");
// templates.add("apidict.md.ftl");
templates.add("httpclient.test.ftl");
if (GenConstants.TPL_CRUD.equals(tplCategory)) {
templates.add("service.java.ftl");
templates.add("serviceImpl.java.ftl");
templates.add("webVueList.vue.ftl");
templates.add("VueDialogShow.vue.ftl");
// templates.add("webVueShow.vue.ftl");
// templates.add("webVueShow.vue.ftl");
} else if (GenConstants.TPL_TREE.equals(tplCategory)) {
templates.add("entity-tree.java.ftl");
templates.add("service-tree.java.ftl");
templates.add("serviceImpl-tree.java.ftl");
templates.add("VueTreeDialogShow.vue.ftl");
templates.add("webVueTreeList.vue.ftl");
} else if (GenConstants.TPL_SUB.equals(tplCategory)||GenConstants.TPL_SUB_ONE.equals(tplCategory)) {
} else if (GenConstants.TPL_SUB.equals(tplCategory) || GenConstants.TPL_SUB_ONE.equals(tplCategory)) {
templates.add("service.java.ftl");
templates.add("serviceImpl.java.ftl");
templates.add("webVueList.vue.ftl");
......@@ -190,6 +182,10 @@ public class FreeMarkerUtils {
data.put("importList", getImportList(genTable));
data.put("columns", genTable.getColumns());
data.put("table", genTable);
data.put("code", genTable.getCode());
data.put("path", genTable.getPath());
//com.mortals.xhx.feign.area
data.put("packageFeignName", "com.mortals.xhx.feign."+businessName);
String RequestMapping = Arrays.stream(getBusinessNameExt(genTable.getTableName()).split("\\.")).collect(Collectors.joining("/"));
data.put("RequestMapping", RequestMapping);
......@@ -224,7 +220,7 @@ public class FreeMarkerUtils {
*
* @return 模板列表
*/
public static Map prepareSetFreeMarkerDataByEnum(List<Map<String,String>> enums, String enumName, String enumClassName,String javaType) {
public static Map prepareSetFreeMarkerDataByEnum(List<Map<String, String>> enums, String enumName, String enumClassName, String javaType) {
Map data = new HashMap();
data.put("enums", enums);
data.put("EnumName", enumName);
......@@ -405,13 +401,15 @@ public class FreeMarkerUtils {
String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/") + "/" + moduleName;
String mybatisPath = MYBATIS_PATH + "/" + moduleName;
String feignPath = FEIGN_PATH + "/" + businessName;
String pduPath = PDU_PATH + "/" + businessName;
String vuePath = "vue";
String dbPath = "db";
//实体类输出路径
if (template.contains("entity.java.ftl")) {
fileName = StringUtils.format("{}/{}/model/{}Entity.java", javaPath, businessName, className);
}else if (template.contains("entity-tree.java.ftl")) {
} else if (template.contains("entity-tree.java.ftl")) {
fileName = StringUtils.format("{}/{}/model/{}TreeSelect.java", javaPath, businessName, className);
} else if (template.contains("vo.java.ftl")) {
fileName = StringUtils.format("{}/{}/model/vo/{}Vo.java", javaPath, businessName, className);
......@@ -425,18 +423,15 @@ public class FreeMarkerUtils {
fileName = StringUtils.format("{}/{}/service/{}Service.java", javaPath, businessName, className);
} else if (template.contains("service-tree.java.ftl")) {
fileName = StringUtils.format("{}/{}/service/{}Service.java", javaPath, businessName, className);
} else if (template.contains("serviceImpl.java.ftl")) {
} else if (template.contains("serviceImpl.java.ftl")) {
fileName = StringUtils.format("{}/{}/service/impl/{}ServiceImpl.java", javaPath, businessName, className);
} else if (template.contains("serviceImpl-tree.java.ftl")) {
} else if (template.contains("serviceImpl-tree.java.ftl")) {
fileName = StringUtils.format("{}/{}/service/impl/{}ServiceImpl.java", javaPath, businessName, className);
}
else if (template.contains("web.java.ftl")) {
} else if (template.contains("web.java.ftl")) {
fileName = StringUtils.format("{}/{}/web/{}Controller.java", javaPath, businessName, className);
}
else if (template.contains("webBody.java.ftl")) {
} else if (template.contains("webBody.java.ftl")) {
fileName = StringUtils.format("{}/{}/web/{}Controller.java", javaPath, businessName, className);
}
else if (template.contains("webForm.java.ftl")) {
} else if (template.contains("webForm.java.ftl")) {
fileName = StringUtils.format("{}/{}/web/{}Form.java", javaPath, businessName, className);
} else if (template.contains("sqlMap.xml.ftl")) {
fileName = StringUtils.format("{}/{}/{}Mapper.xml", mybatisPath, businessName, className);
......@@ -472,14 +467,17 @@ public class FreeMarkerUtils {
fileName = StringUtils.format("doc/alldoc.docx");
} else if (template.contains("api.doc.ftl")) {
fileName = StringUtils.format("doc/api.md");
}else if (template.contains("httpclient.test.ftl")) {
} else if (template.contains("httpclient.test.ftl")) {
fileName = StringUtils.format("{}/{}/{}Controller.http", TEST_PATH, businessName, className);
} else if (template.contains("feign.java.ftl")) {
fileName = StringUtils.format("{}/I{}Feign.java", feignPath, className);
} else if (template.contains("pdu.java.ftl")) {
fileName = StringUtils.format("{}/{}Pdu.java", pduPath, className);
}
return fileName;
}
/**
* 获取枚举文件名
*/
......@@ -487,7 +485,7 @@ public class FreeMarkerUtils {
// 文件名称
String fileName = "";
String javaPath = PROJECT_PATH + "/com/mortals/xhx/common/code";
fileName = StringUtils.format("{}/{}Enum.java", javaPath, StringUtils.capitalize(enumClassName));
fileName = StringUtils.format("{}/{}Enum.java", javaPath, StringUtils.capitalize(enumClassName));
return fileName;
}
......
package com.mortals.xhx.module.app.model;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.app.model.vo.AppVo;
/**
* 应用信息实体对象
*
* @author zxfei
* @date 2021-11-12
*/
* 应用信息实体对象
*
* @author zxfei
* @date 2022-06-24
*/
public class AppEntity extends AppVo {
private static final long serialVersionUID = 1L;
/**
* 应用名称
*/
* 应用名称
*/
private String name;
/**
* 备注
*/
* 编码标识
*/
private String code;
/**
* 服务访问相对路径,如/portal
*/
private String path;
/**
* 备注
*/
private String remark;
/**
* 创建用户名称
*/
* 创建用户名称
*/
private String createUserName;
public AppEntity(){}
/**
* 获取 应用名称
* @return String
*/
* 获取 应用名称
* @return String
*/
public String getName(){
return name;
}
/**
* 设置 应用名称
* @param name
*/
* 设置 应用名称
* @param name
*/
public void setName(String name){
this.name = name;
}
/**
* 获取 备注
* @return String
*/
* 获取 编码标识
* @return String
*/
public String getCode(){
return code;
}
/**
* 设置 编码标识
* @param code
*/
public void setCode(String code){
this.code = code;
}
/**
* 获取 服务访问相对路径,如/portal
* @return String
*/
public String getPath(){
return path;
}
/**
* 设置 服务访问相对路径,如/portal
* @param path
*/
public void setPath(String path){
this.path = path;
}
/**
* 获取 备注
* @return String
*/
public String getRemark(){
return remark;
}
/**
* 设置 备注
* @param remark
*/
* 设置 备注
* @param remark
*/
public void setRemark(String remark){
this.remark = remark;
}
/**
* 获取 创建用户名称
* @return String
*/
* 获取 创建用户名称
* @return String
*/
public String getCreateUserName(){
return createUserName;
}
/**
* 设置 创建用户名称
* @param createUserName
*/
* 设置 创建用户名称
* @param createUserName
*/
public void setCreateUserName(String createUserName){
this.createUserName = createUserName;
}
......@@ -78,7 +116,7 @@ public class AppEntity extends AppVo {
@Override
public int hashCode() {
return this.getId().hashCode();
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
......@@ -86,7 +124,7 @@ public class AppEntity extends AppVo {
if (obj instanceof AppEntity) {
AppEntity tmp = (AppEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
return true;
}
}
return false;
......@@ -95,14 +133,23 @@ public class AppEntity extends AppVo {
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append(",name:").append(getName());
sb.append(",code:").append(getCode());
sb.append(",path:").append(getPath());
sb.append(",remark:").append(getRemark());
sb.append(",createUserName:").append(getCreateUserName());
return sb.toString();
}
public void initAttrValue(){
this.name = null;
this.remark = null;
this.createUserName = null;
this.name = null;
this.code = null;
this.path = null;
this.remark = null;
this.createUserName = null;
}
}
\ No newline at end of file
......@@ -3,11 +3,11 @@ package com.mortals.xhx.module.app.model;
import java.util.List;
import com.mortals.xhx.module.app.model.AppEntity;
/**
* 应用信息查询对象
*
* @author zxfei
* @date 2021-11-12
*/
* 应用信息查询对象
*
* @author zxfei
* @date 2022-06-24
*/
public class AppQuery extends AppEntity {
/** 开始 ID,主键,自增长 */
private Long idStart;
......@@ -24,6 +24,12 @@ public class AppQuery extends AppEntity {
/** 应用名称 */
private List<String> nameList;
/** 编码标识 */
private List<String> codeList;
/** 服务访问相对路径,如/portal */
private List<String> pathList;
/** 备注 */
private List<String> remarkList;
......@@ -57,386 +63,454 @@ public class AppQuery extends AppEntity {
public AppQuery(){}
/**
* 获取 开始 ID,主键,自增长
* @return idStart
*/
* 获取 开始 ID,主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 ID,主键,自增长
* @param idStart
*/
* 设置 开始 ID,主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 ID,主键,自增长
* @return $idEnd
*/
* 获取 结束 ID,主键,自增长
* @return $idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 ID,主键,自增长
* @param idEnd
*/
* 设置 结束 ID,主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 ID,主键,自增长
* @return idIncrement
*/
* 获取 增加 ID,主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 ID,主键,自增长
* @param idIncrement
*/
* 设置 增加 ID,主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 ID,主键,自增长
* @return idList
*/
* 获取 ID,主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 ID,主键,自增长
* @param idList
*/
* 设置 ID,主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 应用名称
* @return nameList
*/
* 获取 应用名称
* @return nameList
*/
public List<String> getNameList(){
return this.nameList;
}
/**
* 设置 应用名称
* @param nameList
*/
* 设置 应用名称
* @param nameList
*/
public void setNameList(List<String> nameList){
this.nameList = nameList;
}
/**
* 获取 备注
* @return remarkList
*/
* 获取 编码标识
* @return codeList
*/
public List<String> getCodeList(){
return this.codeList;
}
/**
* 设置 编码标识
* @param codeList
*/
public void setCodeList(List<String> codeList){
this.codeList = codeList;
}
/**
* 获取 服务访问相对路径,如/portal
* @return pathList
*/
public List<String> getPathList(){
return this.pathList;
}
/**
* 设置 服务访问相对路径,如/portal
* @param pathList
*/
public void setPathList(List<String> pathList){
this.pathList = pathList;
}
/**
* 获取 备注
* @return remarkList
*/
public List<String> getRemarkList(){
return this.remarkList;
}
/**
* 设置 备注
* @param remarkList
*/
* 设置 备注
* @param remarkList
*/
public void setRemarkList(List<String> remarkList){
this.remarkList = remarkList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
/**
* 获取 开始 创建用户
* @return createUserIdStart
*/
* 获取 开始 创建用户
* @return createUserIdStart
*/
public Long getCreateUserIdStart(){
return this.createUserIdStart;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
* 设置 开始 创建用户
* @param createUserIdStart
*/
public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
}
/**
* 获取 结束 创建用户
* @return $createUserIdEnd
*/
* 获取 结束 创建用户
* @return $createUserIdEnd
*/
public Long getCreateUserIdEnd(){
return this.createUserIdEnd;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
}
/**
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
}
/**
* 获取 创建用户
* @return createUserIdList
*/
* 获取 创建用户
* @return createUserIdList
*/
public List<Long> getCreateUserIdList(){
return this.createUserIdList;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
* 设置 创建用户
* @param createUserIdList
*/
public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
}
/**
* 获取 创建用户名称
* @return createUserNameList
*/
* 获取 创建用户名称
* @return createUserNameList
*/
public List<String> getCreateUserNameList(){
return this.createUserNameList;
}
/**
* 设置 创建用户名称
* @param createUserNameList
*/
* 设置 创建用户名称
* @param createUserNameList
*/
public void setCreateUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList;
}
/**
* 设置 ID,主键,自增长
* @param id
*/
* 设置 ID,主键,自增长
* @param id
*/
public AppQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 开始 ID,主键,自增长
* @param idStart
*/
setId(id);
return this;
}
/**
* 设置 开始 ID,主键,自增长
* @param idStart
*/
public AppQuery idStart(Long idStart){
this.idStart = idStart;
return this;
this.idStart = idStart;
return this;
}
/**
* 设置 结束 ID,主键,自增长
* @param idEnd
*/
* 设置 结束 ID,主键,自增长
* @param idEnd
*/
public AppQuery idEnd(Long idEnd){
this.idEnd = idEnd;
return this;
this.idEnd = idEnd;
return this;
}
/**
* 设置 增加 ID,主键,自增长
* @param idIncrement
*/
* 设置 增加 ID,主键,自增长
* @param idIncrement
*/
public AppQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement;
return this;
this.idIncrement = idIncrement;
return this;
}
/**
* 设置 ID,主键,自增长
* @param idList
*/
* 设置 ID,主键,自增长
* @param idList
*/
public AppQuery idList(List<Long> idList){
this.idList = idList;
return this;
}
return this;
}
/**
* 设置 应用名称
* @param name
*/
/**
* 设置 应用名称
* @param name
*/
public AppQuery name(String name){
setName(name);
return this;
return this;
}
/**
* 设置 应用名称
* @param nameList
*/
* 设置 应用名称
* @param nameList
*/
public AppQuery nameList(List<String> nameList){
this.nameList = nameList;
return this;
return this;
}
/**
* 设置 备注
* @param remark
*/
/**
* 设置 编码标识
* @param code
*/
public AppQuery code(String code){
setCode(code);
return this;
}
/**
* 设置 编码标识
* @param codeList
*/
public AppQuery codeList(List<String> codeList){
this.codeList = codeList;
return this;
}
/**
* 设置 服务访问相对路径,如/portal
* @param path
*/
public AppQuery path(String path){
setPath(path);
return this;
}
/**
* 设置 服务访问相对路径,如/portal
* @param pathList
*/
public AppQuery pathList(List<String> pathList){
this.pathList = pathList;
return this;
}
/**
* 设置 备注
* @param remark
*/
public AppQuery remark(String remark){
setRemark(remark);
return this;
return this;
}
/**
* 设置 备注
* @param remarkList
*/
* 设置 备注
* @param remarkList
*/
public AppQuery remarkList(List<String> remarkList){
this.remarkList = remarkList;
return this;
return this;
}
/**
* 设置 创建用户
* @param createUserId
*/
* 设置 创建用户
* @param createUserId
*/
public AppQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public AppQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
return this;
this.createUserIdStart = createUserIdStart;
return this;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public AppQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
return this;
this.createUserIdEnd = createUserIdEnd;
return this;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public AppQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
return this;
this.createUserIdIncrement = createUserIdIncrement;
return this;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
* 设置 创建用户
* @param createUserIdList
*/
public AppQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
return this;
}
return this;
}
/**
* 设置 创建用户名称
* @param createUserName
*/
/**
* 设置 创建用户名称
* @param createUserName
*/
public AppQuery createUserName(String createUserName){
setCreateUserName(createUserName);
return this;
return this;
}
/**
* 设置 创建用户名称
* @param createUserNameList
*/
* 设置 创建用户名称
* @param createUserNameList
*/
public AppQuery createUserNameList(List<String> createUserNameList){
this.createUserNameList = createUserNameList;
return this;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<AppQuery> getOrConditionList(){
return this.orConditionList;
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<AppQuery> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<AppQuery> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<AppQuery> andConditionList){
this.andConditionList = andConditionList;
}
......
......@@ -55,3 +55,38 @@ cookie:
port: 111
upload:
path: @profiles.filepath@
# Swagger配置
swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping:
# 标题
title: '标题'
# 描述
description: '描述'
# 版本
version: '版本号: 1.0'
# 作者信息
contact:
name: zxfei
email: 8153694@qq.com
url: http://www.baidu.com
groups:
- name: 1.产品模块
basePackage: com.mortals.xhx.module.product
knife4j:
# 是否开启Knife4j增强模式
enable: true
# 开启Swagger的Basic认证功能,默认是false
# 前端Ui的个性化配置属性
setting:
# 默认语言
language: zh-CN
# 是否显示Footer
enableFooter: false
# 是否开启动态参数调试功能
enableDynamicParameter: true
# 是否在每个Debug调试栏后显示刷新变量按钮
enableReloadCacheParameter: true
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.app.dao.ibatis.AppDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="AppEntity" id="AppEntity-Map">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="remark" column="remark" />
<result property="createTime" column="createTime" />
<result property="createUserId" column="createUserId" />
<result property="createUserName" column="createUserName" />
<id property="id" column="id" />
<result property="name" column="name" />
<result property="code" column="code" />
<result property="path" column="path" />
<result property="remark" column="remark" />
<result property="createTime" column="createTime" />
<result property="createUserId" column="createUserId" />
<result property="createUserName" column="createUserName" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id as id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('name') or colPickMode == 1 and data.containsKey('name')))">
a.name as name,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('remark') or colPickMode == 1 and data.containsKey('remark')))">
a.remark as remark,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime as createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
a.createUserId as createUserId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserName') or colPickMode == 1 and data.containsKey('createUserName')))">
a.createUserName as createUserName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('name') or colPickMode == 1 and data.containsKey('name')))">
a.name,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('code') or colPickMode == 1 and data.containsKey('code')))">
a.code,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('path') or colPickMode == 1 and data.containsKey('path')))">
a.path,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('remark') or colPickMode == 1 and data.containsKey('remark')))">
a.remark,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
a.createUserId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserName') or colPickMode == 1 and data.containsKey('createUserName')))">
a.createUserName,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="AppEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_app
(name,remark,createTime,createUserId,createUserName)
(name,code,path,remark,createTime,createUserId,createUserName)
VALUES
(#{name},#{remark},#{createTime},#{createUserId},#{createUserName})
(#{name},#{code},#{path},#{remark},#{createTime},#{createUserId},#{createUserName})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_app
(name,remark,createTime,createUserId,createUserName)
(name,code,path,remark,createTime,createUserId,createUserName)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.name},#{item.remark},#{item.createTime},#{item.createUserId},#{item.createUserName})
(#{item.name},#{item.code},#{item.path},#{item.remark},#{item.createTime},#{item.createUserId},#{item.createUserName})
</foreach>
</insert>
......@@ -65,6 +73,12 @@
<if test="(colPickMode==0 and data.containsKey('name')) or (colPickMode==1 and !data.containsKey('name'))">
a.name=#{data.name},
</if>
<if test="(colPickMode==0 and data.containsKey('code')) or (colPickMode==1 and !data.containsKey('code'))">
a.code=#{data.code},
</if>
<if test="(colPickMode==0 and data.containsKey('path')) or (colPickMode==1 and !data.containsKey('path'))">
a.path=#{data.path},
</if>
<if test="(colPickMode==0 and data.containsKey('remark')) or (colPickMode==1 and !data.containsKey('remark'))">
a.remark=#{data.remark},
</if>
......@@ -92,46 +106,60 @@
<update id="updateBatch" parameterType="paramDto">
update mortals_xhx_app as a
<trim prefix="set" suffixOverrides=",">
<trim prefix="name=(case" suffix="ELSE name end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('name')) or (colPickMode==1 and !item.containsKey('name'))">
when a.id=#{item.id} then #{item.name}
</if>
</foreach>
</trim>
<trim prefix="remark=(case" suffix="ELSE remark end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('remark')) or (colPickMode==1 and !item.containsKey('remark'))">
when a.id=#{item.id} then #{item.remark}
</if>
</foreach>
</trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime}
</if>
</foreach>
</trim>
<trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
when a.id=#{item.id} then #{item.createUserId}
</when>
<when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="createUserName=(case" suffix="ELSE createUserName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createUserName')) or (colPickMode==1 and !item.containsKey('createUserName'))">
when a.id=#{item.id} then #{item.createUserName}
</if>
</foreach>
</trim>
<trim prefix="name=(case" suffix="ELSE name end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('name')) or (colPickMode==1 and !item.containsKey('name'))">
when a.id=#{item.id} then #{item.name}
</if>
</foreach>
</trim>
<trim prefix="code=(case" suffix="ELSE code end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('code')) or (colPickMode==1 and !item.containsKey('code'))">
when a.id=#{item.id} then #{item.code}
</if>
</foreach>
</trim>
<trim prefix="path=(case" suffix="ELSE path end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('path')) or (colPickMode==1 and !item.containsKey('path'))">
when a.id=#{item.id} then #{item.path}
</if>
</foreach>
</trim>
<trim prefix="remark=(case" suffix="ELSE remark end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('remark')) or (colPickMode==1 and !item.containsKey('remark'))">
when a.id=#{item.id} then #{item.remark}
</if>
</foreach>
</trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime}
</if>
</foreach>
</trim>
<trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
when a.id=#{item.id} then #{item.createUserId}
</when>
<when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="createUserName=(case" suffix="ELSE createUserName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createUserName')) or (colPickMode==1 and !item.containsKey('createUserName'))">
when a.id=#{item.id} then #{item.createUserName}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -178,6 +206,8 @@
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
......@@ -231,151 +261,191 @@
${_conditionType_} a.id=#{${_conditionParam_}.id}
</if>
</if>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null ">
${_conditionType_} a.id = #{${_conditionParam_}.id}
</if>
<if test="conditionParamRef.id == null">
${_conditionType_} a.id is null
</if>
</if>
<if test="conditionParamRef.containsKey('idList')">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null ">
${_conditionType_} a.id = #{${_conditionParam_}.id}
</if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
<if test="conditionParamRef.id == null">
${_conditionType_} a.id is null
</if>
</if>
<if test="conditionParamRef.containsKey('idList')">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
</if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
</if>
<if test="conditionParamRef.containsKey('name')">
<if test="conditionParamRef.name != null and conditionParamRef.name != ''">
${_conditionType_} a.name like #{${_conditionParam_}.name}
</if>
<if test="conditionParamRef.name == null">
${_conditionType_} a.name is null
</if>
<if test="conditionParamRef.containsKey('name')">
<if test="conditionParamRef.name != null and conditionParamRef.name != ''">
${_conditionType_} a.name like #{${_conditionParam_}.name}
</if>
<if test="conditionParamRef.containsKey('nameList')">
${_conditionType_} a.name in
<foreach collection="conditionParamRef.nameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
<if test="conditionParamRef.name == null">
${_conditionType_} a.name is null
</if>
</if>
<if test="conditionParamRef.containsKey('nameList')">
${_conditionType_} a.name in
<foreach collection="conditionParamRef.nameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('remark')">
<if test="conditionParamRef.remark != null and conditionParamRef.remark != ''">
${_conditionType_} a.remark like #{${_conditionParam_}.remark}
</if>
<if test="conditionParamRef.remark == null">
${_conditionType_} a.remark is null
</if>
<if test="conditionParamRef.containsKey('code')">
<if test="conditionParamRef.code != null and conditionParamRef.code != ''">
${_conditionType_} a.code like #{${_conditionParam_}.code}
</if>
<if test="conditionParamRef.containsKey('remarkList')">
${_conditionType_} a.remark in
<foreach collection="conditionParamRef.remarkList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
<if test="conditionParamRef.code == null">
${_conditionType_} a.code is null
</if>
</if>
<if test="conditionParamRef.containsKey('codeList')">
${_conditionType_} a.code in
<foreach collection="conditionParamRef.codeList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createTime')">
<if test="conditionParamRef.createTime != null ">
${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
</if>
<if test="conditionParamRef.createTime == null">
${_conditionType_} a.createTime is null
</if>
<if test="conditionParamRef.containsKey('path')">
<if test="conditionParamRef.path != null and conditionParamRef.path != ''">
${_conditionType_} a.path like #{${_conditionParam_}.path}
</if>
<if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
<if test="conditionParamRef.path == null">
${_conditionType_} a.path is null
</if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('pathList')">
${_conditionType_} a.path in
<foreach collection="conditionParamRef.pathList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('remark')">
<if test="conditionParamRef.remark != null and conditionParamRef.remark != ''">
${_conditionType_} a.remark like #{${_conditionParam_}.remark}
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if>
<if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId is null
</if>
<if test="conditionParamRef.remark == null">
${_conditionType_} a.remark is null
</if>
<if test="conditionParamRef.containsKey('createUserIdList')">
${_conditionType_} a.createUserId in
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('remarkList')">
${_conditionType_} a.remark in
<foreach collection="conditionParamRef.remarkList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createTime')">
<if test="conditionParamRef.createTime != null ">
${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
</if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
<if test="conditionParamRef.createTime == null">
${_conditionType_} a.createTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
<if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId is null
</if>
</if>
<if test="conditionParamRef.containsKey('createUserIdList')">
${_conditionType_} a.createUserId in
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
</if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
</if>
<if test="conditionParamRef.containsKey('createUserName')">
<if test="conditionParamRef.createUserName != null and conditionParamRef.createUserName != ''">
${_conditionType_} a.createUserName like #{${_conditionParam_}.createUserName}
</if>
<if test="conditionParamRef.createUserName == null">
${_conditionType_} a.createUserName is null
</if>
<if test="conditionParamRef.containsKey('createUserName')">
<if test="conditionParamRef.createUserName != null and conditionParamRef.createUserName != ''">
${_conditionType_} a.createUserName like #{${_conditionParam_}.createUserName}
</if>
<if test="conditionParamRef.containsKey('createUserNameList')">
${_conditionType_} a.createUserName in
<foreach collection="conditionParamRef.createUserNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
<if test="conditionParamRef.createUserName == null">
${_conditionType_} a.createUserName is null
</if>
</if>
<if test="conditionParamRef.containsKey('createUserNameList')">
${_conditionType_} a.createUserName in
<foreach collection="conditionParamRef.createUserNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('name')">
a.name
<if test='orderCol.name != null and "DESC".equalsIgnoreCase(orderCol.name)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('remark')">
a.remark
<if test='orderCol.remark != null and "DESC".equalsIgnoreCase(orderCol.remark)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserId')">
a.createUserId
<if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserName')">
a.createUserName
<if test='orderCol.createUserName != null and "DESC".equalsIgnoreCase(orderCol.createUserName)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('id')">
a.id
<if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('name')">
a.name
<if test='orderCol.name != null and "DESC".equalsIgnoreCase(orderCol.name)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('code')">
a.code
<if test='orderCol.code != null and "DESC".equalsIgnoreCase(orderCol.code)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('path')">
a.path
<if test='orderCol.path != null and "DESC".equalsIgnoreCase(orderCol.path)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('remark')">
a.remark
<if test='orderCol.remark != null and "DESC".equalsIgnoreCase(orderCol.remark)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserId')">
a.createUserId
<if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserName')">
a.createUserName
<if test='orderCol.createUserName != null and "DESC".equalsIgnoreCase(orderCol.createUserName)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
......
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html,body{font-size:100%}body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}a:hover{cursor:pointer}img,object,embed{max-width:100%;height:auto}object,embed{height:100%}img{-ms-interpolation-mode:bicubic}.left{float:left!important}.right{float:right!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.hide{display:none}img,object,svg{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.center{margin-left:auto;margin-right:auto}.spread{width:100%}p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}a{color:#364149;text-decoration:underline;line-height:inherit}a:hover,a:focus{color:#364149}a img{border:0}p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}p aside{font-size:.875em;line-height:1.35;font-style:italic}h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}h1{font-size:2.125em}h2{font-size:1.6875em}h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}h4,h5{font-size:1.125em}h6{font-size:1em}hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}ul,ol{margin-left:1.5em}ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square}ul.circle{list-style-type:circle}ul.disc{list-style-type:disc}ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}dl dt{margin-bottom:.3125em;font-weight:bold}dl dd{margin-bottom:1.25em}abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}abbr{text-transform:none}blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}h1{font-size:2.75em}h2{font-size:2.3125em}h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}table thead,table tfoot{background:#f7f8f7;font-weight:bold}table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}.clearfix:after,.float-group:after{clear:both}*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}*:not(pre)>code.nobreak{word-wrap:normal}*:not(pre)>code.nowrap{white-space:nowrap}pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}em em{font-style:normal}strong strong{font-weight:400}.keyseq{color:rgba(51,51,51,.8)}kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}.keyseq kbd:first-child{margin-left:0}.keyseq kbd:last-child{margin-right:0}.menuseq,.menuref{color:#000}.menuseq b:not(.caret),.menuref{font-weight:inherit}.menuseq{word-spacing:-.02em}.menuseq b.caret{font-size:1.25em;line-height:.8}.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}b.button:before{content:"[";padding:0 3px 0 2px}b.button:after{content:"]";padding:0 2px 0 3px}p a>code:hover{color:rgba(0,0,0,.9)}#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}#header:after,#content:after,#footnotes:after,#footer:after{clear:both}#content{margin-top:1.25em}#content:before{content:none}#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}#header .details span:first-child{margin-left:-.125em}#header .details span.email a{color:rgba(0,0,0,.85)}#header .details br{display:none}
#header .details br+span:before{content:"\00a0\2013\00a0"}#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}#header .details br+span#revremark:before{content:"\00a0|\00a0"}#header #revnumber{text-transform:capitalize}#header #revnumber:after{content:"\00a0"}#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}#toc>ul{margin-left:.125em;padding-left:1.25em}#toc ul.sectlevel0>li>a{font-style:italic}#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}#toc li{line-height:1.3334;margin-top:.3334em;padding-bottom:4px;padding-top:4px}#toc a{text-decoration:none}#toc a:active{text-decoration:underline}#toctitle{color:#7a2518;font-size:1.2em}@media only screen and (min-width:768px){#toctitle{font-size:1.375em}body.toc2{padding-left:15em;padding-right:0}#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;#padding:1.25em 1em;height:100%;overflow:auto}#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}#toc.toc2>ul{font-size:.9em;margin-bottom:0}#toc.toc2 ul ul{margin-left:0;padding-left:1em}#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}body.toc2.toc-right{padding-left:0;padding-right:15em}body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}#toc.toc2{width:20em}#toc.toc2 #toctitle{border-bottom:1px solid rgba(0,0,0,.07);padding-top:20px;padding-bottom:15px}#toc.toc2 #toctitle span{padding-left:1.25em;padding-bottom:15px}#toc.toc2>ul{font-size:.95em}#toc.toc2 ul ul{padding-left:1.25em}body.toc2.toc-right{padding-left:0;padding-right:20em}}#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}#content #toc>:first-child{margin-top:0}#content #toc>:last-child{margin-bottom:0}#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}#footer-text{color:rgba(255,255,255,.8);line-height:1.44}.sect1{padding-bottom:.625em}@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px solid #efefed}#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}.admonitionblock>table{border-collapse:separate;border:0;background:0;width:100%}.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:initial}.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}.exampleblock>.content>:first-child{margin-top:0}.exampleblock>.content>:last-child{margin-bottom:0}.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}.sidebarblock>:first-child{margin-top:0}.sidebarblock>:last-child{margin-bottom:0}.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}.listingblock pre.highlightjs{padding:0}.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}.listingblock pre.prettyprint{border-width:0}.listingblock>.content{position:relative}.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}.listingblock:hover code[data-lang]:before{display:block}.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:0}table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}table.pyhltable td.code{padding-left:.75em;padding-right:0}pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}pre.pygments .lineno{display:inline-block;margin-right:.25em}table.pyhltable .linenodiv{background:none!important;padding-right:0!important}.quoteblock{margin:0 1em 1.25em 1.5em;display:table}.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}.quoteblock blockquote{margin:0;padding:0;border:0}.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}.quoteblock .quoteblock blockquote:before{display:none}.verseblock{margin:0 1em 1.25em 1em}.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}.quoteblock .attribution br,.verseblock .attribution br{display:none}.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}.quoteblock.abstract{margin:0 0 1.25em 0;display:block}.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}table.tableblock{max-width:100%;border-collapse:separate}table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px 0}table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0 0}table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}table.frame-all{border-width:1px}table.frame-sides{border-width:0 1px}table.frame-topbot{border-width:1px 0}th.halign-left,td.halign-left{text-align:left}th.halign-right,td.halign-right{text-align:right}th.halign-center,td.halign-center{text-align:center}th.valign-top,td.valign-top{vertical-align:top}th.valign-bottom,td.valign-bottom{vertical-align:bottom}th.valign-middle,td.valign-middle{vertical-align:middle}table thead th,table tfoot th{font-weight:bold}tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}p.tableblock>code:only-child{background:0;padding:0}p.tableblock{font-size:1em}td>div.verse{white-space:pre}ol{margin-left:1.75em}ul li ol{margin-left:1.5em}dl dd{margin-left:1.125em}dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}ul.unstyled,ol.unstyled{margin-left:0}ul.checklist{margin-left:.625em}ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}ul.inline>li>*{display:block}.unstyled dl dt{font-weight:400;font-style:normal}ol.arabic{list-style-type:decimal}ol.decimal{list-style-type:decimal-leading-zero}ol.loweralpha{list-style-type:lower-alpha}ol.upperalpha{list-style-type:upper-alpha}ol.lowerroman{list-style-type:lower-roman}ol.upperroman{list-style-type:upper-roman}ol.lowergreek{list-style-type:lower-greek}.hdlist>table,.colist>table{border:0;background:0}.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:0}td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}td.hdlist1{font-weight:bold;padding-bottom:1.25em}.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}.colist>table tr>td:first-of-type{padding:.4em .75em 0 .75em;line-height:1;vertical-align:top}.colist>table tr>td:first-of-type img{max-width:initial}.colist>table tr>td:last-of-type{padding:.25em 0}.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}.imageblock.left,.imageblock[style*="float:left"]{margin:.25em .625em 1.25em 0}.imageblock.right,.imageblock[style*="float:right"]{margin:.25em 0 1.25em .625em}.imageblock>.title{margin-bottom:0}.imageblock.thumb,.imageblock.th{border-width:6px}.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}.image.left{margin-right:.625em}.image.right{margin-left:.625em}a.image{text-decoration:none;display:inline-block}a.image object{pointer-events:none}sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}#footnotes .footnote:last-of-type{margin-bottom:0}#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}.gist .file-data>table td.line-data{width:99%}div.unbreakable{page-break-inside:avoid}.big{font-size:larger}.small{font-size:smaller}.underline{text-decoration:underline}.overline{text-decoration:overline}.line-through{text-decoration:line-through}.aqua{color:#00bfbf}.aqua-background{background-color:#00fafa}.black{color:#000}.black-background{background-color:#000}.blue{color:#0000bf}.blue-background{background-color:#0000fa}.fuchsia{color:#bf00bf}.fuchsia-background{background-color:#fa00fa}.gray{color:#606060}.gray-background{background-color:#7d7d7d}.green{color:#006000}.green-background{background-color:#007d00}.lime{color:#00bf00}.lime-background{background-color:#00fa00}.maroon{color:#600000}.maroon-background{background-color:#7d0000}.navy{color:#000060}.navy-background{background-color:#00007d}.olive{color:#606000}.olive-background{background-color:#7d7d00}.purple{color:#600060}.purple-background{background-color:#7d007d}.red{color:#bf0000}.red-background{background-color:#fa0000}.silver{color:#909090}.silver-background{background-color:#bcbcbc}.teal{color:#006060}.teal-background{background-color:#007d7d}.white{color:#bfbfbf}.white-background{background-color:#fafafa}.yellow{color:#bfbf00}.yellow-background{background-color:#fafa00}span.icon>.fa{cursor:default}a span.icon>.fa{cursor:inherit}.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}.conum[data-value] *{color:#fff!important}.conum[data-value]+b{display:none}.conum[data-value]:after{content:attr(data-value)}pre .conum[data-value]{position:relative;top:-.125em}b.conum *{color:inherit!important}.conum:not([data-value]):empty{display:none}dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}h1,h2,p,td.content,span.alt{letter-spacing:-.01em}p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}p{margin-bottom:1.25rem}.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}.print-only{display:none!important}@media print{@page{margin:1.25cm .75cm}*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}a{color:inherit!important;text-decoration:underline!important}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote,tr,img,object,svg{page-break-inside:avoid}thead{display:table-header-group}svg{max-width:100%}p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}#toc,.sidebarblock,.exampleblock>.content{background:none!important}#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}.sect1{padding-bottom:0!important}.sect1+.sect1{border:0!important}#header>h1:first-child{margin-top:1.25rem}
body.book #header{text-align:center}body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}body.book #header .details{border:0!important;display:block;padding:0!important}body.book #header .details span:first-child{margin-left:0!important}body.book #header .details br{display:block}body.book #header .details br+span:before{content:none!important}body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}.listingblock code[data-lang]:before{display:block}#footer{background:none!important;padding:0 .9375em}#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}.hide-on-print{display:none!important}.print-only{display:block!important}.hide-for-print{display:none!important}.show-for-print{display:inherit!important}}#content .page-footer{height:100px;border-top:1px solid #ccc;overflow:hidden;padding:10px 0;font-size:14px;color:gray}#content .footer-modification{float:right}#content .footer-modification a{text-decoration:none}.sectlevel2{display:none}.submenu{background:#e7e7e6}.submenu li{border:0}.submenu a{color:#555}.checkbox{position:relative;height:30px}.checkbox input[type='checkbox']{position:absolute;left:0;top:0;width:20px;height:20px;opacity:0;border-radius:4px}.checkbox label{position:absolute;left:30px;top:0;height:20px;line-height:20px}.checkbox label:before{content:'';position:absolute;left:-30px;top:2px;width:20px;height:20px;border:1px solid #ddd;border-radius:4px;transition:all .3s ease;-webkit-transition:all .3s ease;-moz-transition:all .3s ease}.checkbox label:after{content:'';position:absolute;left:-22px;top:3px;width:6px;height:12px;border:0;border-right:1px solid #fff;border-bottom:1px solid #fff;border-radius:2px;transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transition:all .3s ease;-webkit-transition:all .3s ease;-moz-transition:all .3s ease}.checkbox input[type='checkbox']:checked+label:before{background:#4cd764;border-color:#4cd764}.checkbox input[type='checkbox']:checked+label:after{background:#4cd764}.send-button{color:#fff;background-color:#5cb85c;display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px;outline-color:transparent}textarea{width:100%;background-color:#f7f7f8;border:1px solid #f7f7f8;border-radius:4px;font-size:1em;padding:1em;font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;outline-color:#dedede}input{border:0;background-color:transparent;outline-color:transparent;outline-style:dotted;max-width:100%}#book-search-input{padding:13px;background:0;transition:top .5s ease;border-bottom:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);margin-top:-1px}#book-search-input input,#book-search-input input:focus,#book-search-input input:hover{width:100%;background:0;border:1px solid transparent;box-shadow:none;outline:0;line-height:22px;padding:7px 7px;color:inherit}[contenteditable="plaintext-only"]:focus{border:0;outline:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}html,body{font-size:100%}body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}a:hover{cursor:pointer}img,object,embed{max-width:100%;height:auto}object,embed{height:100%}img{-ms-interpolation-mode:bicubic}.left{float:left!important}.right{float:right!important}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}.text-justify{text-align:justify!important}.hide{display:none}img,object,svg{display:inline-block;vertical-align:middle}textarea{height:auto;min-height:50px}select{width:100%}.center{margin-left:auto;margin-right:auto}.spread{width:100%}p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}a{color:#364149;text-decoration:underline;line-height:inherit}a:hover,a:focus{color:#364149}a img{border:0}p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}p aside{font-size:.875em;line-height:1.35;font-style:italic}h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}h1{font-size:2.125em}h2{font-size:1.6875em}h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}h4,h5{font-size:1.125em}h6{font-size:1em}hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}em,i{font-style:italic;line-height:inherit}strong,b{font-weight:bold;line-height:inherit}small{font-size:60%;line-height:inherit}code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}ul,ol{margin-left:1.5em}ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}ul.square{list-style-type:square}ul.circle{list-style-type:circle}ul.disc{list-style-type:disc}ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}dl dt{margin-bottom:.3125em;font-weight:bold}dl dd{margin-bottom:1.25em}abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}abbr{text-transform:none}blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}blockquote cite:before{content:"\2014 \0020"}blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}@media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}h1{font-size:2.75em}h2{font-size:2.3125em}h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}table thead,table tfoot{background:#f7f8f7;font-weight:bold}table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}.clearfix:after,.float-group:after{clear:both}*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}*:not(pre)>code.nobreak{word-wrap:normal}*:not(pre)>code.nowrap{white-space:nowrap}pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}em em{font-style:normal}strong strong{font-weight:400}.keyseq{color:rgba(51,51,51,.8)}kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}.keyseq kbd:first-child{margin-left:0}.keyseq kbd:last-child{margin-right:0}.menuseq,.menuref{color:#000}.menuseq b:not(.caret),.menuref{font-weight:inherit}.menuseq{word-spacing:-.02em}.menuseq b.caret{font-size:1.25em;line-height:.8}.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}b.button:before{content:"[";padding:0 3px 0 2px}b.button:after{content:"]";padding:0 2px 0 3px}p a>code:hover{color:rgba(0,0,0,.9)}#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}#header:after,#content:after,#footnotes:after,#footer:after{clear:both}#content{margin-top:1.25em}#content:before{content:none}#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}#header .details span:first-child{margin-left:-.125em}#header .details span.email a{color:rgba(0,0,0,.85)}#header .details br{display:none}#header .details br+span:before{content:"\00a0\2013\00a0"}#header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}#header .details br+span#revremark:before{content:"\00a0|\00a0"}#header #revnumber{text-transform:capitalize}#header #revnumber:after{content:"\00a0"}#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}#toc>ul{margin-left:.125em;padding-left:1.25em}#toc ul.sectlevel0>li>a{font-style:italic}#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}#toc li{line-height:1.3334;margin-top:.3334em;padding-bottom:4px;padding-top:4px}#toc a{text-decoration:none}#toc a:active{text-decoration:underline}#toctitle{color:#7a2518;font-size:1.2em}@media only screen and (min-width:768px){#toctitle{font-size:1.375em}body.toc2{padding-left:15em;padding-right:0}#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;#padding:1.25em 1em;height:100%;overflow:auto}#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}#toc.toc2 ul ul{margin-left:0;padding-left:1em}#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}body.toc2.toc-right{padding-left:0;padding-right:15em}body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}@media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}#toc.toc2{width:20em}#toc.toc2 #toctitle{font-size:1.375em;border-bottom:1px solid rgba(0,0,0,.07);padding-top:20px;padding-bottom:15px}#toc.toc2 #toctitle span{padding-left:1.25em;padding-bottom:15px}#toc.toc2>ul{font-size:.95em}#toc.toc2 ul ul{padding-left:1.25em}body.toc2.toc-right{padding-left:0;padding-right:20em}}#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}#content #toc>:first-child{margin-top:0}#content #toc>:last-child{margin-bottom:0}#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}#footer-text{color:rgba(255,255,255,.8);line-height:1.44}.sect1{padding-bottom:.625em}@media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px solid #efefed}#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}#content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}.admonitionblock>table{border-collapse:separate;border:0;background:0;width:100%}.admonitionblock>table td.icon{text-align:center;width:80px}.admonitionblock>table td.icon img{max-width:initial}.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}.exampleblock>.content>:first-child{margin-top:0}.exampleblock>.content>:last-child{margin-bottom:0}.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}.sidebarblock>:first-child{margin-top:0}.sidebarblock>:last-child{margin-bottom:0}.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}@media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}@media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}.listingblock pre.highlightjs{padding:0}.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}.listingblock pre.prettyprint{border-width:0}.listingblock>.content{position:relative}.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}.listingblock:hover code[data-lang]:before{display:block}.listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:0}table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}table.pyhltable td.code{padding-left:.75em;padding-right:0}pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}pre.pygments .lineno{display:inline-block;margin-right:.25em}table.pyhltable .linenodiv{background:none!important;padding-right:0!important}.quoteblock{margin:0 1em 1.25em 1.5em;display:table}.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}.quoteblock blockquote{margin:0;padding:0;border:0}.quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}.quoteblock .quoteblock blockquote:before{display:none}.verseblock{margin:0 1em 1.25em 1em}.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}.verseblock pre strong{font-weight:400}.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}.quoteblock .attribution br,.verseblock .attribution br{display:none}.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}.quoteblock.abstract{margin:0 0 1.25em 0;display:block}.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}table.tableblock{max-width:100%;border-collapse:separate}table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px 0}table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0 0}table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}table.frame-sides{border-width:0 1px}table.frame-topbot{border-width:1px 0}th.halign-left,td.halign-left{text-align:left}th.halign-right,td.halign-right{text-align:right}th.halign-center,td.halign-center{text-align:center}th.valign-top,td.valign-top{vertical-align:top}th.valign-bottom,td.valign-bottom{vertical-align:bottom}th.valign-middle,td.valign-middle{vertical-align:middle}table thead th,table tfoot th{font-weight:bold}tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}p.tableblock>code:only-child{background:0;padding:0}p.tableblock{font-size:1em}td>div.verse{white-space:pre}ol{margin-left:1.75em}ul li ol{margin-left:1.5em}dl dd{margin-left:1.125em}dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}ul.unstyled,ol.unstyled{margin-left:0}ul.checklist{margin-left:.625em}ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}ul.inline>li>*{display:block}.unstyled dl dt{font-weight:400;font-style:normal}ol.arabic{list-style-type:decimal}ol.decimal{list-style-type:decimal-leading-zero}ol.loweralpha{list-style-type:lower-alpha}ol.upperalpha{list-style-type:upper-alpha}ol.lowerroman{list-style-type:lower-roman}ol.upperroman{list-style-type:upper-roman}ol.lowergreek{list-style-type:lower-greek}.hdlist>table,.colist>table{border:0;background:0}.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:0}td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}td.hdlist1{font-weight:bold;padding-bottom:1.25em}.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}.colist>table tr>td:first-of-type{padding:.4em .75em 0 .75em;line-height:1;vertical-align:top}.colist>table tr>td:first-of-type img{max-width:initial}.colist>table tr>td:last-of-type{padding:.25em 0}.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}.imageblock.left,.imageblock[style*="float:left"]{margin:.25em .625em 1.25em 0}.imageblock.right,.imageblock[style*="float:right"]{margin:.25em 0 1.25em .625em}.imageblock>.title{margin-bottom:0}.imageblock.thumb,.imageblock.th{border-width:6px}.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}.image.left{margin-right:.625em}.image.right{margin-left:.625em}a.image{text-decoration:none;display:inline-block}a.image object{pointer-events:none}sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}sup.footnote a,sup.footnoteref a{text-decoration:none}sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}#footnotes .footnote:last-of-type{margin-bottom:0}#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}.gist .file-data>table td.line-data{width:99%}div.unbreakable{page-break-inside:avoid}.big{font-size:larger}.small{font-size:smaller}.underline{text-decoration:underline}.overline{text-decoration:overline}.line-through{text-decoration:line-through}.aqua{color:#00bfbf}.aqua-background{background-color:#00fafa}.black{color:#000}.black-background{background-color:#000}.blue{color:#0000bf}.blue-background{background-color:#0000fa}.fuchsia{color:#bf00bf}.fuchsia-background{background-color:#fa00fa}.gray{color:#606060}.gray-background{background-color:#7d7d7d}.green{color:#006000}.green-background{background-color:#007d00}.lime{color:#00bf00}.lime-background{background-color:#00fa00}.maroon{color:#600000}.maroon-background{background-color:#7d0000}.navy{color:#000060}.navy-background{background-color:#00007d}.olive{color:#606000}.olive-background{background-color:#7d7d00}.purple{color:#600060}.purple-background{background-color:#7d007d}.red{color:#bf0000}
.red-background{background-color:#fa0000}.silver{color:#909090}.silver-background{background-color:#bcbcbc}.teal{color:#006060}.teal-background{background-color:#007d7d}.white{color:#bfbfbf}.white-background{background-color:#fafafa}.yellow{color:#bfbf00}.yellow-background{background-color:#fafa00}span.icon>.fa{cursor:default}a span.icon>.fa{cursor:inherit}.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}.conum[data-value] *{color:#fff!important}.conum[data-value]+b{display:none}.conum[data-value]:after{content:attr(data-value)}pre .conum[data-value]{position:relative;top:-.125em}b.conum *{color:inherit!important}.conum:not([data-value]):empty{display:none}dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}h1,h2,p,td.content,span.alt{letter-spacing:-.01em}p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}p{margin-bottom:1.25rem}.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}.print-only{display:none!important}@media print{@page{margin:1.25cm .75cm}*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}a{color:inherit!important;text-decoration:underline!important}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}abbr[title]:after{content:" (" attr(title) ")"}pre,blockquote,tr,img,object,svg{page-break-inside:avoid}thead{display:table-header-group}svg{max-width:100%}p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}#toc,.sidebarblock,.exampleblock>.content{background:none!important}#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}.sect1{padding-bottom:0!important}.sect1+.sect1{border:0!important}#header>h1:first-child{margin-top:1.25rem}body.book #header{text-align:center}body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}body.book #header .details{border:0!important;display:block;padding:0!important}body.book #header .details span:first-child{margin-left:0!important}body.book #header .details br{display:block}body.book #header .details br+span:before{content:none!important}body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}.listingblock code[data-lang]:before{display:block}#footer{background:none!important;padding:0 .9375em}#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}.hide-on-print{display:none!important}.print-only{display:block!important}.hide-for-print{display:none!important}.show-for-print{display:inherit!important}}#content .page-footer{height:100px;border-top:1px solid #ccc;overflow:hidden;padding:10px 0;font-size:14px;color:gray}#content .footer-modification{float:right}#content .footer-modification a{text-decoration:none}.sectlevel2{display:none}.submenu{background:#e7e7e6}.submenu li{border:0}.submenu a{color:#555}.copyright{text-align:right;padding-top:1.25em}#toTop{display:none;position:fixed;bottom:10px;right:0;width:44px;height:44px;border-radius:50%;background-color:#ced4ce;cursor:pointer;text-align:center}#upArrow{position:absolute;left:24%;right:0;bottom:19%;transition:.3s ease-in-out;display:block}#upText{position:absolute;left:0;right:0;bottom:0;font-size:16px;font-weight: 600;line-height:45px;display:none;transition:.3s ease-in-out;-webkit-box-align:center}
\ No newline at end of file
Version | Update Time | Status | Author | Description
---|---|---|---|---
v2021-11-05 16:10:28|2021-11-05 16:10:28|auto|@finegirl|Created by smart-doc
类型名称|类型描述|参考样例
---|---|---
String |字符串|A、a、ab
Integer|数字类型|1、12、-1
Long|长整型数字|1、12、-1
date|时间类型,单位纳秒数字|167988745573
BigDecimal|小数类型|545.256
object|对象类型|{"name":"zhang3"}
arrays|数组类型|[{"name":"zhang3"},{"name":"zhang2"}]
## 错误码列表
Error code |Description
---|---
200|ok
400|Bad Request
401|Unauthorized
403|Forbidden
404|Not Found
415|Unsupported Media Type
500|Internal Server Error
502|Bad Gateway
503|Service Unavailable
版本 | 创建时间 | 作者 | 备注信息
---|---|---|---
v1.0|2021-12-05|zxfei| 接口文档
## 数据类型
类型名称|类型描述|参考样例
---|---|---
String |字符串|A、a、ab
Integer|数字类型|1、12、-1
Long|长整型数字|1、12、-1
date|时间类型,单位纳秒数字|167988745573
BigDecimal|小数类型|545.256
object|对象类型|{"name":"zhang3"}
arrays|数组类型|[{"name":"zhang3"},{"name":"zhang2"}]
## 设备服务接口
### 查询设备列表
**URL:** http://localhost:8080/m/device/list
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 查询设备
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
pageInfo|object|分页对象|否|-
└─beginIndex|Integer|开始记录序号|否|-
└─prePageResult|Integer|每页条数|否|-
└─totalResult|Integer|总条数|否|-
└─totalPage|Integer|总页数|否|-
└─currPage|Integer|当前页|否|-
└─displayPageSize|Integer|显示页数量|否|-
└─hasNextPage|Boolean|是否有下一页|否|-
└─hasPrePage|Boolean|是否有前一页|否|-
└─lastRecordKey|String|最后一条|否|-
└─countPage|Boolean|是否计算总页数|否|-
query|object|查询对象|否|-
└─id|Long|主键ID,主键,自增长|否|-
└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|否|-
└─deviceCode|String|设备编码|否|-
└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|否|-
└─deviceMac|String|设备的MAC地址|否|-
└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|否|-
└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|否|-
└─deviceToRoomId|Long|设备所属房间ID|否|-
└─deviceToRoomName|String|设备所属房间名称|否|-
└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|否|-
└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|否|-
└─deviceRemark|String|备注|否|-
└─onlineTime|Date|最近上线时间|否|-
└─offlineTime|Date|最近离线时间|否|-
└─createUserId|Long|创建用户|否|-
└─createTime|Date|创建时间|否|-
└─updateUserId|Long|更新用户|否|-
└─updateTime|Date|更新时间|否|-
└─idStart|Long|大于 > 主键ID,主键,自增长|否|-
└─idEnd|Long|小于 < 主键ID,主键,自增长|否|-
└─idList|array|主键ID,主键,自增长列表|否|-
└─deviceNameList|array|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。列表|否|-
└─deviceCodeList|array|设备编码列表|否|-
└─deviceTypeStart|Integer|大于 > 设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|否|-
└─deviceTypeEnd|Integer|小于 < 设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|否|-
└─deviceTypeList|array|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)列表|否|-
└─deviceMacList|array|设备的MAC地址列表|否|-
└─deviceFirmIdStart|Long|大于 > 设备生产厂商ID关联mortals_xhx_stp_firm|否|-
└─deviceFirmIdEnd|Long|小于 < 设备生产厂商ID关联mortals_xhx_stp_firm|否|-
└─deviceFirmIdList|array|设备生产厂商ID关联mortals_xhx_stp_firm列表|否|-
└─deviceFirmnameList|array|设备生产厂商名称关联mortals_xhx_stp_firm列表|否|-
└─deviceToRoomIdStart|Long|大于 > 设备所属房间ID|否|-
└─deviceToRoomIdEnd|Long|小于 < 设备所属房间ID|否|-
└─deviceToRoomIdList|array|设备所属房间ID列表|否|-
└─deviceToRoomNameList|array|设备所属房间名称列表|否|-
└─deviceOnlineStatusStart|Integer|大于 > 在线状态 (0.离线,1.在线)|否|-
└─deviceOnlineStatusEnd|Integer|小于 < 在线状态 (0.离线,1.在线)|否|-
└─deviceOnlineStatusList|array|在线状态 (0.离线,1.在线)列表|否|-
└─deviceStatusStart|Integer|大于 > 启用状态 (0.停止,1.启用,2.测试)|否|-
└─deviceStatusEnd|Integer|小于 < 启用状态 (0.停止,1.启用,2.测试)|否|-
└─deviceStatusList|array|启用状态 (0.停止,1.启用,2.测试)列表|否|-
└─deviceRemarkList|array|备注列表|否|-
└─onlineTimeStart|Date|大于 > 最近上线时间|否|-
└─onlineTimeEnd|Date|小于 < 最近上线时间|否|-
└─offlineTimeStart|Date|大于 > 最近离线时间|否|-
└─offlineTimeEnd|Date|小于 < 最近离线时间|否|-
└─createUserIdStart|Long|大于 > 创建用户|否|-
└─createUserIdEnd|Long|小于 < 创建用户|否|-
└─createUserIdList|array|创建用户列表|否|-
└─createTimeStart|Date|大于 > 创建时间|否|-
└─createTimeEnd|Date|小于 < 创建时间|否|-
└─updateUserIdStart|Long|大于 > 更新用户|否|-
└─updateUserIdEnd|Long|小于 < 更新用户|否|-
└─updateUserIdList|array|更新用户列表|否|-
└─updateTimeStart|Date|大于 > 更新时间|否|-
└─updateTimeEnd|Date|小于 < 更新时间|否|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─result|array|结果集列表|数组
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceCode|String|设备编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceMac|String|设备的MAC地址|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomId|Long|设备所属房间ID|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomName|String|设备所属房间名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─onlineTime|Date|最近上线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─offlineTime|Date|最近离线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─pageInfo|object|分页对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─beginIndex|Integer|开始记录序号|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─prePageResult|Integer|每页条数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─totalResult|Integer|总条数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─totalPage|Integer|总页数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─currPage|Integer|当前页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─displayPageSize|Integer|显示页数量|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─hasNextPage|Boolean|是否有下一页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─hasPrePage|Boolean|是否有前一页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─lastRecordKey|String|最后一条|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─countPage|Boolean|是否计算总页数|-
└─dict|object|字典对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|object|字典属性对象,详见附录|-
└─query|object|查询时候返回的查询列表参数对象|-
**响应消息样例:**
```
{
"code":1,
"data":{
"result":[
{
"appId":6,
"businessName":"device",
}
],
"pageInfo":{
"currPage":1,
"prePageResult":200,
"totalPage":1,
"totalResult":16
},
"dict":{
"dividedTableType":{
"0":"无",
"1":"日"
}
}
},
"query":{
"appId":6
}
}
```
### 编辑设备
**URL:** http://localhost:8080/m/device/edit
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 编辑设备,返回实例详细信息
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|对象实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceCode|String|设备编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceMac|String|设备的MAC地址|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomId|Long|设备所属房间ID|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomName|String|设备所属房间名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─onlineTime|Date|最近上线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─offlineTime|Date|最近离线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|object|字典属性对象,详见附录|-
**响应消息样例:**
```
{
"code":1,
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 保存更新设备
**URL:** http://localhost:8080/m/device/save
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 保存或更新设备:id为空时为新增保存,否则为更新提交
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
entity|object|实体对象|是|-
└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|是|-
└─deviceCode|String|设备编码|是|-
└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|是|-
└─deviceMac|String|设备的MAC地址|是|-
└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|是|-
└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|是|-
└─deviceToRoomId|Long|设备所属房间ID|是|-
└─deviceToRoomName|String|设备所属房间名称|是|-
└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|是|-
└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|是|-
└─deviceRemark|String|备注|是|-
└─onlineTime|Date|最近上线时间|是|-
└─offlineTime|Date|最近离线时间|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|保存实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceCode|String|设备编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceMac|String|设备的MAC地址|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomId|Long|设备所属房间ID|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomName|String|设备所属房间名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─onlineTime|Date|最近上线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─offlineTime|Date|最近离线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|object|字典属性对象想,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|object|字典属性对象想,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|object|字典属性对象想,详见附录|-
**响应消息样例:**
```
{
"code":1,
"msg":"成功",
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 查看设备
**URL:** http://localhost:8080/m/device/view
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 查看设备,返回实例详细信息
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|对象实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceName|String|设备名称,支持英文字母、数字、短划线(-)、下划线(_)、at(@)、英文句号(.)和英文冒号(:),长度限制为4~20个字符。|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceCode|String|设备编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|Integer|设备类型(1.引导查询机,2.电子门牌, 3.LED大屏,4.集中显示屏, 5.PAD,6.打印机, 7.电脑,8.服务器, 9.其他)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceMac|String|设备的MAC地址|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmId|Long|设备生产厂商ID关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceFirmname|String|设备生产厂商名称关联mortals_xhx_stp_firm|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomId|Long|设备所属房间ID|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceToRoomName|String|设备所属房间名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|Integer|在线状态 (0.离线,1.在线)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|Integer|启用状态 (0.停止,1.启用,2.测试)|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─onlineTime|Date|最近上线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─offlineTime|Date|最近离线时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceType|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceOnlineStatus|object|字典属性对象,详见附录|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─deviceStatus|object|字典属性对象,详见附录|-
**响应消息样例:**
```
{
"code":1,
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 删除设备
**URL:** http://localhost:8080/m/device/delete
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 删除设备
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
**响应消息样例:**
```
{
"code":1,
"msg":"成功"
}
```
### 设备导入模板下载
**URL:** http://localhost:8081/m/device/downloadTemplate
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 设备导入模板下载
**Request-example:**
```
curl -X POST -i http://localhost:8081/m/device/downloadTemplate
```
**Response-example:**
```
...
```
### 导入设备
**URL:** http://localhost:8081/m/device/importData
**Type:** POST
**Content-Type:** multipart/form-data
**Description:** 导入设备
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
file|file|文件流|是|-
updateSupport|boolean|相同数据项是否更新|false|-
**Request-example:**
```
curl -X POST -H 'Content-Type: multipart/form-data' -i http://localhost:8081/m/device/importData --data 'updateSupport=true'
```
**Response-example:**
```
...
```
## 设备生产厂商服务接口
### 查询设备生产厂商列表
**URL:** http://localhost:8080/m/firm/list
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 查询设备生产厂商
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
pageInfo|object|分页对象|否|-
└─beginIndex|Integer|开始记录序号|否|-
└─prePageResult|Integer|每页条数|否|-
└─totalResult|Integer|总条数|否|-
└─totalPage|Integer|总页数|否|-
└─currPage|Integer|当前页|否|-
└─displayPageSize|Integer|显示页数量|否|-
└─hasNextPage|Boolean|是否有下一页|否|-
└─hasPrePage|Boolean|是否有前一页|否|-
└─lastRecordKey|String|最后一条|否|-
└─countPage|Boolean|是否计算总页数|否|-
query|object|查询对象|否|-
└─id|Long|主键ID,主键,自增长|否|-
└─firmName|String|设备生产厂商名称|否|-
└─firmCode|String|设备生产商编码|否|-
└─firmRemark|String|备注|否|-
└─createUserId|Long|创建用户|否|-
└─createTime|Date|创建时间|否|-
└─updateUserId|Long|更新用户|否|-
└─updateTime|Date|更新时间|否|-
└─idStart|Long|大于 > 主键ID,主键,自增长|否|-
└─idEnd|Long|小于 < 主键ID,主键,自增长|否|-
└─idList|array|主键ID,主键,自增长列表|否|-
└─firmNameList|array|设备生产厂商名称列表|否|-
└─firmCodeList|array|设备生产商编码列表|否|-
└─firmRemarkList|array|备注列表|否|-
└─createUserIdStart|Long|大于 > 创建用户|否|-
└─createUserIdEnd|Long|小于 < 创建用户|否|-
└─createUserIdList|array|创建用户列表|否|-
└─createTimeStart|Date|大于 > 创建时间|否|-
└─createTimeEnd|Date|小于 < 创建时间|否|-
└─updateUserIdStart|Long|大于 > 更新用户|否|-
└─updateUserIdEnd|Long|小于 < 更新用户|否|-
└─updateUserIdList|array|更新用户列表|否|-
└─updateTimeStart|Date|大于 > 更新时间|否|-
└─updateTimeEnd|Date|小于 < 更新时间|否|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─result|array|结果集列表|数组
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmName|String|设备生产厂商名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmCode|String|设备生产商编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─pageInfo|object|分页对象|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─beginIndex|Integer|开始记录序号|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─prePageResult|Integer|每页条数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─totalResult|Integer|总条数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─totalPage|Integer|总页数|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─currPage|Integer|当前页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─displayPageSize|Integer|显示页数量|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─hasNextPage|Boolean|是否有下一页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─hasPrePage|Boolean|是否有前一页|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─lastRecordKey|String|最后一条|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─countPage|Boolean|是否计算总页数|-
└─dict|object|字典对象|-
└─query|object|查询时候返回的查询列表参数对象|-
**响应消息样例:**
```
{
"code":1,
"data":{
"result":[
{
"appId":6,
"businessName":"device",
}
],
"pageInfo":{
"currPage":1,
"prePageResult":200,
"totalPage":1,
"totalResult":16
},
"dict":{
"dividedTableType":{
"0":"无",
"1":"日"
}
}
},
"query":{
"appId":6
}
}
```
### 编辑设备生产厂商
**URL:** http://localhost:8080/m/firm/edit
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 编辑设备生产厂商,返回实例详细信息
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|对象实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmName|String|设备生产厂商名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmCode|String|设备生产商编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
**响应消息样例:**
```
{
"code":1,
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 保存更新设备生产厂商
**URL:** http://localhost:8080/m/firm/save
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 保存或更新设备生产厂商:id为空时为新增保存,否则为更新提交
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
entity|object|实体对象|是|-
└─firmName|String|设备生产厂商名称|是|-
└─firmCode|String|设备生产商编码|是|-
└─firmRemark|String|备注|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|保存实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmName|String|设备生产厂商名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmCode|String|设备生产商编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
**响应消息样例:**
```
{
"code":1,
"msg":"成功",
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 查看设备生产厂商
**URL:** http://localhost:8080/m/firm/view
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 查看设备生产厂商,返回实例详细信息
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
data|object|数据对象|-
└─entity|object|对象实体|对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─id|Long|主键ID,主键,自增长|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmName|String|设备生产厂商名称|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmCode|String|设备生产商编码|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─firmRemark|String|备注|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createUserId|Long|创建用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─createTime|Date|创建时间|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateUserId|Long|更新用户|-
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─updateTime|Date|更新时间|-
└─dict|object|字典对象|-
**响应消息样例:**
```
{
"code":1,
"data":{
"dict":{
"interimExcuteStatus":{
"0":"未启用",
"1":"立即执行并保留"
}
},
"entity":{
"createTime":1628737643000,
"createUserId":1,
"createUserName":"系统管理员",
"excuteDate":0
}
}
}
```
### 删除设备生产厂商
**URL:** http://localhost:8080/m/firm/delete
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 删除设备生产厂商
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
id|array|实例主键ID,数组形式|是|-
**请求样例:**
```
...
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(0.失败,1.成功)|-
msg|String|消息|-
**响应消息样例:**
```
{
"code":1,
"msg":"成功"
}
```
### 设备生产厂商导入模板下载
**URL:** http://localhost:8081/m/firm/downloadTemplate
**Type:** POST
**Content-Type:** application/x-www-form-urlencoded;charset=utf-8
**Description:** 设备生产厂商导入模板下载
**Request-example:**
```
curl -X POST -i http://localhost:8081/m/firm/downloadTemplate
```
**Response-example:**
```
...
```
### 导入设备生产厂商
**URL:** http://localhost:8081/m/firm/importData
**Type:** POST
**Content-Type:** multipart/form-data
**Description:** 导入设备生产厂商
**Query-parameters:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
file|file|文件流|是|-
updateSupport|boolean|相同数据项是否更新|false|-
**Request-example:**
```
curl -X POST -H 'Content-Type: multipart/form-data' -i http://localhost:8081/m/firm/importData --data 'updateSupport=true'
```
**Response-example:**
```
...
```
###deviceType字典
字典参数key|字典参数值|其它
---|---|---
1|引导查询机
2|电子门牌
3|LED大屏
4|集中显示屏
5|PAD
6|打印机
7|电脑
8|服务器
9|其他
###deviceOnlineStatus字典
字典参数key|字典参数值|其它
---|---|---
0|离线
1|在线
###deviceStatus字典
字典参数key|字典参数值|其它
---|---|---
0|停止
1|启用
2|测试
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="smart-doc"><title>API Reference</title><link rel="stylesheet" href="https://fonts.googleapis.cnpmjs.org/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"><link rel="stylesheet" href="AllInOne.css?v=1636099828588"/><link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/highlight.js/10.3.2/styles/null.min.css"><style>.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}.hljs{padding:0}</style><script src="https://cdn.bootcdn.net/ajax/libs/highlight.js/10.3.2/highlight.min.js"></script><script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script></head><body class="book toc2 toc-left"><div id="header"><div id="toc" class="toc2"><div id="book-search-input"><input id="search" type="text" placeholder="Type to search"></div><div id="toctitle"><span>API Reference</span></div><ul id="accordion" class="sectlevel1"><li><a href="#_error_code_list">1.&nbsp;错误码列表</a></li></ul></div></div><div id="content"><div id="preamble"><div class="sectionbody"><table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 20%;"><col style="width: 20%;"><col style="width: 20%;"><col style="width: 20%;"><col style="width: 20%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">Version</th><th class="tableblock halign-left valign-top">Update Time</th><th class="tableblock halign-left valign-top">Status</th><th class="tableblock halign-left valign-top">Author</th><th class="tableblock halign-left valign-top">Description</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock">v2021-11-05 16:10:28</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">2021-11-05 16:10:28</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">auto</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">@finegirl</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Created by smart-doc</p></td></tr></tbody></table></div></div><div class="sect1"><h2 id="_error_code_list"><a class="anchor" href="#_error_code_list"></a><a class="link" href="#_error_code_list">1.&nbsp;错误码列表</a></h2><div class="sectionbody"><table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">Error code</th><th class="tableblock halign-left valign-top">Description</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><p class="tableblock">200</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">ok</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">400</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Bad Request</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">401</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Unauthorized</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">403</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Forbidden</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">404</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Not Found</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">415</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Unsupported Media Type</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">500</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Internal Server Error</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">502</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Bad Gateway</p></td></tr><tr><td class="tableblock halign-left valign-top"><p class="tableblock">503</p></td><td class="tableblock halign-left valign-top"><p class="tableblock">Service Unavailable</p></td></tr></tbody></table></div></div><footer class="page-footer"><span class="copyright">Generated by smart-doc at 2021-11-05 16:10:28</span><span class="footer-modification">Suggestions,contact,support and error reporting on<a href="https://gitee.com/smart-doc-team/smart-doc" target="_blank">&nbsp;Gitee</a>&nbsp;or<ahref="https://github.com/smart-doc-group/smart-doc.git" target="_blank">&nbsp;Github</a></span></footer><div href="javascript:void(0)" id="toTop"><img id="upArrow" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABlUlEQVRIS+2UvUvDQBiH398Rly4udnARwUXs4qAIOigI4iL30dTZ2T9AcNPVvUsXF7uYttdScNDFRRAnB11cFFwKxcXBJTQnJ6lEbRI/CIiY9e6e5/e+9+ZAGX/ImE9/QKCU2jfGbGTQqq4xZgtSyisiKmQgIAAVCCFWAGxnIOhqrdd/xyUrpRZsP40xSwA6AI57vd5eq9W6T6s8tQIppSKi+gDQNREprfVNkiRRwDlfY4xZ+FAIuSOi8Qjw0nEc5XnebZwkViClXA2T5+xhY8xus9ncEUJMAziITN5FEARuXLsGCoQQywBs8uEovJ+Scz7FGDuMSM4cx3E9z+u8r+SDQEq5SEQ1IhoZBE+QnBKRq7V+iEreCDjn84wxCx9NgidITnK5nFutVh/7e14FSqnZIAhqAMY+A4+TADjyfb/Ubref7J4XQXhxNvnEV+AJlbTy+XypUqn4KBaLBZuciCa/A0+opN5oNFz7FpUBbP4EHicxxsyAcz7HGDvvz3nar5+2Ho5wOQwsU5+KNGDa+r8grUP0DBLjtRtNKEliAAAAAElFTkSuQmCC"><span id="upText">Top</span></div></div>
<script src="search.js?v=1636099828588"></script>
<script>$(function(){const Accordion=function(el,multiple){this.el=el||{};this.multiple=multiple||false;const links=this.el.find(".dd");links.on("click",{el:this.el,multiple:this.multiple},this.dropdown)};Accordion.prototype.dropdown=function(e){const $el=e.data.el;const $this=$(this),$next=$this.next();$next.slideToggle();$this.parent().toggleClass("open");if(!e.data.multiple){$el.find(".submenu").not($next).slideUp("20").parent().removeClass("open")}};new Accordion($("#accordion"),false);hljs.initHighlightingOnLoad();$(window).scroll(function(){if($(window).scrollTop()>100){$("#toTop").fadeIn(1500);$("#toTop").hover(function(){$("#upArrow").hide();$("#upText").show()},function(){$("#upArrow").show();$("#upText").hide()})}else{$("#toTop").fadeOut(1500)}});$("#toTop").click(function(){$("body, html").animate({scrollTop:0},1000);return false})});
</script>
</body>
</html>
\ No newline at end of file
let api = [];
api.push({
alias: 'error',
order: '1',
link: 'error_code_list',
desc: '错误码列表',
list: []
})
api.push({
alias: 'dict',
order: '2',
link: 'dict_list',
desc: '数据字典',
list: []
})
document.onkeydown = keyDownSearch;
function keyDownSearch(e) {
const theEvent = e;
const code = theEvent.keyCode || theEvent.which || theEvent.charCode;
if (code == 13) {
const search = document.getElementById('search');
const searchValue = search.value;
let searchArr = [];
for (let i = 0; i < api.length; i++) {
let apiData = api[i];
const desc = apiData.desc;
if (desc.indexOf(searchValue) > -1) {
searchArr.push({
order: apiData.order,
desc: apiData.desc,
link: apiData.link,
list: apiData.list
});
} else {
let methodList = apiData.list || [];
let methodListTemp = [];
for (let j = 0; j < methodList.length; j++) {
const methodData = methodList[j];
const methodDesc = methodData.desc;
if (methodDesc.indexOf(searchValue) > -1) {
methodListTemp.push(methodData);
break;
}
}
if (methodListTemp.length > 0) {
const data = {
order: apiData.order,
desc: apiData.desc,
link: apiData.link,
list: methodListTemp
};
searchArr.push(data);
}
}
}
let html;
if (searchValue == '') {
const liClass = "";
const display = "display: none";
html = buildAccordion(api,liClass,display);
document.getElementById('accordion').innerHTML = html;
} else {
const liClass = "open";
const display = "display: block";
html = buildAccordion(searchArr,liClass,display);
document.getElementById('accordion').innerHTML = html;
}
const Accordion = function (el, multiple) {
this.el = el || {};
this.multiple = multiple || false;
const links = this.el.find('.dd');
links.on('click', {el: this.el, multiple: this.multiple}, this.dropdown);
};
Accordion.prototype.dropdown = function (e) {
const $el = e.data.el;
$this = $(this), $next = $this.next();
$next.slideToggle();
$this.parent().toggleClass('open');
if (!e.data.multiple) {
$el.find('.submenu').not($next).slideUp("20").parent().removeClass('open');
}
};
new Accordion($('#accordion'), false);
}
}
function buildAccordion(apiData, liClass, display) {
let html = "";
let doc;
if (apiData.length > 0) {
for (let j = 0; j < apiData.length; j++) {
html += '<li class="'+liClass+'">';
html += '<a class="dd" href="#_' + apiData[j].link + '">' + apiData[j].order + '.&nbsp;' + apiData[j].desc + '</a>';
html += '<ul class="sectlevel2" style="'+display+'">';
doc = apiData[j].list;
for (let m = 0; m < doc.length; m++) {
html += '<li><a href="#_' + apiData[j].order + '_' + doc[m].order + '_' + doc[m].desc + '">' + apiData[j].order + '.' + doc[m].order + '.&nbsp;' + doc[m].desc + '</a> </li>';
}
html += '</ul>';
html += '</li>';
}
}
return html;
}
\ No newline at end of file
......@@ -14,6 +14,204 @@ BigDecimal|小数类型|545.256
object|对象类型|{"name":"zhang3"}
arrays|数组类型|[{"name":"zhang3"},{"name":"zhang2"}]
## 系统服务
### 登录
**请求URL:** login/login
**请求方式:** POST
**内容类型:** application/json;charset=utf-8
**简要描述:** 用户登录
**请求参数:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
loginName|String|用户名称|是|-
password|String|用户密码|是|-
securityCode|String|校验码|是|-
**请求样例:**
```
{
"loginName":"zhang3",
"password":"123456",
"securityCode":"5455"
}
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(-1.失败,1.成功)|-
msg|String|消息|-
**响应消息样例:**
```
{
"msg":"登录成功",
"code":1,
"data":{
}
}
```
### 登出
**请求URL:** login/logout
**请求方式:** POST
**内容类型:** application/json;charset=utf-8
**简要描述:** 用户退出注销
**请求参数:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
**请求样例:**
```
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(-1.失败,1.成功)|-
msg|String|消息|-
**响应消息样例:**
```
```
### 修改密码
**请求URL:** user/change/password
**请求方式:** POST
**内容类型:** application/json;charset=utf-8
**简要描述:** 用户修改密码
**请求参数:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
loginName|String|用户名称|是|-
oldPwd|String|用户加密后密码|是|-
newPwd|String|用户加密后新密码|是|-
**请求样例:**
```
{
"loginName":"zhang3",
"oldPwd":"123456",
"newPwd":"5455"
}
```
**响应参数:**
参数名称 |参数类型|备注|其它
---|---|---|---
code|Integer|结果码(-1.失败,1.成功)|-
msg|String|消息|-
**响应消息样例:**
```
{
"msg":"修改密码成功",
"code":1,
"data":{}
}
```
### 获取验证码
**请求URL:** securitycode/createCode
**请求方式:** GET
**内容类型:** image/gif
**简要描述:** 用户退出注销
**请求参数:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
**请求样例:**
```
```
**响应参数:**
**响应消息样例:**
```
```
### 上传附件
**请求URL:** file/commonupload
**请求方式:** POST
**内容类型:** multipart/form-data
**简要描述:** 用户上传附件
**请求参数:**
参数名称|类型|备注|必填|其它
---|---|---|---|---
file|multipart|附件|是|-
prePath|String|附件存放相对路径|否|不填时候默认为/file/fileupload
**请求样例:**
```
http://127.0.0.1/file/commonupload?prePath=/file/fileupload
Content-Type: multipart/form-data; boundary=WebAppBoundary
--WebAppBoundary
Content-Disposition: form-data; name="file"; filename="1.excel"
Content-Type: multipart/form-data
```
**响应参数:**
**响应消息样例:**
```
```
<#list tableList as table>
## ${table.functionName}
......
......@@ -49,7 +49,7 @@ public class ${ClassName}Query extends ${ClassName}Entity {
public ${ClassName}Query(){}
<#list columns as column>
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/**
* 获取 开始 ${column.columnComment}
......@@ -256,7 +256,7 @@ public class ${ClassName}Query extends ${ClassName}Entity {
}
</#if>
</#list>
</#list>
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
......
package ${packageFeignName};
import com.mortals.xhx.common.pdu.${businessName}.${ClassName}Pdu;
import com.alibaba.fastjson.JSON;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.feign.IFeign;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
/**
* ${functionName} Feign接口
* @author ${author}
* @date ${datetime}
*/
@FeignClient(name = "${code}", path = "${path}", fallback = ${ClassName}FeignFallbackFactory.class)
public interface I${ClassName}Feign extends IFeign {
/**
* 查看${functionName}列表
*
* @param ${className}Pdu
* @return
*/
@PostMapping(value = "/${RequestMapping}/list")
String list(@RequestBody ${ClassName}Pdu ${className}Pdu);
/**
* 查看${functionName}
*
* @param id
* @return
*/
@GetMapping(value = "/${RequestMapping}/info")
String info(@RequestParam(value = "id") Long id);
/**
* 删除${functionName}
*
* @param ids
* @return
*/
@GetMapping(value = "/${RequestMapping}/delete")
String delete(Long[] ids,@RequestHeader("Authorization") String authorization);
/**
* ${functionName}保存更新
*
* @param ${className}Pdu
* @return
*/
@PostMapping(value = "/${RequestMapping}/save")
String save(@RequestBody ${ClassName}Pdu ${className}Pdu,@RequestHeader("Authorization") String authorization);
}
@Slf4j
@Component
class ${ClassName}FeignFallbackFactory implements FallbackFactory<I${ClassName}Feign> {
@Override
public I${ClassName}Feign create(Throwable t) {
return new I${ClassName}Feign() {
@Override
public String list(${ClassName}Pdu ${className}Pdu) {
return JSON.toJSONString(Rest.fail("暂时无法获取${functionName}列表,请稍后再试!"));
}
@Override
public String info(Long id) {
return JSON.toJSONString(Rest.fail("暂时无法获取${functionName}详细,请稍后再试!"));
}
@Override
public String delete(Long[] ids, String authorization) {
return JSON.toJSONString(Rest.fail("暂时无法删除${functionName},请稍后再试!"));
}
@Override
public String save(${ClassName}Pdu ${className}Pdu, String authorization) {
return JSON.toJSONString(Rest.fail("暂时无法保存${functionName},请稍后再试!"));
}
};
}
}
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###${functionName}列表
POST {{baseUrl}}/${RequestMapping}/list
......
package com.mortals.xhx.common.pdu.${businessName};
<#if table.tplCategory=="crud" >
<#--判断主键类型,设置继承实体类 -->
<#if pkColumn??&&pkColumn.javaType=="String" >
<#assign Entity = "BaseEntityStr">
<#elseif pkColumn??&&pkColumn.javaType=="Integer">
<#assign Entity = "BaseEntityInt">
<#elseif pkColumn??&&pkColumn.javaType=="Long">
<#assign Entity = "BaseEntityLong">
<#else>
<#assign Entity = "BaseEntityLong">
</#if>
</#if>
import java.util.Date;
import java.util.List;
import com.mortals.framework.model.BaseEntityLong;
/**
* ${functionName}Pdu对象
*
* @author ${author}
* @date ${datetime}
*/
public class ${ClassName}Pdu extends ${Entity} {
private static final long serialVersionUID = 1L;
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
/**
* ${column.columnComment}
*/
private ${column.javaType} ${column.javaField};
</#if>
</#list>
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/** 开始 ${column.columnComment} */
private ${column.javaType} ${column.javaField}Start;
/** 结束 ${column.columnComment} */
private ${column.javaType} ${column.javaField}End;
/** 增加 ${column.columnComment} */
private ${column.javaType} ${column.javaField}Increment;
/** ${column.columnComment}列表 */
private List <${column.javaType}> ${column.javaField}List;
</#if>
<#if column.javaType == "String">
/** ${column.columnComment} */
private List<${column.javaType}> ${column.javaField}List;
</#if>
<#if column.javaType == "Date">
/** 开始 ${column.columnComment} */
private String ${column.javaField}Start;
/** 结束 ${column.columnComment} */
private String ${column.javaField}End;
</#if>
</#list>
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<${ClassName}Pdu> orConditionList;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<${ClassName}Pdu> andConditionList;
public ${ClassName}Pdu(){}
<#--get set属性 -->
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
<#if column.javaField[0..1]?matches("[A-Z]")>
<#assign AttrName = column.javaField>
<#else>
<#assign AttrName = column.javaField?cap_first>
</#if>
/**
* 获取 ${column.columnComment}
* @return ${column.javaType}
*/
public ${column.javaType} get${AttrName}(){
return ${column.javaField};
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public void set${AttrName}(${column.javaType} ${column.javaField}){
this.${column.javaField} = ${column.javaField};
}
</#if>
</#list>
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/**
* 获取 开始 ${column.columnComment}
* @return ${column.javaField}Start
*/
public ${column.javaType} get${column.javaField?cap_first}Start(){
return this.${column.javaField}Start;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public void set${column.javaField?cap_first}Start(${column.javaType} ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
}
/**
* 获取 结束 ${column.columnComment}
* @return $${column.javaField}End
*/
public ${column.javaType} get${column.javaField?cap_first}End(){
return this.${column.javaField}End;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public void set${column.javaField?cap_first}End(${column.javaType} ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
}
/**
* 获取 增加 ${column.columnComment}
* @return ${column.javaField}Increment
*/
public ${column.javaType} get${column.javaField?cap_first}Increment(){
return this.${column.javaField}Increment;
}
/**
* 设置 增加 ${column.columnComment}
* @param ${column.javaField}Increment
*/
public void set${column.javaField?cap_first}Increment(${column.javaType} ${column.javaField}Increment){
this.${column.javaField}Increment = ${column.javaField}Increment;
}
/**
* 获取 ${column.columnComment}
* @return ${column.javaField}List
*/
public List<${column.javaType}> get${column.javaField?cap_first}List(){
return this.${column.javaField}List;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public void set${column.javaField?cap_first}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
}
</#if>
<#if column.javaType == "String">
/**
* 获取 ${column.columnComment}
* @return ${column.javaField}List
*/
public List<${column.javaType}> get${column.javaField?cap_first}List(){
return this.${column.javaField}List;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public void set${column.javaField?cap_first}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
}
</#if>
<#if column.javaType == "Date">
/**
* 获取 开始 ${column.columnComment}
* @return ${column.javaField}Start
*/
public String get${column.javaField?cap_first}Start(){
return this.${column.javaField}Start;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public void set${column.javaField?cap_first}Start(String ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
}
/**
* 获取 结束 ${column.columnComment}
* @return ${column.javaField}End
*/
public String get${column.javaField?cap_first}End(){
return this.${column.javaField}End;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public void set${column.javaField?cap_first}End(String ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
}
</#if>
</#list>
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public ${ClassName}Pdu ${column.javaField}(${column.javaType} ${column.javaField}){
set${column.javaField?cap_first}(${column.javaField});
return this;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public ${ClassName}Pdu ${column.javaField}Start(${column.javaType} ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
return this;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public ${ClassName}Pdu ${column.javaField}End(${column.javaType} ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
return this;
}
/**
* 设置 增加 ${column.columnComment}
* @param ${column.javaField}Increment
*/
public ${ClassName}Pdu ${column.javaField}Increment(${column.javaType} ${column.javaField}Increment){
this.${column.javaField}Increment = ${column.javaField}Increment;
return this;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public ${ClassName}Pdu ${column.javaField}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
return this;
}
</#if>
<#if column.javaType == "String">
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public ${ClassName}Pdu ${column.javaField}(${column.javaType} ${column.javaField}){
set${column.javaField?cap_first}(${column.javaField});
return this;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public ${ClassName}Pdu ${column.javaField}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
return this;
}
</#if>
<#if column.javaType == "java.util.Date">
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public ${ClassName}Pdu ${column.javaField}Start(String ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
return this;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public ${ClassName}Pdu ${column.javaField}End(String ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
return this;
}
</#if>
</#list>
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<${ClassName}Pdu> getOrConditionList(){
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<${ClassName}Pdu> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<${ClassName}Pdu> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<${ClassName}Pdu> andConditionList){
this.andConditionList = andConditionList;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof ${ClassName}Pdu) {
${ClassName}Pdu tmp = (${ClassName}Pdu) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
<#if column.javaType=="Long" && column.defaultValue??&& column.defaultValue!="">
<#assign Default>${column.defaultValue}L</#assign>
<#elseif column.javaType=="Integer" && column.defaultValue?? && column.defaultValue!="">
<#assign Default>${column.defaultValue}</#assign>
<#elseif column.javaType=="String" && column.defaultValue??>
<#assign Default>"${column.defaultValue}"</#assign>
<#elseif column.javaType=="BigDecimal" && column.defaultValue??&& column.defaultValue!="">
<#assign Default>BigDecimal.valueOf(${column.defaultValue})</#assign>
<#elseif column.javaType=="Date" >
<#assign Default>null</#assign>
<#else>
<#assign Default>null</#assign>
</#if>
this.${column.javaField} = ${Default};
</#if>
</#list>
}
}
\ No newline at end of file
......@@ -26,8 +26,6 @@ package ${packageName}.model.vo;
</#if>
import com.mortals.framework.model.${Entity};
import ${packageName}.model.${ClassName}Entity;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -36,7 +34,6 @@ import java.util.List;
* @author ${author}
* @date ${datetime}
*/
@Data
public class ${ClassName}Vo extends ${Entity} {
<#if table.tplCategory=="tree" >
......
package com.mortals.xhx.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import cn.hutool.extra.spring.SpringUtil;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.stereotype.Component;
/**
* @ClassName SpringUtils
* @Description TODO
* @Author finegirl
* @Date 2020/4/24 15:32
**/
@Component
public class SpringUtils implements ApplicationContextAware {
public final class SpringUtils extends SpringUtil {
private static ApplicationContext applicationContext;
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return getBeanFactory().containsBean(name);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().isSingleton(name);
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
/**
* @param name
* @return Class 注册对象的类型
*/
public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getType(name);
}
/**
* 对应的被管理类有别名时使用
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @param <T>
* @return
* @throws BeansException
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T) applicationContext.getBean(name);
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return getBeanFactory().getAliases(name);
}
/**
* 在对应的注解内未使用别名时 使用
* 获取aop代理对象
*
* @param invoker
* @return
*/
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
@SuppressWarnings("unchecked")
public static <T> T getAopProxy(T invoker) {
return (T) AopContext.currentProxy();
}
}
......@@ -101,6 +101,15 @@
</exclusions>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment