wuxw7
2018-05-07 2ece6f6cd23d7b717881dd54a9fc74877096ecee
控制服务实现登录功能 和菜单展示,以及中心服务bug修复
4个文件已删除
27个文件已修改
143 文件已重命名
12个文件已添加
2861 ■■■■ 已修改文件
CenterService/src/main/java/com/java110/center/CenterServiceApplicationStart.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CenterService/src/main/java/com/java110/center/api/CacheApi.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CenterService/src/main/java/com/java110/center/api/HttpApi.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CenterService/src/main/resources/application.yml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/doc/img/20180507230124.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/doc/img/20180507230330.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/doc/img/20180507231045.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/doc/img/20180507231201.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/ConsoleServiceApplicationStart.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/controller/ConsoleController.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/controller/LoginController.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/rest/LoginController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/rest/LoginRest.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/smo/IConsoleServiceSMO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/java/com/java110/console/smo/impl/ConsoleServiceSMOImpl.java 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/application.yml 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/data/login.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/html/list_template.html 1489 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/html/login.html 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/html/menu.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/javascript/java110_auth.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/javascript/java110_req_data.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ace-ie.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ace-part2.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ace-rtl.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ace-skins.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ace.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-colorpicker.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-datepicker3.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-datetimepicker.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-duallistbox.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-editable.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-multiselect.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap-timepicker.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/bootstrap.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/chosen.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/colorbox.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/daterangepicker.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/dropzone.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/font-awesome.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/fonts.googleapis.com.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/fullcalendar.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/images/meteorshower2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/images/pattern.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/jquery-ui.custom.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/jquery-ui.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/jquery.gritter.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/prettify.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/select2.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/css/ui.jqgrid.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/css/font-awesome.min.css 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.eot 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.svg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.ttf 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.woff 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.woff2 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.eot 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.svg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.ttf 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.woff 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.woff2 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar1.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar2.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar3.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar4.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/avatar5.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/profile-pic.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/avatars/user.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/alpha-horizontal.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/alpha.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/hue-horizontal.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/hue.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/saturation.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/email/email1.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/email/email2.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/email/email3.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/email/email4.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/image-6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-1.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-3.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-4.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-5.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/gallery/thumb-6.jpg 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/placeholder/165x90.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/placeholder/255x150.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/placeholder/530x270.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/images/placeholder/550x280.png 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/ace-editable.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/ace-elements.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/ace-extra.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/ace.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/autosize.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootbox.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-colorpicker.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-datepicker.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-datetimepicker.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-editable.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-markdown.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-multiselect.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-tag.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-timepicker.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap-wysiwyg.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/bootstrap.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/buttons.colVis.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/buttons.flash.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/buttons.html5.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/buttons.print.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/chosen.jquery.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/dataTables.buttons.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/dataTables.select.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/daterangepicker.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/dropzone.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/excanvas.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/fullcalendar.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/grid.locale-en.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/holder.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/html5shiv.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-1.11.3.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-2.1.4.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-additional-methods.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-typeahead.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-ui.custom.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery-ui.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.bootstrap-duallistbox.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.colorbox.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.dataTables.bootstrap.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.dataTables.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.easypiechart.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.flot.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.flot.pie.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.flot.resize.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.gritter.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.hotkeys.index.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.inputlimiter.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.jqGrid.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.knob.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.maskedinput.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.mobile.custom.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.nestable.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.raty.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.sparkline.index.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.ui.touch-punch.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/jquery.validate.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/markdown.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/moment.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/prettify.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/respond.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/select2.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/spin.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/spinbox.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/tree.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/js/wizard.min.js 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/assets/swf/flashExport.swf 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/javascript/java110_auth.js 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleService/src/main/resources/static/javascript/java110_req_data.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Readme.md 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ReadmeBak.md 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
eureka/src/main/resources/application.yml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/entity/service/PageData.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/cache/JWTCache.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/constant/CommonConstant.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/constant/MappingConstant.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/factory/AuthenticationFactory.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/factory/DataTransactionFactory.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-common/src/main/java/com/java110/common/util/DateUtil.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-config/db/CenterService/create_table.db 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-config/db/ConsoleService/create_table.db 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-config/src/main/resources/html/error.html 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/base/controller/BaseController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/aop/PageProcessAspect.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/api/BusinessApi.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/configuration/ServiceConfiguration.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/controller/ErrorController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/controller/SystemErrorController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/filter/JwtFilter.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-service/src/main/java/com/java110/service/init/ServiceStartInit.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CenterService/src/main/java/com/java110/center/CenterServiceApplicationStart.java
@@ -3,11 +3,15 @@
import com.java110.event.center.init.CenterServiceStartInit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
/**
@@ -31,7 +35,9 @@
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
        StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build();
        return restTemplate;
    }
    public static void main(String[] args) throws Exception{
CenterService/src/main/java/com/java110/center/api/CacheApi.java
File was renamed from CenterService/src/main/java/com/java110/center/rest/CacheApi.java
@@ -1,4 +1,4 @@
package com.java110.center.rest;
package com.java110.center.api;
import com.java110.center.smo.ICenterServiceCacheSMO;
import com.java110.common.constant.ResponseConstant;
CenterService/src/main/java/com/java110/center/api/HttpApi.java
File was renamed from CenterService/src/main/java/com/java110/center/rest/HttpApi.java
@@ -1,4 +1,4 @@
package com.java110.center.rest;
package com.java110.center.api;
import com.alibaba.fastjson.JSONObject;
import com.java110.center.smo.ICenterServiceSMO;
CenterService/src/main/java/com/java110/center/smo/impl/CenterServiceSMOImpl.java
@@ -364,6 +364,8 @@
                &&MappingCache.getValue(MappingConstant.KEY_NO_INVOKE_BUSINESS_SYSTEM).contains(dataFlow.getOrderTypeCd())){
            //不用调用 下游系统的配置(一般不存在这种情况,这里主要是在没有下游系统的情况下测试中心服务用)
            DataFlowFactory.addCostTime(dataFlow, "invokeBusinessSystem", "调用下游系统耗时", startDate);
            dataFlow.setResponseBusinessJson(DataTransactionFactory.createCommonResponseJson(dataFlow.getTransactionId(),
                    ResponseConstant.RESULT_CODE_SUCCESS, "成功",null));
            return ;
        }
CenterService/src/main/resources/application.yml
@@ -4,13 +4,16 @@
      maxTotal: 100
      maxIdle: 20
      maxWaitMillis: 20000
    host: 192.168.31.199
    host: 135.192.86.200
    port: 6379
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10
    leaseExpirationDurationInSeconds: 30
  client:
    serviceUrl:
      defaultZone: http://192.168.31.199:8761/eureka/
      defaultZone: http://135.192.86.200:8761/eureka/
      #defaultZone: http://localhost:8761/eureka/
server:
  port: 8001
@@ -19,7 +22,7 @@
    name: center-service
  redis:
    database: 0
    host: 192.168.31.199
    host: 135.192.86.200
    port: 6379
    pool:
      max-active: 300
@@ -36,7 +39,7 @@
    filters: stat,wall,log4j
    poolPreparedStatements: true
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://192.168.31.199:3306/TT
    url: jdbc:mysql://135.192.86.200:3306/TT
    maxPoolPreparedStatementPerConnectionSize: 20
    password: TT@12345678
    testOnBorrow: false
@@ -52,8 +55,8 @@
kafka:
  consumer:
    zookeeper:
      connect: 192.168.31.199:2181
    servers: 192.168.31.199:9092
      connect: 135.192.86.200:2181
    servers: 135.192.86.200:9092
    enable:
      auto:
        commit: true
@@ -71,8 +74,8 @@
  producer:
    zookeeper:
      connect: 192.168.31.199:2181
    servers: 192.168.31.199:9092
      connect: 135.192.86.200:2181
    servers: 135.192.86.200:9092
    retries: 0
    batch:
      size: 4096
ConsoleService/doc/img/20180507230124.jpg
ConsoleService/doc/img/20180507230330.jpg
ConsoleService/doc/img/20180507231045.jpg
ConsoleService/doc/img/20180507231201.jpg
ConsoleService/pom.xml
@@ -80,7 +80,7 @@
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.java110.center.CenterServiceApplicationStart</mainClass>
                    <mainClass>com.java110.console.ConsoleServiceApplicationStart</mainClass>
                </configuration>
            </plugin>
        </plugins>
ConsoleService/src/main/java/com/java110/console/ConsoleServiceApplicationStart.java
@@ -1,5 +1,6 @@
package com.java110.console;
import com.java110.service.init.ServiceStartInit;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
@@ -8,11 +9,15 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
/**
@@ -36,7 +41,9 @@
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
        StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build();
        return restTemplate;
    }
    @Bean
@@ -61,7 +68,7 @@
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(7001);
        connector.setPort(6001);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8443);
@@ -70,6 +77,6 @@
    public static void main(String[] args) throws Exception{
        ApplicationContext context = SpringApplication.run(ConsoleServiceApplicationStart.class, args);
        ServiceStartInit.initSystemConfig(context);
    }
}
ConsoleService/src/main/java/com/java110/console/controller/ConsoleController.java
File was renamed from ConsoleService/src/main/java/com/java110/console/rest/ConsoleController.java
@@ -1,14 +1,16 @@
package com.java110.console.rest;
package com.java110.console.controller;
import com.java110.common.exception.NoAuthorityException;
import com.java110.common.exception.SMOException;
import com.java110.console.smo.IConsoleServiceSMO;
import com.java110.core.base.controller.BaseController;
import com.java110.entity.service.PageData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -25,16 +27,22 @@
    private IConsoleServiceSMO consoleServiceSMOImpl;
    @RequestMapping(path = "/")
    public String index(Model model) {
    public String index(Model model, HttpServletRequest request) {
        String template = "index";
        try {
            //1.0 判断用户是否登录
            String managerId = checkLogin();
            //1.0 获取对象
            PageData pd = this.getPageData(request);
            // 判断用户是否登录
            checkLogin(pd);
            //2.0 查询菜单信息
            List<Map> menuItems = consoleServiceSMOImpl.getMenuItemsByManageId(managerId);
            List<Map> menuItems = consoleServiceSMOImpl.getMenuItemsByManageId(pd.getUserId());
            List<Map> removeMenuItems = new ArrayList<Map>();
            for(Map menuItem : menuItems){
                if(!"-1".equals(menuItem.get("parentId")) && !"1".equals(menuItem.get("level"))){
                    Map parentMenuItem = this.getMenuItemFromList(menuItems,menuItem.get("parentId").toString());
                    if(parentMenuItem == null){
                        continue;
                    }
                    if(parentMenuItem.containsKey("subMenus")){
                        List<Map> subMenus = (List<Map>) parentMenuItem.get("subMenus");
                        subMenus.add(menuItem);
@@ -44,18 +52,23 @@
                        parentMenuItem.put("subMenus",subMenus);
                    }
                    menuItems.remove(menuItem);
                    removeMenuItems.add(menuItem);
                }
            }
            removeMap(menuItems,removeMenuItems);
            model.addAttribute("menus",menuItems);
            //3.0 查询各个系统调用量
        }catch (NoAuthorityException e){
            //跳转到登录页面
            template = "login";
            template = "redirect:/login";
        }catch (IllegalArgumentException e){
            template = "error";
            template = "redirect:/system/error";
        }catch (SMOException e){
            template = "error";
            template = "redirect:/system/error";
        }catch (Exception e){
            logger.error("系统异常:",e);
            template = "redirect:/system/error";
        }finally {
            return template;
        }
@@ -64,13 +77,28 @@
    private Map getMenuItemFromList(List<Map> menuItems,String parentId){
        for(Map menuItem : menuItems){
            if(menuItem.get("mId").equals(parentId)){
            if(menuItem.get("mId").toString().equals(parentId)){
                return menuItem;
            }
        }
        return null;
    }
    /**
     * 删除map
     * @param menuItems
     * @param removeMenuItems
     */
    private void removeMap(List<Map> menuItems,List<Map> removeMenuItems){
        if(removeMenuItems == null  || removeMenuItems.size() == 0){
            return;
        }
        for(Map removeMenuItem : removeMenuItems){
            menuItems.remove(removeMenuItem);
        }
    }
    public IConsoleServiceSMO getConsoleServiceSMOImpl() {
        return consoleServiceSMOImpl;
    }
ConsoleService/src/main/java/com/java110/console/controller/LoginController.java
New file
@@ -0,0 +1,32 @@
package com.java110.console.controller;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.SMOException;
import com.java110.common.factory.DataTransactionFactory;
import com.java110.console.smo.IConsoleServiceSMO;
import com.java110.core.base.controller.BaseController;
import com.java110.entity.service.PageData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
 * 登录 控制类
 * Created by wuxw on 2018/5/2.
 */
@Controller
public class LoginController extends BaseController {
    @RequestMapping(path = "/login",method = RequestMethod.GET)
    public String index(HttpServletRequest request){
        return "login";
    }
}
ConsoleService/src/main/java/com/java110/console/rest/LoginController.java
File was deleted
ConsoleService/src/main/java/com/java110/console/rest/LoginRest.java
New file
@@ -0,0 +1,59 @@
package com.java110.console.rest;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.SMOException;
import com.java110.common.factory.DataTransactionFactory;
import com.java110.console.smo.IConsoleServiceSMO;
import com.java110.core.base.controller.BaseController;
import com.java110.entity.service.PageData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
 * Created by wuxw on 2018/5/7.
 */
@RestController
public class LoginRest extends BaseController {
    @Autowired
    private IConsoleServiceSMO consoleServiceSMOImpl;
    /**
     * 登录
     * 协议:
     * {"meta":{"method":"login","requestTime":"20180506013211"},"param":{"userCode":"123","userPwd":"123","pageSign":""}}}
     }
     *
     * @param request
     * @return
     */
    @RequestMapping(path = "/loginRest/login",method = RequestMethod.POST)
    public String login(HttpServletRequest request) {
        PageData pd = null;
        try {
            pd = this.getPageData(request);
            consoleServiceSMOImpl.login(pd);
        }catch (IllegalArgumentException e){
            return DataTransactionFactory.pageResponseJson(pd,ResponseConstant.RESULT_PARAM_ERROR,e.getMessage(),null);
        }catch (SMOException e){
            return DataTransactionFactory.pageResponseJson(pd,e.getResult().getCode(),e.getMessage(),null);
        }catch (Exception e){
            logger.error("异常信息:",e);
            return DataTransactionFactory.pageResponseJson(pd,ResponseConstant.RESULT_CODE_ERROR,"请求参数出错 ",null);
        }
        return pd.getResJson().toJSONString();
    }
    public IConsoleServiceSMO getConsoleServiceSMOImpl() {
        return consoleServiceSMOImpl;
    }
    public void setConsoleServiceSMOImpl(IConsoleServiceSMO consoleServiceSMOImpl) {
        this.consoleServiceSMOImpl = consoleServiceSMOImpl;
    }
}
ConsoleService/src/main/java/com/java110/console/smo/IConsoleServiceSMO.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.common.exception.SMOException;
import com.java110.entity.service.PageData;
import java.util.List;
import java.util.Map;
@@ -21,9 +22,9 @@
    /**
     * 用户登录
     * @param userObj
     * @param pd
     * @return
     * @throws SMOException
     */
    public String login(JSONObject userObj) throws SMOException;
    public void login(PageData pd) throws SMOException;
}
ConsoleService/src/main/java/com/java110/console/smo/impl/ConsoleServiceSMOImpl.java
@@ -2,16 +2,20 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.algorithms.Algorithm;
import com.java110.common.cache.JWTCache;
import com.java110.common.cache.MappingCache;
import com.java110.common.constant.CommonConstant;
import com.java110.common.constant.MappingConstant;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.constant.ServiceCodeConstant;
import com.java110.common.exception.SMOException;
import com.java110.common.factory.AuthenticationFactory;
import com.java110.common.factory.DataTransactionFactory;
import com.java110.common.log.LoggerEngine;
import com.java110.common.util.Assert;
import com.java110.console.smo.IConsoleServiceSMO;
import com.java110.entity.service.PageData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
@@ -40,59 +44,115 @@
     */
    @Override
    public List<Map> getMenuItemsByManageId(String manageId) throws SMOException,IllegalArgumentException{
            //获取组件
            String appId = MappingCache.getValue(MappingConstant.KEY_CONSOLE_SERVICE_APP_ID);
            Assert.hasLength(appId, "组件不能为空");
            String centerServiceUrl = MappingCache.getValue(MappingConstant.KEY_CENTER_SERVICE_URL);
            Assert.hasLength(centerServiceUrl, "中心服务器地址没有配置");
            String securityCode = MappingCache.getValue(MappingConstant.KEY_CONSOLE_SECURITY_CODE);
            Assert.hasLength(securityCode, "签名秘钥没有配置");
            Map paramIn = new HashMap();
            paramIn.put("manageId", manageId);
            paramIn.put("menuGroup",CommonConstant.MENU_GROUP_LEFT);
            String responseMsg = "";
            String requestBody = DataTransactionFactory.createQueryOneCenterServiceRequestJson(appId, manageId, securityCode,
                    DataTransactionFactory.createQueryOneBusinessRequestJson(ServiceCodeConstant.SERVICE_CODE_QUERY_MENU_ITEM,
                    ServiceCodeConstant.SERVICE_CODE_QUERY_MENU_ITEM_NAME, paramIn));
            if (MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_CONSOLE_SERVICE_SECURITY_ON_OFF))) {
                try {
                    requestBody = DataTransactionFactory.encrypt(requestBody, 2048);
                    //调用查询菜单信息
                    HttpHeaders header = new HttpHeaders();
                    header.add(CommonConstant.ENCRYPT, MappingConstant.VALUE_ON);
                    header.add(CommonConstant.ENCRYPT_KEY_SIZE, "2048");
                    HttpEntity<String> httpEntity = new HttpEntity<String>(requestBody, header);
                    responseMsg = restTemplate.postForObject(centerServiceUrl, httpEntity, String.class);
                    responseMsg = DataTransactionFactory.decrypt(responseMsg, 2048);
                }catch (Exception e){
                    logger.error("调用接口失败",e);
                    throw new SMOException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"调用接口失败"+e);
                }
            } else {
                responseMsg = restTemplate.postForObject(centerServiceUrl,requestBody,String.class);
            }
        JSONObject businessObj = DataTransactionFactory.getOneBusinessFromCenterServiceResponseJson(responseMsg);
        Map paramIn = new HashMap();
        paramIn.put("manageId", manageId);
        paramIn.put("menuGroup", CommonConstant.MENU_GROUP_LEFT);
        paramIn.put(CommonConstant.ORDER_USER_ID,manageId);
        paramIn.put(ServiceCodeConstant.SERVICE_CODE,ServiceCodeConstant.SERVICE_CODE_QUERY_MENU_ITEM);
        paramIn.put(ServiceCodeConstant.SERVICE_CODE_NAME,ServiceCodeConstant.SERVICE_CODE_QUERY_MENU_ITEM_NAME);
        JSONObject businessObj = doExecute(paramIn);
        JSONArray menus = businessObj.getJSONArray("menus");
        return menus.toJavaList(Map.class);
    }
    /**
     * 用户登录
     * @param userObj
     * @param pd
     * @return
     * @throws SMOException
     */
    @Override
    public String login(JSONObject userObj) throws SMOException {
        return null;
    public void login(PageData pd) throws SMOException {
        String userCode = pd.getParam().getString("userCode");
        String userPwd = pd.getParam().getString("userPwd");
        String pageSign = pd.getParam().getString("pageSign");
        Assert.hasText(userCode,"用户编码不能为空");
        Assert.hasText(userPwd,"用户密码不能为空");
        Map paramIn = new HashMap();
        paramIn.put("userCode", userCode);
        paramIn.put(CommonConstant.ORDER_USER_ID,CommonConstant.ORDER_DEFAULT_USER_ID);
        paramIn.put(ServiceCodeConstant.SERVICE_CODE,ServiceCodeConstant.SERVICE_CODE_QUERY_USER_LOGIN);
        paramIn.put(ServiceCodeConstant.SERVICE_CODE_NAME,ServiceCodeConstant.SERVICE_CODE_QUERY_USER_LOGIN_NAME);
        //paramIn.put("userPwd", userPwd);
        JSONObject businessObj = doExecute(paramIn);
        JSONObject user = businessObj.getJSONObject("user");
        //String newPwd = AuthenticationFactory.md5UserPassword(userPwd);
        if(!AuthenticationFactory.md5UserPassword(userPwd).equals(user.getString("userPwd"))){
            throw new SMOException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"密码不正确");
        }
        String token = "";
        try {
            Map userMap = new HashMap();
            userMap.put(CommonConstant.LOGIN_USER_ID,user.getString("userId"));
            userMap.put(CommonConstant.LOGIN_USER_NAME,user.getString("userName"));
            token = AuthenticationFactory.createAndSaveToken(userMap);
            pd.setToken(token);
        }catch (Exception e){
            logger.error("登录异常:",e);
            throw new SMOException(ResponseConstant.RESULT_CODE_INNER_ERROR,"系统内部错误,请联系管理员");
        }
        //封装成功信息
        pd.setResJson(DataTransactionFactory.pageResponseJson(pd.getTransactionId(),ResponseConstant.RESULT_CODE_SUCCESS,"登录成功 ",null));
    }
    private JSONObject doExecute(Map paramIn) {
        //获取组件
        String appId = MappingCache.getValue(MappingConstant.KEY_CONSOLE_SERVICE_APP_ID);
        Assert.hasLength(appId, "组件不能为空");
        String centerServiceUrl = MappingCache.getValue(MappingConstant.KEY_CENTER_SERVICE_URL);
        Assert.hasLength(centerServiceUrl, "中心服务器地址没有配置");
        String securityCode = MappingCache.getValue(MappingConstant.KEY_CONSOLE_SECURITY_CODE);
        Assert.hasLength(securityCode, "签名秘钥没有配置");
        String serviceCode = paramIn.get(ServiceCodeConstant.SERVICE_CODE).toString();
        String serviceCodeName = paramIn.get(ServiceCodeConstant.SERVICE_CODE_NAME).toString();
        String userId = paramIn.get(CommonConstant.ORDER_USER_ID).toString();
        if(paramIn.containsKey(ServiceCodeConstant.SERVICE_CODE)){
            paramIn.remove(ServiceCodeConstant.SERVICE_CODE);
        }
        if(paramIn.containsKey(ServiceCodeConstant.SERVICE_CODE_NAME)){
            paramIn.remove(ServiceCodeConstant.SERVICE_CODE_NAME);
        }
        if(paramIn.containsKey(CommonConstant.ORDER_USER_ID)){
            paramIn.remove(CommonConstant.ORDER_USER_ID);
        }
        String responseMsg = "";
        String requestBody = DataTransactionFactory.createQueryOneCenterServiceRequestJson(appId, userId, securityCode,
                DataTransactionFactory.createQueryOneBusinessRequestJson(serviceCode,
                        serviceCodeName, paramIn));
        if (MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_CONSOLE_SERVICE_SECURITY_ON_OFF))) {
            try {
                requestBody = DataTransactionFactory.encrypt(requestBody, 2048);
                //调用查询菜单信息
                HttpHeaders header = new HttpHeaders();
                header.add(CommonConstant.ENCRYPT, MappingConstant.VALUE_ON);
                header.add(CommonConstant.ENCRYPT_KEY_SIZE, "2048");
                HttpEntity<String> httpEntity = new HttpEntity<String>(requestBody, header);
                responseMsg = restTemplate.postForObject(centerServiceUrl, httpEntity, String.class);
                responseMsg = DataTransactionFactory.decrypt(responseMsg, 2048);
            }catch (Exception e){
                logger.error("调用接口失败",e);
                throw new SMOException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"调用接口失败"+e);
            }
        } else {
            responseMsg = restTemplate.postForObject(centerServiceUrl,requestBody,String.class);
        }
        return DataTransactionFactory.getOneBusinessFromCenterServiceResponseJson(responseMsg);
    }
    public RestTemplate getRestTemplate() {
        return restTemplate;
    }
ConsoleService/src/main/resources/application.yml
@@ -1,14 +1,26 @@
jedis:
  pool:
    config:
      maxTotal: 100
      maxIdle: 20
      maxWaitMillis: 20000
    host: 135.192.86.200
    port: 6379
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 10
    leaseExpirationDurationInSeconds: 30
  client:
    serviceUrl:
      defaultZone: http://192.168.31.199:8761/eureka/
      defaultZone: http://135.192.86.200:8761/eureka/
      #defaultZone: http://localhost:8761/eureka/
server:
  port: 7001
  port: 8443
  ssl:
    keyStoreType: PKCS12
    keyAlias: tomcat
    key-store: keystore.p12
    key-store: classpath:keystore.p12
    key-store-password: 12345678
  session:
      cookie:
@@ -18,7 +30,7 @@
    name: console-service
  redis:
    database: 0
    host: 192.168.31.199
    host: 135.192.86.200
    port: 6379
    pool:
      max-active: 300
@@ -35,7 +47,7 @@
    filters: stat,wall,log4j
    poolPreparedStatements: true
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://192.168.31.199:3306/TT
    url: jdbc:mysql://135.192.86.200:3306/TT
    maxPoolPreparedStatementPerConnectionSize: 20
    password: TT@12345678
    testOnBorrow: false
@@ -58,4 +70,36 @@
    suffix: .html
    check-template-location: true
#============== kafka ===================
kafka:
  consumer:
    zookeeper:
      connect: 135.192.86.200:2181
    servers: 135.192.86.200:9092
    enable:
      auto:
        commit: true
    session:
      timeout: 6000
    auto:
      commit:
        interval: 100
      offset:
        reset: latest
    topic: test
    group:
      id: consoleService
    concurrency: 10
  producer:
    zookeeper:
      connect: 135.192.86.200:2181
    servers: 135.192.86.200:9092
    retries: 0
    batch:
      size: 4096
    linger: 1
    buffer:
      memory: 40960
ConsoleService/src/main/resources/data/login.json
@@ -0,0 +1,11 @@
{
  "meta":{
    "code":"0000",//主要用于,日志记录
    "message":"成功",
    "responseTime":"",
    "transactionId":"10001010" //由系统返回
  },
  "data":{
    //这里是返回参数
  }
}
ConsoleService/src/main/resources/html/list_template.html
New file
@@ -0,0 +1,1489 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta charset="utf-8" />
    <title>jqGrid - Ace Admin</title>
    <meta name="description" content="Dynamic tables and grids using jqGrid plugin" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    <!-- bootstrap & fontawesome -->
    <link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
    <link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
    <!-- page specific plugin styles -->
    <link rel="stylesheet" href="../assets/css/jquery-ui.min.css" />
    <link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" />
    <link rel="stylesheet" href="../assets/css/ui.jqgrid.min.css" />
    <!-- text fonts -->
    <link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
    <!-- ace styles -->
    <link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
    <!--[if lte IE 9]>
    <link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
    <![endif]-->
    <link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
    <link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
    <!--[if lte IE 9]>
    <link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
    <![endif]-->
    <!-- inline styles related to this page -->
    <!-- ace settings handler -->
    <script src="../assets/js/ace-extra.min.js"></script>
    <!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
    <!--[if lte IE 8]>
    <script src="../assets/js/html5shiv.min.js"></script>
    <script src="../assets/js/respond.min.js"></script>
    <![endif]-->
</head>
<body class="no-skin">
<div id="navbar" class="navbar navbar-default          ace-save-state">
    <div class="navbar-container ace-save-state" id="navbar-container">
        <button type="button" class="navbar-toggle menu-toggler pull-left" id="menu-toggler" data-target="#sidebar">
            <span class="sr-only">Toggle sidebar</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
        <div class="navbar-header pull-left">
            <a href="index.html" class="navbar-brand">
                <small>
                    <i class="fa fa-leaf"></i>
                    Ace Admin
                </small>
            </a>
        </div>
        <div class="navbar-buttons navbar-header pull-right" role="navigation">
            <ul class="nav ace-nav">
                <li class="grey dropdown-modal">
                    <a data-toggle="dropdown" class="dropdown-toggle" href="#">
                        <i class="ace-icon fa fa-tasks"></i>
                        <span class="badge badge-grey">4</span>
                    </a>
                    <ul class="dropdown-menu-right dropdown-navbar dropdown-menu dropdown-caret dropdown-close">
                        <li class="dropdown-header">
                            <i class="ace-icon fa fa-check"></i>
                            4 Tasks to complete
                        </li>
                        <li class="dropdown-content">
                            <ul class="dropdown-menu dropdown-navbar">
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                            <span class="pull-left">Software Update</span>
                                            <span class="pull-right">65%</span>
                                        </div>
                                        <div class="progress progress-mini">
                                            <div style="width:65%" class="progress-bar"></div>
                                        </div>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                            <span class="pull-left">Hardware Upgrade</span>
                                            <span class="pull-right">35%</span>
                                        </div>
                                        <div class="progress progress-mini">
                                            <div style="width:35%" class="progress-bar progress-bar-danger"></div>
                                        </div>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                            <span class="pull-left">Unit Testing</span>
                                            <span class="pull-right">15%</span>
                                        </div>
                                        <div class="progress progress-mini">
                                            <div style="width:15%" class="progress-bar progress-bar-warning"></div>
                                        </div>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                            <span class="pull-left">Bug Fixes</span>
                                            <span class="pull-right">90%</span>
                                        </div>
                                        <div class="progress progress-mini progress-striped active">
                                            <div style="width:90%" class="progress-bar progress-bar-success"></div>
                                        </div>
                                    </a>
                                </li>
                            </ul>
                        </li>
                        <li class="dropdown-footer">
                            <a href="#">
                                See tasks with details
                                <i class="ace-icon fa fa-arrow-right"></i>
                            </a>
                        </li>
                    </ul>
                </li>
                <li class="purple dropdown-modal">
                    <a data-toggle="dropdown" class="dropdown-toggle" href="#">
                        <i class="ace-icon fa fa-bell icon-animated-bell"></i>
                        <span class="badge badge-important">8</span>
                    </a>
                    <ul class="dropdown-menu-right dropdown-navbar navbar-pink dropdown-menu dropdown-caret dropdown-close">
                        <li class="dropdown-header">
                            <i class="ace-icon fa fa-exclamation-triangle"></i>
                            8 Notifications
                        </li>
                        <li class="dropdown-content">
                            <ul class="dropdown-menu dropdown-navbar navbar-pink">
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                                    <span class="pull-left">
                                                        <i class="btn btn-xs no-hover btn-pink fa fa-comment"></i>
                                                        New Comments
                                                    </span>
                                            <span class="pull-right badge badge-info">+12</span>
                                        </div>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <i class="btn btn-xs btn-primary fa fa-user"></i>
                                        Bob just signed up as an editor ...
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                                    <span class="pull-left">
                                                        <i class="btn btn-xs no-hover btn-success fa fa-shopping-cart"></i>
                                                        New Orders
                                                    </span>
                                            <span class="pull-right badge badge-success">+8</span>
                                        </div>
                                    </a>
                                </li>
                                <li>
                                    <a href="#">
                                        <div class="clearfix">
                                                    <span class="pull-left">
                                                        <i class="btn btn-xs no-hover btn-info fa fa-twitter"></i>
                                                        Followers
                                                    </span>
                                            <span class="pull-right badge badge-info">+11</span>
                                        </div>
                                    </a>
                                </li>
                            </ul>
                        </li>
                        <li class="dropdown-footer">
                            <a href="#">
                                See all notifications
                                <i class="ace-icon fa fa-arrow-right"></i>
                            </a>
                        </li>
                    </ul>
                </li>
                <li class="green dropdown-modal">
                    <a data-toggle="dropdown" class="dropdown-toggle" href="#">
                        <i class="ace-icon fa fa-envelope icon-animated-vertical"></i>
                        <span class="badge badge-success">5</span>
                    </a>
                    <ul class="dropdown-menu-right dropdown-navbar dropdown-menu dropdown-caret dropdown-close">
                        <li class="dropdown-header">
                            <i class="ace-icon fa fa-envelope-o"></i>
                            5 Messages
                        </li>
                        <li class="dropdown-content">
                            <ul class="dropdown-menu dropdown-navbar">
                                <li>
                                    <a href="#" class="clearfix">
                                        <img src="../assets/images/avatars/avatar.png" class="msg-photo" alt="Alex's Avatar" />
                                        <span class="msg-body">
                                                    <span class="msg-title">
                                                        <span class="blue">Alex:</span>
                                                        Ciao sociis natoque penatibus et auctor ...
                                                    </span>
                                                    <span class="msg-time">
                                                        <i class="ace-icon fa fa-clock-o"></i>
                                                        <span>a moment ago</span>
                                                    </span>
                                                </span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" class="clearfix">
                                        <img src="../assets/images/avatars/avatar3.png" class="msg-photo" alt="Susan's Avatar" />
                                        <span class="msg-body">
                                                    <span class="msg-title">
                                                        <span class="blue">Susan:</span>
                                                        Vestibulum id ligula porta felis euismod ...
                                                    </span>
                                                    <span class="msg-time">
                                                        <i class="ace-icon fa fa-clock-o"></i>
                                                        <span>20 minutes ago</span>
                                                    </span>
                                                </span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" class="clearfix">
                                        <img src="../assets/images/avatars/avatar4.png" class="msg-photo" alt="Bob's Avatar" />
                                        <span class="msg-body">
                                                    <span class="msg-title">
                                                        <span class="blue">Bob:</span>
                                                        Nullam quis risus eget urna mollis ornare ...
                                                    </span>
                                                    <span class="msg-time">
                                                        <i class="ace-icon fa fa-clock-o"></i>
                                                        <span>3:15 pm</span>
                                                    </span>
                                                </span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" class="clearfix">
                                        <img src="../assets/images/avatars/avatar2.png" class="msg-photo" alt="Kate's Avatar" />
                                        <span class="msg-body">
                                                    <span class="msg-title">
                                                        <span class="blue">Kate:</span>
                                                        Ciao sociis natoque eget urna mollis ornare ...
                                                    </span>
                                                    <span class="msg-time">
                                                        <i class="ace-icon fa fa-clock-o"></i>
                                                        <span>1:33 pm</span>
                                                    </span>
                                                </span>
                                    </a>
                                </li>
                                <li>
                                    <a href="#" class="clearfix">
                                        <img src="../assets/images/avatars/avatar5.png" class="msg-photo" alt="Fred's Avatar" />
                                        <span class="msg-body">
                                                    <span class="msg-title">
                                                        <span class="blue">Fred:</span>
                                                        Vestibulum id penatibus et auctor  ...
                                                    </span>
                                                    <span class="msg-time">
                                                        <i class="ace-icon fa fa-clock-o"></i>
                                                        <span>10:09 am</span>
                                                    </span>
                                                </span>
                                    </a>
                                </li>
                            </ul>
                        </li>
                        <li class="dropdown-footer">
                            <a href="inbox.html">
                                See all messages
                                <i class="ace-icon fa fa-arrow-right"></i>
                            </a>
                        </li>
                    </ul>
                </li>
                <li class="light-blue dropdown-modal">
                    <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                        <img class="nav-user-photo" src="../assets/images/avatars/user.jpg" alt="Jason's Photo" />
                        <span class="user-info">
                                    <small>Welcome,</small>
                                    Jason
                                </span>
                        <i class="ace-icon fa fa-caret-down"></i>
                    </a>
                    <ul class="user-menu dropdown-menu-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close">
                        <li>
                            <a href="#">
                                <i class="ace-icon fa fa-cog"></i>
                                Settings
                            </a>
                        </li>
                        <li>
                            <a href="profile.html">
                                <i class="ace-icon fa fa-user"></i>
                                Profile
                            </a>
                        </li>
                        <li class="divider"></li>
                        <li>
                            <a href="#">
                                <i class="ace-icon fa fa-power-off"></i>
                                Logout
                            </a>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div><!-- /.navbar-container -->
</div>
<div class="main-container ace-save-state" id="main-container">
    <script type="text/javascript">
                try{ace.settings.loadState('main-container')}catch(e){}
            </script>
    <div id="sidebar" class="sidebar                  responsive                    ace-save-state">
        <script type="text/javascript">
                    try{ace.settings.loadState('sidebar')}catch(e){}
                </script>
        <div class="sidebar-shortcuts" id="sidebar-shortcuts">
            <div class="sidebar-shortcuts-large" id="sidebar-shortcuts-large">
                <button class="btn btn-success">
                    <i class="ace-icon fa fa-signal"></i>
                </button>
                <button class="btn btn-info">
                    <i class="ace-icon fa fa-pencil"></i>
                </button>
                <button class="btn btn-warning">
                    <i class="ace-icon fa fa-users"></i>
                </button>
                <button class="btn btn-danger">
                    <i class="ace-icon fa fa-cogs"></i>
                </button>
            </div>
            <div class="sidebar-shortcuts-mini" id="sidebar-shortcuts-mini">
                <span class="btn btn-success"></span>
                <span class="btn btn-info"></span>
                <span class="btn btn-warning"></span>
                <span class="btn btn-danger"></span>
            </div>
        </div><!-- /.sidebar-shortcuts -->
        <ul class="nav nav-list">
            <li class="">
                <a href="index.html">
                    <i class="menu-icon fa fa-tachometer"></i>
                    <span class="menu-text"> Dashboard </span>
                </a>
                <b class="arrow"></b>
            </li>
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-desktop"></i>
                    <span class="menu-text">
                                UI &amp; Elements
                            </span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href="#" class="dropdown-toggle">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Layouts
                            <b class="arrow fa fa-angle-down"></b>
                        </a>
                        <b class="arrow"></b>
                        <ul class="submenu">
                            <li class="">
                                <a href="top-menu.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Top Menu
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="two-menu-1.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Two Menus 1
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="two-menu-2.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Two Menus 2
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="mobile-menu-1.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Default Mobile Menu
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="mobile-menu-2.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Mobile Menu 2
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="mobile-menu-3.html">
                                    <i class="menu-icon fa fa-caret-right"></i>
                                    Mobile Menu 3
                                </a>
                                <b class="arrow"></b>
                            </li>
                        </ul>
                    </li>
                    <li class="">
                        <a href="typography.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Typography
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="elements.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Elements
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="buttons.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Buttons &amp; Icons
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="content-slider.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Content Sliders
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="treeview.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Treeview
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="jquery-ui.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            jQuery UI
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="nestable-list.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Nestable Lists
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="#" class="dropdown-toggle">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Three Level Menu
                            <b class="arrow fa fa-angle-down"></b>
                        </a>
                        <b class="arrow"></b>
                        <ul class="submenu">
                            <li class="">
                                <a href="#">
                                    <i class="menu-icon fa fa-leaf green"></i>
                                    Item #1
                                </a>
                                <b class="arrow"></b>
                            </li>
                            <li class="">
                                <a href="#" class="dropdown-toggle">
                                    <i class="menu-icon fa fa-pencil orange"></i>
                                    4th level
                                    <b class="arrow fa fa-angle-down"></b>
                                </a>
                                <b class="arrow"></b>
                                <ul class="submenu">
                                    <li class="">
                                        <a href="#">
                                            <i class="menu-icon fa fa-plus purple"></i>
                                            Add Product
                                        </a>
                                        <b class="arrow"></b>
                                    </li>
                                    <li class="">
                                        <a href="#">
                                            <i class="menu-icon fa fa-eye pink"></i>
                                            View Products
                                        </a>
                                        <b class="arrow"></b>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li class="active open">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-list"></i>
                    <span class="menu-text"> Tables </span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href="tables.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Simple &amp; Dynamic
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="active">
                        <a href="jqgrid.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            jqGrid plugin
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-pencil-square-o"></i>
                    <span class="menu-text"> Forms </span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href="form-elements.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Form Elements
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="form-elements-2.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Form Elements 2
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="form-wizard.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Wizard &amp; Validation
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="wysiwyg.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Wysiwyg &amp; Markdown
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="dropzone.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Dropzone File Upload
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
            <li class="">
                <a href="widgets.html">
                    <i class="menu-icon fa fa-list-alt"></i>
                    <span class="menu-text"> Widgets </span>
                </a>
                <b class="arrow"></b>
            </li>
            <li class="">
                <a href="calendar.html">
                    <i class="menu-icon fa fa-calendar"></i>
                    <span class="menu-text">
                                Calendar
                                <span class="badge badge-transparent tooltip-error" title="2 Important Events">
                                    <i class="ace-icon fa fa-exclamation-triangle red bigger-130"></i>
                                </span>
                            </span>
                </a>
                <b class="arrow"></b>
            </li>
            <li class="">
                <a href="gallery.html">
                    <i class="menu-icon fa fa-picture-o"></i>
                    <span class="menu-text"> Gallery </span>
                </a>
                <b class="arrow"></b>
            </li>
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-tag"></i>
                    <span class="menu-text"> More Pages </span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href="profile.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            User Profile
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="inbox.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Inbox
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="pricing.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Pricing Tables
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="invoice.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Invoice
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="timeline.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Timeline
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="search.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Search Results
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="email.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Email Templates
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="login.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Login &amp; Register
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
            <li class="">
                <a href="#" class="dropdown-toggle">
                    <i class="menu-icon fa fa-file-o"></i>
                    <span class="menu-text">
                                Other Pages
                                <span class="badge badge-primary">5</span>
                            </span>
                    <b class="arrow fa fa-angle-down"></b>
                </a>
                <b class="arrow"></b>
                <ul class="submenu">
                    <li class="">
                        <a href="faq.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            FAQ
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="error-404.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Error 404
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="error-500.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Error 500
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="grid.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Grid
                        </a>
                        <b class="arrow"></b>
                    </li>
                    <li class="">
                        <a href="blank.html">
                            <i class="menu-icon fa fa-caret-right"></i>
                            Blank Page
                        </a>
                        <b class="arrow"></b>
                    </li>
                </ul>
            </li>
        </ul><!-- /.nav-list -->
        <div class="sidebar-toggle sidebar-collapse" id="sidebar-collapse">
            <i id="sidebar-toggle-icon" class="ace-icon fa fa-angle-double-left ace-save-state" data-icon1="ace-icon fa fa-angle-double-left" data-icon2="ace-icon fa fa-angle-double-right"></i>
        </div>
    </div>
    <div class="main-content">
        <div class="main-content-inner">
            <div class="breadcrumbs ace-save-state" id="breadcrumbs">
                <ul class="breadcrumb">
                    <li>
                        <i class="ace-icon fa fa-home home-icon"></i>
                        <a href="#">Home</a>
                    </li>
                    <li>
                        <a href="#">Tables</a>
                    </li>
                    <li class="active">jqGrid plugin</li>
                </ul><!-- /.breadcrumb -->
                <div class="nav-search" id="nav-search">
                    <form class="form-search">
                                <span class="input-icon">
                                    <input type="text" placeholder="Search ..." class="nav-search-input" id="nav-search-input" autocomplete="off" />
                                    <i class="ace-icon fa fa-search nav-search-icon"></i>
                                </span>
                    </form>
                </div><!-- /.nav-search -->
            </div>
            <div class="page-content">
                <div class="ace-settings-container" id="ace-settings-container">
                    <div class="btn btn-app btn-xs btn-warning ace-settings-btn" id="ace-settings-btn">
                        <i class="ace-icon fa fa-cog bigger-130"></i>
                    </div>
                    <div class="ace-settings-box clearfix" id="ace-settings-box">
                        <div class="pull-left width-50">
                            <div class="ace-settings-item">
                                <div class="pull-left">
                                    <select id="skin-colorpicker" class="hide">
                                        <option data-skin="no-skin" value="#438EB9">#438EB9</option>
                                        <option data-skin="skin-1" value="#222A2D">#222A2D</option>
                                        <option data-skin="skin-2" value="#C6487E">#C6487E</option>
                                        <option data-skin="skin-3" value="#D0D0D0">#D0D0D0</option>
                                    </select>
                                </div>
                                <span>&nbsp; Choose Skin</span>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-navbar" autocomplete="off" />
                                <label class="lbl" for="ace-settings-navbar"> Fixed Navbar</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-sidebar" autocomplete="off" />
                                <label class="lbl" for="ace-settings-sidebar"> Fixed Sidebar</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-breadcrumbs" autocomplete="off" />
                                <label class="lbl" for="ace-settings-breadcrumbs"> Fixed Breadcrumbs</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-rtl" autocomplete="off" />
                                <label class="lbl" for="ace-settings-rtl"> Right To Left (rtl)</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2 ace-save-state" id="ace-settings-add-container" autocomplete="off" />
                                <label class="lbl" for="ace-settings-add-container">
                                    Inside
                                    <b>.container</b>
                                </label>
                            </div>
                        </div><!-- /.pull-left -->
                        <div class="pull-left width-50">
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-hover" autocomplete="off" />
                                <label class="lbl" for="ace-settings-hover"> Submenu on Hover</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-compact" autocomplete="off" />
                                <label class="lbl" for="ace-settings-compact"> Compact Sidebar</label>
                            </div>
                            <div class="ace-settings-item">
                                <input type="checkbox" class="ace ace-checkbox-2" id="ace-settings-highlight" autocomplete="off" />
                                <label class="lbl" for="ace-settings-highlight"> Alt. Active Item</label>
                            </div>
                        </div><!-- /.pull-left -->
                    </div><!-- /.ace-settings-box -->
                </div><!-- /.ace-settings-container -->
                <div class="page-header">
                    <h1>
                        jqGrid
                        <small>
                            <i class="ace-icon fa fa-angle-double-right"></i>
                            Dynamic tables and grids using jqGrid plugin
                        </small>
                    </h1>
                </div><!-- /.page-header -->
                <div class="row">
                    <div class="col-xs-12">
                        <!-- PAGE CONTENT BEGINS -->
                        <div class="alert alert-info">
                            <button class="close" data-dismiss="alert">
                                <i class="ace-icon fa fa-times"></i>
                            </button>
                            <i class="ace-icon fa fa-hand-o-right"></i>
                            Please note that demo server is not configured to save the changes, therefore you may see an error message.
                        </div>
                        <table id="grid-table"></table>
                        <div id="grid-pager"></div>
                        <!-- PAGE CONTENT ENDS -->
                    </div><!-- /.col -->
                </div><!-- /.row -->
            </div><!-- /.page-content -->
        </div>
    </div><!-- /.main-content -->
    <div class="footer">
        <div class="footer-inner">
            <div class="footer-content">
                        <span class="bigger-120">
                            <span class="blue bolder">Ace</span>
                            Application &copy; 2013-2014
                        </span>
                &nbsp; &nbsp;
                <span class="action-buttons">
                            <a href="#">
                                <i class="ace-icon fa fa-twitter-square light-blue bigger-150"></i>
                            </a>
                            <a href="#">
                                <i class="ace-icon fa fa-facebook-square text-primary bigger-150"></i>
                            </a>
                            <a href="#">
                                <i class="ace-icon fa fa-rss-square orange bigger-150"></i>
                            </a>
                        </span>
            </div>
        </div>
    </div>
    <a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
        <i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
    </a>
</div><!-- /.main-container -->
<!-- basic scripts -->
<!--[if !IE]> -->
<script src="../assets/js/jquery-2.1.4.min.js"></script>
<!-- <![endif]-->
<!--[if IE]>
<script src="../assets/js/jquery-1.11.3.min.js"></script>
<![endif]-->
<script type="text/javascript">
            if('ontouchstart' in document.documentElement) document.write("<script src='../assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
        </script>
<script src="../assets/js/bootstrap.min.js"></script>
<!-- page specific plugin scripts -->
<script src="../assets/js/bootstrap-datepicker.min.js"></script>
<script src="../assets/js/jquery.jqGrid.min.js"></script>
<script src="../assets/js/grid.locale-en.js"></script>
<!-- ace scripts -->
<script src="../assets/js/ace-elements.min.js"></script>
<script src="../assets/js/ace.min.js"></script>
<!-- inline scripts related to this page -->
<script type="text/javascript">
            var grid_data =
            [
                {id:"1",name:"Desktop Computer",note:"note",stock:"Yes",ship:"FedEx", sdate:"2007-12-03"},
                {id:"2",name:"Laptop",note:"Long text ",stock:"Yes",ship:"InTime",sdate:"2007-12-03"},
                {id:"3",name:"LCD Monitor",note:"note3",stock:"Yes",ship:"TNT",sdate:"2007-12-03"},
                {id:"4",name:"Speakers",note:"note",stock:"No",ship:"ARAMEX",sdate:"2007-12-03"},
                {id:"5",name:"Laser Printer",note:"note2",stock:"Yes",ship:"FedEx",sdate:"2007-12-03"},
                {id:"6",name:"Play Station",note:"note3",stock:"No", ship:"FedEx",sdate:"2007-12-03"},
                {id:"7",name:"Mobile Telephone",note:"note",stock:"Yes",ship:"ARAMEX",sdate:"2007-12-03"},
                {id:"8",name:"Server",note:"note2",stock:"Yes",ship:"TNT",sdate:"2007-12-03"},
                {id:"9",name:"Matrix Printer",note:"note3",stock:"No", ship:"FedEx",sdate:"2007-12-03"},
                {id:"10",name:"Desktop Computer",note:"note",stock:"Yes",ship:"FedEx", sdate:"2007-12-03"},
                {id:"11",name:"Laptop",note:"Long text ",stock:"Yes",ship:"InTime",sdate:"2007-12-03"},
                {id:"12",name:"LCD Monitor",note:"note3",stock:"Yes",ship:"TNT",sdate:"2007-12-03"},
                {id:"13",name:"Speakers",note:"note",stock:"No",ship:"ARAMEX",sdate:"2007-12-03"},
                {id:"14",name:"Laser Printer",note:"note2",stock:"Yes",ship:"FedEx",sdate:"2007-12-03"},
                {id:"15",name:"Play Station",note:"note3",stock:"No", ship:"FedEx",sdate:"2007-12-03"},
                {id:"16",name:"Mobile Telephone",note:"note",stock:"Yes",ship:"ARAMEX",sdate:"2007-12-03"},
                {id:"17",name:"Server",note:"note2",stock:"Yes",ship:"TNT",sdate:"2007-12-03"},
                {id:"18",name:"Matrix Printer",note:"note3",stock:"No", ship:"FedEx",sdate:"2007-12-03"},
                {id:"19",name:"Matrix Printer",note:"note3",stock:"No", ship:"FedEx",sdate:"2007-12-03"},
                {id:"20",name:"Desktop Computer",note:"note",stock:"Yes",ship:"FedEx", sdate:"2007-12-03"},
                {id:"21",name:"Laptop",note:"Long text ",stock:"Yes",ship:"InTime",sdate:"2007-12-03"},
                {id:"22",name:"LCD Monitor",note:"note3",stock:"Yes",ship:"TNT",sdate:"2007-12-03"},
                {id:"23",name:"Speakers",note:"note",stock:"No",ship:"ARAMEX",sdate:"2007-12-03"}
            ];
            var subgrid_data =
            [
             {id:"1", name:"sub grid item 1", qty: 11},
             {id:"2", name:"sub grid item 2", qty: 3},
             {id:"3", name:"sub grid item 3", qty: 12},
             {id:"4", name:"sub grid item 4", qty: 5},
             {id:"5", name:"sub grid item 5", qty: 2},
             {id:"6", name:"sub grid item 6", qty: 9},
             {id:"7", name:"sub grid item 7", qty: 3},
             {id:"8", name:"sub grid item 8", qty: 8}
            ];
            jQuery(function($) {
                var grid_selector = "#grid-table";
                var pager_selector = "#grid-pager";
                var parent_column = $(grid_selector).closest('[class*="col-"]');
                //resize to fit page size
                $(window).on('resize.jqGrid', function () {
                    $(grid_selector).jqGrid( 'setGridWidth', parent_column.width() );
                })
                //resize on sidebar collapse/expand
                $(document).on('settings.ace.jqGrid' , function(ev, event_name, collapsed) {
                    if( event_name === 'sidebar_collapsed' || event_name === 'main_container_fixed' ) {
                        //setTimeout is for webkit only to give time for DOM changes and then redraw!!!
                        setTimeout(function() {
                            $(grid_selector).jqGrid( 'setGridWidth', parent_column.width() );
                        }, 20);
                    }
                })
                //if your grid is inside another element, for example a tab pane, you should use its parent's width:
                /**
                $(window).on('resize.jqGrid', function () {
                    var parent_width = $(grid_selector).closest('.tab-pane').width();
                    $(grid_selector).jqGrid( 'setGridWidth', parent_width );
                })
                //and also set width when tab pane becomes visible
                $('#myTab a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
                  if($(e.target).attr('href') == '#mygrid') {
                    var parent_width = $(grid_selector).closest('.tab-pane').width();
                    $(grid_selector).jqGrid( 'setGridWidth', parent_width );
                  }
                })
                */
                jQuery(grid_selector).jqGrid({
                    //direction: "rtl",
                    //subgrid options
                    subGrid : true,
                    //subGridModel: [{ name : ['No','Item Name','Qty'], width : [55,200,80] }],
                    //datatype: "xml",
                    subGridOptions : {
                        plusicon : "ace-icon fa fa-plus center bigger-110 blue",
                        minusicon  : "ace-icon fa fa-minus center bigger-110 blue",
                        openicon : "ace-icon fa fa-chevron-right center orange"
                    },
                    //for this example we are using local data
                    subGridRowExpanded: function (subgridDivId, rowId) {
                        var subgridTableId = subgridDivId + "_t";
                        $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>");
                        $("#" + subgridTableId).jqGrid({
                            datatype: 'local',
                            data: subgrid_data,
                            colNames: ['No','Item Name','Qty'],
                            colModel: [
                                { name: 'id', width: 50 },
                                { name: 'name', width: 150 },
                                { name: 'qty', width: 50 }
                            ]
                        });
                    },
                    data: grid_data,
                    datatype: "local",
                    height: 250,
                    colNames:[' ', 'ID','Last Sales','Name', 'Stock', 'Ship via','Notes'],
                    colModel:[
                        {name:'myac',index:'', width:80, fixed:true, sortable:false, resize:false,
                            formatter:'actions',
                            formatoptions:{
                                keys:true,
                                //delbutton: false,//disable delete button
                                delOptions:{recreateForm: true, beforeShowForm:beforeDeleteCallback},
                                //editformbutton:true, editOptions:{recreateForm: true, beforeShowForm:beforeEditCallback}
                            }
                        },
                        {name:'id',index:'id', width:60, sorttype:"int", editable: true},
                        {name:'sdate',index:'sdate',width:90, editable:true, sorttype:"date",unformat: pickDate},
                        {name:'name',index:'name', width:150,editable: true,editoptions:{size:"20",maxlength:"30"}},
                        {name:'stock',index:'stock', width:70, editable: true,edittype:"checkbox",editoptions: {value:"Yes:No"},unformat: aceSwitch},
                        {name:'ship',index:'ship', width:90, editable: true,edittype:"select",editoptions:{value:"FE:FedEx;IN:InTime;TN:TNT;AR:ARAMEX"}},
                        {name:'note',index:'note', width:150, sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"10"}}
                    ],
                    viewrecords : true,
                    rowNum:10,
                    rowList:[10,20,30],
                    pager : pager_selector,
                    altRows: true,
                    //toppager: true,
                    multiselect: true,
                    //multikey: "ctrlKey",
                    multiboxonly: true,
                    loadComplete : function() {
                        var table = this;
                        setTimeout(function(){
                            styleCheckbox(table);
                            updateActionIcons(table);
                            updatePagerIcons(table);
                            enableTooltips(table);
                        }, 0);
                    },
                    editurl: "./dummy.php",//nothing is saved
                    caption: "jqGrid with inline editing"
                    //,autowidth: true,
                    /**
                    ,
                    grouping:true,
                    groupingView : {
                         groupField : ['name'],
                         groupDataSorted : true,
                         plusicon : 'fa fa-chevron-down bigger-110',
                         minusicon : 'fa fa-chevron-up bigger-110'
                    },
                    caption: "Grouping"
                    */
                });
                $(window).triggerHandler('resize.jqGrid');//trigger window resize to make the grid get the correct size
                //enable search/filter toolbar
                //jQuery(grid_selector).jqGrid('filterToolbar',{defaultSearch:true,stringResult:true})
                //jQuery(grid_selector).filterToolbar({});
                //switch element when editing inline
                function aceSwitch( cellvalue, options, cell ) {
                    setTimeout(function(){
                        $(cell) .find('input[type=checkbox]')
                            .addClass('ace ace-switch ace-switch-5')
                            .after('<span class="lbl"></span>');
                    }, 0);
                }
                //enable datepicker
                function pickDate( cellvalue, options, cell ) {
                    setTimeout(function(){
                        $(cell) .find('input[type=text]')
                            .datepicker({format:'yyyy-mm-dd' , autoclose:true});
                    }, 0);
                }
                //navButtons
                jQuery(grid_selector).jqGrid('navGrid',pager_selector,
                    {     //navbar options
                        edit: true,
                        editicon : 'ace-icon fa fa-pencil blue',
                        add: true,
                        addicon : 'ace-icon fa fa-plus-circle purple',
                        del: true,
                        delicon : 'ace-icon fa fa-trash-o red',
                        search: true,
                        searchicon : 'ace-icon fa fa-search orange',
                        refresh: true,
                        refreshicon : 'ace-icon fa fa-refresh green',
                        view: true,
                        viewicon : 'ace-icon fa fa-search-plus grey',
                    },
                    {
                        //edit record form
                        //closeAfterEdit: true,
                        //width: 700,
                        recreateForm: true,
                        beforeShowForm : function(e) {
                            var form = $(e[0]);
                            form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
                            style_edit_form(form);
                        }
                    },
                    {
                        //new record form
                        //width: 700,
                        closeAfterAdd: true,
                        recreateForm: true,
                        viewPagerButtons: false,
                        beforeShowForm : function(e) {
                            var form = $(e[0]);
                            form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar')
                            .wrapInner('<div class="widget-header" />')
                            style_edit_form(form);
                        }
                    },
                    {
                        //delete record form
                        recreateForm: true,
                        beforeShowForm : function(e) {
                            var form = $(e[0]);
                            if(form.data('styled')) return false;
                            form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
                            style_delete_form(form);
                            form.data('styled', true);
                        },
                        onClick : function(e) {
                            //alert(1);
                        }
                    },
                    {
                        //search form
                        recreateForm: true,
                        afterShowSearch: function(e){
                            var form = $(e[0]);
                            form.closest('.ui-jqdialog').find('.ui-jqdialog-title').wrap('<div class="widget-header" />')
                            style_search_form(form);
                        },
                        afterRedraw: function(){
                            style_search_filters($(this));
                        }
                        ,
                        multipleSearch: true,
                        /**
                        multipleGroup:true,
                        showQuery: true
                        */
                    },
                    {
                        //view record form
                        recreateForm: true,
                        beforeShowForm: function(e){
                            var form = $(e[0]);
                            form.closest('.ui-jqdialog').find('.ui-jqdialog-title').wrap('<div class="widget-header" />')
                        }
                    }
                )
                function style_edit_form(form) {
                    //enable datepicker on "sdate" field and switches for "stock" field
                    form.find('input[name=sdate]').datepicker({format:'yyyy-mm-dd' , autoclose:true})
                    form.find('input[name=stock]').addClass('ace ace-switch ace-switch-5').after('<span class="lbl"></span>');
                               //don't wrap inside a label element, the checkbox value won't be submitted (POST'ed)
                              //.addClass('ace ace-switch ace-switch-5').wrap('<label class="inline" />').after('<span class="lbl"></span>');
                    //update buttons classes
                    var buttons = form.next().find('.EditButton .fm-button');
                    buttons.addClass('btn btn-sm').find('[class*="-icon"]').hide();//ui-icon, s-icon
                    buttons.eq(0).addClass('btn-primary').prepend('<i class="ace-icon fa fa-check"></i>');
                    buttons.eq(1).prepend('<i class="ace-icon fa fa-times"></i>')
                    buttons = form.next().find('.navButton a');
                    buttons.find('.ui-icon').hide();
                    buttons.eq(0).append('<i class="ace-icon fa fa-chevron-left"></i>');
                    buttons.eq(1).append('<i class="ace-icon fa fa-chevron-right"></i>');
                }
                function style_delete_form(form) {
                    var buttons = form.next().find('.EditButton .fm-button');
                    buttons.addClass('btn btn-sm btn-white btn-round').find('[class*="-icon"]').hide();//ui-icon, s-icon
                    buttons.eq(0).addClass('btn-danger').prepend('<i class="ace-icon fa fa-trash-o"></i>');
                    buttons.eq(1).addClass('btn-default').prepend('<i class="ace-icon fa fa-times"></i>')
                }
                function style_search_filters(form) {
                    form.find('.delete-rule').val('X');
                    form.find('.add-rule').addClass('btn btn-xs btn-primary');
                    form.find('.add-group').addClass('btn btn-xs btn-success');
                    form.find('.delete-group').addClass('btn btn-xs btn-danger');
                }
                function style_search_form(form) {
                    var dialog = form.closest('.ui-jqdialog');
                    var buttons = dialog.find('.EditTable')
                    buttons.find('.EditButton a[id*="_reset"]').addClass('btn btn-sm btn-info').find('.ui-icon').attr('class', 'ace-icon fa fa-retweet');
                    buttons.find('.EditButton a[id*="_query"]').addClass('btn btn-sm btn-inverse').find('.ui-icon').attr('class', 'ace-icon fa fa-comment-o');
                    buttons.find('.EditButton a[id*="_search"]').addClass('btn btn-sm btn-purple').find('.ui-icon').attr('class', 'ace-icon fa fa-search');
                }
                function beforeDeleteCallback(e) {
                    var form = $(e[0]);
                    if(form.data('styled')) return false;
                    form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
                    style_delete_form(form);
                    form.data('styled', true);
                }
                function beforeEditCallback(e) {
                    var form = $(e[0]);
                    form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
                    style_edit_form(form);
                }
                //it causes some flicker when reloading or navigating grid
                //it may be possible to have some custom formatter to do this as the grid is being created to prevent this
                //or go back to default browser checkbox styles for the grid
                function styleCheckbox(table) {
                /**
                    $(table).find('input:checkbox').addClass('ace')
                    .wrap('<label />')
                    .after('<span class="lbl align-top" />')
                    $('.ui-jqgrid-labels th[id*="_cb"]:first-child')
                    .find('input.cbox[type=checkbox]').addClass('ace')
                    .wrap('<label />').after('<span class="lbl align-top" />');
                */
                }
                //unlike navButtons icons, action icons in rows seem to be hard-coded
                //you can change them like this in here if you want
                function updateActionIcons(table) {
                    /**
                    var replacement =
                    {
                        'ui-ace-icon fa fa-pencil' : 'ace-icon fa fa-pencil blue',
                        'ui-ace-icon fa fa-trash-o' : 'ace-icon fa fa-trash-o red',
                        'ui-icon-disk' : 'ace-icon fa fa-check green',
                        'ui-icon-cancel' : 'ace-icon fa fa-times red'
                    };
                    $(table).find('.ui-pg-div span.ui-icon').each(function(){
                        var icon = $(this);
                        var $class = $.trim(icon.attr('class').replace('ui-icon', ''));
                        if($class in replacement) icon.attr('class', 'ui-icon '+replacement[$class]);
                    })
                    */
                }
                //replace icons with FontAwesome icons like above
                function updatePagerIcons(table) {
                    var replacement =
                    {
                        'ui-icon-seek-first' : 'ace-icon fa fa-angle-double-left bigger-140',
                        'ui-icon-seek-prev' : 'ace-icon fa fa-angle-left bigger-140',
                        'ui-icon-seek-next' : 'ace-icon fa fa-angle-right bigger-140',
                        'ui-icon-seek-end' : 'ace-icon fa fa-angle-double-right bigger-140'
                    };
                    $('.ui-pg-table:not(.navtable) > tbody > tr > .ui-pg-button > .ui-icon').each(function(){
                        var icon = $(this);
                        var $class = $.trim(icon.attr('class').replace('ui-icon', ''));
                        if($class in replacement) icon.attr('class', 'ui-icon '+replacement[$class]);
                    })
                }
                function enableTooltips(table) {
                    $('.navtable .ui-pg-button').tooltip({container:'body'});
                    $(table).find('.ui-pg-div').tooltip({container:'body'});
                }
                //var selr = jQuery(grid_selector).jqGrid('getGridParam','selrow');
                $(document).one('ajaxloadstart.page', function(e) {
                    $.jgrid.gridDestroy(grid_selector);
                    $('.ui-jqdialog').remove();
                });
            });
        </script>
</body>
</html>
ConsoleService/src/main/resources/html/login.html
@@ -40,7 +40,7 @@
            <div class="main-content">
                <div class="row">
                    <div class="col-sm-10 col-sm-offset-1">
                        <div class="login-container">
                        <div class="login-container" style="margin-top: 100px;">
                            <div class="center">
                                <h1>
                                    <i class="ace-icon fa fa-leaf green"></i>
@@ -50,6 +50,7 @@
                                <h4 class="blue" id="id-company-text">&copy; java110开发团队</h4>
                            </div>
                            <div class="space-6"></div>
                            <div class="space-6"></div>
                            <div class="position-relative">
@@ -67,29 +68,33 @@
                                                <fieldset>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                            <input type="text" class="form-control" placeholder="请输入用户编码" />
                                                            <input type="text" id="userCode" class="form-control" placeholder="请输入用户编码" />
                                                            <i class="ace-icon fa fa-user"></i>
                                                        </span>
                                                    </label>
                                                    <label class="block clearfix">
                                                        <span class="block input-icon input-icon-right">
                                                            <input type="password" class="form-control" placeholder="请输入密码" />
                                                            <input type="password" id="userPwd" class="form-control" placeholder="请输入密码" />
                                                            <i class="ace-icon fa fa-lock"></i>
                                                        </span>
                                                    </label>
                                                    <span id="errorInfo" style="display:none;color:#DD5A43!important">
                                                        用户编码错误
                                                    </span>
                                                    <div class="space"></div>
                                                    <div class="clearfix">
                                                        <button type="button" class="width-35 pull-right btn btn-sm btn-primary">
                                                        <button type="button" class="width-35 pull-right btn btn-sm btn-primary" onclick="auth()">
                                                            <i class="ace-icon fa fa-key"></i>
                                                            <span class="bigger-110">登录</span>
                                                        </button>
                                                    </div>
                                                    <div class="space-4"></div>
                                                </fieldset>
                                            </form>
@@ -117,7 +122,8 @@
        <!--[if IE]>
<script src="../assets/js/jquery-1.11.3.min.js"></script>
<![endif]-->
        <script src="../javascript/login.js"></script>
        <script src="../javascript/java110_req_data.js"></script>
        <script src="../javascript/java110_auth.js"></script>
        <script type="text/javascript">
            if('ontouchstart' in document.documentElement) document.write("<script src='../assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
        </script>
ConsoleService/src/main/resources/html/menu.html
@@ -7,7 +7,7 @@
    <ul class="nav nav-list">
        <li class="active">
            <a href="index.html">
            <a href="/">
                <i class="menu-icon fa fa-tachometer"></i>
                <span class="menu-text"> 我的菜单 </span>
            </a>
ConsoleService/src/main/resources/javascript/java110_auth.js
ConsoleService/src/main/resources/javascript/java110_req_data.js
ConsoleService/src/main/resources/static/assets/css/ace-ie.min.css
ConsoleService/src/main/resources/static/assets/css/ace-part2.min.css
ConsoleService/src/main/resources/static/assets/css/ace-rtl.min.css
ConsoleService/src/main/resources/static/assets/css/ace-skins.min.css
ConsoleService/src/main/resources/static/assets/css/ace.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-colorpicker.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-datepicker3.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-datetimepicker.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-duallistbox.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-editable.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-multiselect.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap-timepicker.min.css
ConsoleService/src/main/resources/static/assets/css/bootstrap.min.css
ConsoleService/src/main/resources/static/assets/css/chosen.min.css
ConsoleService/src/main/resources/static/assets/css/colorbox.min.css
ConsoleService/src/main/resources/static/assets/css/daterangepicker.min.css
ConsoleService/src/main/resources/static/assets/css/dropzone.min.css
ConsoleService/src/main/resources/static/assets/css/font-awesome.min.css
ConsoleService/src/main/resources/static/assets/css/fonts.googleapis.com.css
ConsoleService/src/main/resources/static/assets/css/fullcalendar.min.css
ConsoleService/src/main/resources/static/assets/css/images/meteorshower2.jpg

ConsoleService/src/main/resources/static/assets/css/images/pattern.jpg

ConsoleService/src/main/resources/static/assets/css/jquery-ui.custom.min.css
ConsoleService/src/main/resources/static/assets/css/jquery-ui.min.css
ConsoleService/src/main/resources/static/assets/css/jquery.gritter.min.css
ConsoleService/src/main/resources/static/assets/css/prettify.min.css
ConsoleService/src/main/resources/static/assets/css/select2.min.css
ConsoleService/src/main/resources/static/assets/css/ui.jqgrid.min.css
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/css/font-awesome.min.css
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.eot
Binary files differ
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.svg
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.ttf
Binary files differ
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.woff
Binary files differ
ConsoleService/src/main/resources/static/assets/font-awesome/4.5.0/fonts/fontawesome-webfont.woff2
Binary files differ
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.eot
Binary files differ
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.svg
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.ttf
Binary files differ
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.woff
Binary files differ
ConsoleService/src/main/resources/static/assets/fonts/glyphicons-halflings-regular.woff2
Binary files differ
ConsoleService/src/main/resources/static/assets/images/avatars/avatar.png

ConsoleService/src/main/resources/static/assets/images/avatars/avatar1.png

ConsoleService/src/main/resources/static/assets/images/avatars/avatar2.png

ConsoleService/src/main/resources/static/assets/images/avatars/avatar3.png

ConsoleService/src/main/resources/static/assets/images/avatars/avatar4.png

ConsoleService/src/main/resources/static/assets/images/avatars/avatar5.png

ConsoleService/src/main/resources/static/assets/images/avatars/profile-pic.jpg

ConsoleService/src/main/resources/static/assets/images/avatars/user.jpg

ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/alpha-horizontal.png

ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/alpha.png

ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/hue-horizontal.png

ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/hue.png

ConsoleService/src/main/resources/static/assets/images/bootstrap-colorpicker/saturation.png

ConsoleService/src/main/resources/static/assets/images/email/email1.png

ConsoleService/src/main/resources/static/assets/images/email/email2.png

ConsoleService/src/main/resources/static/assets/images/email/email3.png

ConsoleService/src/main/resources/static/assets/images/email/email4.png

ConsoleService/src/main/resources/static/assets/images/gallery/image-1.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/image-2.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/image-3.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/image-4.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/image-5.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/image-6.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-1.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-2.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-3.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-4.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-5.jpg

ConsoleService/src/main/resources/static/assets/images/gallery/thumb-6.jpg

ConsoleService/src/main/resources/static/assets/images/placeholder/165x90.png

ConsoleService/src/main/resources/static/assets/images/placeholder/255x150.png

ConsoleService/src/main/resources/static/assets/images/placeholder/530x270.png

ConsoleService/src/main/resources/static/assets/images/placeholder/550x280.png

ConsoleService/src/main/resources/static/assets/js/ace-editable.min.js
ConsoleService/src/main/resources/static/assets/js/ace-elements.min.js
ConsoleService/src/main/resources/static/assets/js/ace-extra.min.js
ConsoleService/src/main/resources/static/assets/js/ace.min.js
ConsoleService/src/main/resources/static/assets/js/autosize.min.js
ConsoleService/src/main/resources/static/assets/js/bootbox.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-colorpicker.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-datepicker.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-datetimepicker.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-editable.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-markdown.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-multiselect.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-tag.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-timepicker.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap-wysiwyg.min.js
ConsoleService/src/main/resources/static/assets/js/bootstrap.min.js
ConsoleService/src/main/resources/static/assets/js/buttons.colVis.min.js
ConsoleService/src/main/resources/static/assets/js/buttons.flash.min.js
ConsoleService/src/main/resources/static/assets/js/buttons.html5.min.js
ConsoleService/src/main/resources/static/assets/js/buttons.print.min.js
ConsoleService/src/main/resources/static/assets/js/chosen.jquery.min.js
ConsoleService/src/main/resources/static/assets/js/dataTables.buttons.min.js
ConsoleService/src/main/resources/static/assets/js/dataTables.select.min.js
ConsoleService/src/main/resources/static/assets/js/daterangepicker.min.js
ConsoleService/src/main/resources/static/assets/js/dropzone.min.js
ConsoleService/src/main/resources/static/assets/js/excanvas.min.js
ConsoleService/src/main/resources/static/assets/js/fullcalendar.min.js
ConsoleService/src/main/resources/static/assets/js/grid.locale-en.js
ConsoleService/src/main/resources/static/assets/js/holder.min.js
ConsoleService/src/main/resources/static/assets/js/html5shiv.min.js
ConsoleService/src/main/resources/static/assets/js/jquery-1.11.3.min.js
ConsoleService/src/main/resources/static/assets/js/jquery-2.1.4.min.js
ConsoleService/src/main/resources/static/assets/js/jquery-additional-methods.min.js
ConsoleService/src/main/resources/static/assets/js/jquery-typeahead.js
ConsoleService/src/main/resources/static/assets/js/jquery-ui.custom.min.js
ConsoleService/src/main/resources/static/assets/js/jquery-ui.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.bootstrap-duallistbox.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.colorbox.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.dataTables.bootstrap.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.dataTables.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.easypiechart.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.flot.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.flot.pie.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.flot.resize.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.gritter.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.hotkeys.index.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.inputlimiter.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.jqGrid.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.knob.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.maskedinput.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.mobile.custom.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.nestable.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.raty.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.sparkline.index.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.ui.touch-punch.min.js
ConsoleService/src/main/resources/static/assets/js/jquery.validate.min.js
ConsoleService/src/main/resources/static/assets/js/markdown.min.js
ConsoleService/src/main/resources/static/assets/js/moment.min.js
ConsoleService/src/main/resources/static/assets/js/prettify.min.js
ConsoleService/src/main/resources/static/assets/js/respond.min.js
ConsoleService/src/main/resources/static/assets/js/select2.min.js
ConsoleService/src/main/resources/static/assets/js/spin.js
ConsoleService/src/main/resources/static/assets/js/spinbox.min.js
ConsoleService/src/main/resources/static/assets/js/tree.min.js
ConsoleService/src/main/resources/static/assets/js/wizard.min.js
ConsoleService/src/main/resources/static/assets/swf/flashExport.swf
Binary files differ
ConsoleService/src/main/resources/static/javascript/java110_auth.js
New file
@@ -0,0 +1,53 @@
function auth(){
    var userCode = $('#userCode').val();
    var userPwd = $('#userPwd').val();
    if(userCode == '' || userPwd == ''){
        alertText("用户编码或密码不能为空")
        return ;
    }
    // 清除提示
    clearAlertText();
    doLogin(userCode,userPwd);
}
function clearAlertText(){
    $("#errorInfo").html('');
    $("#errorInfo").hide();
}
function alertText(message){
    $("#errorInfo").html(message);
    $("#errorInfo").show();
}
function doLogin(userCode,userPwd){
    var reqJson = JSON.stringify(createRequestData("login",{"userCode":userCode,"userPwd":userPwd,"pageSign":""}));
      $.ajax({
               type: "POST",
               url: "/loginRest/login",
               data: reqJson,
               contentType: "application/text",
               dataType:"text",
               success: function(data){
                       processResponse(data);
                  },
               error: function(data){
                   alertText("网络超时,请稍后再试");
               }
            });
}
function processResponse(data){
    var data = getResponseInfo(data)
    if(data.code != "0000"){
        alertText(data.msg+",错误ID:"+data.id);
        return ;
    }
    $(location).attr('href', '/');
}
ConsoleService/src/main/resources/static/javascript/java110_req_data.js
New file
@@ -0,0 +1,43 @@
/**
{
  "meta":{
    "method":"",//主要用于,日志记录
    "requestTime":"",
    "transactionId":"请求流水" //不需要填 有系统统一设置
  },
  "param":{
    //这里写参数
  }
}
**/
function createRequestData(method,reqParam){
    var reqJson = {
                    "meta":{
                      "method":method,//主要用于,日志记录
                      "requestTime":nowtime(),
                    },
                    "param":{
                      //这里写参数
                    }
                  };
    reqJson.param = reqParam;
    return reqJson;
}
function nowtime(){
    var time = new Date();
    return time.getFullYear()+((time.getMonth()+1) > 9 ? (time.getMonth()+1) :'0'+(time.getMonth()+1))+(time.getDate()>9?time.getDate():'0'+time.getDate())+(time.getHours()>9?'':'0')
    +time.getHours()+(time.getMinutes()>9?'':'0')
    +time.getMinutes()+(time.getSeconds()>9?'':'0')+time.getSeconds()
  }
function getResponseInfo(data){
    var dataObj =  eval('(' + data + ')');
//    var dataObj = JSON.parse(data);
    var meta = dataObj.meta;
    var resData = {"code":meta.code,"msg":meta.message,"id":meta.transactionId,"data":dataObj.data}
    return resData;
}
Readme.md
@@ -10,133 +10,57 @@
技术架构:
Java + spring cloud + mybatis + mysql + activemq + redis
Java + spring cloud + mybatis + mysql + kafka + redis
1.0 小区商家 1
美食
外卖
生鲜
超市
家政
其他
2.0 小区物业 2
小区公告
物业缴费(先不实现,只是用于通知作用,如电费,水费,气费)
房屋登记(先不实现)
停车位登记(先不实现)
意见保修
3.0 小区论坛 5
4.0 小区二手交易服务(后期实现)
5.0 小区拼车服务(附近小区显示5公里之内) 4
6.0 小区运动排名 6
服务依赖关系
目前提供服务:
1、上下班顺风车服务,用户发布服务,车主联系提供服务。
2、超市,便利店,饭馆外卖,家政商家入驻,提供送货上门服务,主要优势为,商家可以不需要花昂贵的钱租店铺,只需在家提供服务,为小区内无工作者提供就业机会。
3、为物业管理者提供免费的小区公告发布服务,方便及时查看公告,如 停电,停水 公告。
4、免费意见报修服务,用户可以向客户反馈自己的意见,和需要维修的东西,以至于物业管理者及时处理
5、小区论坛,方便小区内交流(正在规划中,欢迎合作)。
订单调度流程:
这里以wechat 服务 order 服务 user服务 为例说明
![image](https://github.com/java110/MicroCommunity/blob/master/OrderService/orderDispatch.png)
![image](https://github.com/java110/MicroCommunity/blob/master/dependencies.png)
1>、受理过程 调用方发起订单受理,订单服务根据订单中每个(busiOrder节点下的actionTypeCd)业务动作,将订单信息预处理后转发相应模块受理数据。
服务安装说明:
2>、撤单过程 通用方发起撤单,订单服务根据撤单的boId 从数据库中查询信息,分别调相应服务撤单处理。
1、安装mysql,kafka,redis,git ,maven (详细安装请Google或百度)
3>、事物补偿 如果以上有失败的情况下,作废当前订单信息,订单服务发起消息广播(activemq 消息广播方式),让各模块监听广播监听相应数据,恢复以前数据。
2、git clone https://github.com/java110/MicroCommunity.git 下载代码
重要说明:
3、在相应服务下(如:CenterService 服务) src/main/application.yml 中修改mysql地址、用户名和密码、kafka地址、redis地址
订单调度 外围系统 如用户服务系统,商户服务系统,支付服务系统,必须要实现以下接口:
4、进入MicroCommunity 目录 执行 mvn clean install 打包
1、受理接口
2、作废订单接口
请求协议为:
{
    'data':
[
5、配置数据
    将 java110-config/db 下的CenterService 和 ConsoleService 中的create_table.db 导入数据库中
    
    {
        'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
    'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
    'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    }
]
}
6、启动
    (1) 启动 eureka 命令为 java -jar eureka.jar
    (2) 启动 CenterService 命令为 java -jar CenterService.jar
    (3) 启动 ConsoleService 命令为 java -jar ConsoleService.jar
7、用post工具属性缓存 地址为:http://yourIp:8001/cacheApi/flush 如下图:
![image](https://github.com/java110/MicroCommunity/blob/master/dependencies.png)
3、补偿事物(目前是activemq)
请求报文 这里data下为所有要作废的订单boId
8、在浏览器输入 http://yourIp:6001/ 如下图
{
    'data':
[
![image](https://github.com/java110/MicroCommunity/blob/master/dependencies.png)
    点击高级,继续前往。
9、登录系统,用户名为 admin 密码为 admin  如下图
![image](https://github.com/java110/MicroCommunity/blob/master/dependencies.png)
    点击登录,进入如下图:
    
    {
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
        'boId': '222222',
        'actionTypeCd': 'M1'
    },
    {
        'boId': '222222',
        'actionTypeCd': 'C1'
    }
]
}
统一返回报文模板为:
{
  ![image](https://github.com/java110/MicroCommunity/blob/master/dependencies.png)
 "RESULT_CODE": "0000",
 "RESULT_MSG": "成功",
 "RESULT_INFO":{}
}
RESULT_CODE 结果编码
0000 表示成功
1999 表示失败
RESULT_MSG 描述信息
RESULT_INFO 需要附带信息时,可以添加在这里
10、统一接口地址:http://yourIp:8001/httpApi/service
加入钉钉java110 工作群随时了解项目进度,和java110开发者零距离沟通
ReadmeBak.md
New file
@@ -0,0 +1,145 @@
微小区平台
分支说明:
分支管理说明,test为最新代码未测试代码(主要为了防止本地代码遗失),master 为最新测试过代码(待产品化),product 为产品化代码
开发工具:
java1.8 + idea/eclipse + mysql
技术架构:
Java + spring cloud + mybatis + mysql + activemq + redis
1.0 小区商家 1
美食
外卖
生鲜
超市
家政
其他
2.0 小区物业 2
小区公告
物业缴费(先不实现,只是用于通知作用,如电费,水费,气费)
房屋登记(先不实现)
停车位登记(先不实现)
意见保修
3.0 小区论坛 5
4.0 小区二手交易服务(后期实现)
5.0 小区拼车服务(附近小区显示5公里之内) 4
6.0 小区运动排名 6
目前提供服务:
1、上下班顺风车服务,用户发布服务,车主联系提供服务。
2、超市,便利店,饭馆外卖,家政商家入驻,提供送货上门服务,主要优势为,商家可以不需要花昂贵的钱租店铺,只需在家提供服务,为小区内无工作者提供就业机会。
3、为物业管理者提供免费的小区公告发布服务,方便及时查看公告,如 停电,停水 公告。
4、免费意见报修服务,用户可以向客户反馈自己的意见,和需要维修的东西,以至于物业管理者及时处理
5、小区论坛,方便小区内交流(正在规划中,欢迎合作)。
订单调度流程:
这里以wechat 服务 order 服务 user服务 为例说明
![image](https://github.com/java110/MicroCommunity/blob/master/OrderService/orderDispatch.png)
1>、受理过程 调用方发起订单受理,订单服务根据订单中每个(busiOrder节点下的actionTypeCd)业务动作,将订单信息预处理后转发相应模块受理数据。
2>、撤单过程 通用方发起撤单,订单服务根据撤单的boId 从数据库中查询信息,分别调相应服务撤单处理。
3>、事物补偿 如果以上有失败的情况下,作废当前订单信息,订单服务发起消息广播(activemq 消息广播方式),让各模块监听广播监听相应数据,恢复以前数据。
重要说明:
订单调度 外围系统 如用户服务系统,商户服务系统,支付服务系统,必须要实现以下接口:
1、受理接口
2、作废订单接口
请求协议为:
{
    'data':
[
    {
        'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
    'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
    'olId':'123456',
        'newBoId': '123456',
        'boId': '222222',
        'actionTypeCd': 'C1'
    }
]
}
3、补偿事物(目前是activemq)
请求报文 这里data下为所有要作废的订单boId
{
    'data':
[
    {
        'boId': '222222',
        'actionTypeCd': 'C1'
    },
    {
        'boId': '222222',
        'actionTypeCd': 'M1'
    },
    {
        'boId': '222222',
        'actionTypeCd': 'C1'
    }
]
}
统一返回报文模板为:
{
 "RESULT_CODE": "0000",
 "RESULT_MSG": "成功",
 "RESULT_INFO":{}
}
RESULT_CODE 结果编码
0000 表示成功
1999 表示失败
RESULT_MSG 描述信息
RESULT_INFO 需要附带信息时,可以添加在这里
加入钉钉java110 工作群随时了解项目进度,和java110开发者零距离沟通
![image](https://github.com/java110/MicroCommunity/blob/test/dingding_java110.jpg)
eureka/src/main/resources/application.yml
@@ -1,7 +1,9 @@
server:
  port: 8761                    # 指定该Eureka实例的端口
eureka:
  server:
    enableSelfPreservation: false
    evictionIntervalTimerInMs: 4000
  instance:
    hostname: discovery         # 指定该Eureka实例的主机名
  client:
java110-bean/src/main/java/com/java110/entity/service/PageData.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
import java.util.Map;
/**
 * 页面请求数据封装
@@ -10,11 +11,15 @@
 */
public class PageData implements Serializable {
    private String userId ;
    private String transactionId;
    private String requestTime;
    private String method;
    private String token;
    private JSONObject param;
@@ -32,6 +37,16 @@
    private JSONObject data;
    private Map<String,String> userInfo;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getTransactionId() {
        return transactionId;
@@ -90,6 +105,10 @@
        this.resJson = resJson;
    }
    public void setResJson(String resJsonString) {
        this.resJson = JSONObject.parseObject(resJsonString);
    }
    public String getCode() {
        return code;
    }
@@ -122,6 +141,23 @@
        this.data = data;
    }
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
    public Map<String, String> getUserInfo() {
        return userInfo;
    }
    public void setUserInfo(Map<String, String> userInfo) {
        this.userInfo = userInfo;
    }
    public PageData builder(String requestJson) throws IllegalArgumentException{
        JSONObject reqJson = null;
        try {
java110-common/src/main/java/com/java110/common/cache/JWTCache.java
@@ -1,7 +1,79 @@
package com.java110.common.cache;
import com.java110.common.util.SerializeUtil;
import com.java110.entity.mapping.Mapping;
import redis.clients.jedis.Jedis;
/**
 * Created by wuxw on 2018/5/5.
 */
public class JWTCache {
public class JWTCache extends BaseCache{
    /**
     * 获取值(用户ID)
     * @returne
     */
    public static String getValue(String jdi){
        Jedis redis = null;
        try {
            redis = getJedis();
            return redis.get(jdi);
        }finally {
            if(redis != null){
                redis.close();
            }
        }
    }
    /**
     * 保存数据
     * @param jdi
     */
    public static void setValue(String jdi,String userId,int expireTime){
        Jedis redis = null;
        try {
            redis = getJedis();
            redis.set(jdi,userId);
            redis.expire(jdi,expireTime);
        }finally {
            if(redis != null){
                redis.close();
            }
        }
    }
    /**
     * 删除记录
     * @param jdi
     */
    public static void removeValue(String jdi){
        Jedis redis = null;
        try {
            redis = getJedis();
            redis.del(jdi);
        }finally {
            if(redis != null){
                redis.close();
            }
        }
    }
    /**
     * 重设超时间
     * @param jdi
     * @param expireTime
     */
    public static void resetExpireTime(String jdi,int expireTime){
        Jedis redis = null;
        try {
            redis = getJedis();
            redis.expire(jdi,expireTime);
        }finally {
            if(redis != null){
                redis.close();
            }
        }
    }
}
java110-common/src/main/java/com/java110/common/constant/CommonConstant.java
@@ -45,6 +45,36 @@
    /**
     * 鉴权token
     */
    public final static String COOKIE_AUTH_TOKEN = "java110_token";
    public final static String COOKIE_AUTH_TOKEN = "_java110_token_";
    public final static String DEFAULT_USER_PWD_SECRET = "@java110.com";
    /**
     * 默认JWT 秘钥
     */
    public final static String DEFAULT_JWT_SECRET = "@java110_JWT";
    /**
     * 默认过期时间
     */
    public final static String DEFAULT_JWT_EXPIRE_TIME = 2*60*60 + "";
    /**
     * 登录时的用户ID
     */
    public final static String LOGIN_USER_ID = "userId";
    public final static String LOGIN_USER_NAME = "userName";
    /**
     * 上下文对象
     */
    public final static String CONTEXT_PAGE_DATA = "pd";
    public final static String ORDER_USER_ID = "ORDER_USER_ID";
    public final static String ORDER_DEFAULT_USER_ID = "-1";
}
java110-common/src/main/java/com/java110/common/constant/MappingConstant.java
@@ -66,6 +66,21 @@
     */
    public final static String KEY_CONSOLE_SERVICE_SECURITY_ON_OFF = "CONSOLE_SERVICE_SECURITY_ON_OFF";
    /**
     * 用户秘钥
     */
    public final static String KEY_USER_PASSWORD_SECRET = "USER_PASSWORD_SECRET";
    /**
     * JWT 秘钥
     */
    public final static String KEY_JWT_SECRET = "JWT_SECRET";
    /**
     * JWT 秘钥
     */
    public final static String KEY_JWT_EXPIRE_TIME = "JWT_EXPIRE_TIME";
}
java110-common/src/main/java/com/java110/common/constant/ServiceCodeConstant.java
@@ -16,6 +16,19 @@
     */
    public static final String SERVICE_CODE_QUERY_MENU_ITEM_NAME = "查询菜单";
    /**
     * 查询菜单编码
     */
    public static final String SERVICE_CODE_QUERY_USER_LOGIN = "query.user.loginInfo";
    /**
     * 查询菜单编码名称
     */
    public static final String SERVICE_CODE_QUERY_USER_LOGIN_NAME = "查询用户登录信息";
    public static final String SERVICE_CODE = "SERVICE_CODE";
    public static final String SERVICE_CODE_NAME = "SERVICE_CODE_NAME";
java110-common/src/main/java/com/java110/common/factory/AuthenticationFactory.java
@@ -2,10 +2,20 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.java110.common.cache.JWTCache;
import com.java110.common.cache.MappingCache;
import com.java110.common.constant.CommonConstant;
import com.java110.common.constant.MappingConstant;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.NoAuthorityException;
import com.java110.common.util.DateUtil;
import com.java110.common.util.StringUtil;
import com.java110.entity.center.DataFlow;
import org.apache.commons.codec.digest.DigestUtils;
@@ -18,6 +28,9 @@
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
 *
@@ -60,7 +73,7 @@
     * @return
     */
    public static String md5(String transactionId,String appId,String businesses,String code){
        return md5(transactionId+appId+businesses).toLowerCase();
        return md5(transactionId+appId+businesses+code).toLowerCase();
    }
    /**
@@ -223,6 +236,89 @@
        return keyPairGenerator.generateKeyPair();
    }
    /**
     * 用户密码
     * @param userPwd
     * @return
     */
    public static String md5UserPassword(String userPwd){
        String userPasswordSecret = MappingCache.getValue(MappingConstant.KEY_USER_PASSWORD_SECRET);
        if(StringUtil.isNullOrNone(userPasswordSecret)){
            userPasswordSecret = CommonConstant.DEFAULT_USER_PWD_SECRET;
        }
        return md5(md5(userPwd + userPasswordSecret));
    }
    /**
     * 创建token
     * @return
     */
    public static String createAndSaveToken(Map<String,String> info) throws Exception{
        if(!info.containsKey(CommonConstant.LOGIN_USER_ID)){
            throw new InvalidParameterException("参数中没有包含:"+CommonConstant.LOGIN_USER_ID);
        }
        String jdi = UUID.randomUUID().toString().replace("-","");
        String jwtSecret = MappingCache.getValue(MappingConstant.KEY_JWT_SECRET);
        if(StringUtil.isNullOrNone(jwtSecret)){
            jwtSecret = CommonConstant.DEFAULT_JWT_SECRET;
        }
        Algorithm algorithm = Algorithm.HMAC256(jwtSecret);
        JWTCreator.Builder jwt= JWT.create();
        for(String key:info.keySet()){
            if(CommonConstant.LOGIN_USER_ID.equals(key)){
                continue;
            }
            jwt.withClaim(key,info.get(key));
        }
        String expireTime = MappingCache.getValue(MappingConstant.KEY_JWT_EXPIRE_TIME);
        if(StringUtil.isNullOrNone(expireTime)){
            expireTime = CommonConstant.DEFAULT_JWT_EXPIRE_TIME;
        }
        //保存token Id
        JWTCache.setValue(jdi,info.get(CommonConstant.LOGIN_USER_ID),Integer.parseInt(expireTime));
        jwt.withIssuer("java110");
        jwt.withJWTId(jdi);
        return jwt.sign(algorithm);
    }
    /**
     * 校验Token
     * @param token
     * @return
     * @throws Exception
     */
    public static Map<String, String> verifyToken(String token) throws Exception{
        String jwtSecret = MappingCache.getValue(MappingConstant.KEY_JWT_SECRET);
        if(StringUtil.isNullOrNone(jwtSecret)){
            jwtSecret = CommonConstant.DEFAULT_JWT_SECRET;
        }
        Algorithm algorithm = Algorithm.HMAC256(jwtSecret);
        JWTVerifier verifier = JWT.require(algorithm).withIssuer("java110").build();
        DecodedJWT jwt = verifier.verify(token);
        String jdi = jwt.getId();
        //保存token Id
        String userId = JWTCache.getValue(jdi);
        if(StringUtil.isNullOrNone(userId)){
            throw new JWTVerificationException("用户还未登录");
        }
        String expireTime = MappingCache.getValue(MappingConstant.KEY_JWT_EXPIRE_TIME);
        if(StringUtil.isNullOrNone(expireTime)){
            expireTime = CommonConstant.DEFAULT_JWT_EXPIRE_TIME;
        }
        //刷新过时时间
        JWTCache.resetExpireTime(jdi,Integer.parseInt(expireTime));
        Map<String, Claim> claims = jwt.getClaims();
        // Add the claim to request header
        Map<String,String> paramOut = new HashMap<String, String>();
        for(String key : claims.keySet()){
            paramOut.put(key,claims.get(key).asString());
        }
        paramOut.put(CommonConstant.LOGIN_USER_ID,userId);
        return paramOut;
    }
    /***********************************JWT start***************************************/
java110-common/src/main/java/com/java110/common/factory/DataTransactionFactory.java
@@ -9,6 +9,7 @@
import com.java110.common.util.SequenceUtil;
import com.java110.common.util.StringUtil;
import com.java110.entity.center.DataFlow;
import com.java110.entity.service.PageData;
import java.util.Date;
import java.util.Map;
@@ -243,7 +244,7 @@
        JSONObject paramOut = JSONObject.parseObject("{\"meta\":{}}");
        JSONObject metaObj = paramOut.getJSONObject("meta");
        metaObj.put("transactionId",transactionId);
        metaObj.put("code",transactionId);
        metaObj.put("code",code);
        metaObj.put("message",message);
        metaObj.put("responseTime",DateUtil.getNowDefault());
        if(data != null) {
@@ -265,6 +266,18 @@
    }
    /**
     * 页面返回封装
     * @param code 编码
     * @param message 信息
     * @param data 数据
     * @return
     * @throws Exception
     */
    public static String pageResponseJson(PageData pd,String code, String message, JSONObject data){
        return pageResponseJson(pd == null || StringUtil.isNullOrNone(pd.getTransactionId()) ? ResponseConstant.NO_TRANSACTION_ID:pd.getTransactionId(),code,message,data);
    }
    /**
     * 页面处理成功信息封装
     * @param transactionId
     * @return
java110-common/src/main/java/com/java110/common/util/DateUtil.java
@@ -64,6 +64,17 @@
        return calendar.getTime();
    }
    /**
     * 获取未来时间
     * @param second 秒
     * @return
     */
    public static Date getFutureDate(int second){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.SECOND,second);
        return calendar.getTime();
    }
    public static String getFormatTimeString(Date date, String pattern)
    {
        SimpleDateFormat sDateFormat = getDateFormat(pattern);
java110-config/db/CenterService/create_table.db
@@ -210,14 +210,21 @@
'8000418002','4','Q','0'
);
insert into c_service(service_code,invoke_model,business_type_cd,`name`,seq,url,provide_app_id,status_cd)
values('query.user.userInfo','1','Q','用户信息查询',1,'http://...','8000418001','0');
insert into c_route(app_id,service_id,order_type_cd,status_cd) values(
'8000418002','5','Q','0'
);
insert into c_service(service_code,invoke_model,business_type_cd,`name`,seq,url,provide_app_id,status_cd)
values('query.order.orderInfo','1','Q','订单信息',1,'http://center-service/businessApi/query','8000418001','0');
values('query.user.userInfo','S','Q','用户信息查询',1,'http://...','8000418001','0');
insert into c_service(service_code,invoke_model,business_type_cd,`name`,seq,url,provide_app_id,status_cd)
values('query.console.menu','1','Q','查询菜单',1,'http://console-service/businessApi/query','8000418002','0');
values('query.order.orderInfo','S','Q','订单信息',1,'http://center-service/businessApi/query','8000418001','0');
insert into c_service(service_code,invoke_model,business_type_cd,`name`,seq,url,provide_app_id,status_cd)
values('query.console.menu','S','Q','查询菜单',1,'http://console-service/businessApi/query','8000418002','0');
insert into c_service(service_code,invoke_model,business_type_cd,`name`,seq,url,provide_app_id,status_cd)
values('query.user.loginInfo','S','Q','查询用户登录信息',1,'http://console-service/businessApi/query','8000418002','0');
INSERT INTO c_service_sql(service_code,`name`,params,query_model,`sql`,proc,template,remark,status_cd)
VALUES('query.order.orderInfo','订单信息','oId','1','{
@@ -248,14 +255,26 @@
                                                              and mm.status_cd = ''0''
                                                              and mmc.m_id = mm.m_id
                                                              and mmc.status_cd = ''0''"
                                                 }','','{"PARAM:"{
                                                 }','','{"PARAM":{
                                                            "param1": "$.#menus#Array"
                                                            },"TEMPLATE":"{
                                                            },"TEMPLATE":{
                                                         "response": {
                                                           "code": "0000",
                                                           "message": "成功"
                                                         }
                                                       }"}','','0');
                                                       }}','','0');
INSERT INTO c_service_sql(service_code,`name`,params,query_model,`sql`,proc,template,remark,status_cd)
VALUES('query.user.loginInfo','查询用户登录信息','userCode','1','{
                                                     "param1":"select u.userId userId,u.name userName,u.password userPwd from user u where u.userCode = #userCode# and u.status_cd = ''0''"
                                                 }','','{"PARAM":{
                                                            "param1": "$.#user#Object"
                                                            },"TEMPLATE":{
                                                         "response": {
                                                           "code": "0000",
                                                           "message": "成功"
                                                         }
                                                       }}','','0');
java110-config/db/ConsoleService/create_table.db
@@ -38,11 +38,14 @@
insert into m_menu(name,level,parent_id,menu_group,user_id,remark) values('外部应用','2','1','LEFT','10001','');
insert into m_menu(name,level,parent_id,menu_group,user_id,remark) values('路由管理','2','1','LEFT','10001','');
insert into m_menu(name,level,parent_id,menu_group,user_id,remark) values('服务管理','2','1','LEFT','10001','');
insert into m_menu(name,level,parent_id,menu_group,user_id,remark) values('刷新缓存','2','1','LEFT','10001','');
insert into m_menu_ctg(m_id,url,template) values(2,'http://www.java110.com','');
insert into m_menu_ctg(m_id,url,template) values(3,'http://www.java110.com','');
insert into m_menu_ctg(m_id,url,template) values(4,'http://www.java110.com','');
insert into m_menu_ctg(m_id,url,template) values(5,'http://www.java110.com','');
insert into m_menu_ctg(m_id,url,template) values(5,'http://192.168.31.199:8001/cacheApi/flush','');
insert into m_menu_2_user(m_id,user_id) values(1,'10001');
insert into m_menu_2_user(m_id,user_id) values(2,'10001');
java110-config/src/main/resources/html/error.html
java110-core/src/main/java/com/java110/core/base/controller/BaseController.java
@@ -2,12 +2,14 @@
import com.alibaba.fastjson.JSONObject;
import com.java110.common.constant.CommonConstant;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.NoAuthorityException;
import com.java110.common.factory.PageDataFactory;
import com.java110.common.log.LoggerEngine;
import com.java110.common.util.SequenceUtil;
import com.java110.common.util.StringUtil;
import com.java110.core.base.AppBase;
import com.java110.entity.service.PageData;
import org.springframework.util.StringUtils;
@@ -29,11 +31,10 @@
     * 检查用户登录
     * @throws NoAuthorityException
     */
    protected String checkLogin() throws NoAuthorityException{
        if(false){
    protected void checkLogin(PageData pd) throws NoAuthorityException{
        if(StringUtil.isNullOrNone(pd.getUserId())){
            throw new NoAuthorityException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,"用户未登录,请登录!");
        }
        return "10001";
    }
@@ -128,7 +129,10 @@
     * @throws IllegalArgumentException
     */
    protected PageData getPageData(HttpServletRequest request){
        return request.getAttribute("pd") != null ?(PageData) request.getAttribute("pd") : null;
        if(request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) == null){
            throw new IllegalArgumentException("请求参数错误");
        }
        return (PageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA);
    }
}
java110-service/src/main/java/com/java110/service/aop/PageProcessAspect.java
@@ -1,8 +1,10 @@
package com.java110.service.aop;
import com.java110.common.constant.CommonConstant;
import com.java110.common.factory.PageDataFactory;
import com.java110.common.util.Assert;
import com.java110.common.util.SequenceUtil;
import com.java110.common.util.StringUtil;
import com.java110.entity.service.PageData;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -11,9 +13,14 @@
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
/**
 * 数据初始化
@@ -22,7 +29,7 @@
@Aspect
@Component
public class PageProcessAspect {
    @Pointcut("execution(public * com.java110..*.*Controller.*(..))")
    @Pointcut("execution(public * com.java110..*.*Controller.*(..)) || execution(public * com.java110..*.*Rest.*(..))")
    public void dataProcess(){}
    /**
@@ -37,8 +44,10 @@
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        PageData pd = null;
        if("POST".equals(request.getMethod())){
            BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
            InputStream in = request.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            //reader.
            StringBuffer sb = new StringBuffer();
            String str = "";
@@ -47,10 +56,23 @@
            }
            str = sb.toString();
            if(Assert.isPageJsonObject(str)){
                PageData pd = PageDataFactory.newInstance().builder(str).setTransactionId(SequenceUtil.getPageTransactionId());
                request.setAttribute("pd",pd);
                 pd = PageDataFactory.newInstance().builder(str).setTransactionId(SequenceUtil.getPageTransactionId());
            }
        }
        if(pd == null){
            pd = PageDataFactory.newInstance().setTransactionId(SequenceUtil.getPageTransactionId());
        }
        if(request.getAttribute("claims") != null && request.getAttribute("claims") instanceof Map){
            Map<String,String> userInfo = (Map<String,String>)request.getAttribute("claims");
            if(userInfo.containsKey(CommonConstant.LOGIN_USER_ID)){
                pd.setUserId(userInfo.get(CommonConstant.LOGIN_USER_ID));
            }
            pd.setUserInfo(userInfo);
        }
        request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA,pd);
    }
@@ -61,25 +83,36 @@
    //后置异常通知
    @AfterThrowing("dataProcess()")
    public void throwss(JoinPoint jp){
    public void throwException(JoinPoint jp){
    }
    //后置最终通知,final增强,不管是抛出异常或者正常退出都会执行
    @After("dataProcess()")
    public void after(JoinPoint jp){
    public void after(JoinPoint jp) throws IOException {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        PageData pd =request.getAttribute("pd") != null ?(PageData)request.getAttribute("pd"):null ;
        //保存日志处理
        if(pd != null){
        HttpServletRequest request = attributes.getRequest();
        PageData pd =request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) != null ?(PageData)request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA):null ;
        //保存日志处理
        if(pd == null){
            return ;
        }
        if(!StringUtil.isNullOrNone(pd.getToken())) {
            HttpServletResponse response = attributes.getResponse();
            Cookie cookie = new Cookie(CommonConstant.COOKIE_AUTH_TOKEN, pd.getToken());
            cookie.setHttpOnly(true);
            cookie.setPath("/");
            response.addCookie(cookie);
            response.flushBuffer();
        }
    }
    //环绕通知,环绕增强,相当于MethodInterceptor
    @Around("dataProcess()")
    public Object arround(ProceedingJoinPoint pjp) {
    public Object around(ProceedingJoinPoint pjp) {
        try {
            Object o =  pjp.proceed();
            return o;
java110-service/src/main/java/com/java110/service/api/BusinessApi.java
File was renamed from java110-service/src/main/java/com/java110/service/rest/BusinessApi.java
@@ -1,4 +1,4 @@
package com.java110.service.rest;
package com.java110.service.api;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.factory.DataQueryFactory;
java110-service/src/main/java/com/java110/service/configuration/ServiceConfiguration.java
@@ -14,7 +14,7 @@
    public FilterRegistrationBean jwtFilter() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new JwtFilter());
        registrationBean.addUrlPatterns("/secure/*");
        registrationBean.addUrlPatterns("/");
        return registrationBean;
    }
java110-service/src/main/java/com/java110/service/controller/ErrorController.java
File was deleted
java110-service/src/main/java/com/java110/service/controller/SystemErrorController.java
New file
@@ -0,0 +1,33 @@
package com.java110.service.controller;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.util.StringUtil;
import com.java110.core.base.controller.BaseController;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
/**
 * 错误页面
 * Created by wuxw on 2018/5/2.
 */
@Controller
public class SystemErrorController extends BaseController {
    @RequestMapping(path = "/system/error")
    public String error(Model model, HttpServletRequest request) {
        String code = request.getParameter("code");
        String msg = request.getParameter("msg");
        if(StringUtil.isNullOrNone(code) || StringUtil.isNullOrNone(msg)){
            code = ResponseConstant.RESULT_CODE_INNER_ERROR;
            msg = "系统内部异常";
        }
        model.addAttribute("code",code);
        model.addAttribute("msg",msg);
        //3.0 查询各个系统调用量
        return "error";
    }
}
java110-service/src/main/java/com/java110/service/filter/JwtFilter.java
@@ -9,6 +9,7 @@
import com.java110.common.constant.CommonConstant;
import com.java110.common.constant.ResponseConstant;
import com.java110.common.exception.FilterException;
import com.java110.common.factory.AuthenticationFactory;
import com.java110.common.factory.DataTransactionFactory;
import com.java110.common.util.StringUtil;
import org.springframework.web.filter.GenericFilterBean;
@@ -40,17 +41,10 @@
            //获取token
            token = this.getToken(request);
            try {
                Algorithm algorithm = Algorithm.HMAC256("secret");
                JWTVerifier verifier = JWT.require(algorithm).withIssuer("auth0").build();
                DecodedJWT jwt = verifier.verify(token);
                Map<String, Claim> claims = jwt.getClaims();
                // Add the claim to request header
                Map<String, String> claims = AuthenticationFactory.verifyToken(token);
                request.setAttribute("claims", claims);
            } catch (UnsupportedEncodingException e) {
                logger.error("解析token 失败 :", e);
                throw new FilterException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "您还没有登录,请先登录");
            } catch (JWTVerificationException e) {
            } catch (Exception e) {
                //Invalid signature/claims
                logger.error("解析token 失败 :", e);
                throw new FilterException(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR, "您还没有登录,请先登录");
@@ -63,11 +57,11 @@
                        DataTransactionFactory.pageResponseJson(ResponseConstant.RESULT_CODE_NO_AUTHORITY_ERROR,e.getMessage(),null),
                        "UTF-8");
            }else{
                response.sendRedirect("/error?code="+e.getResult().getCode()+"&msg="+e.getResult().getMsg());
                response.sendRedirect("/login?code="+e.getResult().getCode()+"&msg="+e.getResult().getMsg());
            }
        }catch (Exception e){
            response.sendRedirect("/error?code="+ResponseConstant.RESULT_CODE_INNER_ERROR+"&msg=鉴权失败");
            response.sendRedirect("/login?code="+ResponseConstant.RESULT_CODE_INNER_ERROR+"&msg=鉴权失败");
        }
    }
java110-service/src/main/java/com/java110/service/init/ServiceStartInit.java
New file
@@ -0,0 +1,22 @@
package com.java110.service.init;
import com.java110.common.factory.ApplicationContextFactory;
import org.springframework.context.ApplicationContext;
/**
 * Created by wuxw on 2018/5/7.
 */
public class ServiceStartInit {
    public static void initSystemConfig(ApplicationContext context){
        //加载配置文件,注册订单处理侦听
        try {
            ApplicationContextFactory.setApplicationContext(context);
        }
        catch (Exception ex) {
            throw new IllegalStateException("system init error", ex);
        }
    }
}