00:00
但凡我们说我们就可以从技术上的角度上来讲,导入市场活动我们就不存在障碍了,所以下边我们就准备来做这个导入市场活动这个功能了,就可以做了,那做的话我们还是首先画一个流程图,然后呢这个地方来画一个流程图,然后呢在这个右键,然后呢,这个地方留一个sequence大,然后呢,这个地方我们叫导入式空动,诶叫导入导入式动,然后呢把这个地双击打开的来我们画这个流程图,那这个流程我们说所有的流程都是从客户端发起的,所以我们第一个环节也是客户端,客户端客户端来发起这个导入的流程,那这个导入的流程,那客户端如何发起需求,说的很明白了,说用户假如他自己设计了一些市场活动,在家里边设计,或者通过别的途径拿到一些市场活动,这些市场活动都在他的办公文档里边,那我们这个地都在Excel文件里边,那用。
01:00
客户想录入系统里边,他一个一个创建太麻烦,他就是想导入一下,批量导入,那怎么导入,那么用户就是点导入按钮,所以我们这个地方继续来,用户点击导入按钮,用户点击导入按钮,用户点击这个导入按钮。他一点导入按钮,大家看发生了什么事,一点它那要弹出导入市场工作模的窗口,所以我们这个地方弹出导入市场门口,这都是在客户端发生的,所以我们这个方来弹出就弹出导入市场活动,导入市场活动的模态窗口,知道吧,然后弹出这个窗口,用户看到之后,那就可以什么去选择要导入到这个文Excel文件了。那我们这个地方继续了,那用户就会选择要导入的Excel文件,然后呢,这个地方我们这个地方来用户选择啊,用户选择要导入的,要导入的Excel文件啊,然后选择完了之后,他就可以点导入按钮了,那用户点击导入按钮。
02:15
进去了,用户点击导入按钮,用户点击导入按钮,那他点这个肯定模在窗口上面那个导入按钮,然后一点这个导入按钮,大看发生什么事一点它。是不是要向后台发行了,对,也向后台发行,因为我们要把这些数据保存到后台去,所以大看也向后台发行了,那向后台发钮后代有CTRL来处理了,所以我们这个地方来CTRLL,那这个CTRL是不是还是咱们那个市场活动的CTRLL,对,还是能CTRL,在那个CTRL基本上加方法就行了,所以我这个地方来一个叫activity crler,然后呢,在这个CTRL里边加一个方法。然后呢,这个地方来一个方向,他发一个请求,发一个导入的请求,导入请求啊,那大家想一想,这个导入请求同步的还是异步的。
03:10
同步还是异步啊,那同步还是异步,你看看响应回来之后是不是要跳转一。一点导入,我们说如果导入成功了,把它关了下边列表刷一下。如果导入失败了,提示去不关也不刷,需要跳转页面吧,对不需要不需要是不是义务的,对义步的,哎,你说老师不是说这个有文件上传,文件上传请求不是只能是同步的吗。没说过吧,然后我说的是文件下载的请求只能是同步了,是不知道吗?这样哎,那你说老师这个地方,那这个,那你给我们讲那个文件上传那个例子不是同步的吗?我讲那个例子,文件上传例子,就让大家呢学会一下如何上传文件,哪怕同步的能够上传上去,那我们说这个异步,就求你说老师能不能上传文件异步,全求阿贾克斯型的上传文件。
04:08
浏览器能做的事儿,阿贾斯斯也都能做。所以说大概我说阿贾克斯也能上传文件,那他怎么上传,我一会儿给大家写的就知道了,所以大概我们从业务角度上来讲话,这个地方响应回来之后不会刷新整个页面,所以我们这个地方是个异步请求,所以我们这个地方来继续来,这个是个异步请求,就文件上传同用同步请求上传文件,用业务请求上传文件,都大家都要会明吧,都要会,以后到公司里边有可能都会用到,所以我们给大家讲例子的时候,按照同步请求给大家讲的,那我们这个地方真正做CRM项目导入市场工作,我准备用异步请求给大家什么,给大家讲这个文件上传我们奖励的是啊,同步请求给大家讲吧,那这个异步请求也一样可以共加账号,好,那我们说这个地方大概异步请求需要提高什么参数?对,就需要说需要提交什么仓主,对是不是就这个文件提交上去了,对把文件提交上去,所以就是把这个Excel文件,用户选择的Excel文件提交上去了,那他怎么提,他怎么提交这个文件,那就是文件上传吧,对文件上传咱们前面已经会了,所以这个地方从技术上来讲不存在问题了知然后呢,这个地方继续了找,那这个CTRL呢,接收到这个请求之后,它怎么办呢?
05:29
对三个职责,第一个,那么第一个对吧,有参数获取参数,那获取参数这个怎么获取。通过行参获取,他那个行参大看是什么类型的,对,就是我们昨天给他说那个妈接收一个什么文件,是不是用这个multi pass,然后呢,后边一个叫activity,知道吗。啊,我们说他为了接收这个文件还得什么,还得借入那个文件上传解析器,把那个解析器给他么配置到B里边就行了,知道吧,啊总之就通过这种方式就能接收到那个文件了,那接收到文件之后怎么办呢?知道吧,那根据我们这说的,那他要把这个文件什么写到这个磁盘上面去,先首先要把这个文件,把这个文件把Excel文件,把文件嘛,是把文件然后写到写到哪,写到服务器,然后呢,某一个磁盘目录下,目录下是吧,生成一个同样的一个文件,然后生成完了之后怎么办?要解析那个文件了,那这个地方要解析那个文件来获取文件中的数据了。
06:47
拿到文件上得把里边数据拿出来,所以我们这个地方来解析知吧,解析Excel文件,解析Excel文件,然后呢,来获取文件中的文件中的数据获取完了之后怎么办?
07:03
要往数据库里边保存了,那往数据库里边保存,是不是把这些数据都得封装到一个是吧。对Java JA构对象里边分装什么,加构对象里边对一行数据封装一个什么市场融的对象,然后多个数据是分成一个历史的里对把数据封装成是并且封装成啊并且封装成并且封装成啊,封装成什么,封装成activity list,多多行数据,每一行数据封成一个设计对象,多行数据,那么封装一个list就这。这是我说这是CTRL的,其实这其实这几步就是CTRL的第一个制度。第一个职责干什么?接收请求,获取参数,并且把这些参数封装起来,对,只不过他这个地方做的稍微复杂一点,其实他的职责就是我们以前给大家讲的controller,第一个职责是吧。
08:02
就是把参数请求拿到,参数拿到封装好,就是他做的稍微麻烦一点而已,知道吗?但是道理跟我们以前一样懂吧,好封装好之后第一个职责就完成了,下边第二个职责对处理数据,处理数据,我们这个数据是不是就把这个绿色里边数据保保存到数据库里边,对保存数就他自己不能保存,他得调service,所以大家要跟上我们这个思路,你这个思路大看你看着摸不着看不见是吧,大家对大家以后来的讲的话是比较重要的。啊,我们一直给他强调强调这个思路,我们这一阶段最重要的就是这个思路,你要说写代码,你不会写无所谓,往前面翻一下笔记就就就都会了,是吧,都是死的,但是这个思路你要错过了就就那就完蛋了,你语法背的再熟,如果你不会分析这个思路,你等于没学,到公司里边等于没学,你不会做就知道了,所以大家一定要跟上这个思路,这是我们最这一阶段最重要的内容,所以这是我们说,所以下边它必有测试的空了。
09:09
那调service操啊,把这些数据都保存数据库中啊,好,这个地方来个I咱service service啊。其实大概我们说这些代码,哪怕你哪天你说不舒服,或者你忙,到时候什么你不写都没关系,知吧,但是思路你必须得想知吧,因为代码的话是代码回头一看全都会了是,但是思路不回头看,你看啥去看不了了是吧,这些对,所以代码可以不写,但是思路一定要明确,这是我们最重要好然后呢,大家在这个service里边加一个方法,在这个service法加一个方法,那这个方法肯定是吧,把这个activity list一下保存到数据库里边,所以我们这个地方来加一个方法,那这个方法我就建明之一了,这个地方保存了叫C。
10:00
刚刚创建的叫correct,保存什么activity,那批量保存by list,然后然后呢,在这里边传个参数,那这个参数那就是咱们那个封装好的次啊。好,这样的话我们就可以了,可以完了之后呢,再看这个service访问数据库,把这个数据一下保存数据库上了,那它不能直接访问数据库,它就掉map。然后呢,我们调过来一个市场活动的map艾map,然后呢,这个地方来一个它,然后呢,这个地方来调过来这个map里边也得加一个方法,这个方法也是批量保存创建的市场活动,那保存的话,方法名我就直接写了,你知道吗?这个地方来个对,他将来要执行一个insert语句,我就叫insert activity,批量保存by list,这里边也是传我们那个list activity list行了。然后呢,大家看这个mapper就可以通过my body,然后呢执行so语句,然后呢来批量保存市场路了,所以我们这个地方来执行S语句,然后呢叫批量保存,批量保存创建的市场活动啊,创建的市场活动知道吧。
11:13
好,那它保存执行完了之后,把执行的结果往回返,把执行的结果这往返,那它执行的结果因色的语句,它返回的时候影响记录条数。保存了几条就返回几,然后把这个影响技术条柱继续往返,返回给cler这样的好ctrler这样的话来看,我说他拿到这个什么,拿到这个营销记录条书,他的第二个职责就完成了,数据处理好了,下边第三个职责处理成功了还是失败了,那根据处理结果生成响应信息,根据处理结果,然后呢,生成响应信息啊生成响应信息知道吧。然后把这个响应信息返回到客户端去了,然后呢,这个是个响应,这个是个响应,知道吧,然后这个响应信息大家想一想是个什么样的信息。
12:09
对return,对那个return是吧,其实就是一个字块,是不是这样总对return转为什么森时候E不请求啊,阿贾克斯的相应给信息给到阿贾克斯,阿贾克斯能解析数据,那一定是个杰森,那这个杰森,那关键这个杰森里边包含什么?对对,就是那个就是那个return object杰克转成接的时,那就是由pro成功还是失败,还有什么成功了无所谓了,失败是不是还有个提示信息啊,就这样,那其实前台就是需要这些,为什么前台需要这些需求说对还有什么成功了,是不是还有那个条数,还有那个条数知道吗?这是我因为前台需要这些,前台需要的为什么需要需求说了就是如果成功了,提示成功,导入了多条记录,然后提示完了之后把它关了,然后呢,把后边刷一下就行了,所以如果成功了要返回成功,再一个要返回重复导入的条数,再一个如果失败了,提示信息,然后呢,这个不关,下边也不说,所以总的而言,前台需要这知道这些成功还是失败,所以我访问个成功和失败的标记,一成功,零失败知道吗?成功了还得返回一个。
13:25
成功,那么导入数据的条数,那个条数是谁呀?影响记录,对,就是这个影响记录特入了,把他返回,那把他返回这个地方,我往菲返一个,那我返回一个,那我就叫count了,就随便你随便起个名字了,那这个地方就把这个什么in特值返回就行了,这是成功了,如果失败了呢,还得返回失败的原因,把提示信息返回,对吧。好,这是我们这个地方往后返回这个节点这一块啊,为什么返回这个就是需求来决定的。需求文档上给我们写的很明确,知道吗?这是让我们这样,那返回它之后,那这个地方返回到前台了,那前台应该说返回到这个杰森多少返到阿贾克斯的回调函数里边是吧,然后呢,这个地方来一个啊阿贾克斯的这个回调函数,然后呢,这个地方。
14:19
这样,然后呢,这个地方来一个阿贾克斯回调函数,拿到这个阶算多少之后解析阶算,解析杰算,然后呢,渲染页面,那如何解析电子算段,那就是看看是吧,那就看看它是,那就看看扣的是零还是一,如果是一耳了一个是吧,成功导入多少条记录,然后呢,把它关了,下边刷一下就行了,刚刚导入了就能刷出来了,再一个如果失败了,那就提示他失败的原因,然后呢,这个地方不关下边也不爽,知道吧。所以这时候我们说这是整个这个流程知道吧。然后到这个地方来一个。好,这样的话,我们这个流程我们就设计好了,那流程设计好了,下边我们就准备编码实现了,就是说编码实现了。
15:08
那编码的话,首先写map,在市场活动map里边加一个方法,叫批量保存创建的市场活动,所以我们这个地方来加一个方法,在市场活动的map里边加方法,那市场活动这个地方来在这个里边加一个方法,这个方法咱已经设计好了,范围值影响记录条数。双网名insert,对activityiv by list,然后呢,在这里边传一个参数,这个参数咱们已经设计好了,就是一个list的,对Le里边是一个一个的市场活动的实体类对象,然后呢,在这边来一个我们这个地方给它起个行,这个参数名你叫什么都无所谓了,我要讲的例子。然后呢,这个地方我们给他一个注释,这个注释叫批量保存,批量保存,然后呢创建的,然后呢市场波动,创建了市场。
16:06
好,那这个方法定义好了,那下边我们就准备写个骚数句了,那给他写个骚数句,在映射文件里边写个骚数句,那这个映射文件在哪呢?映射文件这里边没有,然后找找我们这个映射文件,然后在他那时我和文室map里边找这个映射文件,在这我加一个搜数句知道吧。啊,这然后呢,这个地方来添加的搜索句in so,这然后呢,这个地方来一个,那给他一个ID,这个ID要和范火名一样,所以我们这个地方来拷了一个防火名CTRLC拷贝过来,然后呢,这个地方写过了知道吧。然后呢,大家这是后边加一个参数,这个参数是什么类型的?对,是个list,这里边又写list里边单条参数的数据类型,单条参数那是不是一个实体类对象啊,那这个地方我们就写一个实体类对象这么个类型,考过了一个实体对象,这里边要写单条参数的数据类型,知道吧,好,In色T语句自动返回银行记录条入不用写re单外部代入,你写了反而错了,所以下边直接写我操数据就行了,写操手句,那添加的造手句in色知吧,然后呢,印库知往哪个表格上添加,对市场活动这个表格添的往他的哪些字段里边添加了,对是不是就那些字段,所有的字段基本上当新添加的,除了at by at time是空的,别的字段都有,所以我们直接是吧,写这些字段去了,那这些字段比较多的话,那我这个我就不一个一个敲了,我就直接考到这个so语片段了。
17:46
啊,哪个地方呢?CFL语片段就是这个地方,把这些CTRLC拷贝过来,拷贝过来,然后呢,我们写到这里边,写到这里边,然后呢,写到我们这个这个地方,那我们说新添加的I by at time肯定是空的,空的我这俩字段我就不添加了,这好这样就行了,这是我们说了往这些字段里边添加数据。
18:09
然后呢,这些数据值是什么?Y6知道吧?VALUE6后边这些值从哪取?对,是不是从这个实体类对象里边取啊,对实体类对象里边取,按理说从这里边每从这个实体类对象每一个属性里边取,每一个站里边要写什么,获取它的每一个属性,那获取ID等等这些获取获取每一个属性都获取到,这样的话是保存一条记录是不知道么?那我如果保存多条记录呢。对,按理说是不是这样的,又加一条记录是不是逗号隔开有很多小括号,一个小括一条记录,一个小括号一条记录,到底有多少个小括号,是不是看看那个离色有哪些元素啊,对,有哪些元素是不是要变离那个离子的,对变离离子的,我们这个又要变离,这变离离子思然后呢,这个地方来讲for each便利,便利的变利的时候,每变出来一个市场活动的实体的对象,然后在这往是拼成一个什么小括号就行。
19:13
小括块和小括之间用逗号隔开,然后呢,我们就用这个for for in这个循环,然后最终拼这么一个字符串。这种这样的一个字符串,每一个小块对应一条记录,那我们就写这个什么FOR1了,那写for,那collect里这里边写什么?对list,我们说这个地方便利集合是list,便利数组是知道吗?对,然后呢,后款还有一个函数对哪一个对,1TERM1TIME表示,循环变量表示从这里边每取一个元素都放到这里边。那这个这个循环变量,你随便起这个名字叫什么无所谓。那我们我们就叫obj了,它将来从这里边每取一个元素放到这里边,那每取一个,每一个元素我们都是一个市场公式的对象,都放到这里边,放到这里边怎么了?直行循环体,直行循环体怎么我要拼这么一个小括号。
20:11
我要拼这么一个小括号。那这个小块这里边的值,每一个字段值是不是要从这个循环变量里边取就行了,对取,那取的话这个地方呢,那这个循环变量就是一个一个市场温度对象,所以直接取到的相应的属性就行,所以那这是我们知道这个是ID还有什么呢?看看OBG点还有啥呢?是不是O,还有什么看看对oj.name还有什么Oj.start date啊start date,然后还有什么看看对OBG啊,这个是OBG点,这个是N的贝塔啊还有什么,看看还有OBG2。
21:00
哪一个对cos的是吧,还有什么他对OG点这个什么,对备注是吧,这这个什么描述,那description还有什么。对,还有可乐拜可乐,他这这这么这么多呀。让我比较麻烦啊,麻烦麻烦知道吗?知道那我早早早不写了是吧,耽误时间,知道在这边写他。我写它写它呢,这个地方来替换一下啊,找一个。啊,找个替换啊,替换呢这个地方来把里边所有的逗号替换成什么呢?替换成这个好好,然后呢OG点,然后呢,啊这个。把这个看啊啊对,前面再加一个什么,这一个对,然后呢,这个地方逗号,然后呢,这个地方全部替换一下,好这。
22:09
对,然后呢,拷贝一下这样就行了。这样的话我就写不用写那么多了,是吧,然后呢,这个地方来一个词,这样写到这边就行了。好英文什么,大概因为这个我要取这属性,这些属性是不是和这些字段相对应的,对,和这数据库里边字段相对应,字段相对应,但是它这个地方有一点需要改动一下大家地方了,对现在我要取这些什么实体类属性,实体类属性如果有单个多个单词来组成,要符合托峰命运法。这些字段是什么?下划线隔开知道吧,然后呢,这个地方,哎呀,好像这个地方好像是多多多了一个这个东西,知道吧,多了这个东西,对,多了这么一个东西,嗯,然后呢,这那就给它去掉吧,多了这么一个东西,这有一个空格,就这然后呢,这个地方来一个好,然后呢,一开始这样。
23:06
贝塔,然后呢,这个地方来个塔,这样就把这些去的话,就比我们的这个啊,去的话比你写的快,就这好,这样的话,大概我们这个地方就写完了,知道对这些是吧,Value它是吧,这是我们说每变上一条就拼着一个小括号。那又变成一条,是不是又拼一个小括号,那小括号和小号之间对用豆块隔开,拼完之后大家看还需要加open左框close右框吗?对不需要,因为我们这个地方不需要知道,那你说老师以前你拼ID的时候需要。那拼ID的时候呢,我们需要,因为ID我们当时嘛,都是拼的ID等于ID或者另一个叫什么,然后呢,拼一个ID,然后逗号隔开一个ID,逗号隔开一个ID,拼完之后我们这个音后边需要一个小括号,当我这个东什么拼完之后不需要小括号了,所以我知吧这个地方就不加open和close了,然后呢,大家我就把这个地方刚才举的例子这个地方给它去掉,这样的话就是一个什么完整的一个搜出句了,这个地方大家都看明白吧,那么可不可以。
24:19
对,可以哈,对,这是我刚才是。这是这个道鱼,就是一下批量的添加多条记录。这是我们这儿,嗯。好,然后呢,大家看,那这样收入与我们写完了,收入与写完了这个map层就写完了,Map层写完了,下边写service层了,在市场中service加一个层号。批量保存创建的市场活动,所以我们这个地方继续了,然后呢,在市场功的消费所在这里边加一个方法,这个方法也设计好了,放了值,影响技术销售双法名来一个叫C知道吧艾,然后呢by list,然后呢这个地方就行了,在这里边传了一个list list里边是一个一个的市场活动,是一个对象activity list啊。
25:06
好,方法定义好了,在时项列边也得加这个方法,知道吧,然后呢,按照out in so employ,知道好serve层方法的实现,调map,所以我们这个地方直接调过来了,然后呢,调这个map,调哪一个方法,调咱们刚刚写的这个方法,来一个insert activity by利。然后呢,把activity list这样的话,我们这个service层也写完了,知道吧,好,Service层写完了,那下边就能写肯绕层了,知道吧,好这个。
我来说两句