00:00
看的内容这个啊,咱天广告正常吗?锁住了是吧,没有是吧,重新来一下是吧,那咱们呢,来把昨天东西给大家回顾一下啊。呃,昨天呢,咱们其实主要给大家介绍是关于我们这个,呃,订单明细,它的一个实货金融分摊对吧?那么首先呢,你得知道咱们当前呢,它的一个背景什么样的,说我们现在呢,在我数据库里边,诶,它有一些我们这个表对吧?那其中呢,我们现在这个做的是什么?做的是电商,做电商的一些表,那么其中呢,有两张表对吧,那是和订单相关的,一个呢,是我们这个order in inform,一个是order detail,对一个订单,一个是订单明细,对吧?那订单明细和订单他们之间的关系啊,那你肯定知道对吧,就是我现在呢,对吧,买一个东西,然后呢,我可以下个订单,但是在当前的订单里面是不是可以包含好多个的订单项啊,对吧,好多订单明细对吧,也有叫订单项的对吧,其实呢,这里面表示就是你买了什么商品,买了多少个对吧,那么他们之间呢,这几个关系对吧?在做咱们的项目之前呢,你就得明确对吧,什么关系呢?一个是在咱订单里边对吧,那么有这么几个价钱,有这么几个金融对吧,一个呢是我们。
01:22
这个对吧,这个实付总金额对吧,叫final total amount,那另外一个呢,是我们这个原价金额对吧,Original,然后total amount,还有一个呢,是我们这个优惠金额对吧,Benefit,然后reduce amount,还有一个呢,是我们这个运费啊,Benefit,那么咱们现在呢,这几个金额,他们之间的关系怎么样的呢?那应该是对吧,我们现在啊,这个实付的总金额,对,也就是说我们现在这个金额对吧,我们现在这个金额它等于什么呢?它等于我们这个原价金额,然后减去我们的优惠金额,再加上我们的运费,对加运费,那么你像这两个东西啊,什么优惠金额呀,或者运费呀,它是针对谁来说的,是不是针对我当前订单来说的呀,等于说我当前这个订单对吧,它整体优惠多少钱,对我的订单的整体的运费多少钱,它针对的是我们的订单来说的,对吧,所以说呢,那咱们现在呢,这个订单里边可能啊,会有我们的多个订单明细,对吧,那如果加上我们这个优惠金额,或者加上运费之后。
02:22
那么分摊呢,我们现在每个明星的价钱呢,它就不一样了,对吧?所以说呢,我要来计算一下对吧?那么如果说我把这优惠金额减掉,我把咱们这个原价啊,就把这个运费呢给加上对吧?那么它最终的它的一个我们的分摊金额是多少,这个呢,是我们现在要算的东西啊,这是我要算的东西啊,那么如果你现在想要算它的话,那大家想一想,我们现在呢,那你光靠一个我列表的数据,这搞不定了对吧?那你肯定呢,得需要两个表的数据对吧,一个呢是订单,那么另外一个呢,是我们的订单明细对吧,一个订单,那另外一个呢是我订单明细对吧?呃,那如果要是订单的话,那么咱们前面呢,在这里我们已经对订单的它的一个实时表数据做过处理了,对怎么处理的呢?对吧,如果说我现在呢,注意啊,大家注意这个东西,咱们现在这个业务数据是不是通过我的价包模拟出来的呀,对你们的生长环境没有这个东西,对没有什么咱们这个假包这个数据是不是直接就到在数据库里。
03:22
出来了呀,对吧,然后呢,咱max它可以去监听到我们现在它的一个新增和变化的一个数据,那这里主要针对谁呢?主要针对我的订单,还有订单明细,对吧?那么这两个实时表,然后如果他们有新得变化了,那么这个时候呢,Max表会把咱们新得表数据给采集到我们这个抛给里们来,对吧,但是这个所有数据呢,都在咱们一个topic里面,这肯定不行,那怎么办呢?咱们在这里是不是有一个叫base DB master APP来读取我们当前的这个主题的数据,然后对它做了一个什么呢?对,是做了一个分流操作,怎么分流的呢?对吧?那么这里我们呀,把这个表名给取出来,对,因为我们知道,那么你现在呢,如果说要把这个数据采集到我们当前卡卡主题里边,那么它呢,是以JS的形式呢,帮你封装的一些东西,咱们可以通过这些对象里边来获取,比什么type呀,你做什么操作对吧?什么咱们table啊,你操作哪张表,什么咱们date呀,你操作数据是什么?对,那这里呢,其实我们现除了must之外呢,还有一个叫kel。
04:22
Kindle和ma它俩区别是什么地方?同学们,Ma可以处理历史数据,但是Kindle不行。对吧,然后接下来呢,还有什么对基本数据类型的处理开头呢,会给它不这个这个转成字符串,对max表是不是就还是原始类型啊对吧?还有吗?它俩是一个轻量级一点单,Well,为什么?因为咱们现在呢,这个如果要是kind的话,他是不是把咱们这个这个这个数据类型也给传过来了,对吧?然后还有一个比较重要的一个区别,就是咱们如果K的话,它这个数据呢,对吧,它是整合的一块放在一个数组里,对吧?咱们这个操作这个影响力一条一条数据对吧,它是封到一个直接对象,然后放在一个对的数组里边,但是我这八它这个数据是不是单个单个的一个直接对象,对吧?哎,那么这块呢,是它的一个五的区别啊,它的区别,然后接下来呢,那么咱们现在呢,那通过我们现在不同的一个表名,然后呢,把我数据来放到我们不同的一个,我们这个,呃,这个topic中,对吧。
05:33
那这相当于给他做了一个我们的处理,那这块呢,作为我们整个啊,我实时业务的这一个ods层啊,其实就是原始数据这一块,对吧?然后接下来那我现在呢,有不同的一个SPA推程序,然后呢来从咱们这里边来读数据,那么在读数据的时候注意啊,那我现在本身呢,我现在目前这个业务对吧?那我需要什么,我需要呢?那我这个订单对吧,和订单明细对吧?那么大家想一想,咱们现在在做我这实物分担之前,咱们是不是已经做了一个首单分析的,那么首单分析的时候,咱们是不是和这个东西是没关系的,但是我现在如果是我现在要植入分担的话,是不是这东西有关系,所以说呢,大家在做我们这个项目的时候啊,你要考虑的长远一点,对吧,你要考虑长远一点,比如说就像我一开始给大家说的,说你如果光看咱们现在的第一个需求的话,说把首单给我这个什么给他给我,给我统计出来,那大家可能想到,那我就把数据读到,然后判断说首单首单留着,然后不非首单的给过滤。
06:33
去掉,那你说你后续的功能你是不是就没办法进行了呀,你就做不了了,对吧,所以说呢,大家注意啊,咱们现在这里我呢,对,为了我这个整个就是整个咱实施这个项目对吧,这个设计的什么呢?设计的我们现在对吧,就灵活一点,所以说呢,那你在这里对那可以不同的一个分层对吧,然后其实每一层呢,都可以不同的一个维度的一个统计,就像昨天呢,有一个同学跟我聊。跟我聊什么呢?说现在呢,基本上拿了几个offer,然后但是呢,在网上聊的时候,对这个基本上到CTO级别了,到C级别给聊什么呢?就是你们现在做不管是做实时项目还是做离线项目,对吧,你们大部分做的工作目前是不是都在做ETL,你们现在其实大部分数都在做数据清洗这些东西啊,对吧?那么咱们做出的数据清洗,你的数据质量怎么保证?
07:22
对,你的数据的质量是什么?对吧,或者说怎么去保证你这个数据的价值对吧?其实大家想想,如果说我现在再往后走的话,那可能涉及的些什么呀,积极学习啊,或者什么一些,咱们这个对,这个用你的数据对或者是统计分析来做,你用你的数据对吧,但你的数据呢,怎么样有价值对吧?那目前呢,其实这个东西也没有一个固定答案对吧,但是呢,有从几个方面可以去保证,首先第一个对吧,咱们这个图清洗的时候呢,你把规范给我制定好对吧,把规范给我制定好对吧,就如说你先提前协调好对吧,协调好对吧,比如说我现在呢,在他清洗的时候,这里设的日期,只要是日期,咱们都统一成什么什么格式对吧,只要是日期,咱们呢,为了我以后的处理的维度方便,咱们都给它加上我们的天,加上小时,对吧,那以后我在统计的时候,不管什么什么什么样的数据,我是不是都可以,诶以我的小时的维度来进行统计一下呀,对吧,这是一个啊是一方面对吧,比如说我现在对只要是对,比如有只要是年龄,那咱都加了一个什么限制,对在多少多少时间啊,只要性别呢,咱们就走这这个限制其实。
08:26
这也可以有规范啊,就相当于我在这里做一规范,那么第二个你要想保证你的一个价值的话,注意你在清洗的时候一定得对你的业务呀有所了解,对吧?假如说同学们,我现在我对我业务不了解的话,同学们我就说我光看的时候,我光看到咱们订单是吧,他那个首单分析对吧?那我现在就就就维护你就就就来是吧,实现你首单分析的功能呗,我直接把它首单给过滤出来,然后对我首单数据进行分析,这个东西也不算错误,对吧?但是大家想一想,我作为一个我们长期的一个大数据分析人员来讲,对吧,我现做的电商项目对吧,那我既然要做分析,我不肯定不光要分析订单,我肯定呢对订单明细也要做分析,那如果以后你要对对对订订单明细做分析的话,那大家想一想这个东西,我现在到这儿就把你的订单的一个什么的首单保留,其他非首单过滤掉了,那以后怎么分析啊,没办法进行了,你这种做的程序就相当于你仅仅局限于首单了,别的地方用不了了,对吧?但是咱们现在这里不是这样,我首单我是不是可以用在咱。
09:27
后边我15分摊的时候,我是不是还可以用对等以后其他的,比如说我现在我想统计一下,咱们今天呢,把它的一个交易额到这东西也可以啊,也可以再用的,对吧,所以说呢,这个东西要灵活一点啊,这东西灵活一点对吧?诶那么咱们现在呢,在我们这里对吧?那么如果只是首单的话,那我们呢,把订单数据给读出来,然后接下来,那么因为我在判断首单的时候呢,那我要的判断一下当前用户是不是首单,那么怎么判断呢?我们是这样的对吧,我们想保存用户他是否是曾经在我下过单这个状态。
10:02
对吧?那么这个状态它保存在哪呢?对吧?其实大家想一想,这个东西咱们什么是否首单呢?是否登录过呀,对吧,是否投诉过呀,对吧,是否退过单呢等等,这个状态以后咱们肯定会用到,对吧,那肯定涉及到我需要对个状态呢做一个保存,那么这个状态的保存咱们一般可以放在哪?Red是不可以对吧?只要KV那些red肯定可以,对吧?但是你要想一想对么?如果放在red里边,那么你现在这个状态是有时效性的,还是一直要持久保存的,那么如果有时效性的,那你首选red对吧?因为red毕竟是一个内存数据库,它这个效率是不是非常高的呀,对吧?但如果说我现在要持久的保存,那么这个时候呢,Red可能就不太合适啊,Red可能不太合适,因为什么?因为咱们现在一直往内存里面写嘛,对吧,但是这块呢,其实啊,这个也看对,就比如说我现在我的业务量不是特别大,对吧,那我就是有一个red短文里放数据,这也行对吧,这也行对吧?哎,那咱现在呢。
11:03
啊也可以啊,我们对吧,这个选red或者选谁呢?我们这选的是h base啊选h base,那么如果选h base的话,那第一个我H里放的一个是否首单的用户状态对吧?然后第二个,那我现在想统计首单的话,那么这里呢,我得去按照省份以及呢,用户的性别以及年龄段对吧?这几个维度来进行统计,那么这个时候咱们在统计的时候,那是不是又得把我们这个省份和用户信息给做一个关联呀,对吧?那这里涉及到订单以及我们现在这两个维度之间的关联,那么注意啊,我们现在这里边呢,订单我们说它叫事实表,对,其实和我的业务数据呢有关系,这个东西呢叫维度表,那么维度表示热,它的区别应该在什么地方呢?对吧?一般维度表不会经常发生变化啊,然后另外一个维度表应该在事实数据存在之前,它就已经存在了。啊,它就存在了对吧,那么咱们现在这里边我这个维度数据对吧,那么怎么来的呢?怎么来呢?对吧,那么也是本身像省份呢,像用户信息啊,这些数据是不是也在我这个数据库里边,对吧?但是呢,他应该啊已经存在数据库了,对吧?那我现在这里我需要对我历史数据呢,来做一个处理,那怎么处理的呢?对吧,那你可以直接这样,对吧,从我们现在这里使用我们这个must,它的一个工具叫我们这个bootrap啊,叫bootrap,其实同学你也可以这样,同学们假如说啊,我这里如果不想做实时监控的话。
12:30
我现在就是就想把这个数据拿到我们的h base里边来,你也可以单独写一个程序干什么呢?从我这里读数据,然后接下来把它写到我的h base里边,就你单独写一个程序,指拟一遍就行了,短你也可以不用说起出马,然后从咱们这里边来读,对吧?你可以单独去写一个程序做这个事,对吧?那我现在呢,我又让他去发送了,卡不卡,我又写一个咱们SPA streaming程序来监控的,这样做的好处是什么?是不是一旦我现在这个数据发生变化,我是不是可以实时的把这个变化给拿到,对吧?可以实时把变化给拿到对吧?然后接下来把变化拿到之后呢,咱们也是啊,把它写到我们这个啊,这个卡夫卡写到我的HP里边来啊,也是把它写到我的HP里边,注意啊,这些东西,有些同学可能会想,咱们往HP写的时,我教什么方法,同学们是不是RDD,它里面有一个叫什么Co to菲尼克斯是不是这个方法呀?那你看这方法名叫什么叫Co。
13:31
菲利克斯,对吧,那我如果说我现在删除了一个用户,你说怎么办?啊,你去找有种吕幕吗?没有对吧,同学们一般在做咱们这个分析的时候,你不会接受删除操作对吧?一般在做咱们这个分析的时候,你不会接受删除操作对吧?如果说咱们现在这里数据这个是发生变化了,那这个东西呢,那你需要对咱们这个对吧,就相当于对我这个对吧,这个维度数据,原始数据需要做一个改变对吧,一般这样的对吧,然后接下来呢,咱们再往下走对吧,再往下走对吧?那我们现在呢,把我们的首单给完事了,那么首单完事之后呢,那这个时候呢,咱们就得考虑对吧,那我们现在对吧,这这这个这这个这个订单就完事了,那接下来咱就得考虑食物分摊,那么食物分摊呢,那这里同样呢,对,我要从我们这个,呃,这个order detail里边来读取数据,所以说呢,我写了一个order detail APP啊,它同时里去读,然后读完之后呢,它和咱这些维度表啊来进行关联,对吧,那么咱们现在有这么多和维度性关联的,其实我们用了主要三种方式,第一种呢,咱在关联。
14:38
填的时候是不是一条一条的关联呀,对吧,就是每条记录过来,然后呢,我去拼接一条咱们circle口去执行,说这样不好,然后后来呢,咱们说这个可以再优化一下,咱们是以分区为单位,对吧?然后呢,一个分区拼接一个circle口,然后咱们去执行对吧?然后咱们后来说这个呢,还可以再去优化一下,短期实这东西也不算优化啊,就是咱们现在这个以分区为单位,还有什么呢?广播变量这种形式,它其实呢,不能说广播变量比以分区为单位这个U对吧?你得选择,根据你的实际情况选择对吧?那么如果说我现在以分区为单位的话,那大家想一想,它是不是一个分区,然后执行一个circleq呀,那么如果是用广播变量方式的话,它是什么?是是一个采集周期都要执行一个circleql,但大家想一想,那么如果说我从咱们SQ执行的一个的这个这个次数的角度上来讲,那肯定是我们现在广控变量这个方式完胜,但是呢,那么人家一开始以分区为单位进行处理的话,咱们在专网端。
15:38
我是不是不需要去创建咱们当前这个对象的来存放咱们的数据啊,但如果说你现在有广播变量的话,那么你除了的节省我们这个exq端内存之外,你在咱们driver端,你是不是还得有一个东西,这还还得有个内存来保留咱们现在数据啊,对吧?所以说呢,他加大了对咱们driver内存的一个压力,对吧?所以说呢,以前大家可能听过说我们现在广播变量,广播变量,广播什么变量和广播大变量,对吧?但是你看一看你们在整个集群环境里边,你们这个driver和a quarter它的一个这个资源分布情况什么样的,如果说我现在呢,在咱们这里边啊,我现在driver本身压力很大的,对,那如果压力很大的话,那这个时候对吧,你如果能不选国变量,那你就可以把这个这个方式呢给pass掉啊,本身我现在内存比较吃紧,那你不要再咱们这个标砖再去定义别的样子嘛,对吧?哎,所以说这块呢,要给你的一个实际情况去选啊,实际情况选对吧?呃,然后接下来呢,那么咱们在这对吧。
16:38
这个完事之后,那我们呢,又进入比较重要的内容了,什么呢?说我现在啊,这个订单啊,和这维度关联,它这一块格有了,那么订单明细对吧,和维度关联,这个宽表有了,那么接下来我要统计实付金额的话,那么是不是应该用咱们订单和订单我们的明细,他俩去做一个我们的join啊对吧?那么在哪做join呢?短呢,首先在想到说能不能这样,我的订单数据啊已经保存ES了,然后呢,我订单明细也保存ES了,然后让他俩去做一个我join,对这个行不通,为什么呢?ES它本身不支持咱多个索引的join啊,它支持不了啊支持不了,那如果E然做不了的话,那咱现在在哪呢?我是不是可以把咱当前处理个数据再写到卡不卡,然后我重新在程序里边来对应做照呀,对吧,所以说呢,那我现在把订单和订单明细它的数据呢,又重新呢,写回到我们这卡卡里边,那么这个时候呢,它就进入到我们的DWD层,对吧,相当于我现在呢,就做一。
17:38
总力要处理了,对吧,那我们现在在这里边干什么呢?你要从咱们这里边,要从咱当年DW利地层,从咱这两个主题里边把数据读到这和原来不一样,原来呢,咱们是通过SPA程序的,然后呢,读我们现在一个主题,现在呢是两个主题,而且这两个主题啊,它俩还得关联在一块,等于就是连接在一起,怎么连接通过咱们join的那一开始呢,我们说要想读这两个主题啊,这个很简单,对吧,就按照咱们原来的套路对吧,一步步的来这就行了,到一步来就行了,但是呢,同学们,那么咱们现在除了这个要读它这个主题之外,咱们是不是能把正文这一起啊,但是正的话我不能直接照,为什么呢?因为如果直接照的话,咱不能保证,对吧,一个采集周期里边是把订单和订单明细的数据,对吧,同一个订单,同一个订单明细的数据是不是都可以采集到,对吧?那所以说咱们现在呢,得想一想双流中文呢,他如果直接中文会有问题,那么咱们为了解决这种问题,那。
18:38
会有两种方案,那么一个什么呢?一个是使用我们个缓存的方式来进行解决,那么另外一种呢,是使用我们这个划窗的这种方式来进行解决,那么如果缓存性解决的话,那么这两个对吧?那它的思路什么样的,你得能够说出来。短接点能说出来对吧?如果使用缓存的方式去解决的话,同学们,那我需要用我们的A和B这两个段这个流来进行什么呢?来进行全外连接,那么如果进行全外连接的话,它的返回结果那只会有这么三种情况,对吧,Some some,然后呢,No some,以及呢,咱们some no,对吧?然后接下来咱们根据这三种情况来判断,对吧?那我当前呢,我的数据应该去缓存里面拿呀,还是怎么办,对吧?比如说你看我现在这sum sum说明什么,比如说我以订单A代表订单B代表订单明细说明什么,说明在咱们当前一个残疾周期里边,订单和订单明细是不是都有了,他可以直接关联上,大家想一想,那么这是这种情况,我应该干什么,我应该干什么?
19:40
如果要是缓存的话,我需要把它放缓存里,把它放到缓存中去,第二个代表订单明细吧,同学们,订单明细你是不是已经和订单已经关联了,是不是已经处理过了吗?处理过了你还需要我的方法什么,不需要了呀,对吧?但是我现在是不是有可能我其他的这个当年订单的其他明细没出来呀,所以说你是不是应该把它放到华存中去啊,对吧?然后接下来,那么如果是这种情况呢?对吧,这个是,那然后呢,这是sum说明什么,说明咱们现在这个订单明细有了,但是订单没有,那你想一想,订单没有,有可能在哪,有可能在缓存里边,所以说你是不是应该先去ready里面找一下,对吧?那么如果说我现在缓存里没有的话,那怎么办?咱们是不是应该把它放到我们现在对那个软扭曲对吧,然后接下来在这里再往下走,那如果这种情况的话,那就是说相当于我现在这个订单有了,但订单明细没来对吧,那咱们就在这等一等呗,对吧,肯定把这这就放到缓存里边来等一下他们对吧,那这块呢,就根你这块写代码,那么这种方式呢,就是说我直接呢,能够把咱们这个现在对吧这个东西。
20:40
这给他把这个处理好,但是呢,这个写法比较麻烦,尤其是我们现在这个需要转的人比较多的情况下啊,需要转都比较多的情况下,对吧?那我们现在第二种方式什么呢?第二种方式是划窗,呃,第二种方方式是我们这个滑动窗口的方式,注意啊,这个窗口呢,咱们有一个window,但是呢,咱们在window里面是是指定了第一个是窗口大小,第二个是不是不长了,对吧?那么如果说步长和咱们现在的窗口大小相等的话,同学们这是一种特殊情况,它不叫滑窗,它叫滚动窗口对吧?它叫滚动窗口,那么咱们现在这里说我要通过什么呢?我要通过滑窗来解决,就这种方式啊,这里一个窗口啊,这个窗口它它大小和咱现在窗口大小滚滑动不长,窗口大小如果一致的话,这样说,这滚动窗口的滚动窗口它解决不了,咱现在重这就这这个问题啊解滚动窗口解决不了对吧,那么咱们现在呢,那我要使用滑动窗口,那么如果滑动窗口它所带来问题是什么呢?它所带来问题就是有可能啊这个数据会重复对。
21:40
啊,那么数据跟重复的话,那咱们是不是得对数据来进行驱重啊,怎么驱重的,那我们现在这里边是不是用red呀,对,其实大家想一想这个东西以后只要你们公司对吧,这个也用red,然后涉及到驱重地方,你是不是都可以考虑一下,我可以借入于我的red对吧,来做一个驱重嘛,对吧,只要他登,比如说我现在是不是登录过,对我现在把登录状态放里往里放对吧,我就可以把这个状态放在咱们这red里边,对吧?来判断一下嘛,对吧,来判断一下对吧?好了,这是关于我们现在的它的一个,我们那个双流转,然后双流join完事之后呢,那么接下来咱们呢,就写的是实付分摊的代码,对吧,那大家呢,昨天我不知道把这个东西。
22:22
对吧,这个分析的怎么样对吧?这个东西分析的怎么样对吧?说你要想完成实物分摊的代码的话,同学们这一块呢,这个大家这个分析的思路你一定要给弄明白对吧?就是支部分摊它这里面的关系对吧?这里有关系,一个是两个关系啊,一个是在咱订单中,对吧,总金额等于原价金额减一九加运费,然后另外一个对吧,订单中的它的一个原始金额等于什么呢?等于订单明细中它的每一项明细,它的商品的价钱乘以商品数量,它的一个累加和这两个你要都要给我弄明白,因为这个关系是不是也很重要,你要用这个关系干什么?同学们你要用这个关系干什么?说判断是否最后一条了,对吧,咱们是用这个关系来判断是否最后一条对吧,那么具体咱们这个怎么来对吧,这个分析的呢,我们是结合实际数据的,比如说啊,假如说在咱们订单里边有一个订单ID为一,然后呢,它的一个的实付金钱是100,对吧,但是呢,原价结。
23:23
都是90,说明有十块钱呢,是运费呗,对吧,那大家想想,那我现在呢,如果是这订单这样的话,我订单明细什么样的,那比如说我三个商品,每一个商品呢,都是30块钱,对吧?每一个商品都是30块钱对吧?那然后我都买了一个,那大家想一想,那这样的话,咱们现在这里是不是有个关系,这个90呢,应该等于30乘以加30乘以加30乘一是不是应该等于它们三个对吧?这个相乘之后累价的和呀,对吧?那我现在每一个商品它占咱们原价这个百,这个个比例用多少呢?那应该是比如说A这个商品对吧,它占的比重应该是30,然后呢,比如90到比之90,那得到1/3B的商品呢,它俩相乘,然后呢也是30,然后之90对吧,然后这个呢,也是它相乘,然后三十九十,我发现每一个商品占咱们这个原价金额的是不是这个比重是1/3啊对吧,然后接下来,但是呢,我现在呢,那实际付了100块钱,那实际付了100块钱,那咱们现在这里边每一个商品分摊过来看多少钱,你是不是应该用咱们现在实付金额,然后再去乘以一个咱们刚才的比重啊对。
24:23
是吧,那么如果乘了比重的话,同学们,那如果说啊,要不是最后一条,这还好,你直接A1乘得到一个结果,但如果是最后一条的话,同学们,这个东西如果你一直乘3/3,乘1/3,这是不是有可能造成它数据不准确怎么办呢?所以说不是最后一条的话,那这个事你用我们这个乘除法,如果是最后一条的话,那你就减法就可以,减法是怎么做的呢?对吧?那么应该是用我实际的它的一个负的钱,然后减去咱们上面已经处理过的明细,它的一个累加金额的和嘛,对吧?然后最后得到的就是我当前最后一条这个明细,它的一个分摊金额啊,它的一个分金额,对吧?那么咱们现在呢,在咱们这里把这关系弄明白之后,对吧?那我们知道了对吧,这里这是我个写法,然后现在那怎么判断出最后一条呢?那我们就用刚才我们这个的公式对吧?这个公式如果当前商品它的一个价钱乘以商品数量等于什么呢?等于我们现在总的对吧,这个价钱,然后呢,减去我们已经啊处理过的订单明细的商品这个数量乘以累加和,那么这个时候如果相等的话,那它就。
25:23
最后一条对吧?那如果最后一条的话,你执行咱们这个操作,如果不是这条的话,执行这个操作,然后咱们就开始写代码了,对吧?写代码,那么写代码之前呢,那你想我现在呢,是不是得找两个地方来存一下我们这个已经计算完的明细的一个收付单金额,以及呢,商品的单价和数量,它那个累加和呀,那这样东西放在哪呢?我们也把它放到ready地去了,对吧?那么既然要操作ready,那我们在写代码的时候,同学们啊,既然要操作我们现在呢这个ready,那么咱们呢,在写代码的时候,对吧?那我们呢,也是以分区为单位来对它做的一个处理啊,也是以分区为单位来对它呢做的一个处理,对吧?那在咱这里头干什么呢?首先呢,咱们在这里先对吧,获取我们现在相关的什么呀,来获取我们相关的这个这个key value对吧,那我现在本身对我这里拿到了一个啊原始金额,它的一个累价和,然后分摊金额的一个累价和对吧,然后接下来咱们现在是当前到当前这条明细,它的一个单价乘以一个数量。
26:23
啊,当前这条明细它的一个单价乘以数量,然后接下来判断是否为最后一条对吧?那么根据他刚才的公式对吧?那如果是最后一条的话,那么它怎么来计算我们现在的个实物分摊对吧?那么如果不是六条的话,它怎么来计算,那么这里呢,咱们做了一个四舍五入对吧?然后呢,并且保留两位小数,然后最后咱们把这个ready的值呢,给做了一个我们的一个更新啊最后咱们把ready值做了一个更新,这个呢是关于我们现在呢,它的一个代码啊,这块呢是关于我们现在这个代码,那么整体啊,到目前为止,我希望同学们对吧,这个流程都给我说明白啊,实物分摊这个流程给我说明白,那么后面有时间的话呢,那我会找同学把这流程给我说一下啊,这个后边有时间的话,我会找同学把这个流程给我说一下。
27:09
好了,我们听一。
我来说两句