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

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

相关文章

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.