lrf пре 2 година
родитељ
комит
17419d266b

+ 2 - 9
src/controller/chatRecord.controller.ts

@@ -36,10 +36,8 @@ export class ChatRecordController extends BaseController {
   async create(@Body() data: CreateDTO_chatRecord) {
     data.time = dayjs().format('YYYY-MM-DD HH:mm:ss');
     let result;
-    let updateRoom = false;
     if (data.room) {
       result = await this.service.create(data);
-      updateRoom = true;
     } else {
       // 先创建room,再创建聊天记录
       const { customer, shop, speaker } = data;
@@ -57,19 +55,14 @@ export class ChatRecordController extends BaseController {
       if (roomId) {
         data.room = roomId;
       } else {
-        roomData.last_chat = data.content;
-        roomData.last_person = speaker;
-        roomData.last_time = data.time;
         const roomDbData = await this.roomService.create(roomData);
         if (!roomDbData) throw new ServiceError('房间创建失败', FrameworkErrorEnum.SERVICE_FAULT);
         data.room = get(roomDbData, '_id');
       }
       result = await this.service.create(data);
     }
-    if (updateRoom) {
-      const rd = { last_chat: data.content, last_person: data.speaker, last_time: data.time };
-      await this.roomService.updateOne(data.room, rd);
-    }
+    const rd = { last_chat: get(result, '_id') };
+    await this.roomService.updateOne(data.room, rd);
     // mq 发送消息
     const room = await this.roomService.fetch(data.room);
     let receiver;

+ 6 - 1
src/controller/room.controller.ts

@@ -22,8 +22,13 @@ export class RoomController extends BaseController {
   @ApiResponse({ type: QueryVO_room })
   async query(@Query() filter: QueryDTO_room, @Query('skip') skip: number, @Query('limit') limit: number) {
     const data = await this.service.query(filter, { skip, limit });
+    const list = [];
+    for (const i of data) {
+      const nd = await this.service.countNotRead(filter, i);
+      list.push(nd);
+    }
     const total = await this.service.count(filter);
-    return { data, total };
+    return { data: list, total };
   }
 
   @Get('/:id')

+ 1 - 5
src/entity/chat/room.entity.ts

@@ -8,10 +8,6 @@ export class Room extends BaseModel {
   customer: string;
   @prop({ required: false, index: true, zh: '店铺', ref: 'Shop' })
   shop: string;
-  @prop({ required: false, index: false, zh: '最后发言' })
+  @prop({ required: false, index: false, zh: '最后发言', ref: 'ChatRecord' })
   last_chat: string;
-  @prop({ required: false, index: false, zh: '最后发言人' })
-  last_person: string;
-  @prop({ required: false, index: false, zh: '最后发言时间' })
-  last_time: string;
 }

+ 0 - 10
src/interface/room.interface.ts

@@ -16,10 +16,6 @@ export class FetchVO_room {
   'shop': string = undefined;
   @ApiProperty({ description: '最后发言' })
   'last_chat': string = undefined;
-  @ApiProperty({ description: '最后发言人' })
-  'last_person': string = undefined;
-  @ApiProperty({ description: '最后发言时间' })
-  'last_time': string = undefined;
 }
 
 export class QueryDTO_room extends SearchBase {
@@ -47,12 +43,6 @@ export class CreateDTO_room {
   @ApiProperty({ description: '最后发言' })
   @Rule(RuleType['string']().empty(''))
   'last_chat': string = undefined;
-  @ApiProperty({ description: '最后发言人' })
-  @Rule(RuleType['string']().empty(''))
-  'last_person': string = undefined;
-  @ApiProperty({ description: '最后发言时间' })
-  @Rule(RuleType['string']().empty(''))
-  'last_time': string = undefined;
 }
 
 export class CreateVO_room extends FetchVO_room {}

+ 12 - 1
src/service/room.service.ts

@@ -4,14 +4,25 @@ import { ReturnModelType } from '@typegoose/typegoose';
 import { BaseService } from 'free-midway-component';
 import { Room } from '../entity/chat/room.entity';
 import get = require('lodash/get');
+import { ChatRecord } from '../entity/chat/chatRecord.entity';
 type modelType = ReturnModelType<typeof Room>;
 @Provide()
 export class RoomService extends BaseService<modelType> {
   @InjectEntityModel(Room)
   model: modelType;
-
+  @InjectEntityModel(ChatRecord)
+  chatRecordModel: ReturnModelType<typeof ChatRecord>;
   async checkRoomIsExist(query) {
     const data = await this.model.findOne(query, { _id: 1 });
     return get(data, '_id');
   }
+  async countNotRead(filter, data) {
+    const query: any = { room: data._id, is_read: '0' };
+    if (filter.customer) query.speaker = filter.customer;
+    else if (filter.shop) query.speaker = filter.shop;
+    else return data;
+    const num = await this.chatRecordModel.count(query);
+    data.not_read = num;
+    return data;
+  }
 }