Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)

说明:订单抽成指的是向卖家收取相应的信息服务费.(目前市场上有两种抽成方式,一种是按照总额的抽成比率,另外一种是按照订单明细的抽成比率)

由于生鲜电商的垂直领域的特殊性质,总额抽成不切合实际,所以按照订单的明细抽成。

1. 订单抽成,是按照一个区的维度,以及菜品的二级分类类抽点的。

举例说明:比如武汉光谷区,佛祖岭区,虽然都是属于东湖高新,但是光谷区的物价以及消费水平肯定是高于佛祖岭区的,因此它是按照一个区的维度来分的。

但是有些卖家挣的钱多,有的卖家挣的钱少,虽然同属于一个菜市场,但是挣钱少的跟挣钱多的一样抽成,他们也不乐意,因此又按照卖家的ID进行抽查。

最终根据业务的形态以及我们的市场调查结果,采用以商户为基准,按照菜品的二级分类来抽成的一种盈利模式。

2. 数据库系统架构设计如下:

卖家抽点配置信息表:

CREATE TABLE `order_percentage_config` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键,自动增加ID',`region_id` bigint(20) NOT NULL COMMENT '区域id',`seller_id` bigint(20) DEFAULT NULL COMMENT '卖家id',`category_id` bigint(20) DEFAULT NULL COMMENT '商品二级分类的ID',`percentage` decimal(12,2) DEFAULT NULL COMMENT '平台抽点率 ',`status` tinyint(1) DEFAULT NULL COMMENT '状态: 0禁用 ,1启用',`create_time` datetime DEFAULT NULL COMMENT '创建时间 ',`update_time` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=144 DEFAULT CHARSET=utf8 COMMENT='订单抽点配置信息表';

说明:按照卖家的所属二级分类进行抽点,不同的抽点率也是不一样的。

2. 卖家抽点明细表。(系统需要精确的记录,那个菜品进行了抽点,抽点多少,原来的多少钱,抽点后多少钱,需要明明白白的,让卖家清清楚楚的有一笔账)

CREATE TABLE `order_percentage` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自动增加ID',`order_item_id` bigint(20) DEFAULT NULL COMMENT '订单item的ID',`order_number` varchar(64) DEFAULT NULL COMMENT '所属订单号',`seller_id` bigint(20) DEFAULT NULL COMMENT '卖家id',`order_total_amount` decimal(12,2) DEFAULT NULL COMMENT '订单金额',`order_percentage` decimal(12,2) DEFAULT NULL COMMENT '抽点比率',`order_percentage_amount` decimal(12,2) DEFAULT NULL COMMENT '抽点金额',`order_reality_money` decimal(12,2) DEFAULT NULL COMMENT '订单最终金额即用户最终收到的金额',`create_time` datetime DEFAULT NULL COMMENT '所属时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47226 DEFAULT CHARSET=utf8 COMMENT='抽点信息总表';

补充说明:1. 由于的是对某一个明细进行抽点。所以需要卖家ID,订单明细ID以及抽点比率等,最终算出抽点金额。

3. 何时进行抽点呢、

回答:每天早上6点30进行昨天的抽点,形成自己的账单。

相关的核心代码如下:采用spring task做定时器

    /*** 计算订单抽成 每天早上6:30点执行     */@Scheduled(cron = "0 30 6 * * ?")    protected void makeOrderPercentage() {        try {logger.info("TasksQuartz.makeOrderPercentage.start");            // 计算订单抽成,并生成抽成数据            orderPercentageService.batchSaveOrderPercentage();logger.info("TasksQuartz.makeOrderPercentage.end");} catch (Exception ex) {logger.error("TasksQuartz.makeOrderPercentage.exception", ex);}}

业务核心代码:

@Servicepublic class OrderPercentageserviceImpl implements OrderPercentageService {    private static final Logger logger = LoggerFactory.getLogger(OrderPercentageserviceImpl.class);@Autowired    private OrderItemDao orderItemDao;@Autowired    private OrderPercentageConfigDao orderPercentageConfigDao;@Autowired    private OrderPercentageDao orderPercentageDao;    /*** 批量新增数据     */@Override    public void batchSaveOrderPercentage() {        // 1.获取昨天12:00到今天早上6:00的所有的订单明细Map<String, Object> dateMap = DateUtil.getTradeTime(0);List<OrderItem> orderItems = orderItemDao.getOrderItemsByDate(dateMap);List<OrderPercentage> list = new ArrayList<OrderPercentage>();        if (CollectionUtils.isEmpty(orderItems)) {            return;}        for (OrderItem item : orderItems) {            try {Long formatId = item.getFormatId();Long sellerId = item.getSellerId();OrderPercentageConfig config = orderPercentageConfigDao.getOrderPercentageConfig(formatId, sellerId);                if (config == null) {logger.error("batchSaveOrderPercentage.config.isEmpty:" + "formatId:" + formatId + " sellerId:"+ sellerId);                    continue;}OrderPercentage orderPercentage = new OrderPercentage();                // 订单总额BigDecimal orderTotalAmount = item.getGoodsAmount();                // 抽点比率BigDecimal percentage = config.getPercentage();                // 抽点金额BigDecimal orderPercentageAmount = orderTotalAmount.multiply(percentage).multiply(new BigDecimal("0.01")).setScale(3, BigDecimal.ROUND_UP);                // 卖家最终所得BigDecimal orderRealityMoney = orderTotalAmount.subtract(orderPercentageAmount).setScale(3,BigDecimal.ROUND_UP);orderPercentage.setCreateTime(new Date());orderPercentage.setOrderItemId(item.getId());orderPercentage.setOrderNumber(item.getOrderNumber());orderPercentage.setOrderTotalAmount(orderTotalAmount);orderPercentage.setOrderPercentage(percentage);orderPercentage.setOrderPercentageAmount(orderPercentageAmount);orderPercentage.setOrderRealityMoney(orderRealityMoney);orderPercentage.setSellerId(sellerId);list.add(orderPercentage);} catch (Exception ex) {logger.error("batchSaveOrderPercentage.exception", ex);}}        try {orderPercentageDao.batchSaveOrderPercentage(list);} catch (Exception ex) {logger.error("batchSaveOrderPercentage", ex);}}}

相关后台运营截图如下;

Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载),如果需要下载的话,可以在我的github下面进行下载。

原文出处

JAVA

作者:
链接:https://www.imooc.com/article/30220
来源:慕课网

Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)相关推荐

  1. 电商平台-订单抽成模块的设计与架构

    说明:订单抽成指的是向卖家收取相应的信息服务费.(目前市场上有两种抽成方式,一种是按照总额的抽成比率,另外一种是按照订单明细的抽成比率) 由于生鲜电商的垂直领域的特殊性质,总额抽成不切合实际,所以按照 ...

  2. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  3. Java开源生鲜电商平台-深刻理解电商的库存架构与解决方案(源码可下载)

    https://www.cnblogs.com/jurendage/p/9227283.html 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: ...

  4. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载

    Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android ...

  5. java产品分类和管理_Java生鲜电商平台-商品无限极目录的设计与架构

    Java生鲜电商平台-商品无限极目录的设计与架构 说明:任何一个商品都应该是先属于某一个目录,然后在目录中添加商品,目录理论上最多支持三级,因为级别太多,不容易管理.但是设计中需要设计无限制的级别. ...

  6. 网厨管理java_点菜网---Java开源生鲜电商平台-技术选型(源码可下载)

    centos 安装php7.0.2 PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布. linux版 ...

  7. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)(1)

    @param response @return */ @RequestMapping(value="/alipay/invoke",method={RequestMethod.GE ...

  8. Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)

    //买家支付宝用户号 String buyerId=this.getNotNull("buyer_id", request); //买家支付宝账号 String buyerLogo ...

  9. 6、生鲜电商平台-订单表的设计

    场景分析说明: 买家(餐馆)用户,通过APP进行选菜,放入购物车,然后下单,最终支付的流程,我们称为下单过程. 买家可以在张三家买茄子,李四家买萝卜,王五家买白菜,赵六家买猪肉等 那么买家就应该有个订 ...

最新文章

  1. 用css打印html
  2. 接上,优化滚动的效率
  3. Python [9] optparse模块生成命令行帮助信息
  4. SPOJ Python Day2: Prime Generator
  5. 版本控制介绍以及常用的版本控制工具
  6. 【英语学习】【WOTD】scavenger 释义/词源/示例
  7. 关于kv的jch分片存储
  8. 数组的合并,去重,排序
  9. ftp上传软件,推荐5款好用的ftp上传软件
  10. Ubuntu HDMI连接后没有声音解决办法
  11. 阿里聚石塔2.0部署前后端分离项目
  12. 自行车碟刹与V刹的区别以及优缺点
  13. C#发送邮件(阿里企业邮箱示例 包括各个类型的服务器及端口配置)
  14. 如何轻松地的现货白银中预测走势?
  15. 电影《蓝色大门》有感
  16. Barcode读取之barcode_para_contrast_min.hdev
  17. IOS学习博客-坚持就是胜利
  18. win10重建图标缓存bat
  19. 项目的时间进度该如何估算?
  20. 电商大佬开放平台争抢供应商:服务能力成关键

热门文章

  1. CP(Cyclic Prefix)循环前缀介绍
  2. python——百钱百鸡题
  3. 【Python】设计模式(2)--抽象工厂模式
  4. 登录模块测试点提取大纲1(功能,性能,界面,兼容,安全,稳定,易用)
  5. Win11 22000.613(KB5012592)更新失败怎么办?
  6. 浅谈UWB室内定位(一)
  7. adb root 权限
  8. 求1+2+…+n的和不大于1000的最大自然数n
  9. Spark Shuffle
  10. 【微博客】开复老师微博想到的