diff --git a/api/pom.xml b/api/pom.xml
index 0f8cdeaed980364a3062bce787bae042486c8842..6482bfd055c4e5bd6e50f70559ae349dfa2d2d5f 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -25,6 +25,12 @@
         
             org.springframework.cloud
             spring-cloud-starter-security
+            
+                
+                    org.bouncycastle
+                    bcpkix-jdk15on
+                
+            
         
         
         
             com.github.binarywang
             weixin-java-pay
+            
+                
+                    org.bouncycastle
+                    bcpkix-jdk15on
+                
+            
         
 
         
diff --git a/api/src/main/resources/templates/code/add.ftl b/api/src/main/resources/templates/code/add.ftl
deleted file mode 100644
index 658483a6a97843281e4e118b19d4ef329ebe3834..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/add.ftl
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-    
-        
-            
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-    <#if (column.allowInput?string('yes', 'no'))=='yes'>
-        <#switch column.uiType>
-            <#case "Input">
-                
-                    
-                
-                <#break>
-            <#case "Radio">
-                
-                    
-                
-                <#break>
-            <#case "Checkbox">
-                
-                    ${column.comment}
-                
-                <#break>
-            <#case "InputNumber">
-                
-                    
-                
-                <#break>
-            <#case "Select">
-                
-                    
-                        
-                        
-                    
-                
-                <#break>
-            <#case "Cascader">
-                
-                <#break>
-            <#case "Switch">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Slider">
-                
-                    
-                
-                <#break>
-            <#case "TimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DatePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DateTimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Upload">
-                
-                    
-                
-                <#break>
-            <#case "Rate">
-                
-                    
-                    
-                
-                <#break>
-            <#case "ColorPicker">
-                
-                    
-                
-                <#break>
-            <#case "Transfer">
-                
-                    
-                
-                <#break>
-            <#case "neditor">
-                
-                    
-                
-                <#break>
-            <#default>
-                
-                    
-                
-        #switch>
-    #if>
-    #if>
-#list>
-                
-                    
-                    
-                
-            
-        
-    
-
-
-
-
-
-
\ No newline at end of file
diff --git a/api/src/main/resources/templates/code/controller.ftl b/api/src/main/resources/templates/code/controller.ftl
deleted file mode 100644
index f0de9f1d45a74f625f152d8463b99d42f87f9731..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/controller.ftl
+++ /dev/null
@@ -1,41 +0,0 @@
-package ${basePackage}.controller;
-
-import ${basePackage}.common.controller.BaseController;
-import ${basePackage}.model.${modelNameUpperCamel};
-import ${basePackage}.service.${modelNameUpperCamel}Service;
-import ${basePackage}.repository.${modelNameUpperCamel}Repository;
-
-import ${basePackage}.common.domain.ResultMsg;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.MessageSource;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.core.Authentication;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.security.RolesAllowed;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.security.Principal;
-import java.util.Locale;
-import java.time.LocalTime;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
-* @author ${AUTHOR}
-* @date ${CREATE}
-**/
-
-@Api(description = "")
-@Slf4j
-@RestController
-@RequestMapping("${baseRequestMapping}")
-public class ${modelNameUpperCamel}Controller extends BaseController{
-
-    @Autowired
-    private ${modelNameUpperCamel}Service ${modelNameLowerCamel}Service;
-
-}
\ No newline at end of file
diff --git a/api/src/main/resources/templates/code/controllerWithPage.ftl b/api/src/main/resources/templates/code/controllerWithPage.ftl
deleted file mode 100644
index 9d4e76e16da1c073cdc876af3f2b27305940b3ed..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/controllerWithPage.ftl
+++ /dev/null
@@ -1,249 +0,0 @@
-<#function dashedToCamel(s)>
-    <#return s
-    ?replace('(^_+)|(_+$)', '', 'r')
-    ?replace('\\_+(\\w)?', ' $1', 'r')
-    ?replace('([A-Z])', ' $1', 'r')
-    ?capitalize
-    ?replace(' ' , '')
-    ?uncap_first
-    >
-#function>
-package ${basePackage}.controller;
-
-import com.github.liaochong.myexcel.core.DefaultExcelBuilder;
-import com.github.liaochong.myexcel.core.DefaultExcelReader;
-import com.github.liaochong.myexcel.utils.AttachmentExportUtil;
-import ${basePackage}.common.controller.BaseController;
-import ${basePackage}.model.${modelNameUpperCamel};
-import ${basePackage}.service.DictTypeService;
-import ${basePackage}.service.${modelNameUpperCamel}Service;
-import ${basePackage}.repository.${modelNameUpperCamel}Repository;
-
-import ${basePackage}.common.domain.ResultMsg;
-import ${basePackage}.common.domain.UserEntity;
-import ${basePackage}.common.domain.EasyUIDataGridResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.MessageSource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.security.core.Authentication;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
-
-import javax.annotation.security.RolesAllowed;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.security.Principal;
-import java.io.IOException;
-import java.util.Locale;
-import java.util.Date;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-
-import java.sql.Time;
-import java.time.LocalTime;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.List;
-
-/**
-* ${tableComment}
-*
-* @author ${AUTHOR}
-* @date ${CREATE}
-**/
-@Slf4j
-@Api(description = "${tableComment}")
-@Controller
-@RequestMapping("/api/${entityName?uncap_first}s")
-public class ${entityName}Controller extends BaseController {
-
-    @Autowired
-    private ${entityName}Service ${entityName?uncap_first}Service;
-
-    @Autowired
-    private DictTypeService dictTypeService;
-
-    @ApiIgnore
-    @ApiOperation(value = "列表页面")
-    @GetMapping("list")
-    public String list(Model model, Locale locale) {
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-        <#if (column.allowInput?string('yes', 'no'))=='yes' && (column.extraInfo)??>
-        model.addAttribute("${column.extraInfo}", dictTypeService.getTypeByGroupCode("${column.extraInfo}", locale.toString()));
-        #if>
-    #if>
-#list>
-        return "vue/${entityName?uncap_first}/list";
-    }
-
-    @ApiIgnore
-    @ApiOperation(value = "新增页面")
-    @GetMapping("add")
-    public String add(Model model, Locale locale) {
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-        <#if (column.allowInput?string('yes', 'no'))=='yes' && (column.extraInfo)??>
-        model.addAttribute("${column.extraInfo}", dictTypeService.getTypeByGroupCode("${column.extraInfo}", locale.toString()));
-        #if>
-    #if>
-#list>
-        return "vue/${entityName?uncap_first}/add";
-    }
-
-    @ApiIgnore
-    @ApiOperation(value = "编辑页面")
-    @GetMapping("edit")
-    public String edit(@RequestParam ${idType} id, Model model, Locale locale) {
-        model.addAttribute("entity", ${entityName?uncap_first}Service.findById(id));
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-        <#if (column.allowInput?string('yes', 'no'))=='yes' && (column.extraInfo)??>
-        model.addAttribute("${column.extraInfo}", dictTypeService.getTypeByGroupCode("${column.extraInfo}", locale.toString()));
-        #if>
-    #if>
-#list>
-        return "vue/${entityName?uncap_first}/edit";
-    }
-
-    @ApiIgnore
-    @ApiOperation(value = "列表数据")
-    @GetMapping("data")
-    @ResponseBody
-    public EasyUIDataGridResult<${entityName}> data (
-<#list columns as column>
-    <#if column.allowSearch>
-        <#switch column.type>
-            <#case "Date">
-            @ApiParam(value = "${(column.comment)}")@RequestParam(required = false) String[] ${column.name},
-            <#break>
-            <#case "LocalTime">
-            @ApiParam(value = "${(column.comment)}")@RequestParam(required = false) String[] ${column.name},
-            <#break>
-            <#case "LocalDate">
-            @ApiParam(value = "${(column.comment)}")@RequestParam(required = false) String[] ${column.name},
-            <#break>
-            <#case "LocalDateTime">
-            @ApiParam(value = "${(column.comment)}")@RequestParam(required = false) String[] ${column.name},
-            <#break>
-            <#default>
-            @ApiParam(value= "${(column.comment)}")@RequestParam(required = false) ${column.type} ${column.name},
-        #switch>
-    #if>
-#list>
-            @ApiParam(value = "页码", defaultValue = "1", required = true) @RequestParam Integer pageNo,
-            @ApiParam(value = "每页条数", defaultValue = "10", required = true)@RequestParam Integer pageSize,
-            @ApiParam(value = "排序")@RequestParam(required = false, defaultValue = "") String orderBy){
-        Map params = new LinkedHashMap<>();
-<#list columns as column>
-<#if column.allowSearch>
-    <#switch column.type>
-        <#case "Date">
-        if(null != ${column.name} && ${column.name}.length == 2) {
-            params.put("${column.name}Start", ${column.name}[0]);
-            params.put("${column.name}End", ${column.name}[1]);
-        }
-        <#break>
-        <#case "LocalTime">
-        if(null != ${column.name} && ${column.name}.length == 2) {
-            params.put("${column.name}Start", ${column.name}[0]);
-            params.put("${column.name}End", ${column.name}[1]);
-        }
-        <#break>
-        <#case "LocalDate">
-        if(null != ${column.name} && ${column.name}.length == 2) {
-            params.put("${column.name}Start", ${column.name}[0]);
-            params.put("${column.name}End", ${column.name}[1]);
-        }
-        <#break>
-        <#case "LocalDateTime">
-        if(null != ${column.name} && ${column.name}.length == 2) {
-            params.put("${column.name}Start", ${column.name}[0]);
-            params.put("${column.name}End", ${column.name}[1]);
-        }
-        <#break>
-        <#default>
-        params.put("${column.name}", ${column.name});
-    #switch>
-#if>
-#list>
-        return new EasyUIDataGridResult<>(${entityName?uncap_first}Service.getList(params, pageNo, pageSize, orderBy));
-    }
-
-    @ApiOperation(value = "新增")
-    @PostMapping("add")
-    @ResponseBody
-    public ResultMsg add(@RequestBody ${entityName} body, Authentication authentication) {
-        UserEntity userEntity = getCurrentUser(authentication);
-        body.setCreateDate(LocalDateTime.now());
-        body.setCreateBy(userEntity.getId());
-<#list columns as column>
-    <#if column.name == "userId">
-        body.setUserId(userEntity.getId());
-    #if>
-#list>
-        ${entityName?uncap_first}Service.insertSelective(body);
-        return ResultMsg.success();
-    }
-
-    @ApiOperation(value = "修改")
-    @PatchMapping("edit")
-    @ResponseBody
-    public ResultMsg update(@RequestBody ${entityName} body, Authentication authentication) {
-        UserEntity userEntity = getCurrentUser(authentication);
-        body.setUpdateDate(LocalDateTime.now());
-        body.setUpdateBy(userEntity.getId());
-        ${entityName?uncap_first}Service.updateByPrimaryKeySelective(body);
-        return ResultMsg.success();
-    }
-
-    @ApiOperation(value = "删除")
-    @DeleteMapping("delete")
-    @ResponseBody
-    public ResultMsg delete(@RequestParam String ids) {
-        ${entityName?uncap_first}Service.deleteByIds(ids);
-        return ResultMsg.success();
-    }
-
-    @ApiIgnore
-    @ApiOperation(value = "导出")
-    @GetMapping("export")
-    public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        List<${entityName}> list =  ${entityName?uncap_first}Service.findAll();
-        Workbook workbook = DefaultExcelBuilder.of(${entityName}.class)
-        .build(list);
-        AttachmentExportUtil.export(workbook, "${tableComment}", response);
-    }
-
-    @ApiIgnore
-    @ApiOperation(value = "导入", notes = "该请求路径必须添加到WebSecurityConfig的csrf忽略列表里。")
-    @PostMapping("import")
-    @ResponseBody
-    public ResponseEntity importExcel(@RequestParam("file") MultipartFile file) throws Exception {
-        List<${entityName}> result = DefaultExcelReader.of(${entityName}.class)
-            .sheet(0)
-            .rowFilter(row -> row.getRowNum() > 0)
-            .read(file.getInputStream());
-        ${entityName?uncap_first}Service.batchUpdate(result);
-        return ResponseEntity.ok(ResultMsg.success());
-    }
-}
\ No newline at end of file
diff --git a/api/src/main/resources/templates/code/edit.ftl b/api/src/main/resources/templates/code/edit.ftl
deleted file mode 100644
index fde7aa72507dfd50005ec21a9e0f22f8aef2cb25..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/edit.ftl
+++ /dev/null
@@ -1,251 +0,0 @@
-
-
-
-
-
-    
-        
-            
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-    <#if (column.allowInput?string('yes', 'no'))=='yes'>
-        <#switch column.uiType>
-            <#case "Input">
-                
-                    
-                
-                <#break>
-            <#case "Radio">
-                
-                    
-                
-                <#break>
-            <#case "Checkbox">
-                
-                    ${column.comment}
-                
-                <#break>
-            <#case "InputNumber">
-                
-                    
-                
-                <#break>
-            <#case "Select">
-                
-                    
-                        
-                        
-                    
-                
-                <#break>
-            <#case "Cascader">
-                
-                <#break>
-            <#case "Switch">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Slider">
-                
-                    
-                
-                <#break>
-            <#case "TimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DatePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DateTimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Upload">
-                
-                    
-                
-                <#break>
-            <#case "Rate">
-                
-                    
-                    
-                
-                <#break>
-            <#case "ColorPicker">
-                
-                    
-                
-                <#break>
-            <#case "Transfer">
-                
-                    
-                
-                <#break>
-            <#case "neditor">
-                
-                    
-                
-                <#break>
-            <#default>
-                
-                    
-                
-        #switch>
-    #if>
-    #if>
-#list>
-                
-                    提交
-                    关闭
-                
-            
-        
-    
-
-
-
-
-
-
\ No newline at end of file
diff --git a/api/src/main/resources/templates/code/entity.ftl b/api/src/main/resources/templates/code/entity.ftl
deleted file mode 100644
index 16e82b55e2368fc168f27346a6e63372ad7badaf..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/entity.ftl
+++ /dev/null
@@ -1,59 +0,0 @@
-package ${basePackage}.model;
-
-import com.simon.common.domain.BasePo;
-import com.alibaba.fastjson.annotation.JSONField;
-import com.alibaba.fastjson.serializer.ToStringSerializer;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.github.liaochong.myexcel.core.WorkbookType;
-import com.github.liaochong.myexcel.core.annotation.ExcelColumn;
-import com.github.liaochong.myexcel.core.annotation.ExcelTable;
-import com.github.liaochong.myexcel.core.annotation.ExcludeColumn;
-import ${basePackage}.common.config.AppConfig;
-import ${basePackage}.common.utils.UUIdGenId;
-import ${basePackage}.common.utils.SnowflakeGenId;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import org.hibernate.annotations.GenericGenerator;
-import org.springframework.format.annotation.DateTimeFormat;
-import tk.mybatis.mapper.annotation.KeySql;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import javax.persistence.*;
-import java.io.Serializable;
-import java.util.Date;
-import java.math.BigDecimal;
-import java.time.LocalTime;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-
-/**
-* ${tableComment}
-* @author ${AUTHOR}
-* @date ${CREATE}
-**/
-@ExcelTable(sheetName = "${tableComment}", workbookType = WorkbookType.SXLSX, rowAccessWindowSize = 100, useFieldNameAsTitle = true)
-@ApiModel(description = "${tableComment}")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Entity
-@Table(name="${tableName}")
-public class ${entityName} extends BasePo<${idType}> implements Serializable {
-    @ExcludeColumn
-    private static final long serialVersionUID = 1L;
-<#list columns as column>
-
-    ${(column.annotation)}
-    private ${column.type} ${column.name};
-#list>
-
-    /**@ExcludeColumn
-    @ApiModelProperty(value = "创建人名称")
-    @Transient
-    private String createUser;
-
-    @ExcludeColumn
-    @ApiModelProperty(value = "更新人名称")
-    @Transient
-    private String updateUser;**/
-}
\ No newline at end of file
diff --git a/api/src/main/resources/templates/code/list.ftl b/api/src/main/resources/templates/code/list.ftl
deleted file mode 100644
index e64e8ec684f6818bb52ef05eb7fb49a3d36d6267..0000000000000000000000000000000000000000
--- a/api/src/main/resources/templates/code/list.ftl
+++ /dev/null
@@ -1,415 +0,0 @@
-<#function dashedToCamel(s)>
-    <#return s
-    ?replace('(^_+)|(_+$)', '', 'r')
-    ?replace('\\_+(\\w)?', ' $1', 'r')
-    ?replace('([A-Z])', ' $1', 'r')
-    ?capitalize
-    ?replace(' ' , '')
-    ?uncap_first
-    >
-#function>
-
-
-
-
-
-    
-        
-            
-<#list columns as column>
-    <#if column.name == "id" || column.name == "createDate" || column.name == "createBy" || column.name == "updateDate" || column.name == "updateBy" || column.name == "userId">
-    <#else>
-        <#if (column.allowSearch?string('yes', 'no'))=='yes'>
-        <#switch column.uiType>
-            <#case "Input">
-                
-                    
-                
-                <#break>
-            <#case "Radio">
-                
-                    
-                
-                <#break>
-            <#case "Checkbox">
-                
-                    ${column.comment}
-                
-                <#break>
-            <#case "InputNumber">
-                
-                    
-                
-                <#break>
-            <#case "Select">
-                
-                    
-                        
-                        
-                    
-                
-                <#break>
-            <#case "Cascader">
-                
-                    
-                
-                <#break>
-            <#case "Switch">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Slider">
-                
-                    
-                
-                <#break>
-            <#case "TimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DatePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "DateTimePicker">
-                
-                    
-                    
-                
-                <#break>
-            <#case "Upload">
-                
-                    
-                
-                <#break>
-            <#case "Rate">
-                
-                    
-                    
-                
-                <#break>
-            <#case "ColorPicker">
-                
-                    
-                
-                <#break>
-            <#case "Transfer">
-                
-                    
-                
-                <#break>
-            <#case "neditor">
-                
-                    
-                
-                <#break>
-            <#default>
-                
-                    
-                
-        #switch>
-        #if>
-    #if>
-#list>
-                
-                    
-                    
-                
-            
-            
-            
-                
-            
-            
-        
-        
-            
-            <#list columns as column>
-                <#switch column.uiType>
-                    <#default>
-                    
-                #switch>
-            #list>
-            <#--
-            
-            
-                
-                    
-                
-            
-            
-            
-            
-            -->
-            
-                
-                    
-                    
-                    
-                    
-                
-            
-        
-        
-            
-        
-    
-