后台-系统设置-扩展变量-手机广告位-内容正文顶部 |
一、基于脚本引擎的运费架构
脚本的生成过程
添加模板的时候生成script,商家添加商品的时候拷贝相应的script到sku中。
更新运费模板的时候,发消息到消费者,批量更新相关sku的模板信息。
计算过程
缓存数据结构
script和模板id作为sku的一部分存储是为了计算使用相同模板的sku的总价。
脚本示例
functiongetShipPrice(){
varfirstWeight=1;//首重
varfirstPrice=1;//首重
varcontinuedWeight=1;//续重
varcontinuedPrice=1;//续重续费
varshipPrice=firstPrice;
//校验是否超出首重
if(firstWeight<$goodsWeight){
//续重=总重/续重
varcount=($goodsWeight-firstWeight)/continuedWeight;
//总价=首重+(续重*价格)
shipPrice=firstPrice+count*continuedPrice;
}
returnshipPrice;
}
返回值示例2
领域模型
伪代码
publicMap
//获取购物车信息
Cartcart=cache.get();
//获取购物车中的所有的sku
List
//获取所有sku中的key集合,用来批量的从缓存中读取脚本信息
List
//批量从缓存中读取所有的运费模板
List
//根据模板id进行分组,查询出所有用到相同模板的sku
Map
Iteratoriter=maps.entrySet().iterator();
//用来存储每一个商家的运费
Map
IntegersellerId=0;
Doubleprice=0.0;
while(iter.hasNext()){
List
TemplateScriptscript=sList.get(0).getScript();
//计算总重量
DoublegoodsWeigth=countWeight(sList);
//计算总数量
intgoodsNum=countNum(sList);
//调用脚本引擎计算价格
ScriptEngineManagermanager=newScriptEngineManager();
ScriptEngineengine=manager.getEngineByName("javascript");
engine.put("$weight",goodsWeigth);
engine.put("$num",goodsNum);
StringjsFunc=script;
engine.eval(jsFunc);
Invocableinvocable=(Invocable)engine;
doubleshipPrice=(Double)invocable.invokeFunction("price");
price+=shipPrice;
Integernewselelrid=getSellerId(sList);
if(!sellerId.equals(newselelrid)){
//记录这个sellerid的运费价格
shipPriceMap.put(newselelrid,price);
sellerId=newselelrid;
price=0.0;
}
}
returnshipPriceMap;
}
二、订单结算错误展示
概述
当点击提交订单按钮时,出现的错误如何展示。
接口
API
/api/shop/order-create/trade.do
Methed
post
PC端,App,Wap
传递参数:
返回值:Json
Json示例
{"code":001,"result":0,"message":"抱歉,您本单中的商品所在地区无货","data":[{"name":"商品111","image":"http://javamall.com.cn/111.jpg"},{"name":"商品222","image":"http://javamall.com.cn/222.jpg"}]}
注:为适应手机端,每次返回的异常原因只会返回一种。
根据以上内容可以了解到基于脚本引擎的运费架构与订单结算页面错误展示,想了解更多详情,可以持续关注易族智汇javashop。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。