脚本的生成过程
添加模板的时候生成script,商家添加商品的时候拷贝相应的script到sku中。
更新运费模板的时候,发消息到消费者,批量更新相关sku的模板信息。
计算过程
缓存数据结构
script和模板id作为sku的一部分存储是为了计算使用相同模板的sku的总价。
脚本示例
function getShipPrice(){ var firstWeight=1; //首重 var firstPrice=1; //首重 var continuedWeight=1; //续重 var continuedPrice=1; //续重续费 var shipPrice=firstPrice; //校验是否超出首重 if(firstWeight < $goodsWeight){ //续重 = 总重/续重 var count = ($goodsWeight - firstWeight)/ continuedWeight; //总价 = 首重 + (续重*价格) shipPrice = firstPrice + count*continuedPrice; } return shipPrice; }
参数 | 类型 | 详细 |
$goodsWeight | double | 商品总重量 |
$goodsNum | Integer | 商品总数 |
返回值示例 2
领域模型
伪代码
public Map<Integer, Double> setShippingPrice() { //获取购物车信息 Cart cart = cache.get(); //获取购物车中的所有的sku List<Sku> skuList = cart.getSkuList(); //获取所有sku中的key集合,用来批量的从缓存中读取脚本信息 List<String> keyList = getKeyList(skuList); //批量从缓存中读取所有的运费模板 List<TemplateScript> templateScripts = getCache(keyList); //根据模板id进行分组,查询出所有用到相同模板的sku Map<Integer, List<Sku>> maps = group(templateScripts); Iterator iter = maps.entrySet().iterator(); //用来存储每一个商家的运费 Map<Integer, Double> shipPriceMap = new HashMap<>(); Integer sellerId = 0; Double price = 0.0; while (iter.hasNext()) { List<Sku> sList = (List<Sku>) iter.next(); TemplateScript script = sList.get(0).getScript(); //计算总重量 Double goodsWeigth = countWeight(sList); //计算总数量 int goodsNum = countNum(sList); //调用脚本引擎计算价格 ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("$weight", goodsWeigth); engine.put("$num", goodsNum); String jsFunc = script; engine.eval(jsFunc); Invocable invocable = (Invocable) engine; double shipPrice = (Double) invocable.invokeFunction("price"); price += shipPrice; Integer newselelrid = getSellerId(sList); if (!sellerId.equals(newselelrid)) { //记录这个sellerid的运费价格 shipPriceMap.put(newselelrid, price); sellerId = newselelrid; price = 0.0; } } return shipPriceMap; }
易族智汇(javashop)原创文章
相关推荐
基于java的开发源码-SnakeScript Java游戏脚本引擎 v1.1.zip 基于java的开发源码-SnakeScript Java游戏脚本引擎 v1.1.zip 基于java的开发源码-SnakeScript Java游戏脚本引擎 v1.1.zip 基于java的开发源码-...
Java编写的Lua脚本引擎,可以用于JME
现代许多流行的应用程序...本文主要讲解BeanShell----这样一个Java应用程序脚本引擎,你会了解它的基本特性,及如何将它嵌入到你的应用程序中。你将看到,为自己的应用程序加上脚本引擎是多么容易的一件事情。 <br>
java毕业设计基于Springboot+Vue前后端分离的在线购物商城管理系统+数据库脚本.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足...
基于Java的SnakeScript Java游戏脚本引擎 v1.1.zip
基于java的SnakeScript Java游戏脚本引擎 v1.1.zip
ANT是一个基于Java的自动化脚本引擎,脚本格式为XML。除了做Java编译相关任务外,ANT还可以通过插件实现很多应用的调用。 1)ANT的基本概念: 2)ANT的安装:解包,设置路径 3)ANT的使用:最好的学习只不过是一...
本文介绍了Rhino脚本引擎,如何在Java中使用脚本引擎调用javascript,以及javascript和java间的交互,并给与示例代码。
此商城系统属于B2C电商,系统包括管理后台和网站前台。技术架构:项目采用传统的静态网页和动态网页相结合的技术架构,后端采用 servlet、jsp、JDBC等,前端采用div css、bootstrap、Javascript、jQuery和Ajax等。...
java开发基于SSM开发的人力资源管理系统源码。项目所具备的功能:账号登录退出,对员工的增删改查,对部门的增删改查 项目架构基于Maven 项目运行基于Tomcat服务器 项目语言基于Java 项目数据库基于MySQL 项目...
SnakeScript是一款JAVA游戏模拟脚本引擎,程序代码类似于C。 本版新增功能及特性: 1.动态优先级设定; 2.动态实现脚本的加载、释放、暂停、恢复、结束等控制; 3.自动堆栈平衡; 4.无限级别函数调用...
java 分布式系统架构源码,带数据库执行脚本,可直接导入,部署运行
本项目是一套基于SSM的电子商务推荐系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都...
前言:我们在学习了Java各种基础知识之后,最需要做的就是学会应用,开发一些项目把所学的知识应用起来,下面的这个《校园在线考试系统》实战项目就是比较好的练手教程。 业务描述:根据前面所做的需求分析及用户的...
JAVA源码SnakeScript Java游戏脚本引擎 v1.1提取方式是百度网盘分享地址
NULL 博文链接:https://1598623317.iteye.com/blog/2087516
【毕业设计】基于Java的批发商城后台管理系统【前后端源码+SQL脚本】.zip 【毕业设计】基于Java的批发商城后台管理系统【前后端源码+SQL脚本】.zip 【毕业设计】基于Java的批发商城后台管理系统【前后端源码+SQL脚本...
本项目是一套基于SSM的房产中介系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都经过...
手把手教你写脚本引擎,原理知识,包含部分代码
基于SpringBoot的校园网上订餐系统源码+数据库脚本(毕业设计) 、已获导师指导并通过的高分项目。 项目简介 本项目是一套基于SpringBoot的校园网上订餐系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战...