• 工作中项目涉及的小细节,你都遇到了吗


    1.订单与支付

    1.1问题背景

    假如有一个快递下单系统,在寄快递时,客户下单并支付费用,支付后会生成验货码用于商家扫描入库,其支付和退款流程如下:

    支付:创建业务订单---> 创建支付订单---> 唤起支付收银台---> 输入密码---> 进入支付回调处理 ---> 更改支付状态及业务状态
    
    退款:创建退款订单---> 发起退款---> 进入退款回调处理 ---> 更改支付状态及业务状态

    那么在编写程序时会思考:支付时,是先生成验货码后再支付呢?还是先支付再生成验货码?同样在退款时,是先退码后再退款呢?还是先退款再退码?

    1.2问题分析

    支付:

    • 先生成验货码后再支付。

    A.若生成验货码成功,支付成功,则完事大吉;

    B.若生成验货码成功,支付失败,会在异常处理中进行退码处理,但不一定退码成功。造成短款(客户没支付,但服务方的码可用。损失的是服务方);

    C.若生成验货码失败,则无需支付。

    • 先支付再生成验货码。

    A.若支付成功,生成验货码成功,则完事大吉;

    B.若支付成功,生成验货码失败,会造成长款(客户已支付,但码不可用。客户可申请退款进行处理,损失的是客户);

    C.若支付失败,则无需生成验货码。

    退款:

    • 先退码后再退款。

    A.若退码成功,退款成功,则完事大吉;

    B.若退码成功,退款失败,会造成长款(客户已支付,但码不可用。客户可申请退款进行处理,损失的是客户);

    C.若退码失败,则不再继续往后走,需通过分析找出原因并解决。

    • 先退款再退码。

    A.若退款成功,退码成功,则完事大吉;

    B.若退款成功,退码失败,会造成短款(客户已退款,但码可用。损失的是服务方);

    C.若退款失败,则不再继续往后走,需通过分析找出原因并解决。

    1.3结论

    针对上述问题分析,可得出结论是支付时先支付再生成验货码,退款时退码后再退款。

    那么针对支付问题,处理方式如下:

    支付时,一定要先完成支付,再处理业务系统的业务。
    退款时,一定要先完成业务确认,再执行退款。

    2.Redis凌晨按点过期

    有个需求,无论什么时候的缓存数据,都必须在第二天凌晨0点失效。redis官网并未提供某个时间点失效的方法,那么何去做呢?

    思路:先计算当前时间到第二天凌晨0点相差的时间(推荐以秒为单位),将此时间设置为key的过期时间即可。

    计算的java代码如下:

        /**
         * 计算第二天凌晨与当前时间的时间差秒数
         *
         * @return
         */
        public static Long getNowToNextDaySeconds() {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_YEAR, 1);//相差的天数
            cal.set(Calendar.HOUR_OF_DAY, 0);//相差的小时
            cal.set(Calendar.MINUTE, 0);//分钟
            cal.set(Calendar.SECOND, 0);//
            cal.set(Calendar.MILLISECOND, 0);//毫秒
            return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
        }

    返回值的单位是秒。

  • 相关阅读:
    IE 浏览器版本切换
    NOIP 模拟赛 简单题
    NOIP 模拟赛 左右横跳
    [LNOI2014]LCA
    JZOJ 4216.平方和
    [ZJOI2013]K大数查询
    JZOJ 3207.Orthogonal Anagram
    【模板】笛卡尔树
    hadoop 之 某一个datanode启动失败(Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to)
    java对象的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/zys2019/p/16401508.html
Copyright © 2020-2023  润新知