浅析运费模板与运费架构代码及逻辑

后台-系统设置-扩展变量-手机广告位-内容正文顶部

一、运费模板架构

规范定义

area规范定义

  {

  "1":{

  "local_name":"北京","parent_id":0,selected_all:true,level:1,

  },

  "2":{

  "local_name":"河北省","parent_id":0,selected_all:false,level:1,

  "children":

  {

  "21":{"local_name":"唐山市","parent_id":2,selected_all:true,level:2},

  "22":{"local_name":"承德市","parent_id":2,selected_all:true,level:2},

  "23":{

  "local_name":"石家庄市","parent_id":2,selected_all:false,level:2,

  "children":{"24":{...},"25":{...}}

  }

  }

  }

  }

regions规范定义

  [

  {"name":"北京市"},

  {"name":"唐山市","name":"石家庄市",children:[{"name":"古冶区"},{"name":"开平区"}]}

  ]

  这个规范是前后端交互的重要规范,我们先定义在这里,在后面会用到。

模板地区名称显示逻辑

需求

  一、如果是全省包含则只显示省名字,顿号隔开,如选择了河北省,山西省全省的所有地区:

  河北省、山西省

  二、如果某个省的某部分市没有被选择,则直接显示被选择的市,如河北省只选择了三个市,山西省选择了全省,则显示为:

  石家庄市、唐山市、秦皇岛市、山西省

  三、如果某个市只选择了某些地区,则在此市后面用括号显示出已经选择的市:

  石家庄市、唐山市(古冶区,开平区,丰南区)、秦皇岛市、山西省

快递模板列表API

路径

参数

  无

返回值

  一个数组:

  [

  {

  "id":1,

  "name":"江浙沪包邮,其它15元",

  "seller_id":15,

  "type":1,//1重量算运费2计件算运费

  "items":[

  //一行规则运费是0,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"0",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  regions:《regions规范》

  },

  //另一个规则运费是15,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"15",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  regions:《regions规范》

  }

  ]

  },

  ]

前端处理逻辑

  循环regions,如果有children,则加括号显示出来,没有直接顿号加后面的地区名。

后端处理逻辑

  就是要将《area规范》的数据转为《regions规范》的数据

  相应的逻辑为:

  1、如果是省级且selected_all==true直接显示名字,如果selected_all==false,不显示省级名字,继续处理市

  2、如果是市级且selected_all==true直接显示名字,如果selected_all==false,先显示市,再显示子。

  3、只处理到第三级,也就是第三级一定显示在某个市区的括号里了。

模板的编辑

获取模板数据API:

  /seller/shops/ship-templates/{id}

  返回值

  {

  "id":1,

  "name":"江浙沪包邮,其它15元",

  "seller_id":15,

  "type":1,//1重量算运费2计件算运费

  "items":[

  //一行规则运费是0,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"0",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  regons:《regons规范》,

  area:《area规范》

  },

  //另一个规则运费是15,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"15",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  regons:《regons规范》,

  area:《area规范》

  }

  ]

  }

  其中的《regions规范》数据用来显示地区名字

  《area规范》的数据在点击某一行规则的编辑时弹出的地区选择器要使用。

模板的保存

前端处理逻辑:

  要将如下参数递给服务器端

  {

  "id":1,

  "name":"江浙沪包邮,其它15元",

  "seller_id":15,

  "type":1,//1重量算运费2计件算运费

  "items":[

  //一行规则运费是0,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"0",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  area:《area规范》

  },

  //另一个规则运费是15,续重1公斤,续费5元

  {

  first_company:1000,//首重或首计

  first_price:"15",//运费

  continued_company:1000,//续件或续重

  continued_price:"5",//续费

  area:《area规范》

  }

  ]

  }

后端处理逻辑

  1、保存《area规范》到相应字段

  2、将《area规范》中的数据转为地区id,逗号隔开,存在area_id字段中。

表结构变化:

  es_ship_template表去掉detial字段

  es_ship_template_child表去掉area_json字段

二、运费架构文档

1、运费计算类图

2、运费计算时序图

说明

  1.上图:进入结算页读取结算参数如上图时序图

  2.逻辑说明

  1、进入结算页面调用读取结算参数TAG进行计算。

  2、在RedisCartWriteManager的setShipping方法中调用setShippingPrice方法进行运费计算。

  3、在核心计算运费方法中setShippingPrice方法中需要调用getShipPrice方法进行运费计算,然后调用checkArec方法进行配送地区的校验。

3、提交订单配送区域检查

说明

  上图:在提交订单的时候对下单货品进行是否超出配送区域进行校验

  上述就是关于技术方面的内容了,想了解更多详情,可以持续关注易族智汇javashop,有任何问题,欢迎一起探讨。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

后台-系统设置-扩展变量-手机广告位-内容正文底部
留言与评论(共有 0 条评论)
   
验证码: