- 博客(288)
- 收藏
- 关注
原创 final关键字带来的问题
/ 这里输出了测试数据。去掉final再编译EsignConfig、TemplateService才是希望的效果。EsignConfig编译了两套,一套测试,一套正式。但是正式系统始终访问的是测试的参数。private static String eSignHost=“****”直接给出了具体值!// 这里输出的正式数据。
2025-04-18 20:00:52
120
原创 开发指南111-关闭所有打开的子窗口
门户系统是通过window.open通过单点登录的模式打开子系统的,这就要求门户系统退出时,关闭所有打开的子系统。// 检查窗口是否已关闭,避免在已关闭的窗口上调用close方法导致错误。allChildWindows:[], //所有子窗口。
2025-04-06 19:45:54
141
原创 开发语言漫谈-groovy
groovy是一门脚本语言,在前期的脚本语言中简单介绍了下。现在再深入介绍下,因为它是本平台上选用的脚本语言。我们知道平台后台的业务开发语言是Java,开发人员都熟悉Java。那么使用groovy就是自然而然的事情,因为groovy最大特点就是和Java兼容。这两者就是绝配,完美解决了paas平台的核心问题。那些之前花了大成本自定义一门语言,自己开发webide引擎的厂商哭晕在厕所。比如你还在吭哧吭哧自己编码,别人早已使用AI编程,效率高了不知多少倍。你在努力跑步的同时,别人早已做上了汽车。
2025-03-22 13:12:24
529
原创 开发指南110-平台脚本语言
平台的业务功能总的来说由微服务提供的接口来支撑,接口的开发语言业务类的使用Java,大数据库、AI等 用python,这些我们称之为重开发。平台及其应用提供了标准的接口供平台至少的业务 模块。如果用户需要定制业务,可以更改标准接口,也可以新增新接口。除了上述途径,平台还提供我们称之为轻开发的能力,就是使用平台脚本。和他们不同,我们自己不造新轮子,而是选用成熟的方案。由于和Java的高度融合,平台脚本语言我们采用groovy。当然,平台后台也提供了切片编程来进行扩展,但是推荐的方式还是居于平台脚本来实现。
2025-03-20 06:57:33
177
原创 开发指南109-工作流节点功能
定义一个流程时,节点上的功能可以用固定功能实现也可以用流程驱动功能实现,一般看业务的复杂度。例如审批功能多半使用流程驱动功能,因为只是简单的点同意或退回,填写审批意见即可。(当然使用流程驱动功能也可以实现,只是需要在关联动作中编写复杂的业务逻辑,预期这样不如使用固定功能)固定功能是开发人员开发的,在sys_functions定义的功能,简单说就是菜单上显示的功能。流程驱动功能是实施人员配置出的,没有在sys_functions定义,也不出现在菜单上。总之固定功能由开发人员实现,流程驱动功能由实施人员实现。
2025-03-16 15:57:17
138
原创 开发指南108-工作流
是多个功能的流转关系,每个节点都可以完成对应工作,而不是简单的给出审批意见。入职流程例如先人事专员办理登记,然后到行政办理办公用品领取,到保险岗位办理保险增员,最后信息部门开通账号等等。但是也有相同的部分,例如配置流程节点完毕后的动作。业务流没有统一的表单,表单在对应的功能里定义,是具体功能的一部分,不在流程定义里完成。相关的概念有工作流、审批流、业务流等等,市面上每个系统都有不同的解释。的特点是同一个审批单的流转,审批节点没有修改功能,只是给出审批意见。工作流包含审批流和业务流,是个统称。
2025-03-14 16:39:49
138
原创 用AI检查代码
我们平台将走上这样路线:人工提需求->AI自动产生代码->人工复核->热上线。集成一个AI学习平台的开发知识,利用平台的技术来开发新应用。最近程序员遇到一个古怪问题,一个div的滚动条死活出不来,怎么看都没有问题。AI可能对所谓的低代码平台产生冲击:AI很难学会所谓的拖拽编程,但是可以轻松的生成真正的代码。像这样的问题,人工确实很难发现。AI确实已经非常强大。
2025-03-11 06:45:14
158
原创 开发指南107-谷歌内核浏览器滚动条设置
*---------- 美化谷歌浏览器滚动条 结束-----------*//* ------美化谷歌浏览器滚动条 开始-----------*/其中最复杂的部分是定义滚动条两端的箭头。
2025-03-09 19:34:41
718
原创 开发指南106-Stream API实例
开发指南089-Stream API只是介绍了原理,没有实例,应广大程序员之约,整理下典型场景。通过JPA访问数据库返回的用户列表List<UserInfo >userList。3、转为userId为Key,实体为Value的Map。========持续更新中=========如下为简化版实体类UserInfo。2、转为userId的字符串List。1、转为userId的字符串数组。
2025-03-02 10:08:58
333
原创 开发指南105-自驱型待办
平台实现原理是当刷新待办时,先查询下要办的业务,然后和他人发过过来的待办聚合一起返回。自驱待办的原理是自己去查下还有那些事件要处理,而不是他人发送过来的待办。平台上的待办为两种:他们提交的和自驱产生的。由各个业务微服务来决定如何做。
2025-03-02 09:03:56
206
原创 接口返回结构的命名问题
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']平台上大屏组件是基于datav的,基本思路是后台按前端要求组装返回值。这个工程中发现一个问题。name: '第一周',name: '销售额',前端居然有两个返回xAxis,xaxis。结果到前端,返回自动变成了xaxis!
2025-03-01 08:36:35
324
原创 开发指南103-jpa的find**/get**全解
在dao层可以通过定义find**/get**函数,通过名字直接绑定数据库字段。2.get**是延迟加载,在真正访问返回的代理对象的属性之前,它不访问数据库。find则立即执行,将返回到数据库中的一行映射到实际的某个对象。由于这种写法返回的是完整实体,而不是具体字段值,并不实用,本平台不使用。1.get**方法查询不到数据抛出异常,find**方法查询不到数据则返回null。根据以上特性,平台中规定全部使用find**。GreaterThanEqual 大于等于。StartingWith 以某开头。
2025-02-23 00:02:25
259
原创 开发指南102-datav的使用
datav的设计有个问题,各个类型的图数据结构不同。如果让前端做数据转换会很麻烦。所以要求后端返回前端所需结构。xaxis.setName(year + "年度");title.setText("标题");a.setName("名称");title.setText("标题");yaxis.setName("场次");a.setValue(数据);while (遍历组装数据){引入DavaV for vue。无需关心格式,都由后台来处理。main.js中新增。
2025-02-21 10:53:00
724
原创 开发指南101-拖动排序
后台接口一般处理方案,就是生成一段批处理sql,就是按newsortDataString的id顺序进行赋值操作,例如第一个赋值001,依次类推。<el-table-column align="center" label="排序" width="80">用el-table展示数据,最后一列显示拖动图标。其实拖动图标只是起个提示作用。newsortDataString为拖动后id的序列串,将这个串返回后台接口调整顺序即可。label="名称"
2025-02-15 09:28:13
679
原创 开发指南100-左右区域可拖动
</div> --这是左侧区域。平台上大量这样的界面:左侧机构树,右侧详细情况列表。<div class="list" ref="list">
2025-02-15 08:57:14
298
原创 开发指南099-同时传递文件和参数
平台后台接口一般情况下要求传递一个json对象(对应后台需要一个继承RequestInfo的dto类),某些情况下需要同时传递文件和参数,该如何处理呢?url:store.getters.QLMConfig.qlm_gateway_url+'/接口地址',这里的file是文件,来自于el-upload组件。dtoString转为需要dto类即可。@PostMapping("/接口地址")dto就是平台要求的json对象。
2025-02-11 14:27:07
262
原创 开发指南098-logback-spring.xml说明
日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。标签明确指定日志级别,那么它将继承其父包或类的日志级别。如果一直向上继承都没有找到明确的日志级别,那么最终将使用。这个配置文件默认是在jar包的ROOT-INF\classes目录下,正常不需要修改。标签指定了某个具体的包或类的日志级别,那么这个包或类下的日志将按照该。不停服务的情况下,动态修改。标签指定的级别进行输出,而不受。标签指定的日志级别。
2025-02-10 16:27:26
333
原创 开发指南097-数据库兼容-字符串相加
各数据库字符串相加语法完全不同,mysql用concat函数,oracle用||操作符号,sqlserver用+操作,平台希望用一套代码兼容所有数据库。会根据数据库链接判断出数据库类型。// 使用concat。
2025-02-07 15:33:10
400
原创 开发指南096-固化与变化
客户的需求虽然千变万化,基本上还是可以分为公用需求和私有需求的。2、如果各项目有私有功能,直接做在service的工程里。也就是先复制一个service工程,然后私有的东西都加到这个工程里。service为最后封装的微服务,平台的service没有其他东西,只是调用公用jar。当然maven库可以是生态圈的公用maven,也可以是购买平台的用户的私有maven。公用组件是统一管理的,只有版本不同,不区分项目。按目录分开,公共组件,标准功能在预先定义好的目录里。私有的东西另外的目录。
2025-02-07 15:25:44
233
原创 开发指南095-treeid的使用
平台上有很多树型数据,典型的如机构树。业务上常常有这样的要求,例如人员管理中,点击左侧机构树的某个节点,要求查询其所有子、孙子...机构的人员。一般的解决方案如下:从当前节点开始递归,获取所有子、孙子节点的id,然后使用id字符串列表去查询人员。这种方案的效率明细比较低,尤其是大型集团公司,机构层面比较多,每层机构数量比较大的情况。例如A机构treeid为001 则子机构1treeid为001001,子机构2treeid为001002。维护人员数据时,需要同时维护其机构ID和机构对应的treeid。
2025-02-04 18:13:30
226
原创 开发指南094-in语句的处理
一般情况下是这样处理跨库关联(不一定是sql库,也可能非sql库):前端通过一个微服务接口获取关键字字符串,‘A’,'B','C'...然后作为参数调用另一个服务。这时该服务就不可避免使用in语句了。但是数据库这边对in的参数数量有限制,而且测试表明,拆分成多个or,比直接用in要快。微服务架构下,提倡数据库分布,也就是按照业务把数据库分成多个;同时提倡一个微服务只链接一个数据库。这种情况下跨库关联就成了一个问题。尽管从性能考虑不提倡in语句,但是也没有特别好的方法。
2025-02-04 07:21:50
496
原创 SQLServer删除表失败
今天程序执行失败,查日志是一个表删除失败。到企业管理器执行删除,报错如下。回到程序里执行对应功能,通过。找到对应的spid 如54。然后执行 kill 54。
2025-01-22 14:02:48
258
原创 平台介绍-开发理念
有了代码管理机制(SVN、Git),现在不用的代码,就不要保留了,坚决从当前工程中删除。否则会淹没了有用信息。企业内部信息化系统经常需要改来改去,很多系统甚至运行了很多年,经手的人换了一波又一波。按平台规定的方案解决类似问题,例如excel的文件导出,就必须按平台提供的模式来处理。一件事件往往有很多中方式来解决,为了维护方便、学习成本低,就必须按规定的模式写。版本冲突是个很头疼的事,往往会出很多莫名其妙的问题,问题是你很难判断谁和谁冲突。一个超大型平台,要对接和兼容很多控件、插件,兼容性的要求大于先进性。
2025-01-18 19:35:45
425
原创 Delete `␍`eslintprettier/prettier
在千里马平台中,不会采用这种理念,而是强迫采用一种方案!这样才能所有人共同维护一个大型项目,否则就会百花齐放,越来越乱。配置时傻眼了,网上说是.prettierrc文件,但是项目目录里没有。只有prettier.config.js文件。设计者费了好大精力来支持多种格式,表面上是照顾不同喜好的人,但是也容易造成困惑。知道这是因为回车符号的问题:linuxwindow对文件行尾的定义不同所致。解决方案也简单,就是配置endOfLine参数为"auto"。对应格式分为json、yaml和js格式。
2025-01-18 19:15:36
461
原创 npm ERR! code CERT_HAS_EXPIRED
这个是原始地址 npm config set registry https://registry.npmjs.org 速度比较慢。靠就是执行install报的错,你要我通过install来解决这个问题。可见大多数人都是转发,从不自己试试。第三个是清npm缓存.npm cache clean --force。我们之前好好的,怎么会这样?询问了下开发,最近做了什么修改。第二个是看系统时间。这个基本上都不会错。很不幸看到这个提示。
2025-01-16 10:42:40
492
原创 开发指南091-延迟退休算法
birthYearMonth 出生年月 yyyy-MM。mode 0 男职工 1 女干部 2 女职工。// 每4个月延迟1个月。// 每4个月延迟1个月。// 每2个月延迟1个月。
2025-01-15 08:34:06
457
原创 平台介绍-快速开发上手指南
平台不推荐上述之外的语言、组件等。平台卖给甲方后,甲方可能会放开这个限制,这个我们无法控制。学习和维护新的技术需要人力、时间,我们认为是不必要的浪费。开发指南顺序前期写的比较乱。在社区(正在做)会重新整理。AI/大数据/爬虫等:Python。PC前端:Vue+ElmentUI。移动前端:UniApp。四、Python后台。
2025-01-14 23:37:03
453
原创 华为云数据库只有内网地址
2、再买个华为的window服务器,这个上面装mysql客户端去维护。买了个华为云mysql数据库服务,只有内网地址。算来算去,既然还得买个服务器,还不如自己在服务器上装mysql。3、买的是linux服务器,这招也不灵了。2)nginx的stream。
2025-01-14 20:06:58
259
原创 开发指南090-使用python做微服务
autocommit=True, # 如果插入数据,, 是否自动提交?和conn.commit()功能一致。平台的后台涉及到业务部分的使用java开发,基于springcloud。从naocs上获取配置信息,将配置变量声明为全局变量,供调用。涉及到大数据、AI、网页爬虫等领域的使用python开发。:return: dict配置信息。1、读取bootstrap.yaml配置。'''注册服务到nacos'''4、接口服务(引入swagger)'''读取配置文件'''2、从nacos中获取配置。
2025-01-11 14:04:19
606
原创 开发指南089-Stream API
平台遵循现代编程理念(回调函数、链式编程)等推荐使用Stream API。collect(Collectors.toMap(对象::get函数,对象->对象));输出为Map:collect(Collectors.toMap(对象::get函数,对象::get函数));数组对象(通常是前端传过来的选择好的界面元素),需要Arrays.stream(数组)List对象(通常是jpa调用后的实例类的集合),直接调用stream()函数。输出为列表: collect(Collectors.toList())
2025-01-11 08:44:39
442
原创 IT领域的特权-特殊IP
1.1.1.1 由Cloudflare和APNIC共同拥有和维护的公共DNS解析服务器。现实生活中,我们会看到特殊的汽车牌号,如N个8这种。拥有这种号的,非富即贵。===============持续收集中============9.9.9.9 UltraTools提供的DNS服务器。8.8.8.8 Google提供的免费DNS服务器。12.12.12.12能ping通,不知道什么服务。在网络的世界里,这些特殊的IP属于谁?
2024-12-29 10:14:41
187
原创 变量传递问题
在 JavaScript 中,对象赋值是引用传递,而不是值传递!将一个对象赋值给另一个变量时,实际上是将对象的引用(内存地址)赋值给了新的变量。因此,对新变量的修改会影响到原始对象。但是偶尔不按常理出牌,发现潜在问题:弹出的对话框中,修改数据不点保存,直接退出。平台上有大量的类似场景,首先显示的是数据列表,右侧固定操作列有修改按钮,点击修改,弹出对话框用于调整数据。// 输出: { a: 2 }console.log(des.a);// 输出: { a: 2 }
2024-12-15 14:07:22
147
原创 开发指南088-多附件管理
很多应用是需要上传多个附件的,方法一是信息表建立多个附件字段,如attFile1,attFile2,attFile3。这种方式的前提条件是不需要记录文件的其他属性,如果需要,则使用建立附件表的方式,该字段存储附件表id字符串。this.FJList.push({name:"附件"+(i+1),url:this.addRow.pushFileList[i]}):on-change :on-remove="removeFJ"注意处理对应的字符串值即可。其中FJList这样赋予值。
2024-12-14 22:17:59
474
原创 开发指南087-小号版elementUI
==============持续更新中=================elementui有些地方又太大了,太占屏幕空间,需要缩小。
2024-12-14 12:28:31
98
原创 开发指南086-禁止多端登录
平台前端实质上是很多应用组合而成的,用户登录后进入门户系统。门户系统展现各个应用的链接,点击链接,通过单点登录模式切入具体应用。但这些只允许发生在一台机器上,如果同一账号登录另一台机器,则需要顶出前一台机器的登录。this.$confirm('当前账号已在其他设备['+ret.data.loginip+']登录,是否强制下线?', '提示', {首先增加参数是否允许多端登录。再次发起后台接口请求时,后台判断redis已经没有了信息,返回前台已下线信号。强制下线的工作原理是清除后台redis里存储。
2024-12-13 07:09:01
242
原创 开发指南085-大号版elementUI
2、el-table-column 设置sortable 上下按钮太小。============持续更新中==============1、el-dialog的标题栏那个关闭符号。
2024-12-08 16:02:04
729
原创 开发指南084-名册的实现
它的主要特点是实现分组行转列。传统的方法就是把数据取过来,一行一行拼接。随着数据库的发展,现代数据其实早已帮你实现了该功能。其他数据库都有类似的实现。AI编程现在也有了很大的发展。所以比较省力的方法就是让AI帮你生成基本的程序,然后人工调整优化。AI编程完全取代人不现实,但是确实可以节省很多成本。平台下一步将集成一个懂本平台开发的AI工具。所以技术发展日新月异,需要不断掌握新知识。掌握的越多干活越省事。A部门 A1,A2,A3。B部门 B1,B2,B3。部门 人员列表。
2024-12-08 12:55:02
242
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人