后台-系统设置-扩展变量-手机广告位-内容正文顶部 |
一、运费模板架构
规范定义
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,有任何问题,欢迎一起探讨。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。