import { BadRequestException, Body, Controller, Get, Post } from '@nestjs/common'; import { AppService } from './app.service'; import * as fs from 'fs'; import { ApiProperty } from '@nestjs/swagger'; import { IsArray, IsBoolean, IsDateString, IsNotEmpty, IsString } from 'class-validator'; import { NodeVisitorEntity } from './node-visitor.entity'; import { DataSource } from 'typeorm'; import * as bluebird from 'bluebird'; import { NodeOtherVisitorEntity } from './node-other-visitor.entity'; import * as moment from 'moment'; export class Electronics { @ApiProperty({ description: "电子产品名称" }) @IsString() @IsNotEmpty() public name: string; } export class VisitorList { @ApiProperty({ description: "访客姓名" }) @IsString() @IsNotEmpty() public name: string; @ApiProperty({ description: "访客身份证号" }) @IsString() @IsNotEmpty() public identity_card_no: string; @ApiProperty({ description: "国籍(中国/其他国籍)" }) @IsString() @IsNotEmpty() public nationality_type: string; @ApiProperty({ description: "国籍名称" }) @IsString() @IsNotEmpty() public nationality: string; } export class CreateVisitor { @ApiProperty({ description: "申请人" }) @IsString() @IsNotEmpty() public applicant: string; @ApiProperty({ description: "申请人部门" }) @IsString() @IsNotEmpty() public applicant_department: string; @ApiProperty({ description: "申请日期" }) @IsDateString() @IsNotEmpty() public apply_date: string; @ApiProperty({ description: "申请单号" }) @IsString() @IsNotEmpty() public code: string; // TODO 确定访客类型 @ApiProperty({ description: "来访类型" }) @IsString() @IsNotEmpty() public visitor_type: string; @ApiProperty({ description: "来访区域" }) @IsString() @IsNotEmpty() public area: string; @ApiProperty({ description: "来访单位" }) @IsString() @IsNotEmpty() public visitor_unit: string; @ApiProperty({ description: "访客人数" }) @IsString() @IsNotEmpty() public visitor_number: string; @ApiProperty({ description: "交通方式" }) @IsString() @IsNotEmpty() public transport: string; @ApiProperty({ description: "车牌号" }) @IsString() @IsNotEmpty() public plate_no: string; @ApiProperty({ description: "起始日期" }) @IsDateString() @IsNotEmpty() public start_date: string; @ApiProperty({ description: "截止日期" }) @IsDateString() @IsNotEmpty() public end_date: string; @ApiProperty({ description: "被访人" }) @IsString() @IsNotEmpty() public visited_staff: string; @ApiProperty({ description: "被访部门" }) @IsString() @IsNotEmpty() public visited_deparment: string; @ApiProperty({ description: "被访部门" }) @IsString() @IsNotEmpty() public purpose: string; @ApiProperty({ description: "携带的电子产品" }) // @ApiProperty({ description: "携带的电子产品", type: [Electronics] }) @IsArray() @IsNotEmpty() public electronics: string; // public electronics: Electronics[]; @ApiProperty({ description: "访客清单", type: [VisitorList] }) @IsArray() @IsNotEmpty() public visitor_list: VisitorList[]; @ApiProperty({ description: "访客是否有可能接触受控设备" }) @IsBoolean() @IsNotEmpty() public may_access_sensitive_info: boolean; } @Controller() export class AppController { constructor( private readonly appService: AppService, private readonly dataSource: DataSource, ) { } @Get() getHello(): string { return this.appService.getHello(); } // @Get("/doc/json") // getDoc(): string { // const json = fs.readFileSync("swagger-spec.json", "utf-8"); // return JSON.parse(json); // } // @Get("/app.config") // appConfig() { // return { // app_id: process.env.QUNSENSE_SUITE_ID // } // } // @Get("/WW_verify_n9zX2u8E9ShFgYmx.txt") // config(): string { // return "n9zX2u8E9ShFgYmx"; // } @Post("/visitor") async create(@Body() data: CreateVisitor) { if (new Date(data.apply_date).toString() == "Invalid Date") { throw new BadRequestException("apply_date 格式不正确") } if (new Date(data.start_date).toString() == "Invalid Date") { throw new BadRequestException("start_date 格式不正确") } if (new Date(data.end_date).toString() == "Invalid Date") { throw new BadRequestException("end_date 格式不正确") } return await this.dataSource.transaction(async transactionalEntityManager => { const new_node_visitor = new NodeVisitorEntity(); new_node_visitor.applicant = data.applicant; new_node_visitor.applicant_department = data.applicant_department; new_node_visitor.apply_date = moment(data.apply_date).format("YYYY-MM-DD"); // new_node_visitor.apply_date = new Date(data.apply_date).toLocaleDateString(); new_node_visitor.code = data.code; new_node_visitor.visitor_type = data.visitor_type; new_node_visitor.area = data.area; new_node_visitor.visitor_unit = data.visitor_unit; new_node_visitor.visitor_number = data.visitor_number; new_node_visitor.transport = data.transport; new_node_visitor.plate_no = data.plate_no; // new_node_visitor.start_date = new Date(data.start_date).toLocaleDateString(); new_node_visitor.start_date = moment(data.start_date).format("YYYY-MM-DD"); // new_node_visitor.end_date = new Date(data.end_date).toLocaleDateString(); new_node_visitor.end_date = moment(data.end_date).format("YYYY-MM-DD"); new_node_visitor.visited_staff = data.visited_staff; new_node_visitor.visited_deparment = data.visited_deparment; new_node_visitor.purpose = data.purpose; new_node_visitor.electronics = data.electronics; // new_node_visitor.electronics = JSON.stringify(data.electronics); // new_node_visitor.visitor_list = data.visitor_list; new_node_visitor.may_access_sensitive_info = data.may_access_sensitive_info; const result = await transactionalEntityManager.save(new_node_visitor); await bluebird.each(data.visitor_list, async (item) => { const new_node_other_visitor = new NodeOtherVisitorEntity(); new_node_other_visitor.name = item.name; new_node_other_visitor.identity_card_no = item.identity_card_no; new_node_other_visitor.nationality_type = item.nationality_type; new_node_other_visitor.nationality = item.nationality; }) return { statusCode: 201, data: result }; }); } }