You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
5.5 KiB
TypeScript

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);
};