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

news2024/9/27 17:21:55

思路

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 {

    @Override
    public Object promotiona(Object o) {
        return "promotiona:" + o;
    }

    @Override
    public Object interpersonalConnections(Object o) {
        return "interpersonalConnections:" + o;
    }

    @Override
    public Object education(Object o) {
        return "education";
    }

    @Override
    public Object alternatedays(Object o) {
        return "alternatedays:" + o;
    }

    @Override
    public Object kinship(Object o) {
        return "kinship:" + o;
    }

    @Override
    public Object staffinfoUpdate(Object o) {
        return "staffinfoUpdate";
    }

    @Override
    public Object deleteSchedulingRecord(Object o) {
        return "deleteSchedulingRecord";
    }

    @Override
    public Object revocationSign(Object o) {
        return "revocationSign";
    }

    @Override
    public 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.coloradmin.cn/o/1223272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C/C++]数据结构 栈和队列()

一:栈 1.1 栈的概念及结构 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底,栈中的数据元素遵守先进后出的原则. 压栈:栈的插入操作叫做进栈/压栈/入栈,将数据插入栈顶 出栈:栈的删除操作也叫出…

自学嵌入式,已经会用stm32做各种小东西了

自学嵌入式&#xff0c;已经会用stm32做各种小东西了 1、stm32 工程中&#xff0c;定义一个变量&#xff0c;记录复位次数&#xff0c;即复位一次变量加一。要求不许用备份寄存器和 flash 保存信息。本题只讨论不断电热启动情况&#xff0c;至于冷启动&#xff0c;不在此讨论。…

整理MLAI学习路径图

干货分享&#xff1a; 下面给出一个笔者自己整理的GitHub仓库&#xff1a;https://github.com/isLinXu/awesome-road-map&#xff0c;里面包含了一些可供参考的学习路径和思维导图&#xff0c;并整理微软、meta、谷歌、Kaggle以及华为、百度、阿里、腾讯、讯飞等相关的学习资源…

stm32入门建议跳过固件库去学习hal库吗?

stm32入门建议跳过固件库去学习hal库吗? 如果要以单片机作为以后的工作方向&#xff0c;建议还是深入了解一下单片机的原理与机制&#xff0c;比如串口收发的时候&#xff0c;内部的寄存器是怎么工作的&#xff0c;中断又是怎么工作的&#xff0c;然后我们又是怎么进行中断处…

【广州华锐互动】自然灾害科普3D体验展厅:培养安全意识,共创美好未来

在人类历史的进程中&#xff0c;灾难始终是我们不可避免的挑战。地震、洪水、火灾等自然灾害无情地摧毁我们的家园&#xff0c;带走我们的亲人。然而&#xff0c;随着科技的进步&#xff0c;我们已经有了更多的手段来预防和应对这些灾难。在这个背景下&#xff0c;自然灾害科普…

嵌入式系统中相关的高质量开源项目

关于GitHub&#xff0c;可能很多人误以为这是互联网人的专属&#xff0c;其实并不是&#xff0c;那上面嵌入式相关的开源项目是有很多的。现分享一些高星开源项目&#xff08;像RT-Thread、AWTK等大家都熟知的就不介绍了&#xff09;&#xff1a;Avem 项目链接&#xff1a; ht…

实力进阶,教你使用thinkphp6开发一款商城系统

0.开篇 你好&#xff01;很高兴你能点开这个教程&#xff0c;相信你对这个教程有了那么一点点兴趣&#xff0c;接下来占用你一点点时间&#xff0c;邀你浏览一下本章内容&#xff0c;希望能够让你更加有兴趣去学完这个教程。 作者我是一名九零后程序员&#xff0c;搬砖了好几…

山西电力市场日前价格预测【2023-11-19】

1.日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-19&#xff09;山西电力市场全天平均日前电价为591.63元/MWh。其中&#xff0c;最高日前电价为1500.00元/MWh&#xff0c;预计出现在16:45~20:45。最低日前电价为268.57元/MWh&#x…

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…

美国经典人工智能教材第3版出版!

美国经典人工智能教材&#xff0c;人工智能的百科全书《人工智能》&#xff08;第3版&#xff09;出版&#xff01;新增深度学习及人工智能编程等内容&#xff0c;理论阐释结合动手实践。 人工智能 第3版 关于作者 史蒂芬.卢奇&#xff08;Stephen Lucci&#xff09;拥有纽约…

FreeRtos 任务切换深入分析

一、背景知识&#xff1a; 1、任务切换包含三个基本流程&#xff1a;保护现场、更新TCB、恢复现场并跳转 2、freertos的任务切换是在xPortPendSVHandler 中断函数中完成的 3、中断函数在调用之前&#xff0c;硬件已经保存了r0,r1,r2,r3,r12,r14(LR),r15(pc)&#xff0c;恢复…

深入理解Linux网络笔记(七):异常TCP连接建立情况、如何查看是否有连接队列溢出发生

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 5、深度理解TCP连接建立过程&#xff08;二&#xff09; 4&…

顺序表(数据结构与算法)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

【Spring】AOP进阶-JoinPoint和ProceedingJoinPoint详解

文章目录 1. 前言2. JoinPoint简介3. 获取被增强方法的相关信息4. ProceedingJoinPoint简介5. 获取环绕通知方法的相关信息6. 总结 1. 前言 在Spring AOP中&#xff0c;JoinPoint和ProceedingJoinPoint都是关键的接口&#xff0c;用于在切面中获取方法的相关信息以及控制方法的…

国科大数据挖掘期末复习——聚类分析

聚类分析 将物理或抽象对象的集合分组成为由类似的对象组成的多个类的过程被称为聚类。由聚类所生 成的簇是一组数据对象的集合&#xff0c;这些对象与同一个簇中的对象彼此相似&#xff0c;与其他簇中的对象相异。 聚类属于无监督学习&#xff08;unsupervised learning&…

整形数据和浮点型数据在内存中的存储差别

愿所有美好如期而遇 我们先来看代码&#xff0c;猜猜结果是什么呢&#xff1f; int main() {//以整型数据的方式存储int n 10;float* m (float*)&n;//以整型数据的方式读取printf("%d\n", n);//以浮点型数据的方式2读取printf("%f\n", *m);printf(&…

揭秘“ChatGPT之父”突遭罢免内幕:从开发者大会起,几件事已有征兆

腾讯新闻《潜望》 纪振宇 发自硅谷 美国时间11月17日午间&#xff0c;OpenAI首席执行官&#xff0c;被称为“ChatGPT之父”的山姆奥特曼突遭董事会罢免。 OpenAI在当天发布的官方声明称&#xff0c;董事会启动了一项特别的调查&#xff0c;结论是奥特曼在与董事会沟通过程中没…

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

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

深度学习乳腺癌分类 计算机竞赛

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

嵌入式中一篇搞定Cmake使用教程

今天分享一篇关于 cmake 的相关文章&#xff0c;通过这个工具可以生成本地的Makefile。让我们不用去编写复杂的Makefile。 引言 CMake是开源、跨平台的构建工具&#xff0c;可以让我们通过编写简单的配置文件去生成本地的Makefile&#xff0c;这个配置文件是独立于运行平台和…