import { v4 as uuid } from 'uuid'; import * as fs from 'fs'; import * as path from 'path'; import xlsx from 'node-xlsx'; // import { fileClient } from '../lib/oss'; // import redis from '../redis'; import { getRepository } from 'typeorm'; // import { TeamEntity } from '../team/team.entity'; // import { MemberEntity } from '../member/member.entity'; import { eight_hour } from './const'; import { transRowXlsx } from './xlsx'; import { Logger } from '@nestjs/common'; import redis from 'src/redis'; import { path_download } from './base.path'; export function formatArgs(args: any) { const newArgs = { ...args, before: args.before && new Buffer(args.before, 'base64').toString(), after: args.after && new Buffer(args.after, 'base64').toString(), }; return newArgs; } export const changeName = (fileName: string) => { // var fileName = fileName.replace(/\s+/g, '-') // const fileName = fileName; const dotPosition = fileName.lastIndexOf('.'); let name = fileName; if (dotPosition > 0) { name = fileName.substring(0, dotPosition); } let extension = ''; if (dotPosition !== -1) { extension = fileName.substring(dotPosition); } // return Date.now() + extension; return name + '-' + Date.now() + extension; }; // export const createXlsx = (base, data, token, name, columns) => { // return setTimeout(async () => { // try { // columns = columns.filter(column => column !== '背景信息'); // base = base.map(base1 => { // if ( // base1 === '是否愿意参加区域决赛前培训' && // columns.includes('是否愿意参加总决赛前培训') // ) { // return '是否愿意参加总决赛前培训'; // } // if (base1 === '比赛结果' && columns.includes('区域决赛结果')) { // return '区域决赛结果'; // } // if (base1 === '比赛结果' && columns.includes('总决赛结果')) { // return '总决赛结果'; // } // return base1; // }); // const new_data = data.map(item => { // const new_item = columns.map(column => { // let column_index = 0; // base.forEach((rr, index) => { // if (rr === column) { // column_index = index; // } // }); // return item[column_index]; // }); // return new_item; // }); // const file_name = '/xlsx/' + token + uuid() + '.xlsx'; // const buffer = xlsx.build([ // { name: name || 'Sheet1', data: [columns, ...new_data] }, // ]); // const file_path = path.resolve(__dirname, '../puppeteer'); // const local_file_name = `${file_path}/${token}.xlsx`; // fs.writeFileSync(local_file_name, buffer); // await fileClient.put(file_name, local_file_name); // fs.unlinkSync(local_file_name); // await redis.set(token, file_name, 'EX', 3600); // } catch (e) { // console.log(`导出${name}错误`, e); // } // }, 100); // }; // export const getUserTeamId = async (user_id: string) => { // const user_team = await redis.get(`team:${user_id}`); // if (!user_team) { // const user_member = await getRepository(MemberEntity).findOne({ // owner_id: user_id, // }); // if (!user_member) { // throw new Error('用户不存在 team'); // } // await redis.set(`team:${user_id}`, user_member.team_id); // return user_member.team_id; // } // return user_team; // }; // export const getUserTeamIdNoThrow = async (user_id: string) => { // const user_team = await redis.get(`team:${user_id}`); // if (!user_team) { // const user_member = await getRepository(MemberEntity).findOne({ // owner_id: user_id, // }); // if (!user_member) { // return undefined; // } // await redis.set(`team:${user_id}`, user_member.team_id); // return user_member.team_id; // } // return user_team; // }; export const getEightTime = () => { return new Date(Date.now() + eight_hour); }; export const createXlsx = async (base, data, token, name, columns) => { return setTimeout(async () => { try { columns = columns.filter( column => column !== '操作' && column !== '底片' && column !== '照片' && column !== '抓拍照片' && column !== '头像', ); const new_data = data.map(item => { const new_item = columns.map(column => { let column_index; base.forEach((rr, index) => { if (rr === column) { column_index = index; } }); if (!column_index && column_index !== 0) { return ''; } if (item[column_index] === 0) { return item[column_index]; } return item[column_index] || ''; }); return new_item; }); // const file_name = '/xlsx/' + token + uuid() + '.xlsx'; const { new_data: trans_data, cols } = transRowXlsx([ columns, ...new_data, ]); const buffer = xlsx.build( [{ name: name || 'Sheet1', data: trans_data }], { '!cols': cols, }, ); // const file_path = './download'; const file_path = path.resolve(__dirname, path_download); const local_file_name = `${file_path}/${token}.xlsx`; fs.writeFileSync(local_file_name, buffer); await redis.set(token, local_file_name, 'EX', 3600); // return buffer; } catch (e) { Logger.error(`导出${name}错误`, e.message); } }, 100); };