weaver-hrm-salary/src/com/engine/salary/formlua/entity/parameter/FuncDescUtil.java

135 lines
20 KiB
Java
Raw Normal View History

2023-04-13 09:32:20 +08:00
package com.engine.salary.formlua.entity.parameter;
2023-04-19 10:15:01 +08:00
import com.engine.salary.util.SalaryI18nUtil;
2023-04-13 09:32:20 +08:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class FuncDescUtil {
2023-04-19 10:15:01 +08:00
protected final Logger logger = LoggerFactory.getLogger(FuncDescUtil.class);
Map<String, String> funcMap = new HashMap();
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
public void initData() {
//聚合函数
funcMap.put("COUNT", SalaryI18nUtil.getI18nLabel(94986, "返回指定表格中满足条件的数据条数。示例COUNT({员工表})"));
funcMap.put("SUM", SalaryI18nUtil.getI18nLabel(94987, "返回指定表格中满足条件的数据其指定数字字段值的总和。统计条件中不可嵌套使用统计函数。示例SUM({员工表.工资})"));
funcMap.put("AVG", SalaryI18nUtil.getI18nLabel(94988, "返回指定表格中满足条件的数据其指定数字字段值的平均值。统计条件中不可嵌套使用统计函数。示例AVG({员工表.工资})"));
funcMap.put("MIN", SalaryI18nUtil.getI18nLabel(94989, "返回指定表格中满足条件的数据其指定数字字段值的最小值。统计条件中不可嵌套使用统计函数。示例MIN({员工表.工资})"));
funcMap.put("MAX", SalaryI18nUtil.getI18nLabel(94990, "返回指定表格中满足条件的数据其指定数字字段值的最大值。统计条件中不可嵌套使用统计函数。示例MAX({员工表.工资})"));
//日期函数
funcMap.put("TODAY", SalaryI18nUtil.getI18nLabel(97678, "返回当天日期。示例TODAY() 结果: '2020-01-01'"));
funcMap.put("NOW", SalaryI18nUtil.getI18nLabel(97689, "返回当天日期+时间。示例NOW() 结果: '2016-12-24 12:05:38'"));
funcMap.put("DATEADD", SalaryI18nUtil.getI18nLabel(97691, "对日期加减按照单位加减。单位默认为日可选单位年Y、月M、日D、时H、分I、秒S。示例<br> DATEADD('2016-12-21', 3) 结果: '2016-12-24' <br> DATEADD('2016-12-24 20:00:00', 3, 'H') 结果: '2016-12-24 23:00:00'"));
funcMap.put("DATEDIFF", SalaryI18nUtil.getI18nLabel(97692, "根据指定的单位返回日期2减去日期1的差值。当日期2小于日期1时差值为负值。单位默认为日可选单位年Y、月M、日D、时H、分I、秒S。<br> 示例:<br> DATEDIF('2016-12-21', '2016-12-24') 结果: 3 <br> DATEDIF('2016-12-24 20:00:00', '2016-12-25 20:00:00', 'H') 结果: 24"));
funcMap.put("DATEFORMAT", SalaryI18nUtil.getI18nLabel(97693, "将日期转为指定格式返回。 示例:<br> DATEFORMAT('2016-12-24', 'YY年MM月DD日') 结果: 2016年12月24日 <br> yyyy 将年份显示为1900-9999 <br> yy 将年份显示为00-99 <br> mm 将月份显示为 0112 <br> dd 将日期显示为 0131"));
funcMap.put("YEAR", SalaryI18nUtil.getI18nLabel(97694, "返回指定日期中的年。示例:<br> YEAR('2016-12-24') 结果: 2016"));
funcMap.put("MONTH", SalaryI18nUtil.getI18nLabel(97695, "返回指定日期中的月。示例:<br> MONTH('2016-12-24') 结果: 12"));
funcMap.put("DAY", SalaryI18nUtil.getI18nLabel(97696, "返回指定日期中的日。示例:<br> DAY('2016-12-24') 结果: 24"));
funcMap.put("HOUR", SalaryI18nUtil.getI18nLabel(97697, "返回指定日期中的小时。示例:<br> HOUR('2016-12-24 20:30:56') 结果: 20"));
funcMap.put("MINUTE", SalaryI18nUtil.getI18nLabel(97698, "返回指定日期中的分钟。示例:<br> MINUTE('2016-12-24 20:30:56') 结果: 30"));
funcMap.put("SECOND", SalaryI18nUtil.getI18nLabel(97699, "返回指定日期中的秒钟。示例:<br> SECOND('2016-12-24 20:30:56') 结果: 56"));
funcMap.put("WEEKNUM", SalaryI18nUtil.getI18nLabel(97700, "返回指定日期为第几周从每年第1天开始算第1周。示例<br> WEEKNUM('2016-12-24') 结果: 52"));
funcMap.put("WEEKDAY", SalaryI18nUtil.getI18nLabel(97701, "返回指定日期为星期几。返回值为0~6代表周日~周六。示例:<br> WEEKDAY('2016-12-24') 结果: 6"));
funcMap.put("EOMONTH", SalaryI18nUtil.getI18nLabel(97702, "将某月最后一天日期返回。日期可以为指定日期也可以是日期参数,之前的月数用负数表示,之后的月数用正数表示。所输入月数需为整数。<br>示例EOMONTH('2021-11-07', -2)<br>结果2021-09-30"));
funcMap.put("NETWORKDAYSPI", SalaryI18nUtil.getI18nLabel(97703, "将指定日期仅限的过去时间最大支持跨度为365天之间包含的工作日天数返回。注意:此函数只能选择过去的时间才可使用跨度不能超过365天。当日期2小于日期1时差值为负值。单位默认为日。<br>示例想知道李四在2021-11-07和2021-11-12之间的工作日天数。<br>NETWORKDAYSPI('2021-11-07', '2021-11-12''李四') <br>结果5"));
funcMap.put("MAXDATE", SalaryI18nUtil.getI18nLabel(100804, "取一组日期中的最大值。示例:<br/> MAXDATE('2016-12-24', '2022-12-24') 结果: 2022-12-24"));
funcMap.put("MINDATE", SalaryI18nUtil.getI18nLabel(100806, "取一组日期中的最小值。示例:<br/> MINDATE('2016-12-24', '2022-12-24') 结果: 2016-12-24"));
//日期中的当前时间操作
funcMap.put("CURRYEAR", SalaryI18nUtil.getI18nLabel(101066, "取当前日期的年份。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRYEAR() 结果: 2022"));
funcMap.put("CURRMONTH", SalaryI18nUtil.getI18nLabel(101067, "取当前日期的月份。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRMONTH() 结果: 2"));
funcMap.put("CURRDAY", SalaryI18nUtil.getI18nLabel(101068, "取当前日期的天。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRDAY() 结果: 17"));
funcMap.put("CURRWEEK", SalaryI18nUtil.getI18nLabel(101069, "取当前日期是周几。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRWEEK() 结果: 4"));
funcMap.put("CURRHOUR", SalaryI18nUtil.getI18nLabel(101070, "取当前日期的小时。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRHOUR() 结果: 11"));
funcMap.put("CURRMINUTE", SalaryI18nUtil.getI18nLabel(101071, "取当前日期的分钟。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRMINUTE() 结果: 20"));
funcMap.put("CURRSECOND", SalaryI18nUtil.getI18nLabel(101072, "取当前日期的秒钟。示例:<br/> 假设当前时间为2022年2月17日 11:20:30 CURRSECOND() 结果: 30"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//逻辑函数
funcMap.put("IF", SalaryI18nUtil.getI18nLabel(97704, "如果条件为真则执行表达式1为假则执行表达式2。条件中不可嵌套使用IF函数。示例<br> IF({员工表.年龄} > 60, '退休', '在职')、IF({员工表.年龄} > 60, IF({员工表.性别} = {员工表.性别.女}, '退休', '在职'), '在职')"));
funcMap.put("AND", SalaryI18nUtil.getI18nLabel(97705, "所有条件均为真则返回真否则返回假。逻辑操作AND的函数模式。示例<br> AND(2 = 2, 2 < 2)"));
funcMap.put("OR", SalaryI18nUtil.getI18nLabel(97706, "任意一个条件为真则返回真否则返回假。逻辑操作OR的函数模式。示例<br> OR(2 = 2, 2 > 3)"));
funcMap.put("NOT", SalaryI18nUtil.getI18nLabel(97707, "对逻辑结果取反。示例:<br> NOT(2 > 3)"));
funcMap.put("IN", SalaryI18nUtil.getI18nLabel(97708, "任意类型的变量或常量等于一组同类型变量或常量结果中的任意一个,则返回真。示例:<br> IN(2, [2, 3, 4])"));
funcMap.put("LIKE", SalaryI18nUtil.getI18nLabel(97709, "文本类型的变量或常量包含一组文本类型变量或常量结果中的任意一个则返回真。逻辑操作LIKE的函数模式。示例<br> LIKE('大家好', ['大家', '好'])"));
funcMap.put("TRUE", SalaryI18nUtil.getI18nLabel(97710, "返回真。示例TRUE()"));
funcMap.put("FALSE", SalaryI18nUtil.getI18nLabel(97712, "返回假。示例FALSE()"));
funcMap.put("IFS", SalaryI18nUtil.getI18nLabel(97713, "多个条件判断,位于单数位置的参数设置为条件位于双数位置的参数设置为结果最后一个参数为默认返回值当所有条件都不满足的时候返回默认参数。示例IFS(1>1,1,1=1,2,0)结果2"));
funcMap.put("FIND", SalaryI18nUtil.getI18nLabel(97714, "用指定参数去另一个参数列表中查找匹配项指定参数时填写1则去第一个参数列表中查找2则是第二个参数列表里匹配查找第一个参数成功则返回true失败返回false。示例FIND([1,2,3],[1,2,3,4],1)结果true"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//文本函数
funcMap.put("CONCAT", SalaryI18nUtil.getI18nLabel(97730, "可用于连接多个任意类型的文本、日期、数字变量或常量。示例:<br> CONCAT({总价}/10000, '万元')"));
funcMap.put("TEXT", SalaryI18nUtil.getI18nLabel(97731, "将变量转为文本。示例:<br> TEXT({当前数据.性别}) 结果: '男'"));
funcMap.put("VALUE", SalaryI18nUtil.getI18nLabel(97732, "将文本转为数字。示例:<br> VALUE('23') 结果: 23"));
funcMap.put("LEN", SalaryI18nUtil.getI18nLabel(97733, "返回文本的长度中文、英文都算1个字符。示例<br> LEN('大家好dajiahao') 结果: 12"));
funcMap.put("SEARCH", SalaryI18nUtil.getI18nLabel(97734, "在指定文本中查找关键字返回第一次出现关键字的字符位置文本的第一个字记为1。未找到返回0。搜索开始位置表示从文本的第几个字符开始搜索默认为1。示例<br> SEARCH('大家', '大家好大家好', 3) 结果: 4"));
funcMap.put("REPLACE", SalaryI18nUtil.getI18nLabel(97735, "在原文本中,从替换位置开始,往后数指定的替换字符数,将这段文本替换为新文本。示例:<br> REPLACE('大家好大家好', 2, 3, 'dajia') 结果: '大dajia家好'"));
funcMap.put("REPT", SalaryI18nUtil.getI18nLabel(97736, "将文本重复指定次数。示例:<br> REPT('大家', 2) 结果: '大家大家'"));
funcMap.put("PAD", SalaryI18nUtil.getI18nLabel(97737, "将原文本填充到指定长度,如果文本长度大于设置的长度,则不做任何操作。填充位置可用参数:'LEFT'、'RIGHT'。示例:<br> PAD('你好', 4, '你', 'LEFT') 结果: '你你你好'"));
funcMap.put("TRIM", SalaryI18nUtil.getI18nLabel(97738, "删除文本首尾的空格。示例:<br> TRIM(' 大家好 ') 结果: '大家好'"));
funcMap.put("LEFT", SalaryI18nUtil.getI18nLabel(97739, "从文本左侧开始,返回指定字符数的文字。示例:<br> LEFT('大家好', 2) 结果: '大家'"));
funcMap.put("RIGHT", SalaryI18nUtil.getI18nLabel(97740, "从文本右侧开始,返回指定字符数的文字。示例:<br> RIGHT('大家好', 2) 结果: '家好'"));
funcMap.put("MID", SalaryI18nUtil.getI18nLabel(97741, "从文本指定位置之后开始,返回指定字符数的文字。示例:<br> MID('大家好', 2, 1) 结果: '家'"));
funcMap.put("ISEMPTY", SalaryI18nUtil.getI18nLabel(97742, "变量为空或未填写,则返回真。示例:<br> ISEMPTY({员工表.电话})"));
funcMap.put("IDCARD", SalaryI18nUtil.getI18nLabel(97743, "从身份证号码中获取相关信息比如生日BD、年龄AGE、籍贯NA、性别GENDER。示例<br> IDCARD( 43070319980706334X , BD ) 结果: '1998-07-06'"));
funcMap.put("SCORE", SalaryI18nUtil.getI18nLabel(97744, "获取选项型控件单选框、复选框、下拉菜单分数。示例SCORE({当前数据.单选框}) 结果:选项分数<br>注未设置选项分数时结果为0"));
funcMap.put("SUBSTRING", SalaryI18nUtil.getI18nLabel(97745, "字符截取函数,用于按起始位置截取字符。<br>示例SUBSTRING('abcdefg'23) <br>结果bc"));
funcMap.put("SUBSTITUE", SalaryI18nUtil.getI18nLabel(97746, "字符查找替换函数,替换字符中的所有关键词为新字符。<br>示例SUBSTITUE('泛微移动办公','泛微','eteams') <br>结果eteams移动办公"));
funcMap.put("LOWER", SalaryI18nUtil.getI18nLabel(97747, "将字符中的字母转为小写。<br>示例LOWER('abc')<br>结果ABC"));
funcMap.put("UPPER", SalaryI18nUtil.getI18nLabel(97748, "将字符中的字母转为大写。<br>示例LOWER('ABC')<br>结果abc"));
funcMap.put("EXACT", SalaryI18nUtil.getI18nLabel(97749, "比较两个字符是否相等,区分字母的大小写。<br>示例EXACT('泛微Eteams','泛微eteams') <br> 结果false"));
funcMap.put("ISSTRING", SalaryI18nUtil.getI18nLabel(0, "判断是否是字符。<br>示例ISSTRING('泛微Eteams') <br> 结果true"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//数学函数
funcMap.put("ROUND", SalaryI18nUtil.getI18nLabel(97750, "根据设置的小数位精确度返回对数值四舍五入后的值。小数位精确度取值可为正整数0负整数。如果小数位精确度为正整数针对小数点后的数据进行四舍五入如果小数位精确度等于 0返回最接近数值的整数如果小数位精确度为负整数针对小数点前的数据进行四舍五入被舍掉的数据用0占位。小数位精确度不支持变量。小数位精确度默认为0即只保留整数。<br>示例ROUND(123.4562)ROUND(123.4560)ROUND(123.456-2) <br>结果依次为123.46123100"));
funcMap.put("ROUNDUP", SalaryI18nUtil.getI18nLabel(97751, "根据设置的小数位精确度返回对数值向上舍入后的值。小数位精确度取值可为正整数0负整数。如果小数位精确度为正整数则向上舍入到指定的小数位。如果小数位精确度等于 0则向上舍入到最接近的整数。如果小数位精确度为负整数则在小数点左侧向上进行舍入。小数位精确度不支持变量。小数位精确度默认为0即只保留整数。示例ROUNDDOWN(76.9,0)结果77"));
funcMap.put("ROUNDDOWN", SalaryI18nUtil.getI18nLabel(97752, "根据设置的小数位精确度返回对数值向下舍入后的值。小数位精确度取值可为正整数0负整数。如果小数位精确度为正整数则向下舍入到指定的小数位。如果小数位精确度等于 0则向下舍入到最接近的整数。如果小数位精确度为负整数则在小数点左侧向下进行舍入。小数位精确度不支持变量。小数位精确度默认为0即只保留整数。<br>示例ROUNDDOWN(76.9,0)<br>结果76"));
funcMap.put("AGGREGATION", SalaryI18nUtil.getI18nLabel(97753, "将一组数据进行统计计算支持最大值MAX、最小值MIN、平均值AVG。示例AGGREGATION(1 , 2,3,'AVG')结果2"));
funcMap.put("MOD", SalaryI18nUtil.getI18nLabel(97754, "将两个参数进行除法运算然后得出余数返回。示例MOD( 7 , 3 )结果1"));
funcMap.put("TRUNC", SalaryI18nUtil.getI18nLabel(97755, "将小数点格式化成指定位数。示例TRUNC( 2.123 , 2 )结果2.12"));
funcMap.put("ISINT", SalaryI18nUtil.getI18nLabel(0, "判断字符内容是否是整数。示例ISINT( 2.123 )结果false"));
funcMap.put("ISNUMBER", SalaryI18nUtil.getI18nLabel(0, "判断字符内容是否是数字。示例ISNUMBER('2.123')结果true"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//查找函数
funcMap.put("CHOOSE", SalaryI18nUtil.getI18nLabel(97756, "根据条件获取指定数据源中的全部数据。数据源支持选表单、表单中的字段。<br>示例想知道税表中收入大于15000的数值<br>CHOOSE({税表}, {税表.收入}>15000) <br>结果返回税表中收入大于15000的集合"));
funcMap.put("MATCH", SalaryI18nUtil.getI18nLabel(97757, "将指定数值在指定数组区域中的位置返回。若数组中无指定值返回null。<br>示例MATCH(15000, [1000, 15000, 2000]) <br>结果1"));
funcMap.put("VLOOKUPS", SalaryI18nUtil.getI18nLabel(97758, "按列查找返回所需值。常用于薪酬模块。根据条件获取查询参数所在列的返回参数的值。返回参数可填写多个用英文逗号隔开。若查询不到返回null。<br>示例VLOOKUPS({税表}{税表.收入}AND{税表.收入}>{税表.应纳税所得额下限}{税表.收入}<{税表.应纳税所得额上限}[{税表.税率},{税表.速算扣除数}]) <br>结果:按列查找返回税表中收入所在的收入区间所对应的税率和速算扣除数的数值"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//数据库函数
funcMap.put("GETHRMLOGINID", SalaryI18nUtil.getI18nLabel(100808, "获取指定人员系统账号。<br/>示例GETHRMLOGINID({表单.张三}) <br/>结果zhangsan@qq.com"));
funcMap.put("GETHRMWORKCODE", SalaryI18nUtil.getI18nLabel(100810, "获取指定人员编号。<br/>示例GETHRMWORKCODE({表单.张三}) <br/>结果A001"));
funcMap.put("GETHRMMANAGER", SalaryI18nUtil.getI18nLabel(100812, "获取指定人员直接上级。<br/>示例GETHRMMANAGER({表单.张三}) <br/>结果:返回张三的直接上级"));
funcMap.put("GETHRMALLMANAGER", SalaryI18nUtil.getI18nLabel(100814, "获取指定人员所有上级。<br/>示例GETHRMMANAGER({表单.张三}) <br/>结果:返回张三的所有上级形成的数组"));
funcMap.put("GETHRMDEPARTMENT", SalaryI18nUtil.getI18nLabel(100816, "获取指定人员部门。<br/>示例GETHRMDEPARTMENT({表单.张三}) <br/>结果:返回张三的部门"));
funcMap.put("GETHRMSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100818, "获取指定人员分部。<br/>示例GETHRMSUBCOMPANY({表单.张三}) <br/>结果:返回张三的分部"));
funcMap.put("GETDEPARTMENTNAME", SalaryI18nUtil.getI18nLabel(100820, "获取指定部门名称。<br/>示例GETDEPARTMENTNAME({表单.A部门}) <br/>结果A部门"));
funcMap.put("GETDEPARTMENTCODE", SalaryI18nUtil.getI18nLabel(100822, "获取指定部门编号。<br/>示例GETDEPARTMENTCODE({表单.A部门}) <br/>结果A001"));
funcMap.put("GETSUPERDEPARTMENT", SalaryI18nUtil.getI18nLabel(100824, "获取指定部门直接上级部门。<br/>示例GETDEPARTMENTCODE({表单.A部门}) <br/>结果A部门的直接上级部门"));
funcMap.put("GETALLSUPERDEPARTMENT", SalaryI18nUtil.getI18nLabel(100826, "获取指定部门所有上级部门。<br/>示例GETALLSUPERDEPARTMENT({表单.A部门}) <br/>结果A部门的所有上级部门形成的数组"));
funcMap.put("GETSUBCOMPANYNAME", SalaryI18nUtil.getI18nLabel(100828, "获取指定分部名称。<br/>示例GETSUBCOMPANYNAME({表单.A分部}) <br/>结果A分部"));
funcMap.put("GETSUBCOMPANYCODE", SalaryI18nUtil.getI18nLabel(100830, "获取指定分部编号。<br/>示例GETSUBCOMPANYCODE({表单.A分部}) <br/>结果B001"));
funcMap.put("GETSUPERSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100832, "获取指定分部直接上级分部。<br/>示例GETSUPERSUBCOMPANY({表单.A分部}) <br/>结果A分部的直接上级分部"));
funcMap.put("GETALLSUPERSUBCOMPANY", SalaryI18nUtil.getI18nLabel(100834, "获取指定分部所有上级分部。<br/>示例GETALLSUPERSUBCOMPANY({表单.A分部}) <br/>结果A分部的所有上级分部形成的数组"));
funcMap.put("GETHRMNAME", SalaryI18nUtil.getI18nLabel(100834, "获取指定人员的姓名。<br/>示例GETHRMNAME({U:张三}) <br/>结果:张三"));
funcMap.put("GETHRMMOBILE", SalaryI18nUtil.getI18nLabel(100834, "获取指定人员的手机号码。<br/>示例GETHRMMOBILE({U:张三}) <br/>结果13123232323"));
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
//财务函数
funcMap.put("GETMONEY", SalaryI18nUtil.getI18nLabel(0, "将金额转换成中文金额大写。<br/>示例GETMONEY({1234}) <br/>结果:壹仟贰佰叁拾肆元整"));
}
public String get(String key) {
if (funcMap.size() > 0) {
2023-04-13 09:32:20 +08:00
// logger.info("描述数据存在:"+funcMap.size());
2023-04-19 10:15:01 +08:00
} else {
logger.info("初始化函数描述数据");
initData();
}
2023-04-13 09:32:20 +08:00
2023-04-19 10:15:01 +08:00
return funcMap.get(key);
}
2023-04-13 09:32:20 +08:00
}