'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'); // class ActOrderService extends CrudService { constructor(ctx) { super(ctx, 'actorder'); this.model = this.ctx.model.Trade.ActOrder; this.platformActModel = this.ctx.model.System.PlatformAct; this.gjaModel = this.ctx.model.Shop.GoodsJoinAct; } /** * 创建订单与活动的关系 * @param {String} id 订单id * @param {Object} data 订单数据 * @param {Transaction} tran 数据库事务实例 */ async create(id, data, tran) { // 检查活动类型为1的 活动,再查下面的商品 const actList = await this.platformActModel.find({ is_use: '0', type: { $ne: '0' } }, { _id: 1 }); if (actList.length <= 0) return; // 整理出订单内的商品id const odGoods = data.goods.map(i => { const { _id: spec_id, goods } = i; const goods_id = _.get(goods, '_id'); return { spec_id, goods_id }; }); const actOrderList = []; // 循环所有活动,找当前购买的商品,是否出现在这些活动之中,如果出现,就需要添加关系 for (const act of actList) { const { _id: platformAct } = act; const query = { goods: odGoods.map(i => i.goods_id), platformAct }; const goodsList = await this.gjaModel.find(query); // 获取受影响的商品 const influenceGoods = goodsList.map(i => i.goods); if (influenceGoods.length <= 0) continue; const actOrder = { platform_act: platformAct, order_detail: id }; // 用受影响的 商品id, 在 odGoods 中 找到对应的数据作为 actOrder的goods actOrder.goods = odGoods.filter(f => influenceGoods.includes(f.goods_id)); actOrderList.push(actOrder); } for (const data of actOrderList) { tran.insert('ActOrder', data); } } } module.exports = ActOrderService;