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