java+ 如何动态配置业务规则组

思路

1. 实现在页面上的动态配置规则组(2张数据表+枚举类+service+impl+action)

2. 从数据库中表staffmoverules(规则明细表)或者staffmovetyperule(规则组表) ,根据传入类型,取出规则编号

3. 根据规则编号反射找到对应的方法名

4. 执行对应方法

1. 页面上实现手工配置

CREATE TABLE `staffmoverules` (`rulenumber` int DEFAULT NULL COMMENT '规则组编号',`movetype` varchar(50) DEFAULT NULL COMMENT '使用类型',`message` varchar(500) DEFAULT NULL COMMENT '规则说明',`operationtype` varchar(50) DEFAULT NULL COMMENT '操作类型',`createtime` datetime DEFAULT NULL COMMENT '创建时间',`creator` varchar(100) DEFAULT NULL COMMENT '创建者',`lastermodifier` varchar(100) DEFAULT NULL COMMENT '最近修改人',`lastertime` datetime DEFAULT NULL COMMENT '最近修改时间',`id` varchar(100) DEFAULT NULL,UNIQUE KEY `staffmoverules_rulenumber_IDX` (`rulenumber`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='人员调度规则明细'

CREATE TABLE `staffmovetyperule` (`movetype` varchar(50) DEFAULT NULL COMMENT '规则组类型',`message` varchar(500) DEFAULT NULL COMMENT '规则说明',`createtime` datetime DEFAULT NULL COMMENT '创建时间',`creator` varchar(100) DEFAULT NULL COMMENT '创建者',`lastermodifier` varchar(100) DEFAULT NULL COMMENT '最近修改人',`lastertime` datetime DEFAULT NULL COMMENT '最近修改时间',`id` varchar(100) DEFAULT NULL,UNIQUE KEY `staffmovetyperule_movetype_IDX` (`movetype`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='人员调度规则组校验'

2. 枚举类

package com.hrs.controller.rules;public enum StaffMoveRulesEnum {//规则组配置数据库里:2张表 //1.配置规则组 、2 具体的规则//ehr页面上可以配置 规则组跟 具体规则,设置权限//internal recruitmen-- IR 内部招聘,Staff regularization-- SR 转正//1XXX--OA,2xxx-IR,3xxx-SR,4xxx-public//OA规则PROMOTIONA(1001,"OA","晋升提拔","check","promotiona"),INTERPERSONALCONNECTIONS(1002,"OA","人脉关系","check","interpersonalConnections"),//内招规则EDUCATION(2001,"IR","学历","check","education"),//人员转正规则ALTERNATEDAYS(3001,"SR","调休天数","check","alternatedays"),//共有规则KINSHIP(4001,"PUBLIC","上下级亲属关系","check","kinship"),STAFFINFOUPDATE(4002,"PUBLIC","人员信息更新","update","staffinfoUpdate"),DELETESCHEDULINGRECORD(4003,"PUBLIC","删除调度关系","C","deleteSchedulingRecord"),REVOCATIONSIGN(4004,"PUBLIC","撤销电子签","revocation","revocationSign"),RESOURCEALLOCATIONNOTIFICATION(4005,"PUBLIC","资源配置通知","inform","resourceAllocationNotification");public int ruleNumber;//规则编码String moveType;//使用类型String message;//说明String operationType;//操作类型String methodName;//方法名public int getRuleNumber() {return ruleNumber;}public void setRuleNumber(int ruleNumber) {this.ruleNumber = ruleNumber;}public String getMethodName() {return methodName;}public void setMethodName(String methodName) {this.methodName = methodName;}public String getMoveType() {return moveType;}public void setMoveType(String moveType) {this.moveType = moveType;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String getOperationType() {return operationType;}public void setOperationType(String operationType) {this.operationType = operationType;}StaffMoveRulesEnum(int ruleNumber, String moveType, String message, String operationType, String methodName) {this.ruleNumber = ruleNumber;this.moveType = moveType;this.message = message;this.operationType = operationType;this.methodName = methodName;}
}

3. service 、impl类

package com.hrs.service;import org.springframework.stereotype.Service;@Service
public interface StaffMoveService {Object promotiona(Object o);Object interpersonalConnections(Object o);Object education(Object o);Object alternatedays(Object o);Object kinship(Object o);Object staffinfoUpdate(Object o);Object deleteSchedulingRecord(Object o);Object revocationSign(Object o);Object resourceAllocationNotification(Object o);
}
package com.hrs.service;import com.hrs.service.StaffMoveService;
import org.springframework.stereotype.Service;@Service
public class StaffMoveImpl implements StaffMoveService {@Overridepublic Object promotiona(Object o) {return "promotiona:" + o;}@Overridepublic Object interpersonalConnections(Object o) {return "interpersonalConnections:" + o;}@Overridepublic Object education(Object o) {return "education";}@Overridepublic Object alternatedays(Object o) {return "alternatedays:" + o;}@Overridepublic Object kinship(Object o) {return "kinship:" + o;}@Overridepublic Object staffinfoUpdate(Object o) {return "staffinfoUpdate";}@Overridepublic Object deleteSchedulingRecord(Object o) {return "deleteSchedulingRecord";}@Overridepublic Object revocationSign(Object o) {return "revocationSign";}@Overridepublic Object resourceAllocationNotification(Object o) {return "resourceAllocationNotification";}
}

4 action类

package com.hrs.controller.rules;import com.hrs.entity.ResultVo;
import com.hrs.service.StaffMoveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;public class StaffMoveAction {StaffMoveService staffMoveService;public ResultVo adjust(Object o){String type;//从入参中取出//1.从数据库中表staffmoverules或者staffmovetyperule 取出规则编号//List<Integer> rulesNumber = ucc.adjutst();List<Integer> rulesNumber = new ArrayList<>();rulesNumber.add(1001);rulesNumber.add(1002);//2.// 根据规则编号找到对应的枚举值for (StaffMoveRulesEnum rule : StaffMoveRulesEnum.values()){if (rulesNumber.contains(rule.ruleNumber)){// 获取对应的方法名String methodName = rule.getMethodName();// 通过反射执行对应的方法try {Class<?> clazz = staffMoveService.getClass();Method method = clazz.getDeclaredMethod(methodName);Object result = method.invoke(staffMoveService);System.out.println(result);} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();return ResultVo.failure();}}}return ResultVo.ok("success");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/196140.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——WLAN简解

1. WLAN的发展历程 ❓ WLAN和WIFI有什么区别。 &#x1f604; 具体来说&#xff0c;WALN是抽象的概念&#xff0c;代表这无线局域网这一类技术&#xff0c;而WIFI则是具体的具体技术标准&#xff0c;虽然在生活中&#xff0c;二者的表现是强相关的&#xff08;因为是使用的wifi…

Mysql中的进阶增删查改操作(二)

联合查询和合并查询 一.联合查询1.内连接2.外链接2.1左外连接2.2右外连接 3.自连接4.子查询5.合并查询 一.联合查询 步骤 1.进行笛卡尔积 2.列出连接条件 3.根据需求再列出其他条件 4.针对列进行精简(可以使用聚合函数) 我们先搭建一个多表查询的框架 这样一个多表查询就搭建出…

MatrixOne 实战系列回顾 | 建模与多租户

本次分享主要介绍MatrixOne建模与多租户相关内容。 1 建模 #1 与MySQL的区别 使用create table语句建表和MySQL建表语句基本相同&#xff0c;也有几点要注意。 MatrixOne暂不支持空间数据类型&#xff0c;其他数据类型在保持与 MySQL 命名一致的情况下&#xff0c;在精度与…

腾讯云轻量4核8G12M带宽服务器租用价格和S5实例报价

腾讯云4核8G服务器优惠价格表&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;阿腾云atengyun.com分享腾讯云4核8G服务器详细配置、优惠价格及限制条件&…

Elasticsearch:运用向量搜索通过图像搜索找到你的小狗

作者&#xff1a;ALEX SALGADO 你是否曾经遇到过这样的情况&#xff1a;你在街上发现了一只丢失的小狗&#xff0c;但不知道它是否有主人&#xff1f; 了解如何使用向量搜索或图像搜索来做到这一点。 通过图像搜索找到你的小狗 您是否曾经遇到过这样的情况&#xff1a;你在街…

VBA如何快速识别Excel单元格中的文本数字

Excel中一种非常特殊的数字&#xff0c;这些数字看似数字&#xff0c;其实是文本格式&#xff08;下文简称为文本数字&#xff09;&#xff0c;在单元格的左上角会有一个绿色小三角作为标志&#xff0c;如B1:B3单元格。 在编程时为什么需要区分普通数字和文本数字呢&#xff…

什么是Selenium?如何使用Selenium进行自动化测试?

什么是 Selenium&#xff1f; Selenium 是一种开源工具&#xff0c;用于在 Web 浏览器上执行自动化测试&#xff08;使用任何 Web 浏览器进行 Web 应用程序测试&#xff09;。   等等&#xff0c;先别激动&#xff0c;让我再次重申一下&#xff0c;Selenium 仅可以测试Web应用…

cvf_使用lora方法增强能力

cvf_使用lora方法增强能力 实验对比图最终代码简介详细解析实验对比图 最终代码 import paddle import numpy as np import pandas as pd from tqdm import tqdmclass FeedFroward(paddle.nn.Layer)

杭州-区块链前瞻性论坛邀请函​

2023密码与安全前瞻性论坛邀请函 生成合法节点或非法节点&#xff0c;测试共识协议

MySQL存储架构

连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程&#xff0c;这个连接的查询只会在这个线程中执行。MySQL5.5以后支持了一个API叫线程池插件&#xff0c;可以用少量线程服务大量连接&#xff0c;因此不用每次都新建连接然后销毁。 客户端连接MySQL服务器时候&…

不允许你还没有了解哈希表、哈希桶、哈希冲突的解决,如何避免冲突

✏️✏️✏️今天给各位带来的是哈希桶、哈希冲突方面的知识。 清风的CSDN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#xff0c;点…

vscode中Chinese (Simplified)汉化无效解决方法

问题复现 之前已经下载了 Chinese (Simplified)插件并启用了&#xff0c;都是正常的中文简体。有时候打开vscode的时候&#xff0c;会发现汉化失效了&#xff0c;如图&#xff1a; 解决方法 依次点击 扩展&#xff08;Extensions&#xff09;— Chinese (Simplified) — 选…

flutter TabBar指示器

第一层tabView import package:jade/configs/PathConfig.dart; import package:jade/customWidget/MyCustomIndicator.dart; importpackage:jade/homePage/promotion/promotionPost/MyPromotionListMainDesc.dart; import package:jade/homePage/promotion/promotionPost/MyPr…

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…

Windows11 python3.12 安装pyqt6 pyqt6-tools

Windows11 python3.12 安装pyqt6比较容易&#xff0c;但pyqt6-tools一直安装不上去。出错信息如下&#xff1a; (venv) PS D:\python_project\pyqt6> pip install pyqt6-tools Collecting pyqt6-toolsUsing cached pyqt6_tools-6.4.2.3.3-py3-none-any.whl (29 kB) Collec…

cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory

目录 问题描述问题分析解决方案容器时区验证 问题描述 使用下面的 Dockerfile 为 youlai-boot 项目制作镜像设置容器时区报错。 # 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Sha…

【图数据库实战】HugeGraph架构

一、概述 作为一款通用的图数据库产品&#xff0c;HugeGraph需具备图数据的基本功能&#xff0c;如下图所示。HugeGraph包括三个层次的功能&#xff0c;分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型&#xff0c;其中OLTP实现了Apache TinkerPop3…

深度学习到智能小车(1)深度学习框架

0.前提 最近新开了一门叫机器学习的课程&#xff0c;老师一直在跟我们讲一些有关这方面的知识&#xff0c;告诉我们一定要学好数学&#xff0c;因为数学是算法的基础。我手上的donkeycar刚好也涉及到Keras深度神经网络&#xff0c;所以出于好奇我去图书馆借回了一本叫《Keras深…

DevSeo Studio设置中文界面

安装好DevSeo Studio后默认打开是欢迎页。 左下角Configure点击展开&#xff0c;选择plugins 弹出页面选择“installed”,然后输入chinese,默认是关闭的&#xff0c;点击enable将它启用&#xff0c;然后点击OK。 弹出页面点击“restart”重启即可。

VS中修改解决方案名称和项目名称

如何修改visual studio2019中的项目名 - 知乎 (zhihu.com) 查了很多&#xff0c;还是这个可行。虽然文中说不是最简单的&#xff0c;但在所查找资料中是可行且最简单的。 要点主要是&#xff1a; 1、比如我们复制一个解决方案&#xff0c;最好是带代码哈&#xff0c;也就是添…