00:00
前面我们创建了两个采购需求,那接下来呢,我们需要将这两个采集购需求合并成一个采购单,那这个整个逻辑呢是这样子的,我们这采购流程,无论是人工创建的这个采购需求,还是由于我们库存预警自动化创建的这个需求,最终呢,我们可以去合并成一个采购单,当然我们可以在后台人工合并,或者呢,我们系统有定时任务来帮我们定时合并,合并成这个采购单以后呢,我们要将采购单分配给某一个采购人员,这个采购人员呢,可以通知供货商给我们来提供货,或者他自主出去来进行采购,那采购完成以后呢,我们这个采购单就可以入库了,那一入库以后,我们采购单里边成功采购的项目才会为他添加库存,那我们现在就来做合并采购单这一项,那首先要合并采购单,我们需要选中他们,我来点击一个合并采购单,那这块列出的就是我们可以合并到哪个采购单里边那。
01:00
前提就是我们这得先有一个采购单,所以我们可以在这儿先新增一个采购单,但这一块的整个功能我们暂时就先用它逆向生成好的,大家只需要输一个数据,比如这个优先级是一,我点一个确定。那我们这儿就有一个采购单,那接下来如果我们在这儿要合并的话,我们在这儿点一个合并整单,那这一块就需要查出这些采购单,而且查出的是哪些呢?查出的是我们这些所有新建了的,其实他没有被别人领取了的采购单,而一旦先给某一个人分配了,而且这个人领取了采购单,说明他出发了,那这个采购单就已经固定了,我们就不能给这个采购单里边再添新内容了,所以我们现在呢,只来查询新建的和已分配的这两种状态的采购单,所以我们在这弹框的第一个效果,我们F12,我们在这要合并采购需求的时候,我来选中我点一个合并整单,那他会发第一个请求,第一个请求呢,叫我们这个UN receive on receive,没有接收的咱们这个采购单,那按照接口文档,那这有一个合并采购需求,这有一个查询未领取的采购单。
02:14
好,我们来编写这个业务,来到purchase controller里边,我们来找一个这个UN list。来写一个这个功能,我把这个呢复制过来,我们现在呢,想要获取所有未领取的这个采购单,包括请求路径,那也是这样子的,然后发的这个请求,这一块也是一个封页请求,所以我们把这一块。直接enter palm来获取这个数据就行了,我们corry page,我们就叫corry page,我们这个UN received UN receive没有领取的这些采购单,好,我们来查询这个方法。那创建出这个方法,然后呢,我们来添加上它的这个实现。那这个分页查询呢,跟前面都一样,我把这个前面直接拿过来,只是它的这个查询条件不一样,我们要查未领取的这些采购单,那它必须拥有一个这个状态点ES,我们来查询它的这个状态,状态是什么呢?我们在这里边每一个采购单都有一个status,好,我们把它复制过来,它的这个status呢,必须是零或者是一,所以说我O一下,O一下我们这个E口,我们这个状态是一,只要是零一这两个状态,那说明这个采购单刚新建,或者呢,这个采购单刚分配给某一个人,这个人还没有领取出发,所以我们就可以来要,那我们就查询这两个状态的采购单,那查出来以后,我们在这就可以进行展示了,好,我现在来重启一下我们这个库存业务。
03:49
把它重启一下。接下来我们来测试一下。好,我们现在呢,还是这个合并到整单,我们现在来发送请求,我点一个合并到整单,那这个请求呢是发出去了,而且响应成功,只不过我们现在,诶我们刚新建了一个采购单,而这个采购单呢,我们在这儿展示的是这个样子的,这块有一个冒号,冒号呢本来应该是我们采购这如果我们给他分配了一个员工,我们来点击分配就行了,这一块用的接口都是以前逆向生成好的,我们在这儿可以选一个admin这个人,当然这个人我们直接是整合我们这个快速的后台管理系统,在这里边管理员列表里边,我们可以添加一个员工,比如有一个雷锋阳,密码呢,123456,我确认密码123456,他的邮箱呢,我们随便输一个qq.com,然后呢,手机号,比如我们来选了一个,如果我们来给这儿添加了一个用户,我们来也是书上11位,一二三四五六七八九十十一好。
04:52
来点一个确定。那如果我们这输了一个新的员工,那我们在这儿合并的时候,我们还可以合并到他的这个身上,来我们来看一下,在采购单这我们来进行分配,那这一块呢,我们就如果添加了新的员工,我们就可以来选择它,我点一个确定,当然给某一个采购单分配了员工以后,那这一块呢,就会有相应的这个员工信息,而采购单的状态就变成了已分配,这个整个分配呢,这都是页面提交的这个数据,我们可以来看一下update,如果我们分配了一个员工,页面会提交员工的ID,员工的名字,员工的这个手机号,以及采购单的最新状态,所以我们暂时不用写新的接口,那么在这合并采购需求的时候,我们来选中它,我来点一个合并整单,那么在这一块呢,就可以选中二号采购单,二号采购单呢,在这也展示了我们这个采购人员的这个信息,那当我们再来点击确定,那就会发送合并请求,这个合并请求呢,我们在这儿会发送我们要合并的采购单的ID,还有我。
05:55
我们要合并的这两个需求是四和五,这是我们这两个采购需求,那么就需要写接口来处理这个,按照接口文档,我们这有一个合并采购需求,发送我们采购单的ID和我们需要合并的采购项,而且呢,我们也可以快速的合并,比如我们在这来点击合并的时候,我不选中任何一个采购单,我来点击一个确定,那它就会提示,如果没有选择任何采购单,它会自动创建一个新单并行进行合并。所以当我们来点击确定的时候,这次提交的这个数据里边只有it,没有我们这个采购单的ID,比如说没有提交它的话,我们需要自动创建一个新的采购单,所以我们来编写一下这个合并采购需求的接口,好,我们来拿过来,在这个接口里边,我们来找一下。
06:44
Purchase controller,那现在要写这么一个功能,Well purchase merge,好,而且这个me呢,我把这一块方法先拿来,方法声明好,我们来写一个post map品,我们要处理一个post请求,而且这个post请求里边会收我们这两个数据,由为我们这是杰森提交的,有采购单的ID,还有it集合,我们把这两个呢,可以专门来写一个VO。
07:11
我们在这儿。在我们的这个V库存系统里边,我们来创建一个就叫墨VO,这个VO里边呢,有两个项目,一个是我们的采购单的ID,还有我们it,我们这些采购项,那这个采购单的ID我们写private浪,我们的ID整个系统呢都是浪类型的,而且我们一定要写包装类型的了,因为我们可能不提交,不提交就要封装空的值好然后呢,还有我们这个it private,我们来写一个list类型的,那么这里边也都是ID的集合,我们就叫it。我们使用and data为它添加上get set方法,那么ctrler这一块呢,我们就来合并的时候来写一个morge。我们就来合并我们这请求参数,我们就叫这个mege VO mege VO me VO,而且呢,我们要获取请求体的数据,把请求体里的杰森包装成这个对象,Request body,好,那写完以后呢,我们最终给它return r.OK来合并成功就返回OK,我希望呢,有一个方法来接收我们这个请求进行合并。
08:24
Merge。Purchase,好们把这个复制过来,我们把这个view放在这。来,我们来准备合并。那先来创建出这个方法,我们来再创建出它的实现这个合并呢,我们首先得判断墨指VO里边我们这个purchase ID,要说如果有这个ID,那么就直接合并到他身上,如果没有,我们还要新建一个这个单,所以说我们if purchase ID等等,Now等等,那的话呢,那我们这个采购单就应该是新建过来的,否则我们才是自己来直接。
09:02
合并到他身上去的,好,我们就来先写一个新建,你有一个我们这个purchase的实体类。那新增呢,我们就来添加一个它我们直接调用我们这个service this.save方法,我们把这个实体类放到这,那这个新增呢,就默认调用新增功能就行了,但是下的时候我们可以来给某些字段设一个默认值,比如点进来我们看以前我们的这个采购单。我们以前在这儿的这个采购单里边,我们新建好的这个采购单项,我们这个创建日期,更新日期,这都没有默认值,所以我们在这呢,可以给两个日期设置一个默认值,Set,一个create time,我们把它创建成一个默认值,包括呢,我们这是第一次新增再点一个site update,他们来给他也给一个值,一个update。那我们顺便就把purchase controltr了,里边的这个save方法在保存的时候,那第一次保存我们就给它给个默认值,你一个date,包括我们的update time.set一个create time new一个都给它默认值,然后呢,我们在这我们创建出了这个采购单,并且保存过来了,保存来了以后呢,我们默认采购单的状态,我们也得写上默认采购单的这个status状态,状态呢,那就应该是零。
10:31
就是我们这个参照前端页面采购单,我们现在有这么多状态,而且这些状态一定应该是一个枚举类,所以我们可以把这个枚举类到我们里面。我们在常量里边,这是商品里边的常量,也可以写库存里边的常量,那这个常量呢,我们来复制一下。我们也需要一个枚举。首先第一个枚举就是采购端的状态枚举,我们就叫purchase的status,我把这个复制过来,来到我们的枚举这里边,好,我们就叫它。
11:12
For status status的这个枚举好,那么这个枚举呢,有这么多种状态,第一个状态呢,是刚是新建状态,还有已分配,那我们第一个就叫created。这是刚新建,我们把这个状态嘛,就写成零,这是状态是新建,然后呢,第二个是分配啊,S这个是一,那这个就是二已分配,它的代表已经把这个分配给某一个采购人员了,接下来我们继续还有我们的其他的状态码。能多复制上几个,我们还有几个状态码呢,分别是。这有一个叫已领取,已完成,还有异常已领取,那就receive,就叫receive,好,这个叫已领取。
12:09
已完成finish。已完成,还有我们这个有异常汉字L。那这个采购单里边呢,有几个没有采购成功的,我们叫有异常。那么在这呢,给他默认赋值的状态就是哇,Constant constant里边,我们这个采购单的这个枚举里边,现在默认都是新建状态,点一个get code,而且其他这个状态码一定要写对012。三。四。好,那这就是没有提交ID的时候,我们需要第一步先新建一个,那新建完了以后呢,我们要把我们的这个VO里边,我们所有需要合并的这个get it要合并到这个单里边,那这个单呢,我们新建完成以后,我们可以给它复制一个ID,我们现在采购单的ID就变成新建的这个了,点get ID,这就是为空的情况,如果为空,我们采购单的ID应该是我们新增出来的,如果不为空,不管为不为空,我们都要进行合并。
13:27
如果不为空,那就是我们获取来的,我们现在来将他们进行合并,那合并他们呢,其实是一个修改,就是来改掉我们这些采购需求里边当前这个采购项的采购单ID就行了,当然我们还要顺便的改掉我们这个采购需求的状态,因为这个需求的状态呢,由原来的新建已经变为我们现在只要给人分配过去了,就变为已分配,所以我们在这一块来编写把他们所有我来点一个map,我们来stream一下点map。
14:03
来写一个,哎,箭头函数,我们最终给它返回的是一个什么,我来返回一个,因为我们最终要修改我们的采购需求,采购需求对应的实体类是我们有一个叫purchase detail这个实体类,所以我们来找到这个实体类的entity,我们把它的ID附上,我们来设置上它的ID,这有一个点,一个set ID,这个ID呢,就是我当前正在电力的集合里边的这个数字,包括呢,我们要把它合并到哪个采购单上,我们把这个purchase ID设置好,那上边呢,要么是新增的这个,要么就是用以前的这个,我们把这个ID呢就设置好了,包括呢,它必须是一个final的,还有呢,我们需要设置上它现在的最新状态嘛,Status,这个status呢,我们同样来写一个枚举类,这是它的。
15:00
这个枚举我们再来复制一个,接下来是这个detail,我们这个采购需求,这个detail的这个枚举。好,我们这个枚举呢,也有这几个状态,我们分别来看一下,采购需求,新建已分配,正在采购已完成和失败,新建已分配,正在采购,那我们就是就叫buy正在购买的。就叫正在采购。正在采购,已完成。还有我们最后一个。叫采购失败。有某一个需求可能采购失败,这叫采购失败。那么接下来给它这设置好状态嘛,Where constant,点一个purchase detail的这个枚句,这有一个已分配点一个get code,我们把它呢,已经分配给一个采购单了。我们来看一下这个页面和采购需求,这是新建还有已分配状态没问题,然后呢,我们要去修改他们,我们把它们呢准备成一个集合,我们最终调用批量修改的方法。
16:09
这来点一个collect to list,把这个集合呢,我们先来拿到最终我们来调用批量,我们需要注入purchase的这个detail item,那么这个这个detailed service,我们来找一下detailed service,好,然后呢来autowaar,我们把这个采购需求呢合并到我们这个采购单上,点一个update,我们现在是一个批量修改8ID。那我们把我们整个集合里边的,按照它的这个主键批量修改这两个参数就行了,当然整个这个方法呢,也是一个大事误,我们来重启测试一下。来清空控制台,来注意我们发的这个SQL语句。好,那现在呢,把这一块也来清空来准备。
17:02
我们这个采购需求,我来选择一个,我们现在要合并到我们这个采购单上,这个采购单呢,之前已经分配给一个员工了,来点一个采购需求,好选中它,然后呢,我们来点一个合并整单。那选择我们现在是二号这个单,我点击确定,我们发现这两个采购需求呢,变成了已分配,我们来看我们的这个采购单,那这个采购单这本没有详情,但是我们看采购需求这它关联的这个采购单ID就已经关联过来了,包括我们应该在做以下优化,如果我们选中了已经合并过的这两个采购需求,我们再在这儿来点击合并,我来点击确定,会不会导致一个采购单里边同样的采购需求有两个呢?我们发现其实我们一直操作的是一个更新操作,所以呢,我们在这块的合并只是更新了它的这个采购单的ID,所以呢,现在就变成这样,如果我来选中他们,我来点一个合并整单,我在这不选中任何的采购单,当我来点击确定,我们就应该是触发我们新建一个采购单的逻辑,我来点击确定,发现呢,这两个就重新被分配到三号采购单了,那么三号采购单呢,在这还没有分配给任何员工,那么在这还可以分配给某一个人的命,我点一个确定,同样我们这一块呢,这两个日期它没有显示成格式化的样子,那按照我们以前的配置,我们只需要在我们的where系统里边,在它的配置文件里边来配上Jackson的数据格式化,我们来配一个叫Jackson data。
18:39
Format,我们来指定上日期格式,YYYY-MM-DD,包括十分秒。那么这一块呢,就写好了,当然每次采购单一更新呢,我们希望把它的这个修改日期也要变一下,所以我们在这一块业务稍微来细化一下,我们进行合并的时候,来到purchase这个service在这进行合并,合并呢最终合并完了以后,还要修改我们这个采购单的这个时间,所以我们来用当前的service进行一个更新,UPDATE8ID,这个8ID呢,我们就创建一个新的这个采购单purchase。
19:22
Entity,我们只更新它的这个时间字段,所以我把它复制过来它的这个主键ID,点一个set。ID,那采购单的ID在上边已经有了CTRLC。放到这包括呢,它的status点一个set,现在的更新时间,你有一个date,我们这块是UPDATE8ID,不是半尺8ID,在这来UPDATE8ID好就行了,把它的这个最终时间一更新,那么这一块呢,只要我们这个采购单一变,那它的这个时间也就变了。
20:04
那我们合并采购需求的功能就写好了。
我来说两句