├── .gitignore ├── README.md ├── pom.xml ├── wx-app-core ├── .gitignore ├── pom.xml └── src │ ├── main │ └── java │ │ ├── cn │ │ └── ucaner │ │ │ └── wx │ │ │ └── app │ │ │ └── core │ │ │ ├── Application.java │ │ │ ├── config │ │ │ ├── CorsConfig.java │ │ │ └── JacksonConfig.java │ │ │ ├── constant │ │ │ └── GlobalConstant.java │ │ │ ├── db │ │ │ ├── DataSourceEnum.java │ │ │ └── DynamicDataSource.java │ │ │ ├── dwz │ │ │ ├── DWZ.java │ │ │ └── DwzAjax.java │ │ │ ├── enums │ │ │ ├── PublicEnum.java │ │ │ └── PublicStatusEnum.java │ │ │ ├── exception │ │ │ ├── BizException.java │ │ │ ├── GlobalExceptionResolver.java │ │ │ └── SystemException.java │ │ │ ├── framework │ │ │ ├── ext │ │ │ │ └── Demo.java │ │ │ └── mvc │ │ │ │ ├── controller │ │ │ │ ├── BaseController.java │ │ │ │ ├── CheckParams.java │ │ │ │ ├── DateConvertEditor.java │ │ │ │ ├── FormParams.java │ │ │ │ ├── PageParams.java │ │ │ │ ├── Servlets.java │ │ │ │ └── package.html │ │ │ │ ├── dao │ │ │ │ ├── BaseDao.java │ │ │ │ ├── impl │ │ │ │ │ ├── BaseDaoImpl.java │ │ │ │ │ └── package.html │ │ │ │ └── package.html │ │ │ │ ├── entity │ │ │ │ ├── BaseEntity.java │ │ │ │ ├── BasePlatformEntity.java │ │ │ │ └── package.html │ │ │ │ ├── exception │ │ │ │ └── GlobalExceptionHanlder.java │ │ │ │ └── service │ │ │ │ ├── BaseService.java │ │ │ │ ├── impl │ │ │ │ ├── BaseServiceImpl.java │ │ │ │ └── package.html │ │ │ │ └── package.html │ │ │ ├── interceptor │ │ │ ├── LoginInterceptor.java │ │ │ └── MethodTimeAdviceInterceptor.java │ │ │ ├── listener │ │ │ └── ApplicationContextListener.java │ │ │ ├── utils │ │ │ ├── base │ │ │ │ ├── ConvertUtils.java │ │ │ │ ├── IdcardValidator.java │ │ │ │ ├── MoneyUtils.java │ │ │ │ ├── RegexUtils.java │ │ │ │ ├── StringHelper.java │ │ │ │ └── ValidateHelper.java │ │ │ ├── bcrypt │ │ │ │ ├── BCrypt.java │ │ │ │ └── BCryptPasswordEncoder.java │ │ │ ├── bean │ │ │ │ └── BeanUtils.java │ │ │ ├── captcha │ │ │ │ └── CaptchaUtil.java │ │ │ ├── cookie │ │ │ │ └── CookieUtil.java │ │ │ ├── date │ │ │ │ └── DateHelper.java │ │ │ ├── encode │ │ │ │ └── EncodeUtils.java │ │ │ ├── encrypt │ │ │ │ ├── AESUtils.java │ │ │ │ ├── Base64Utils.java │ │ │ │ ├── CryptAES.java │ │ │ │ ├── EncryptUtil.java │ │ │ │ └── MD5Utils.java │ │ │ ├── key │ │ │ │ ├── SnowflakeIdWorker.java │ │ │ │ ├── SystemClock.java │ │ │ │ └── VestaKey.java │ │ │ ├── pk │ │ │ │ └── PKGenerator.java │ │ │ └── plugin │ │ │ │ └── UcanerCommentGenerator.java │ │ │ └── vo │ │ │ └── RespBody.java │ │ └── resources │ │ ├── application-dep.properties │ │ ├── application-dev.properties │ │ ├── application-prod.properties │ │ ├── application.properties │ │ ├── application.yaml │ │ ├── banner.txt │ │ └── logback │ │ ├── logback-dev.xml │ │ └── logback-prod.xml │ └── test │ └── java │ └── cn │ └── ucaner │ └── wx │ └── app │ └── core │ └── ApplicationTest.java ├── wx-app-data ├── pom.xml └── src │ └── main │ ├── java │ └── cn │ │ └── ucaner │ │ └── wx │ │ └── app │ │ └── data │ │ ├── elasticsearch │ │ ├── ElasticSerachApplication.java │ │ ├── config │ │ │ └── ElasticSearchConfig.java │ │ ├── controller │ │ │ └── OrderRestController.java │ │ ├── model │ │ │ ├── Es.java │ │ │ └── Order.java │ │ ├── service │ │ │ ├── BulkProcessorService.java │ │ │ ├── ElasticSearchService.java │ │ │ ├── QueryService.java │ │ │ └── impl │ │ │ │ ├── BulkProcessorServiceImpl.java │ │ │ │ ├── ElasticSearchServiceImpl.java │ │ │ │ └── QueryServiceImpl.java │ │ └── util │ │ │ └── EmptyUtils.java │ │ └── kafka │ │ ├── KafkaApplication.java │ │ ├── consumer │ │ └── Consumer.java │ │ ├── controller │ │ └── SendController.java │ │ └── producer │ │ ├── Message.java │ │ └── Producer.java │ └── resources │ ├── application-dev.yml │ ├── application-prod.yml │ ├── application.properties │ ├── banner.txt │ └── logback │ ├── logback-dev.xml │ └── logback-prod.xml ├── wx-app-gateway ├── .gitignore ├── pom.xml └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── ucaner │ │ │ └── wx │ │ │ └── app │ │ │ └── gateway │ │ │ ├── Application.java │ │ │ ├── annotation │ │ │ ├── LoginUser.java │ │ │ └── support │ │ │ │ └── LoginUserHandlerMethodArgumentResolver.java │ │ │ ├── config │ │ │ ├── HttpsConfiguration.java │ │ │ └── UseConfig.java │ │ │ ├── controller │ │ │ ├── DemoController.java │ │ │ ├── api │ │ │ │ └── ApiController.java │ │ │ ├── common │ │ │ │ └── BaseController.java │ │ │ └── permission │ │ │ │ └── PermissionController.java │ │ │ ├── jwt │ │ │ └── utils │ │ │ │ └── JWTUtil.java │ │ │ └── shiro │ │ │ ├── config │ │ │ └── ShiroConfiguration.java │ │ │ ├── credentials │ │ │ └── RetryLimitHashedCredentialsMatcher.java │ │ │ ├── filter │ │ │ └── JWTFilter.java │ │ │ ├── principal │ │ │ └── JWTToken.java │ │ │ ├── realm │ │ │ └── ApiShiroRealm.java │ │ │ ├── spring │ │ │ └── SpringCacheManagerWrapper.java │ │ │ └── utils │ │ │ ├── PasswordHelper.java │ │ │ └── ValidateUtils.java │ └── resources │ │ ├── application-dev.properties │ │ ├── application-docker.yml │ │ ├── application-prod.properties │ │ ├── application.properties │ │ ├── application.yml │ │ ├── banner.txt │ │ ├── cer │ │ └── server.jks │ │ ├── config │ │ └── ehcache-shiro.xml │ │ ├── docker │ │ └── Dockerfile │ │ ├── logback │ │ ├── logback-dev.xml │ │ └── logback-prod.xml │ │ └── static │ │ ├── errorpage │ │ ├── 404.html │ │ └── 500.html │ │ ├── favicon.ico │ │ └── unauthorized │ │ └── 403.ftl │ └── test │ └── java │ └── cn │ └── ucaner │ └── wx │ └── app │ └── gateway │ ├── GateWayTest.java │ └── JwtTest.java ├── wx-app-service ├── .gitignore ├── mybatis-generator │ ├── generator.properties │ ├── generatorConfig-bak.xml │ └── generatorConfig.xml ├── pom.xml ├── sql │ ├── wxapps_data.sql │ ├── wxapps_schema.sql │ └── wxapps_table.sql └── src │ └── main │ ├── java │ └── cn │ │ └── ucaner │ │ └── wx │ │ └── app │ │ └── service │ │ ├── Application.java │ │ ├── account │ │ └── Demo.java │ │ ├── common │ │ ├── config │ │ │ └── MybatisConfig.java │ │ ├── mp │ │ │ └── UcanerMyBatis3Impl.java │ │ └── plugin │ │ │ └── UcanerCommentGenerator.java │ │ ├── generator │ │ ├── dao │ │ │ ├── TestDao.java │ │ │ └── impl │ │ │ │ └── TestDaoImpl.java │ │ ├── entity │ │ │ └── Test.java │ │ └── service │ │ │ ├── TestService.java │ │ │ └── impl │ │ │ └── TestServiceImpl.java │ │ ├── permission │ │ ├── dao │ │ │ ├── PermissionBaseDao.java │ │ │ ├── PmsMenuDao.java │ │ │ ├── PmsMenuRoleDao.java │ │ │ ├── PmsOperatorDao.java │ │ │ ├── PmsOperatorLogDao.java │ │ │ ├── PmsOperatorRoleDao.java │ │ │ ├── PmsPermissionDao.java │ │ │ ├── PmsRoleDao.java │ │ │ ├── PmsRolePermissionDao.java │ │ │ └── impl │ │ │ │ ├── PermissionBaseDaoImpl.java │ │ │ │ ├── PmsMenuDaoImpl.java │ │ │ │ ├── PmsMenuRoleDaoImpl.java │ │ │ │ ├── PmsOperatorDaoImpl.java │ │ │ │ ├── PmsOperatorLogDaoImpl.java │ │ │ │ ├── PmsOperatorRoleDaoImpl.java │ │ │ │ ├── PmsPermissionDaoImpl.java │ │ │ │ ├── PmsRoleDaoImpl.java │ │ │ │ └── PmsRolePermissionDaoImpl.java │ │ ├── entity │ │ │ ├── PermissionBaseEntity.java │ │ │ ├── PmsMenu.java │ │ │ ├── PmsMenuRole.java │ │ │ ├── PmsOperator.java │ │ │ ├── PmsOperatorLog.java │ │ │ ├── PmsOperatorRole.java │ │ │ ├── PmsPermission.java │ │ │ ├── PmsRole.java │ │ │ └── PmsRolePermission.java │ │ ├── exception │ │ │ └── PermissionException.java │ │ └── service │ │ │ ├── PmsMenuRoleService.java │ │ │ ├── PmsMenuService.java │ │ │ ├── PmsOperatorLogService.java │ │ │ ├── PmsOperatorRoleService.java │ │ │ ├── PmsOperatorService.java │ │ │ ├── PmsPermissionService.java │ │ │ ├── PmsRolePermissionService.java │ │ │ ├── PmsRoleService.java │ │ │ └── impl │ │ │ ├── PmsMenuRoleServiceImpl.java │ │ │ ├── PmsMenuServiceImpl.java │ │ │ ├── PmsOperatorLogServiceImpl.java │ │ │ ├── PmsOperatorRoleServiceImpl.java │ │ │ ├── PmsOperatorServiceImpl.java │ │ │ ├── PmsPermissionServiceImpl.java │ │ │ ├── PmsRolePermissionServiceImpl.java │ │ │ └── PmsRoleServiceImpl.java │ │ └── user │ │ └── Demo.java │ └── resources │ ├── application-dep.properties │ ├── application-dev.properties │ ├── application-prod.properties │ ├── application.properties │ ├── application.yaml │ ├── banner.txt │ ├── logback │ ├── logback-dev.xml │ └── logback-prod.xml │ └── mapper │ ├── permission │ ├── PmsMenuMapper.xml │ ├── PmsMenuRoleMapper.xml │ ├── PmsOperatorLogMapper.xml │ ├── PmsOperatorMapper.xml │ ├── PmsOperatorRoleMapper.xml │ ├── PmsPermissionMapper.xml │ ├── PmsRoleMapper.xml │ └── PmsRolePermissionMapper.xml │ └── user │ └── TestMapper.xml ├── wx-app-web-boss ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── cn │ │ └── ucaner │ │ └── wx │ │ └── app │ │ └── boss │ │ ├── Application.java │ │ ├── controller │ │ ├── common │ │ │ └── BaseController.java │ │ ├── config │ │ │ ├── WebFilterConfig.java │ │ │ └── WebMvcConfig.java │ │ ├── exception │ │ │ └── WebExceptionHandler.java │ │ └── login │ │ │ └── LoginController.java │ │ └── permission │ │ ├── biz │ │ └── PmsMenuBiz.java │ │ ├── controller │ │ ├── PmsMenuController.java │ │ ├── PmsOperatorController.java │ │ ├── PmsPermissionController.java │ │ └── PmsRoleController.java │ │ ├── enums │ │ └── OperatorTypeEnum.java │ │ ├── shiro │ │ ├── config │ │ │ └── ShiroConfiguration.java │ │ ├── credentials │ │ │ └── RetryLimitHashedCredentialsMatcher.java │ │ ├── filter │ │ │ ├── RcCaptchaFilter.java │ │ │ ├── RcCaptchaValidateFilter.java │ │ │ └── RcFormAuthenticationFilter.java │ │ ├── realm │ │ │ ├── MyShiroRealm.java │ │ │ └── OperatorRealm.java │ │ └── spring │ │ │ └── SpringCacheManagerWrapper.java │ │ └── utils │ │ ├── PasswordHelper.java │ │ └── ValidateUtils.java │ ├── resources │ ├── application-dev.properties │ ├── application-docker.yml │ ├── application-prod.properties │ ├── application.properties │ ├── application.yml │ ├── banner.txt │ ├── config │ │ └── ehcache-shiro.xml │ ├── log4j.properties │ └── logback │ │ ├── logback-dev.xml │ │ └── logback-prod.xml │ └── webapp │ ├── common │ ├── error │ │ ├── 400.ftl │ │ ├── 404.ftl │ │ └── 500.ftl │ └── js │ │ ├── login │ │ └── login.js │ │ └── qrcode │ │ ├── jquery.min.js │ │ └── qrcode.js │ ├── dwz │ ├── bin │ │ ├── ESC.wsf │ │ ├── dwz.min.js │ │ ├── gzip.exe │ │ ├── gzjs.bat │ │ └── gzjs.sh │ ├── chart │ │ ├── g.bar.js │ │ ├── g.dot.js │ │ ├── g.line.js │ │ ├── g.pie.js │ │ ├── g.raphael.js │ │ ├── raphael-min.js │ │ ├── raphael.js │ │ └── test │ │ │ ├── barchart.html │ │ │ ├── hbarchart.html │ │ │ ├── linechart.html │ │ │ ├── linechart2.html │ │ │ ├── linechart3.html │ │ │ └── piechart.html │ ├── doc │ │ ├── dwz-user-guide.docx │ │ ├── dwz-user-guide.pdf │ │ └── git.txt │ ├── dwz.frag.xml │ ├── js │ │ ├── dwz.accordion.js │ │ ├── dwz.ajax.js │ │ ├── dwz.alertMsg.js │ │ ├── dwz.barDrag.js │ │ ├── dwz.checkbox.js │ │ ├── dwz.combox.js │ │ ├── dwz.contextmenu.js │ │ ├── dwz.core.js │ │ ├── dwz.cssTable.js │ │ ├── dwz.database.js │ │ ├── dwz.datepicker.js │ │ ├── dwz.dialog.js │ │ ├── dwz.dialogDrag.js │ │ ├── dwz.drag.js │ │ ├── dwz.effects.js │ │ ├── dwz.history.js │ │ ├── dwz.navTab.js │ │ ├── dwz.pagination.js │ │ ├── dwz.panel.js │ │ ├── dwz.print.js │ │ ├── dwz.regional.zh.js │ │ ├── dwz.resize.js │ │ ├── dwz.scrollCenter.js │ │ ├── dwz.sortDrag.js │ │ ├── dwz.stable.js │ │ ├── dwz.switchEnv.js │ │ ├── dwz.tab.js │ │ ├── dwz.taskBar.js │ │ ├── dwz.theme.js │ │ ├── dwz.tree.js │ │ ├── dwz.ui.js │ │ ├── dwz.util.date.js │ │ ├── dwz.util.number.js │ │ ├── dwz.validate.method.js │ │ ├── jquery-1.11.3.js │ │ ├── jquery-1.11.3.min.js │ │ ├── jquery-2.1.4.js │ │ ├── jquery-2.1.4.min.js │ │ ├── jquery.bgiframe.js │ │ ├── jquery.cookie.js │ │ ├── jquery.easing.1.3.js │ │ ├── jquery.validate.js │ │ ├── jquery.validate.min.js │ │ └── speedup.js │ ├── themes │ │ ├── azure │ │ │ ├── images │ │ │ │ ├── accordion │ │ │ │ │ └── accordion.png │ │ │ │ ├── account_info_bg.png │ │ │ │ ├── alert │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ ├── button │ │ │ │ │ ├── button_s.png │ │ │ │ │ ├── imgX.gif │ │ │ │ │ └── imgX.png │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ ├── form │ │ │ │ │ ├── input_bg.png │ │ │ │ │ └── input_bt.png │ │ │ │ ├── grid │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ └── tableth.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── icon.png │ │ │ │ ├── layout │ │ │ │ │ ├── taskbar.png │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ └── toggleSidebar.png │ │ │ │ ├── listLine.png │ │ │ │ ├── menu │ │ │ │ │ └── menu.png │ │ │ │ ├── order_down.gif │ │ │ │ ├── order_up.gif │ │ │ │ ├── pageHeader_bg.png │ │ │ │ ├── panel │ │ │ │ │ ├── panel.png │ │ │ │ │ └── panel_icon.png │ │ │ │ ├── preview.png │ │ │ │ ├── progressBar │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ └── progressBar_s.gif │ │ │ │ ├── search-bg.gif │ │ │ │ ├── search-bt.gif │ │ │ │ ├── shadow │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ └── shadow_h_r.png │ │ │ │ ├── tabs │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ ├── tabspage.png │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ └── tabspanel.png │ │ │ │ └── tree │ │ │ │ │ ├── check.png │ │ │ │ │ ├── folder.png │ │ │ │ │ └── tree.png │ │ │ └── style.css │ │ ├── css │ │ │ ├── core.css │ │ │ ├── ieHack.css │ │ │ ├── login.css │ │ │ └── print.css │ │ ├── default │ │ │ ├── images │ │ │ │ ├── accordion │ │ │ │ │ └── accordion.png │ │ │ │ ├── account_info_bg.png │ │ │ │ ├── alert │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ ├── button │ │ │ │ │ ├── button_s.png │ │ │ │ │ ├── imgX.gif │ │ │ │ │ ├── toleft.gif │ │ │ │ │ ├── toleftone.gif │ │ │ │ │ ├── toright.gif │ │ │ │ │ └── torightone.gif │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ ├── form │ │ │ │ │ ├── input_bg.png │ │ │ │ │ └── input_bt.png │ │ │ │ ├── grid │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ └── tableth.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── icon.png │ │ │ │ ├── layout │ │ │ │ │ ├── taskbar.png │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ └── toggleSidebar.png │ │ │ │ ├── listLine.png │ │ │ │ ├── login_banner.jpg │ │ │ │ ├── login_bg.png │ │ │ │ ├── login_content_bg.png │ │ │ │ ├── login_header_bg.png │ │ │ │ ├── login_list.png │ │ │ │ ├── login_logo.gif │ │ │ │ ├── login_logo.png │ │ │ │ ├── login_sub.png │ │ │ │ ├── login_title.png │ │ │ │ ├── logo.png │ │ │ │ ├── menu │ │ │ │ │ └── menu.png │ │ │ │ ├── order_down.gif │ │ │ │ ├── order_up.gif │ │ │ │ ├── pageHeader_bg.png │ │ │ │ ├── panel │ │ │ │ │ ├── panel.png │ │ │ │ │ └── panel_icon.png │ │ │ │ ├── progressBar │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ └── progressBar_s.gif │ │ │ │ ├── search-bg.gif │ │ │ │ ├── search-bt.gif │ │ │ │ ├── shadow │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ └── shadow_h_r.png │ │ │ │ ├── tabs │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ ├── tabspage.png │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ └── tabspanel.png │ │ │ │ ├── themeButton.png │ │ │ │ ├── tree │ │ │ │ │ ├── check.png │ │ │ │ │ ├── folder.png │ │ │ │ │ └── tree.png │ │ │ │ ├── wx.png │ │ │ │ └── zfb.png │ │ │ └── style.css │ │ ├── green │ │ │ ├── images │ │ │ │ ├── accordion │ │ │ │ │ └── accordion.png │ │ │ │ ├── account_info_bg.png │ │ │ │ ├── alert │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ ├── button │ │ │ │ │ ├── button_s.png │ │ │ │ │ └── imgX.gif │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ ├── form │ │ │ │ │ ├── input_bg.png │ │ │ │ │ └── input_bt.png │ │ │ │ ├── grid │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ └── tableth.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── layout │ │ │ │ │ └── toggleSidebar.png │ │ │ │ ├── listLine.png │ │ │ │ ├── logo.png │ │ │ │ ├── pageHeader_bg.png │ │ │ │ ├── panel │ │ │ │ │ ├── panel.png │ │ │ │ │ └── panel_icon.png │ │ │ │ ├── tabs │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ ├── tabspage.png │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ └── tabspanel.png │ │ │ │ └── tree │ │ │ │ │ └── tree.png │ │ │ └── style.css │ │ ├── purple │ │ │ ├── images │ │ │ │ ├── accordion │ │ │ │ │ └── accordion.png │ │ │ │ ├── account_info_bg.png │ │ │ │ ├── alert │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ ├── button │ │ │ │ │ ├── button_s.png │ │ │ │ │ └── imgX.gif │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ ├── form │ │ │ │ │ ├── input_bg.png │ │ │ │ │ └── input_bt.png │ │ │ │ ├── grid │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ └── tableth.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── layout │ │ │ │ │ ├── taskbar.png │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ └── toggleSidebar.png │ │ │ │ ├── login_bg.png │ │ │ │ ├── login_content_bg.png │ │ │ │ ├── login_header_bg.png │ │ │ │ ├── login_list.png │ │ │ │ ├── menu │ │ │ │ │ └── menu.png │ │ │ │ ├── pageHeader_bg.png │ │ │ │ ├── panel │ │ │ │ │ ├── panel.png │ │ │ │ │ └── panel_icon.png │ │ │ │ ├── progressBar │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ └── progressBar_s.gif │ │ │ │ ├── shadow │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ └── shadow_h_r.png │ │ │ │ ├── tabs │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ ├── tabspage.png │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ └── tabspanel.png │ │ │ │ └── tree │ │ │ │ │ ├── check.png │ │ │ │ │ ├── folder.png │ │ │ │ │ └── tree.png │ │ │ └── style.css │ │ └── silver │ │ │ ├── images │ │ │ ├── accordion │ │ │ │ └── accordion.png │ │ │ ├── account_info_bg.png │ │ │ ├── alert │ │ │ │ ├── alertpanel.png │ │ │ │ └── alertpanel_icon.png │ │ │ ├── button │ │ │ │ ├── button_s.png │ │ │ │ └── imgX.gif │ │ │ ├── dialog │ │ │ │ ├── dialogpanel.png │ │ │ │ └── dialogpanel_icon.png │ │ │ ├── form │ │ │ │ ├── input_bg.png │ │ │ │ └── input_bt.png │ │ │ ├── grid │ │ │ │ ├── grid.png │ │ │ │ ├── resizeCol.png │ │ │ │ └── tableth.png │ │ │ ├── header_bg.png │ │ │ ├── layout │ │ │ │ ├── taskbar.png │ │ │ │ ├── taskbar_control.png │ │ │ │ ├── taskbar_icon.png │ │ │ │ └── toggleSidebar.png │ │ │ ├── listLine.png │ │ │ ├── menu │ │ │ │ └── menu.png │ │ │ ├── pageHeader_bg.png │ │ │ ├── panel │ │ │ │ ├── panel.png │ │ │ │ └── panel_icon.png │ │ │ ├── progressBar │ │ │ │ ├── progressBar_l.gif │ │ │ │ ├── progressBar_m.gif │ │ │ │ └── progressBar_s.gif │ │ │ ├── shadow │ │ │ │ ├── shadow_c_c.png │ │ │ │ ├── shadow_c_l.png │ │ │ │ ├── shadow_c_r.png │ │ │ │ ├── shadow_f_c.png │ │ │ │ ├── shadow_f_l.png │ │ │ │ ├── shadow_f_r.png │ │ │ │ ├── shadow_h_c.png │ │ │ │ ├── shadow_h_l.png │ │ │ │ └── shadow_h_r.png │ │ │ ├── tabs │ │ │ │ ├── tabscontrol.png │ │ │ │ ├── tabspage.png │ │ │ │ ├── tabspage_icon.png │ │ │ │ └── tabspanel.png │ │ │ └── tree │ │ │ │ ├── check.png │ │ │ │ ├── folder.png │ │ │ │ └── tree.png │ │ │ └── style.css │ ├── uploadify │ │ ├── Change Log.txt │ │ ├── css │ │ │ └── uploadify.css │ │ ├── img │ │ │ ├── add.jpg │ │ │ ├── cancel.jpg │ │ │ ├── delete.jpg │ │ │ ├── upload.jpg │ │ │ └── uploadify-cancel.png │ │ └── scripts │ │ │ ├── jquery.uploadify.js │ │ │ ├── jquery.uploadify.min.js │ │ │ └── uploadify.swf │ └── xheditor │ │ ├── xheditor-1.2.2.min.js │ │ ├── xheditor_emot │ │ ├── default │ │ │ ├── angry.gif │ │ │ ├── awkward.gif │ │ │ ├── bye.gif │ │ │ ├── config.txt │ │ │ ├── crazy.gif │ │ │ ├── cry.gif │ │ │ ├── curse.gif │ │ │ ├── cute.gif │ │ │ ├── despise.gif │ │ │ ├── doubt.gif │ │ │ ├── envy.gif │ │ │ ├── fastcry.gif │ │ │ ├── knock.gif │ │ │ ├── laugh.gif │ │ │ ├── mad.gif │ │ │ ├── ohmy.gif │ │ │ ├── panic.gif │ │ │ ├── proud.gif │ │ │ ├── quiet.gif │ │ │ ├── sad.gif │ │ │ ├── shutup.gif │ │ │ ├── shy.gif │ │ │ ├── sleep.gif │ │ │ ├── smile.gif │ │ │ ├── struggle.gif │ │ │ ├── titter.gif │ │ │ ├── tongue.gif │ │ │ ├── wail.gif │ │ │ └── wronged.gif │ │ ├── ipb │ │ │ ├── alien.gif │ │ │ ├── angel.gif │ │ │ ├── angry.gif │ │ │ ├── bandit.gif │ │ │ ├── biglaugh.gif │ │ │ ├── blink.gif │ │ │ ├── blush.gif │ │ │ ├── config.txt │ │ │ ├── cool.gif │ │ │ ├── cry.gif │ │ │ ├── depres.gif │ │ │ ├── devil.gif │ │ │ ├── glare.gif │ │ │ ├── heart.gif │ │ │ ├── joyful.gif │ │ │ ├── kiss.gif │ │ │ ├── laugh.gif │ │ │ ├── magician.gif │ │ │ ├── ninja.gif │ │ │ ├── pinch.gif │ │ │ ├── police.gif │ │ │ ├── sad.gif │ │ │ ├── sick.gif │ │ │ ├── sideways.gif │ │ │ ├── sleep.gif │ │ │ ├── smile.gif │ │ │ ├── surprised.gif │ │ │ ├── tongue.gif │ │ │ ├── unsure.gif │ │ │ ├── w00t.gif │ │ │ ├── whistling.gif │ │ │ ├── wondering.gif │ │ │ └── wub.gif │ │ ├── msn │ │ │ ├── 1.gif │ │ │ ├── 10.gif │ │ │ ├── 11.gif │ │ │ ├── 12.gif │ │ │ ├── 13.gif │ │ │ ├── 14.gif │ │ │ ├── 15.gif │ │ │ ├── 16.gif │ │ │ ├── 17.gif │ │ │ ├── 18.gif │ │ │ ├── 19.gif │ │ │ ├── 2.gif │ │ │ ├── 20.gif │ │ │ ├── 21.gif │ │ │ ├── 22.gif │ │ │ ├── 23.gif │ │ │ ├── 24.gif │ │ │ ├── 25.gif │ │ │ ├── 26.gif │ │ │ ├── 27.gif │ │ │ ├── 28.gif │ │ │ ├── 29.gif │ │ │ ├── 3.gif │ │ │ ├── 30.gif │ │ │ ├── 31.gif │ │ │ ├── 32.gif │ │ │ ├── 33.gif │ │ │ ├── 34.gif │ │ │ ├── 35.gif │ │ │ ├── 36.gif │ │ │ ├── 37.gif │ │ │ ├── 38.gif │ │ │ ├── 39.gif │ │ │ ├── 4.gif │ │ │ ├── 40.gif │ │ │ ├── 5.gif │ │ │ ├── 6.gif │ │ │ ├── 7.gif │ │ │ ├── 8.gif │ │ │ └── 9.gif │ │ └── pidgin │ │ │ ├── angry.gif │ │ │ ├── bad.gif │ │ │ ├── blush.gif │ │ │ ├── brokenheart.gif │ │ │ ├── bye.gif │ │ │ ├── coffee.gif │ │ │ ├── config.txt │ │ │ ├── cool.gif │ │ │ ├── cry.gif │ │ │ ├── curse.gif │ │ │ ├── cute.gif │ │ │ ├── devil.gif │ │ │ ├── envy.gif │ │ │ ├── gift.gif │ │ │ ├── good.gif │ │ │ ├── kiss.gif │ │ │ ├── laugh.gif │ │ │ ├── love.gif │ │ │ ├── music.gif │ │ │ ├── question.gif │ │ │ ├── rose.gif │ │ │ ├── sad.gif │ │ │ ├── shocked.gif │ │ │ ├── shout.gif │ │ │ ├── sick.gif │ │ │ ├── sleepy.gif │ │ │ ├── smile.gif │ │ │ ├── soccer.gif │ │ │ ├── sweat.gif │ │ │ ├── tired.gif │ │ │ ├── tongue.gif │ │ │ ├── victory.gif │ │ │ └── wink.gif │ │ ├── xheditor_lang │ │ ├── en.js │ │ ├── zh-cn.js │ │ └── zh-tw.js │ │ ├── xheditor_plugins │ │ ├── html2markdown.js │ │ ├── htmldomparser.js │ │ ├── multiupload │ │ │ ├── img │ │ │ │ ├── add.gif │ │ │ │ ├── bg1.gif │ │ │ │ ├── bg2.gif │ │ │ │ ├── btnbg.gif │ │ │ │ ├── btnbgr.gif │ │ │ │ ├── clear.gif │ │ │ │ ├── progressbg.gif │ │ │ │ └── start.gif │ │ │ ├── multiupload.css │ │ │ ├── multiupload.html │ │ │ ├── multiupload.js │ │ │ └── swfupload │ │ │ │ ├── swfupload.js │ │ │ │ └── swfupload.swf │ │ ├── showdown.js │ │ └── ubb.js │ │ └── xheditor_skin │ │ ├── blank.gif │ │ ├── default │ │ ├── iframe.css │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── close.gif │ │ │ ├── flash.gif │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── progress.gif │ │ │ ├── progressbg.gif │ │ │ ├── tag-address.gif │ │ │ ├── tag-div.gif │ │ │ ├── tag-h1.gif │ │ │ ├── tag-h2.gif │ │ │ ├── tag-h3.gif │ │ │ ├── tag-h4.gif │ │ │ ├── tag-h5.gif │ │ │ ├── tag-h6.gif │ │ │ ├── tag-p.gif │ │ │ ├── tag-pre.gif │ │ │ ├── waiting.gif │ │ │ ├── wmp.gif │ │ │ └── wordimg.gif │ │ └── ui.css │ │ ├── nostyle │ │ ├── iframe.css │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── close.gif │ │ │ ├── flash.gif │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── progress.gif │ │ │ ├── progressbg.gif │ │ │ ├── tag-address.gif │ │ │ ├── tag-div.gif │ │ │ ├── tag-h1.gif │ │ │ ├── tag-h2.gif │ │ │ ├── tag-h3.gif │ │ │ ├── tag-h4.gif │ │ │ ├── tag-h5.gif │ │ │ ├── tag-h6.gif │ │ │ ├── tag-p.gif │ │ │ ├── tag-pre.gif │ │ │ ├── waiting.gif │ │ │ ├── wmp.gif │ │ │ └── wordimg.gif │ │ └── ui.css │ │ ├── o2007blue │ │ ├── iframe.css │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── buttonbg.gif │ │ │ ├── close.gif │ │ │ ├── flash.gif │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── progress.gif │ │ │ ├── progressbg.gif │ │ │ ├── tag-address.gif │ │ │ ├── tag-div.gif │ │ │ ├── tag-h1.gif │ │ │ ├── tag-h2.gif │ │ │ ├── tag-h3.gif │ │ │ ├── tag-h4.gif │ │ │ ├── tag-h5.gif │ │ │ ├── tag-h6.gif │ │ │ ├── tag-p.gif │ │ │ ├── tag-pre.gif │ │ │ ├── waiting.gif │ │ │ ├── wmp.gif │ │ │ └── wordimg.gif │ │ └── ui.css │ │ ├── o2007silver │ │ ├── iframe.css │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── buttonbg.gif │ │ │ ├── close.gif │ │ │ ├── flash.gif │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── progress.gif │ │ │ ├── progressbg.gif │ │ │ ├── tag-address.gif │ │ │ ├── tag-div.gif │ │ │ ├── tag-h1.gif │ │ │ ├── tag-h2.gif │ │ │ ├── tag-h3.gif │ │ │ ├── tag-h4.gif │ │ │ ├── tag-h5.gif │ │ │ ├── tag-h6.gif │ │ │ ├── tag-p.gif │ │ │ ├── tag-pre.gif │ │ │ ├── waiting.gif │ │ │ ├── wmp.gif │ │ │ └── wordimg.gif │ │ └── ui.css │ │ └── vista │ │ ├── iframe.css │ │ ├── img │ │ ├── anchor.gif │ │ ├── buttonbg.gif │ │ ├── close.gif │ │ ├── flash.gif │ │ ├── icons.gif │ │ ├── loading.gif │ │ ├── progress.gif │ │ ├── progressbg.gif │ │ ├── tag-address.gif │ │ ├── tag-div.gif │ │ ├── tag-h1.gif │ │ ├── tag-h2.gif │ │ ├── tag-h3.gif │ │ ├── tag-h4.gif │ │ ├── tag-h5.gif │ │ ├── tag-h6.gif │ │ ├── tag-p.gif │ │ ├── tag-pre.gif │ │ ├── titlebg.gif │ │ ├── waiting.gif │ │ ├── wmp.gif │ │ └── wordimg.gif │ │ └── ui.css │ └── views │ └── system │ ├── favicon.ico │ ├── index.ftl │ └── login.ftl └── wx-chat-bot ├── pom.xml └── src └── main ├── java └── cn │ └── ucaner │ └── wx │ └── chat │ └── bot │ ├── WeChatBotApplication.java │ ├── aop │ └── HttpAop.java │ ├── biz │ └── common │ │ ├── config │ │ └── CommonConst.java │ │ └── consts │ │ └── ConfigPathConstant.java │ ├── config │ └── SysConfig.java │ ├── dao │ ├── ListenMessageDao.java │ ├── WechatDao.java │ └── impl │ │ ├── ListenMessageDaoImpl.java │ │ └── WechatDaoImpl.java │ ├── framework │ └── common │ │ └── util │ │ ├── base │ │ └── StringHelper.java │ │ ├── date │ │ └── DateHelper.java │ │ ├── ip │ │ └── IpUtil.java │ │ └── properties │ │ └── PropertiesHelper.java │ ├── model │ ├── contact │ │ ├── ContactList.java │ │ ├── ContactMemberModel.java │ │ ├── ContactModel.java │ │ └── MemberModel.java │ ├── core │ │ ├── BaseRequest.java │ │ └── WechatCore.java │ ├── group │ │ ├── GroupInfo.java │ │ └── GroupModel.java │ ├── initialization │ │ ├── BaseResponse.java │ │ ├── InitModel.java │ │ ├── MPArticle.java │ │ ├── MPSubscribeMsg.java │ │ ├── SyncKey.java │ │ ├── SyncKeyModel.java │ │ └── UserModel.java │ ├── listen │ │ ├── AddMessage.java │ │ ├── AddMessageAppInfo.java │ │ ├── AddMessageRecommendInfo.java │ │ ├── MessageModel.java │ │ ├── UnreadMessageModel.java │ │ └── WechatMessageCode.java │ ├── login │ │ └── LoginModel.java │ ├── scan │ │ └── ScanCode.java │ └── statusnotify │ │ └── StatusNotify.java │ ├── service │ ├── ListenMessageService.java │ ├── QrCodeService.java │ ├── WechatRunService.java │ ├── WechatService.java │ ├── impl │ │ ├── ListenMessageServiceImpl.java │ │ ├── QrCodeServiceImpl.java │ │ └── WechatServiceImpl.java │ ├── message │ │ ├── ActionMessage.java │ │ ├── EmojiMessage.java │ │ ├── ImageMessage.java │ │ ├── LinkMessage.java │ │ ├── MiniAppMessage.java │ │ ├── RecallMessage.java │ │ ├── ShowMessageFactory.java │ │ ├── SystemMessage.java │ │ ├── TextMessage.java │ │ ├── VideoMessage.java │ │ ├── VoiceMessage.java │ │ └── core │ │ │ ├── BaseMessage.java │ │ │ ├── IMessage.java │ │ │ ├── IShowMessage.java │ │ │ ├── MessageCache.java │ │ │ ├── MessageCacheUtils.java │ │ │ └── MessageType.java │ └── unreadmsg │ │ ├── LoginOtherDeviceNotice.java │ │ ├── NewMessageNotice.java │ │ ├── NoticeMsgFactory.java │ │ ├── PhoneExitNotice.java │ │ ├── SleepNotice.java │ │ └── core │ │ ├── INotice.java │ │ └── INoticeMsg.java │ ├── utils │ ├── ClassUtils.java │ ├── DingMessageUtils.java │ ├── FileUtils.java │ ├── HttpUtils.java │ ├── IdGenerate.java │ ├── QrcodeUtils.java │ ├── TimeUtils.java │ ├── WechatApiPool.java │ ├── WechatCode.java │ └── XmlUtils.java │ └── windows │ ├── QrCodeFrame.java │ └── QrCodeFrameImage.java └── resources ├── app-wechat-bot.properties ├── application-dev.yaml ├── application-prod.yaml ├── application.yaml ├── banner.txt └── config └── logback ├── logback-dev.xml └── logback-prod.xml /.gitignore: -------------------------------------------------------------------------------- 1 | ###############git ignore by Jason ######### 2 | /.settings/ 3 | /.project 4 | .idea/ 5 | *.iml 6 | ##################Ignore by Jason ######### -------------------------------------------------------------------------------- /wx-app-core/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.settings/ 3 | /.classpath 4 | /.project 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/ext/Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright CHINA GUANGZHOU WANGUO INFO-TECH CO.,LTD

5 | *

All rights reserved.

6 | *

Created on 2018年7月25日 上午10:14:03

7 | *

Created by WUBIN@WANGUO.COM

8 | * 9 | * 10 | */ 11 | package cn.ucaner.wx.app.core.framework.ext; 12 | 13 | /** 14 | * @Package:cn.ucaner.wx.app.core.framework.ext 15 | * @ClassName:Demo 16 | * @Description:

ext 留作以后的框架扩展使用

17 | * @Author: - Jason 18 | * @CreatTime:2018年10月23日 下午7:33:43 19 | * @Modify By: 20 | * @ModifyTime: 2018年10月23日 21 | * @Modify marker: 22 | * @version V1.0 23 | */ 24 | public class Demo { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/controller/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础action接口. by Jason

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/dao/impl/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础dao的实现类.

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/dao/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础dao.

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/entity/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础entity.

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/service/impl/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础service实现.

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/framework/mvc/service/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

基础service.

4 | 5 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/cn/ucaner/wx/app/core/utils/key/VestaKey.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright JasonInternational

5 | *

All rights reserved.

6 | *

Created on 2018年11月23日 下午3:07:58

7 | *

Created by Jason

8 | * 9 | * 10 | */ 11 | package cn.ucaner.wx.app.core.utils.key; 12 | 13 | /** 14 | * @Package:cn.ucaner.wx.app.core.utils.key 15 | * @ClassName:VestaKey 16 | * @Description:

VestaKey - https://www.v2ex.com/t/510260#reply13

17 | * @Author: - Jason 18 | * @CreatTime:2018年11月23日 下午3:07:58 19 | * @Modify By: 20 | * @ModifyTime: 2018年11月23日 21 | * @Modify marker: 22 | * @version V1.0 23 | */ 24 | public class VestaKey { 25 | 26 | } 27 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/resources/application-dep.properties: -------------------------------------------------------------------------------- 1 | #测试环境 2 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | #日志记录级别 2 | #日志记录级别 3 | logging.config=classpath:logback/logback-dev.xml 4 | -------------------------------------------------------------------------------- /wx-app-core/src/main/java/resources/application-prod.properties: -------------------------------------------------------------------------------- 1 | #生产环境配置项 [后期改用yaml profile ] 2 | 3 | 4 | #日志记录级别 5 | logging.config=classpath:logback/logback-prod.xml -------------------------------------------------------------------------------- /wx-app-core/src/main/java/resources/application.properties: -------------------------------------------------------------------------------- 1 | #####ApplicationConfig###### 2 | #激活dev开发环境 3 | spring.profiles.active=dep 4 | #服务器端口 5 | server.port=9092 6 | 7 | spring.message.encoding = UTF-8 -------------------------------------------------------------------------------- /wx-app-core/src/test/java/cn/ucaner/wx/app/core/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.app.core; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @Package:cn.ucaner.wx.app.core 8 | * @ClassName:ApplicationTest 9 | * @Description:

ApplicationTest

10 | * @Author: - Jason 11 | * @CreatTime:2018年10月23日 下午7:58:37 12 | * @Modify By: 13 | * @ModifyTime: 2018年10月23日 14 | * @Modify marker: 15 | * @version V1.0 16 | */ 17 | @SpringBootApplication 18 | public class ApplicationTest { 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(Application.class, args); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /wx-app-data/src/main/java/cn/ucaner/wx/app/data/elasticsearch/service/QueryService.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.app.data.elasticsearch.service; 2 | 3 | import cn.ucaner.wx.app.data.elasticsearch.model.Es; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | /** 9 | * @ClassName:QueryService 10 | * @Description:

QueryService

11 | * @Author: - Jason 12 | * @CreatTime:2019/3/11 - 8:55 13 | * @Modify By: 14 | * @ModifyTime: 2019/3/11 15 | * @Modify marker: 16 | * @version V1.0 17 | */ 18 | public interface QueryService { 19 | 20 | /** 21 | * @param es 22 | * @param storeId 23 | * @param storeName 24 | * @param startDate 25 | * @param endDate 26 | * @return 27 | */ 28 | List> queryListFromES(Es es, int storeId, String storeName, String startDate, String endDate); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /wx-app-data/src/main/java/cn/ucaner/wx/app/data/kafka/KafkaApplication.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.app.data.kafka; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | 5 | /** 6 | * @projectName:wx-app 7 | * @Package:cn.ucaner.wx.app.data.kafka 8 | * @Description:

KafkaApplication

9 | * @Author: - Jason 10 | * @CreatTime:2019/3/8 - 17:44 11 | * @Modify By: 12 | * @ModifyTime: 2019/3/8 13 | * @Modify marker: 14 | */ 15 | //@SpringBootApplication 16 | public class KafkaApplication { 17 | 18 | /** 19 | * main 程序入口 - thanks github 20 | * @param args 21 | */ 22 | public static void main(String[] args) { 23 | SpringApplication.run(KafkaApplication.class, args); 24 | } 25 | } 26 | 27 | 28 | -------------------------------------------------------------------------------- /wx-app-data/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #####ApplicationConfig###### 2 | #激活dev开发环境 3 | spring.profiles.active=dev 4 | 5 | spring.message.encoding=UTF-8 6 | 7 | spring.elasticsearch.host=127.0.0.1 8 | #java http9200 tcp 9300 9 | spring.elasticsearch.port=9300 10 | elasticsearch.cluster.name=elasticsearch -------------------------------------------------------------------------------- /wx-app-gateway/.gitignore: -------------------------------------------------------------------------------- 1 | #IGNORED by JASON 2 | /target/ 3 | /.settings/ 4 | /.classpath 5 | /.project 6 | /logs/ 7 | -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/application-docker.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | driver-class-name: com.mysql.jdbc.Driver 4 | url: jdbc:mysql://${MYSQL_HOST}:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf-8 5 | username: ${MYSQL_USERNAME} 6 | password: ${MYSQL_PASSWORD} 7 | type: com.alibaba.druid.pool.DruidDataSource 8 | -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #####ApplicationConfig###### 2 | #激活dev开发环境 3 | spring.profiles.active=dev 4 | 5 | spring.message.encoding=UTF-8 -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-gateway/src/main/resources/application.yml -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/cer/server.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-gateway/src/main/resources/cer/server.jks -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM java 2 | MAINTAINER tiger 3 | ADD /wx-apps-gateway-1.0.0.jar // 4 | ENTRYPOINT java -jar /wx-apps-gateway-1.0.0.jar -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-gateway/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /wx-app-gateway/src/main/resources/static/unauthorized/403.ftl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-gateway/src/main/resources/static/unauthorized/403.ftl -------------------------------------------------------------------------------- /wx-app-gateway/src/test/java/cn/ucaner/wx/app/gateway/GateWayTest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright JasonInternational

5 | *

All rights reserved.

6 | *

Created by Jason https://github.com/Jasonandy/springboot-wx

7 | * 8 | * 9 | */ 10 | package cn.ucaner.wx.app.gateway; 11 | 12 | /** 13 | * @Package:cn.ucaner.wx.app.gateway 14 | * @ClassName:GateWayTest 15 | * @Description:

GateWayTest

16 | * @Author: - Jason 17 | * @CreatTime:2018年11月2日 上午11:16:25 18 | * @Modify By: 19 | * @ModifyTime: 2018年11月2日 20 | * @Modify marker: 21 | * @version V1.0 22 | */ 23 | public class GateWayTest { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /wx-app-gateway/src/test/java/cn/ucaner/wx/app/gateway/JwtTest.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright JasonInternational

5 | *

All rights reserved.

6 | *

Created by Jason https://github.com/Jasonandy/springboot-wx

7 | * 8 | * 9 | */ 10 | package cn.ucaner.wx.app.gateway; 11 | 12 | /** 13 | * @Package:cn.ucaner.wx.app.gateway 14 | * @ClassName:JwtTest 15 | * @Description:

JwtTest

16 | * @Author: - Jason 17 | * @CreatTime:2018年11月2日 上午11:16:37 18 | * @Modify By: 19 | * @ModifyTime: 2018年11月2日 20 | * @Modify marker: 21 | * @version V1.0 22 | */ 23 | public class JwtTest { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /wx-app-service/.gitignore: -------------------------------------------------------------------------------- 1 | # IGNORED BY JASON 2 | /target/ 3 | /.settings/ 4 | /.classpath 5 | /.project 6 | -------------------------------------------------------------------------------- /wx-app-service/mybatis-generator/generator.properties: -------------------------------------------------------------------------------- 1 | #驱动路径配置 2 | 3 | #MyBatis3Simple MyBatis3 4 | #有扩展插件可以实现修改名字等 tk.mybatis.mapper.generator.TkMyBatis3Impl 5 | #自定义实现 : com.ucaner.wx.service.common.mp.WgMyBatis3Impl 6 | 7 | #@See https://blog.csdn.net/isea533/article/details/52430691 8 | #@See gitee: https://gitee.com/free/Mapper/tree/master/generator/src/main/java/tk/mybatis/mapper/generator 9 | targetRuntime=MyBatis3 10 | 11 | #数据库配置 12 | jdbc_url=jdbc:mysql://47.106.125.14:3306/miniapps?useUnicode=true&characterEncoding=UTF-8 13 | jdbc_driver=com.mysql.jdbc.Driver 14 | jdbc_username=root 15 | jdbc_password=123456 16 | 17 | #输出目录 18 | targetProject=wx-app-service/src/main/java 19 | targetProjectXml=wx-app-service/src/main/resources 20 | 21 | #xml输出路径 22 | targetPackageMapperXml=mapper.user 23 | 24 | #dao输出路径 25 | targetPackageDao=cn.ucaner.wx.app.service.test.dao 26 | #entity输出路径 27 | targetPackageEntity=cn.ucaner.wx.app.service.test.entity -------------------------------------------------------------------------------- /wx-app-service/sql/wxapps_data.sql: -------------------------------------------------------------------------------- 1 | ------------------------------------- 项目数据库相关数据 by Jason 2018 -------------------------------------------- 2 | 3 | -- 格式实例[规范化 方便以后的开发迭代 ] 4 | -- 1.初始实例 5 | -- 2.update更新等操作 6 | 7 | -- example: 8 | -- describe + by author + modifited time 9 | 10 | -----------------------------------------------init Data Start add by Jason 20180725 ---------------------------------- 11 | 12 | 13 | -----------------------------------------------init Data end ----------------------------------------------------------- 14 | 15 | ------------------------------------------------Update/Modifited something by @Author nowDate--------------------------- 16 | 17 | 18 | ------------------------------------------------Update/Modifited end -------------------------------------------------- -------------------------------------------------------------------------------- /wx-app-service/src/main/java/cn/ucaner/wx/app/service/account/Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright ● JasonInternational

5 | *

All rights reserved.

6 | *

Created by Jason see https://github.com/Jasonandy/springboot-wx

7 | * 8 | * 9 | */ 10 | package cn.ucaner.wx.app.service.account; 11 | 12 | /** 13 | * @Package:cn.ucaner.wx.app.service.account 14 | * @ClassName:Demo 15 | * @Description:

Demo

16 | * @Author: - Jason 17 | * @CreatTime:2018年11月2日 上午9:31:41 18 | * @Modify By: 19 | * @ModifyTime: 2018年11月2日 20 | * @Modify marker: 21 | * @version V1.0 22 | */ 23 | public class Demo { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /wx-app-service/src/main/java/cn/ucaner/wx/app/service/permission/dao/PmsOperatorLogDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright ● JasonInternational

5 | *

All rights reserved.

6 | *

Created by Jason see https://github.com/Jasonandy/springboot-wx

7 | * 8 | * 9 | */ 10 | package cn.ucaner.wx.app.service.permission.dao; 11 | 12 | import cn.ucaner.wx.app.service.permission.entity.PmsOperatorLog; 13 | 14 | /** 15 | * @Package:cn.ucaner.wx.app.service.permission.dao 16 | * @ClassName:PmsOperatorLogDao 17 | * @Description:

操作员日志dao

18 | * @Author: - Jason 19 | * @CreatTime:2018年11月2日 上午9:49:55 20 | * @Modify By: 21 | * @ModifyTime: 2018年11月2日 22 | * @Modify marker: 23 | * @version V1.0 24 | */ 25 | public interface PmsOperatorLogDao extends PermissionBaseDao { 26 | 27 | } 28 | -------------------------------------------------------------------------------- /wx-app-service/src/main/java/cn/ucaner/wx/app/service/user/Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | *

Copyright ● JasonInternational

5 | *

All rights reserved.

6 | *

Created by Jason see https://github.com/Jasonandy/springboot-wx

7 | * 8 | * 9 | */ 10 | package cn.ucaner.wx.app.service.user; 11 | 12 | /** 13 | * @Package:cn.ucaner.wx.app.service.user 14 | * @ClassName:Demo 15 | * @Description:

Demo user 用户相关的基本CURD 16 | * 17 | * 根据类型划分 18 | * 19 | * -- 用户 [登录相关] 20 | * -- 商户号相关 [可以配置化 账号分配 后期结合Shiro权限管理] 21 | * -- 业务区分 22 | *

23 | * @Author: - Jason 24 | * @CreatTime:2018年11月2日 上午9:54:35 25 | * @Modify By: 26 | * @ModifyTime: 2018年11月2日 27 | * @Modify marker: 28 | * @version V1.0 29 | */ 30 | public class Demo { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /wx-app-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | #####ApplicationConfig###### 2 | #激活dev开发环境 3 | spring.profiles.active=dev 4 | 5 | #服务器端口 6 | server.port=8090 7 | 8 | spring.message.encoding = UTF-8 9 | 10 | #####ApplicationConfig###### -------------------------------------------------------------------------------- /wx-app-service/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | ##################mybatis相关配置################################# 2 | mybatis: 3 | mapper-locations: classpath*:mapper/**.xml 4 | #mybatis配置文件位置 5 | #config-location: classpath:config/setting/mybatis_config.xml 6 | #type-aliases-package: cn.ucaner.wx.app.service.*.dao 7 | ##################mybatis相关配置################################## -------------------------------------------------------------------------------- /wx-app-web-boss/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | /.settings/ 3 | /.classpath 4 | /.project 5 | -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/resources/application-docker.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | driver-class-name: com.mysql.jdbc.Driver 4 | url: jdbc:mysql://${MYSQL_HOST}:3306/${MYSQL_DATABASE}?useUnicode=true&characterEncoding=utf-8 5 | username: ${MYSQL_USERNAME} 6 | password: ${MYSQL_PASSWORD} 7 | type: com.alibaba.druid.pool.DruidDataSource 8 | -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/resources/application.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-web-boss/src/main/resources/application.yml -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/common/error/400.ftl: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 | 400:请求出错,服务器无法处理此请求! -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/common/error/404.ftl: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 | 404:您所请求的页面不存在! -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/common/error/500.ftl: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 | 500:系统内部错误,请联系管理员处理! -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/common/js/login/login.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 登录验证码. 3 | */ 4 | function changeRandomCode(obj){ 5 | //获取主机地址之后的目录,如: uimcardprj/share/meun.jsp 6 | var pathName=window.document.location.pathname; 7 | //获取带"/"的项目名,如:/uimcardprj 8 | projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1); 9 | //获取当前的时间作为参数,无具体意义 10 | var timenow = new Date().getTime(); 11 | //每次请求需要一个不同的参数,否则可能会返回同样的验证码 12 | //这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了 13 | obj.src = projectName+"/randomCode/create/" + timenow; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/bin/gzip.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-web-boss/src/main/webapp/dwz/bin/gzip.exe -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/doc/dwz-user-guide.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-web-boss/src/main/webapp/dwz/doc/dwz-user-guide.docx -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/doc/dwz-user-guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jasonandy/springboot-wx/743b7440a3d0d2ac91c6a611e6e7af128ef047bb/wx-app-web-boss/src/main/webapp/dwz/doc/dwz-user-guide.pdf -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/doc/git.txt: -------------------------------------------------------------------------------- 1 | #git remote add github https://github.com/dwzteam/dwz_jui.git 2 | git remote add github git@github.com:dwzteam/dwz_jui.git 3 | git remote add oschina git@git.oschina.net:dwzteam/dwz_jui.git 4 | 5 | #提交到csdn code 6 | git push -u origin master 7 | #提交到github 8 | git push -u github master 9 | #提交到oschina 10 | git push -u oschina master 11 | 12 | git tag -a v1.5.1 -m '升级到jQuery1.11.3' 13 | git push origin v1.5.1 14 | git push github v1.5.1 15 | git push oschina v1.5.1 16 | 17 | #删除tag 18 | git tag -d v1.5.1 19 | git push origin :refs/tags/v1.5.1 20 | 21 | github生成SSH公钥 22 | ssh-keygen -t rsa -C "zhanghuihua@sohu.com" 23 | ~/.ssh/id_rsa.pub 中内容复制到github 24 | 25 | #清理git账号 26 | git config --global user.name 27 | 28 | #检查git链接 29 | ssh -T git@github.com -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/js/dwz.print.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author 张慧华 z@j-ui.com 3 | * 4 | */ 5 | (function($){ 6 | $.printBox = function(rel){ 7 | var _printBoxId = 'printBox'; 8 | var $contentBox = rel ? $('#'+rel) : $("body"), 9 | $printBox = $('#'+_printBoxId); 10 | 11 | if ($printBox.size()==0){ 12 | $printBox = $('
').appendTo("body"); 13 | } 14 | 15 | $printBox.html($contentBox.html()).find("[layoutH]").height("auto"); 16 | window.print(); 17 | 18 | } 19 | 20 | })(jQuery); 21 | -------------------------------------------------------------------------------- /wx-app-web-boss/src/main/webapp/dwz/js/speedup.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Roger Wu 3 | */ 4 | /*@cc_on _d=document;eval('var document=_d')@*/ 5 | /*@cc_on eval((function(props) {var code = [];for (var i = 0,l = props.length;i WeChatBotApplication

10 | * @Author: - Jason 11 | * @CreatTime:2019/8/7 - 13:35 12 | * @Modify By: 13 | * @ModifyTime: 2019/8/7 14 | * @Modify marker: 15 | */ 16 | @SpringBootApplication 17 | public class WeChatBotApplication { 18 | 19 | public static void main(String[] args) { 20 | SpringApplication.run(WeChatBotApplication.class, args); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/biz/common/consts/ConfigPathConstant.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.biz.common.consts; 2 | 3 | /** 4 | * @projectName:springboot-wx 5 | * @Package:cn.ucaner.wx.chat.bot.biz.common.consts 6 | * @Description:

ConfigPathConstant

7 | * @Author: - Jason 8 | * @CreatTime:2019/8/7 - 14:41 9 | * @Modify By: 10 | * @ModifyTime: 2019/8/7 11 | * @Modify marker: 12 | */ 13 | public class ConfigPathConstant { 14 | 15 | /** 16 | * app-wechat-bot.properties 配置文件 17 | */ 18 | public static final String CONFIG_SYSTEM_APP_PATH = "app-wechat-bot.properties"; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/model/listen/WechatMessageCode.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.model.listen; 2 | 3 | /** 4 | * @ClassName:WechatMessageCode 5 | * @Description:

WechatMessageCode

6 | * @Author: - Jason 7 | * @CreatTime:2019/8/7 - 13:52 8 | * @Modify By: 9 | * @ModifyTime: 2019/8/7 10 | * @Modify marker: 11 | * @version V1.0 12 | */ 13 | public class WechatMessageCode { 14 | 15 | /** 16 | * 手机退出 17 | */ 18 | public static final Integer PHONE_EXIT = 1100; 19 | 20 | /** 21 | * 其他网页登陆 22 | */ 23 | public static final Integer OTHER_WEB_LOGIN = 1101; 24 | 25 | /** 26 | * 微信消息 27 | */ 28 | public static final Integer MESSAGE = 0; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/ListenMessageService.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service; 2 | 3 | import cn.ucaner.wx.chat.bot.model.initialization.SyncKeyModel; 4 | import cn.ucaner.wx.chat.bot.model.login.LoginModel; 5 | import cn.ucaner.wx.chat.bot.model.scan.ScanCode; 6 | 7 | /** 8 | * @ClassName:ListenMessageService 9 | * @Description:

ListenMessageService

10 | * @Author: - Jason 11 | * @CreatTime:2019/8/7 - 13:59 12 | * @Modify By: 13 | * @ModifyTime: 2019/8/7 14 | * @Modify marker: 15 | * @version V1.0 16 | */ 17 | public interface ListenMessageService { 18 | 19 | 20 | /** 21 | * listen 22 | * @param scanCode 23 | * @param loginModel 24 | * @param syncKey 25 | */ 26 | void listen(ScanCode scanCode, LoginModel loginModel, SyncKeyModel syncKey); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/QrCodeService.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service; 2 | 3 | /** 4 | * @ClassName:QrCodeService 5 | * @Description:

QrCodeService

6 | * @Author: - Jason 7 | * @CreatTime:2019/8/7 - 13:48 8 | * @Modify By: 9 | * @ModifyTime: 2019/8/7 10 | * @Modify marker: 11 | * @version V1.0 12 | */ 13 | public interface QrCodeService { 14 | 15 | void show(String uuid); 16 | 17 | void close(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/message/core/IMessage.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.message.core; 2 | 3 | import cn.ucaner.wx.chat.bot.model.listen.AddMessage; 4 | 5 | /** 6 | * @ClassName:IMessage 7 | * @Description:

IMessage

8 | * @Author: - Jason 9 | * @CreatTime:2019/8/7 - 14:09 10 | * @Modify By: 11 | * @ModifyTime: 2019/8/7 12 | * @Modify marker: 13 | * @version V1.0 14 | */ 15 | public interface IMessage { 16 | 17 | void showMessage(); 18 | 19 | void initData(AddMessage message); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/message/core/IShowMessage.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.message.core; 2 | 3 | import cn.ucaner.wx.chat.bot.model.listen.AddMessage; 4 | 5 | /** 6 | * @ClassName:IShowMessage 7 | * @Description:

IShowMessage

8 | * @Author: - Jason 9 | * @CreatTime:2019/8/7 - 14:09 10 | * @Modify By: 11 | * @ModifyTime: 2019/8/7 12 | * @Modify marker: 13 | * @version V1.0 14 | */ 15 | public interface IShowMessage { 16 | 17 | IMessage createMessage(AddMessage message); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/message/core/MessageType.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.message.core; 2 | 3 | /** 4 | * @ClassName:MessageType 5 | * @Description:

MessageType

6 | * @Author: - Jason 7 | * @CreatTime:2019/8/7 - 14:11 8 | * @Modify By: 9 | * @ModifyTime: 2019/8/7 10 | * @Modify marker: 11 | * @version V1.0 12 | */ 13 | public enum MessageType { 14 | 15 | TEXT("文本"), 16 | IMAGES("图片"), 17 | VOICE("语音"), 18 | VIDEO("视频"), 19 | EMOJI("表情包"), 20 | RECALL("撤回一条消息"), 21 | LINK("分享链接"), 22 | MINIAPP("小程序"), 23 | OPEN("打开"), 24 | CLOSE("关闭") 25 | ; 26 | 27 | MessageType(String name) { 28 | this.name = name; 29 | } 30 | 31 | private String name; 32 | 33 | public String getName() { 34 | return name; 35 | } 36 | 37 | public void setName(String name) { 38 | this.name = name; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/unreadmsg/LoginOtherDeviceNotice.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.unreadmsg; 2 | 3 | import cn.ucaner.wx.chat.bot.service.unreadmsg.core.INotice; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | import org.springframework.stereotype.Service; 7 | 8 | /** 9 | * @ClassName:LoginOtherDeviceNotice 10 | * @Description:

其他设备登陆通知

11 | * @Author: - Jason 12 | * @CreatTime:2019/8/7 - 14:12 13 | * @Modify By: 14 | * @ModifyTime: 2019/8/7 15 | * @Modify marker: 16 | * @version V1.0 17 | */ 18 | @Service 19 | public class LoginOtherDeviceNotice implements INotice { 20 | 21 | private static final Logger LOGGER = LoggerFactory.getLogger(LoginOtherDeviceNotice.class); 22 | 23 | @Override 24 | public void process() { 25 | LOGGER.info("你在其他地方登录了web微信..."); 26 | System.exit(0); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/unreadmsg/PhoneExitNotice.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.unreadmsg; 2 | 3 | import cn.ucaner.wx.chat.bot.service.unreadmsg.core.INotice; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | import org.springframework.stereotype.Service; 7 | 8 | /** 9 | * @ClassName:PhoneExitNotice 10 | * @Description:

手机退出通知

11 | * @Author: - Jason 12 | * @CreatTime:2019/8/7 - 14:14 13 | * @Modify By: 14 | * @ModifyTime: 2019/8/7 15 | * @Modify marker: 16 | * @version V1.0 17 | */ 18 | @Service 19 | public class PhoneExitNotice implements INotice { 20 | 21 | private static final Logger LOGGER = LoggerFactory.getLogger(PhoneExitNotice.class); 22 | 23 | @Override 24 | public void process() { 25 | LOGGER.info("你在手机上退出了微信..."); 26 | System.exit(0); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/unreadmsg/core/INotice.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.unreadmsg.core; 2 | 3 | /** 4 | * @ClassName:INotice 5 | * @Description:

INotice

6 | * @Author: - Jason 7 | * @CreatTime:2019/8/7 - 14:12 8 | * @Modify By: 9 | * @ModifyTime: 2019/8/7 10 | * @Modify marker: 11 | * @version V1.0 12 | */ 13 | public interface INotice { 14 | 15 | /** 16 | * 处理通知 17 | */ 18 | void process(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/service/unreadmsg/core/INoticeMsg.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.service.unreadmsg.core; 2 | 3 | import cn.ucaner.wx.chat.bot.model.listen.UnreadMessageModel; 4 | 5 | /** 6 | * @ClassName:INoticeMsg 7 | * @Description:

INoticeMsg

8 | * @Author: - Jason 9 | * @CreatTime:2019/8/7 - 14:03 10 | * @Modify By: 11 | * @ModifyTime: 2019/8/7 12 | * @Modify marker: 13 | * @version V1.0 14 | */ 15 | public interface INoticeMsg { 16 | 17 | INotice createNoticeMsg(UnreadMessageModel unreadMessage); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/utils/ClassUtils.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.utils; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | /** 6 | * @ClassName:ClassUtils 7 | * @Description:

ClassUtils

8 | * @Author: - Jason 9 | * @CreatTime:2019/8/7 - 13:40 10 | * @Modify By: 11 | * @ModifyTime: 2019/8/7 12 | * @Modify marker: 13 | * @version V1.0 14 | */ 15 | public class ClassUtils { 16 | 17 | /** 18 | * 通过方法名调用方法 19 | * @param clazz 调用的Class 20 | * @param methodName 调用的方法名 21 | * @param param 调用的参数 22 | */ 23 | public static void invokeMethod(Class clazz, String methodName, T param) { 24 | try { 25 | Method m1 = clazz.getDeclaredMethod(methodName, new Class[]{param.getClass()}); 26 | m1.invoke(clazz.newInstance(), new Object[]{param}); 27 | } catch (Exception e) { 28 | e.printStackTrace(); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/utils/IdGenerate.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.utils; 2 | 3 | import java.util.Random; 4 | import java.util.UUID; 5 | 6 | /** 7 | * @ClassName:IdGenerate 8 | * @Description:

IdGenerate

9 | * @Author: - Jason 10 | * @CreatTime:2019/8/7 - 13:42 11 | * @Modify By: 12 | * @ModifyTime: 2019/8/7 13 | * @Modify marker: 14 | * @version V1.0 15 | */ 16 | public class IdGenerate { 17 | 18 | /** 19 | * 获取uuid 20 | */ 21 | public static String getUUId(){ 22 | return UUID.randomUUID().toString().replace("-",""); 23 | } 24 | 25 | /** 26 | * 随机生成设备id 27 | */ 28 | public static String getDeviceId(){ 29 | double random = new Random().nextDouble(); 30 | String deviceId = "e"+String.valueOf(random).substring(2, 17); 31 | return deviceId; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/utils/TimeUtils.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.utils; 2 | 3 | /** 4 | * @ClassName:TimeUtils 5 | * @Description:

TimeUtils

6 | * @Author: - Jason 7 | * @CreatTime:2019/8/7 - 13:43 8 | * @Modify By: 9 | * @ModifyTime: 2019/8/7 10 | * @Modify marker: 11 | * @version V1.0 12 | */ 13 | public class TimeUtils { 14 | 15 | public static int getTime(){ 16 | long time = System.currentTimeMillis(); 17 | return (int)(time/1000); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/utils/WechatCode.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.utils; 2 | 3 | 4 | /** 5 | * @ClassName:WechatCode 6 | * @Description:

WechatCode

7 | * @Author: - Jason 8 | * @CreatTime:2019/8/7 - 13:43 9 | * @Modify By: 10 | * @ModifyTime: 2019/8/7 11 | * @Modify marker: 12 | * @version V1.0 13 | */ 14 | public class WechatCode { 15 | 16 | /** 17 | * 扫码授权成功 18 | */ 19 | public static final String SUCCESS = "200"; 20 | 21 | /** 22 | * 扫码成功,等待确认 23 | */ 24 | public static final String WAITING_VERIFY = "201"; 25 | 26 | public static final String TIMEOUT = "408"; 27 | 28 | public static final String OTHER_DEVICES_LOGIN = "400"; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/java/cn/ucaner/wx/chat/bot/windows/QrCodeFrameImage.java: -------------------------------------------------------------------------------- 1 | package cn.ucaner.wx.chat.bot.windows; 2 | 3 | import javax.swing.ImageIcon; 4 | import javax.swing.JPanel; 5 | import java.awt.Graphics; 6 | 7 | /** 8 | * @ClassName:QrCodeFrameImage 9 | * @Description:

QrCodeFrameImage

10 | * @Author: - Jason 11 | * @CreatTime:2019/8/7 - 13:45 12 | * @Modify By: 13 | * @ModifyTime: 2019/8/7 14 | * @Modify marker: 15 | * @version V1.0 16 | */ 17 | public class QrCodeFrameImage extends JPanel { 18 | 19 | private String imagePath; 20 | 21 | public QrCodeFrameImage(String imagePath) { 22 | this.imagePath = imagePath; 23 | } 24 | 25 | @Override 26 | public void paint(Graphics g) { 27 | super.paint(g); 28 | ImageIcon icon = new ImageIcon(imagePath); 29 | g.drawImage(icon.getImage(), 0, 0, 400, 400, this); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/resources/app-wechat-bot.properties: -------------------------------------------------------------------------------- 1 | # 微信二维码超时时间 2 | wechat.qrcode.time=180 3 | # 微信特殊账号昵称 4 | wechat.special.usernames=filehelper,weixin,weibo 5 | # 微信服务器域名 6 | wechat.hosts=wx2.qq.com,webpush.wx2.qq.com,wx8.qq.com,webpush.wx8.qq.com,qq.com,webpush.wx.qq.com,web2.wechat.com,webpush.web2.wechat.com,wechat.com,webpush.web.wechat.com,webpush.weixin.qq.com,webpush.wechat.com,webpush1.wechat.com,webpush2.wechat.com,webpush.wx.qq.com,webpush2.wx.qq.com 7 | # 微信缓存地址 8 | wechat.cache.path=C:\\Users\\Jason's-PC\\Documents\\WeChat Files 9 | # 钉钉机器人推送 10 | wechat.dingding.token=1234 11 | # 特别关心列表 ',' 号分割 (可以存id或者昵称) 12 | wechat.concerned.list=傻子 13 | # 黑名单 ',' 号分割 14 | wechat.blacklist=公司群 15 | -------------------------------------------------------------------------------- /wx-chat-bot/src/main/resources/application-dev.yaml: -------------------------------------------------------------------------------- 1 | ################################ spring logging config start ########################################################### 2 | logging: 3 | config: classpath:config/logback/logback-dev.xml 4 | ################################ spring logging config end ############################################################# -------------------------------------------------------------------------------- /wx-chat-bot/src/main/resources/application-prod.yaml: -------------------------------------------------------------------------------- 1 | ################################ spring logging config start ########################################################### 2 | logging: 3 | config: classpath:config/logback/logback-prod.xml 4 | ################################ spring logging config end ############################################################# -------------------------------------------------------------------------------- /wx-chat-bot/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | #################################### server port config start ########################################################## 2 | server: 3 | port: 9095 4 | #################################### server port config end ############################################################ 5 | 6 | #################################### spring config start ############################################################# 7 | spring: 8 | profiles: 9 | active: prod 10 | tomcat: 11 | max-http-post-size: -1 12 | application: 13 | name: wx-chat-bot 14 | #################################### spring config end ############################################################### --------------------------------------------------------------------------------