当前位置: 首页 > 后端技术 > PHP

电子商务系统设计之订单

时间:2023-03-29 23:09:43 PHP

前言用户交易会经历一个艰难的过程,普通用户是感觉不到的。实际过程是生死离别。具体支付流程如下:不是(wo)是(gu)这(yi)件(chuan)图(de),请看之前认真流程图的文章介绍如何设计购物车,如何设计用户系统,如何设计产品系统,如何设计实际……都是在为交易系统做铺垫。如果一个产品没有收入,那么它只能是寺庙的公益产品。任何产品最终都会走到这一步(收钱)。付费用户在支付过程中有很多场景,会出现意外。以下是我遇到的“天灾人祸”。成功用户发起微信支付,支付成功。用户发起支付宝支付,支付成功。人为灾害,用户发起微信支付取消支付,用户发起支付宝支付取消支付,用户发起银联支付取消支付,用户发起其他支付取消支付,自然灾害用户发起微信支付,”手机爆炸”,用户发起支付宝支付,“瞬间掉网”用户发起银联支付,老婆来电,“用户发起其他支付,”老板进来。注意事项以上几种情况,不要害怕,不要惊慌,也不要“忽视”,只需要记录这些操作即可。通常,我们会将用户使用的支付方式存储在订单表中,方便查询。我想说这种做法是对的,但是少了点什么。你应该有一个交易记录表来记录用户发起了多少次支付,只有支付成功才能记录到订单表中。这样做的好处有以下两点:订单表格比较重要,你要尽量不要去操作这个表格,以防出现意外。一般来说,除了收货和发货外,没有其他地方可以操作订单。它可以记录用户每次发起支付的时间,通过所谓的大数据分析用户对产品的需求和认可度。如果用户多次发起支付后又取消支付,说明(他没钱)可能很期待,但不知为何,一直在犹豫。这时候我可以给当前用户做一些优惠,比如发优惠券等等。表结构交易表CREATETABLE`transaction`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`order_sn`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'交易号',`member_id`bigint(20)NOTNULLCOMMENT'交易用户ID',`amount`decimal(8,2)NOTNULLCOMMENT'交易金额',`integral`int(11)NOTNULLDEFAULT'0'COMMENT'使用的积分',`pay_state`tinyint(4)NOTNULLCOMMENT'支付类型0:余额1:微信2:支付宝3:xxx',`source`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'支付来源wxappwebwap',`status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'支付状态-1:已取消0未完成1已完成-2:异常',`completion_time`int(11)NOTNULLCOMMENT'交易完成时间',`note`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'备注',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),KEY`transaction_order_sn_member_id_pay_state_source_status_index`(`order_sn``(191),`me,`source`(191),`status`))ENGINE=InnoDBAUTO_INCREMENT=36默认字符集=utf8mb4整理=utf8mb4_unicode_ci;支付记录表CREATETABLE`transaction_record`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`order_sn`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULL,`evLLents4`NcicodetextCOMMENT'eventdetails',`result`textCOLLATEutf8mb4_unicode_ciCOMMENT'resultdetails',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=36DEFAULTCHAR=utf8mb4COLLATE=utf8mb4_unicode_ci;这张记录表可能会让你大吃一惊。我不知道你对日志有什么看法,但我能说的是,记录用户的所有操作是非常重要的,迟早你会明白的。订单表CREATETABLE`order`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`order_no`varchar(100)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'ordernumber',`order_sn`varchar(100)COLLATEutf8mb4_unicode_ciNOTNULL'COMtransactionnumber',`member_id`int(11)NOTNULLCOMMENT'客户编号',`supplier_id`int(11)NOTNULLCOMMENT'商家代码',`supplier_name`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'商家名称',`order_status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'订单状态0未付款,1已付款,2已发货,3签收,-1退货申请,-2退货,-3退货,-4取消交易',`after_status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'用户售后状态0未发起售后1售后申请-1售后取消2处理200处理完成',`product_count`int(11)NOTNULLDEFAULT'0'COMMENT'商品数量',`product_amount_total`decimal(12,4)NOTNULLCOMMENT'商品总价',`order_amount_total`decimal(12,4)NOTNULLDEFAULT'0.0000'COMMENT'实际支付金额',`logistics_fee`decimal(12,4)NOTNULLCOMMENT'运费金额',`address_id`int(11)NOTNULLCOMMENT'收据地址码',`pay_channel`tinyint(4)NOTNULLDEFAULT'0'COMMENT'支付渠道0余额1微信2支付宝',`out_trade_no`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'订单支付号',`escrow_trade_no`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'三-partypaymentserialnumber',`pay_time`int(11)NOTNULLDEFAULT'0'COMMENT'paymenttime',`delivery_time`int(11)NOTNULLDEFAULT'0'COMMENT'deliverytime',`order_settlement_status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'订单结算状态0未结算1已结算',`order_settlement_time`int(11)NOTNULLDEFAULT'0'COMMENT'订单结算时间',`is_package`enum('0','1')COLLATEutf8mb4_unicode_ciNOTNULLDEFAULT'0'COMMENT'Isitapackage',`is_integral`enum('0','1')COLLATEutf8mb4_unicode_ciNOTNULLDEFAULT'0'COMMENT'Isitanintegralproduct',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,`deleted_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`order_order_sn_unique`(`order_sn`),KEY`order_order_sn_order_r_sn`,`member_id`,`order_status`,`out_trade_no`(191)))ENGINE=InnoDBAUTO_INCREMENT=44DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;运输用户付款完成后,接下来就是快递公司了,我们当然不至于在这一点上,我们应该把运输信息展示给客户。现在有些API开放平台有快速查询服务,有收费的,有免费的,性能上相差不大。但这里有一个警告。并不是每次用户都会查询新的信息。对于小公司来说,这可能是非常昂贵的。所以我们应该定期查看快递物流信息。这里有一个简单的算法。if(用户点击查看){用户点击查看后两小时更新一次物流信息//这里是按照两小时更新一次,这个时间也可以延长}else{每两小时更新一次物流信息}这个必须使用频繁的Nosql进行更新。用户确认收货后,会存储到mysql等数据库中。收货当用户收到货物时,这其实是最难服务的时候。对产品的各种不满意可能导致退换货。收货操作不仅是将订单状态改为收到,更复杂的可能需要im、短信、推送提醒。一般是直接提醒,量大的话会加入队列处理。淘宝是这样处理退换货的。淘宝将订单分为两种状态:未付款、已付款、已收到、已评价。发起售后、售后审核、售后处理、处理完成。图1显示了每个产品,包括子产品,可以单独推出售后。图二是点击申请售后后的页面图三是选择退换货的相关商品。完成这些步骤后,售后审核就开始了,卖家审核成功后才能进行下一步。售后申请表)unsignedNOTNULLAUTO_INCREMENT,`order_no`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'订单号',`order_detail_id`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'子订单代码',`returnvarCOLL(25`)utf8mb4_unicode_ciNOTNULLCOMMENT'售后订单号',`member_id`int(11)NOTNULLCOMMENT'用户代码',`state`tinyint(4)NOTNULLCOMMENT'type0refundonly1returnrefund',`product_status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'Status0:Received1:Notreceived',`why`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'退货原因',`status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'AuditStatus-1Rejected0NotAudited1Audited',`audit_time`int(11)NOTNULLDEFAULT'0'COMMENT'AuditTime',`audit_why`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'Auditreason',`note`textCOLLATEutf8mb4_unicode_ciCOMMENT'备注',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;id`int(10)unsignedNOTNULLAUTO_INCREMENT,`returns_no`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'客户查询返回号码',`order_id`int(11)NOTNULLCOMMENT'订单号',`express_no`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'Logisticnumber',`consignee_realname`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'Consigneename',`consignee_telphone`varchar(255)COLLATEutf8mb4_unicode_comNOTtel'`consignee_telphone2`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'备用电话号码',`consignee_address`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'收货地址',`consignee_zip`Nmbchar(255)COLL4_unicode_postal'编码',`logistics_type`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'物流方式',`logistics_fee`decimal(12,2)NOTNULLCOMMENT'物流运费',`order_logistics_status`int(11)DEFAULTNULLCOMMENT'物流状态',`logistics_settlement_status`int(11)DEFAULTNULLCOMMENT'物流结算状态',`logistics_result_last`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'物流最后状态描述',`logistics_result`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'物流描述'int,`time`create_logistics(11)DEFAULTNULLCOMMENT'交货时间',`logistics_update_time`int(11)DEFAULTNULLCOMMENT'物流更新时间',`logistics_settlement_time`int(11)DEFAULTNULLCOMMENT'物流结算时间',`returns_type`tinyint(4)NOTNULLDEFAULT'0'COMMENT'0全额退款1部分退款',`handling_way`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'PUPAWAY:返回存储;REDELIVERY:重新发货;RECLAIM-REDELIVERY:不需要退货和重新发货;REFUND:退款;COMPENSATION:noreturnandcompensation',`returns_amount`decimal(8,2)NOTNULLCOMMENT'refundamount',`return_submit_time`int(11)NOTNULLCOMMENT'返回申请时间',`handling_time`int(11)NOTNULLCOMMENT'返回处理时间',`remark`textCOLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'返回原因',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;Evaluation如果用户收到货后直接评价,那么恭喜你,这个订单基本都卖完了,没什么好说的,一般小电商都不用评价,类似淘宝为了防止求值的做法过于复杂,这里就不过多解释了(其实我也没接触过)。评估数据表CREATETABLE`order_appraise`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`order_id`int(11)NOTNULLCOMMENT'订单代码',`info`textCOLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'评论内容',`level`enum('-1','0','1')COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'level-1差评0中评1好评',`desc_star`tinyint(4)NOTNULLCOMMENT'描述匹配1-5',`logistics_star`tinyint(4)NOTNULLCOMMENT'物流服务1-5',`attitude_star`tinyint(4)NOTNULLCOMMENT'服务态度1-5',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),KEY`order_appraise_order_id_index`(`order_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;致谢感谢您看到这里,希望我的文章和代码能对您有所帮助。有什么问题可以在评论区留言,谢谢