|
@@ -0,0 +1,52 @@
|
|
|
+'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;
|