`
javashop
  • 浏览: 45328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 商城系统基于脚本引擎的运费架构分享

阅读更多

脚本的生成过程

 

 
添加模板的时候生成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)原创文章

 

分享到:
评论

相关推荐

    Rhino脚本引擎技术介绍

    Rhino脚本引擎是JavaScript的一个开源实现,它能够运行JavaScript风格的脚本代码,并且可以通过这个引擎调用Java语言编写的方法。Rhino脚本引擎可以嵌入Java应用程序中执行,其最大的特点是脚本的修改不需要重启Java...

    Java 8 Nashorn 脚本引擎

    总的来说,Java 8的Nashorn脚本引擎为Java开发者打开了一扇通向动态脚本世界的大门,使得他们能够在Java平台上便捷地利用JavaScript进行开发,同时也为JavaScript开发者提供了与Java生态系统深度融合的可能性。...

    基于java的SnakeScript Java游戏脚本引擎 v1.1.zip

    《基于Java的SnakeScript Java游戏脚本引擎 v1.1》 在计算机编程领域,游戏开发是一项技术密集型的工作,而脚本引擎是其中的关键组件之一。SnakeScript Java游戏脚本引擎v1.1,正如其名,是一个专门用于Java平台的...

    JAVA源码SnakeScriptJava游戏脚本引擎v1.1

    5. **跨平台支持**:由于基于Java开发,因此SnakeScript Java游戏脚本引擎能够很好地支持Windows、Mac OS、Linux等多种操作系统,方便多平台游戏开发。 #### 三、SnakeScript Java游戏脚本引擎应用场景 - **游戏...

    Jill——Java编写的Lua脚本引擎

    **Jill:Java中的Lua脚本引擎** Jill是一个用Java语言实现的Lua脚本引擎,它为Java应用程序提供了一种高效且灵活的方式来运行Lua代码。Lua是一种轻量级的、解释型的脚本语言,因其简洁的语法和强大的功能在游戏开发...

    为Java应用程序加入脚本引擎

    ### 为Java应用程序加入脚本引擎 #### 一、引言 随着软件开发技术的不断发展,脚本引擎因其灵活性和可扩展性而在现代应用程序中占据了重要地位。例如,Microsoft Office中的VBA(Visual Basic for Applications)...

    java分布式系统架构源码

    本资源包含Java分布式系统架构的源码,并附带数据库执行脚本,使得用户可以直接导入、部署并运行,极大地简化了开发流程。 首先,我们要讨论的是Java在分布式系统中的核心概念。Java平台提供了一组强大的工具和框架...

    基于Java的实例开发源码-SnakeScript Java游戏脚本引擎 v1.1.zip

    【标题】: "基于Java的SnakeScript游戏脚本引擎 v1.1实例开发源码" 在编程领域,游戏脚本引擎是游戏开发中不可或缺的一部分,它允许开发者使用特定的脚本语言来控制游戏逻辑和行为,而不必深入到底层代码中。本实例...

    Java脚本引擎1

    Java脚本引擎1 在Java中,为了与各种脚本语言进行交互,如JavaScript,Java提供了ScriptEngine API,这是Java Scripting API的一部分。这个API允许Java应用程序执行动态脚本,或者利用脚本语言的能力来增强Java应用...

    基于java的黑马商城

    【基于Java的黑马商城】是一个综合性的网络商城项目,它主要使用Java编程语言进行开发,旨在提供一个完整的电商系统解决方案。这个项目包含了多种关键功能,包括用户管理、商品展示、购物车、订单处理以及后台管理...

    SnakeScript Java游戏脚本引擎 v1.1

    SnakeScript是一款JAVA游戏模拟脚本引擎,程序代码类似于C。  本版新增功能及特性:  1.动态优先级设定;  2.动态实现脚本的加载、释放、暂停、恢复、结束等控制;  3.自动堆栈平衡;  4.无限级别函数调用...

    基于Java的大数据系统基础B六边形架构设计源码

    本项目为Java语言编写的基于B六边形架构的大数据系统基础B设计源码,包含148个文件,涵盖30个JSON配置文件、24个Java源文件、23个JavaScript脚本文件、20个JPG图片文件、10个DS_Store文件、9个JSP页面文件、8个PNG...

    基于Java的房产中介系统【项目源码+数据库脚本】(毕设)

    本项目是一套基于SSM的房产中介系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都经过...

    基于SpringBoot的校园网上订餐系统源码+数据库脚本(毕业设计) .zip

    基于SpringBoot的校园网上订餐系统源码+数据库脚本(毕业设计) 、已获导师指导并通过的高分项目。 项目简介 本项目是一套基于SpringBoot的校园网上订餐系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战...

    JDK13-java-scripting-programmers-guide.pdf

    Java脚本引擎架构主要包括三个组件:ScriptEngine、ScriptEngineFactory和ScriptEngineManager。 * ScriptEngine:负责执行脚本代码,提供了脚本执行的核心功能。 * ScriptEngineFactory:负责创建ScriptEngine实例...

    脚本引擎 脚本解析器

    c 语言模式脚本解析器,脚本执行不是其目的。其作用是对PE文件进行编辑。暂且不论。 现在仅支持 if关键字、以及一些+-/* && || 等常规操作。 操作符支持优先级,但不支持括号。 今天调试成功,先放出来,让大家看看...

    java源码:SnakeScript Java游戏脚本引擎 v1.1.rar

    **SnakeScript Java游戏脚本引擎 v1.1** 在Java编程世界中,游戏开发是一个充满挑战和创新的领域。 SnakeScript Java游戏脚本引擎 v1.1 是一个专为简化游戏逻辑开发而设计的工具,它允许开发者用脚本语言编写游戏...

Global site tag (gtag.js) - Google Analytics