From 27ac6eec765650a829d6964895500305746c0c77 Mon Sep 17 00:00:00 2001 From: Mr Swift Date: Wed, 16 Oct 2024 19:05:32 +0330 Subject: [PATCH] Set new structure --- server/controllers/serialsExelController.js | 78 ++++++++++++++---- server/models/Serials.js | 10 ++- server/plugins/asanServiceSerialChecker.js | 1 + .../1/code-guaranty-19-2-1403-site.xlsx | Bin 0 -> 11092 bytes 4 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 static/uploads/serials/1/code-guaranty-19-2-1403-site.xlsx diff --git a/server/controllers/serialsExelController.js b/server/controllers/serialsExelController.js index 1e3cff7..08bb750 100644 --- a/server/controllers/serialsExelController.js +++ b/server/controllers/serialsExelController.js @@ -2,9 +2,10 @@ const fs = require('fs') const { body, validationResult } = require('express-validator') const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') const { _sr } = require('../plugins/serverResponses') -const { serialChecker } = require('../plugins/asanServiceSerialChecker') const _faSr = _sr.fa - +// eslint-disable-next-line import/order +const readXlsxFile = require('read-excel-file/node') +const Serial = require('../models/Serials') const guaranteeSerialsPath = './static/uploads/serials' const productSerialsPath = './static/uploads/serials_products' @@ -24,11 +25,13 @@ module.exports.addExel = [ checkValidations(validationResult), async (req, res) => { if (!req.files?.file) return res.status(422).json({ validation: { file: { msg: 'فایل را اضافه کنید' } } }) - if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) - return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) + if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) const file = req.files.file const { type, g } = req.body try { + const exelFile = await readXlsxFile(Buffer.from(file.data)); + const data = await creator(exelFile, type, g) + const path = (type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath) + `/${g}` const files = await fs.readdirSync(path) for await (const item of files) { @@ -37,7 +40,10 @@ module.exports.addExel = [ await file.mv(`${path}/${file.name}`) - return res.json({ message: _faSr.response.success_save }) + // res.status(201).json({ msg: _sr.fa.response.success_save, data }) + res.status(201).json(data) + + } catch (err) { return res500(res, err) } @@ -66,6 +72,7 @@ module.exports.getAllExels = [ } ] + module.exports.removeExel = [ (req, res) => { const type = req.query?.type @@ -100,22 +107,59 @@ module.exports.checkSerial = [ async (req, res) => { try { const { serial, type, g } = req.body - const serialStatus = await serialChecker(serial, type, g) - console.log(serialStatus); + const code = serial.toString().trim().toLowerCase() - let okMsg - if (type === 'guaranteeSerial') okMsg = serialStatus - else okMsg = serialStatus - - let errMsg - if (type === 'guaranteeSerial') errMsg = 'شماره سریال گارانتی معتبر نیست.' - else errMsg = 'شماره سریال کالا معتبر نیست.' + const serialStatus = await Serial.findOne({ + code, + type, + kind: g + }) + if(!serialStatus){ + res404(res, 'این کد در سامانه وجود ندارد') + }else{ + res.status(200).json({message:serialStatus.message}) + } - if (serialStatus) return res.json({ message: okMsg }) - else return res404(res, errMsg) } catch (e) { console.log(e) - return res404(res, e) + return res500(res, e) } } ] + +const creator = (exel, type, g) => { + return new Promise(async (resolve, reject) => { + try { + for (const row of exel) { + // eslint-disable-next-line no-constant-condition + const code = row[1].toString().trim().toLowerCase() + const serial = await Serial.findOne({ code }) + if (serial) { + console.info("Repeated serial ", row[1]) + + serial.model = row[0] + serial.message = row[2] + serial.type = type + serial.kind = g + serial.save() + } else { + await Serial.create( + { + code, + model: row[0], + message: row[2], + type, + kind: g + } + ) + } + + } + resolve("end") + } catch (error) { + console.log(error); + + reject(error.message) + } + }) +} \ No newline at end of file diff --git a/server/models/Serials.js b/server/models/Serials.js index a06db2d..2ee6568 100644 --- a/server/models/Serials.js +++ b/server/models/Serials.js @@ -4,7 +4,15 @@ const SerialSchema = mongoose.Schema({ code:String, model:String, - message:String + message:String, + type:{ + type:String, + enum:['guaranteeSerial', 'orginality'] + }, + kind:{ + type:Number, + enum:[2,1] + } }) diff --git a/server/plugins/asanServiceSerialChecker.js b/server/plugins/asanServiceSerialChecker.js index 359be64..344bfec 100644 --- a/server/plugins/asanServiceSerialChecker.js +++ b/server/plugins/asanServiceSerialChecker.js @@ -48,3 +48,4 @@ const serialChecker = (serial, type = 'guaranteeSerial', g = 1) => { }; module.exports.serialChecker = serialChecker + diff --git a/static/uploads/serials/1/code-guaranty-19-2-1403-site.xlsx b/static/uploads/serials/1/code-guaranty-19-2-1403-site.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..706ff461414866571fcd362446a0098306e179ad GIT binary patch literal 11092 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 S7XUzp{sN%EyPfXm+y4LvPPuph literal 0 HcmV?d00001