cshenfu
2024-05-21 09d8c671d5e6e6045677bfb5218a5fb78c26aa0f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const userGoodsDao = require('../../dao/modules/userGoodsDao.js')
 
// 获取多少天后的时间
function getDateStr(today, addDayCount) {
    var dd;
    if (today) {
        dd = new Date(today);
    } else {
        dd = new Date();
    }
    dd.setDate(dd.getDate() + addDayCount); //获取AddDayCount天后的日期
    var y = dd.getFullYear();
    var m =
        dd.getMonth() + 1 < 10 ?
        "0" + (dd.getMonth() + 1) :
        dd.getMonth() + 1;
    var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
    return y + "-" + m + "-" + d + " 23:59:59";
}
 
//比较日期大小
function getDataCompare(d2) {
    //当前时间
    let d1 = new Date();
 
    //转换为标准时间"2019/12/29 23:59:59"
    d2 = d2.replace(/-/g, "/");
    d2 = new Date(d2);
 
    //如果当前时间大于到期时间
    //valueOf() 函数返回指定对象的原始值,这里返回以毫秒数存储的时间值
    return d1.valueOf() > d2.valueOf()
}
 
module.exports = async (obj, originalParam) => {
    let user_order_success = true;
    let { data = {}, verifyResult } = obj;
    let { db, _ } = originalParam;
    let {
        out_trade_no,
        total_fee
    } = data;
 
    //设置订单支付成功
    let order = await db.collection('uni-id-base-order').doc(out_trade_no)
        .update({
            status: 2,
            transaction_id: data.payNo,
            paid_time: new Date().getTime(),
            update_time: new Date().getTime()
        });
 
 
    //----发货----
    let goods = (await db.collection('order_goods').where({
        oid: out_trade_no
    }).get({
        getOne: true
    })).data[0]
 
 
    // 不同类型的会员 续期处理?
    //全部记录在 user 的 vip_role 字段
    //字段内容示例
    // const vip_role = {
    //     'all': [], //拥有的所有权限类别
    //     'role1': 'express_date', //权限 - 过期时间
    // }
 
    //分别查询出当前用户信息 以及 会员信息
    let user_id = goods.user_id
    let goods_id = goods.goods_id
 
    let currentUser = (await db.collection('uni-id-users').where({
        _id: user_id
    }).get({
        getOne: true
    })).data[0]
 
    let currentRole = (await db.collection('uce-vip-role').where({
        _id: goods_id
    }).get({
        getOne: true
    })).data[0]
 
    //当前已有权限
    let vip_role = currentUser.vip_role || { all: [] }
    if (vip_role.all.includes(currentRole.role_type)) {
        if (vip_role[currentRole.role_type] == 0) {
            //如果之前是永久会员 不处理
            vip_role[currentRole.role_type] = 0
        } else if (currentRole.expire_days == 0) {
            //如果现在是永久会员 直接处理
            vip_role[currentRole.role_type] = 0
        } else {
            //先判断是否已经过期
            if (getDataCompare(vip_role[currentRole.role_type])) {
                vip_role[currentRole.role_type] = getDateStr(null, currentRole.expire_days)
            } else {
                vip_role[currentRole.role_type] = getDateStr(vip_role[currentRole.role_type],
                    currentRole.expire_days)
            }
        }
    } else {
        vip_role.all.push(currentRole.role_type)
        if (currentRole.expire_days == 0) {
            //如果是永久会员
            vip_role[currentRole.role_type] = 0
        } else {
            //否则就有过期时间
            vip_role[currentRole.role_type] = getDateStr(null, currentRole.expire_days)
        }
    }
 
    //更新当前用户的信息
    await db.collection('uni-id-users').where({
        _id: user_id
    }).update({
        vip_role: vip_role
    })
 
    return user_order_success;
};