商城系统运费模版的设计与实现

2023-11-03 07:50

本文主要是介绍商城系统运费模版的设计与实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于商城系统来说,运费系统是必不可少的,最简单的就是在每个商品添加的时候设置此商品购买时候的运费,但是这个逻辑并不能满足用户的需求,无法按照客户的地址设置不同的运费,设置地区包邮,不配送等一系列的操作。那怎么能更快更简单的实现这个功能呢,这篇文章,我会将我开发CRMEB单商户系统时的设计思路拿出来和大家分享,希望大家看完能有所启发并找到更好的解决办法。

希望大家看完在动手,看一半就觉得自己行了,容易写BUG~

初版~

对于运费的计算来说,最开始就是要知道用户选择的送货地址,运费计算也不用过于精确地址信息,所以我在全国省市区的数据库里增加了城市ID字段,用户在添加地址的时候,将对应的城市ID也同时存储在用户的地址信息中,这样,用户在每次切换地址的时候,可以根据城市ID字段判断用户所处的城市。

接下来,先创建一个最简单运费模版A表,里面只有城市ID和运费,只要用户的城市ID就能找出你要付多少运费啦,但是当我设置运费的时候,发现了一个大问题,全国这么多城市,难道要一个一个的进行设置么?当然不,国家运输系统这么完善,只有很少的地区运费是不同的,我只要把不同运费的地区设置了就好。其他的,就让他用默认的数据就可以啦。于是,我创建了一条默认数据,城市ID设置为0,当用户的地址在数据里面找不到对应的运费的时候,我就给他默认的运费。

好,最简单的运费模版已经出来了,管理者可以简单的设置每个地区的运费是多少,在用户下单的时候按照地址计算运费就能得出对应地址的运费啦。

进阶版~

思考一下,商城里面包含多种多样的商品,总不能一件衣服和一台冰箱的运费是一样的吧,那岂不是很亏。所以商城里面需要多个运费模版进行不同的价格计算,我创建了新的数据B表来存储多个运费模版,包括模版名称,添加时间,A表内就可以增加B表内对应的模版ID,和城市ID和运费来计算不同运费模版下同一个城市的不同运费啦。

接下来,我考虑物流中会出现首件和续件的问题,那么我们地区运费就要增加续件的字段,来存储续件的金额,比如我购买了2件商品,商品的首件是10元,续件是5元,那么这个订单的运费就是首件加上续件的费用一共15元。

现在运费模版已经成型了,每个商品都可以使用不同的运费模版来计算整体订单的运费,购买多件商品,就可以按照不同用户地址,不同的运费模版,不同的首件和续件的费用,来确定当前订单的世纪运费了,接下来就是继续细化运费模版的其他功能了。

终极版~

江浙沪包邮?这个问题又出现在了我的脑海中,那我怎么能在模版中设置包邮信息呢?思前想后,我发现一个最简单的办法,就是把对应包邮的地址的首件和续件费用都写成0,计算的时候就不会增加运费了。

不过,如果是满多少钱进行包邮呢?如果说,我有一个上海地区的运费模版,我想用户在购买超过100元的时候给他包邮怎么办。我又开始了我的发呆时间。。。

想到了,我又给A表里增加了满额包邮的字段,用来记录此区域需要满额的金额,计算的时候将同一个运费模版下的金额加起来,只要大于了这个金额,我就直接跳过此模版的计算。

订单在购买多个商品,牵扯到多个运费模版的时候,可以在计算的时候按照运费模版进行数据的分类整理,计算出每个运费模版里面商品的件数,总金额,然后每个运费模版单独计算,先通过计算此运费模版是否满足了包邮,如果满足跳过后面的运费计算,如果没有满足包邮情况的时候,继续进行件数的首件和续件的计算,将每次计算出来的运费相加,就得出了最后的订单运费。

接下来,就是完善我们的运费模版了,模版名称,模版是按照件数、重量还是体积进行运费的计算,包邮是否还要按照别的情况进行计算。

CRMEB运费模版的实现

CRMEB单商户系统中的运费模版很强大了,不仅可以设置不同地区的运费,还可以判断运费模版是按照件数、体积还是重量进行计算。可以设置单独的包邮数据以及指定地区不送货的逻辑。首件和续件的金额计算可以设定首件件数。包邮同时判断了件数和金额。可以满足大多数商城系统管理者的需求。

运费模版的添加

后台添加运费模版的页面,填写运费模版的名称,选择该运费模版是按照那种计费方式进行计费(件数,重量,体积),选择对应的城市数据,添加运费和包邮信息等。

在这里插入图片描述

运费模版的计算逻辑

1.先获取到用户订单的商品和地址信息,将所有的商品按照运费模版进行分组整理,得到每个运费模版的商品总数,总价和此运费模版的运费金额,指定包邮信息等。 c a r t I n f o 变 量 里 面 存 储 的 就 是 该 订 单 下 所 有 的 商 品 信 息 , 包 括 金 额 , 件 数 或 体 积 或 重 量 , 对 应 的 运 费 模 版 I D 等 信 息 。 cartInfo变量里面存储的就是该订单下所有的商品信息,包括金额,件数或体积或重量,对应的运费模版ID等信息。 cartInfoIDaddr里面包含用户现在选择的的地址信息,用于最后查询包邮或者运费。

在这里插入图片描述

2.按照用户当前选择的地址,根据当前地址数据内的city_id查询当前地址是否在指定包邮的地区内,然后在判断商品件数和金额是否大于设定的件数和金额,满足条件在运费模版的数组中删除此运费模版的数据。

在这里插入图片描述

3.经过步骤2,$temp_num数组中,只会剩下需要计算运费的数据,系统接下来会在先计算出首件运费最大值,设置初始运费为0开始计算订单所需运费。

在这里插入图片描述

4.循环计算运费,将首件最大的运费模版设置为首件计算,剩余的模版都按照续件进行金额的计算,如果有多个首件金额等于最大值,会将多个运费模版当作首件进行计算,最后取得运费最大值返回。
在这里插入图片描述
如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

这篇关于商城系统运费模版的设计与实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336692

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import