diff --git a/src/models/ChainTask.ts b/src/models/ChainTask.ts index 8a80eba..ea8a5be 100644 --- a/src/models/ChainTask.ts +++ b/src/models/ChainTask.ts @@ -8,6 +8,7 @@ import { generateRandomBytes32 } from 'utils/wallet.util' import { BaseModule } from './Base' import { ReqTaskStatus, RequestTask, RequestTaskClass, TaskType } from './RequestTask' +import { groupNftMintData } from 'utils/excel.util' export enum TaskStatus { NOTSTART = 0, @@ -158,7 +159,7 @@ export class ChainTaskClass extends BaseModule { } else { count += 1 } - if (!subTask || count >= MAX_BATCH_REQ_COUNT) { + if (!subTask || count > MAX_BATCH_REQ_COUNT) { index += 1 count = sub.type === TaskType.MINT_NFT && sub.amount && parseInt(sub.amount) > 1 ? parseInt(sub.amount) : 1 subTask = new RequestTask({ diff --git a/src/utils/excel.util.ts b/src/utils/excel.util.ts index c25740d..de491b3 100644 --- a/src/utils/excel.util.ts +++ b/src/utils/excel.util.ts @@ -1,3 +1,4 @@ +import { MAX_BATCH_REQ_COUNT } from 'common/Constants' import xlsx from 'node-xlsx' export function excelToJson(filePath: string) { @@ -16,9 +17,31 @@ export function excelToJson(filePath: string) { } let obj = {} for (let j = 0, k = header.length; j < k; j++) { - obj[header[j]] = row[j] + obj[header[j]] = header[j] === 'type' ? row[j] | 0 : row[j] } arr.push(obj) } return arr } + +export function groupNftMintData(datas: any[]) { + let dataMap = new Map() + let results: any[] = [] + for (let data of datas) { + if (dataMap.has(data.to)) { + let tempData = dataMap.get(data.to) + if (tempData.tokenIds.length >= MAX_BATCH_REQ_COUNT) { + results.push(tempData) + data.tokenIds = [data.tokenid || data.tokenId] + dataMap.set(data.to, data) + } else { + tempData.tokenIds.push(data.tokenid || data.tokenId) + } + } else { + data.tokenIds = [data.tokenid || data.tokenId] + dataMap.set(data.to, data) + } + } + results = results.concat([...dataMap.values()]) + return results +}