actOrder.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. 'use strict';
  2. const { CrudService } = require('naf-framework-mongoose-free/lib/service');
  3. const { BusinessError, ErrorCode } = require('naf-core').Error;
  4. const _ = require('lodash');
  5. const assert = require('assert');
  6. //
  7. class ActOrderService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx, 'actorder');
  10. this.model = this.ctx.model.Trade.ActOrder;
  11. this.platformActModel = this.ctx.model.System.PlatformAct;
  12. this.gjaModel = this.ctx.model.Shop.GoodsJoinAct;
  13. }
  14. /**
  15. * 创建订单与活动的关系
  16. * @param {String} id 订单id
  17. * @param {Object} data 订单数据
  18. * @param {Transaction} tran 数据库事务实例
  19. */
  20. async create(id, data, tran) {
  21. // 检查活动类型为1的 活动,再查下面的商品
  22. const actList = await this.platformActModel.find({ is_use: '0', type: { $ne: '0' } }, { _id: 1 });
  23. if (actList.length <= 0) return;
  24. // 整理出订单内的商品id
  25. const odGoods = data.goods.map(i => {
  26. const { _id: spec_id, goods } = i;
  27. const goods_id = _.get(goods, '_id');
  28. return { spec_id, goods_id };
  29. });
  30. const actOrderList = [];
  31. // 循环所有活动,找当前购买的商品,是否出现在这些活动之中,如果出现,就需要添加关系
  32. for (const act of actList) {
  33. const { _id: platformAct } = act;
  34. const query = { goods: odGoods.map(i => i.goods_id), platformAct };
  35. const goodsList = await this.gjaModel.find(query);
  36. // 获取受影响的商品
  37. const influenceGoods = goodsList.map(i => i.goods);
  38. if (influenceGoods.length <= 0) continue;
  39. const actOrder = { platform_act: platformAct, order_detail: id };
  40. // 用受影响的 商品id, 在 odGoods 中 找到对应的数据作为 actOrder的goods
  41. actOrder.goods = odGoods.filter(f => influenceGoods.includes(f.goods_id));
  42. actOrderList.push(actOrder);
  43. }
  44. for (const data of actOrderList) {
  45. tran.insert('ActOrder', data);
  46. }
  47. }
  48. }
  49. module.exports = ActOrderService;