Java开源生鲜电商平台-账单模块的设计与架构(源码可下载)
Java生鲜电商平台-账单模块的设计与架构
补充说明:生鲜电商平台-账单模块的设计与架构,即用户的账单形成过程。
由于系统存在一个押账功能的需求,(何为押账,就是形成公司的资金池,类似摩拜单车,ofo单车等等)。目前B2B平台也是采用押账的这种功能策略。
这里有个特别说明的押账方式:就是比如有个卖家张三,他是5月1日跟我们平台签约开始入住平台卖菜,我们约定好押账7天,那么他5月1日的金额会在5月2日存入
他自己的余额里面,但是这个钱不能马上提取出来,需要等一个星期,也就是5月8日可以提现5月1日的金额,5月9日可以提现5月2日以前的所有金额。
这个算法的最大好处就是永远的压住客户7天的金额。
这个算法采用的是Spring quartz定时器每天晚上23:00点处理的。
相关核心的代码如下:
/**
* 任务工作
* @author wangfucai
*/
@Component
public class TasksQuartz{ private static final Logger logger=LoggerFactory.getLogger(TasksQuartz.class); @Autowired
private BillService billService;
@Autowired
private SellerService sellerService;
@Autowired
private DeliveryIncomeService deliveryIncomeService;
@Autowired
private BuyerService buyerService;
@Autowired
private OrderInfoService orderInfoService;
@Autowired
private GroupsBuyerService groupsBuyerService; /**
* 计算每天账单
* 每天23点执行
*/
@Scheduled(cron="0 0 23 * * ?")
protected void makeBill(){
try
{
logger.info("TasksQuartz.execute.start");
//统计当天的交易完成的订单生成账单
billService.addBills();
logger.info("账单数据更新完成");
//根据卖家抽点金额更新账单实际金额
billService.updateRealAmountByPercentage();
logger.info("根据卖家抽点金额更新账单实际金额完成");
//更新卖家余额
sellerService.updateBalanceByBill();
logger.info("卖家余额数据更新完成");
logger.info("TasksQuartz.execute.end");
}catch(Exception ex)
{
logger.error("TasksQuartz.execute.exception",ex);
}
}
补充说明:1.需要统计每个卖家今天的收入。
2.并行的需要把订单的数据存入账单表。
3.余额来源于账单表。形成一个数据的流转体现。
账单表的表结构如下:

补充说明:每天定时器会根据卖家的账期形成账单,最终更新到用卖家的余额里面。
实际运营情况来讲是每个卖家的账期是不一样的,有的两天,有的三天,有的一周,有的是一个月。
相关核心算法与代码如下:
/**
* 统计10天前的账单更新卖家余额和账单金额
*/
@Override
public void updateMoney() {
// 获取10天前的日期d
String day = DateUtil.dateToString(DateUtil.addDay(new Date(), -9), DateUtil.FMT_DATE);
// 查询十天前的所有帐单信息
List<Map<String, Object>> list = billDao.getBillsByDay(day);
if (CollectionUtils.isEmpty(list)) {
logger.info("TasksQuartz.updateMoney.isEmpty-->day:" + day);
return;
}
for (Map<String, Object> map : list) {
// 卖家ID
Long sellerId = (Long) map.get("sellerId");
if (sellerId == null) {
continue;
}
// 获取提现的金额即最终账单的金额
BigDecimal realityMoney = (BigDecimal) map.get("realIncome");
if (realityMoney == null) {
continue;
}
// 获取卖家的余额
BigDecimal balanceMoney = (BigDecimal) map.get("balanceMoney");
if (balanceMoney == null) {
balanceMoney = BigDecimal.ZERO;
}
// 获取卖家的账单金额
BigDecimal billMoney = (BigDecimal) map.get("billMoney");
if (billMoney == null) {
billMoney = BigDecimal.ZERO;
}
// 金额相加
BigDecimal resultBalanceMoney = realityMoney.add(balanceMoney); BigDecimal resultBillMoney = realityMoney.add(billMoney); logger.info("当前用户sellerId:" + sellerId + " 当前的余额为:balanceMoney=" + balanceMoney
+ " 最终金额:resultBalanceMoney=" + resultBalanceMoney); logger.info("当前的余额为:billMoney=" + billMoney + " 最终金额:resultBillMoney=" + resultBillMoney);
// 更新卖家余额和账单金额
int result = sellerDao.updateMoney(sellerId, resultBalanceMoney, resultBillMoney);
logger.info("当前用户sellerId:" + sellerId + " 更新结果为:" + (result > 0));
}
// 更新十天前的所有账单的状态
int count = billDao.updateStatus(day);
logger.info(" 更新" + count + "条账单,状态变为已结算");
}
业务说明:
1. 无外乎每天需要统计卖家的今日收益情况。
2. 更新卖家的最终余额。
3. 根据卖家的所设置的账单周期,形成用户的账单金额。
4. 最终根据账单金额,形成用户的可提现余额的过程。
业务有点绕口,但是整体是非常地清晰的,思路就是押用户所配置的账期金额。配置10天就压10天,配置15天就压15天。
以下是账单跟卖家的核心关联表,就是配置所属的卖家对应的所属账期时间。

总结:整个技术方面其实都不算复杂,主要是业务逻辑以及统计的一些概念,希望这些定时器计算,账单思路形成,架构方面能给大家一些帮助。
Java开源生鲜电商平台-账单模块的设计与架构(源码可下载)的更多相关文章
- Java开源生鲜电商平台-购物车模块的设计与架构(源码可下载)
ava开源生鲜电商平台-购物车模块的设计与架构(源码可下载) 说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题, ...
- Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载)
Java开源生鲜电商平台-推荐系统模块的设计与架构(源码可下载) 业务需求: 对于一个B2B的生鲜电商平台,对于买家而言,他需要更加快速的购买到自己的产品,跟自己的餐饮店不相关的东西,他是不关心的,而 ...
- Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)
Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android or IOS) 1. 数据库表设计. 说明:无论是支付宝还 ...
- Java开源生鲜电商平台-异常模块的设计与架构(源码可下载)
Java开源生鲜电商平台-异常模块的设计与架构(源码可下载) 说明:任何一个软件系统都会出现各式各样的异常与错误,我们需要根据异常的情况进行捕获与分析,改善自己的代码,让其更加的稳定的,快速的运行,那 ...
- Java开源生鲜电商平台-搜索模块的设计与架构(源码可下载)
Java开源生鲜电商平台-搜索模块的设计与架构(源码可下载) 说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面.目前也是快速的检索商品. 对于移动端的APP买家用户而言,要求的速度在 ...
- Java开源生鲜电商平台-售后模块的设计与架构(源码可下载)
Java开源生鲜电商平台-售后模块的设计与架构(源码可下载) 说明:任何一个的电商平台都有售后服务系统,那么对于我们这个生鲜的电商平台,售后系统需要思考以下几个维度. 1. 买家的需求维度 说明:买家 ...
- Java生鲜电商平台-供应链模块的设计与架构
Java生鲜电商平台-供应链模块的设计与架构 说明:Java开源生鲜电商平台中供应链模块属于卖家的行为,也就是卖家如何管理他们自己的供应商,包括结算方式,压款方式,结算周期等等,超出了我这个B2B平台 ...
- Java生鲜电商平台-提现模块的设计与架构
Java生鲜电商平台-提现模块的设计与架构 补充说明:生鲜电商平台-提现模块的设计与架构,提现功能指的卖家把在平台挣的钱提现到自己的支付宝或者银行卡的一个过程. 功能相对而言不算复杂,有以下几个功能需 ...
- Java开源生鲜电商平台-用户表的设计(源码可下载)
Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如: ...
随机推荐
- logcat不显示信息
挨个试其中的解决办法最终解决了 我的设置居然是error 这样肯定显示不了啊 换成verbos 解决了这个问题.希望帮到大家 部分华为手机不显示log问题原因是手机底层开关没打开. http://h ...
- D-BUS详细分析
转:http://blog.csdn.net/yclzh0522/article/details/7090599 一.概述 官方网站:http://www.freedesktop.org/wiki/S ...
- JFinal开发环境搭建,JFinal开发案例
JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所 ...
- SharePoint2007 开发部署Application Pages
介绍:SharePoint应用程序页,也就是_layouts路径下的aspx页面,服务器C:\Program Files\Common Files\Microsoft Shared\web serve ...
- masm的一些常用编译选项
ml命令行选项: /Dsymbol[=value] 定义给定名称的文本宏 /Fl 生成lst文件 /Sn lst文件中关闭符号表 /I 设置include文件的路径 /link 发送给link的连接器 ...
- JQuery系统梳理
JQuery在前端网页开发中可以说是非常常用了,它所拥有的强大功能足以让我们完成各式各样的效果. 一.JQuery基础语法 1. 使用JQuery必须先导入jquery.x.x.x.js文件: 2. ...
- 在线学习Java免费资源推荐
你想学习Java吗?来对地方了!这篇文章将会介绍很多高质量的免费资源,包括网页.论坛.电子书和速查表. Java是一种面向对象的编程语言,拥有独立.多线程.安全.动态和健壮的特点.归功于其多功能的特点 ...
- Mybatis 系列7
上篇系列6中 简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介绍mapper映射文件的配置. 这是mybatis的核心之一 一定要学好 在mapper文件中,以mapper作为根 ...
- JSPWiki安装配置及FCKEditor的集成
版本:JSPWiki-2.8.2 FCKeditor_2.6.3 安装方法我参照:http://doc.jspwiki.org/2.4/wiki/InstallingJSPWiki FCKEd ...
- Ubuntu14.04 安装配置Opencv3.0和Python2.7
http://blog.csdn.NET/u010381648/article/details/49452023 Install OpenCV 3.0 and Python 2.7+ on Ubunt ...