message.js 7.06 KB
// 消息 by acgpiano
'use strict';

const _ = require('lodash');
const moment = require('moment');
const helpers = global.yoho.helpers;

// 格式化时间
const _formatTime = (time) => {
    return moment(time).format('HH:mm:ss');
};

// 格式年月日
const _formatDay = (day) => {
    return moment(day).format('YYYY.MM.DD');
};

class messageModel extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

    // 获取列表页
    _list(result) {
        let final = [];

        if (result.data && result.data.list) {
            // PHP排序了,应该不用
            for (let item of result.data.list) {

                let obj = {
                    id: item.id,
                    isNotReaded: item.is_read === 'Y' ? false : true,
                    title: item.title,
                    time: `${item.create_date} ${_formatTime(item.create_time * 1000)}`,
                };

                if (item.body && item.type === 'pullCoupon') {
                    Object.assign(obj, {
                        birthType: true,

                        // name: item.body.name,
                        // collarTime: item.body.collar_time,
                        content: _.get(item, 'body.content', ''),
                        isCollar: item.body.is_collar === 'Y' ? true : false,
                        isOverTime: item.body.is_over_time === 'Y' ? true : false
                    });
                }

                final.push(obj);
            }
        }
        return final;
    }

    // 获取生日信息
    _getBirthCouponById(uid) {
        return this.get({data: {
            method: 'app.promotion.queryBirthCoupon',
            uid: uid,
            couponType: 4,
        }}).then(result => {
            if (result && result.data) {
                let final = {
                    ticket: []
                };

                final.birthType = true;
                if (result.data.list && result.data.list[0].body.is_collar === 'Y') {
                    final = {
                        isCollar: true
                    };
                } else {
                    if (result.data && !result.data[0].err) {
                        for (let coupon of result.data) {
                            final.ticket.push({
                                id: coupon.id ? coupon.id : '',
                                couponAmount: coupon.couponAmount,
                                couponName: coupon.couponName.split('-')[0],
                                startTime: _formatDay(coupon.startTime),
                                endTime: _formatDay(coupon.endTime),
                                useLimit: coupon.useLimit
                            });
                        }
                    } else {
                        final = {
                            err: result.data[0].err
                        };
                    }
                }
                return final;
            } else {
                if (result.code === 410) {
                    return [{err: result.message}];
                } else if (result.code === 411) {
                    return [{err: result.message}];
                } else {
                    return [];
                }
            }
        });
    }

    // 获取详情页
    _detail(result, id) {
        let final = {};

        if (result.data && result.data.list) {
            for (let item of result.data.list) {
                if (item.id === Number(id) && item.type !== 'showGetCoin' && item.type !== 'notice') {
                    final.sender = item.from;
                    final.title = item.title;
                    final.time = `${item.create_date} ${_formatTime(item.create_time * 1000)}`; // 时间

                    // 判断消息类型
                    switch (item.type) {
                        case 'button':
                            // 促销活动
                            if (item.body) {
                                final.sale = {
                                    image: item.body.image ? item.body.image : '',
                                    content: item.body.text ? item.body.text : '',
                                    btnLink: item.body.pc_link ? item.body.pc_link : '',
                                    btnName: item.body.button_text ? item.body.button_text : '',
                                };
                            }
                            break;
                        case 'pushCoupon':
                            // 查看优惠券
                            if (item.body) {
                                final.coupons = [];
                                final.coupons.push({
                                    remark: item.body.coupon_name ? item.body.coupon_name : '',
                                    useTime: item.body.time ? item.body.time : '',
                                    id: item.body.inboxId ? item.body.inboxId : '',
                                    price: item.body.price ? item.body.price : '',
                                    url: helpers.urlFormat('/home/coupons', {
                                        t: (new Date().getTime()) / 1000,
                                    }),
                                });
                            }
                            break;
                        default:
                            // 普通文本
                            final.text = {
                                content: item.body.content ? item.body.content : '',
                            };
                            break;
                    }
                }
            }
        }
        return final;
    }

    // 获取列表或详情
    getList(params) {
        return this.get({data: {
            method: 'app.inbox.getlist',
            page: params.page || 1,
            size: params.size || 10,
            uid: params.uid,
        }}).then(result => {
            if (params.msgid) {
                return this._detail(result, params.msgid);
            } else {
                return this._list(result);
            }
        });
    }

    // 删除消息
    delMsg(params) {
        return this.get({data: {
            method: 'app.inbox.delmessage',
            uid: params.uid,
            id: params.msgid,
        }}).then(result => {
            if (result && result.code === 200) {
                return {
                    code: 200
                };
            } else {
                return {
                    code: 400,
                    message: '出错啦~',
                };
            }
        });
    }

    // 领取优惠券
    pickCoupon(params) {
        return this.get({data: {
            method: 'app.promotion.getCoupon',
            uid: params.uid,
            couponId: params.couponId,
        }}).then(result => {
            if (result && result.code === 200) {
                return {
                    code: 200
                };
            } else {
                return {
                    code: result.code,
                    message: result.message,
                };
            }
        });
    }
}

module.exports = messageModel;