00:00
然后呢,下边我们写CTRL层,在市场活动CTRL里边加一个方法,这个方法叫导入市场活动,所以我们这个地方继取了在市场活动这个CTRL,在这里边加一个方法,导入市场活动,那CTRL层的方法啪过来一个是吧?啊返回值返回什么类型呢。返回,这是什么类型的?对,返回接字数串,只要返回jas串,大家记住都是OB接口啊,方法名,那你随便写了键名之意,那我们以前做导出的时候叫X port市场活动,那我们这个地方导入了叫这个这个单词m port叫S导入,这叫。这是我们这个,然后呢,这个地方来那边去好,下边当什么双面定好了,那给他,他要处理客户端了,发过来请求给他分配一个URL,那通过request map品来分配,那么这个URL不能随便写,要和他处理资源路径保持值,那他处理的自源路径还是市场活动主页面。
01:08
那要和市场文主页面路径保持一致,那那个主页面上叫work位置下边的啊,下边资源的名称和方法名保持一致,然后呢,这个地方角度啊,这样我们就可以了。那将来我们说这个方法处理完请求之后,它返回响应这个杰森,那这个东西给他加一个response。好,这时候我们这样,那在这里边要定一个行参来接收客户端传送参数,那这个行参咱们已经已经是个设计好了,它是接收一个Excel文件上传的文件,那这个地方我们也用一个叫什么market park fire,然后呢,这个地方给它起个名字,这个行参的名字我们就activity,对fair,这是一个市场活动的一个文件啊,我以后传的时候那个参数名我也叫activity生,那我说他要封装这个对象的话要借助。
02:11
SPAMC的文件上传解析器,要把个文件上传解析器配置到别里,咱们昨天已经配置好了,所以呢,你以后做的时候你别忘,别把这个忘了,如果那文件上传解析析不配置好,这个地方不能用,知道吧,一定要配置好了,好这样的话呢,我们这个就定义好了,定义好之后这个什么这个方法就定义好了,方法定义好,现在我们已经来到这一步了,能够接收请求,获取到参数了。下边怎么办?把这个文件写到磁盘上某一目录里边。所以下边我们就准备这样了,把文件写到磁盘上某一目录里边,所以下边我们说把文件把接收到的,把接收到的这个。Excel文件叫Excel文件啊,这个cel文件,然后呢,写到让呢,磁盘目录中,目录某一个文件中这样行,那如何写过去,那根据我们前面文件上传的,再一个是吧,这个代码大纲其实就是这段代码。
03:20
调这个什么transfer这个方法。然后呢,给他传一个文件就行了,对,然后这个文件名我们也是这一个方法就行了,我们也是是直接获取这文件名就行了,然后呢,直接CTRLC把它拷过来就行了,我就不一个一个写了,直接写它就行了,知当然这个文件的名字我们这个改成我们的就行了,知道吧,这是我们这样做,我们也写到这个目录下边,就是这是服务器当中某一个目录吗?那直接写过就行了,那当然这个地方报ioe常,那BY报IO异常这个地方我得补过去。为什么补货?
04:01
因为大家这个前台发的异务请求,那么如果这个报异常了说明什么,这个地方万一报异常了,有可能会是什么,那那就处理失败了,后边代码都不会执行了。那如果报异常了,那这个怎么我就告诉前台说导入失败了,知道吗?所以大概我这个地方我得处理了,那处理了,那我这个怎么处理了,我就索性账了,直接踹开始去把所有导入的啊,导入的代码都踹开始放到踹开里边,一旦报异常,我就将来把异常打一下,然后告诉前排说导入失败了就行了。那一会儿我生成一个阶层走长往上知道吗?好,这时候我们说这那如果不报异常,不报异常会继续往下走。是吧,那现在这个文件已经生成了,现在我们已经来到这一步了,这一步已经做完了,文件已经生成了,下一步就是解析Excel文件,把里边数据都获取到,封装到一个activity list,这样就行了,所以我这个地方继续来,然后呢,这个地方我大进去了,下边我要解析这个Excel文件了,文件拿到了,要解析它了,那如何解析它,就是咱们前面给大家。
05:16
使用Java来解析Excel文件那张代码,那这张代码怎么解析,我们再给大家再次写一遍,大家再重要再熟悉一遍,你在课下写的候,你也要再写一遍,再熟悉一遍这个代码,我们说这些代码大家要达到一定熟练程度,知道吧,好这样,那我要解析这个文件,文件有了就是这个,就是这个文件,那我要解析它,首先是不是得根据这个文件生成一个沃克布克对象啊,沃克伯克对象,所以下边根据文件生成沃克伯克对象,我就不写这个注释了。我就不写这个注释了,但是你知道这个注释就行了,那这个注释我们在这个地方已经写过了,这是注释要解析哪个文件,根据这个文件生成一个,诶work对象,那我直接生成了,这个地方来个直接六一个HSSF叫work book,它要根据文件生成哪一个文件,要建立一个文件输入流,去读那个文件,去哪一个文件,直接六一个叫fire input去读那个文件,哪一个文件就这个文件。
06:20
咱们刚刚生成的这个文件,在这个路径下边,文件名叫他的一个文件,文件名叫他的一个文件,然后呢,这个地方定一个叫input stream,然后呢,Is这样看到了,然后他得到一个work book对象,然后呢沃可可对象就行了。好,这行,那拿到work book对象了,我要获取里边数据,首先我得拿到他某一页的数据,那我要拿到这一页的数据,拿一页的话,我首先来调用叫get she,我们这一页整个文件里面只有一页,所以获取第一页就行了啊,然后得到一个sheet,就叫HSSF,叫我们呢叫sheet对象,然后呢,这个sheet对角,那么有页了,我要拿这个页的横,拿页面横怎么当,那这个什么SHIFT1条点get什么,对,Get轴是get轴,那这什么,那这个肉里边通过下标来获取这个下标什么从零开始,一直往后。
07:25
那我这个的话,我要拿里边数据了,这个下边应该从几。从一开始,因为第一行是不是表头啊,那个下边是零的是表头,那从什么第二行下边是一的开始获取就知道吗?这样去获取,那总共有多少行呢?对,有last road number的那么多行,那如果我一个一个行获取,是不是我这个地方写的时候不不好写了,那怎么办呢?是不是可以放到一个循环里边,放到一个循环里边for就这样。啊,这是我们这个,那for的话,这个这个什么,把它写到里边,把那个行号作为循环的变量,那这个循环变量这个int来一个什么I等于几呀,从几开始获取啊。
08:12
从几开始获取,是不是从一开始获取了,哎,这这个带上这个还不熟悉吗。这不属于吗?对,这样吧,我也不不自己写了,直接从这个地方解析Excel文件,从那边拿过来,CTRLC拷贝直接放我们这里。大家看这是不是解析那个文件,解析文件,当然后边后边这个名字,这个文件名我们不叫它了,我解析的是这个文件,知道吗?然后呢,生成work和对象,然后得到一页,然后我再去得到相应的行,相应的列去知道吗?所以这时我们做到这那往这个地方,它这个地方接着往下走拉是吧,那这个大看我要获取里边行,这个是获取行的下标,那这个行的下标能不能从零开始,不能以前我们打到控制台把那个表头也打出来了,现在我数据库里边插出去了,第一行是不是就不用解析了,对不用解析,这个从解啊对,从一开始,然后呢,一直什么获取到最后一行是吧?然呢往下遍历,从这个地方每次什么获取一个行对象,是每次从第二行开始获取一个行对象,那获取行对象每一行是不是对应一个市场活动记录啊,要封装一个市场活动实际的对象。
09:38
在这每变出来一行,生成一个市场活动的实体对象,那生成一个市场活动实体对象,我就直接六一个市场活动实体对象,然后呢,这个地方来艾实体的对象,然后呢这个地方来,然后呢这个地方来定一个变量叫activity啊activity实体的对象后呢,XT的实力对象,当然我们说这个引用拿到外边定义效率更高,然后呢,这个地方出来一这样就行了,然后呢,大家看这时我们都知每变成一横,我要分成一个实体的对象。
10:14
那这个谁的对象里边数据从哪取?对对,是不是从这一行里边各个列里边去啊对,这那这些列是不是我要遍历那些列去了,对,遍历这些列,那么每一行的每一列变列都是从第一列开始遍历。直到变到最后一列,知吧,那从这转每变列一次,那就拿到一列,拿到一列,拿到一列我们也能拿到这一列的数据道吧,这一列的数据以前我们拿到之后直接打到控制台,所以现在呢,我不打到控制台了,现在我这一列的数据我得拿到它之后干什么?对,是不是塞到这个实体类对象里边,对往这个对象里边设置到属性里边就行了。好,这是我们一个,那我这个地方来一个叫s value,定一个变量保存的,然后呢,大家看我把这个s value,然后呢,设置到这个实体类里边去,那现在问题就来了,问题什么什么问题呢?我可以往这个什么获取这个列的值之后,我可以往这个实体列列各个属性里边设置,关键是我这次变出来这一列,每次变出来这一列拿到值之后,设置到它的哪一个属性里边呢。
11:30
我可以往里边设置。获取哪一列,就是往往这往这个实体列哪一个属性里边说是。这这事你怎么怎么去想的啊,按顺序来,那那怎么按顺序啊,是不是看这一列是第几列啊,看这一列是第几列,然后设置到看好属性里边,那这些第几列,那假如说是第一列呢。
12:01
你会设到哪一个属性里边在的ID,那那这你就默认了,第一列是里边放的是ID,写的时候对,那万一他写的时候第一列不是ID呢,那就。判断啊判断怎么判断,他写的是他写的时候第一列他放的不是ID,他第一列放的是开始日期。那你放手,那你怎么对对,那你那你说我如果第一列我放到开始日期里边,那万一他第一列放成结束日期呢。那你说放结束日期,他万一第一列放的成本呢。等待就完了是吧,所以呢,你想一想大哥,这个文件能不能让他随便写,对这个文件不能让他随便写,他要随便写,咱们后台有办法解析吗?没办法解析是吧?啊,你说你第一列放什么,我偏偏不给你什么写什么。
13:06
所以这个文件虽然是用户自己设计的市场活动,但是这个文件的格式不能让他随便写,一定是约定好的,有一定是约定好的,第一列放什么值,第二列放什么值,一定是约定好的啊,你要让他随便写,那还能得了啊,那等咱们后台代码没法写了是吧?你这么写我偏偏放这个数据,你那么写我发放这个数据,所以一定是约定好的这个文件,这个文件是约定好,什么时候约定好的,在做需求调研的时候都给客户约定好了。啊,你要如果不约定好以后,程序员没法写了,所以当我们说这个像这种做需求调研的时候,我们说本来是产品经理去做的事,但一般来讲呢,程序员得参与,因为产品经理不懂技术,对他不懂技术,他什么用户提什么,他就答应下来,他也不知道到底是怎么做。那到回来之后呢,大家都签完字了,你到时候你再去找人家,你找不着人家了,知道吧啊,所以大程序员就不好写了,所以一般来讲程序员得参与,而且得有有经验的程序员,所以你要没有经验,没没做过项目的话,这个时候也也不太好知道吧啊,他也不知道这些事儿,所以大家这个文件一定是约定好的,包括这种Excel文件大纲。
14:20
因为上传只能上传Excel文件,上传别的文件都不行,这都是给用户约定好的,用户说我习惯用word文件,那我们就用word文件。他习惯用PDF,用PDF文件不管用什么文件,事先一定约定好,知道吧,而且这个文件的内容也是约定好的,第一列放什么,第二列放什么。不能让他随便发挥,知道吗?所以大家你会发现有有的时候什么做的时候有这样,有的做的时候只要是文件上传,让用户把他的文件上传到后台,我们后台要用他这个文件怎么办呢?后边都做一个按钮是吧,这个按钮什么叫下载模板是吧?对下载模板让用户什么生成,让用户设计这个市场活动的,他这个文档他自己都不能创建,他没有权利创建,为什么没有权利他创建,他创建别的格式怎么办?或者他创建他用别的版本的office创建,怎么我们说都知道,像这办公文档都有很多版本,不同的版本我们在后台解析的时候不一样了,他要用别的版本的Excel文件a office软件创建的时候,那我后台用这个版按照这个版本解析的。
15:29
那这个时候就后台我们就解决不了了,知道吧,所以说大家一般来讲,像这种文件都不让他自己随便创建,我们给他创建,给他创建一个空文件,然后呢,作为模板,他要想设计市场活动,他先到这儿下载一个模板,在这个模板上边来设计市场活动,知道吧?呃,当然他这个地方他没做是吧,他没做,但是你以后做的话,你你你也可以做成这样子,但是后边就加一个按钮,一点它向后台发一个下载的请求,去读一个Excel空的Excel文件,让他保存他本地,让他在这个文件基础上设计。
16:03
他不能让他随便创建,就这个意思,所以大概我们说还是这句话,这个Excel文件一定是约定好的,叫文件上传的时候知,我们这个地方叫文件上传,所有的文件上传,只要我们后台代码用到的这个文件了,文件上传,那么上传的文件一定是约定好的,叫上传到上传的文件,文件是跟用户,一定会跟用户什么约定好啊,约定跟用户约定好了一定是这样的,你你要是说不约定好了,他随便写啊,我们后边代码没法写是吧,这是我们说的知。啊,一般来讲都有模板啊,一般来讲都他这个没有模板,没有模板咱们就给他约定好,咱们给他约定好什么,我们就给他约定好,按照我们上次做的这个我们这个约定哈。可烂呢,假如说大概我们就这按照这个约定吧。
17:02
假如就按这个文件约定,假如就就就按这种格式,就按这个文文件作为模板约定,知道吧,约定什么第一列ID,第二列所有者,第三列名称第四列,这依次往后,假如我们就按这个约定了,那如果按这个约定来看,对在这个地方约定,你看啊,每次便利出来一列,我都要什么拿到这个值了,拿到值我往那个什么实体类里边,哪个属性里边来设置啊。按顺序按顺序对按顺序是吧,那看看这一列是不是第一列,如果是第一列是不是放到ID属性里边。是,那如何判断这次变出这个三数是第一列呢?哎。根据谁啊,是不是根据结来判断呀,如果结是零是不是,它一定是第一列啊第一列,所以那这个地方是不是你还再再次判断一下,判断下来判断A,如果接等于零是不是这一页按照咱们的约定一定是ID啊对,一定ID,那就设置activity,点塞到什么ID,塞ID里边,然后把这个塞value设置到里边。
18:16
就让对,这是我们这种知子,还有再看,如果说如果不是第一列呢,再对再判断是吧,是不是第二列,是不是这样的,那A来家看看A,然后呢,然后呢,这个是接等于什么一你是吧,接等于是第二列,第二列那放到哪里边去啊,根据咱们的设计是不是on哪里边对on哪里边,那就是设置on里边,把这个什么3286设置owner里边,嗯。啊,当然后边是不是一次都判断了意思吧,但是这个地方大家再分析一下是吧?对这个列这个ID这一列,对这个现在这个ID我们能解析出来了,放在这里边了,但是这个ID大家去想一想,能不能让他自己设计,对不能是吧,就因为这个ID是吧,是不是我们要保证唯一非空吗?你要让他自己设计,他能保证唯一非空吗?对,他不能,他有可能是吧,他自己写的时候,可能写几个字符段不重,没没关系,他还写多了,是不是有可能重了。
19:25
对,有可通了,所以这个时候不能让他设计,他不可能保证唯一非功能,那我们程序员要保证一个什么数据的唯一非功,我们还是按照一些算法生成的,你让用户给你写一个算法生成吗?对,这不不现实的是吧,所以他告我说这个ID压根就不让他生成,不让他生成什么这个什么这个文件,这个模板里压根就没有,对压根就没有这个对这一列压根就没有,我们把这一列给它删了。是没有这一列了,那没有这一列问题来了是吧,那我们这个是ID从哪取呢?对是不是我们自己给他生成啊,对自己生成好吧,那自己生成我也别在这里边生成了,在哪生成杠一创建好这个对象,是不是我就把这个ID给它设置啊,反正我不从里边解析了,然后呢,这个ID来设置,我们是不是UUID啊对UUID就这了。
20:21
UUID,然后呢,这个时它然后呢,点get u ID好,这时我们说到这,那这样的话大看ID我们自己生成了,那第一列现在是不是就不是ID了,那如果变成了这个,如果是第一列放在哪里边了,是不是变成O那了,对,变成O,所以大纲设这如果是第一列,那就把这一列的值设到O里边,嗯,那设到O里边问题又来了是吧。问题什么说这个什么所有者,这个什么O是这个市场中由谁负责就实施保存一个人吧,保存一个人大家看我们这个什么要封装实体类对象里边,这个属性里边去,那将来要保存到数据库里边,数据库里边的这个own的这个字段,是不是保存一个人的ID啊。
21:09
那用户你解析出来是用户的ID还是用户的名字,对,一定是名字,那你说老师他不是ID,用户自己给你生成的这些数据,你让他给你生成ID,他知道吗?他不知道是吧?所以呢,他只能填名字,那他填名字我们这个地方是吗?数据库里边需要的是ID,你解出来这个名字,那咋办呢。那怎么?这上面儿的。对。那那那那拿我们这个拿到名字,我,但是我们数据库里边是需要的一个ID咋办呢。当谁谁能的,对对对,有这么几种方法方法,那么咱们同学说有这么几个方法,大家看看哪一个比较合取啊,第一个这个地方获取到名字之后,到数据库userl表里边去查这个用户的ID去。
22:08
可不可以?对,这个时候,当然这个名字是不是是不唯一的,这个名字不是唯一的,万一你查出来两张三咋办呢。你用谁的ID啊,是不不行啊不行,这这是不行是吧,根据名字查ID查不了,有可能查出来多个多个人名,因为人名重名很正常的,知道吧。所以的话,这是这个不行,知道吧,还还还有哪一种方啊。对,给大家找一个固定的账号。因为什么?因为大家这个地方用户只能填名字,但是我们后台又需要ID,让他填ID是不可能的,你别想让他填ID了,知道,然后呢,下边那这个时候只能写一个折折,只能找一个折中方行,折中方案什么意思,就这我们可以这样,其实可以这样,他只能填名字,我们以我们以前做在公司的时候做开发,我们还采用过这种方式,哪一种方式就这样用户只能填名字,但是我们后台需要ID。
23:15
那怎么办呢?是这。如果这个数据量很少的时候就不多,那怎么办呢?我们可以在这个文件,这个文件是他下载我们模板,这个模板呢,在旁边的吗?给他列一个,给他列一块地方,这块地方写什么,写一个叫附录什么这个东西是吧,然后呢,给附录叫附录。就是做说明的什么意思,就是说把每一个人人名给他后边那个ID呢,建立一个一一对应的关系。他不是说不知道每个人的ID吗?然后呢,让他去查ID去。到这个附录里边,当然这个附录不可能太长了,假如你这个数据量很少,假如就三五个人好了,然后呢,每一个人的ID都给他,都给他列出来了,说你要想让这个人负责,你别找,你别写这个人名干什么,把它后边对应的这个ID写到这了,这样用户就可以写ID了,这是一种方案,这是一种方案,大家明白这个意思吧,对,这这这是这是一种,但是这种方法仅仅适用于那些数据量比较少的时候,你要说有几十条甚至上百条记录,他给你找吗?
24:26
他不可能给你找了是吧,用户也不答应,这时我们给他说两个方案了,第一个第一个方案是不可取,叫什么就让他填名字,然后我们后台去查查,到时候呢,有可能人名重名了,所以这个时候我们这第一种方法不可取,第二种方法用附录,附录这种有局限性,只适用一点数据量比较少的这种情况,知道吧,这是第二种方案,这种方案我们以前这个采用过,知道吧?对下边来看第三种方案,然后第三种方案,假如说不这样是吧,不让他是吧找附录,用户不答应,那怎么办呢。
25:01
对,用个公共账号,所有者也别让他填了,为什么?他不知道ID,我们后台需要也别让他填了干什么?那你说这个所有者是谁?找一个公共账号,这个公共账号不是由任何一个人用的,就是一个公共账号,这个公共账号的名字假如说专门用来设置那些来自外来的导入的数据,都有这个账号去负责。将来这个账号你们老师说,那这个账号说这个账号没有任何人能用,那么将来这个市场层谁来去负责实施,将来领导层根据这个账号对登录进去之后,再给什么,再根据什么这个这些市场活动特点分配给其他的员工知道吗?谁适合组织这市场活动,领导肯定知道分配任务就知道了吗?他用这个账号登录进去之后,给给别人分配任务,一看这个账号负责的这个账号没有人用,那什么是公共的,一看这个数据肯定是外来导入的,那就什么,那就分配给指定的人就行了,再次分配他一个再次分配的一个过程,知道吗?当然我们说这种房,这个这是我们说的这种房一个公共的账号,知道吗。
26:10
这是一个这个我们以前也采用过,公司这个用户表里边有好几个公共账号导入的这个这种数据,用这个账号负责导入另一种数据,这个账号负责知道吗?所以这是我们以前也采用过。这是不是,当然这这种方式,你要采用这种方式也要跟用户沟通好,在做需求调研的时候跟沟通好,知道吧,好,这是我们说这种知这个嗯,好,这是第三种方案了,找一个公共账号,这是我们这样下边第四种方案,我们这个整个项目,CRM项目就是他们采用的这种方案,就咱们买他这个项目时,他们采用的,那他们采用的是什么?是这样导入的时候,谁导入的谁负责。就是这个什么,这个市场活动谁上传的谁负责,那或者谁上传谁负责,谁上传肯定是谁设计的,他既然有权利设计这些市场活动,他肯定是个领导层,他对这些市场活动是最了解的。
27:10
那么什么都分到他自己名下,他自己名下怎么到时候他在什么再分配给别人,那他肯定是个领导,不可能是一个什么小职员,他涉及很多市场活动,不可能是这样的。所以说当然我们这个CR项目,就咱们买他这公司的这个项目,他们就采用这种方,这个市场活动的所有者,导入的所有者谁导入的谁负责知道吗?这是我们说的这这第四种方案,这些方案当然我们说这些方案都不是完美的,最完美的方案应该是什么?用户输ID解析出来之后直接设置所有者,但是这种方案我们说。不对,不现实,所以只能找折中方案,我们给他找这四种方案都不太,都不太完美,完美的方案不存在,知道吧。
28:00
那所以大看我们只只需要找一个折中方案就行了,但是我们说不管找哪个折中方案,必须在需求调研的时候给客户确认好,对给他去给他说好知吧,如果不说好,你不能说我贸然的就这么来做了,那到时候人家验收的时候不通过知道吧,所以这事我们跟他说到知道,所以大概就是这种问题呢,就是说这个技术上决定不了的,技术解决不了的,就你技术再好,这种问题你解决掉,你解决不了,你解决不了的,这个时候是从业务上找折中方案知道吗?所以大家以后也是经常遇到这一类问题,就技术解决不了的问题,要从业务角度上来讲来采取一些别的一些方案,知道吧,所以那我们这个地方大纲市政,我们这个所有者就直接用当前用户了,直接用当前用户了,知道吧,那大家看一看,那这个当前用户,再看那用当前用户是不是这个地方,那就不让用户自己输了,对这个地方不让他自己设计了,然后把这一列也删除就行了。
29:00
那这一列也删除大,看那这个所有者从哪来,对从筛里面获取是不是一创建好了之后,在这个地方也是直接给他设置就行了,对设置一个所有者own所有者,那取session当前用户就了,那取session,那这个地方注入一个session http session,然后呢htp session拿到这个session,然后呢这个session,然后呢拿到当前户get,然后呢这个是contain点2SESSION userr,对,然后呢来拿到当前用户,然后呢这个证到userr是,然后呢这个证强转一下user是吧,然后呢我们这个地方把它拿过来,那这个呢,把当前用户是不是ID写到这对ID小所有者。就是当前用户谁什么,谁导入的谁负责,那谁导入的都是当前用户嘛,啊好,这是我们这其实大家看不但市场活动的所有者。
30:00
没有明确指定所有者的时候是当前用户,以后我们在做别的功能的时候,只要做的时候需要所有者,又没有明确指定所有者是谁,全部都是当前用户知道吗?所以这是我们说我们整个CRM项目,他这个需求都是这啊学长,所以我们到后边做别的工作的时候,还会用到类似的这个这个这种思想,创建任何一个数据的时候,只要没有明确指定所有者都是当前用户,好,这样的话,大概我们说这一列也没有了。对,那现在第一列变成谁了名称了是吧?那第一列变成名称,那每次变历出来一列,那这一列,那看看是不是第一列,如果第一列把它设置到什么名称里边去,名称里边,然后呢,把这个把它设置里边去就行了。好,那这个名称可不可以让它设置设计了,对这个可以的是吧?这个可以了,好这样的话呢,我们就可以可以完了之后下边看下边来看看,如果不是第一列,那是不是看看是不是第二列,第二列是啥开始日期是吧?那开始日期是不是也可以设计啊对,从什么时间开始的,那这个呢,来设置开始日期。
31:16
那如果说变离这一列不是第一列,那就是第二列,是不是第二列,如果是第二列设置的他的对等。那如果既不是第一列也不是第二列呢?继续判断是不是第三列,如果是第三列,设置到哪一个属性里边,对结束日期activity.set in data in data,对,In,那这个呢,把它设到第三列啊,好,那如果既不是第一列,也不是第二列,也不是第三列呢?看看是不是对,是不是第四列。对第四列,那记住了,接等不等于,如果等于三表示第四列,那如果第四列设到哪个里边去,对第四列看看是谁的看看。
32:06
第一成本对成本,那设到成本里边,然后呢,Set cost是吧?诶这个地方还有一个点set cost成本,Cross的成本,那这个S3尔八列成本,那如果既也不是第四列,那就继续放到是不是第五列,那是不是第五列,如果是第五列这个地方接等于什么?四如果第五列,然后呢,把这个什么。对,如果是第五列,然后呢,把它什么set第五列是谁啊对,描述是吧,描述,然后呢,把这个是吧设到描述啊如果既不是说也不是第五列,那就看是不是第六列,对,那看是不是第六,然后呢,这个是接看看等不等于五,如果等于五那就第六列,第六列设的哪出S的第六列谁呢?看看创建时间,创建时间说这个市场活动是什么时间创建的。
33:08
创建时间是哪一个时间上传,对,就是不是就是当前这个上传这个时间啊,就是当前系统时间,就是当前系统时间,是不是这个段也不用让他传了,所以这个这一列也没了啊。那这一列没有了,那么再往下看看,那这是第六列变成谁了,创建者说这个市场活度有谁创建的,谁创建的,对谁这么谁导入的,谁装也是当前用户,是不是这样的,当前用户导入当前用户创建的,所以这个地方是不是也不用设计了,也不用设计是吧?对后边修改转修改,压根是不是都没有,所这些都没了,这都没了。大家到此为止,我们这个东西其实大概就这些,就这几列,对,总共是五列。哎,那你说老师这也太这也太少了是吧,其实不止这些,其实他这个市场活动这个表里边不止这些字段,还有很多别的什么,反正预算成本成光成本,还有预算成本,还有实际成本,预算多少钱,花了多少钱是吧,还有一些别的什么,什么这个市场活动类型,市场活动的这个这个市场活动的这个来源等等这些还有很多字段,那些字段干什么,我们给他去掉了。
34:25
因为太多的字段,咱们除了耽误咱们上课堂的时间,没什么太大的意义,知道吧,所以他不在不不影响大家这个对技术的运用的情况下,我们去掉了一些字段,大家知道就行了,实际开发不可能就这五个字段啊。好,这是我们说的就这五个字段,我们目前来讲就这五个字段,所以大家每次变成这一列都判断是不是哪一个字段,它一定是某一个字段,取到值之后分到某一个属性里边就行了,知道吗?每次变出来一列,只要是这一行里边所有列都遍历完了,那么这些列都设置到这个实体类属性中。
35:02
那设置完了之后,再看这一个循环,就循环完了,循环完了之后呢,有一些数据,我们自己生成的这个这大家看这个自己生成IDO,还有从这个什么Excel文件里边解析出来的,还有哪些呢?对创建者创建者创建者和创建时间是不是还得自己生成啊,还得自己生成,我们再次什么再把我们自己生成数据也都也都在这儿生成,生成完了之后,那整个市场活度都生装好了,知道吧,所以大概还有俩数据,我们还是再封装一下,哪俩数据呢?对可谓的太阳是吧,是不是系统时间啊,系统时间都转成字符串,然后呢,New一个它new一个data知道吧,还有创建者side叫create,是create by,创建者是不是还是当前用户啊,对这个怎方来个user.get ID,这这样的话大看所有的市场。
36:02
所以这个是每次变成一横这个市场活动的,就生成一个市场活动对象,这个市场对象里边数据都从有的我们自己生成的,有的从这个exce文件解析出来,都封装好,封装好之后以前我们是直接打印,打印一盒一就一条记录都打印都么都打印完了,打印个换盒,现在我们就不用不往控制台上打印了,那我们怎么办呢?对,是不是放在一个绿色纸边批量保存一会就行了,所以这个地方这样把封装好的这每一行中所有的列都封装好,都封装完成之后,然后呢,把市场活动把艾特,然呢保存到什么list中,保存到list中,那保存到list中我得创建一个list了,创建一个list的,那我再循环体罐法创建一个list,然后呢,这个地方还个list list里边是一个一个市场活动设计对象,我这个地方。
37:02
I特别的例子等于六一个二为例创建好,然后呢大家看这个地方来保存一下它,然后呢保往list保存数据,咋保存对A然后呢,Activity把这个中国好的持续对象放入。每变成来一行,分成一个实体的对象,每变出来一行,分成一个实际对象,把这实际对象放到离子里边。那所有的行都便利完了,那这个list里边有好多数据了,好多数据之后,怎么这个地方我们都已经写到这一步了,对对,这个例子我们现在已经写到这一了,把数据封装好了,下边调surface的方法保证数据,所以我们这个地方继续来调用。调用service的使用方法,然后呢保存,然后呢市场活动保存,把这些市场活动全保存起来,那调查的哪一个方法,就是咱们刚刚写的这个方法点叫save by list,把activity list保存出来,这然后得到一个影响记录条数it杠他。
38:15
这样的话,看看我们这个地方已经写到这一步了,已经写到这一步了,看吧。这时候我们这样,这个已经写到这步,那写到这一步,正写到这一步,然后下边根据处理结果生成详细信息,那根据处理结果生成响应信息,那生什么,那生成详应信息,它处理结果,我们这个写数据,我们也什考虑它写成功是失败了,出开始已经加工了,知道吗?那不管成功还是失败,将来我要生出这么一个阶层。我要生成这么一阶算,是不是我得把它们分成一个加构对象,里边1RETURN自动生成阶层,分成一个什么样的加构对象,对,就是咱们那个return object啊,然后呢,Return object,你有一个叫return object转就行了,然后呢,把我们这些数据往老边封光了,那王老封装大看这个地方,假如他这个不报异常,不报异常那这个方。
39:16
判判一下银行技术条数是不是大于零。如果大于零就成功了。等于零,那就失败了,哎,等于零是不是失败了。万一他上传这个市场,上传这个文件,万一没有数据好。没有手机号,这不打卡。也对的是吧,他也没报错吧,那怎么办呢?那就不判断了,干什么就这了,我往里边设置,只要不报异常,我们就认为成功了,只就认为成功了,那成功了,你说老师他成功导入多少条记录呢。那就是把这个什么对把它返回,那到时候可以他什么虽然成功了,他如果应行记的条数是零,那就什么成功导入零条数去,是不是也没导成功,就不不但是导成功了,只是没导入数据是不这样的,对于用户来讲来讲呢,是不是也不也不也不错呀,对也不错,所以那这个地方我们继续拉,按说来把它返回,那把这个影响技术调数返回,影响技术调数返回也是分装这里边转成接子,那分到哪一个属性里边。
40:23
对,这一个是提示信息是吧,啊,其实按理说我们要返回数据,是不是以前专门设置到这个属性来返回数据的,对直接把它返回ret返回就行,这是我们这的就行。好。哦,成功导入多少,一路也行也行。直接什么直接拼成这个message也行啊啊都行,反正你反正导入成功,你给他提示信息就行,好这样的话也也可以好,这样的话大概我们就分装这是成功了,那如果失败了,失败爆异常肯定就失败了。
41:06
那报异常失败了,失败来一个叫set是吧,Code code来一个contain,然后呢,这个地方来一个叫失败了,报异常肯定失败了,然后呢点set,然后呢,这个message告诉到,那就系统旁点示多,然后呢,或者请稍后重示是好,这是我们这,然后最后把它返回就行,这是我们上。好,这样的话呢,我们这个整个这个CT就行了。CTRL这卸完了,下边我们这个就就可以什么后台就写完了,后台写完下边可以写前台了,前台也比较麻烦,前台也比较麻烦,就前台为什么麻烦前台,因为我要用阿贾克斯上传文件了。用阿贾克斯上传文件其实也比较麻烦,那这个地方我们一会儿再写这个,当下边大家休息会儿休息,我们来看看从前台上传文件打这个阿贾克斯上传文件打打转啊。
我来说两句