`
上杉t
  • 浏览: 32731 次
文章分类
社区版块
存档分类
最新评论

一个JBPM实现互斥撤回任务的例子

阅读更多
        有一个需求是这个样子的:员工请假,填写好请假单后,提交申请.上级主管会有一个审核请假的任务,同时申请人有一个撤回的任务.这这两个任务互斥,也就是说两个任务有一个先执行.另一个任务取消.
       曾经看过网上一篇文章使用分支节点创建两个任务节点.当一个任务节点执行后写一个action类负责结束另一个任务节点.达到互斥撤回的效果.本人试验过确实可以完成.
       不过这不符合我们常规的流程定义方式(需要增加一对分支,联合节点).并且不符合jbpm关于节点描述.
       jbpm认为一个节点代表流程中的一个等待状态.显然领导审核和员工撤销请假处于同一个等待状态,也应该处于一个节点中.使用一对分支,联合节点的方式虽然形式上处于一个等待状态.但这样的流程设计是不合适的.
       可以这样设计这个互斥回撤节点

<task-node name="审核" signal="first" end-tasks="true"><task name="审核员工请假" swimlane="boss" template="apply_2.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><variable name="day" access="read,write" mapped-name="day"><variable name="applyman" access="read" mapped-name="applyman"> </variable></variable></variable></controller></task></task-node>
xml 代码
 
  1. <task-node name="审核" signal="first" end-tasks="true">  
  2.         <task name="审核员工请假" swimlane="boss" template="apply_2.ftl">  
  3.     <controller>  
  4.           <variable name="reason" access="read" mapped-name="reason"/>  
  5.          <variable name="day" access="read,write" mapped-name="day"/>  
  6.          <variable name="applyman" access="read" mapped-name="applyman"/>  
  7.          <variable name="decision" access="read,write" mapped-name="decision"/>  
  8.        <!---->controller>   
  9.    <!---->task>  
  10.     <task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl">  
  11.     <controller>  
  12.           <variable name="reason" access="read" mapped-name="reason"/>  
  13.          <variable name="day" access="read" mapped-name="day"/>  
  14.          <variable name="applyman" access="read" mapped-name="applyman"/>  
  15.          <variable name="decision" access="read,write" mapped-name="decision"/>  
  16.        <!---->controller>  
  17.    <!---->task>  
  18.     
  19.      <transition name="结束" to="归档"><!---->transition>  
  20.      <transition name="撤销" to="请假结束"><!---->transition>  
  21.      <transition name="修改" to="修改"><!---->transition>  
  22.   <!---->task-node>  
<task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><task-node name="审核"><task template="apply_2.ftl" swimlane="boss" name="审核员工请假"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><task template="apply_3_new.ftl" swimlane="applyman" name="撤回请假单"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">

这个节点包含了我们刚才说的两个任务.我们知道当流传到这个节点的时候.这两个任务会同时创建并分配给各自的人员.有一个人完成任务后 节点向指定的节点转向.同时结束另一个任务.    signal="first" 有一个任务结束节点就流转.  end-tasks="true" 结束该节点的时候自动结束其他没有完成的任务.

       这是个小例子没什么特别.可能早有高人知晓.在这我只是感觉到jbpm对节点是流程的一个等待状态这个含义,对我们设计流程有重要的意义.欢迎大家指正批评

   完整的xml流程定义.如果你要部署这个流程.这里需要说明的是</variable></variable></controller></task></variable></variable></controller></task></task-node></variable></controller></task><variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">com.jbpmexample.jbpm.Assignment类是我自己的授权类.你自己写一个代替就好了,</variable></variable></variable></variable></variable><variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">template="apply_1.ftl"  这样的属性是我自己加的 为了实现显示页面的定制.需要去掉.否则部署的时候会报错</variable></variable></variable></variable></variable><task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><task-node name="审核"><task template="apply_2.ftl" swimlane="boss" name="审核员工请假"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><task template="apply_3_new.ftl" swimlane="applyman" name="撤回请假单"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">
xml 代码
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process-definition  
  4.   xmlns="urn:jbpm.org:jpdl-3.1"  name="新请假流程">  
  5.   <swimlane name="applyman" />  
  6.     
  7.   <swimlane name="boss">  
  8.     <assignment class="com.jbpmexample.jbpm.Assignment">  
  9.          <swimlaneName>boss</swimlaneName>  
  10.       </assignment>  
  11.   </swimlane>  
  12.     
  13.    <start-state name="请假开始">  
  14.     <task name="填写请假单" swimlane="applyman" <variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">template="apply_1.ftl"</variable></variable></variable></variable></variable>>  
  15.         <controller>  
  16.           <variable name="reason" access="read,write" mapped-name="reason"/>  
  17.           <variable name="day" access="read,write" mapped-name="day"/>  
  18.           <variable name="applyman" access="read,write" mapped-name="applyman"/>  
  19.         </controller>   
  20.     </task>  
  21.       <transition name="结束" to="审核"></transition>  
  22.    </start-state>  
  23.    <task-node name="审核" signal="first" end-tasks="true">  
  24.         <task name="审核员工请假" swimlane="boss" template="apply_2.ftl">  
  25.         <controller>  
  26.            <variable name="reason" access="read" mapped-name="reason"/>  
  27.           <variable name="day" access="read,write" mapped-name="day"/>  
  28.           <variable name="applyman" access="read" mapped-name="applyman"/>  
  29.           <variable name="decision" access="read,write" mapped-name="decision"/>  
  30.         </controller>   
  31.     </task>  
  32.         <task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl">  
  33.         <controller>  
  34.            <variable name="reason" access="read" mapped-name="reason"/>  
  35.           <variable name="day" access="read" mapped-name="day"/>  
  36.           <variable name="applyman" access="read" mapped-name="applyman"/>  
  37.           <variable name="decision" access="read,write" mapped-name="decision"/>  
  38.         </controller>  
  39.     </task>  
  40.      
  41.       <transition name="结束" to="归档"></transition>  
  42.       <transition name="撤销" to="请假结束"></transition>  
  43.       <transition name="修改" to="修改"></transition>  
  44.    </task-node>  
  45.    <task-node name="归档">  
  46.         <task name="请假归档" swimlane="applyman" template="apply_4.ftl">  
  47.         <controller>  
  48.            <variable name="reason" access="read" mapped-name="reason"/>  
  49.           <variable name="day" access="read" mapped-name="day"/>  
  50.           <variable name="applyman" access="read" mapped-name="applyman"/>  
  51.           <variable name="decision" access="read" mapped-name="decision"/>  
  52.         </controller>   
  53.     </task>  
  54.       <transition name="结束" to="请假结束"></transition>  
  55.    </task-node>  
  56.    <end-state name="请假结束"></end-state>  
  57.      
  58.    <task-node name="修改">  
  59.    <task name="修改" swimlane="applyman" template="apply_1.ftl">  
  60.         <controller>  
  61.            <variable name="reason" access="read,write" mapped-name="reason"/>  
  62.           <variable name="day" access="read,write" mapped-name="day"/>  
  63.           <variable name="applyman" access="read" mapped-name="applyman"/>  
  64.         </controller>   
  65.     </task>  
  66.       <transition name="结束" to="审核"></transition>  
  67.    </task-node>  
  68. </process-definition>  
</variable></variable></controller></task></variable></variable></controller></task></task-node></variable></controller></task>
分享到:
评论
22 楼 finikes 2009-02-14  
如何控制使得不会员工自己批了自己的假呢?
21 楼 yuyanshan 2008-08-26  
xman 2008-06-08 
你把事情想得太简单了。
如果审核的过程需要几个步骤,如部门主管审核,综合部审核,公司主管审核。。。,还能用你这种方法吗?不是还得用fork join

我也觉得是这样,我现在就碰到这种情况了,不知道怎么做,用fork join还有问题,在join那不知道怎么设置让有一路任务完成就向下执行,请问有没有什么好方法呀
20 楼 zhoden 2008-07-28  
已写得很好了!
19 楼 pig345 2008-06-30  
佩服LZ,这个方案能完美地解决大多数情况下的撤回问题了。
另外似乎到了JBPM3.2.x,里面所带例子很少,单元测试也没有了,不知道是怎么回事?
18 楼 skyremark 2008-06-24  
  
17 楼 xman 2008-06-08  
你把事情想得太简单了。
如果审核的过程需要几个步骤,如部门主管审核,综合部审核,公司主管审核。。。,还能用你这种方法吗?不是还得用fork join
16 楼 gabriel80 2008-04-07  
看了下。。一年前的文章啊
15 楼 oisiv 2007-05-25  
嗯,看来你是善于积极动手解决自己碰到的问题。呵呵,而我很怕麻烦,要向你学习啊。

不过的确,因为我也要手动解析流程xml,得到特定任务列表(我在task-node那里用description做数字标识,可以用来排序),在它的规范下实在是无法用到xpath,不管怎么在网上找方法,都解决不了,最后只能用笨方法,在从流程库中取得xml文件後,转成string,然后用字符串替换方法,替换掉xmlns的内容。这样又可以用xpath查询了。

到目前为止,个人感觉jbpm很不成熟啊,它的javadoc很不值得称道;jpdl的扩展性不强,所有这些,让人用起来很不顺手。不过总比自己实现要来得好。

最近在处理jbpm在spring应用中的使用,网上的整合方法,有些搞不懂,总觉得不适合自己的架构,我现在就一直在解决整合jbpm後的事务问题,找不到合适的方法。
14 楼 上杉t 2007-05-25  
奥 我改了它的规范,加入了我新添的属性,然后一起打包zip来发布,流程图文件还是一个,自己写一个部署方法吧jbpm的包装一下就好。就是一个拆包的过程。jbpm自己也有一个zip部署的方式不是 ,参考了一下。它的规范可以改一下。很简单。就是它的规范不准许使用xpath语句。解析xml文件略麻烦。参考一下它的解析方法就可以了
13 楼 oisiv 2007-05-25  
现在了解了你为什么要用模板了。不过你加了这个模板属性,因为它不是规范里的属性,那如何能发布呢?

难道存在两个流程图文件,分别提供给UI使用,或是给jbpm使用
12 楼 上杉t 2007-05-25  
呵呵,虽然流程图中不能注明什么任务应该有什么转向可供选择
你可以在页面表现上写好。审核员工请假的任务有撤销,和结束两个转向,而撤回请假单有撤销一个转向。完全可以。我的流程任务是可以挂模板页面的。我想你说的那种是不需要模板页面的情况了。所有任务是一个页面了。
如果使用fork,join会很麻烦的,而且客户定制时会很不理解。我最早也这样。
11 楼 oisiv 2007-05-24  
转向是个严重问题,因为jpdl还是不很完善,所以在流程图声明文件里无法注明:什么任务应该有什么转向可供选择。

如上面的的例子中,互斥任务中的“撤销”转向,仅仅只提供给申请人使用,而"结束"和"修改" 就提供给另外的任务使用。那么在程序中将如何挑选这些不同转向给互斥任务分别使用呢。我觉得上面的流程设计就很困难了。

后来在自己的项目中,为了解决互斥问题,就采用了fork,join,将互斥任务放在不同的分支,及不同的节点上,然后在节点上放入任务对应的转向。这样在UI上,就可根据任务的id得到可到达的转向了。

采用fork,join後,又有个重要问题出现了,不同分支是互斥的,当某个分支到达join後,将继续向下执行,目地达到了。但其他分支上的任务并没有结束。所以只好在不同分支的任务上,设立node-leave事件action,触发执行一个类,主动结束其他分支上创建的任务,以及分支Token。(Token要先于任务进行结束动作,不然,当结束任务时,会继续执行到下一节点。)

10 楼 microsoftwxj 2007-04-27  
请教一下:task-node节点上怎样实现不同的转向的呢?
也就是在  task-node name="审核" 中怎么样转向不同的
transition name="结束" 
transition name="撤销"
transition name="修改"


9 楼 上杉t 2007-03-16  
看了你的留言我感觉是不是我们“动态创建Task”这个实现方式不一样.所以我在两点上和你交流一下
第一:我在做动态创建Task时(也是为了实现会签)task-node节点中只有一个任务,别且转入这个节点时不是流程创建的任务,是由node-enter事件的action类完成了创建n个相同的任务给不同的人.这个不知和你是否一样.
第二:我没有取消会签的任务(我看你的留言好像意思是有个取消会签的任务).如果需要这个任务我觉的这个任务应该单独有个事件action类.在这个类里面不但要task.end() 还要processInstance.signal("回退") 这样节点就流转了 至于其他会签任务 end-tasks="true" 在离开节点时,所有打开的任务将被结束.
    对于第二点我没有试验过.
8 楼 tomkoo 2007-03-16  

对没错,使用动态创建Task的时候是设置signal="last-wait",让所有的TaskInstance都完成了再到下一步。

但是在“会签”中,只要上一步任务一提交,会签的N个TaskInstance就已经创建,包括用来取消提交任务的TaskInstrance。这个时候,如果我们撤销提交,本来应该回到前一个节点,但是由于我们设置的是signal="last-wait",所以并不能像我们预期的一样,回到上一个节点。
7 楼 上杉t 2007-03-15  
task-node节点的默认设置是完成所有任务才流转.所以不用设置signal="first" end-tasks="true" 就不会你有担心的问题了.
signal属性可选值:
   last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
   last-wait:当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
   first:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
   first-wait:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
  unsynchronized:总是继续执行,不管任务是否创建和完成。
  never:执行不再继续,不管任务是否创建和完成。

其实我认为“动态创建Task”时应该设signal="last-wait" 因为这样就不会多创建一个多余的没有参与者的任务了(进入task-node会创建一个任务,但这个时候还没参与者)
6 楼 tomkoo 2007-03-15  
突然想到一个问题,就是当我们流程中有“会签”的时候,而且这个会签是基于“动态创建Task”来实现的,这个时候需要完成所有的TaskInstance才能流转到下一个节点。这个时候这个实现方法似乎有点问题。可能要变通一下才可以行得通。
5 楼 tomkoo 2007-03-15  
上杉t 老兄,这个思路真的很好!     ;我也在这个问题上思考了很久的时间,后来基本上也是适用前一种方法来实现,感觉就是一个字“不爽”(好像是两个字 ),流程很复杂!今天看到你这个帖子才茅舍顿开。哈哈。好铁,是我们圈子难得的好贴!!!!!!
4 楼 SilenceCliff 2007-03-14  
对template="apply_4.ftl这个比较干兴趣。

不知道是否用springmodules整合过jbpm spring hibernate

如有 可否 谈谈看法?
3 楼 whzresponse 2007-03-14  
楼主能不能把java代码也帖出来阿!

相关推荐

    电力系统中基于MATLAB的价格型需求响应与电价弹性矩阵优化

    内容概要:本文详细介绍了如何利用MATLAB进行价格型需求响应的研究,特别是电价弹性矩阵的构建与优化。文章首先解释了电价弹性矩阵的概念及其重要性,接着展示了如何通过MATLAB代码实现弹性矩阵的初始化、负荷变化量的计算以及优化方法。文中还讨论了如何通过非线性约束和目标函数最小化峰谷差,确保用户用电舒适度的同时实现负荷的有效调节。此外,文章提供了具体的代码实例,包括原始负荷曲线与优化后负荷曲线的对比图,以及基于历史数据的参数优化方法。 适合人群:从事电力系统优化、能源管理及相关领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解并掌握价格型需求响应机制的专业人士,旨在帮助他们更好地理解和应用电价弹性矩阵,优化电力系统的负荷分布,提高能源利用效率。 其他说明:文章强调了实际应用中的注意事项,如弹性矩阵的动态校准和用户价格敏感度的滞后效应,提供了实用的技术细节和实践经验。

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    表5 文献综述.doc

    表5 文献综述.doc

    36W低压输入正激电源, 正激变压器设计方法步骤及谐振电感的设计方法,主要讲诉了正激电源变压器测的输入输出参数,按输入的条件设计相关的变压器的参数,同时将输出电感的设计方法一并例出,详细的设计步骤

    36W低压输入正激电源 变压器电感设计

    基于YOLOv8的深度学习课堂行为检测系统源码(含检测图片和视频)

    基于YOLOv8的深度学习课堂行为检测系统源码,软件开发环境python3.9,系统界面开发pyqt5。在使用前安装python3.9,并安装软件所需的依赖库,直接运行MainProgram.py文件即可打开程序。模型训练时,将train,val数据集的绝对路径改为自己项目数据集的绝对路径,运行train.py文件即可开始进行模型训练,内含项目文件说明,以及检测图片和视频。

    odbc-oracle zabbix模版原版

    odbc_oracle zabbix模版原版

    基于纳什谈判理论的风光氢多主体能源系统合作运行方法——综合能源交易与优化模型

    内容概要:本文探讨了利用纳什谈判理论来优化风光氢多主体能源系统的合作运行方法。通过MATLAB代码实现了一个复杂的优化模型,解决了风电、光伏和氢能之间的合作问题。文中详细介绍了ADMM(交替方向乘子法)框架的应用,包括联盟效益最大化和收益分配谈判两个子任务。此外,还涉及了加权残差计算、目标函数构造、可视化工具以及多种博弈模式的对比等功能模块。实验结果显示,合作模式下系统总成本显著降低,氢能利用率大幅提升。 适合人群:从事能源系统研究的专业人士、对博弈论及其应用感兴趣的学者和技术人员。 使用场景及目标:适用于需要优化多主体能源系统合作运行的场合,如工业园区、电网公司等。主要目标是提高能源利用效率,降低成本,增强系统的灵活性和稳定性。 其他说明:代码中包含了丰富的可视化工具,能够帮助研究人员更好地理解和展示谈判过程及结果。同时,提供了多种博弈模式的对比功能,便于进行性能评估和方案选择。

    C#与Halcon联合编程实现高效视觉几何定位与测量框架

    内容概要:本文详细介绍了如何利用C#与Halcon联合编程构建高效的视觉几何定位与测量框架。主要内容涵盖模板创建与匹配、圆测量、数据持久化以及图像采集等方面的技术细节。首先,通过创建形状模板并进行匹配,实现了工件的精确定位。接着,针对圆形物体的测量,提出了动态ROI绘制、亚像素边缘提取和稳健圆拟合的方法。此外,还讨论了模板管理和图像采集的最佳实践,确保系统的稳定性和高效性。最后,强调了Halcon对象的内存管理和错误处理机制,提供了实用的优化建议。 适合人群:具备一定编程基础,尤其是对C#和Halcon有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于工业生产线上的自动化检测设备开发,旨在提高工件定位和尺寸测量的精度与效率。主要目标是帮助开发者掌握C#与Halcon联合编程的具体实现方法,从而构建稳定可靠的视觉检测系统。 其他说明:文中提供了大量实战代码片段和调试技巧,有助于读者快速理解和应用相关技术。同时,作者分享了许多实际项目中的经验和教训,使读者能够避开常见陷阱,提升开发效率。

    QT6 C++视频播放器实现(基于QGraphicsVideo)

    QT视频播放器实现(基于QGraphicsView)

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    机器学习(预测模型):专注于 2024 年出现的漏洞(CVE)信息数据集

    该是一个在 Kaggle 上发布的数据集,专注于 2024 年出现的漏洞(CVE)信息。以下是关于该数据集的详细介绍:该数据集收集了 2024 年记录在案的各类漏洞信息,涵盖了漏洞的利用方式(Exploits)、通用漏洞评分系统(CVSS)评分以及受影响的操作系统(OS)。通过整合这些信息,研究人员和安全专家可以全面了解每个漏洞的潜在威胁、影响范围以及可能的攻击途径。数据主要来源于权威的漏洞信息平台,如美国国家漏洞数据库(NVD)等。这些数据经过整理和筛选后被纳入数据集,确保了信息的准确性和可靠性。数据集特点:全面性:涵盖了多种操作系统(如 Windows、Linux、Android 等)的漏洞信息,反映了不同平台的安全状况。实用性:CVSS 评分提供了漏洞严重程度的量化指标,帮助用户快速评估漏洞的优先级。同时,漏洞利用信息(Exploits)为安全研究人员提供了攻击者可能的攻击手段,有助于提前制定防御策略。时效性:专注于 2024 年的漏洞数据,反映了当前网络安全领域面临的新挑战和新趋势。该数据集可用于多种研究和实践场景: 安全研究:研究人员可以利用该数据集分析漏洞的分布规律、攻击趋势以及不同操作系统之间的安全差异,为网络安全防护提供理论支持。 机器学习与数据分析:数据集中的结构化信息适合用于机器学习模型的训练,例如预测漏洞的 CVSS 评分、识别潜在的高危漏洞等。 企业安全评估:企业安全团队可以参考该数据集中的漏洞信息,结合自身系统的实际情况,进行安全评估和漏洞修复计划的制定。

    QML Combobox 自动过滤,输入字符串后自动匹配

    博客主页:https://blog.csdn.net/luoyayun361 QML ComboBox控件,输入关键字后自动过滤包含关键字的列表,方便快速查找列表项

    【人工智能领域】人工智能技术发展历程、核心原理及应用指南:涵盖机器学习、深度学习、NLP和计算机视觉的全面介绍

    内容概要:本文全面介绍了人工智能技术的发展历程、核心技术原理、应用方法及其未来趋势。首先阐述了人工智能的定义和核心目标,随后按时间顺序回顾了其从萌芽到爆发的五个发展阶段。接着详细讲解了机器学习、深度学习、自然语言处理和计算机视觉等核心技术原理,并介绍了使用现成AI服务和开发自定义AI模型的应用方法。此外,还展示了智能客服系统、图像分类应用和智能推荐系统的具体实现案例。针对普通用户,提供了使用大模型的指南和提问技巧,强调了隐私保护、信息验证等注意事项。最后展望了多模态AI、可解释AI等未来发展方向,并推荐了相关学习资源。; 适合人群:对人工智能感兴趣的初学者、技术人员以及希望了解AI技术应用的普通大众。; 使用场景及目标:①帮助初学者快速了解AI的基本概念和发展脉络;②为技术人员提供核心技术原理和应用方法的参考;③指导普通用户如何有效地使用大模型进行日常查询和任务处理。; 其他说明:本文不仅涵盖了AI技术的基础知识,还提供了丰富的实际应用案例和实用技巧,旨在帮助读者全面理解人工智能技术,并能在实际工作中加以应用。同时提醒读者关注AI伦理和版权问题,确保安全合法地使用AI工具。

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解。

    基于智慧图书馆基础业务流程Axure11高保真原型设计

    本项目致力于构建基于微服务架构的智慧图书馆管理平台,重点突破多校区图书馆异构系统间的数据壁垒。通过建立统一数据治理规范、部署智能分析模块、重构业务流程引擎,系统性实现以下建设目标:构建跨馆业务数据的标准化整合通道,实施容器化部署的弹性资源管理体系,开发具备机器学习能力的业务辅助决策系统,打造可量化评估的管理效能提升模型,最终形成支持PB级数据处理的分布式存储体系与全维度数据资产图谱。

    mysql中慢sql分析

    根据processlist查询出慢sql 1.修改配置文件中的mysql链接 2.目前是15秒执行一次获取执行时间在5秒上的sql,可以在配置中修改 3.执行后查出的慢sql会记录到log文件夹中以日期命名的txt文件中,可自行查验

    全域通航 低空经济服务平台建设实施方案.pptx

    全域通航 低空经济服务平台建设实施方案.pptx

    全国联合交通查询手册,涵盖各大城市

    全国交通一卡通互联互通服务手册,支持在线查询

    电力电子中移相全桥DC-DC变换器的Simulink离散化建模与优化

    内容概要:本文详细介绍了如何在Simulink中进行移相全桥DC-DC变换器的离散化建模及其优化。主要内容包括搭建主电路、PWM波形生成、数字PI调节器的设计以及针对负载突变情况下的闭环控制优化。文中特别强调了移相控制、死区时间设置、采样周期选择、积分限幅、前馈补偿等关键技术点的应用,确保在极端负载条件下(如从3kW突变为3.6W)输出电压仍能保持稳定。此外,作者还分享了许多实践经验,如避免非线性磁化曲线带来的数值振荡、合理设置仿真步长等。 适合人群:从事电力电子研究或开发的技术人员,尤其是对移相全桥变换器感兴趣的研究者和技术爱好者。 使用场景及目标:适用于需要深入了解移相全桥DC-DC变换器工作原理及其在Simulink环境下的离散化建模和优化的人群。目标是掌握如何通过合理的参数设定和算法改进,使系统能够在复杂工况下保持良好的性能。 其他说明:文中提供了大量具体的Matlab/Simulink代码片段,帮助读者更好地理解和实践相关概念。同时,作者也指出了许多常见的陷阱和注意事项,有助于初学者少走弯路。

    西门子S7-1200 PLC污水处理项目的博途V17程序设计与优化

    内容概要:本文详细介绍了西门子S7-1200 PLC在污水处理项目中的应用,涵盖模拟量处理、设备轮换、Modbus通讯控制以及事件记录等多个方面。具体包括:使用4-20mA超声波传感器进行液位检测并采用滑动窗口滤波法处理信号,确保液位波动控制在±2cm以内;通过SCL代码实现两组提升泵的智能轮换,避免长时间连续运行带来的设备损耗;利用Modbus TCP和RTU协议对变频器进行精确控制,确保鼓风机和其他设备的稳定运行;采用ALARM_S函数和循环存储队列实现高效的报警管理和事件记录。此外,文中还分享了许多实际操作中的经验和技巧,如硬件滤波与软件校验结合、防止设备同时启动的延时机制等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉西门子PLC编程和博途软件使用的专业人士。 使用场景及目标:适用于污水处理厂或其他类似工业环境中,旨在提高PLC系统的稳定性和可靠性,减少维护成本,延长设备使用寿命。通过对文中提供的代码片段和实践经验的学习,可以帮助工程师更好地理解和掌握PLC编程技巧,从而应用于实际工程项目中。 其他说明:文中不仅提供了具体的编程实例,还分享了很多宝贵的实战经验,如如何处理传感器异常、优化通讯协议配置等。这些内容对于初学者来说是非常宝贵的知识财富,能够帮助他们快速成长并在工作中游刃有余。

Global site tag (gtag.js) - Google Analytics