请假流程

2023-11-13

 

作者: nogocn 


在某一公司中,部门员工要休假的话需要部门主管的批准。如果休假天数大于10天的话,在部门主管的同意后,还必须上级主管批准。如果是部门主管要休假只要上级主管批准即可。在休假被批准之前,申请人可以撤销休假申请。
每个员工还有多少天休假必须管理起来,在员工提交休假申请时要检查申请天数是否超过可用天数。申请批准后,要在可用天数里减去申请天数。每次休假申请结束之后,不管通过未通过或是否取消,都必须记录下来。主管在批复申请之后,系统要将批复结果Email给申请人。对于大于10天的申请,如果部门主管已批准同意而上级主管还未批准,这时申请人撤销申请后,系统应发Email通知部门主管申请已撤销。
 
  processdefinition.xml如下:

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.     "-//jBpm/jBpm Mapping DTD 2.0//EN"   
  4.     "http://jbpm.org/dtd/processdefinition-2.0.dtd">  
  5. <process-definition  name="RequestLeave">  
  6.  <swimlane name="requester">  
  7.   <description>申请者description>  
  8.  swimlane>  
  9.  <swimlane name="chief">  
  10.   <description>部门主管description>  
  11.   <delegation class="kellerdu.jbpm.delegation.ChiefSwimlane"/>  
  12.  swimlane>  
  13.  <swimlane name="boss">  
  14.   <description>上级主管description>  
  15.   <delegation class="kellerdu.jbpm.delegation.BossSwimlane"/>  
  16.  swimlane>  
  17.  <start-state name="request" swimlane="requester">  
  18.   <transition to="BeginRequest"/>  
  19.  start-state>  
  20.  <fork name="BeginRequest">  
  21.   <transition to="RequesterCancel"/>  
  22.   <transition to="IsChief"/>  
  23.  fork>  
  24.  <decision name="IsChief">  
  25.   <delegation class="kellerdu.jbpm.delegation.ChiefDecision"/>  
  26.   <transition name="BossApprove"  to="BossApprove"/>  
  27.   <transition name="ChiefApprove"  to="ChiefApprove"/>  
  28.  decision>  
  29.  <state name="RequesterCancel">  
  30.   <assignment swimlane="requester"/>  
  31.   <transition name="cancel" to="Decided">  
  32.    <action>  
  33.       
  34.     <delegation class="kellerdu.jbpm.action.RequestCancel"/>  
  35.    action>  
  36.   transition>  
  37.  state>  
  38.  <state name="ChiefApprove">  
  39.   <assignment swimlane="chief"/>  
  40.   <transition name="approve" to="NeedBossApprove">  
  41.    <action>  
  42.       
  43.     <delegation class="kellerdu.jbpm.action.ChiefApprove"/>  
  44.    action>  
  45.   transition>  
  46.   <transition name="disapprove" to="Decided">  
  47.    <action>  
  48.       
  49.     <delegation class="kellerdu.jbpm.action.ChiefDisapprove"/>  
  50.    action>  
  51.   transition>  
  52.  state>  
  53.  <state name="BossApprove">  
  54.   <assignment swimlane="boss"/>  
  55.   <transition name="approve" to="Decided">  
  56.    <action>  
  57.       
  58.     <delegation class="kellerdu.jbpm.action.BossApprove"/>  
  59.    action>  
  60.   transition>  
  61.   <transition name="disapprove" to="Decided">  
  62.    <action>  
  63.       
  64.     <delegation class="kellerdu.jbpm.action.BossDisapprove"/>  
  65.    action>  
  66.   transition>  
  67.  state>  
  68.  <decision name="NeedBossApprove">  
  69.     
  70.   <delegation class="kellerdu.jbpm.delegation.NeedBossApproveDecision"/>  
  71.   <transition name="need" to="BossApprove"/>  
  72.   <transition name="notNeed" to="Decided"/>  
  73.  decision>  
  74.  <join name="Decided">  
  75.   <description>有一个先到达即进行父Tokendescription>  
  76.   <delegation class="kellerdu.jbpm.delegation.DecidedJoin"/>  
  77.   <transition to="DoSomething"/>  
  78.  join>  
  79.  <decision name="DoSomething">  
  80.   <description>  

    根据请求的状态决定。
    (1)“主管或者老板批准”-‘approve’:修改员工休假的总天数,设定发给用户E-Mail的信息。
    (2)“主管或者老板否决”-“disapprove”:设定发给用户E-Mail的信息。
    (3)“撤销”-"cancel"-设定发给用户E-Mail的信息。如果主管批准,要发给主管消息说明已经撤销。
  

xml 代码
  1.  description>  
  2.  <delegation class="kellerdu.jbpm.delegation.DoSomethingDecision"/>  
  3.  <transition name="disapprove" to="Finished">  
  4.   <action>  
  5.    <delegation class="kellerdu.jbpm.action.Disapprove"/>  
  6.   action>  
  7.  transition>  
  8.  <transition name="approve" to="Finished">  
  9.   <action>  
  10.    <delegation class="kellerdu.jbpm.action.Approve"/>  
  11.   action>  
  12.  transition>  
  13.  <transition name="cancel" to="Finished">  
  14.   <action>  
  15.    <delegation class="kellerdu.jbpm.action.Cancel"/>  
  16.   action>  
  17.  transition>  
  18. decision>  
  19. <end-state name="Finished"/>  
  20. <action event-type="process-end">  
  21.    
  22.  <delegation class="kellerdu.jbpm.action.ProcessEndAction"/>  
  23. action>  
  24. /process-definition>  

 

Action指明的是当前状态要执行的一些额外的操作,如记录log、发邮件等。
(1)Swimline的delegation要做的就是判别当前Actor的身份。
  

java 代码
  1. package kellerdu.jbpm.delegation;   
  2.   
  3. import org.jbpm.delegation.*;   
  4. import kellerdu.jbpm.LogsFactory;   
  5. import org.apache.commons.logging.Log;   
  6.   
  7. public class BossSwimlane implements AssignmentHandler {   
  8.     public BossSwimlane() {   
  9.     }   
  10.   
  11.     /**  
  12.      * 当前的状态有哪个actor来具体负责处理,选择是老板的actor来处理。  
  13.      *  
  14.      * 如果王林是老板,那么他请假可以用他的名称来开始一个请假流程,当他检查他需要批示的  
  15.      * 请假时,使用actorId=boss来找出所有的批示。这时selectActor返回的值就是一个常量“boss”  
  16.      *  
  17.      *  
  18.      * @param assignmentContext AssignmentContext  
  19.      * @return String  
  20.      * @todo Implement this org.jbpm.delegation.AssignmentHandler method  
  21.      */  
  22.     public String selectActor(AssignmentContext assignmentContext) {   
  23.         Log log = LogsFactory.getLogInstance(this.getClass());   
  24.         log.info("任务分配给老板");   
  25.         return "boss";   
  26.     }   
  27. }   
  28. ========================================   
  29. ackage kellerdu.jbpm.delegation;   
  30.   
  31. import org.jbpm.delegation.*;   
  32. import kellerdu.jbpm.LogsFactory;   
  33. import org.apache.commons.logging.Log;   
  34.   
  35. public class ChiefSwimlane implements AssignmentHandler {   
  36.     public ChiefSwimlane() {   
  37.     }   
  38.   
  39.     /**  
  40.      * selectActor  
  41.      * @see BossSwimlane  
  42.      *  
  43.      * @param assignmentContext AssignmentContext  
  44.      * @return String  
  45.      * @todo Implement this org.jbpm.delegation.AssignmentHandler method  
  46.      */  
  47.     public String selectActor(AssignmentContext assignmentContext) {   
  48.        Log log = LogsFactory.getLogInstance(this.getClass());   
  49.         log.info("任务分配给上级主管");   
  50.        return "chief";   
  51.     }   
  52. }   

(二)Decision

java 代码
  1. package kellerdu.jbpm.delegation;   
  2.   
  3. import org.jbpm.delegation.*;   
  4. import kellerdu.jbpm.LogsFactory;   
  5. import org.apache.commons.logging.Log;   
  6. import kellerdu.jbpm.Constants;   
  7.   
  8. public class ChiefDecision implements DecisionHandler {   
  9.     public ChiefDecision() {   
  10.     }   
  11.   
  12.     /**  
  13.      * 判断是否需要主管批准,决定下一个要进行的transition  
  14.      *  
  15.      * @param executionContext ExecutionContext  
  16.      * @return String  
  17.      * @todo Implement this org.jbpm.delegation.DecisionHandler method  
  18.      */  
  19.     public String decide(ExecutionContext executionContext) {   
  20.         Log log=LogsFactory.getLogInstance(this.getClass());   
  21.         String ac=(String)executionContext.getVariable(Constants.USER_NAME);   
  22.         if(ac!=null&&(ac.equals("dali")||ac.equals("wang"))){   
  23.             log.info(ac+"需要老板批准!");   
  24.             return "BossApprove";   
  25.         }else{   
  26.             log.info(ac+"需要先经主管批准");   
  27.             return "ChiefApprove";   
  28.         }   
  29.     }   
  30. }   
  31.   

=======================
(三)fork

java 代码
  1. package kellerdu.jbpm.delegation;   
  2.   
  3. import org.jbpm.*;   
  4. import org.jbpm.delegation.*;   
  5. import org.jbpm.model.execution.*;   
  6. import java.util.*;   
  7.   
  8. public class DecidedJoin implements JoinHandler {   
  9.     public DecidedJoin() {   
  10.     }   
  11.   
  12.     /**  
  13.      * fork,只要一个分支到达,即可进行下一步操作,同时取消其它同时进行的分支。  
  14.      * 这里就是用户如果取消,请假就取消。如果用户请假批准,则用户不能取消。  
  15.      *  
  16.      * @param forkContext ForkContext  
  17.      * @throws ExecutionException  
  18.      * @todo Implement this org.jbpm.delegation.ForkHandler method  
  19.      */  
  20.     public void join(JoinContext joinContext) throws ExecutionException {   
  21.         Iterator it=joinContext.getConcurrentTokens().values().iterator();   
  22.         Token arrivingToken = joinContext.getToken();   
  23.         while(it.hasNext()){   
  24.             Token to=(Token)it.next();   
  25.             if(to.getId().equals(arrivingToken.getId())){   
  26.                 //取消其它执行的Token   
  27.                 joinContext.getExecutionService().cancelToken(to.getId());   
  28.             }   
  29.         }   
  30.          // reactivate the parent token.   
  31.           joinContext.reactivateToken( arrivingToken.getParent() );   
  32.     }   
  33. }   
  34.     

(一)  开始一个请假流程
      

java 代码
  1. //user是请假人的actorId   
  2.       ExecutionService es=JbpmServiceFactory.getInstance().openExecutionService(user);   
  3.        HashMap vs=new HashMap();   
  4.       //一些参数   
  5.        vs.put(Constants.REQUEST_STATUS,String.valueOf(0));   
  6.        vs.put(Constants.REQUEST_RETURN_INFO,"No info!");   
  7.        vs.put(Constants.USER_NAME,EncodeTransfer.toISO(user));   
  8.        vs.put(Constants.REQUEST_DAYS,String.valueOf(rea.getDays()));   
  9.        try {   
  10.           //开启请假流程   
  11.            es.startProcessInstance(Constants.WORK_NAME, vs);   
  12.            log.info("["+user+"]"+"申请假期开始!请假"+rea.getDays()+"天!");   
  13.            return am.findForward("main");   
  14.        } catch (ExecutionException ex) {   
  15.            ex.printStackTrace();   
  16.            log.error("请假进程无法开始!");   
  17.            return am.findForward("error");   
  18.        }finally{   
  19.            es.close();   
  20.        }   

(二)当前执行任务
    对于部门经理或者老板,找到要处理的请假。
     

java 代码
  1. String actorId = (String) req.getSession().getAttribute(Constants.USER);   
  2.           if(actorId.equals("wang")){   
  3.               actorId="boss";   
  4.           }else if(actorId.equals("bigli")){   
  5.               actorId="chief";   
  6.           }   
  7.           // get the execution service   
  8.           ExecutionService executionService = JbpmServiceFactory.getInstance().   
  9.                                               openExecutionService(actorId);   
  10.   
  11.           // get the tasklist from jbpm for user   
  12.           List tasks = new ArrayList();   
  13.           // add the jbpm tasks   
  14.           tasks.addAll(executionService.getTaskList(actorId));   
  15.           // put the tasklist into the form   
  16.           mf.setTasks(tasks);   
  17.           // get the tasklist from jbpm for user   
  18.           List definitions = new ArrayList();   
  19.           // add the jbpm definitions   
  20.           definitions.addAll(executionService.getLatestDefinitions());   
  21.           // put the tasklist into the form   
  22.           mf.setRequests(definitions);   
  23.           // close the execution service   
  24.           executionService.close();   
  25.           req.getSession().setAttribute("mainForm",mf);   
  26.           log.debug("任务: " + tasks);   
  27.           log.debug("当前可以执行的请求: " + definitions);   

(三)处理请假
           

java 代码
  1. String actorId = (String) reqrest.getSession().getAttribute(Constants.   
  2.                     USER);   
  3.             Long tokenId=new Long(req.getParameter("tokenId"));   
  4.             // get the execution service   
  5.             ExecutionService executionService = JbpmServiceFactory.getInstance().   
  6.                                                 openExecutionService(actorId);   
  7.             Map hm=executionService.getVariables(tokenId);//变量   
  8.             String act=req.getParameter("action");//进行转换的transition   
  9.             executionService.endOfState(tokenId,hm,act);   
  10.             executionService.close();   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

请假流程 的相关文章

  • 在 htaccess 文件中使用 RewriteMap

    如何在 htaccess 文件中使用 RewriteMap 指令 当我把它放在那里时 我收到 此处不允许 RewriteMap 错误 我知道当将其放入 httpd conf 或虚拟主机配置文件中时 此错误将会消失 但我想知道是否可以将其放入
  • 为基于架构的 XML 文件创建 WPF 编辑器

    这是场景 我们的服务器产品之一使用大型 XML 配置文件 该文件的布局相当好 并且针对 XSD 文件进行了验证 现在是时候构建一个配置 GUI 来维护这个文件了 我想深入研究 WPF 来完成它 我可以为每个配置部分布置一个单独的表单 每次向
  • 使用字符串数组填充 Spinner

    当谈到 Android 应用程序时 我属于新手联盟 我希望用数组或字符串填充 Spinner 它是一个转换器应用程序 下面是我的 XML 文件的摘录 我希望填充 Spinner
  • InstallShield XML 文件更改 - 安装时更改节点属性

    我正在使用 InstallShield 2012 构建 Web 服务安装 并且需要根据用户输入修改应用程序的 Web config 文件 我在 DestinationFolder 对话框之后引入了 PromptServerAndDataba
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • Tomcat如何通过IP地址限制访问?

    有谁知道Tomcat是否可以通过IP地址限制对某些应用程序的访问 例如Apache的 htaccess 你添加一个Valve to the Context in context xml 具体来说 org apache catalina va
  • 我在 apache 中使用乘客 for Rails 时收到 403 错误

    我已经安装了所需的工具 并遵循了几个教程 试图让乘客做出回应 我可以访问公共文件夹 public 500 html 或 422 hml 中的静态文件 昨天我通过虚拟主机进入 发现一些乘客错误 但一段时间后 托管重新启动了服务 从那时起我就无
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • mod_rewrite 有例外

    为了将我的服务器上的每个请求重定向到我使用的安全连接 RewriteCond SERVER PORT 80 RewriteRule https mywebsite com 1 R L 效果完美 但是我需要两条路径不被重定向 说我什么时候访问
  • C# MonoGame 有帮助吗? (Content.Load("入侵者");)

    我正在 MonoGame 中使用 Open GL 制作太空入侵者游戏 并且尝试加载已添加到内容文件夹中的纹理 这是一个名为 Invader 的 PNG 文件 我使用的代码是 invader Content Load
  • Apache:重定向用户,但保持相同的路径?

    我希望能够将用户重定向到不同的 TLD 但保持相同的路径 例如 如果用户访问 example com cars 10 使用 apache 如何将用户重定向到类似以下内容 my new site com cars 10 如果您的服务器启用了
  • 使用 XML 时引用未声明的实体异常

    我正在尝试设置 xmldoc 的 innerxml 但出现异常 Reference to undeclaredEntity XmlDocument xmldoc new XmlDocument string text Hello I am
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • cursorMark是无状态的以及它如何解决深度分页

    作为指定here https cwiki apache org confluence display solr Pagination of Results光标标记是无状态的 但我不明白它是如何解决无状态的深度分页问题的 solr 是否按唯一
  • 未加载 Firebird 扩展

    我正在尝试在 PHP 中使用 Firebird 扩展 我有扩展文件 php pdo firebird dll php interbase dll in my ext文件夹 我将它们添加到我的php ini像这样文件 PHP PDO FIRE
  • 在读取正文之前拒绝 HTTP 请求

    我正在开发一个网站 用户需要上传一些非常大的文件 该网站是用 PHP 编写的 在某些情况下 我想根据标头拒绝文件 理想情况下 我想在收到标头后立即拒绝请求 而不读取正文 如果标头足以表明该文件应被拒绝 则没有理由读取 200M 的文件 此外
  • 在工具栏下显示内容

    您好 我试图简单地将我的内容放在工具栏下方 但是当我运行我的应用程序时 某些内容本应位于工具栏下方 却隐藏在工具栏后面 我已经阅读了有关使用框架布局来尝试将其分离的内容 但我有点卡住了 我目前正在使用该软件提供的基本 android stu
  • 使用 MemoryStream 创建 Open XML 电子表格时的 Excel 和“不可读内容”

    使用 Open XML SDK v2 0 创建 Excel 电子表格时 我们的 Excel 输出最初可以成功运行几个月 最近Excel 所有版本 开始抱怨 Excel在 zot xlsx 中发现不可读的内容 是否要恢复此工作簿的内容 我们正
  • 仅当环境变量具有特定值时如何设置 Apache 标头

    我想在我的 Apache 2 4 配置中设置标头 但前提是环境变量具有特定值 SetEnv ENV NAME prod 我如何仅在以下情况下设置此标头ENV NAME is not prod Header set X Robots Tag
  • 具有挑战性的问题 - 使用 PHP 对 XML 数据进行排序

    我有 xml 文件 其中包含大量产品数据 我需要根据我的字段 ProductRange 的数据对我的产品进行排序 ProductRange urldecode GET Range XML 文件数据

随机推荐

  • 3 Decomposition Methods

    分解方法是解决问题的一般方法 其将问题分解为更小的问题并且并行地或者顺序地解决每个更小的问题 当采用顺序的方式时 优点是问题的复杂性呈超线性增长 more than linearly 如果问题在单步操作中分解有效 那么我称该问题为 块 可分
  • 数据分析36计(20):优化新财年广告预算,乘法营销组合模型的Python实现

    目录 文末附数据和代码 1 简介 如果你有做过FB广告投放 对 ROI 和 ROAS 这两个词一定不陌生 因为招聘的时候肯定会问你两个问题 你接触过多大的盘子 即花过多少预算 你的ROI一般是多少 广告客户使用营销组合模型 MMM 来衡量其
  • 运算放大器---增益带宽积(GBW)

    增益带宽积 GBW 电压反馈型运算放大器的增益带宽决定了其在某项应用中的有效带宽 将增益带宽除以应用中的实际闭环增益 便可大致估算出最大可用带宽 对于电压反馈放大器 增益带宽积 GBW 是衡定的常数 很多的应用都得益于所选择的更大带宽 转换
  • 电路板上为何要有孔洞?何谓PTH/NPTH/vias(导通孔)

    http www greattong com archives view 443 1 html 电路板上为何要有孔洞 何谓PTH NPTH vias 导通孔 发布时间 2016 07 13 09 39 阅读 3613 来源 技术文章 责任编
  • Vim插件合集 (打造你的专属炫酷IDE)

    Vim插件合集 本篇 主要来介绍一下 如何使用 Vim的插件功能 去把Vim打造成 炫酷 多功能的IDE 让你可以用Vim编写Python Go 等等 而不用繁重的 Pycharm 等高级Ide 效果图 前置知识 vim映射 就是映射你自己
  • 阿里全球数学竞赛最强10人名单出炉:仅1人来自北大,但北大是最大赢家

    鱼羊 杨净 发自 凹非寺量子位 报道 公众号 QbitAI 又一次的全球数学狂欢 落下帷幕 经过4个月的赛程 第三届阿里巴巴全球数学竞赛结果新鲜出炉 52850名参赛选手中 最终有70人获奖 99 9 的人无缘奖牌 北大成最大赢家 不仅有2
  • react 中使用递归和 TS 泛型来处理树形数据

    解决场景 使用递归把树形数据中的 children 替换成 children undefind page1 ts import formatTree from formatData ts const treeLists name paren
  • 线性稳压电路

    如图为串联式稳压电路 之所以叫串联式是因为T管与负载RL串联 工作原理 1 稳压管 Dz 与限流电阻R串联 得到基准电压 2 与组成反馈网络 得到反馈电压 3 净输入量的变化 引起的变化 4 的变化使调整管T的c e 极间的电压降变化 从而
  • Linux文件目录类(常用指令)

    文件目录类 cd指令 基本语法 cd 参数 功能描述 切换到指定目录 cd 或者cd 回到自己的家目录 cd 回到当前目录的上一目录 绝对路径和相对路径 绝对路径 目标文件在硬盘上的真实路径 最精确路径 从根目录开始的 相对路径 相对于当前
  • 将程序打成jar包后运行mapReduce时出现File does not exit: hdfs://localhost....jar

    出现的问题 解决方法 直接向报错路径添加报错提示的文件
  • Installation failed with message Invalid File:

    最近在studio 在安装apk的时候遇到了这么个问题 他说我之前已经有安装版本了 但是这个apk却是我第一次安装 怎么回事 之前遇到过一次 自己不知道怎么解决了 当时忘记记录下来现在记录下来 给自己和后面遇到的朋友 提供一个快速的解决办法
  • 圣路易斯大学计算机科学,圣路易斯华盛顿大学计算机科学专业

    圣路易斯华盛顿大学计算机科学与工程系申请要求需要托福 接受雅思 需要GRE GPA 3 0 学费 47 300 年 春季 秋季入学 截止日 1月15日 PhD 3月1日 MS M Eng 圣路易斯华盛顿大学计算机科学与工程系课程 网络物理系
  • 说说你对Vue生命周期的理解?

    一 生命周期是什么 生命周期 Life Cycle 的概念应用很广泛 特别是在政治 经济 环境 技术 社会等诸多领域经常出现 其基本涵义可以通俗地理解为 从摇篮到坟墓 Cradle to Grave 的整个过程 在Vue中实例从创建到销毁的
  • OpenCV InputArray和OutputArray

    InputArray这个接口类可以是Mat Mat
  • Attention注意力机制--原理与应用

    Attention注意力机制 原理与应用 注意力机制即Attention mechanism在序列学习任务上具有巨大的提升作用 在编解码器框架内 通过在编码段加入A模型 对源数据序列进行数据加权变换 或者在解码端引入A模型 对目标数据进行加
  • 那些会阻碍程序员成长的细节[3]

    前两篇文间几乎是想到那里就写到那里 没有分门别类的加以阐述 本篇延续以上两篇文章的思路 在之前的基础再追加 没有看过前两篇文章的同学可通过这两个链接回顾一下 那些会阻碍程序员成长的细节 一 那些会阻碍程序员成长的细节 二 不能主动推动事物前
  • Halcon标定板标定

    halcon标定有自己的标定助手可以演示 不过拿到VS里面却不是很适用 尤其是关于畸变矫正和透视矫正算子的解释也没有 下面两个算子set origin pose gen image to world plane map关键参数怎么计算也没有
  • 【MyBatis-Plus】之批量插入

    一 应用情景介绍 在实际的项目开发过程中 常常遇到批量保存数据的场景 当数据量比较少 比如只有几条数据的情况下 我们可以使用 for 循环来 insert 数据 但如果数据量比较多的情况下就不行 特别是并发的情况下 因为这样会增加数据库的负
  • 一个学习编程的网站

    推荐一个学习编程的网站 https www runoob com
  • 请假流程

    作者 nogocn 在某一公司中 部门员工要休假的话需要部门主管的批准 如果休假天数大于10天的话 在部门主管的同意后 还必须上级主管批准 如果是部门主管要休假只要上级主管批准即可 在休假被批准之前 申请人可以撤销休假申请 每个员工还有多少