|
@@ -0,0 +1,63 @@
|
|
|
+'use strict';
|
|
|
+const { CrudService } = require('naf-framework-mongoose/lib/service');
|
|
|
+const { BusinessError, ErrorCode } = require('naf-core').Error;
|
|
|
+const _ = require('lodash');
|
|
|
+const assert = require('assert');
|
|
|
+
|
|
|
+// 超市
|
|
|
+class TicketService extends CrudService {
|
|
|
+ constructor(ctx) {
|
|
|
+ super(ctx, 'ticket');
|
|
|
+ this.model = this.ctx.model.Ticket;
|
|
|
+ this.record = this.ctx.model.TicketRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+ async query({ skip = 0, limit = 0, ...query } = {}) {
|
|
|
+ const nquery = _.omit(query, [ 'name' ]);
|
|
|
+ const arr = [
|
|
|
+ { $match: nquery },
|
|
|
+ {
|
|
|
+ $lookup: {
|
|
|
+ from: 'organization',
|
|
|
+ localField: 'user_id',
|
|
|
+ foreignField: '_id',
|
|
|
+ as: 'company',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ { $unwind: '$company' },
|
|
|
+ { $addFields: { name: '$company.name' } },
|
|
|
+ { $project: { _id: 1, name: 1, meta: 1, status: 1 } },
|
|
|
+ ];
|
|
|
+ if (_.get(query, 'name')) {
|
|
|
+ arr.push({ $match: { name: new RegExp(_.get(query, 'name')) } });
|
|
|
+ }
|
|
|
+ let res = await this.model.aggregate(arr);
|
|
|
+ const total = res.length;
|
|
|
+ if (limit && limit !== '0') {
|
|
|
+ res = _.slice(res, parseInt(skip), parseInt(limit));
|
|
|
+ }
|
|
|
+ return { data: res, total };
|
|
|
+ }
|
|
|
+
|
|
|
+ async fetch({ id }) {
|
|
|
+ let res = await this.model.findById(id);
|
|
|
+ if (!res) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定数据');
|
|
|
+ res = JSON.parse(JSON.stringify(res));
|
|
|
+ const { user_id } = res;
|
|
|
+ if (user_id) {
|
|
|
+ const company = await this.ctx.model.Organization.findById(user_id);
|
|
|
+ if (company) res.name = company.name;
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+ async status({ id }, body) {
|
|
|
+ const { status } = body;
|
|
|
+ await this.model.updateOne({ _id: id }, { status });
|
|
|
+ // TODO,添加记录
|
|
|
+ body.ticket_id = id;
|
|
|
+ await this.record.create(body);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = TicketService;
|