12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 'use strict';
- const { CrudService } = require('naf-framework-mongoose-free/lib/service');
- const { BusinessError, ErrorCode } = require('naf-core').Error;
- const _ = require('lodash');
- const assert = require('assert');
- const moment = require('moment');
- //
- class CouponService extends CrudService {
- constructor(ctx) {
- super(ctx, 'coupon');
- this.model = this.ctx.model.Trade.Coupon;
- this.userCouponModel = this.ctx.model.User.UserCoupon;
- }
- async userView(filter, { skip = 0, limit, sort, desc, projection } = {}) {
- const customer = _.get(this.ctx, 'user._id');
- if (!customer) throw new BusinessError(ErrorCode.NOT_LOGIN, '未找到用户登陆信息');
- let list = await this.query(filter, { skip, limit, sort, desc, projection });
- list = await this.makeShowData(list);
- // 还需要判断用户是否领取过了
- for (const coupon of list) {
- const { get_limit, get_limit_config } = coupon;
- if (get_limit === 'nolimit') coupon.canGet = true;
- else {
- const max = _.get(get_limit_config, 'max', 1);
- const num = await this.userCouponModel.count({ coupon: coupon._id, customer });
- if (this.ctx.minus(num, max) >= 0) coupon.canGet = false;
- else coupon.canGet = true;
- }
- }
- return list;
- }
- async makeShowData(couponList) {
- const dictDataModel = this.ctx.model.Dev.DictData;
- // 过期字典
- const expList = await dictDataModel.find({ code: 'coupon_expire_type' });
- // 减免字典
- const disList = await dictDataModel.find({ code: 'coupon_discount_type' });
- // 使用字典
- const useList = await dictDataModel.find({ code: 'coupon_use_limit' });
- // 领取字典
- const getList = await dictDataModel.find({ code: 'coupon_get_limit' });
- couponList = couponList.map(coupon => {
- const { _id } = coupon;
- let obj = { _id, name: _.get(coupon, 'name') };
- // 失效
- const expire_type = _.get(coupon, 'expire_type');
- const expire_type_label = _.get(
- expList.find(f => f.value === expire_type),
- 'label'
- );
- let expire_time = _.get(coupon, `expire_config.${expire_type}`);
- if (expire_time) {
- if (expire_type === 'fixed') expire_time = expire_time.join(' 至 ');
- }
- obj = { ...obj, expire_type, expire_type_label, expire_time };
- // 减免
- const discount_type = _.get(coupon, 'discount_type');
- const discount_type_label = _.get(
- disList.find(f => f.value === discount_type),
- 'label'
- );
- const discount_config = _.get(coupon, 'discount_config');
- obj = { ...obj, discount_type, discount_type_label, discount_config };
- // 使用
- const use_limit = _.get(coupon, 'use_limit');
- const use_limit_label = _.get(
- useList.find(f => f.value === use_limit),
- 'label'
- );
- const use_limit_config = _.get(coupon, 'use_limit_config');
- obj = { ...obj, use_limit, use_limit_label, use_limit_config };
- // 领取
- const get_limit = _.get(coupon, 'get_limit');
- const get_limit_label = _.get(
- getList.find(f => f.value === get_limit),
- 'label'
- );
- const get_limit_config = _.get(coupon, 'get_limit_config');
- obj = { ...obj, get_limit, get_limit_label, get_limit_config };
- return obj;
- });
- return couponList;
- }
- }
- module.exports = CouponService;
|