@Wahson
2020-09-01T10:45:05.000000Z
字数 9796
阅读 646
Wanbo
充值流程:导入银行流水 => 流水认领选择账户充值 => 新建充值申请 => 充值申请审核(自动) => 生成账户充值流水 => 增加账户余额提现流程:新建提现申请 => 提现申请审核 => 审核成功 => 冻结账户金额 => 生成付款指令 => 付款指令流程 => 导入银行流水 => 流水认领选择账户提现 => 选择充值申请(根据公司名称自动匹配) => 关联充值申请 => 生成解冻流水 => 生成账户提现流水取消提现申请:审核前,可取消提现申请
use crm_db;create table company_account(id bigint not null primary key auto_increment,company_id bigint not null comment '公司id',-- type smallint(2) default 1 not null comment '账户类型,1:资金账户(CAPITAL);2:贷款账号(CREDIT);3:预付账户(PREPAY)',-- 可用金额 = 账户余额 - 冻结余额balance decimal(13, 2) default 0.00 not null comment '账户余额',frozen_balance decimal(13, 2) default 0.00 not null comment '账户冻结余额',-- 用途,预设密码?-- uniq_hash varchar(32) not null comment 'MD5( concat(''预设密码'', company_id, balance,frozen_balance,updated_at,updated_by) )',created_at timestamp default current_timestamp() not null,created_by int default 0 not null,updated_at timestamp default current_timestamp() not null,updated_by int default 0 not null,remark varchar(255) null comment '备注',constraint vr_2_company foreign key (company_id) references company (id)) engine = innoDbcharset = utf8mb4 comment '公司账户';create table account_journal(id bigint auto_increment primary key,company_account_id bigint not null comment '公司账号id',company_id int(10) not null comment '公司id',bank_journal_id bigint default null comment '银行流水id',account_apply_id bigint default null comment '提现/充值申请id, 业务类型为提现或充值时有值',-- order_payment_id bigint default null comment '订单支付记录id, 业务类型为订单货款时有值',trans_type smallint(2) default 1 not null comment '交易类型,1:收入(income);2:支出(expenditure);3:冻结(freeze);4:解冻(unfreeze);',business_type smallint(2) default 10 not null comment '业务类型,10:提现(withdrawal);20:充值(recharge);30:订单货款(order_payment);40:拍卖(auction);90:其他(other)',amount decimal(13, 2) not null comment '流水金额',last_balance decimal(13, 2) default 0.00 null comment '上一次金额',-- balance decimal(13, 2) not null comment '操作后的人民币余额',-- frozen_balance decimal(13, 2) not null comment '操作后的人民币冻结余额',-- freeze_status smallint(1) null comment '冻结状态,1:已解冻(THAW);2:冻结中(FROZENIN);3:部分解冻(PARTIALFROZENIN)',-- freeze_relate_journal int(10) null comment '冻结关联流水',-- freeze_balance decimal(10, 2) null comment '冻结余额(随解冻而变化)',-- transaction_id int default 0 not null comment '全局事务编号',-- transaction_sequence int default 0 not null comment '事务过程序号',-- rollback_status smallint(1) default 0 null comment '0:未回滚,1:已回'created_at timestamp default current_timestamp() not null,created_by int default 0 not null,updated_at timestamp default current_timestamp() not null,updated_by int default 0 not null,remark varchar(255) null comment '备注') engine = innoDbcharset = utf8mb4 comment '公司账户变更流水';create table account_application(id bigint auto_increment primary key,company_id bigint not null comment '公司ID',company_name varchar(100) not null comment '公司名称',-- customer_id int null comment '客户ID',-- account_type smallint(1) default 1 not null comment '账户类型, 1:资金账户(CAPITAL);2:贷款账号(CREDIT);3:预付账户(PREPAY)',type smallint(2) default 1 not null comment '申请类型,1:提现(withdraw);2:充值(recharge)',status smallint(2) default 1 not null comment '状态,10:待审核(to_be_audited);20:已审核(audited);30:已完成(finished);90:已取消(canceled)',amount decimal(10, 2) not null comment '金额',bank_journal_id bigint default null comment '银行流水id',# 冗余字段,来源银行流水表 bank_journal# platform_account varchar(32) null comment '平台银行账号',# platform_account_name varchar(64) not null comment '平台银行户名',# bank_account varchar(32) null comment '收付款银行账号',# bank_account_name varchar(64) not null comment '收付款银行户名',audited_at datetime null comment '审核时间',audited_by int(10) null comment '审核人',-- confirmed_at datetime null comment '确认时间',-- confirmed_by int(10) null comment '确认人',created_at timestamp default current_timestamp() not null,created_by int default 0 not null,updated_at timestamp default current_timestamp() not null,updated_by int default 0 not null,remark varchar(255) null comment '备注',constraint aa_2_company foreign key (company_id) references company (id)) engine = innoDb charset = utf8mb4 comment '充值申请';
原子方法:createCompanyAccountApplycreateCompanyAccountJournalcreateCompanyAccount// 增加账号余额increaseAccountBalance(incr_amount) {更新balancecreateCompanyAccountJournal(type)}// 减少账号余额decreaseAccountBalance(decr_amount) {更新balancecreateCompanyAccountJournal(type)}// 增加账号冻结余额increaseAccountFrozenBalance {更新frozen_balancecreateCompanyAccountJournal(type)}// 减少账号冻结余额decreaseAccountFrozenBalance {更新frozen_balancecreateCompanyAccountJournal(type)}// 充值审核auditRecharge {更新状态为已审核increaseAccountBalance(充值)}// 提现审核auditWithdrawal {更新状态为已审核increaseAccountFrozenBalance(提现)// TODO:生成付款指令}// 充值/提现申请完成finishAccountApply {更新状态为已完成if(提现) {更新bank_journal_iddecreaseAccountFrozenBalance(提现)decreaseAccountBalance(提现)}}cancelWithdrawal {// 审核前可操作更新状态未已取消}
新建充值:createRecharge {修改流水记录createCompanyAccountApplyauditRechargefinishWithdrawal}提现:createWithdrawal {createCompanyAccountApply}
运营系统新建标的,关联采购单,填写牌号,拍卖数量,起拍价,起拍数量等,提交审核
审核通过,等待拍卖开始
出价、竞价:
检查:
- 检查客户拍卖资格(授权客户)??? 检查规则?有绑定公司,同时是该公司的授权拍卖客户
- 标的状态为已审批
- 标的开始拍卖时间 < 当前时间 < 标的实际结束时间
- 起拍数量 <= 竞拍数量 <= 拍卖总数量 && (拍卖数量 - 起拍数量) % 数量增幅 == 0
- 本次出价 >= 起拍价 && (本次出价 - 起拍价) % 加价幅度 == 0
- 本次出价 >= 最近一次出价(当前价格)
- 最多只允许出现3次价格相同的出价
- 本次出价 > 当前用户上一次出价
- 出价与当前价格相同时,与当前价格相同的出价记录总数量 + 当前竞竞拍数量 <= 拍卖总数量
- 当前用户出价,冻结用户保证金,保证金不足不允许出价
- ???需冻结保证金 = 0元竞拍(起拍价 = 0):保证金比例 * (保证金基础值 * 竞拍数量), 普通竞拍:保证金比例 * (竞拍金额 * 竞拍吨数)
- 在竞拍结束最后2分钟,如果出价成功,竞拍结束时间顺延2分钟
中标逻辑: (定时器到拍卖结束统一计算)
- 出价 >= 起拍价
- 竞拍数量 >= 起拍数量
- 中标数量 = min(拍卖总数量, 竞拍数量)
- 价格、数量都满足条件下,按照出价时间,优先满足较晚出价的
- 未中标的,解冻保证金,(扣减账户冻结金额,生成解冻流水)
- 中标的,何时解冻保证金???(需要区分中标吨数与未中标吨数)
- 中标后,订单违约处理流程???
订单何时确认:???
-- 拍卖create table auction_target(id bigint auto_increment primary key,purchase_item_id bigint not null comment '采购子单id',delivery_type smallint(2) not null comment '送货方式, 10:自提(self_pick);20:供应商配送(supplier_deliver);30:万博配送(wanbo_deliver)',product_id int not null,category varchar(12) not null comment '产品分类',designation varchar(32) not null comment '产品牌号',manufacturer_id int not null comment '生产商ID',manufacturer_name varchar(32) not null comment '生产商名称',supplier_company_id int not null comment '供应商id',supplier_company_name varchar(32) not null comment '供应商名称',warehouse_id int not null comment '发货仓库id',warehouse_name varchar(32) not null comment '发货仓库名称',status smallint(1) default 1 null comment '状态(1:预提交,2:待审核,3:已审核 4:拍卖中,5:拍卖完成,6:流拍,9:审核不通过,10:取消)',starting_price decimal(13, 2) default 0.00 not null comment '起拍价',-- market_price decimal(13, 2) null comment '市场评估价',weight decimal(8, 3) default 0.000 not null comment '拍卖总吨数',starting_weight decimal(8, 3) not null comment '起拍吨数',price_increment decimal(10, 2) not null comment '加价幅度',weight_increment decimal(8, 3) not null comment '数量增幅(最小变量单位或每次增加吨数)',-- auction_type smallint(1) default 1 not null comment '竞拍方式,1:升价(priceRise);2:降价(priceCut )',deposit_ratio decimal(3, 3) not null comment '保证金比例',-- basic_deposit decimal(10, 2) null comment '保证金基础值',-- publicity_start_at datetime not null comment '开始公示时间',auction_start_at datetime not null comment '开始拍卖时间',expected_auction_end_at datetime not null comment '预定结束拍卖时间',actual_auction_end_at datetime null comment '实际拍卖结束时间',-- 期货交货时间?-- delivery_time datetime null comment '发货时间',-- trade_addr varchar(50) null comment '交易地点',-- weight_left decimal(13, 3) null comment '剩余吨数',is_future smallint(1) default 0 not null comment '是否期货 0为false, 1为true',execute_start_at date null comment '送货/交付日期开始',execute_end_at date null comment '送货/交付日期结束',audited_at datetime null comment '审核时间',audited_by int(10) null comment '审核人',created_at timestamp default current_timestamp() not null,created_by int default 0 not null,updated_at timestamp default current_timestamp() not null,updated_by int default 0 not null,remark varchar(255) null comment '备注') engine = innoDbcharset = utf8mb4 comment '拍卖标的';create table auction_bid_record(id int(10) auto_incrementprimary key,wx_user_id int(10) not null comment '用户id',company_id int(10) not null,auction_target_id int(10) not null comment '竞拍标的ID',price_before_bid decimal(10, 2) default 0.00 not null comment '拍前价格',-- after_price decimal(10, 2) not null comment '拍后价格',bid_price decimal(10, 2) not null comment '出价',weight decimal(8, 3) not null comment '拍卖吨数',actual_weight decimal(8, 3) default 0.000 not null comment '实际中标吨数(为0则为出局)',-- account_journal_id int(10) not null comment '账户资金变动流水ID',-- margin decimal(10, 2) default 0.00 not null comment '冻结保证金',auction_at datetime not null comment '出价时间',created_at timestamp default current_timestamp() not null,created_by int default 0 not null,updated_at timestamp default current_timestamp() not null,updated_by int default 0 not null,remark varchar(255) null comment '备注',constraint bid_records_fk_target_idforeign key (auction_target_id) references auction_target (id)) engine = innoDbcharset = utf8mb4 comment '出价记录';-- auto-generated definition# create table auction_purchase_items# (# id int auto_increment# primary key,# target_id int not null comment '标的id',# purchase_item_id int not null comment '采购子单id',# weight decimal(10, 3) not null comment '分配重量',# created_by int null,# created_at datetime null,# updated_by int null,# updated_at timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP# )-- auto-generated definition# create table auction_target_summaries# (# id int(10) auto_increment# primary key,# target_id int(10) not null comment '竞拍标的ID',# wined_count int(10) not null comment '中标人数',# bid_count int(10) not null comment '投注人数',# bid_times int(10) not null comment '投注次数',# weight decimal(8, 3) not null comment '成交吨数',# amount decimal(10, 2) not null comment '成交金额',# max_price decimal(10, 2) not null comment '最高价',# min_price decimal(10, 2) not null comment '最低价',# constraint target_summary_fk_target_id# foreign key (target_id) references auction_target (id)# ) engine = innoDb charset = utf8mb4 comment '竞拍商品摘要';-- auto-generated definitioncreate table auction_won_record(id int(10) auto_incrementprimary key,company_id bigint not null comment '公司id',auction_bid_record_id bigint not null comment '出价记录',auction_target_id bigint not null comment '标的id',price decimal(10, 2) not null comment '中标价',weight decimal(8, 3) not null comment '中标数量',total_amount decimal(10, 2) not null comment '中标金额',-- order_no varchar(32) not null comment '关联销售订单号',-- status smallint(1) not null comment '状态(1:待确认,2:成功,3:违约,4:违约已处理)',created_at datetime not null,created_by int(10) null comment '创建人,只能是StaffID',updated_at timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP,updated_by int(10) null comment '更新人,只能是StaffID',constraint wined_record_fk_bid_record_idforeign key (auction_bid_record_id) references auction_bid_record (id),constraint wined_record_fk_target_idforeign key (auction_target_id) references auction_target (id)) engine = innoDbcharset = utf8mb4 comment '中标记录';
结算:
先按暂定价结算付款,后面按月平均价得出最终结算价,多付部分摞到后续订单,少的部分补付。资金利息如何计算?按照目前数据模型,认领后,需要修改成本重新认领