致远OA实施中,使用groovy自定义函数实现客户需求-时间校验
摘要本文针对致远表单绘制工具中时间计算功能的不足通过自定义函数提供了两种实用解决方案一是校验明细表中同一员工的日期时间段是否重叠避免重复上报二是精确计算两个日期时间之间的小时差满足特殊业务规则。文章详细说明了参数类型识别、Groovy代码实现、函数调用方法及实际效果验证为开发者提供了可直接复用的代码示例。在表单绘制工具中对于时间的计算公式致远只提供了日期差和日期时间差可以算出两个时间中间的差额。但对于时间需要校验的场景和计算的情况很多会存在系统校验无法满足的情况。那我们怎么在自定义函数中来做校验呢首先要用函数来做校验得先知道参数类型是什么小编之前一直以为时间控件的类型是Date类型写完函数上了系统一直无效。后面才在去去了类型看结果是字符串类型。。。我们可以使用getClass方法去取控件里数据的类型查看。def timeType param[0] return timeType.getClass().name一、校验明细表中日期是否重叠现在有调休申请单需要客户输入员工的加班开始日期和加班结束日期要求同一个员工的加班时间不能报重叠比如第一行第二行都是张三上报的加班信息一行加班日期 8-13 -- 8-15 第二行8-14 -- 8-15,则重复上报加班这种情况咋给校验呢首先一定得明确参数类型如果要校验全部的明细表数据就得取明细全量数据。如果我把明细字段传入自定义函数的参数列表得到的是什么类型的参数我们依旧用getClass方法看看。可以看出明细参数是个List列表并且开始时间、结束时间、员工编号三列都是单独的等长的三组列表。并且根据索引一一对应。找到对应关系那这校验就好做了。def startStrList param[0] def endStrList param[1] def personCodeList param[2] def parseDay { str - Date.parse(yyyy-MM-dd, str).time } try { def ranges [] startStrList.eachWithIndex { s, idx - long sTime parseDay(s) long eTime parseDay(endStrList[idx]) String userCode personCodeList[idx] ranges.add([ index: idx, person: userCode, start: sTime, end: eTime ]) } def overlapIndexArr [] int len ranges.size() for (int i 0; i len; i) { def a ranges[i] for (int j i 1; j len; j) { def b ranges[j] if (a.person b.person a.start b.end b.start a.end) { overlapIndexArr.add((${a.person}${a.index1}行与${b.index1}行)) } } } return overlapIndexArr.isEmpty() ? 0 : 请检查以下行中存在重叠日期 overlapIndexArr.join( ) } catch (Exception err) { return err.getMessage() }参数如果要直接复制代码使用参数顺序一定不能写错。日期控件传来的参数是字符串类型如果算时间差首先得转成Date类型。Groovy 为 java.util.Date 添加了静态扩展方法Date.parse(pattern, 字符串)这个方法等价于 new SimpleDateFormat(yyyy-MM-dd).parse(str) 方法。我们可以把它封装到一个内部闭包中方便后续调用闭包是一段可以单独打包、可以随时调用的可执行代码块相当于 Java 的方法但它是变量可以定义在方法里面也就是内部闭包。接收三组下标对应的数组开始日期、结束日期、人员编码先将日期字符串转为毫秒时间戳封装成时间段对象采用双层循环两两比对所有时间段只校验同一人员依靠区间重叠公式判断时间冲突记录冲突行号无重叠返回 0存在重叠输出提示信息。返回结果正常填写情况存在重叠数据时二、计算两个日期时间相差多少小时现在有这么个需求客户公司要求出差补助规则结束时间-开始时间满24小时算一天按一天来报48小时算两天且不满24小时不报。虽然规则很不合理但得按客户要求来做现在小编使用的版本没有小时差的公式且日期时间差算出来结果如下如果算成天还得再转为小时就更麻烦了。那有函数能算出小时差吗有的兄弟有的 。但可能是小编技术有限或是系统限制我只能算到一个文本控件上再把文本控件转为数字所以这个函数仅供参考蛤首先加一个文本控件函数如下def startStr param[0] def endStr param[1] try { long sTime Date.parse (yyyy-MM-dd HH:mm,startStr).time long eTime Date.parse (yyyy-MM-dd HH:mm,endStr).time long ms Math.abs (eTime - sTime) def hourNum Math.floor (ms / (1000 * 60 * 60d)) return ${hourNum} 小时 } catch (Exception err) { return err.getMessage () }接收起止时间yyyy‑MM‑dd HH:mm解析成毫秒时间戳求取时间差绝对值换算小时之后向下取整返回整数小时文本不足一小时会直接舍弃例如相差 59 分钟返回0小时。结果再加一个数字控件用来把文本的408.0小时转为数字408def str param[0] try{ if(!str) return BigDecimal.ZERO def matcher (str ~ /([0-9]\.?[0-9]*)/) if(matcher.find()){ String numStr matcher.group(1) return new BigDecimal(numStr) } return BigDecimal.ZERO }catch (Exception e){ return BigDecimal.ZERO }然后就能根据时间差来算天数了

相关新闻

智慧树刷课插件怎么用?5步开启自动刷课,30分钟课程压缩到20分钟

智慧树刷课插件怎么用?5步开启自动刷课,30分钟课程压缩到20分钟

智慧树刷课插件怎么用?5步开启自动刷课,30分钟课程压缩到20分钟 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 晚上十点半,你终于打…

2026/10/7 7:29:09 阅读更多 →
VSCode主题深度定制:手动修改settings.json实现个性化开发环境

VSCode主题深度定制:手动修改settings.json实现个性化开发环境

1. 项目概述:从“换肤”到“深度定制”的转变很多朋友用VSCode,第一件事可能就是去插件市场找个好看的主题,一键安装,完事。这当然方便,但对于一个每天要盯着它看8小时以上的开发者来说,这远远不够。你有没…

2026/10/12 12:11:38 阅读更多 →
路,动物呼吸机、小动物呼吸机

路,动物呼吸机、小动物呼吸机

广泛应用于基础医学、临床医学、动物医学等领域,主要用于实验动物人工呼吸、术中呼吸管理、呼吸急救与辅助治疗。无需高压气源,潮气量输出精准,安徽,正华生物,露技术指标:1、5 寸触摸液晶屏,屏幕…

2026/10/7 7:29:18 阅读更多 →

最新新闻

Python车险理赔车型识别与合规校验:数据工程实践指南

Python车险理赔车型识别与合规校验:数据工程实践指南

1. 项目背景与整体设计思路1.1 车型信息在车险理赔中的关键作用车险理赔看起来是“拍照—定损—打款”的简单流程,但真正做过车险数据的人都知道,车型信息是贯穿整个理赔链路的一个隐形骨架。从承保端的车型定价,到理赔端的配件价格与工时费计…

2026/10/14 19:09:21 阅读更多 →
2026年水质监测无人船推荐:从人工采样到智能巡航的升级之选

2026年水质监测无人船推荐:从人工采样到智能巡航的升级之选

过去很长一段时间,水质监测依赖人工乘船采样。一个断面跑一趟,采样、记录、返航、送检,大半天就没了。遇到恶劣天气,人员安全更是悬在头顶的隐患。2026年,这种局面正在被无人船技术快速改写。今天结合真实落地案例&…

2026/10/14 19:09:21 阅读更多 →
生产计划一定要做这7张表:订单表、排产表、齐套表、产能表、进度表......

生产计划一定要做这7张表:订单表、排产表、齐套表、产能表、进度表......

做生产计划,每天都要跟订单、物料、设备和交期打交道。接到订单后,要安排生产;计划排好了,还得跟着现场变化调整。而“麻烦”往往就出在这些变化上。客户临时加单,供应商晚了两天,设备突然停机,…

2026/10/14 19:09:21 阅读更多 →
向量空间:高等代数分水岭的核心概念与解题指南

向量空间:高等代数分水岭的核心概念与解题指南

1. 为什么向量空间是高等代数的分水岭如果你问一个学过高等代数的人,哪一章开始真正让人感到“抽象”,十有八九会说是向量空间。前面行列式、矩阵还能靠计算硬扛,到了向量空间,突然冒出一堆定义:线性相关、基、维数、子…

2026/10/14 19:09:21 阅读更多 →
ubuntu26.04微信输入法异常

ubuntu26.04微信输入法异常

我在ubuntu26.04系统下使用微信,在输入框中输入文件的时候,输入法的选词条,始终就是无法显示,同时我使用的是双屏幕,微信只在副屏幕上输入文字的时候,能正常显示候选词,主屏幕上不行&#xff0c…

2026/10/14 19:09:21 阅读更多 →
数字孪生解决方案怎么选?企业需求分析、厂商评估与选型指南

数字孪生解决方案怎么选?企业需求分析、厂商评估与选型指南

数字孪生正从概念走向产线。根据Straits Research数据,2025年全球数字孪生市场规模达281亿美元,预计2034年增至5513.9亿美元,复合年增长率39.2%,亚太地区占比36.4%。企业决策者面临的现实问题很具体:预算批了&#xff…

2026/10/14 19:08:21 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →