Browse Source

新增售后表跟评价表

zs 1 year ago
parent
commit
5ea213c68d

+ 89 - 0
src/controller/afterSale.controller.ts

@@ -0,0 +1,89 @@
+import {
+  Body,
+  Controller,
+  Del,
+  Get,
+  Inject,
+  Param,
+  Post,
+  Query,
+} from '@midwayjs/decorator';
+import { BaseController } from 'free-midway-component';
+import { AfterSaleService } from '../service/afterSale.service';
+import {
+  CDTO_afterSale,
+  CVO_afterSale,
+  FVO_afterSale,
+  QDTO_afterSale,
+  QVO_afterSale,
+  UDTO_afterSale,
+  UVAO_afterSale,
+} from '../interface/afterSale.interface';
+import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
+import { Validate } from '@midwayjs/validate';
+@ApiTags(['售后申请'])
+@Controller('/afterSale')
+export class AfterSaleController extends BaseController {
+  @Inject()
+  service: AfterSaleService;
+
+  @Post('/')
+  @Validate()
+  @ApiResponse({ type: CVO_afterSale })
+  async create(@Body() data: CDTO_afterSale) {
+    const dbData = await this.service.create(data);
+    const result = new CVO_afterSale(dbData);
+    return result;
+  }
+  @Get('/')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_afterSale })
+  async query(
+    @Query() filter: QDTO_afterSale,
+    @Query('skip') skip: number,
+    @Query('limit') limit: number
+  ) {
+    const list = await this.service.query(filter, { skip, limit });
+    const data = [];
+    for (const i of list) {
+      const newData = new QVO_afterSale(i);
+      data.push(newData);
+    }
+    const total = await this.service.count(filter);
+    return { data, total };
+  }
+
+  @Get('/:id')
+  @ApiResponse({ type: FVO_afterSale })
+  async fetch(@Param('id') id: string) {
+    const data = await this.service.fetch(id);
+    const result = new FVO_afterSale(data);
+    return result;
+  }
+
+  @Post('/:id')
+  @Validate()
+  @ApiResponse({ type: UVAO_afterSale })
+  async update(@Param('id') id: string, @Body() body: UDTO_afterSale) {
+    const result = await this.service.updateOne(id, body);
+    return result;
+  }
+
+  @Del('/:id')
+  @Validate()
+  async delete(@Param('id') id: string) {
+    await this.service.delete(id);
+    return 'ok';
+  }
+  async createMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+
+  async updateMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+
+  async deleteMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+}

+ 89 - 0
src/controller/rateOrder.controller.ts

@@ -0,0 +1,89 @@
+import {
+  Body,
+  Controller,
+  Del,
+  Get,
+  Inject,
+  Param,
+  Post,
+  Query,
+} from '@midwayjs/decorator';
+import { BaseController } from 'free-midway-component';
+import { RateOrderService } from '../service/rateOrder.service';
+import {
+  CDTO_rateOrder,
+  CVO_rateOrder,
+  FVO_rateOrder,
+  QDTO_rateOrder,
+  QVO_rateOrder,
+  UDTO_rateOrder,
+  UVAO_rateOrder,
+} from '../interface/rateOrder.interface';
+import { ApiResponse, ApiTags, ApiQuery } from '@midwayjs/swagger';
+import { Validate } from '@midwayjs/validate';
+@ApiTags(['订单评价'])
+@Controller('/rateOrder')
+export class RateOrderController extends BaseController {
+  @Inject()
+  service: RateOrderService;
+
+  @Post('/')
+  @Validate()
+  @ApiResponse({ type: CVO_rateOrder })
+  async create(@Body() data: CDTO_rateOrder) {
+    const dbData = await this.service.create(data);
+    const result = new CVO_rateOrder(dbData);
+    return result;
+  }
+  @Get('/')
+  @ApiQuery({ name: 'query' })
+  @ApiResponse({ type: QVO_rateOrder })
+  async query(
+    @Query() filter: QDTO_rateOrder,
+    @Query('skip') skip: number,
+    @Query('limit') limit: number
+  ) {
+    const list = await this.service.query(filter, { skip, limit });
+    const data = [];
+    for (const i of list) {
+      const newData = new QVO_rateOrder(i);
+      data.push(newData);
+    }
+    const total = await this.service.count(filter);
+    return { data, total };
+  }
+
+  @Get('/:id')
+  @ApiResponse({ type: FVO_rateOrder })
+  async fetch(@Param('id') id: string) {
+    const data = await this.service.fetch(id);
+    const result = new FVO_rateOrder(data);
+    return result;
+  }
+
+  @Post('/:id')
+  @Validate()
+  @ApiResponse({ type: UVAO_rateOrder })
+  async update(@Param('id') id: string, @Body() body: UDTO_rateOrder) {
+    const result = await this.service.updateOne(id, body);
+    return result;
+  }
+
+  @Del('/:id')
+  @Validate()
+  async delete(@Param('id') id: string) {
+    await this.service.delete(id);
+    return 'ok';
+  }
+  async createMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+
+  async updateMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+
+  async deleteMany(...args: any[]) {
+    throw new Error('Method not implemented.');
+  }
+}

+ 24 - 0
src/entity/afterSale.entity.ts

@@ -0,0 +1,24 @@
+import { modelOptions, prop } from '@typegoose/typegoose';
+import { BaseModel } from 'free-midway-component';
+@modelOptions({
+  schemaOptions: { collection: 'afterSale' },
+})
+export class AfterSale extends BaseModel {
+  @prop({ required: false, index: true, zh: '订单', ref: 'order' })
+  order: string;
+  @prop({ required: false, index: true, zh: '用户', ref: 'user' })
+  user: string;
+  @prop({
+    required: false,
+    index: true,
+    zh: '类型',
+    remark: '字典表:order_type',
+  })
+  type: string;
+  @prop({ required: false, index: false, zh: '申请理由' })
+  reason: string;
+  @prop({ required: false, index: false, zh: '凭证图片' })
+  file: Array<any>;
+  @prop({ required: false, index: true, zh: '申请时间' })
+  apply_time: string;
+}

+ 36 - 0
src/entity/rateOrder.entity.ts

@@ -0,0 +1,36 @@
+import { modelOptions, prop } from '@typegoose/typegoose';
+import { BaseModel } from 'free-midway-component';
+@modelOptions({
+  schemaOptions: { collection: 'rateOrder' },
+})
+export class RateOrder extends BaseModel {
+  @prop({ required: false, index: true, zh: '订单', ref: 'order' })
+  order: string;
+  @prop({ required: false, index: true, zh: '来源' })
+  source: string;
+  @prop({ required: false, index: true, zh: '用户', ref: 'user' })
+  user: string;
+  @prop({
+    required: false,
+    index: true,
+    zh: '类型',
+    remark: '字典表:order_type',
+  })
+  type: string;
+  @prop({ required: false, index: true, zh: '评分' })
+  rate: string;
+  @prop({ required: false, index: false, zh: '内容' })
+  content: string;
+  @prop({ required: false, index: false, zh: '图片' })
+  file: Array<any>;
+  @prop({ required: false, index: true, zh: '评价时间' })
+  create_time: string;
+  @prop({
+    required: false,
+    index: true,
+    zh: '状态',
+    remark: '字典表:exam_status',
+    default: '0',
+  })
+  status: string;
+}

+ 94 - 0
src/interface/afterSale.interface.ts

@@ -0,0 +1,94 @@
+import { Rule, RuleType } from '@midwayjs/validate';
+import { ApiProperty } from '@midwayjs/swagger';
+import { SearchBase } from 'free-midway-component';
+import get = require('lodash/get');
+const dealVO = (cla, data) => {
+  for (const key in cla) {
+    const val = get(data, key);
+    if (val || val === 0) cla[key] = val;
+  }
+};
+export class FVO_afterSale {
+  constructor(data: object) {
+    dealVO(this, data);
+  }
+  @ApiProperty({ description: '数据id' })
+  _id: string = undefined;
+  @ApiProperty({ description: '订单' })
+  'order': string = undefined;
+  @ApiProperty({ description: '用户' })
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
+  @ApiProperty({ description: '申请理由' })
+  'reason': string = undefined;
+  @ApiProperty({ description: '凭证图片' })
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '申请时间' })
+  'apply_time': string = undefined;
+}
+
+export class QDTO_afterSale extends SearchBase {
+  constructor() {
+    const like_prop = [];
+    const props = ['order', 'user', 'type', 'apply_time'];
+    const mapping = [];
+    super({ like_prop, props, mapping });
+  }
+  @ApiProperty({ description: '订单' })
+  'order': string = undefined;
+  @ApiProperty({ description: '用户' })
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
+  @ApiProperty({ description: '申请时间' })
+  'apply_time': string = undefined;
+}
+
+export class QVO_afterSale extends FVO_afterSale {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class CDTO_afterSale {
+  @ApiProperty({ description: '订单' })
+  @Rule(RuleType['string']().empty(''))
+  'order': string = undefined;
+  @ApiProperty({ description: '用户' })
+  @Rule(RuleType['string']().empty(''))
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  @Rule(RuleType['string']().empty(''))
+  'type': string = undefined;
+  @ApiProperty({ description: '申请理由' })
+  @Rule(RuleType['string']().empty(''))
+  'reason': string = undefined;
+  @ApiProperty({ description: '凭证图片' })
+  @Rule(RuleType['array']().empty(''))
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '申请时间' })
+  @Rule(RuleType['string']().empty(''))
+  'apply_time': string = undefined;
+}
+
+export class CVO_afterSale extends FVO_afterSale {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class UDTO_afterSale extends CDTO_afterSale {
+  @ApiProperty({ description: '数据id' })
+  @Rule(RuleType['string']().empty(''))
+  _id: string = undefined;
+}
+
+export class UVAO_afterSale extends FVO_afterSale {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}

+ 123 - 0
src/interface/rateOrder.interface.ts

@@ -0,0 +1,123 @@
+import { Rule, RuleType } from '@midwayjs/validate';
+import { ApiProperty } from '@midwayjs/swagger';
+import { SearchBase } from 'free-midway-component';
+import get = require('lodash/get');
+const dealVO = (cla, data) => {
+  for (const key in cla) {
+    const val = get(data, key);
+    if (val || val === 0) cla[key] = val;
+  }
+};
+export class FVO_rateOrder {
+  constructor(data: object) {
+    dealVO(this, data);
+  }
+  @ApiProperty({ description: '数据id' })
+  _id: string = undefined;
+  @ApiProperty({ description: '订单' })
+  'order': string = undefined;
+  @ApiProperty({ description: '来源' })
+  'source': string = undefined;
+  @ApiProperty({ description: '用户' })
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
+  @ApiProperty({ description: '评分' })
+  'rate': string = undefined;
+  @ApiProperty({ description: '内容' })
+  'content': string = undefined;
+  @ApiProperty({ description: '图片' })
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '评价时间' })
+  'create_time': string = undefined;
+  @ApiProperty({ description: '状态' })
+  'status': string = undefined;
+}
+
+export class QDTO_rateOrder extends SearchBase {
+  constructor() {
+    const like_prop = [];
+    const props = [
+      'order',
+      'source',
+      'user',
+      'type',
+      'rate',
+      'create_time',
+      'status',
+    ];
+    const mapping = [];
+    super({ like_prop, props, mapping });
+  }
+  @ApiProperty({ description: '订单' })
+  'order': string = undefined;
+  @ApiProperty({ description: '来源' })
+  'source': string = undefined;
+  @ApiProperty({ description: '用户' })
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  'type': string = undefined;
+  @ApiProperty({ description: '评分' })
+  'rate': string = undefined;
+  @ApiProperty({ description: '评价时间' })
+  'create_time': string = undefined;
+  @ApiProperty({ description: '状态' })
+  'status': string = undefined;
+}
+
+export class QVO_rateOrder extends FVO_rateOrder {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class CDTO_rateOrder {
+  @ApiProperty({ description: '订单' })
+  @Rule(RuleType['string']().empty(''))
+  'order': string = undefined;
+  @ApiProperty({ description: '来源' })
+  @Rule(RuleType['string']().empty(''))
+  'source': string = undefined;
+  @ApiProperty({ description: '用户' })
+  @Rule(RuleType['string']().empty(''))
+  'user': string = undefined;
+  @ApiProperty({ description: '类型' })
+  @Rule(RuleType['string']().empty(''))
+  'type': string = undefined;
+  @ApiProperty({ description: '评分' })
+  @Rule(RuleType['string']().empty(''))
+  'rate': string = undefined;
+  @ApiProperty({ description: '内容' })
+  @Rule(RuleType['string']().empty(''))
+  'content': string = undefined;
+  @ApiProperty({ description: '图片' })
+  @Rule(RuleType['array']().empty(''))
+  'file': Array<any> = undefined;
+  @ApiProperty({ description: '评价时间' })
+  @Rule(RuleType['string']().empty(''))
+  'create_time': string = undefined;
+  @ApiProperty({ description: '状态' })
+  @Rule(RuleType['string']().empty(''))
+  'status': string = undefined;
+}
+
+export class CVO_rateOrder extends FVO_rateOrder {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}
+
+export class UDTO_rateOrder extends CDTO_rateOrder {
+  @ApiProperty({ description: '数据id' })
+  @Rule(RuleType['string']().empty(''))
+  _id: string = undefined;
+}
+
+export class UVAO_rateOrder extends FVO_rateOrder {
+  constructor(data: object) {
+    super(data);
+    dealVO(this, data);
+  }
+}

+ 11 - 0
src/service/afterSale.service.ts

@@ -0,0 +1,11 @@
+import { Provide } from '@midwayjs/decorator';
+import { InjectEntityModel } from '@midwayjs/typegoose';
+import { ReturnModelType } from '@typegoose/typegoose';
+import { BaseService } from 'free-midway-component';
+import { AfterSale } from '../entity/afterSale.entity';
+type modelType = ReturnModelType<typeof AfterSale>;
+@Provide()
+export class AfterSaleService extends BaseService<modelType> {
+  @InjectEntityModel(AfterSale)
+  model: modelType;
+}

+ 11 - 0
src/service/rateOrder.service.ts

@@ -0,0 +1,11 @@
+import { Provide } from '@midwayjs/decorator';
+import { InjectEntityModel } from '@midwayjs/typegoose';
+import { ReturnModelType } from '@typegoose/typegoose';
+import { BaseService } from 'free-midway-component';
+import { RateOrder } from '../entity/rateOrder.entity';
+type modelType = ReturnModelType<typeof RateOrder>;
+@Provide()
+export class RateOrderService extends BaseService<modelType> {
+  @InjectEntityModel(RateOrder)
+  model: modelType;
+}