平台开发指南
平台上有关开发的规范、技巧、范例等等
大道不孤,众行致远
微信号:qlmtuiguang
展开
-
开发指南035-刷新待办
这个问题在平台上的难点在于:待办是在门户系统里,待办的处理是在另一个独立的前端工程里,两者是跨域关系。当然这两个系统都是同一个浏览器打开的。跨域页面通讯技术的核心是:消息监听。这里的关键点是门户打开业务系统链接要使用window.open函数。methods定义消息处理函数。调用待办组件的刷新方法。调用后台处理业务成功后调用该函数即可。原创 2024-06-27 06:35:43 · 113 阅读 · 0 评论 -
开发指南034-安全考虑
1、采用短信验证时,限制同一手机号当天最大发送N次(在参数管理中配置)2、累计密码验证错误超过N次时(在参数管理中配置),账号锁定。========== 持续更新中 ==============4、不细分用户不存在、密码错场景,通通报 用户或密码错。3、查询接口对输入的查询参数进行防注入处理。5、关闭nginx的版本显示。原创 2024-06-23 23:15:55 · 64 阅读 · 0 评论 -
开发指南033-数据库兼容
对于这类问题,平台采用统一自定义函数解决,例如上面的round函数,所有程序一律写完my_round。然后在数据库里利用自定义函数编写my_round。单一数据库自身就有一些不同处理之处,如果一个平台要兼容所有数据库,就是难上加难,像isnull函数各数据库就不同。原创 2024-06-22 09:38:09 · 205 阅读 · 0 评论 -
开发指南032-调整日志级别
=========持续更新中==========1) 显示SQL语句及其参数。2)feign显示调用过程。原创 2024-06-22 09:37:46 · 179 阅读 · 0 评论 -
开发指南031-安装ssl证书
C:\Users\Administrator\.minio\certs下拷贝*.key *.crt证书 名字必须为private.key public.crt。运行目录增加certs 拷贝*.key *.crt证书 名字必须为private.key public.crt。1、conf目录下增加cert目录,拷贝*.key *.pem格式证书(即下载nginx版证书)resources目录下拷贝*.jks (即下载java版证书)启动脚本增加 --certs-dir 证书目录。2、nginx.conf增加。原创 2024-06-18 19:16:34 · 571 阅读 · 0 评论 -
开发指南030-常用的工具网站
------------持续更新中------------------------3、Properties和Yaml格式互转。7、unicode中文互转。6、获取maven库坐标。4、生成banner。原创 2024-06-15 07:51:05 · 251 阅读 · 0 评论 -
开发指南029-el-table-column对齐属性
还有这样的解决方案:el-table增加 :cell-style=“{ textAlign:‘left’}” 问题是需要控制在列上,有限列要居中,例如名字。有的要右对齐,例如数字字段。按开发文档和正常理解,el-table-column具有属性align,可以填left,center,right控制内容的对齐方式。还有这样的,对对应的列增加:el-table_1_column_4 .cell {查网络,大部分怀疑你用错属性了,elment-ui版本不对,css冲突等等。其实都没有回答在点子上。原创 2024-06-09 18:25:13 · 427 阅读 · 0 评论 -
开发指南028-生成二维码
注意二维码大小不是随意的,他的生成原理是根据内容大小得到标准尺寸(和你要求的尺寸没关系,只和内容有关),然后按要求大小,通过放大标准尺寸来贴近(只能按整数倍来放大),不足的地方留白了。网上很多解决办法的核心原理是把标准尺寸按非整数倍去放大,这种办法会导致图形变形,可能会导致无法读取。标准尺寸是以4为单位递增的数列,放大2倍为8,所以找到对应整数倍的尺寸并不难,而且和要求的尺寸偏差不会太大。所以平台要求是找到合适的尺寸再来调用,而不是给个任意尺寸,让平台去适应,按照二维码的生成原理,这是不现实的。原创 2024-06-08 22:55:58 · 360 阅读 · 0 评论 -
开发指南027-微信支付
提供jar包而不是微服务接口的原因是:1 微信支付相关参数不同业务是不同的,要配置在业务的配置文件里;2 可以和上面第一步集成在同一个接口里,前端只需要调用1次。订单信息分为两层,业务层和微信层,业务层保留订单的详细信息,微信层只有总金额信息。业务层平台不关心,只提供微信层的封装方法。拿到WxPayInfoDto后前端调用相应接口。回调接口是在创建微信订单过程中传过去的参数。这部分根据业务自行实现,没有要求。1) 调用相关业务接口创建业务层订单。2)调用平台微信支付接口创建订单。3)前端调用微信支付。原创 2024-06-05 10:10:28 · 239 阅读 · 0 评论 -
开发指南026-定时任务
(1)每月第几天和每星期第几天是互斥的,两个只能设置1个。如果有好几个时间点,可以使用”,”符号,例如:”0010,12,14**?”表示每天的10时,12时,14时执行Job.例如”0010,12,14?MON2006”表示2006年每星期一的10时,12时,14时执行Job.(2)对于连续时间可以使用”-”符号。例如:”010,12,141-15*?”表示每月的1到15日10时,12时,14时执行Job.平台上支持定时任务,基本思路是自己开发微服务,通过平台的配置和调度来管理这些定时微服务。原创 2024-05-19 20:10:42 · 186 阅读 · 0 评论 -
开发指南025-VUE2下父子数据交换
在子组件里通过props定义参数,例如props:["para1","para2"],父组件里用:para1="value1" :para2="value2"传递参数。子通过this.$emit("update:参数",值)回传。子调用父 this.$emit("ondo",参数1,参数2)子组件通过this.$emit("input",值)返回。子组件在props里定义 "value" 参数。3、子调用父的函数,执行操作,并传递参数。1、父通过参数调用子,单项传递。2、父通过$refs取得子的数据。原创 2024-05-19 18:45:42 · 646 阅读 · 0 评论 -
开发指南024-业务类权限
有些权限我称之为业务权限,这种权限和业务绑定,就不在平台底层的权限管理中处理了。在赛事服务平台中,一个机构有多个业务员,业务员可以发展自己的合作学校,各个业务员之间不允许看各自的学校。这一场景中,合作学校的数据是业务数据,平台底层是不感知的,所以不可能在平台级别的权限管理中进行定义。在平台级别只能区分出业务员和管理者,定义后在后台数据库中标记这两个角色为系统预制角色(即用户只能修改名称,不能删除)。查询接口中判断当前登录人员的角色,如果为Y(这些是平台接口基类的功能),则附加条件限定只能查本人的。原创 2024-05-18 06:33:21 · 461 阅读 · 0 评论 -
开发指南023-生成参赛证
赛事平台业务上需要生成参赛证或奖状,平台采用定义PDF模板,使用ITEXT操作PDF文件,使用信息填充的技术路线。(统一建立一个/template目录,模板文件已下载的就不要再下载了)resultfile 生成的参赛证文件(统一建立个/tmp目录,本地生成后传输到Minio)mingshifenxiangchangdi:名师分享场地。shengdianchangdi:盛典场地。cansaileixing:参赛类型。cansaidalei:参赛大类别。cansaihao:参赛号。changdi:场地。原创 2024-05-15 21:20:03 · 184 阅读 · 0 评论 -
开发指南022-多版本APP的账号统一
移动前端有多种形态,对于管理系统领域主要有4种形态:H5、微信小程序、钉钉小程序、飞书小程序。但是在实际应用时还有个账号统一的问题。例如H5版要和微信小程序账号一致(注意还有PC端)。微信小程序运行时,先用openid查账号是否已经注册,如果注册则通过openid关联对应账号进行管理后台登录。如果没有对应关系,弹出对话框要求输入手机号(这样做一是可以避免鹅厂校验手机号收费,二是允许绑定其他手机号)。H5、PC端自行注册用户密码。登录后,在我的里面出现二维码,扫描绑定微信号。H5、PC端支持扫描登录。原创 2024-05-05 10:36:22 · 188 阅读 · 0 评论 -
开发指南021-swagger的使用
我们的平台尽量不产生如此大的变动。升级总是会带来各种各样的问题,搞向下兼容消耗的资源也是巨大的。微软这样的金主都放弃了操作系统、浏览器早期版本的维护。后台开发人员,先用swagger来测试接口,因为系统有登录验证,测试不是很方便。后台接口用swagger3来管理。之前有些老项目使用了swagger2,强制要求升级到swagger3.//------------测试用-------原创 2024-04-01 16:45:07 · 276 阅读 · 0 评论 -
开发指南020-banner
想修改的话,可以在App工程resource目录下加入自己的banner.txt,例如赛事平台的微服务都增加如下banner。以上组件封装了平台的banner,不做任何配置的话,将输出平台的banner。原创 2024-03-31 07:20:14 · 323 阅读 · 0 评论 -
开发指南019-版本标识
前端时间忙着搞赛事平台总体设计。今天开始恢复平台开发指南的发布。平台设计了查询运行系统版本的能力。version.add("2017-03-05|王冰|增加自助离职申请提交");version.add("2018-03-16|王冰|条件查询增加岗位名称");version.add("2017-05-25|王冰|管理附加人员");http://服务器:端口/version?//----------------类版本管理----------访问微服务对应的端口的/version端口,可以获取版本。原创 2024-03-29 06:17:21 · 161 阅读 · 0 评论 -
开发指南018-前端存储
src/utils/qlm_store.js封装了前端存储底层函数。登录后的用户信息都是通过调用底层函数进行保存的。通过封装CryptoJS.AES完成:import CryptoJS from 'crypto-js'* 调用时不输入该参数时,存储位置由QLMConfig.qlm_jwt_store配置决定。* 当window.QLMConfig.debug=="true" 时存为明文,否则为密文。* StoreType:存储位置 cookie|session|localStorage。原创 2024-03-22 16:17:09 · 790 阅读 · 0 评论 -
开发指南017- 移动前端结构
api 访问后台的接口文件,协议同pc前端。qlmcomponents --平台组件。static 静态文件。pages 页面文件。原创 2024-03-22 07:48:53 · 115 阅读 · 0 评论 -
开发指南016-前端图标规范
平台为了保证统一性,做了很多约定,例如按钮图标等,平台规定图标取自这两个地方。在整个平台上运行的系统必须保持一致。打开/开通: <i class="el-icon-folder-opened " />取消/关闭:<i class="el-icon-switch-button" />复制:<i class="el-icon-copy-document" />禁用:<i class="el-icon-video-pause" />启用:<i class="el-icon-video-play" />原创 2024-03-20 17:29:24 · 666 阅读 · 0 评论 -
开发指南015-前端缓存的信息
this.$store.getters.rolenames // 享有的角色。this.$store.getters.userId // 用户ID。this.$store.getters.userName // 用户姓名。deptName: "",// 部门名称。orgName: "",// 单位名称。deptId: "", //所在部门。telephone:"",// 电话。mobile:"", //手机。orgId: "", //所在单位。2) 用户信息。原创 2024-03-20 17:22:58 · 313 阅读 · 0 评论 -
开发指南014-PC前端编程步骤
1)在对应位置建目录,如项目一般为src/views/project/模块目录/功能目录。后台接口文档可以直接访问对应服务的swagger-ui界面。4)必要时src/store/modules目录下建立vuex。其中功能目录可选,可以模块目录下直接存功能文件。无需手工加路由,路由是平台功能管理模块维护的。3)src/api目录下编写对外访问接口。接口文件编写请遵照IO规范。原创 2024-03-18 16:05:25 · 104 阅读 · 0 评论 -
开发指南013-国际化-前台部分
前端基于i18n实现。平台有个重要思想,不要什么都自己干,有成熟解决方案就集成,把有限的精力投到自己擅长的地方去。其中CmsSitePropertyDto为后台获取的本系统站点属性,languageSupport控制是否显示语言切换框。使用$t访问即可,例如$t("permission.confirm")在lang目录下建立和修改对应资源。zh-cn.js 简体中文。zh-tw.js 繁体中文。main.js中引入。语言切换为底层控件,原创 2024-03-18 15:38:31 · 414 阅读 · 0 评论 -
开发指南013-国际化-后台部分
平台底层做了国际化处理。开发时候根据项目性质,决定是否采用国际化,但是底层所需资源必须包含(一些底层例如登录校验都做了对应处理)。平台先支持中文简体、中文繁体、英文、日文,必要时可以随时扩展其他语言。国际化前端和后台的处理不一样。最关键的是表sys_resource_string。String msg=LanguageUtil.getResource(lang,"Login_0005","用户不存在");lang为前端请求时传入的语言环境参数,详见。原创 2024-03-17 08:57:09 · 211 阅读 · 0 评论 -
开发指南010-后台结构
dao层需要实现public interface BaseDAO 接口。当然这是个逻辑结构,这些层可能不是一个程序工程里的,而是分成多个工程。为了实现信息交互,一般dto层都是单独的工程。control层需要扩展BaseController类。service层面没有基类。原创 2024-03-14 20:15:59 · 208 阅读 · 0 评论 -
开发指南012-后台编程步骤
一般项目中entity、dto、dao、service、controller可以在一个项目工程里。但是产品中推荐分层建工程。例如dto层,多个微服务可以共享一个dto项目。9、运行(这个时候系统会自动根据3更新数据库,无需手工操作)8、建立配置文件(本地和nacos里)10、基于swagger进行调试开发。以上步骤不是流水的,可以反复迭代。7、编写controller层。6、编写service层。3、编写entity层。1、复制模板后台工程。原创 2024-03-15 16:18:18 · 280 阅读 · 0 评论 -
开发指南011-前端PC版结构
使用assets目录的好处是资源不存在系统编译时报错,缺点是打包后文件名字和代码项目里不一致。平台弃用了assets目录 要求资源放到public目录下。platform -- 平台所属页面。static -- 各种js文件。qlmcomponents --平台组件。images -- 各类图片。utils -- 公用工具。*** --对应产品页面。lang --语言包。styles --风格。api --接口文件。router --路由。原创 2024-03-15 16:08:46 · 376 阅读 · 0 评论 -
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法。平台的设计思想就是为一些典型的场景设计对应的解决方法,通过模式化的方法来简化编程和提高维护性(通过标准化来减少学习成本和维护成本,张三做的东西和李四做的东西模式一样)基本模式就是填充ExportOfListVO,然后调用ExcelUtil.exportExcel。field对应数据对象的数据属性。原创 2024-03-14 00:15:22 · 282 阅读 · 0 评论 -
开发指南007-导出Excel
写法和调用其他接口一样,只是增加一句responseType 这个和后台的downFile函数配合获取到excel文件的二进制流。获取二进制流后需要前端转换为文件,需要调用前端底层函数。平台上开发导出Excel比过去的单体架构要复杂些,因为前端和后台不在一个进程空间里。后台的操作是先生成excel文件,技术路线是jxl。其中·filepath为上述生成的excel文件的位置。filename为客户端下载后的文件名。具体如何使用,请自行查询网络。原创 2024-03-13 17:27:50 · 386 阅读 · 0 评论 -
开发指南008-接口路由规定
public/微服务标识/*** :例如/publci/usermanager/**也会到用户管理微服务,但是这个接口不校验权限,例如生成登录校验码的微服务就不需要校验权限。/微服务标识/***: 例如/usermanager/**会路由到用户管理微服务,这种格式的接口会校验权限。没有登录或没有权限是无法访问的。原创 2024-03-13 17:36:33 · 399 阅读 · 0 评论 -
开发指南006-后端配置文件
这里最重要的是端口号,同一个目录下可以是一个jar包+多个配置文件,启动批处理中,按一个配置文件启动一个程序的方式启动多个服务。升级系统时只覆盖QLM-Portal-Service-1.0-SNAPSHOT.jar即可。后端配置文件分为两层,一是部署目录中的。另外就是nacos地址。原创 2024-03-12 08:02:51 · 309 阅读 · 0 评论 -
开发指南005-前端配置文件
平台要求无论前端还是后端,修改配置可以直接用记事本修改,无需重新打包或修改压缩包里文件。就前端而言,很多系统修改配置是在代码里修改,然后打包或者是修改编译环境来重新编译。其中最重要的是qlm_gateway_url指明网关位置或者直接指向一个微服务。1、直接使用window.QLMConfig获取数据。原创 2024-03-12 07:53:06 · 328 阅读 · 0 评论 -
开发指南003-访问数据库
另外BaseDAO中也封装了基本操作,如save、delete等,除了使用@Query注解,也可以利用JPA的简化定义方法,例如findAllBy***And***OrderBy***1、通过平台提供JdbcUtils类直接执行SQL·2、建立DAO类(需扩展BaseDAO)其中又分两种HQL和原生SQL。原创 2024-03-11 00:07:37 · 682 阅读 · 0 评论 -
开发指南004-@Query参数写法
数值,数值表示形参位置,1表示第一个形参,依次类推。4、获取实体类名称,使用#{#entityName}3、使用@Param("参数名")+:参数名。原创 2024-03-11 00:31:32 · 272 阅读 · 0 评论 -
开发指南002-前后端信息交互规范-返回值定义
只定义了最关键的几种返回场景。注意后面的定义是字符串代码,最终返回时需要根据前端的语言请求参数翻译为对应语言的文字。关于国际化的实现会有专门章节来阐述。平台不建议搞很多返回值定义,具体的说明看描述即可,无需通过返回值来定义(具体可见前面关于返回结构的说明)原创 2024-03-10 08:22:56 · 261 阅读 · 0 评论 -
开发指南002-前后端信息交互规范-返回类ResponseResult
返回类有两个,一般返回类ResponseResult和分页返回类PageResult,本篇介绍ResponseResult。flag用于标识平台服务返回包(有时候前端收到的返回并不是后台服务返回的,而是网关返回)原创 2024-03-10 00:36:04 · 407 阅读 · 0 评论 -
开发指南002-前后端信息交互规范-请求类
简单的请求(1-2个参数)直接使用 RequestInfo即可,例如删除请求,将要删除对象的id存入tag即可。对于复杂的请求,需要定义一个dto扩展RequestInfo。之所以这样做,而不是在Requestinfo中定义一个模板属性private T data;//具体请求信息 是因为swagger里无法正确解析T。version:目前为“1.0”,之所以设计这个属性是为了保持兼容。consumer:标识请求,在前端配置文件中定义。serialNo:uuid,唯一标识一个请求。原创 2024-03-10 00:27:41 · 191 阅读 · 0 评论 -
开发指南002-前后端信息交互规范-概述
建立api目录,按照业务区分建立不同的.js文件,封装对后台的调用操作。前后端之间采用restful接口,服务和服务之间使用feign。原创 2024-03-09 11:38:12 · 539 阅读 · 0 评论 -
开发指南001-开发环境的搭建
分布式要使用nacos和网关,通常是搭建个服务器,把相关环境部署上去,当然也可以不使用服务器,直接在开发人员自己的机器上部署环境。两种方式下开发没有区别,只是前端的配置文件不同(一个指向网关IP,一个直接指向服务IP)。源代码管理:SVN或GIT,由具体项目决定(公司的业务形态是帮助客户搭建自己的信息化生态圈,源代码管理方式由客户指定,所以不同的项目管理方式不同)数据库:由客户指定,Oracle、SQLServer、MySQL、PostgreSQL、各种国产库均可。二、前端(PC)开发。原创 2024-03-09 09:58:23 · 215 阅读 · 0 评论