|
@@ -91,9 +91,9 @@ class CardService extends CrudService {
|
|
}
|
|
}
|
|
// 4,判断是129套餐,还是169套餐,如果是129套餐,那就不需要继续了
|
|
// 4,判断是129套餐,还是169套餐,如果是129套餐,那就不需要继续了
|
|
if (set === '129') return user;
|
|
if (set === '129') return user;
|
|
- // 根据等级,找下推荐人应该加多少分
|
|
|
|
- const { stockholder } = recommender;
|
|
|
|
- // 重新计算推荐人用户等级
|
|
|
|
|
|
+ // 5,根据等级,找下推荐人应该加多少分
|
|
|
|
+ const { stockholder, level } = recommender;
|
|
|
|
+ // 6,重新计算推荐人用户等级
|
|
const nlevel = await this.reComputedLevel(recommender);
|
|
const nlevel = await this.reComputedLevel(recommender);
|
|
recommender.level = nlevel;
|
|
recommender.level = nlevel;
|
|
const rank = this.getRank().find(f => f.rank === nlevel);
|
|
const rank = this.getRank().find(f => f.rank === nlevel);
|
|
@@ -102,7 +102,7 @@ class CardService extends CrudService {
|
|
return user;
|
|
return user;
|
|
}
|
|
}
|
|
let { score } = rank;
|
|
let { score } = rank;
|
|
- // 需要检查股东奖,是否需要+10
|
|
|
|
|
|
+ // 7,需要检查股东奖,是否需要+10
|
|
if (stockholder) score = score + this.stockholder_point;
|
|
if (stockholder) score = score + this.stockholder_point;
|
|
else {
|
|
else {
|
|
// 去写检查是不是股东的问题
|
|
// 去写检查是不是股东的问题
|
|
@@ -118,7 +118,7 @@ class CardService extends CrudService {
|
|
score = score + 10;
|
|
score = score + 10;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // 加积分
|
|
|
|
|
|
+ // 8,加积分
|
|
recommender.points = `${recommender.points + score}`;
|
|
recommender.points = `${recommender.points + score}`;
|
|
await recommender.save();
|
|
await recommender.save();
|
|
const record = _.pick(recommender, [ 'mobile', 'name' ]);
|
|
const record = _.pick(recommender, [ 'mobile', 'name' ]);
|
|
@@ -128,10 +128,14 @@ class CardService extends CrudService {
|
|
try {
|
|
try {
|
|
await this.record.create(record);
|
|
await this.record.create(record);
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- this.logger.error(`积分记录添加失败${JSON.stringify(record)}`);
|
|
|
|
|
|
+ this.logger.error(`line-131-积分记录添加失败${JSON.stringify(record)}`);
|
|
}
|
|
}
|
|
- // TODO 添加推荐人等级检查与同级加分
|
|
|
|
- this.toCheckRecommender(recommender._id);
|
|
|
|
|
|
+ // 9,以上为用户创建,计算推荐人等级=>计算推荐人积分=>生成记录
|
|
|
|
+ // 先算等级,避免分数基础部队
|
|
|
|
+ // 推荐人升级,进行推荐人等级检查与同级加分(原等级和现等级不同,说明升级了,需要检查下)
|
|
|
|
+ if (level !== nlevel) this.toCheckRecommender(recommender._id);
|
|
|
|
+ // 10,给推荐人的推荐人反佣金
|
|
|
|
+ this.rtrScore(recommender._id, level);
|
|
return user;
|
|
return user;
|
|
}
|
|
}
|
|
/**
|
|
/**
|
|
@@ -181,7 +185,7 @@ class CardService extends CrudService {
|
|
const group_number = b.length + c;
|
|
const group_number = b.length + c;
|
|
return group_number > this.stockholder_limit;
|
|
return group_number > this.stockholder_limit;
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- this.ctx.logger.error(`${moment().format('YYYY-MM-DD HH:mm:ss')}-${user.name}-${user.mobile}:股东检查出错`);
|
|
|
|
|
|
+ this.ctx.logger.error(`line-188-${moment().format('YYYY-MM-DD HH:mm:ss')}-${user.name}-${user.mobile}:股东检查出错`);
|
|
return undefined;
|
|
return undefined;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -205,12 +209,12 @@ class CardService extends CrudService {
|
|
try {
|
|
try {
|
|
await this.record.create(record);
|
|
await this.record.create(record);
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- this.logger.error(`积分记录添加失败${JSON.stringify(record)}`);
|
|
|
|
|
|
+ this.logger.error(`line-212-积分记录添加失败${JSON.stringify(record)}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- this.ctx.logger.error(`${moment().format('YYYY-MM-DD HH:mm:ss')}-车奖检查出错`);
|
|
|
|
|
|
+ this.ctx.logger.error(`line-217-${moment().format('YYYY-MM-DD HH:mm:ss')}-车奖检查出错`);
|
|
return undefined;
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -234,30 +238,64 @@ class CardService extends CrudService {
|
|
* @param {String} id 该用户的推荐人id
|
|
* @param {String} id 该用户的推荐人id
|
|
*/
|
|
*/
|
|
async toCheckRecommender(id) {
|
|
async toCheckRecommender(id) {
|
|
- const rec = await this.model.findById(id);
|
|
|
|
- if (!rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人信息');
|
|
|
|
- const { r_mobile, level } = rec;
|
|
|
|
- // TODO 如果之给1次,就在这里判断是否给过,给过就不给了
|
|
|
|
- // 查出推荐人的推荐人
|
|
|
|
- const r_rec = await this.model.findOne({ mobile: r_mobile });
|
|
|
|
- if (!r_rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人的推荐人信息');
|
|
|
|
- const { level: rlevel } = r_rec;
|
|
|
|
- // 推荐人等级已经计算过了,直接比较
|
|
|
|
- if (level === rlevel) {
|
|
|
|
- rec.points = rec.points + 20;
|
|
|
|
- await rec.save();
|
|
|
|
- }
|
|
|
|
- const record = _.pick(rec, [ 'mobile', 'name' ]);
|
|
|
|
- record.points = rec.points + 20;
|
|
|
|
- record.opera = '同级奖励';
|
|
|
|
- record.params = { name: user.name, mobile: user.mobile };
|
|
|
|
- await this.record.create(record);
|
|
|
|
|
|
+ try {
|
|
|
|
+ const rec = await this.model.findById(id);
|
|
|
|
+ if (!rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人信息');
|
|
|
|
+ const { r_mobile, level } = rec;
|
|
|
|
+ // 查出推荐人的推荐人
|
|
|
|
+ const r_rec = await this.model.findOne({ mobile: r_mobile });
|
|
|
|
+ if (!r_rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人的推荐人信息');
|
|
|
|
+ const { level: rlevel } = r_rec;
|
|
|
|
+ // 推荐人等级已经计算过了,直接比较
|
|
|
|
+ if (level === rlevel) {
|
|
|
|
+ rec.points = rec.points + 20;
|
|
|
|
+ await rec.save();
|
|
|
|
+ }
|
|
|
|
+ const record = _.pick(rec, [ 'mobile', 'name' ]);
|
|
|
|
+ try {
|
|
|
|
+ record.points = 20;
|
|
|
|
+ record.opera = '同级奖励';
|
|
|
|
+ await this.record.create(record);
|
|
|
|
+ } catch (error) {
|
|
|
|
+ this.logger.error(`line-260-积分记录添加失败${JSON.stringify(record)}`);
|
|
|
|
+ }
|
|
} catch (error) {
|
|
} catch (error) {
|
|
- this.logger.error(`积分记录添加失败${JSON.stringify(record)}`);
|
|
|
|
|
|
+ this.logger.error(`line-263-捕获检查用户推荐人的推荐人失败:${JSON.stringify(error)}`);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 给该用户的推荐人的推荐人反佣金
|
|
|
|
+ * @param {String} id 该用户的推荐人id
|
|
|
|
+ * @param {Number} level 该用户的推荐人原等级,需要按这个等级去反佣
|
|
|
|
+ */
|
|
|
|
+ async rtrScore(id, level) {
|
|
|
|
+ try {
|
|
|
|
+ const rec = await this.model.findById(id);
|
|
|
|
+ if (!rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人信息');
|
|
|
|
+ const { r_mobile } = rec;
|
|
|
|
+ // 查出推荐人的推荐人
|
|
|
|
+ const r_rec = await this.model.findOne({ mobile: r_mobile });
|
|
|
|
+ if (!r_rec) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到推荐人的推荐人信息');
|
|
|
|
+ // r_level:推荐人的推荐人的等级
|
|
|
|
+ const { level: r_level } = r_rec;
|
|
|
|
+ const points = this.getReturns(level, r_level);
|
|
|
|
+ r_rec.points = r_rec.points + points;
|
|
|
|
+ await r_rec.save();
|
|
|
|
+ const record = _.pick(rec, [ 'mobile', 'name' ]);
|
|
|
|
+ try {
|
|
|
|
+ record.points = points;
|
|
|
|
+ record.opera = '直推下级完成业绩反佣金';
|
|
|
|
+ await this.record.create(record);
|
|
|
|
+ } catch (error) {
|
|
|
|
+ this.logger.error(`line-292-积分记录添加失败${JSON.stringify(record)}`);
|
|
|
|
+ }
|
|
|
|
+ } catch (error) {
|
|
|
|
+ this.logger.error(`line-295-捕获检查用户推荐人的推荐人失败:${JSON.stringify(error)}`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 等级设置
|
|
* 等级设置
|
|
* @property rank 等级:1,业务员;2,经理;3一星经理;4,二星经理;5,三星经理;6,四星经理;
|
|
* @property rank 等级:1,业务员;2,经理;3一星经理;4,二星经理;5,三星经理;6,四星经理;
|
|
@@ -318,6 +356,26 @@ class CardService extends CrudService {
|
|
},
|
|
},
|
|
];
|
|
];
|
|
}
|
|
}
|
|
|
|
+ /**
|
|
|
|
+ * 根据推荐人和推荐人的推荐人等级判断,该如何反給推荐人的推荐人佣金
|
|
|
|
+ * @param {Number} level 推荐人等级
|
|
|
|
+ * @param {Number} r_level 推荐人的推荐人等级
|
|
|
|
+ */
|
|
|
|
+ getReturns(level, r_level) {
|
|
|
|
+ // 同级固定反20
|
|
|
|
+ if (level === r_level) return 20;
|
|
|
|
+ const levels = [
|
|
|
|
+ { rank: 1, 2: 100, 3: 150, 4: 200, 5: 250, 6: 300 },
|
|
|
|
+ { rank: 2, 3: 50, 4: 100, 5: 150, 6: 200 },
|
|
|
|
+ { rank: 3, 4: 50, 5: 100, 6: 150 },
|
|
|
|
+ { rank: 4, 5: 50, 6: 100 },
|
|
|
|
+ { rank: 5, 6: 50 },
|
|
|
|
+ ];
|
|
|
|
+ // 根据推荐人等级,获取价格表的指定行
|
|
|
|
+ const obj = levels.find(f => f.rank === level);
|
|
|
|
+ if (!obj) throw new BusinessError(ErrorCode.SERVICE_FAULT, '为找到推荐人适合的规则');
|
|
|
|
+ return _.get(obj, r_level);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = CardService;
|
|
module.exports = CardService;
|