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.hqwc.cn/news/190354.html

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

相关文章

基于热交换算法优化概率神经网络PNN的分类预测 - 附代码

基于热交换算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于热交换算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于热交换优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…

苍穹外卖--员工分页查询

请求参数封装&#xff1a; Data public class EmployeePageQueryDTO implements Serializable {//员工姓名private String name;//页码private int page;//每页显示记录数private int pageSize;}请求结果封装&#xff1a; public class PageResult implements Serializable {…

C++各种字符转换

C各种字符转换 一.如何将char数组转化为string类型二. string转char数组&#xff1a;参考 一.如何将char数组转化为string类型 在C中&#xff0c;可以使用string的构造函数或者赋值操作符来将char数组转换为string类型。 方法1&#xff1a;使用string的构造函数 const char* c…

iframe父子页面通信相互调用传递参数多个postMessage

效果 如何运行 父页面代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

[C/C++]数据结构 链表(单向链表,双向链表)

前言: 上一文中我们介绍了顺序表的特点及实现,但是顺序表由于每次扩容都是呈二倍增长(扩容大小是自己定义的),可能会造成空间的大量浪费,但是链表却可以解决这个问题. 概念及结构: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接…

cs与msf联动

实验环境 cs4.4(4.5版本不知道为啥实现不了) cs服务器与msf在同一台vps上 本地win7虚拟机 cs派生会话给msf 首先cs正常上线win7&#xff0c;这就不多说了&#xff0c;然后说如何将会话派生给msf cs准备 选择Foreign&#xff0c;这里可以选HTTP&#xff0c;也可以选HTTPS…

AnimateDiff搭配Stable diffution制作AI视频

话不多说&#xff0c;先看视频 1. AnimateDiff的技术原理 AnimateDiff可以搭配扩散模型算法&#xff08;Stable Diffusion&#xff09;来生成高质量的动态视频&#xff0c;其中动态模型&#xff08;Motion Models&#xff09;用来实时跟踪人物的动作以及画面的改变。我们使用 …

基于和声算法优化概率神经网络PNN的分类预测 - 附代码

基于和声算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于和声算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于和声优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

【开源】基于JAVA的快递管理系统

项目编号&#xff1a; S 007 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S007&#xff0c;文末获取源码。} 项目编号&#xff1a;S007&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快…

CTFhub-RCE-综合过滤练习

%0a、%0d、%0D%0A burp 抓包 修改请求为 POST /?127.0.0.1%0als 列出当前目录 返回包 http://challenge-135e46015a30567b.sandbox.ctfhub.com:10800/?ip127.0.0.1%0acd%09*here%0ac%27a%27t%09* _311632412323588.php

【自用总结】正项级数审敛法的总结

注&#xff1a;收敛半径的求法就是lim n->∞ |an1/an| ρ&#xff0c;而ρ1/R&#xff0c;最基本的不能忘。 比较判别法&#xff1a;从某项起&#xff0c;该级数后面的项均小于等于另一级数&#xff0c;则敛散性可进行一定的比较 可以看到&#xff0c;比较判别法实际上比较…

调整COSWriter解决X-easypdf / PDFBOX生成大量数据时OOM问题

背景 业务需要生成一个15W数据左右的PDF交易报表。希望我们写在一个文件里&#xff0c;不拆分成多个PDF文件。 使用的技术组件 <dependency><groupId>wiki.xsx</groupId><artifactId>x-easypdf-pdfbox</artifactId><version>2.11.10<…