00:00
各位同学大家好,下面呢,我们继续往下来实现,咱们来实现审批管理模块,在这个模块中呢,我们主要要完成哪些功能,给大家做个介绍,各位注意啊,在前面呢,咱们已经准备好了审批需要的相关的数据,包括审批类型,审批模板,咱们应该都已经做到了,那下面咱要做什么呢?是不是要完成我们这个审批流程的定义,包括启动审批由以及管理审批理由来完成具体的审批的过程,那这个过程中呢,咱们先完成管理端的操作,最终在完成我们的员工端的内容。那下面呢,咱看管理端要做什么事情,首先啊,我们做第一部分在管理端呢,咱来进行查询,查询当前这个审批的相关操作,比如说大家看我这个图里边啊,比如现在这个标题是李四发起申请费用的申请,然后用户是李四,类型是财务模板是申请费用等等,当前状态是审批中,咱把当前这个审批的相关流程的信息在里边进行查询。
01:11
这个过程中呢,我们要查询的是我们的这张表,大家看一下啊。在我们数据库里有一个表叫OV,每次完成审批操作过程中,都会向列表中进行数据的记录,包括添加,包括更新等内容,所以咱就来查询这张表,完成我们这个审批这个列表的功能,这个功能中做的是一个条件分页查询功能,那咱们一会儿进行实现。然后这个表我们看一下啊,表里边有很多相关的这个字段,第一个ID,第二个叫审批这个编号,或者叫审扣,比如说现在我这个审批编号是这么一个值,然后看下一个啊,它叫用户ID什么意思,就当前我的用户是哪个用户,比如是李四还是王五,还是赵六等等。
02:02
但是这里边存ID,要根据ID把它的名称道,然后下一个是审批模板ID,就是咱前面做那个添加审批模板,我这里边有对应的ID,咱同样要把它的名称给他得到,比如说ID是一啊,它是申请费用,ID是二是加班等等。然后下一个叫审批类型ID,咱们是人事,是出差还是其他,以及标题描述等其他内容,这个啊是我们看的这个表,那咱一会儿通过条件分页查询,把表中数据得到,最终完成一个审批的列表功能,这是咱们马上做到的啊,然后这个做到之后,咱后面足够完善,完善什么呢?就是咱刚才啊做那个发布的时候。我们是不是要部署流程定义,刚才只写了一个结构,那咱一会儿开始完成这个部署,我们就通过这个压缩包的方式把这流程定义,最终完成部署,就是进行这个发布。
03:04
这个啊是咱们马上要做的过程,然后这个之后,后面我们就会在这个员工端完成具体的审批过程,咱们会整合微信公众号,把里面做到,比如说这个OA审批啊,包括里边开发接口,然后整合前端,最终进行实现,那下面呢,咱先完成管理员的操作。那这个操作中呢,首先啊,这个表我们已经创建过了,如果说你没有创建到资料中,把那个界标语句在这里边执行,把这个叫OA process这个表完成创建里边记住当前这个审批流的这个相关的操作。包括里边啊有这些值,那下面呢,咱们开始写一下功能,首先啊,我们先编写相关的接口,这个接口里面呢,们样把它相关的类创建出来,包括service。等内容。那咱们来写一下啊,我在这个位置呢,我们找到这个代码生成器,咱们通过代码生成器给它来生成下。
04:08
我们找到啊,在这个位置。首先啊,我们看到第一部分是咱这个路径应该不需要发生变化,然后下面是数据库也是固定的,这里边有咱的的这个位置,咱们看到啊。都是我们之前一样的啊,然后下面有咱们相关的表,这个表我们需要改一下,改成这个O。这里边啊,我们这个修改,所以现在代码生成器我们就改完了,改完之后把它执行,咱们先生成相关代码,然后在里边再来开发接口。等他定行出来啊。然后现在完成,完成之后咱们看一下啊,这个相关的类应该出来了,包括control实体类,咱们还是用这个model中统一的这个实体类。
05:06
那这里边啊,我给他改一下啊。首先改一下这个service啊,我们叫这个。被告。这个位置啊,给他。改一下。改成这个就是。Process啊,包括啊咱们看一下啊。Process。这个位置啊,应该不是这个,咱们找到我们这个model中那个。这个世界类的名字啊,咱们看一下。应该是里边的这个process,那咱们啊,把他的这个包的路径这套加到这里边来,给它直接啊加过来。点上这个。就这个啊,这是我们目前用的这个类啊,然后这个之后我们找到service这个实现类,应该是在这位置,把这个给它也是改一下。
06:09
改成model中的这个位置啊。然后呢,我们再改这个map。里边把这个也最终给他。改一下。所以咱们啊,到这里把这个相关类应该就完成了啊,这要特别明确啊,就里边那个相关这些特点。然后这个完成之后,下面呢,我们在里边开始开发这个相关的接口部分,那大来写一下啊,这个接口部分呢,刚才咱们看到因为我们表里的ID括户ID,审批ID这个ID,所以要根据ID的名称给它到这个过程呢,有多种实验方式,咱们目前我就通过一个S语句把它做到,你不写语句我们一个查也能实现啊,但这里边因有多个都需要查,所以咱们就用一条语句把这实现完成一个条件分页查询这功能。
07:12
那下面啊,我们来写一下,先来到CR里边,在CTR里边呢,我们把它的路径跟课件中保持一致,咱们叫做in process。路径一致之后,在里边把service注入进来。我们加上啊OA。Service。这是我们做的注入,然后注入之后下面加上我们的第一个方法,就是审批管理中的这个列表方法,我们给他加上啊。前面部分我就直接复制了啊,然后里边的内容咱们详细来写一下。大家啊,看这部分啊,首先我们用get提交传入当前页和每页记录数,然后在里边呢,加上它相关的这个参数,首先第一个获取到这个当前页,就这个类型的配置。
08:08
第二个得到每页显示的记录数啊,就是里边那个。然后注意还有第三个啊,第三个我们这个对象query view作为我们的对象,然后你看里面啊,有关键字用户ID啊,什么模板ID,类型ID等等,根据它咱们一会就查询。所以现在啊,这个结构咱就完成了,完成之后呢,下面我们开始写这个具体代码,这个代码怎么做呢?因为咱要用到这个map部分,按照我们之前的结构啊,在TRL里边,咱们同样一个配置对象。然后调用思维中的方法。在surface里边调,最终进行实现,那咱们来写一下啊。
09:01
我加上一个配置。加上这个,呃,注意啊,不要错啊,咱们这个model中的加上配置等于上一个。配置。在配置里边传入当前页和每月记录数,这是第一部分,然后第二部分调用中的方法,我这里边写个方法啊,就叫配置。然后在里边这个。相关的这个参数啊,一个是配置拍,一个是条件这个对象,最终呢,让他返回一个I配置这个对象。加上啊,咱们这个泛型。我们叫配置。Model。所以现在啊,这个完成完成之后,最后咱们把它做一个理退。
10:00
退result.ok传入配置报道。所以现在啊,CTRL部分我们就完成。我写个注释啊,审批管理列表。然后这个之后,我们在里边把这方法咱们给它创建出来。这是方法啊,再来到实现类中,我们实现这个具体方法。然后实现类中怎么做呢?咱们调用map中的方法进行实现,我在里边啊调一下,当然这个map调的过程咱之前讲过啊,我们可以直接用这个base是可以的,或者说啊,你把那给它注入进来,一样可以做到,就用这个base啊,我加上一个。配置。啊配置,然后在里边的入我们的参数啊,第一个参数传入配置,第二个入我里边这个对象就是query。
11:07
最终啊,让他返回还是我们这个对象I配置。我们叫配置。报道。然后最终啊,给它加上一个铝退。当然我们这么写呢,大家发现啊,这里边出了一个错误,因为在map里边,它这方法里边不是这样的参数,所以咱们怎么做呢?咱们这么来做啊,给大家一种写法,咱们现在啊来到找到里的分,看这里法啊,然后咱们看到这位置这里写到啊我们可以自定义map和方法使用分页,那怎么做呢?首先我们写上一个方法,注意这里边啊,我们加上一个的这个对象,VO对象中有咱们出来的最后的参数,所以我们现在用这种方式加个VO这个对象,然后在里边传入配置对象,传入条件,最终写语句,完语之后它能实现条件分析查询,把查询数据复装到这里边去啊,所以咱们按照这个。
12:13
就是买plus官网上提供的方式进行实现,我们也这么来做啊,那那给它改一下,首先第一个啊,把这位置给他改一下,改成这个叫process view。大家看啊呢,我把这依先引入这我们已经写好一个类,然后里边有相关内,主要看这么几个啊,你发现啊有什么,是不是有用户名称,模板名称,类型名称,咱往里边封装数据更加方便,把它改成这个VO。啊,这个咱给他特别改一下啊,然后改完之后在service里边把这个位置也给它改一下。改完之后来到它的实现类中,这个咱们最终完成修改啊,最终返回是这个VO。
13:02
把这个我们给它做到。这是我们写的啊,这么一个基本的一个结构。这个完之后呢,咱们来到这个map,我们来创建下这个方法,然后最终们写语,就是按照my business plus里边的官方的这种方式进行实现,咱们入对象,然后里边传入对应的参数,包括条件,最终编写语句定事件,语句终咱就加一个条件查询部分,这里边给咱附装好的这个分页部分。那咱们写一下啊,在里边我们把这个方法咱们做一个定义。然后大家看这方法select配置啊,里边有这个相关的这个内容,所以现在啊,这一部分我们就完成了,然后完成之后呢,为了咱一会儿操作方便,我在这个map的方法这里边的参数位置,我们给它加上一个参数。
14:00
注意这个参数啊,然后一个注解叫里边起个名字,后面咱们在那个L映射文件中取值,通过VO这个名字可以取到,这各位要特别清楚啊,这属于买杯子中的基础部分。那咱们给它加一下啊艾。拍着我。然后里边起个名字叫啊,当然叫叫AB这个,所以啊,这个map部分我们就完成了,我在这里边啊,给它加上注释。然后map完成之后,最后呢,咱就来编写它的SQL语句,通过语句最终就实现咱们啊找到这语句应该在这个位置。把语句打开,打开之后检查一下啊,这个路径肯定要正确,然后检查之后在里边我们写一下具体部分,那怎么做?首先加上一个标签,标签在此类中的ID位置加上我们这个方法的名字,咱们的名字叫配置。
15:09
把这个加上啊,然后加上之后在里边呢,加上一个返回类型,就是咱这个VO。我加到这个位置啊。造。太保。返回类型就是咱刚才这个V,它的这个类路径也就这个。把这个拿过来啊,然后拿回来之后里边呢,就开始编写这个circle语句了,这个语句呢,因为里边是一道条件,根据我们之前讲过的啊,这个条件值可能为空,也可能不为空,咱要对条件值进行判断,在这个拆完了文件中要用到什么。是不是这个动态口进实现判断是不等于空,不等于空,我们加上条件进行拼接,等于空我们就不加条件,那这里边啊,我把这个给大家写一下这个circle语句,这个语句呢,我先这么来做啊,我先在这个编辑器中把语先写完,测试成功,然后再复制到咱那个文件中再进行修改,那咱们下面啊,就来写下这个基本的语句。
16:16
咱们看怎么来做啊。各位注意啊,这个语呢肯定是这个OA这个表,但是这个表中的数呢,只是有这个ID,所以咱们要做一个什么,是不是数据关联关联咱要注意关联什么,第一个用户ID要关联谁,是不是用户表,你的模板ID关联模板表类型ID关联类型表,所以里边涉及到的表应该是有这个OA process关联用户表,关联模板表,关联类型表,一共应该是有这个四张表的一个关联场景操作。那咱们这里边啊,给他来写一下这个操作。我在里边。
17:01
然后这位置啊。咱们啊加上一个,我为了方便啊,就先写个星号。From加上第一个表。OA。然后在里边进行关联啊,关联的话呢,我们用这个叫啊阻碍连接关联,第一个关联先关联那个用户表就是它。然后关联过程中加上它的关联条件,点上这个UID等于u.ID用ID行关联,然后继续关联。咱们看一下啊,Op里边应该有一个ID,就咱说那个模板ID根据要做有关联,那怎么关联呢?关联咱们的这个表。OA。汤姆。加上关联条件啊,就是用这个。
18:01
ID。里边的ID,除此之外,咱们继续关联谁是那个类型啊,因为有类型ID。然后咱们看一下啊,加上op ID。等于这个叫OP2。点上这个ID。所以现在啊,我们就完成里边这个关联的部分,通过这几张表完成了关联查询,咱们把它执行下。大家看啊,这里边啊,它出了一个问题,咱看哪里写错了啊,其实我们说这个OPR没这个东西啊,未知啊,应该这个名字我叫OT啊,少了一个T啊给它加上。咱们再进行执行。大家看是不是查到里面的相关的数据啊,这个咱们写了一个最基本的关联查询的这个语句啊,这做到了,然后做到之后咱们把语句复制过来给它改一下啊,就按照这个改一下,因为有些字段我就不敲了,我就把这复制了啊,咱们写的时候肯定不建议写星号,我这里边啊给它加上相关的字段。
19:13
我把这个拿过来啊,在里边咱给他改一下啊。这个位置不要写星号啊。首先啊,这里边有它的相关的这个内容啊,咱们看一下啊。呃,这一行应该写的都是这个A,呃,A的话呢,如果在要下面改的话,它就不方便啊,因为A表示应该是我们这个process部分啊,所以这里改成。这个位置改一下啊。这是A。你看这么改是不是更方便一点啊,然后第二个是这个B啊,这是那个模板的那个名称,把它最后修改,那这B呢,应该是我们的这个表啊,咱改成B。
20:00
这里啊。改一下就是那个模块名称,第三个是那个类型名称是C,也就是这个。咱们把它改成C。还有最后一个D,就是那个用户啊,也就是他。加上D。ID现在就可以了啊,就是一个别名问题啊,这各位应该都能改出来啊。然后现在把这个执行效果是对的啊,这个基础的语句部分我们就完成,完成之后咱们把它复制到我们这个叉买lo映射文件中写的一段最技术语句。然后这个语句写完之后,这个并没有写完啊,咱下面要怎么做,是不是加上它那个条件,因为咱们有这个VO条件值可能为空,也可能不为空,我们在里边要加上条件,条件呢,这里边要用到就是叉lo中写的一个动态色口镜事件,那咱们啊给他来写一下这个动态色口。
21:01
我在里边给我实现啊这个位置。我就以一个为例啊,然后其他部分我就复制了,因为写法都是类似的啊,咱们加上一个where,然后加上if。在里边加上T的首先啊,我们先判断第一个就是里边这个啊,咱看那个属性啊,找的那个view。看啊,第一个属性叫keyword,先根据它我们做一个判断,那我写到这位置啊,就是VO点上keyword,如果说它就是不等于空,并且Vo.keyword它也不等于空字符串,这个时候表示这里边有值,那咱们开始做这封装,这个怎么做写到下面啊。我们加上一个按。然后大家看啊,这里边有一个特点,看这位置,咱们可以查审批编号标题,手机号或者姓名啊这么多,其实写法一样,我就以两个为例,我们写一下啊,比如第一个我写一个这个审批编号。
22:14
加上这个位置啊,加上一个编号。就是在里边找到那个啊,在这里啊。A点。个做一个关联啊,我在里边给他也拿过来啊。就做一个关联的部分,Contact。把这个给它加上,所以现在啊,你看这部分啊,根据这个编号,我们通过它做一个某查询,就是前后百分号,当然过程中呢,它里面可能还有别的值,所以咱继续再加,因为他们关系就是你可以根据审批编号查,可以根据手机号查,或者根据别的查,所以他们的关系应该是一个。
23:05
O的关系。什么关系,是不是或者要么他查到,要么他查到,或者别的查到,写法跟这应该都一样,只是说改了一个字段而已。那咱们比如说我们再写一个啊,咱就写这个叫title啊,用这个来查一下。这个拿过来啊,我就放到。呃,这个位置。Title大家看啊,我现在查的话就是根据这个编号模糊查询,根据这个title标题模查询,当然里边可能还有其他值,你可以再加O再进行查询啊,咱就以它为例,我在里边给它加上啊,这是我们写到第一部分,这要明确啊,慷表示字符串的这个就是连接我们前后加百号,中间用号大括号取到里面这个keywor的这个条件值。这是第一个这个动态circle考,然后下面的写法跟上面应该说一模一样啊,没有啥区别,我就把这个复制出来啊,就这个直接拿过来啊,我们看一下啊,因为之前这个咱应该也写过啊。
24:13
咱们放到这里,然后大家看啊,第二个判断什么右赛D啊,根据他查询,第三个判断它的状态,然后这里边有一个开始和结束时间,在这里边大家看啊,大于等于开始时间,小于等于结束时间,但是因为这个小于,如果说你直接这么写,它里面是。有问题的,因为它这符号啊,它会做一个符号这么一个问题,所以把它需要做一个转改成这个按的符号LT分号就可以了,这是我们做到这个效果啊,所以以上这个最基础的语句我们就完成了用到了。买贝中的动态做了判断,然后用到了多表的关联查询。这个咱们就讲到这里啊,然后写到这里之后呢,咱们目前这个接口应该就完成了啊,把接口最终做到了,然后返回了条件分页查询中的相关的数据。
25:14
我们呢,完成审批管理列表接口之后呢,下面咱们快速把前端整合出来,然后最终完成测试,那咱下面啊快速看一下前端,首先啊,前端里边我们这位置先建个文件夹叫,然后在process里边我们建一个JS文件,就叫点JS,那我现在啊在这里边做创建。在这个位置建一个把咱们刚才的接口在里边进行定义,就是我们这个。列表的接口啊,咱们在这个位置。条件分页查询,加入相关参数,注意这些啊,不要加错,然后之后呢,我们下一个操作创建咱们这个页面。咱们来创建啊,在waves里边的页面做一个简。
26:07
我们说这个审批管理啊,就是manager啊这个管理。咱们进行创建啊,来到这里边这个S里边我们创建文件夹。Process啊,这是我做一个创建,然后创建之后呢,在里边我们建一个文件夹,叫里建个页面点。继续创建啊。然后建一个页面。list.wave现在完成,完成之后呢,在页面中我们就直接复制相关这个内容,把它直接拿回来就可以了,然后特别检查一下啊,这个路径不要写错,因为刚才我都是复制的这径应该基本上是一致的啊,现在就完成了,完成之后呢,咱们把这服务器给它都启动一下啊,然后最终完成测试,就测试一下我们目前写这个审批管理的列表功能。
27:06
当他请起,然后咱们测试。啊,各位看啊,现在已经完成启动了,然后咱们来到页面中做个测试,点击审批管理,然后点击审批列表,大家看最终结果,咱们发现啊,这里边是不是出现了异常了,那咱看一下什么异常,我们来到这里边啊,看一下我们这控制台中,大家发现就有异常了,然后这异常呢,其实它提示不是特别明确,但是这个咱应该见过,就是买杯这中建了一个叫帮顶这个异常,然后他说这个参数啊,什么E不到,咱们里边好像没有什么E,那看一下这问题到底是怎么造成的啊,给大家做个说明。咱们之前曾经讲过这个特点啊,我们这个may问在加载过程中,默认情况下有一个特点,它只会加载你这个SC里这个va类文件会进行加载,咱们之前呢,虽然做了配置,但有一个地方,但配置了这里边需要做个修改什么地方大家来看啊,在我这个配置文件中,我们看这个位置。
28:18
大家看这里。这么来看啊。Map locations这是加一个,但咱们目前插是不是这个,我们这个置该叫。而不是后面结构,但这个不一样,所以需要把改一下,那怎么改简单,我个号是不就是com,这里边是一层件,后面加上点样的话应该就可以了,它就能够找到你差不多的文件,要不然它里边是找不到的,注意这个路径啊,我们现在改了包路径就不对了,需要给他改一下。
29:01
然后改完之后,我把这个再重新启动一下,我们最终再做个测试,看一下审批管理的列表功能。等他啊,启起来。然后这个啊,启动之后,咱们现在啊,来到我们这个页面中,在页面中我现在重新进行访问。访问这个审批列表,大家看效果是不是就出来了,现在有我们的计算数据啊,但这个数据是我手动加的啊,比如说第一个编号有标题,用户名称,审批类型,审批模板状态是不是全有,这是我们最终完成这个效果。包括比如咱们是一个啊,我根据审批编号查询,我输入一个100,然后点查询。是不是查到?所以现在啊,咱看到这个效果就完成了,这是我们完成这个列表功能的实现。
我来说两句