<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          FHS-Framework基于Springboot的快速開發(fā)平臺

          聯(lián)合創(chuàng)作 · 2023-09-19 16:04

          FHS-Framework 簡介

          fhs-framwork是一個集成了國內(nèi)外諸多優(yōu)秀開源項目的快速開發(fā)平臺,除了在常規(guī)快速開發(fā)平臺提供 用戶,角色,權(quán)限,菜單,字典,操作日志,代碼生成器 等功能的基礎(chǔ)上,還在以下方面為您的快速開發(fā)做出了努力。

          1. 項目基礎(chǔ)框架搭建期

          ????開箱即用:依賴redis和mysql,導(dǎo)入數(shù)基礎(chǔ)的腳本后,修改下配置文件,即可使用。

          2. DB接入方面

          - ????減少手寫sql

          ????????fhs 使用了Mybatis Jpa+Mybatis Plus 框架來幫大家自動生成常見sql,Mybatis Jpa是fhs-opensource下的一款基于Mybatis的JPA的實現(xiàn),為了補足復(fù)雜sql的生成,又對Mybatis Jpa 又對Mybatis Plus做了兼容,可以使用Mybatis Plus的注解來實現(xiàn)sql自動生成,有了Mybatis Jpa+Mybatis Plus 實現(xiàn)80%的單表查詢無需寫一行sql的效果

          - ????數(shù)據(jù)源路由

          ????????通過簡單的配置即可實現(xiàn)分庫,分表,讀寫分離操作。

          - ????聲明式事物

          ???????? add,update,del,save 開頭的service方法,會默認(rèn)開啟事物,自定義部分請使用注解。

          - ????數(shù)據(jù)權(quán)限控制

          ???????? 通過簡單的配置即可實現(xiàn)組合或者單一數(shù)據(jù)權(quán)限控制

          3. 日常業(yè)務(wù)方面

          - ????大量的base類使用

          ????????通過繼承即可完成大部分CRUD操作。

          - ????提供常見的工具類

          ????????日期,日志,反射,網(wǎng)絡(luò),校驗,文件等等。

           

          - ????其他

          ????????統(tǒng)一驗證框架處理器,統(tǒng)一異常處理器,控制器返回數(shù)據(jù)json字段過濾器,xss,csrf攔截器等等

          4. 翻譯服務(wù)

          ????翻譯服務(wù)用于根據(jù)表中存放的id來翻譯出對應(yīng)的文字來給做客戶做顯示使用,翻譯服務(wù)使用進(jìn)程緩存,當(dāng)緩存有更新的時候會自動重新加載(支持分布式),有著很高的效率,可減少表關(guān)聯(lián)sql的書寫。

          ?     首先在pojo中添加注解

                @Trans(type="wordbook",key="sex")
          	  private Integer sex;  // type代表翻譯類型是什么,上面寫的是字典,key是sex 如果字典中配置了0-男 1 -女 如果這里的value是0 那么給前端就可以輸出為男

          ????自定義表加入到翻譯服務(wù)demo:

          //給這個組織機構(gòu)翻譯起個別名叫做org  需要翻譯的字段是 org pojo的name字段   使用redis作為緩存   默認(rèn)的別名是org
          //實際組織機構(gòu)在生成json的時候默認(rèn)會為 orgName 而不是name 
          @AutoTrans(namespace = BaseTransConstant.ORG, fields = "name", useRedis = true, defaultAlias = "org")
          public class UcenterMsOrganizationServiceImpl extends BaseServiceImpl<UcenterMsOrganizationVO, UcenterMsOrganizationDO> implements UcenterMsOrganizationService {
          

              更多玩法請看gitee wiki.

          5. 更好用的操作日志

                 幾乎所有的項目中都提供了操作日志,操作日志對開發(fā)人員比較友好,對客戶來說并不友好,比如奇奇怪怪的字段名客戶看不懂,第二一些字典紙 比如isDelte:0  客戶也看不懂,為了解決這些問題,我們可以根據(jù)swagger注解將英文字段名變?yōu)榱酥形淖侄蚊?沒有配置swagger注解就還會保留英文字段名),并且接入了翻譯服務(wù),中間部分字段,比如外鍵,比如字典  都能看到其中文意思, 比如上面的 isDelete 我們會在transMap 這個map中包含一個key: 是否刪除:否.客戶能很容易看懂日志內(nèi)容.

                 

             除了上述內(nèi)容外,我們記錄了數(shù)據(jù)的歷史版本json,這樣很容易能找到某個值是誰將其由A改為B的,張三修改這條數(shù)據(jù)修改了哪些內(nèi)容(同上個版本比較字段值得出).

            有了操作日志,我們還可以做數(shù)據(jù)分析,分析哪些人經(jīng)常使用哪個模塊,哪個模塊的訪問量最大等等.

           

           

          5. 前端封裝

          - ????給Easyui,Jquery Validform,My97做了整容手術(shù)

          ????????Easyui是一款顏值稍低但是功能強大上手容易開發(fā)效率極高的UI框架,為了讓其能不被大家拋棄,繼續(xù)讓他發(fā)光發(fā)熱,我們?yōu)槠涠ㄖ屏艘惶譈ootStrap皮膚,效果堪比Layui。

          - ????使用Beetl標(biāo)簽技術(shù)對常見的表單控件做了封裝

          ????????后臺程序員有句俗話叫做后端10分鐘,前端2小時。前端是很多人不愿意碰觸的,于是有了很多公司一個項目要招聘2波人,后端專門寫后端,前端專門寫前段,但是命名一個人就能搞定的事情,非得要2個人?使用fhs的標(biāo)簽,所有的控件做到了統(tǒng)一化,不需要自己寫js去初始化,去做校驗,去賦值,只要使用了標(biāo)簽,標(biāo)簽中初始化,布局html,賦值,獲取值,校驗的js就都包含了,很大程度上降低了前端的學(xué)習(xí)和使用成本。

                   實例:

          <%
          include("/page/tags/form_include.html"){}
          %>
          <form id="addUpdateForm" method="post">
             <#HideFormTag  name='fatherMenuId' title='菜單名稱' value='${parameter.parentId}' required='true'/>
             <div class="fitem">
                <#InputFormTag  name='menuName' title='菜單名稱' required='true' />
                <#InputFormTag  name='namespace' title='Namespace' required='true' />
             </div>
             <#BigInputFormTag  name='menuUrl' title='鏈接地址' required='true' />
             <div class="fitem">
                <#WordBookFormTag  name='isEnable' title='狀態(tài)' code='is_enable' required='true' />
                <#WordBookFormTag  name='menuState' title='是否隱藏' code='yesOrNo' required='true' />
             </div>
             <div class="fitem">
              <#SelectFormTag  name='serverNameId' title='所在服務(wù)' url='${basePath}/ms/sett_ms_menu_server/findList' required='true' valueField= 'id'
                textField= 'serverName' />
              <#InputFormTag  name='orderIndex' title='菜單序號' required='true' dataType="n"/>
             </div>
             <#BigInputFormTag  name='image' placeholder="請將logo放到basics/images/menu下這里只寫文件名" title='logo'  />
             <div class="fitem">
                <#SelectFormTag  name='systemId' title='子系統(tǒng)' url='${basePath}/ms/sett_ms_system/findList' required='true' valueField= 'id'
                textField= 'name' />
                <#WordBookFormTag  name='menuType' title='菜單類型' code='menu_type' required='true' />
             </div>
          </form>
          
          <script>
              $(function () {
                   $('#isEnable').combobox('setValue',1);
                   $('#menuState').combobox('setValue',0);
              })
          
             function saveAfterSuccessHandler(){
                document.getElementById('left').contentWindow.reloadData();
                 document.getElementById('rightFrame').contentWindow.reload();
             }
          </script>
          <%
           layout("/page/tags/add_update_tag.html",{'nameSpace':'sysMenu','idField':'menuId'}){}
          %>

          - ????一款幫你寫代碼的引擎-PAGEX

          ????????使用市面上的代碼生成器,你做一個CRUD的需要多久呢?如果加上Excel導(dǎo)出,校驗,列點擊排序這些功能呢?如果要加數(shù)據(jù)權(quán)限,分庫,支持多租戶呢?要寫多少后臺代碼,寫多少sql,寫多少js和html?使用pagex,你只需要定義一個JS,你需要的java類框架在運行期(非生成到硬盤上噢)直接給你編譯為class扔到classLoader了,Html JS SQL 后臺接口 按照指定的路徑請求引擎也幫你自動生成,而你無需擔(dān)心JS被暴露,因為JS支持被PAGEX引擎加載當(dāng)做配置文件用的,既然是配置文件為何選擇JS呢?第一:JAVA有JS引擎,可以執(zhí)行JS代碼;第二:JS中有JSON格式,做配置比XML和YML方便,比Properties強大;第三:很多CRUD我們需要自己寫一些JS方法,來控制一些插件的隱藏顯示以及一些前端業(yè)務(wù),把他們寫到JS文件中總比寫到XML中強很多倍吧。

          ????????PAGEX可以通過簡單的配置自動生成CRUD代碼,可實現(xiàn)導(dǎo)入,字段排序,數(shù)據(jù)權(quán)限,租戶權(quán)限,字典翻譯,表關(guān)聯(lián),各類表單插件一行json配置等功能,更讓人驚喜的是,pagex的js可以通過Idea 的EasyCode插件自動生成,然后稍作改動就可以使用了。

          ????????下面是使用PAGEX引擎的一個我們項目中月租戶管理的demo

              var modelConfig= {title:'月租戶類型',pkey:'id',type:'uuid',orderBy:'update_time Desc',
                  namespace:"parking_lease_type",table:'t_park_lease_type',trans:true,db:"park"};
              
              var listPage={
                  listFieldSett:function(){
              	  return [
              		  {name:'lease_name',title:'類型名稱',width:'20%',align:'center'},
                        {name:'park_id',title:'停車場名稱',width:'20%',isJoin:true,namespace:'parking',showField:'transMap.parkName',align:'center'},//自動表關(guān)聯(lián)
                        {name:'is_disable',title:'是否禁用',width:'10%',formart:'formatRowColor',align:'center',trans:'book',key:'is_disable',showField:'transMap.is_disableName'},//字典翻譯
                        {name:'create_user',title:'創(chuàng)建人',width:'8%',align:'center',trans:'user',showField:'transMap.create_userUserName'},//用戶翻譯
                        {name:'create_time',title:'創(chuàng)建時間',width:'10%',align:'center'},
                        {name:'update_user',title:'更新人',width:'8%',align:'center',trans:'user',showField:'transMap.create_userUserName'},
                        {name:'update_time',title:'更新時間',width:'10%',align:'center'},
                        {name:'is_sync',title:'是否已下發(fā)',width:'5%',align:'center',trans:'book',key:'yesOrNo',showField:'transMap.is_syncName'},//字典翻譯
                ]},
                isColumnButton:function(){
              	  return  false;
                },
                filters:function(){
                    return [
                        {name:'park_id',type:'select',url:'${path.basePath}/ms/x/parking/findListData',
                            valuefield:'id',textfield:'parkName',title:'停車場'},//下拉插件
                        {name:'lease_name',type:'input',title:'出入口名稱',filterType:'like'},
              	  ];      
                }, 
                buttons:function(){
                    return [
                        //自定義按鈕數(shù)組
                    ];
                },
                disableButtons:function(){
              	    return [];//禁用掉默認(rèn)提供的按鈕 默認(rèn)提供了增刪改查 + 導(dǎo)出
                },
                otherFunctions:function(){
                    return {}//其他的自定義方法
                }
              };
              
              var add={ 
              	formFields:function(){//表單內(nèi)容
              	     return [
                           {name:'park_id',type:'select',url:'${path.basePath}/ms/x/parking/findListData',
                               valuefield:'id',textfield:'parkName',title:'停車場',required:true,},//一個下拉
                           {name:'lease_name',title:'名稱',required:true,type:'input'},//一個input
                           {name:'is_disable',title:'是否禁用',type:'switch',dft:false},//一個開關(guān)滑塊
                           {name:'is_sync',title:'是否下發(fā)',type:'hide'},//一個隱藏域
              		 ];
              	},
                  otherFunctions:function(){
                    return {
              	     ready:function(){
              	    },
              	    loadSuccess:function(info){//加載后臺數(shù)據(jù)成功的事件
              
              	    },
              	    onSave:function(){//保存前執(zhí)行方法
                          $('#isSync').val(0);
              	    },
              		saveSucess:function(){//保存成功執(zhí)行方法
              	    },
              		saveError:function(){//保存失敗執(zhí)行的方法
              		    
              	    },
              	  }		
                 }
              }

           

          6. c端支持

          ????支持微信,支付寶 用戶自動登陸接入。

          7.支持分布式和單機部署模式

          ????支持分布式和單機2種模式.

          8.其他特性

                 工作流支持,在線任務(wù)支持,swagger文檔,druid監(jiān)控,服務(wù)器內(nèi)存硬盤CPU監(jiān)控.

          系統(tǒng)截圖

          技術(shù)棧

          • 前端:Easyui(美化過的Easyui),Layui(首頁),Validform,My 97(定制過主題)。
          • 后端校驗:hibernate vilidator。
          • 后端:SpringBoot 2.2.5+ Springcloud(可選)
          • ORM:Mybatis(基礎(chǔ))+JPA(一對一&一對多查詢,數(shù)據(jù)權(quán)限注解)+Plus(條件查詢器)
          • 模板引擎:beetl
          • 無后端業(yè)務(wù)的快速開發(fā)引擎:PAGEX
          • 分布式配置:Apollo
          • 緩存:jetcache+spring data cache
          • 分布式任務(wù):shedlock
          • 單點登錄:CAS

          使用和體驗

          ????新出爐的文檔 https://gitee.com/fhs-opensource/fhs-framework/wikis/pages

                 官方QQ 群:976278956

                 體驗地址:http://114.116.21.147:8081/ admin 123456

           

          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美AAAAAAAAAA特级 | 内射亚洲色 | 美女被大鸡吧操视频网站在线播放 | 苍井さくら在线一区二区 | 想操逼 |