12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- '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;
|