java运费模板设计_电商系统设计之运费模板(上)
电商大伙每天都在用,类似某猫,某狗等。
电商系统设计看似复杂又很简单,看似简单又很复杂
本章适合初中级工程师细看,大佬请随意
前言
在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在其内的设计中,要考虑的问题还是很多滴,开始进入正题
运费模板
运费模板由
模板名称
是否包邮
默认运费
特定地区运费
四部分组成,所谓模板则就是设置这样一个框架,由多个商品多对一调用一个模板,通过模板设置的规则来计算配送费用,看似简单的功能,由我来拆解开跟各位聊聊。
运费规则
无论是默认运费还是特定地区运费,无非设置如下
默认几件内多少元,每增加几件运费增加多少元
特定地区则多几步设置
特定地区的运费规则可设置多个,对某个偏远地区,如西藏、新疆设置独立的配送费用
设计原则
在运费模板的设计上,应当遵循一个通用原则,难在新增易在查询,一个应用程序使用查询语句的次数要比插入多多了。当然也应该尽可能的做到增删改查都比较简单才是最佳。
首页整理下,运费模板使用的位置
后台的运费模板管理(增删改查)
前端实时计算运费
后端接收订单后进行的运费计算
后续的退款(如未发货,则应退运费)
在数据库设计中,尤其是电商相关的数据表设计,竟然会使用冗余的方法处理相关数据,意在永久保存用户在下单的时候产生的关联数据,这些数据不会因其他字表修改而变化。
数据表设计
本次对运费模板上的设计,采用一主表一子表的方式来做。
主表则是由简单的模板名称,是否包邮,创建时间构成,表结构如下
CREATE TABLE `product_template` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称',
`type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型 0 自定义运费 1 包邮',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
而子表为运费规则表,也是运费模板的核心灵魂,直接决定了是否会简化增删改查的复杂度。我以一对多的方式来设计规则表。将默认运费与指定运费合并在一个表内,表结构如下
CREATE TABLE `product_template_rule` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`template_id` int(11) NOT NULL COMMENT '模板编码',
`city` text COLLATE utf8mb4_unicode_ci COMMENT '城市',
`default_number` int(11) NOT NULL DEFAULT '0' COMMENT '默认数量',
`default_price` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '默认运费',
`create_number` int(11) NOT NULL DEFAULT '0' COMMENT '新增数量',
`create_price` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '新增运费',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
通过template_id查询指定运费模板内包含的所有规则,因为默认运费是不需要选择城市的。所以则为 (Laravel 代码)
ProductTemplateRule::where([
['template_id', '=', $templateId],
])
->where('city', '=', '[]')
->first();
而指定城市批量查询出来则使用
ProductTemplateRule::where([
['template_id', '=', $templateId],
])
->where('city', '!=', '[]')
->first();
规则查询就这样简单的完成了。查询如此简单,插入其实也并不是太难,代码如下,前端通过JSON方式将已设置好的模板规则发送到后端,如果是默认运费模板则城市为空JSON,JSON格式如下
[
{
'city'=>[],
'default_number'=>1,
'default_price'=>1.00,
'create_number'=>1,
'create_price'=>1.00
},
{
'city'=>['北京市','上海市'],
'default_number'=>1,
'default_price'=>1.00,
'create_number'=>1,
'create_price'=>1.00
}
]
最终的创建运费模板的代码如下
public function create(Request $request)
{
$template = new ProductTemplate();
$template->title = $request->title;
$template->type = $request->type;
$result = $template->save();
if (!$result) {
throw new \Exception('创建失败');
}
$config = json_decode($request->config);
foreach ($config as $item) {
$rule = new ProductTemplateRule();
$rule->template_id = $template->id;
$rule->city = json_encode($item->city);
$rule->default_number = $item->default_number;
$rule->default_price = $item->default_price;
$rule->create_number = $item->create_number;
$rule->create_price = $item->create_price;
$rule->save();
}
}
本章对设计表和如何创建做了详细讲解,下章说说应当如何计算运费效率最高~
致谢
感谢你看到这里,希望本篇文章可以帮助到你,谢谢。
java运费模板设计_电商系统设计之运费模板(上)相关推荐
- java运费模板设计_电商系统设计之运费模板(下)
电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...
- java电商快递费收取_电商系统设计之运费模板(上)
电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...
- php电子商务模板,关于php:电商系统设计之运费模板下
电商大伙每天都在用,相似某猫,某狗等. 电商零碎设计看似简单又很简略,看似简略又很简单 本章适宜初中级工程师细看,大佬请随便 [腾讯云]云产品限时秒杀,爆款1核2G云服务器,首年99元 前言 在订单零 ...
- PHP电商运费模板,电商系统设计之运费模板(下)
电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...
- 电商系统设计之运费模板(上)
电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...
- 电商系统设计之商品(上)
电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂.本章适合初级工程师及中级工程师细看,大佬请随意 1. 前言 商品的设计在电商系统中占据重要地位,如何设计出高扩展 ...
- 快照设计 电商系统_电商系统设计之购物车
本章适合初级工程师及中级工程师细看,大佬请随意 前言 问 [不存价格字段不行吗?直接查询商品表获取价格] 答 [如果价格更新,应提示用户,商品的浮动信息.可以选择直接更新购物车,或者单独建立一个表,来 ...
- 一个页面区分管理者和普通用户如何设计_电商系统:优惠券原型设计说明(二)...
编辑导读:在整个产品发展的整个周期中,运营活动必不可少,而发放优惠券已成为运营活动的一种基本形式,而关于优惠券设计就尤为重要.本文作者分享了优惠券后台页面的相关设计步骤,推荐给对优惠券感兴趣的童鞋阅读 ...
- 支付退款流程设计_电商订单系统,你该如何设计
文章来自:https://baijiahao.baidu.com/s?id=1602959656926168475&wfr=spider&for=pc 作者:人人都是产品经理 点击加入 ...
最新文章
- (C++)201709-1 打酱油
- torch.nn.BCELoss用法
- cogs 539. 牛棚的灯
- php实现微信清粉功能,PHP实现微信提现功能
- 2017年10月08日普及组 世界语
- QT的QStatusTipEvent类的使用
- win10水印烦死了_win10系统下word去水印的方法【图文】
- php导航栏代码子菜单找不到,php – 下拉导航菜单,显示每个类别的最新帖子
- ubuntu 安装nvm
- springsecurity安全登录框架
- gensim实现TF-IDF和LDA模型、sklearn实现聚类
- 如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
- 迭代扩展卡尔曼滤波学习
- 七彩虹主板进BIOS设置和打开启动项菜单快捷键
- 基于ZedBoard的Webcam设计(二):USB摄像头图片采集+QT显示
- php自带的basename函数尽然不支持中文
- 从签到功能到用户激励体系——产品经理项目实录
- 中控指纹考勤机使用实战
- CRM系统是什么?为什么使用它?
- 时间格式进行加减运算,偷懒必备(60进制转10进制)
热门文章
- 【行业研究】中国智能投顾行业
- 万亿级重磅!刚刚,新一批基金投顾资格正式获批!广发、博时、招商等在列
- windows安全防御
- 我有几个同事去了趟以色列
- 那一日,人类想起了被开学支配的恐惧
- 无线互联北京培训基地第49期学员李天游
- android检测sim卡状态,android 判断网络连接、sim卡信息以及ping操作是否网络连接正常...
- SpringBoot2.x系列教程(七十)Spring Boot Actuator集成及自定义Endpoint详解
- 前端开发神器Hype3初体验-可视化、响应式、动效
- 202203电子学会青少年软件编程python三级真题